Index: branches/SHM-dev/source/Lib/TLibDecoder/TDecGop.cpp
===================================================================
--- branches/SHM-dev/source/Lib/TLibDecoder/TDecGop.cpp	(revision 1290)
+++ branches/SHM-dev/source/Lib/TLibDecoder/TDecGop.cpp	(revision 1292)
@@ -52,6 +52,4 @@
 #include <time.h>
 
-extern Bool g_md5_mismatch; ///< top level flag to signal when there is a decode problem
-
 #if CONFORMANCE_BITSTREAM_MODE
 Bool pocCompareFunction( const TComPic &pic1, const TComPic &pic2 )
@@ -63,5 +61,5 @@
 //! \ingroup TLibDecoder
 //! \{
-static Void calcAndPrintHashStatus(TComPicYuv& pic, const SEIDecodedPictureHash* pictureHashSEI, const BitDepths &bitDepths);
+static Void calcAndPrintHashStatus(TComPicYuv& pic, const SEIDecodedPictureHash* pictureHashSEI, const BitDepths &bitDepths, UInt &numChecksumErrors);
 // ====================================================================================================================
 // Constructor / destructor / initialization / destroy
@@ -69,4 +67,5 @@
 
 TDecGop::TDecGop()
+ : m_numberOfChecksumErrorsDetected(0)
 {
   m_dDecTime = 0;
@@ -114,5 +113,7 @@
   m_pcSliceDecoder        = pcSliceDecoder;
   m_pcLoopFilter          = pcLoopFilter;
-  m_pcSAO  = pcSAO;
+  m_pcSAO                 = pcSAO;
+  m_numberOfChecksumErrorsDetected = 0;
+
 #if SVC_EXTENSION   
   m_ppcTDecTop            = ppcDecTop;
@@ -247,7 +248,7 @@
     }
 #if SVC_EXTENSION
-    calcAndPrintHashStatus(*(pcPic->getPicYuvRec()), hash, pcSlice->getBitDepths());
-#else
-    calcAndPrintHashStatus(*(pcPic->getPicYuvRec()), hash, pcSlice->getSPS()->getBitDepths());
+    calcAndPrintHashStatus(*(pcPic->getPicYuvRec()), hash, pcSlice->getBitDepths(), m_numberOfChecksumErrorsDetected);
+#else
+    calcAndPrintHashStatus(*(pcPic->getPicYuvRec()), hash, pcSlice->getSPS()->getBitDepths(), m_numberOfChecksumErrorsDetected);
 #endif
   }
@@ -279,5 +280,5 @@
  *            unk         - no SEI message was available for comparison
  */
-static Void calcAndPrintHashStatus(TComPicYuv& pic, const SEIDecodedPictureHash* pictureHashSEI, const BitDepths &bitDepths)
+static Void calcAndPrintHashStatus(TComPicYuv& pic, const SEIDecodedPictureHash* pictureHashSEI, const BitDepths &bitDepths, UInt &numChecksumErrors)
 {
   /* calculate MD5sum for entire reconstructed picture */
@@ -334,5 +335,5 @@
   if (mismatch)
   {
-    g_md5_mismatch = true;
+    numChecksumErrors++;
     printf("[rx%s:%s] ", hashType, hashToString(pictureHashSEI->m_pictureHash, numChar).c_str());
   }
Index: branches/SHM-dev/source/Lib/TLibDecoder/TDecGop.h
===================================================================
--- branches/SHM-dev/source/Lib/TLibDecoder/TDecGop.h	(revision 1290)
+++ branches/SHM-dev/source/Lib/TLibDecoder/TDecGop.h	(revision 1292)
@@ -80,4 +80,5 @@
   Double                m_dDecTime;
   Int                   m_decodedPictureHashSEIEnabled;  ///< Checksum(3)/CRC(2)/MD5(1)/disable(0) acting on decoded picture hash SEI message
+  UInt                  m_numberOfChecksumErrorsDetected;
 
 #if SVC_EXTENSION
@@ -112,4 +113,6 @@
 
   Void setDecodedPictureHashSEIEnabled(Int enabled) { m_decodedPictureHashSEIEnabled = enabled; }
+  UInt getNumberOfChecksumErrorsDetected() const { return m_numberOfChecksumErrorsDetected; }
+
 #if SVC_EXTENSION
   TDecTop*   getLayerDec(UInt layerId)  { return m_ppcTDecTop[layerId]; }
Index: branches/SHM-dev/source/Lib/TLibDecoder/TDecTop.cpp
===================================================================
--- branches/SHM-dev/source/Lib/TLibDecoder/TDecTop.cpp	(revision 1290)
+++ branches/SHM-dev/source/Lib/TLibDecoder/TDecTop.cpp	(revision 1292)
@@ -63,5 +63,6 @@
 
 TDecTop::TDecTop()
-  : m_pDecodedSEIOutputStream(NULL)
+  : m_pDecodedSEIOutputStream(NULL),
+    m_warningMessageSkipPicture(false)
 {
   m_pcPic = 0;
@@ -2167,9 +2168,8 @@
     else
     {
-      static Bool warningMessage = false;
-      if(!warningMessage)
+      if(!m_warningMessageSkipPicture)
       {
         printf("\nWarning: this is not a valid random access point and the data is discarded until the first CRA picture");
-        warningMessage = true;
+        m_warningMessageSkipPicture = true;
       }
       return true;
Index: branches/SHM-dev/source/Lib/TLibDecoder/TDecTop.h
===================================================================
--- branches/SHM-dev/source/Lib/TLibDecoder/TDecTop.h	(revision 1290)
+++ branches/SHM-dev/source/Lib/TLibDecoder/TDecTop.h	(revision 1292)
@@ -121,4 +121,6 @@
   std::ostream           *m_pDecodedSEIOutputStream;
 
+  Bool                    m_warningMessageSkipPicture;
+
 #if SVC_EXTENSION
   Bool                    m_isLastNALWasEos;
@@ -191,4 +193,5 @@
   Void  deletePicBuffer();
 
+  
   Void  executeLoopFilters(Int& poc, TComList<TComPic*>*& rpcListPic);
   Void  checkNoOutputPriorPics (TComList<TComPic*>* rpcListPic);
@@ -203,4 +206,5 @@
 #endif
   Void  setDecodedSEIMessageOutputStream(std::ostream *pOpStream) { m_pDecodedSEIOutputStream = pOpStream; }
+  UInt  getNumberOfChecksumErrorsDetected() const { return m_cGopDecoder.getNumberOfChecksumErrorsDetected(); }
 
 #if SVC_EXTENSION
@@ -259,9 +263,9 @@
 protected:
 #if SVC_EXTENSION
-  Void      xGetNewPicBuffer  ( const TComVPS &vps, const TComSPS &sps, const TComPPS &pps, TComPic*& rpcPic, const UInt temporalLayer);
+  Void  xGetNewPicBuffer  ( const TComVPS &vps, const TComSPS &sps, const TComPPS &pps, TComPic*& rpcPic, const UInt temporalLayer);
 #else
-  Void      xGetNewPicBuffer  (const TComSPS &sps, const TComPPS &pps, TComPic*& rpcPic, const UInt temporalLayer);
-#endif
-  Void      xCreateLostPicture (Int iLostPOC);
+  Void  xGetNewPicBuffer  (const TComSPS &sps, const TComPPS &pps, TComPic*& rpcPic, const UInt temporalLayer);
+#endif
+  Void  xCreateLostPicture (Int iLostPOC);
 
   Void      xActivateParameterSets();
