diff --git a/peerconn.go b/peerconn.go
index <HASH>..<HASH> 100644
--- a/peerconn.go
+++ b/peerconn.go
@@ -1107,7 +1107,9 @@ func (c *PeerConn) mainReadLoop() (err error) {
 			c.peerChoking = true
 			// We can now reset our interest. I think we do this after setting the flag in case the
 			// peerImpl updates synchronously (webseeds?).
-			c.updateRequests("choked")
+			if !c.actualRequestState.Requests.IsEmpty() {
+				c.updateRequests("choked")
+			}
 			c.updateExpectingChunks()
 		case pp.Unchoke:
 			if !c.peerChoking {
@@ -1133,7 +1135,9 @@ func (c *PeerConn) mainReadLoop() (err error) {
 					c.fastEnabled())
 				torrent.Add("requestsPreservedThroughChoking", int64(preservedCount))
 			}
-			c.updateRequests("unchoked")
+			if !c.t._pendingPieces.IsEmpty() {
+				c.updateRequests("unchoked")
+			}
 			c.updateExpectingChunks()
 		case pp.Interested:
 			c.peerInterested = true
Reduce idle request updates due to choke and unchoke messages