diff -r d8eeba570d70 -r 82b3cdf6ca6b AgentFeeder.h
--- a/AgentFeeder.h
+++ b/AgentFeeder.h
@@ -56,7 +56,7 @@
 
     typedef std::vector<NoteHypothesis> Hypotheses;
 
-    Hypotheses getAcceptedHypotheses() const {
+    const Hypotheses &getAcceptedHypotheses() const {
         return m_accepted;
     }
 
diff -r d8eeba570d70 -r 82b3cdf6ca6b CepstralPitchTracker.cpp
--- a/CepstralPitchTracker.cpp
+++ b/CepstralPitchTracker.cpp
@@ -53,6 +53,7 @@
     m_binFrom(0),
     m_binTo(0),
     m_bins(0),
+    m_nAccepted(0),
     m_feeder(0)
 {
 }
@@ -243,6 +244,7 @@
 {
     delete m_feeder;
     m_feeder = new AgentFeeder();
+    m_nAccepted = 0;
 }
 
 void
@@ -268,11 +270,24 @@
     fs[1].push_back(nf);
 }
 
+void
+CepstralPitchTracker::addNewFeatures(FeatureSet &fs)
+{
+    int n = m_feeder->getAcceptedHypotheses().size();
+    if (n == m_nAccepted) return;
+
+    AgentFeeder::Hypotheses accepted = m_feeder->getAcceptedHypotheses();
+
+    for (int i = m_nAccepted; i < n; ++i) {
+        addFeaturesFrom(accepted[i], fs);
+    }
+
+    m_nAccepted = n;
+}
+
 CepstralPitchTracker::FeatureSet
 CepstralPitchTracker::process(const float *const *inputBuffers, RealTime timestamp)
 {
-    FeatureSet fs;
-
     double *rawcep = new double[m_blockSize];
     double magmean = Cepstrum(m_blockSize).process(inputBuffers[0], rawcep);
 
@@ -295,7 +310,7 @@
 
     if (maxbin < 0) {
         delete[] data;
-        return fs;
+        return FeatureSet();
     }
 
     double nextPeakVal = 0.0;
@@ -321,6 +336,8 @@
 //        std::cerr << "magmean = " << magmean << ", confidence = " << confidence << std::endl;
     }
 
+    delete[] data;
+
     NoteHypothesis::Estimate e;
     e.freq = peakfreq;
     e.time = timestamp;
@@ -328,7 +345,8 @@
 
     m_feeder->feed(e);
 
-    delete[] data;
+    FeatureSet fs;
+    addNewFeatures(fs);
     return fs;
 }
 
@@ -337,11 +355,7 @@
 {
     m_feeder->finish();
 
-    AgentFeeder::Hypotheses accepted = m_feeder->getAcceptedHypotheses();
-
     FeatureSet fs;
-    for (int i = 0; i < accepted.size(); ++i) {
-        addFeaturesFrom(accepted[i], fs);
-    }
+    addNewFeatures(fs);
     return fs;
 }
diff -r d8eeba570d70 -r 82b3cdf6ca6b CepstralPitchTracker.h
--- a/CepstralPitchTracker.h
+++ b/CepstralPitchTracker.h
@@ -80,8 +80,11 @@
     int m_binTo;
     int m_bins; // count of "interesting" bins, those returned in m_cepOutput
 
+    int m_nAccepted;
+
     AgentFeeder *m_feeder;
     void addFeaturesFrom(NoteHypothesis h, FeatureSet &fs);
+    void addNewFeatures(FeatureSet &fs);
 };
 
 #endif
