Index: trunk/BNC/src/bncephuser.cpp
===================================================================
--- trunk/BNC/src/bncephuser.cpp	(revision 8186)
+++ trunk/BNC/src/bncephuser.cpp	(revision 8187)
@@ -186,4 +186,11 @@
   }
 
+  // Check health status
+  // -------------------
+  if (eph->isUnhealthy()) {
+    eph->setCheckState(t_eph::bad);
+    return;
+  }
+
   // Simple Check - check satellite radial distance
   // ----------------------------------------------
Index: trunk/BNC/src/ephemeris.cpp
===================================================================
--- trunk/BNC/src/ephemeris.cpp	(revision 8186)
+++ trunk/BNC/src/ephemeris.cpp	(revision 8187)
@@ -725,4 +725,20 @@
 }
 
+// Health status of Glonass Ephemeris (virtual)
+////////////////////////////////////////////////////////////////////////////
+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;
+}
+
 // Constructor
 //////////////////////////////////////////////////////////////////////////////
@@ -961,4 +977,13 @@
 
   return success;
+}
+
+// Health status of Galileo Ephemeris (virtual)
+////////////////////////////////////////////////////////////////////////////
+unsigned int t_ephGal::isUnhealthy() const {
+  if (_E5aHS && _E5bHS && _E1_bHS) {
+    return 1;
+  }
+  return 0;
 }
 
Index: trunk/BNC/src/ephemeris.h
===================================================================
--- trunk/BNC/src/ephemeris.h	(revision 8186)
+++ trunk/BNC/src/ephemeris.h	(revision 8187)
@@ -26,4 +26,5 @@
   virtual QString toString(double version) const = 0;
   virtual unsigned int IOD() const = 0;
+  virtual unsigned int isUnhealthy() const = 0;
   virtual int     slotNum() const {return 0;}
   bncTime TOC() const {return _TOC;}
@@ -100,4 +101,5 @@
   virtual QString toString(double version) const;
   virtual unsigned int  IOD() const { return static_cast<unsigned int>(_IODE); }
+  virtual unsigned int  isUnhealthy() const { return static_cast<unsigned int>(_health); }
   double TGD() const {return _TGD;} // Timing Group Delay (P1-P2 DCB)
 
@@ -190,4 +192,5 @@
   virtual QString toString(double version) const;
   virtual unsigned int  IOD() const;
+  virtual unsigned int isUnhealthy() const;
   virtual int slotNum() const {return int(_frequency_number);}
 
@@ -281,4 +284,5 @@
   virtual e_type type() const {return t_eph::Galileo;}
   virtual unsigned int  IOD() const { return static_cast<unsigned long>(_IODnav); }
+  virtual unsigned int  isUnhealthy() const;
 
  private:
@@ -359,4 +363,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 QString toString(double version) const;
 
@@ -425,4 +430,5 @@
   virtual e_type  type() const {return t_eph::BDS;}
   virtual unsigned int IOD() const;
+  virtual unsigned int  isUnhealthy() const { return static_cast<unsigned int>(_SatH1); }
   virtual QString toString(double version) const;
 
