                     }
                 }
                 
+                describe("when interrupted") {
+                    
+                    beforeEach {
+                        futureIndex = 0
+                        futureGenerator = alternateSucceedAndFailGenerator
+                        timeInterval = 0.1
+                        
+                        testStart = Date()
+                        subject.startPeriodicFetch()
+                        subject.stopPeriodicFetch()
+                    }
+                    
+                    it("should stop emitting data after being told to stop fetching") {
+                        expect(streamStates.count).toEventually(equal(1))
+                        expect(streamStates.count).toNotEventually(equal(2))
+                        expect(streamStates.last).to(equal(.noData))
+                        expect(subject.isFetching).to(equal(false))
+                    }
+                }
+                
             }
             
         }

            promise.resolve(futureIndex)
            futureIndex += 1
            return promise.future
        }
        
        describe("PeriodicFetcher") {

            
            describe("periodic fetching") {
                var testStart: Date!
                
                describe("when uninterupted") {
                    beforeEach {
                        futureIndex = 0
                        futureGenerator = alternateSucceedAndFailGenerator
                        timeInterval = 0.3
                        
                        testStart = Date()
