Index: trunk/BNC/src/RTCM3/RTCM3coDecoder.cpp
===================================================================
--- trunk/BNC/src/RTCM3/RTCM3coDecoder.cpp	(revision 6454)
+++ trunk/BNC/src/RTCM3/RTCM3coDecoder.cpp	(revision 6455)
@@ -262,9 +262,9 @@
 void RTCM3coDecoder::sendResults() {
 
-  QList<t_orbCorr> orbCorrections;
-  QList<t_clkCorr> clkCorrections;
-
-  // Loop over all satellites (GPS and Glonass)
-  // ------------------------------------------
+  QList<t_orbCorr>& orbCorrections = _orbCorrections[_lastTime];
+  QList<t_clkCorr>& clkCorrections = _clkCorrections[_lastTime];
+
+  // Orbit and clock corrections of all satellites
+  // ---------------------------------------------
   for (unsigned ii = 0; ii < CLOCKORBIT_NUMGPS + _clkOrb.NumberOfSat[CLOCKORBIT_SATGLONASS]; ii++) {
     char sysCh = ' ';
@@ -304,4 +304,6 @@
     }
 
+    // Clock Corrections
+    // -----------------
     if ( _clkOrb.messageType == COTYPE_GPSCOMBINED     ||
          _clkOrb.messageType == COTYPE_GLONASSCOMBINED ||
@@ -331,6 +333,6 @@
   }
 
-  // Loop over all satellites (GPS and Glonass)
-  // ------------------------------------------
+  // Code Biases
+  // -----------
   QList<t_satBias> satBiases;
   for (unsigned ii = 0; ii < CLOCKORBIT_NUMGPS + _codeBias.NumberOfSat[CLOCKORBIT_SATGLONASS]; ii++) {
@@ -354,21 +356,30 @@
   }
 
-  if (orbCorrections.size() > 0) {
-    emit newOrbCorrections(orbCorrections);
-  }
-  if (clkCorrections.size() > 0) {
-    emit newClkCorrections(clkCorrections);
-  }
+  // Dump all older epochs
+  // ---------------------
+  QMutableMapIterator<bncTime, QList<t_orbCorr> > itOrb(_orbCorrections);
+  while (itOrb.hasNext()) {
+    itOrb.next();
+    if (itOrb.key() < _lastTime) {
+      emit newOrbCorrections(itOrb.value());
+      if (_out) {
+        t_orbCorr::writeEpoch(_out, itOrb.value());
+      }
+      itOrb.remove();
+    } 
+  }
+  QMutableMapIterator<bncTime, QList<t_clkCorr> > itClk(_clkCorrections);
+  while (itClk.hasNext()) {
+    itClk.next();
+    if (itClk.key() < _lastTime) {
+      emit newClkCorrections(itClk.value());
+      if (_out) {
+        t_clkCorr::writeEpoch(_out, itClk.value());
+      }
+      itClk.remove();
+    } 
+  }
+
   if (_out) {
-    QListIterator<t_orbCorr> itOrb(orbCorrections);
-    while (itOrb.hasNext()) {
-      const t_orbCorr& orbCorr = itOrb.next();
-      *_out << orbCorr.toLine();
-    }
-    QListIterator<t_clkCorr> itClk(clkCorrections);
-    while (itClk.hasNext()) {
-      const t_clkCorr& clkCorr = itClk.next();
-      *_out << clkCorr.toLine();
-    }
     _out->flush();
   }
Index: trunk/BNC/src/RTCM3/RTCM3coDecoder.h
===================================================================
--- trunk/BNC/src/RTCM3/RTCM3coDecoder.h	(revision 6454)
+++ trunk/BNC/src/RTCM3/RTCM3coDecoder.h	(revision 6455)
@@ -44,7 +44,6 @@
 
  signals:
-  void newOrbCorrections(QList<t_orbCorr> orbCorr);
-  void newClkCorrections(QList<t_clkCorr> clkCorr);
-  void newBiases(QList<t_satBias> biases);
+  void newOrbCorrections(QList<t_orbCorr>);
+  void newClkCorrections(QList<t_clkCorr>);
   void newMessage(QByteArray msg, bool showOnScreen);
   void providerIDChanged(QString staID);
@@ -66,4 +65,6 @@
   bncTime        _lastTime;
   QMap<std::string, unsigned short> _IODs;
+  QMap<bncTime, QList<t_orbCorr> >  _orbCorrections;
+  QMap<bncTime, QList<t_clkCorr> >  _clkCorrections;
 };
 
