Index: branches/BNC_2.12/src/PPP/pppEphPool.cpp
===================================================================
--- branches/BNC_2.12/src/PPP/pppEphPool.cpp	(revision 8214)
+++ branches/BNC_2.12/src/PPP/pppEphPool.cpp	(revision 8216)
@@ -26,5 +26,6 @@
 /////////////////////////////////////////////////////////////////////////////
 void t_pppEphPool::putEphemeris(t_eph* eph) {
-  if (eph && eph->checkState() != t_eph::bad) {
+  if (eph && (eph->checkState() != t_eph::bad ||
+              eph->checkState() != t_eph::unhealthy))  {
     _satEphPool[eph->prn().toInt()].putEphemeris(_maxQueueSize, eph);
   }
Index: branches/BNC_2.12/src/bnccore.cpp
===================================================================
--- branches/BNC_2.12/src/bnccore.cpp	(revision 8214)
+++ branches/BNC_2.12/src/bnccore.cpp	(revision 8216)
@@ -209,4 +209,7 @@
     return failure;
   }
+  else if (eph->checkState() == t_eph::unhealthy) {
+    messagePrivate("UNHEALTHY EPHEMERIS\n" + eph->toString(3.0).toLatin1());
+  }
   printEphHeader();
   printEph(*eph, (ircPut == success));
Index: branches/BNC_2.12/src/bncephuser.cpp
===================================================================
--- branches/BNC_2.12/src/bncephuser.cpp	(revision 8214)
+++ branches/BNC_2.12/src/bncephuser.cpp	(revision 8216)
@@ -185,10 +185,9 @@
     return;
   }
-  
+
   // Check health status
   // -------------------
   if (eph->isUnhealthy()) {
-    eph->setCheckState(t_eph::bad);
-    return;
+    eph->setCheckState(t_eph::unhealthy);
   }
 
@@ -290,5 +289,5 @@
       ephL->setCheckState(t_eph::outdated);
       return;
-    }    
+    }
 
     if (diff < MAXDIFF && diffC < MAXDIFF) {
Index: branches/BNC_2.12/src/ephemeris.cpp
===================================================================
--- branches/BNC_2.12/src/ephemeris.cpp	(revision 8214)
+++ branches/BNC_2.12/src/ephemeris.cpp	(revision 8216)
@@ -728,15 +728,20 @@
 ////////////////////////////////////////////////////////////////////////////
 unsigned int t_ephGlo::isUnhealthy() const {
-  if      (_health == 0 && _almanac_health == 0) {
-    return 1;
-  }
-  else if (_health == 1 && _almanac_health == 0) {
-    return 1;
-  }
-  else if (_health == 1 && _almanac_health == 1) {
-    return 1;
-  }
-
-  return 0;
+
+  switch (_almanac_health_availablility_indicator) {
+    case 1:
+      if ((_health == 0 && _almanac_health == 0) ||
+          (_health == 1 && _almanac_health == 0) ||
+          (_health == 1 && _almanac_health == 1)) {
+        return 1;
+      }
+      break;
+    case 0:
+      if (_health) {
+        return 1;
+      }
+      break;
+  }
+  return 0; /* (_health == 0 && _almanac_health == 1) or (_health == 0) */
 }
 
Index: branches/BNC_2.12/src/ephemeris.h
===================================================================
--- branches/BNC_2.12/src/ephemeris.h	(revision 8214)
+++ branches/BNC_2.12/src/ephemeris.h	(revision 8216)
@@ -18,5 +18,5 @@
  public:
   enum e_type {unknown, GPS, QZSS, GLONASS, Galileo, SBAS, BDS, IRNSS};
-  enum e_checkState {unchecked, ok, bad, outdated};
+  enum e_checkState {unchecked, ok, bad, outdated, unhealthy};
 
   t_eph();
@@ -185,5 +185,5 @@
     _M_N4             = 0.0;
     _M_tau_GPS        = 0.0;
-    _M_l5             = 0.0;    
+    _M_l5             = 0.0;
   }
   t_ephGlo(float rnxVersion, const QStringList& lines);
@@ -364,5 +364,5 @@
   virtual e_type  type() const {return t_eph::SBAS;}
   virtual unsigned int IOD() const;
-  virtual unsigned int  isUnhealthy() const { return static_cast<unsigned int>(_health); }  
+  virtual unsigned int  isUnhealthy() const { return static_cast<unsigned int>(_health); }
   virtual QString toString(double version) const;
 
