diff --git a/addrmgr/addrmanager.go b/addrmgr/addrmanager.go
index 33c6ab13..f4e18479 100644
--- a/addrmgr/addrmanager.go
+++ b/addrmgr/addrmanager.go
@@ -338,6 +338,7 @@ func (a *AddrManager) getTriedBucket(netAddr *btcwire.NetAddress) int {
 // as a goroutine.
 func (a *AddrManager) addressHandler() {
 	dumpAddressTicker := time.NewTicker(dumpAddressInterval)
+	defer dumpAddressTicker.Stop()
 out:
 	for {
 		select {
@@ -348,7 +349,6 @@ out:
 			break out
 		}
 	}
-	dumpAddressTicker.Stop()
 	a.savePeers()
 	a.wg.Done()
 	log.Trace("Address handler done")
diff --git a/cpuminer.go b/cpuminer.go
index b8667b38..618e5489 100644
--- a/cpuminer.go
+++ b/cpuminer.go
@@ -72,6 +72,7 @@ func (m *CPUMiner) speedMonitor() {
 	var hashesPerSec float64
 	var totalHashes uint64
 	ticker := time.NewTicker(time.Second * hpsUpdateSecs)
+	defer ticker.Stop()
 
 out:
 	for {
@@ -261,6 +262,7 @@ func (m *CPUMiner) generateBlocks(quit chan struct{}) {
 	// Start a ticker which is used to signal checks for stale work and
 	// updates to the speed monitor.
 	ticker := time.NewTicker(time.Second * hashUpdateSecs)
+	defer ticker.Stop()
 out:
 	for {
 		// Quit when the miner is stopped.
@@ -318,7 +320,6 @@ out:
 		}
 	}
 
-	ticker.Stop()
 	m.workerWg.Done()
 	minrLog.Tracef("Generate blocks worker done")
 }
diff --git a/peer.go b/peer.go
index 394bba49..bdb63ded 100644
--- a/peer.go
+++ b/peer.go
@@ -1557,6 +1557,7 @@ func (p *peer) queueHandler() {
 	pendingMsgs := list.New()
 	invSendQueue := list.New()
 	trickleTicker := time.NewTicker(time.Second * 10)
+	defer trickleTicker.Stop()
 
 	// We keep the waiting flag so that we know if we have a message queued
 	// to the outHandler or not.  We could use the presence of a head of