Index: /trunk/BNC/src/RTCM3/RTCM3Decoder.cpp
===================================================================
--- /trunk/BNC/src/RTCM3/RTCM3Decoder.cpp	(revision 6431)
+++ /trunk/BNC/src/RTCM3/RTCM3Decoder.cpp	(revision 6432)
@@ -74,12 +74,8 @@
   _checkMountPoint = settings.value("miscMount").toString();
 
-  connect(this, SIGNAL(newGPSEph(gpsephemeris*)), 
-          BNC_CORE, SLOT(slotNewGPSEph(gpsephemeris*)));
-  connect(this, SIGNAL(newGlonassEph(glonassephemeris*, const QString&)), 
-          BNC_CORE, SLOT(slotNewGlonassEph(glonassephemeris*, const QString&)));
-  connect(this, SIGNAL(newGalileoEph(galileoephemeris*)), 
-          BNC_CORE, SLOT(slotNewGalileoEph(galileoephemeris*)));
-  connect(this, SIGNAL(newSBASEph(sbasephemeris*)), 
-          BNC_CORE, SLOT(slotNewSBASEph(sbasephemeris*)));
+  connect(this, SIGNAL(newGPSEph(t_ephGPS)),     BNC_CORE, SLOT(slotNewGPSEph(t_ephGPS)));
+  connect(this, SIGNAL(newGlonassEph(t_ephGlo)), BNC_CORE, SLOT(slotNewGlonassEph(t_ephGlo)));
+  connect(this, SIGNAL(newGalileoEph(t_ephGal)), BNC_CORE, SLOT(slotNewGalileoEph(t_ephGal)));
+  connect(this, SIGNAL(newSBASEph(t_ephSBAS)),   BNC_CORE, SLOT(slotNewSBASEph(t_ephSBAS)));
 
   // Mode can be either observations or corrections
@@ -378,5 +374,6 @@
           else if (rr == 1019) {
             decoded = true;
-            emit newGPSEph(new gpsephemeris(parser.ephemerisGPS));
+            t_ephGPS eph; eph.set(&parser.ephemerisGPS);
+            emit newGPSEph(eph);
           }
     
@@ -386,5 +383,6 @@
                                  parser.ephemerisGLONASS.almanac_number <= PRN_GLONASS_NUM) {
             decoded = true;
-            emit newGlonassEph(new glonassephemeris(parser.ephemerisGLONASS), _staID);
+            t_ephGlo eph; eph.set(&parser.ephemerisGLONASS);
+            emit newGlonassEph(eph);
           }
 
@@ -393,5 +391,6 @@
           else if (rr == 1045 || rr == 1046) {
             decoded = true;
-            emit newGalileoEph(new galileoephemeris(parser.ephemerisGALILEO));
+            t_ephGal eph; eph.set(&parser.ephemerisGALILEO);
+            emit newGalileoEph(eph);
           }
 
@@ -400,5 +399,6 @@
           else if (rr == 1044) {
             decoded = true;
-            emit newGPSEph(new gpsephemeris(parser.ephemerisGPS));
+            t_ephGPS eph; eph.set(&parser.ephemerisGPS);
+            emit newGPSEph(eph);
           }
 
@@ -407,5 +407,6 @@
           else if (rr == 1043) {
             decoded = true;
-            emit newSBASEph(new sbasephemeris(parser.ephemerisSBAS));
+            t_ephSBAS eph; eph.set(&parser.ephemerisSBAS);
+            emit newSBASEph(eph);
           }
         }
Index: /trunk/BNC/src/RTCM3/RTCM3Decoder.h
===================================================================
--- /trunk/BNC/src/RTCM3/RTCM3Decoder.h	(revision 6431)
+++ /trunk/BNC/src/RTCM3/RTCM3Decoder.h	(revision 6432)
@@ -32,4 +32,5 @@
 #include "RTCM3coDecoder.h"
 #include "bncrawfile.h"
+#include "ephemeris.h"
 
 extern "C" {
@@ -47,8 +48,8 @@
  signals:
   void newMessage(QByteArray msg,bool showOnScreen);
-  void newGPSEph(gpsephemeris* gpseph);
-  void newGlonassEph(glonassephemeris* glonasseph, const QString& staID);
-  void newSBASEph(sbasephemeris* sbaseph);
-  void newGalileoEph(galileoephemeris* galileoeph);
+  void newGPSEph(t_ephGPS eph);
+  void newGlonassEph(t_ephGlo eph);
+  void newSBASEph(t_ephSBAS eph);
+  void newGalileoEph(t_ephGal eph);
 
  private:
Index: /trunk/BNC/src/bnccaster.cpp
===================================================================
--- /trunk/BNC/src/bnccaster.cpp	(revision 6431)
+++ /trunk/BNC/src/bnccaster.cpp	(revision 6432)
@@ -276,8 +276,4 @@
   qRegisterMetaType<t_satObs>("t_satObs");
   qRegisterMetaType< QList<t_satObs> >("QList<t_satObs>");
-  qRegisterMetaType<gpsephemeris>("gpsephemeris");
-  qRegisterMetaType<glonassephemeris>("glonassephemeris");
-  qRegisterMetaType<galileoephemeris>("galileoephemeris");
-  qRegisterMetaType<sbasephemeris>("sbasephemeris");
 
   connect(getThread, SIGNAL(newObs(QByteArray, QList<t_satObs>)),
Index: /trunk/BNC/src/bnccore.cpp
===================================================================
--- /trunk/BNC/src/bnccore.cpp	(revision 6431)
+++ /trunk/BNC/src/bnccore.cpp	(revision 6432)
@@ -79,22 +79,4 @@
 #endif
 
-  // Lists of Ephemeris
-  // ------------------
-  for (int ii = PRN_GPS_START; ii <= PRN_GPS_END; ii++) {
-    _gpsEph[ii-PRN_GPS_START] = 0;
-  }
-  for (int ii = PRN_QZSS_START; ii <= PRN_QZSS_END; ii++) {
-    _qzssEph[ii-PRN_QZSS_START] = 0;
-  }
-  for (int ii = PRN_GLONASS_START; ii <= PRN_GLONASS_END; ii++) {
-    _glonassEph[ii-PRN_GLONASS_START] = 0;
-  }
-  for (int ii = PRN_GALILEO_START; ii <= PRN_GALILEO_END; ii++) {
-    _galileoEph[ii-PRN_GALILEO_START] = 0;
-  }
-  for (int ii = PRN_SBAS_START; ii <= PRN_SBAS_END; ii++) {
-    _sbasEph[ii-PRN_SBAS_START] = 0;
-  }
-
   // Eph file(s)
   // -----------
@@ -132,4 +114,9 @@
   qRegisterMetaType< QVector<double> >("QVector<double>");
   qRegisterMetaType<bncTime>("bncTime");
+  qRegisterMetaType<t_ephGPS>("t_ephGPS");
+  qRegisterMetaType<t_ephGlo>("t_ephGlo");
+  qRegisterMetaType<t_ephGal>("t_ephGal");
+  qRegisterMetaType<t_ephSBAS>("t_ephSBAS");
+  qRegisterMetaType<t_ephCompass>("t_ephCompass");
 }
 
@@ -148,19 +135,4 @@
     delete _ephStreamGlonass;
     delete _ephFileGlonass;
-  }
-  for (int ii = PRN_GPS_START; ii <= PRN_GPS_END; ii++) {
-    delete _gpsEph[ii-PRN_GPS_START];
-  }
-  for (int ii = PRN_QZSS_START; ii <= PRN_QZSS_END; ii++) {
-    delete _qzssEph[ii-PRN_QZSS_START];
-  }
-  for (int ii = PRN_GLONASS_START; ii <= PRN_GLONASS_END; ii++) {
-    delete _glonassEph[ii-PRN_GLONASS_START];
-  }
-  for (int ii = PRN_GALILEO_START; ii <= PRN_GALILEO_END; ii++) {
-    delete _galileoEph[ii-PRN_GALILEO_START];
-  }
-  for (int ii = PRN_SBAS_START; ii <= PRN_SBAS_END; ii++) {
-    delete _sbasEph[ii-PRN_SBAS_START];
   }
 
@@ -227,35 +199,17 @@
 // New GPS Ephemeris 
 ////////////////////////////////////////////////////////////////////////////
-void t_bncCore::slotNewGPSEph(gpsephemeris* gpseph) {
+void t_bncCore::slotNewGPSEph(t_ephGPS eph) {
 
   QMutexLocker locker(&_mutex);
 
-  gpsephemeris copy_gpseph = *gpseph;
-  emit newEphGPS(copy_gpseph);
+  emit newGPSEph(eph);
 
   printEphHeader();
 
-  gpsephemeris** ee = &_gpsEph[gpseph->satellite-1];
-  if      (PRN_GPS_START <= gpseph->satellite && gpseph->satellite <= PRN_GPS_END) {
-    ee = &_gpsEph[gpseph->satellite  - PRN_GPS_START];
-  }
-  else if (PRN_QZSS_START <= gpseph->satellite && gpseph->satellite <= PRN_QZSS_END) {
-    ee = &_qzssEph[gpseph->satellite - PRN_QZSS_START];
-  }
-
-  if ( *ee != 0 && gpseph->GPSweek == (*ee)->GPSweek && gpseph->TOC == (*ee)->TOC ) {
-    checkEphemeris(*ee, gpseph);
-  }
-
-  if ( *ee == 0                         || 
-       gpseph->GPSweek > (*ee)->GPSweek ||
-       (gpseph->GPSweek == (*ee)->GPSweek && gpseph->TOC > (*ee)->TOC) ) {
-    delete *ee;
-    *ee = gpseph;
-    printGPSEph(gpseph, true);
+  if (_ephUser.putNewEph(&eph) == success) {
+    printEph(eph, true);
   }
   else {
-    printGPSEph(gpseph, false);
-    delete gpseph;
+    printEph(eph, false);
   }
 }
@@ -263,45 +217,17 @@
 // New Glonass Ephemeris
 ////////////////////////////////////////////////////////////////////////////
-void t_bncCore::slotNewGlonassEph(glonassephemeris* glonasseph, const QString& staID) {
+void t_bncCore::slotNewGlonassEph(t_ephGlo eph) {
 
   QMutexLocker locker(&_mutex);
 
-  // Check wrong Ephemerides
-  // -----------------------
-  if (glonasseph->x_pos == 0.0 && 
-      glonasseph->y_pos == 0.0 && 
-      glonasseph->z_pos == 0.0) {
-    delete glonasseph;
-    return;
-  } 
-
-  glonassephemeris copy_glonasseph = *glonasseph;
-  emit newEphGlonass(copy_glonasseph);
+  emit newGlonassEph(eph);
 
   printEphHeader();
 
-  glonassephemeris** ee = &_glonassEph[glonasseph->almanac_number-1];
-
-  int wwOld, towOld, wwNew, towNew;
-  if (*ee != 0) {
-    wwOld  = (*ee)->GPSWeek;
-    towOld = (*ee)->GPSTOW; 
-    updatetime(&wwOld, &towOld, (*ee)->tb*1000, 0);  // Moscow -> GPS
-
-    wwNew  = glonasseph->GPSWeek;
-    towNew = glonasseph->GPSTOW; 
-    updatetime(&wwNew, &towNew, glonasseph->tb*1000, 0); // Moscow -> GPS
-  }
-
-  if ( *ee == 0      || 
-       wwNew > wwOld ||
-       (wwNew == wwOld && towNew > towOld) ) {
-    delete *ee;
-    *ee = glonasseph;
-    printGlonassEph(glonasseph, true, staID);
+  if (_ephUser.putNewEph(&eph) == success) {
+    printEph(eph, true);
   }
   else {
-    printGlonassEph(glonasseph, false, staID);
-    delete glonasseph;
+    printEph(eph, false);
   }
 }
@@ -309,36 +235,38 @@
 // New Galileo Ephemeris
 ////////////////////////////////////////////////////////////////////////////
-void t_bncCore::slotNewGalileoEph(galileoephemeris* galileoeph) {
+void t_bncCore::slotNewGalileoEph(t_ephGal eph) {
 
   QMutexLocker locker(&_mutex);
 
-  galileoephemeris copy_galileoeph = *galileoeph;
-  emit newEphGalileo(copy_galileoeph);
+  emit newGalileoEph(eph);
 
   printEphHeader();
 
-  int galIndex = galileoeph->satellite;
-  /* GIOVE */
-  if(galIndex == 51) galIndex = 1;
-  else if(galIndex == 52) galIndex = 16;
-  if (galIndex < 0 || galIndex > PRN_GALILEO_END - PRN_GALILEO_START) {
-    emit( newMessage("Wrong Galileo Satellite Number", true) );
-    exit(1);
-  }
-
-  galileoephemeris** ee = &_galileoEph[galIndex];
-
-  if ( *ee == 0                       || 
-       galileoeph->Week > (*ee)->Week ||
-       (galileoeph->Week == (*ee)->Week && galileoeph->TOC > (*ee)->TOC) ) {
-    delete *ee;
-    *ee = galileoeph;
-    printGalileoEph(galileoeph, true);
+  if (_ephUser.putNewEph(&eph) == success) {
+    printEph(eph, true);
   }
   else {
-    printGalileoEph(galileoeph, false);
-    delete galileoeph;
-  }
-}
+    printEph(eph, false);
+  }
+}
+
+// New SBAS Ephemeris
+////////////////////////////////////////////////////////////////////////////
+void t_bncCore::slotNewSBASEph(t_ephSBAS eph) {
+
+  QMutexLocker locker(&_mutex);
+
+  emit newSBASEph(eph);
+
+  printEphHeader();
+
+  if (_ephUser.putNewEph(&eph) == success) {
+    printEph(eph, true);
+  }
+  else {
+    printEph(eph, false);
+  }
+}
+
 
 // Print Header of the output File(s)
@@ -393,25 +321,4 @@
     else {
       _ephFileNameGPS = ephFileNameGPS;
-    }
-
-    for (int ii = PRN_GPS_START; ii <= PRN_GPS_END; ii++) {
-      delete _gpsEph[ii-PRN_GPS_START];
-      _gpsEph[ii-PRN_GPS_START] = 0;
-    }
-    for (int ii = PRN_QZSS_START; ii <= PRN_QZSS_END; ii++) {
-      delete _qzssEph[ii-PRN_QZSS_START];
-      _qzssEph[ii-PRN_QZSS_START] = 0;
-    }
-    for (int ii = PRN_GLONASS_START; ii <= PRN_GLONASS_END; ii++) {
-      delete _glonassEph[ii-PRN_GLONASS_START];
-      _glonassEph[ii-PRN_GLONASS_START] = 0;
-    }
-    for (int ii = PRN_GALILEO_START; ii <= PRN_GALILEO_END; ii++) {
-      delete _galileoEph[ii-PRN_GALILEO_START];
-      _galileoEph[ii-PRN_GALILEO_START] = 0;
-    }
-    for (int ii = PRN_SBAS_START; ii <= PRN_SBAS_END; ii++) {
-      delete _sbasEph[ii-PRN_SBAS_START];
-      _sbasEph[ii-PRN_SBAS_START] = 0;
     }
 
@@ -523,46 +430,12 @@
 }
 
-// Print One GPS Ephemeris
-////////////////////////////////////////////////////////////////////////////
-void t_bncCore::printGPSEph(gpsephemeris* ep, bool printFile) {
-
-  t_ephGPS eph;
-  eph.set(ep);
+// Print One Ephemeris
+////////////////////////////////////////////////////////////////////////////
+void t_bncCore::printEph(const t_eph& eph, bool printFile) {
 
   QString strV2 = eph.toString(t_rnxNavFile::defaultRnxNavVersion2);
   QString strV3 = eph.toString(t_rnxObsHeader::defaultRnxObsVersion3);
 
-  printOutput(printFile, _ephStreamGPS, strV2, strV3);
-}
-
-// Print One Glonass Ephemeris
-////////////////////////////////////////////////////////////////////////////
-void t_bncCore::printGlonassEph(glonassephemeris* ep, bool printFile, const QString& /* staID */) {
-
-  t_ephGlo eph;
-  eph.set(ep);
-
-  QString strV2 = eph.toString(t_rnxNavFile::defaultRnxNavVersion2);
-  QString strV3 = eph.toString(t_rnxObsHeader::defaultRnxObsVersion3);
-
-  //// beg test Dirk
-  // QString hlp = strV2;
-  // cout << hlp.replace('\n', ' ').toAscii().data() << ' ' << staID.toAscii().data() << endl;
-  //// end test Dirk
-
   printOutput(printFile, _ephStreamGlonass, strV2, strV3);
-}
-
-// Print One Galileo Ephemeris
-////////////////////////////////////////////////////////////////////////////
-void t_bncCore::printGalileoEph(galileoephemeris* ep, bool printFile) {
-
-  t_ephGal eph;
-  eph.set(ep);
-
-  QString strV2 = eph.toString(t_rnxNavFile::defaultRnxNavVersion2);
-  QString strV3 = eph.toString(t_rnxObsHeader::defaultRnxObsVersion3);
-
-  printOutput(printFile, _ephStreamGalileo, strV2, strV3);
 }
 
@@ -764,17 +637,4 @@
 }
 
-// Check Ephemeris Consistency
-////////////////////////////////////////////////////////////////////////////
-void t_bncCore::checkEphemeris(gpsephemeris* oldEph, gpsephemeris* newEph) {
-  if (oldEph->clock_bias      != newEph->clock_bias      ||
-      oldEph->clock_drift     != newEph->clock_drift     ||
-      oldEph->clock_driftrate != newEph->clock_driftrate) {
-    QString msg = currentDateAndTimeGPS().toString(Qt::ISODate) +
-                  QString(" %1 EPH DIFFERS\n").arg(oldEph->satellite);
-    messagePrivate(msg.toAscii());
-  }
-}
-
-
 //
 ////////////////////////////////////////////////////////////////////////////
@@ -822,55 +682,2 @@
 }
 
-// New SBAS Ephemeris
-////////////////////////////////////////////////////////////////////////////
-void t_bncCore::slotNewSBASEph(sbasephemeris* sbaseph) {
-  QMutexLocker locker(&_mutex);
-
-  // Check wrong Ephemerides
-  // -----------------------
-  if (sbaseph->x_pos == 0.0 && 
-      sbaseph->y_pos == 0.0 && 
-      sbaseph->z_pos == 0.0) {
-    delete sbaseph;
-    return;
-  } 
-
-  sbasephemeris copy_sbaseph = *sbaseph;
-  emit newEphSBAS(copy_sbaseph);
-
-  printEphHeader();
-
-  sbasephemeris** ee = &_sbasEph[sbaseph->satellite - PRN_SBAS_START];
-
-  bool replace = false;
-  if (*ee != 0) {
-    bncTime oldTime((*ee)->GPSweek_TOE,   double((*ee)->TOE));
-    bncTime newTime(sbaseph->GPSweek_TOE, double(sbaseph->TOE));
-    if (newTime > oldTime) {
-      replace = true;
-    }
-  }
-
-  if ( *ee == 0 || replace) {
-    delete *ee;
-    *ee = sbaseph;
-    printSBASEph(sbaseph, true);
-  }
-  else {
-    printSBASEph(sbaseph, false);
-    delete sbaseph;
-  }
-}
-
-// Print One SBAS Ephemeris
-////////////////////////////////////////////////////////////////////////////
-void t_bncCore::printSBASEph(sbasephemeris* ep, bool printFile) {
-
-  t_ephSBAS eph;
-  eph.set(ep);
-
-  QString strV2 = eph.toString(t_rnxNavFile::defaultRnxNavVersion2);
-  QString strV3 = eph.toString(t_rnxObsHeader::defaultRnxObsVersion3);
-
-  printOutput(printFile, _ephStreamSBAS, strV2, strV3);
-}
Index: /trunk/BNC/src/bnccore.h
===================================================================
--- /trunk/BNC/src/bnccore.h	(revision 6431)
+++ /trunk/BNC/src/bnccore.h	(revision 6432)
@@ -31,5 +31,5 @@
 #include "bnccaster.h"
 #include "bncrawfile.h"
-#include "RTCM3/RTCM3Decoder.h"
+#include "bncephuser.h"
 
 class bncComb;
@@ -76,8 +76,8 @@
  public slots:
   void slotMessage(QByteArray msg, bool showOnScreen);
-  void slotNewGPSEph(gpsephemeris* gpseph);
-  void slotNewGlonassEph(glonassephemeris* glonasseph, const QString& staID);
-  void slotNewGalileoEph(galileoephemeris* galileoeph);
-  void slotNewSBASEph(sbasephemeris* sbaseph);
+  void slotNewGPSEph(t_ephGPS);
+  void slotNewGlonassEph(t_ephGlo);
+  void slotNewGalileoEph(t_ephGal);
+  void slotNewSBASEph(t_ephSBAS);
   void slotNewOrbCorrections(QList<t_orbCorr> orbCorr);
   void slotNewClkCorrections(QList<t_clkCorr> clkCorr);
@@ -86,8 +86,8 @@
  signals:
   void newMessage(QByteArray msg, bool showOnScreen);
-  void newEphGPS(gpsephemeris gpseph);
-  void newEphGlonass(glonassephemeris glonasseph);
-  void newEphGalileo(galileoephemeris galileoeph);
-  void newEphSBAS(sbasephemeris sbaseph);
+  void newGPSEph(t_ephGPS eph);
+  void newGlonassEph(t_ephGlo eph);
+  void newSBASEph(t_ephSBAS eph);
+  void newGalileoEph(t_ephGal eph);
   void newOrbCorrections(QList<t_orbCorr> orbCorr);
   void newClkCorrections(QList<t_clkCorr> clkCorr);
@@ -106,12 +106,8 @@
  private:
   void printEphHeader();
-  void printGPSEph(gpsephemeris* ep, bool printFile);
-  void printGlonassEph(glonassephemeris* ep, bool printFile, const QString& staID);
-  void printGalileoEph(galileoephemeris* ep, bool printFile);
-  void printSBASEph(sbasephemeris* ep, bool printFile);
+  void printEph(const t_eph& eph, bool printFile);
   void printOutput(bool printFile, QTextStream* stream, 
                    const QString& strV2, const QString& strV3);
   void messagePrivate(const QByteArray& msg);
-  void checkEphemeris(gpsephemeris* oldEph, gpsephemeris* newEph);
 
   QSettings::SettingsMap _settings;
@@ -132,9 +128,4 @@
   QFile*                 _ephFileSBAS;
   QTextStream*           _ephStreamSBAS;
-  gpsephemeris*          _gpsEph[PRN_GPS_END - PRN_GPS_START + 1];
-  gpsephemeris*          _qzssEph[PRN_QZSS_END - PRN_QZSS_START + 1];
-  glonassephemeris*      _glonassEph[PRN_GLONASS_END - PRN_GLONASS_START + 1];
-  galileoephemeris*      _galileoEph[PRN_GALILEO_END - PRN_GALILEO_START + 1];
-  sbasephemeris*         _sbasEph[PRN_SBAS_END - PRN_SBAS_START + 1];
   QString                _userName;
   QString                _pgmName;
@@ -159,4 +150,5 @@
   mutable QMutex         _mutexDateAndTimeGPS;
   BNC_PPP::t_pppMain*    _pppMain;
+  bncEphUser             _ephUser;
 };
 
Index: /trunk/BNC/src/bncephuser.cpp
===================================================================
--- /trunk/BNC/src/bncephuser.cpp	(revision 6431)
+++ /trunk/BNC/src/bncephuser.cpp	(revision 6432)
@@ -48,18 +48,22 @@
 // Constructor
 ////////////////////////////////////////////////////////////////////////////
+bncEphUser::bncEphUser() {
+}
+
+// Constructor
+////////////////////////////////////////////////////////////////////////////
 bncEphUser::bncEphUser(bool connectSlots) {
+  if (connectSlots) {
+    connect(BNC_CORE, SIGNAL(newEphGPS(t_ephGPS)),
+            this, SLOT(slotNewEphGPS(t_ephGPS)), Qt::DirectConnection);
+  
+    connect(BNC_CORE, SIGNAL(newEphGlonass(t_ephGlo)),
+            this, SLOT(slotNewEphGlonass(t_ephGlo)), Qt::DirectConnection);
+  
+    connect(BNC_CORE, SIGNAL(newEphGalileo(t_ephGal)),
+            this, SLOT(slotNewEphGalileo(t_ephGal)), Qt::DirectConnection);
 
-  if (connectSlots) {
-    connect(BNC_CORE, SIGNAL(newEphGPS(gpsephemeris)),
-            this, SLOT(slotNewEphGPS(gpsephemeris)), Qt::DirectConnection);
-    
-    connect(BNC_CORE, SIGNAL(newEphGlonass(glonassephemeris)),
-            this, SLOT(slotNewEphGlonass(glonassephemeris)), Qt::DirectConnection);
-    
-    connect(BNC_CORE, SIGNAL(newEphGalileo(galileoephemeris)),
-            this, SLOT(slotNewEphGalileo(galileoephemeris)), Qt::DirectConnection);
-
-    connect(BNC_CORE, SIGNAL(newEphSBAS(sbasephemeris)),
-            this, SLOT(slotNewEphSBAS(sbasephemeris)), Qt::DirectConnection);
+    connect(BNC_CORE, SIGNAL(newEphSBAS(t_ephSBAS)),
+            this, SLOT(slotNewEphSBAS(t_ephSBAS)), Qt::DirectConnection);
   }
 }
@@ -75,38 +79,26 @@
 }
 
-// 
+// New GPS Ephemeris 
 ////////////////////////////////////////////////////////////////////////////
-void bncEphUser::slotNewEphGPS(gpsephemeris gpseph) {
-  t_ephGPS* newEph = new t_ephGPS(); newEph->set(&gpseph);
-  if (putNewEph(newEph) != success) {
-    delete newEph;
-  }
+void bncEphUser::slotNewGPSEph(t_ephGPS eph) {
+  putNewEph(&eph);
+}
+    
+// New Glonass Ephemeris
+////////////////////////////////////////////////////////////////////////////
+void bncEphUser::slotNewGlonassEph(t_ephGlo eph) {
+  putNewEph(&eph);
 }
 
-// 
+// New Galileo Ephemeris
 ////////////////////////////////////////////////////////////////////////////
-void bncEphUser::slotNewEphGlonass(glonassephemeris gloeph) {
-  t_ephGlo* newEph = new t_ephGlo(); newEph->set(&gloeph);
-  if (putNewEph(newEph) != success) {
-    delete newEph;
-  }
+void bncEphUser::slotNewGalileoEph(t_ephGal eph) {
+  putNewEph(&eph);
 }
 
-// 
+// New SBAS Ephemeris
 ////////////////////////////////////////////////////////////////////////////
-void bncEphUser::slotNewEphGalileo(galileoephemeris galeph) {
-  t_ephGal* newEph = new t_ephGal(); newEph->set(&galeph);
-  if (putNewEph(newEph) != success) {
-    delete newEph;
-  }
-}
-
-// 
-////////////////////////////////////////////////////////////////////////////
-void bncEphUser::slotNewEphSBAS(sbasephemeris sbaseph) {
-  t_ephSBAS* newEph = new t_ephSBAS(); newEph->set(&sbaseph);
-  if (putNewEph(newEph) != success) {
-    delete newEph;
-  }
+void bncEphUser::slotNewSBASEph(t_ephSBAS eph) {
+  putNewEph(&eph);
 }
 
@@ -118,5 +110,5 @@
   t_irc irc = failure;
 
-  if (!newEph) {
+  if (newEph == 0) {
     return irc;
   }
Index: /trunk/BNC/src/bncephuser.h
===================================================================
--- /trunk/BNC/src/bncephuser.h	(revision 6431)
+++ /trunk/BNC/src/bncephuser.h	(revision 6432)
@@ -41,5 +41,6 @@
 
  public:
-  bncEphUser(bool connectSlots = true);
+  bncEphUser();
+  bncEphUser(bool connectSlots);
   virtual ~bncEphUser();
 
@@ -70,8 +71,8 @@
 
  public slots:
-  void slotNewEphGPS(gpsephemeris gpseph);
-  void slotNewEphGlonass(glonassephemeris gloeph);
-  void slotNewEphGalileo(galileoephemeris galeph);
-  void slotNewEphSBAS(sbasephemeris sbaseph);
+  void slotNewGPSEph(t_ephGPS);
+  void slotNewGlonassEph(t_ephGlo);
+  void slotNewGalileoEph(t_ephGal);
+  void slotNewSBASEph(t_ephSBAS);
 
  protected:
Index: /trunk/BNC/src/pppRun.cpp
===================================================================
--- /trunk/BNC/src/pppRun.cpp	(revision 6431)
+++ /trunk/BNC/src/pppRun.cpp	(revision 6432)
@@ -88,12 +88,12 @@
             this, SLOT(slotNewObs(QByteArray, QList<t_satObs>)),conType);
 
-    connect(BNC_CORE, SIGNAL(newEphGPS(gpsephemeris)),
-            this, SLOT(slotNewEphGPS(gpsephemeris)),conType);
+    connect(BNC_CORE, SIGNAL(newEphGPS(t_ephGPS)),
+            this, SLOT(slotNewEphGPS(t_ephGPS)),conType);
   
-    connect(BNC_CORE, SIGNAL(newEphGlonass(glonassephemeris)),
-            this, SLOT(slotNewEphGlonass(glonassephemeris)),conType);
+    connect(BNC_CORE, SIGNAL(newEphGlonass(t_ephGlo)),
+            this, SLOT(slotNewEphGlonass(t_ephGlo)),conType);
   
-    connect(BNC_CORE, SIGNAL(newEphGalileo(galileoephemeris)),
-            this, SLOT(slotNewEphGalileo(galileoephemeris)),conType);
+    connect(BNC_CORE, SIGNAL(newEphGalileo(t_ephGal)),
+            this, SLOT(slotNewEphGalileo(t_ephGal)),conType);
 
     connect(BNC_CORE, SIGNAL(newOrbCorrections(QList<t_orbCorr>)),
@@ -157,8 +157,6 @@
 // 
 ////////////////////////////////////////////////////////////////////////////
-void t_pppRun::slotNewEphGPS(gpsephemeris gpseph) {
-  QMutexLocker locker(&_mutex);
-  t_ephGPS eph;
-  eph.set(&gpseph);
+void t_pppRun::slotNewEphGPS(t_ephGPS eph) {
+  QMutexLocker locker(&_mutex);
   _pppClient->putEphemeris(&eph);
 }
@@ -166,8 +164,6 @@
 // 
 ////////////////////////////////////////////////////////////////////////////
-void t_pppRun::slotNewEphGlonass(glonassephemeris gloeph) {
-  QMutexLocker locker(&_mutex);
-  t_ephGlo eph;
-  eph.set(&gloeph);
+void t_pppRun::slotNewEphGlonass(t_ephGlo eph) {
+  QMutexLocker locker(&_mutex);
   _pppClient->putEphemeris(&eph);
 }
@@ -175,8 +171,6 @@
 // 
 ////////////////////////////////////////////////////////////////////////////
-void t_pppRun::slotNewEphGalileo(galileoephemeris galeph) {
-  QMutexLocker locker(&_mutex);
-  t_ephGal eph;
-  eph.set(&galeph);
+void t_pppRun::slotNewEphGalileo(t_ephGal eph) {
+  QMutexLocker locker(&_mutex);
   _pppClient->putEphemeris(&eph);
 }
Index: /trunk/BNC/src/pppRun.h
===================================================================
--- /trunk/BNC/src/pppRun.h	(revision 6431)
+++ /trunk/BNC/src/pppRun.h	(revision 6432)
@@ -35,7 +35,7 @@
 
  public slots:
-  void slotNewEphGPS(gpsephemeris gpseph);
-  void slotNewEphGlonass(glonassephemeris gloeph);
-  void slotNewEphGalileo(galileoephemeris galeph);
+  void slotNewEphGPS(t_ephGPS);
+  void slotNewEphGlonass(t_ephGlo);
+  void slotNewEphGalileo(t_ephGal);
   void slotNewOrbCorrections(QList<t_orbCorr> orbCorr);
   void slotNewClkCorrections(QList<t_clkCorr> clkCorr);
