diff --git a/ethstats/ethstats.go b/ethstats/ethstats.go
index b87f5ab78895751258cd0b853d19e6c446eb1086..a5fa84468e0777ba8b97fe10400f3b85682cada8 100644
--- a/ethstats/ethstats.go
+++ b/ethstats/ethstats.go
@@ -145,13 +145,21 @@ func (s *Service) loop() {
 					glog.V(logger.Warn).Infof("Full stats report failed: %v", err)
 				}
 			case head := <-headSub.Chan():
+				if head == nil { // node stopped
+					conn.Close()
+					return
+				}
 				if err = s.reportBlock(out, head.Data.(core.ChainHeadEvent).Block); err != nil {
 					glog.V(logger.Warn).Infof("Block stats report failed: %v", err)
 				}
 				if err = s.reportPending(out); err != nil {
 					glog.V(logger.Warn).Infof("Post-block transaction stats report failed: %v", err)
 				}
-			case <-txSub.Chan():
+			case ev := <-txSub.Chan():
+				if ev == nil { // node stopped
+					conn.Close()
+					return
+				}
 				// Exhaust events to avoid reporting too frequently
 				for exhausted := false; !exhausted; {
 					select {