Index: trunk/source/App/TAppDecoder/TAppDecTop.cpp
===================================================================
--- trunk/source/App/TAppDecoder/TAppDecTop.cpp	(revision 78)
+++ trunk/source/App/TAppDecoder/TAppDecTop.cpp	(revision 81)
@@ -439,7 +439,15 @@
     m_tVideoIOYuvReconFile.push_back(new TVideoIOYuv);
     Char buffer[4];
+#if VIDYO_VPS_INTEGRATION
+    sprintf(buffer,"_%i", viewId );
+#else
     sprintf(buffer,"_%i", (Int)(m_tVideoIOYuvReconFile.size()-1) / 2 );
+#endif
     Char* nextFilename = NULL;
+#if VIDYO_VPS_INTEGRATION
+    if( isDepth)
+#else
     if( (m_tVideoIOYuvReconFile.size() % 2) == 0 )
+#endif
     {
       Char* pchTempFilename = NULL;
@@ -452,5 +460,7 @@
       xAppendToFileNameEnd( m_pchReconFile, buffer, nextFilename);
     }
+#if !VIDYO_VPS_INTEGRATION
     if( isDepth || ( !isDepth && (m_tVideoIOYuvReconFile.size() % 2) == 1 ) )
+#endif
     {
       m_tVideoIOYuvReconFile.back()->open( nextFilename, true, m_outputBitDepth, g_uiBitDepth + g_uiBitIncrement );
@@ -465,6 +475,8 @@
   {
     m_tDecTop.push_back(new TDecTop);
+#if !VIDYO_VPS_INTEGRATION
     if( isDepth || ( !isDepth && (m_tVideoIOYuvReconFile.size() % 2) == 1 ) )
     {
+#endif
       m_tDecTop.back()->create();
       m_tDecTop.back()->init( this, newNumberOfViewDepth == 1);
@@ -473,5 +485,7 @@
       m_tDecTop.back()->setPictureDigestEnabled(m_pictureDigestEnabled);
       m_tDecTop.back()->setCamParsCollector( &m_cCamParsCollector );
-    }
+#if !VIDYO_VPS_INTEGRATION
+    }
+#endif
   }
 }
Index: trunk/source/App/TAppRenderer/TAppRendererTop.cpp
===================================================================
--- trunk/source/App/TAppRenderer/TAppRendererTop.cpp	(revision 78)
+++ trunk/source/App/TAppRenderer/TAppRendererTop.cpp	(revision 81)
@@ -70,5 +70,8 @@
     pcVideoInput->open( m_pchVideoInputFileList[iViewIdx], false, iFileBitDepth, iInteralBitDepth );  // read mode
     pcDepthInput->open( m_pchDepthInputFileList[iViewIdx], false, iFileBitDepth, iInteralBitDepth );  // read mode
-
+#if HHI_FIX
+    pcVideoInput->skipFrames(m_iFrameSkip, m_iSourceWidth, m_iSourceHeight  );
+    pcDepthInput->skipFrames(m_iFrameSkip, m_iSourceWidth, m_iSourceHeight  );
+#endif
     m_apcTVideoIOYuvVideoInput.push_back( pcVideoInput );
     m_apcTVideoIOYuvDepthInput.push_back( pcDepthInput );
@@ -184,4 +187,8 @@
   {
 
+#if HHI_FIX
+    if ( iFrame >= m_iFrameSkip ) 
+    {
+#endif
     // read in depth and video
     for(Int iBaseViewIdx=0; iBaseViewIdx < m_iNumberOfInputViews; iBaseViewIdx++ )
@@ -203,5 +210,11 @@
     }
 
+#if HHI_FIX
+    }
+    else
+#else
     if ( iFrame < m_iFrameSkip ) // Skip Frames
+#endif
+    
     {
       std::cout << "Skipping Frame " << iFrame << std::endl;
@@ -549,4 +562,9 @@
     while ( ( ( iNumOfRenderedFrames < m_iFramesToBeRendered ) || ( m_iFramesToBeRendered == 0 ) ) && !bAnyEOS )
     {
+
+#if HHI_FIX
+      if ( iFrame >= m_iFrameSkip )
+      {      
+#endif
       // read in depth and video
       for(Int iBaseViewIdx=0; iBaseViewIdx < m_iNumberOfInputViews; iBaseViewIdx++ )
@@ -558,7 +576,14 @@
         bAnyEOS |= m_apcTVideoIOYuvDepthInput[iBaseViewIdx]->isEof();
       }
-
+#if HHI_FIX
+      }
+      else
+#else
       if ( iFrame < m_iFrameSkip )
+#endif
       {
+#if HHI_FIX
+        iFrame++;
+#endif
         continue;
       }
@@ -573,7 +598,14 @@
       }
 
+#if HHI_FIX
+      m_cCameraData.update( (UInt) ( iFrame - m_iFrameSkip ));
+#endif
+
       for(Int iBaseViewIdx=0; iBaseViewIdx < m_iNumberOfInputViews; iBaseViewIdx++ )
       {
+#if HHI_FIX
+#else
         m_cCameraData.update( (UInt)iFrame );
+#endif
 
         // setup virtual views
@@ -755,4 +787,9 @@
   while ( ( ( iNumOfRenderedFrames < m_iFramesToBeRendered ) || ( m_iFramesToBeRendered == 0 ) ) && !bAnyEOS )
   {
+
+#if HHI_FIX
+    if ( iFrame >= m_iFrameSkip )
+    {      
+#endif
     // read in depth and video
     for(Int iBaseViewIdx=0; iBaseViewIdx < m_iNumberOfInputViews; iBaseViewIdx++ )
@@ -771,5 +808,10 @@
     }
 
+#if HHI_FIX
+    }
+    else
+#else
     if ( iFrame < m_iFrameSkip ) // Skip Frames
+#endif
     {
       iFrame++;
@@ -777,5 +819,9 @@
     }
 
+#if HHI_FIX
+    m_cCameraData.update( (UInt) (iFrame - m_iFrameSkip ));
+#else
     m_cCameraData.update( (UInt)iFrame );
+#endif
 
     for(Int iSynthViewIdx=0; iSynthViewIdx < m_iNumberOfOutputViews; iSynthViewIdx++ )
@@ -925,6 +971,9 @@
   while ( ( ( iNumOfRenderedFrames < m_iFramesToBeRendered ) || ( m_iFramesToBeRendered == 0 ) ) && !bAnyEOS )
   {
-    // set shift LUT
-
+
+#if HHI_FIX
+    if ( iFrame >= m_iFrameSkip )
+    {      
+#endif
     // read in depth and video
     for(Int iBaseViewIdx=0; iBaseViewIdx < m_iNumberOfInputViews; iBaseViewIdx++ )
@@ -944,5 +993,10 @@
     }
 
+#if HHI_FIX
+    }
+    else
+#else
     if ( iFrame < m_iFrameSkip ) // Skip Frames
+#endif
     {
       std::cout << "Skipping Frame " << iFrame << std::endl;
@@ -952,5 +1006,9 @@
     }
 
+#if HHI_FIX
+    m_cCameraData.update( (UInt) ( iFrame - m_iFrameSkip ) );
+#else
     m_cCameraData.update( (UInt)iFrame );
+#endif
 
     for(Int iViewIdx=1; iViewIdx < m_iNumberOfInputViews; iViewIdx++ )
Index: trunk/source/Lib/TLibCommon/TComDataCU.cpp
===================================================================
--- trunk/source/Lib/TLibCommon/TComDataCU.cpp	(revision 78)
+++ trunk/source/Lib/TLibCommon/TComDataCU.cpp	(revision 81)
@@ -2921,5 +2921,9 @@
 		break;
 	default:
+#if HHI_FIX
+    assert ( m_pePartSize[uiTmpAbsPartIdx ] == SIZE_2Nx2N ); 
+#else
 		assert ( m_pePartSize[0] == SIZE_2Nx2N );
+#endif
 		riWidth = getWidth(uiTmpAbsPartIdx);      riHeight = getHeight(uiTmpAbsPartIdx);      ruiPartAddr = 0;
 		break;
Index: trunk/source/Lib/TLibCommon/TComRdCost.cpp
===================================================================
--- trunk/source/Lib/TLibCommon/TComRdCost.cpp	(revision 78)
+++ trunk/source/Lib/TLibCommon/TComRdCost.cpp	(revision 81)
@@ -273,11 +273,23 @@
     
     m_puiComponentCostOriginP = new UInt[ 4 * iSubPelSearchLimit ];
+#if HHI_FIX
+    m_puiMultiviewRegCostHorOrgP  = new UInt[ 4 * iSubPelSearchLimit ];
+    m_puiMultiviewRegCostVerOrgP  = new UInt[ 4 * iSubPelSearchLimit ];
+#endif
     iSubPelSearchLimit *= 2;
     
     m_puiComponentCost = m_puiComponentCostOriginP + iSubPelSearchLimit;
+#if HHI_FIX
+    m_puiMultiviewRegCostHor = m_puiMultiviewRegCostHorOrgP + iSubPelSearchLimit;
+    m_puiMultiviewRegCostVer = m_puiMultiviewRegCostVerOrgP + iSubPelSearchLimit;
+#endif
     
     for( Int n = -iSubPelSearchLimit; n < iSubPelSearchLimit; n++)
     {
       m_puiComponentCost[n] = xGetComponentBits( n );
+#if HHI_FIX
+      m_puiMultiviewRegCostHor[n] = xGetComponentBits( n );  // first version
+      m_puiMultiviewRegCostVer[n] = xGetComponentBits( n );  // first version
+#endif
     }
   }
@@ -291,4 +303,16 @@
     m_puiComponentCostOriginP = NULL;
   }
+#if HHI_FIX
+  if( m_puiMultiviewRegCostHorOrgP )
+    {
+      delete [] m_puiMultiviewRegCostHorOrgP;
+      m_puiMultiviewRegCostHorOrgP = NULL;
+    }
+  if( m_puiMultiviewRegCostVerOrgP )
+  {
+    delete [] m_puiMultiviewRegCostVerOrgP;
+    m_puiMultiviewRegCostVerOrgP = NULL;
+  }
+#endif
 }
 #endif
Index: trunk/source/Lib/TLibCommon/TComRdCost.h
===================================================================
--- trunk/source/Lib/TLibCommon/TComRdCost.h	(revision 78)
+++ trunk/source/Lib/TLibCommon/TComRdCost.h	(revision 81)
@@ -219,5 +219,11 @@
 #endif
   UInt    xGetComponentBits( Int iVal );
-  Void    getMotionCost( Bool bSad, Int iAdd ) { m_uiCost = (bSad ? m_uiLambdaMotionSAD + iAdd : m_uiLambdaMotionSSE + iAdd); }
+  Void    getMotionCost( Bool bSad, Int iAdd ) 
+{ 
+     m_uiCost = (bSad ? m_uiLambdaMotionSAD + iAdd : m_uiLambdaMotionSSE + iAdd); 
+#if HHI_FIX
+    m_uiLambdaMVReg = ( bSad ? m_uiLambdaMVRegSAD         : m_uiLambdaMVRegSSE         );
+#endif
+   }
   Void    setPredictor( TComMv& rcMv )
   {
@@ -270,5 +276,9 @@
   __inline UInt     getMultiviewRegCost  ( Int x, Int y )
   {
+#if FIX203
+    return m_uiLambdaMVReg * getBits(x, y) >> 16;
+#else
     return ( ( m_uiLambdaMVReg * ( m_puiHorRegCost[ x * ( 1 << m_iCostScale ) ] + m_puiVerRegCost[ y * ( 1 << m_iCostScale ) ] ) ) >> 16 );
+#endif
   }
   
Index: trunk/source/Lib/TLibEncoder/TEncCu.cpp
===================================================================
--- trunk/source/Lib/TLibEncoder/TEncCu.cpp	(revision 78)
+++ trunk/source/Lib/TLibEncoder/TEncCu.cpp	(revision 81)
@@ -1156,4 +1156,11 @@
       if( m_pcRdCost->getUseRenModel() )
       {
+#if HHI_FIX
+        UInt  uiWidth     = m_ppcOrigYuv[uiDepth]->getWidth ( );
+        UInt  uiHeight    = m_ppcOrigYuv[uiDepth]->getHeight( );
+        Pel*  piSrc       = m_ppcOrigYuv[uiDepth]->getLumaAddr( 0 );
+        UInt  uiSrcStride = m_ppcOrigYuv[uiDepth]->getStride();
+        m_pcRdCost->setRenModelData( m_ppcBestCU[uiDepth], 0, piSrc, uiSrcStride, uiWidth, uiHeight );
+#else
         UInt  uiWidth     = m_ppcBestCU[uiDepth]->getWidth ( 0 );
         UInt  uiHeight    = m_ppcBestCU[uiDepth]->getHeight( 0 );
@@ -1161,4 +1168,5 @@
         UInt  uiSrcStride = m_ppcOrigYuv[uiDepth]->getStride();
         m_pcRdCost->setRenModelData( m_ppcBestCU[uiDepth], 0, piSrc, uiSrcStride, uiWidth, uiHeight );
+#endif
       }
 #endif
@@ -1206,4 +1214,11 @@
           if( m_pcRdCost->getUseRenModel() ) // necessary ??
           {
+#if HHI_FIX
+            UInt  uiWidth     = m_ppcRecoYuvBest[uhNextDepth]->getWidth   (  );
+            UInt  uiHeight    = m_ppcRecoYuvBest[uhNextDepth]->getHeight  (   );
+            Pel*  piSrc       = m_ppcRecoYuvBest[uhNextDepth]->getLumaAddr( 0 );
+            UInt  uiSrcStride = m_ppcRecoYuvBest[uhNextDepth]->getStride  (   );
+            m_pcRdCost->setRenModelData( pcSubBestPartCU, 0, piSrc, uiSrcStride, uiWidth, uiHeight );
+#else
             UInt  uiWidth     = pcSubBestPartCU->getWidth ( 0 );
             UInt  uiHeight    = pcSubBestPartCU->getHeight( 0 );
@@ -1211,4 +1226,5 @@
             UInt  uiSrcStride = m_ppcRecoYuvBest[pcSubBestPartCU->getDepth(0)]->getStride();
             m_pcRdCost->setRenModelData( pcSubBestPartCU, 0, piSrc, uiSrcStride, uiWidth, uiHeight );
+#endif
           }
 #endif
@@ -1353,4 +1369,11 @@
   if( m_pcRdCost->getUseRenModel() )
   {
+#if HHI_FIX
+      UInt  uiWidth     = m_ppcRecoYuvBest[uiDepth]->getWidth   ( );
+      UInt  uiHeight    = m_ppcRecoYuvBest[uiDepth]->getHeight  ( );
+      Pel*  piSrc       = m_ppcRecoYuvBest[uiDepth]->getLumaAddr( 0 );
+      UInt  uiSrcStride = m_ppcRecoYuvBest[uiDepth]->getStride  ( );
+      m_pcRdCost->setRenModelData( rpcBestCU, 0, piSrc, uiSrcStride, uiWidth, uiHeight );
+#else
     UInt  uiWidth     = rpcBestCU->getWidth ( 0 );
     UInt  uiHeight    = rpcBestCU->getHeight( 0 );
@@ -1358,4 +1381,5 @@
     UInt  uiSrcStride = m_ppcRecoYuvBest[uiDepth]->getStride();
     m_pcRdCost->setRenModelData( rpcBestCU, 0, piSrc, uiSrcStride, uiWidth, uiHeight );
+#endif
   }
 #endif
@@ -1723,5 +1747,11 @@
   if( m_pcRdCost->getUseRenModel() )
   {
-    // reset
+#if HHI_FIX
+    UInt  uiWidth     = m_ppcOrigYuv[uhDepth]->getWidth ( );
+    UInt  uiHeight    = m_ppcOrigYuv[uhDepth]->getHeight( );
+    Pel*  piSrc       = m_ppcOrigYuv[uhDepth]->getLumaAddr( );
+    UInt  uiSrcStride = m_ppcOrigYuv[uhDepth]->getStride();
+    m_pcRdCost->setRenModelData( rpcTempCU, 0, piSrc, uiSrcStride, uiWidth, uiHeight );
+#else
     UInt  uiWidth     = rpcTempCU->getWidth ( 0 );
     UInt  uiHeight    = rpcTempCU->getHeight( 0 );
@@ -1729,4 +1759,5 @@
     UInt  uiSrcStride = m_ppcOrigYuv[uhDepth]->getStride();
     m_pcRdCost->setRenModelData( rpcTempCU, 0, piSrc, uiSrcStride, uiWidth, uiHeight );
+#endif
   }
 #endif
@@ -1820,4 +1851,11 @@
           if( m_pcRdCost->getUseRenModel() )
           { //Reset
+#if HHI_FIX
+            UInt  uiWidth     = m_ppcOrigYuv[uhDepth]->getWidth    ();
+            UInt  uiHeight    = m_ppcOrigYuv[uhDepth]->getHeight   ();
+            Pel*  piSrc       = m_ppcOrigYuv[uhDepth]->getLumaAddr ();
+            UInt  uiSrcStride = m_ppcOrigYuv[uhDepth]->getStride   ();
+            m_pcRdCost->setRenModelData( rpcTempCU, 0, piSrc, uiSrcStride, uiWidth, uiHeight );
+#else
             UInt  uiWidth     = rpcTempCU->getWidth ( 0 );
             UInt  uiHeight    = rpcTempCU->getHeight( 0 );
@@ -1825,4 +1863,5 @@
             UInt  uiSrcStride = m_ppcOrigYuv[uhDepth]->getStride();
             m_pcRdCost->setRenModelData( rpcTempCU, 0, piSrc, uiSrcStride, uiWidth, uiHeight );
+#endif
           }
 #endif
@@ -1888,4 +1927,11 @@
   if( m_pcRdCost->getUseRenModel() )
   {
+#if HHI_FIX
+    UInt  uiWidth     = m_ppcOrigYuv[uhDepth]->getWidth ( );
+    UInt  uiHeight    = m_ppcOrigYuv[uhDepth]->getHeight( );
+    Pel*  piSrc       = m_ppcOrigYuv[uhDepth]->getLumaAddr( );
+    UInt  uiSrcStride = m_ppcOrigYuv[uhDepth]->getStride();
+    m_pcRdCost->setRenModelData( rpcTempCU, 0, piSrc, uiSrcStride, uiWidth, uiHeight );
+#else
     UInt  uiWidth     = rpcTempCU->getWidth ( 0 );
     UInt  uiHeight    = rpcTempCU->getHeight( 0 );
@@ -1893,4 +1939,5 @@
     UInt  uiSrcStride = m_ppcOrigYuv[uhDepth]->getStride();
     m_pcRdCost->setRenModelData( rpcTempCU, 0, piSrc, uiSrcStride, uiWidth, uiHeight );
+#endif
   }
 #endif  
@@ -1999,4 +2046,11 @@
   if( m_pcRdCost->getUseRenModel() )
   {
+#if HHI_FIX
+    UInt  uiWidth     = m_ppcOrigYuv[uiDepth]->getWidth   ();
+    UInt  uiHeight    = m_ppcOrigYuv[uiDepth]->getHeight  ();
+    Pel*  piSrc       = m_ppcOrigYuv[uiDepth]->getLumaAddr();
+    UInt  uiSrcStride = m_ppcOrigYuv[uiDepth]->getStride  ();
+    m_pcRdCost->setRenModelData( rpcTempCU, 0, piSrc, uiSrcStride, uiWidth, uiHeight );
+#else
     UInt  uiWidth     = rpcTempCU->getWidth ( 0 );
     UInt  uiHeight    = rpcTempCU->getHeight( 0 );
@@ -2004,4 +2058,5 @@
     UInt  uiSrcStride = m_ppcOrigYuv[uiDepth]->getStride();
     m_pcRdCost->setRenModelData( rpcTempCU, 0, piSrc, uiSrcStride, uiWidth, uiHeight );
+#endif
   }
 #endif
@@ -2502,4 +2557,11 @@
   if( m_pcRdCost->getUseRenModel() && !bRecursiveCall)
   {
+#if HHI_FIX
+    UInt  uiWidth     = m_ppcOrigYuv[uhDepth]->getWidth   ();
+    UInt  uiHeight    = m_ppcOrigYuv[uhDepth]->getHeight  ();
+    Pel*  piSrc       = m_ppcOrigYuv[uhDepth]->getLumaAddr();
+    UInt  uiSrcStride = m_ppcOrigYuv[uhDepth]->getStride  ();
+    m_pcRdCost->setRenModelData( rpcTempCU, 0, piSrc, uiSrcStride, uiWidth, uiHeight );
+#else
     UInt  uiWidth     = m_ppcTempCU [uhDepth]->getWidth ( 0 );
     UInt  uiHeight    = m_ppcTempCU [uhDepth]->getHeight( 0 );
@@ -2507,4 +2569,5 @@
     UInt  uiSrcStride = m_ppcOrigYuv[uhDepth]->getStride();
     m_pcRdCost->setRenModelData( m_ppcTempCU[uhDepth], 0, piSrc, uiSrcStride, uiWidth, uiHeight );
+#endif
   }
 #endif
@@ -2654,4 +2717,11 @@
   if( !bSplit && bRecursiveCall && m_pcRdCost->getUseRenModel() )
   {
+#if HHI_FIX
+    UInt  uiWidth     = m_ppcRecoYuvBest[uhDepth]->getWidth   (   );
+    UInt  uiHeight    = m_ppcRecoYuvBest[uhDepth]->getHeight  (   );
+    UInt  uiSrcStride = m_ppcRecoYuvBest[uhDepth]->getStride  (   );
+    Pel*  piSrc       = m_ppcRecoYuvBest[uhDepth]->getLumaAddr( 0 );
+    m_pcRdCost->setRenModelData( rpcBestCU, 0, piSrc, uiSrcStride, uiWidth, uiHeight );
+#else
     UInt  uiWidth     = rpcBestCU->getWidth ( 0 );
     UInt  uiHeight    = rpcBestCU->getHeight( 0 );
@@ -2659,4 +2729,5 @@
     UInt  uiSrcStride = m_ppcRecoYuvBest[uhDepth]->getStride();
     m_pcRdCost->setRenModelData( rpcBestCU, 0, piSrc, uiSrcStride, uiWidth, uiHeight );
+#endif
   }
 #endif
Index: trunk/source/Lib/TLibEncoder/TEncSearch.cpp
===================================================================
--- trunk/source/Lib/TLibEncoder/TEncSearch.cpp	(revision 78)
+++ trunk/source/Lib/TLibEncoder/TEncSearch.cpp	(revision 81)
@@ -304,5 +304,11 @@
   // motion cost
   uiSad += m_pcRdCost->getCost( iSearchX, iSearchY );
-  
+#if HHI_FIX  
+  // regularization cost
+  if( m_pcRdCost->useMultiviewReg() )
+  {
+    uiSad += m_pcRdCost->getMultiviewRegCost( iSearchX, iSearchY );
+  }
+#endif
   if( uiSad < rcStruct.uiBestSad )
   {
@@ -3865,5 +3871,9 @@
   else
   {
+#if HHI_FIX
+    rcMv = ( m_pcRdCost->useMultiviewReg() ? m_pcRdCost->getMultiviewOrgMvPred() : *pcMvPred );
+#else
     rcMv = *pcMvPred;
+#endif
     xPatternSearchFast  ( pcCU, pcPatternKey, piRefY, iRefStride, &cMvSrchRngLT, &cMvSrchRngRB, rcMv, ruiCost );
   }
@@ -3967,4 +3977,12 @@
       uiSad += m_pcRdCost->getCost( x, y );
       
+#if HHI_FIX 
+      // regularization cost
+      if( m_pcRdCost->useMultiviewReg() )
+      {
+        uiSad += m_pcRdCost->getMultiviewRegCost( x, y );
+      }
+#endif
+
       if ( uiSad < uiSadBest )
       {
Index: trunk/source/Lib/TLibRenderer/TRenSingleModel.cpp
===================================================================
--- trunk/source/Lib/TLibRenderer/TRenSingleModel.cpp	(revision 78)
+++ trunk/source/Lib/TLibRenderer/TRenSingleModel.cpp	(revision 81)
@@ -1299,8 +1299,16 @@
       else
       {
+#if HHI_FIX
+        riY = xBlend( iYL, iYR, m_iBlendDistWeight );
+#if HHI_VSO_COLOR_PLANES    
+        riU = xBlend( iUL, iUR, m_iBlendDistWeight );
+        riV = xBlend( iVL, iVR, m_iBlendDistWeight );
+#endif
+#else
         riY = xBlend( iYR, iYL, m_iBlendDistWeight );
 #if HHI_VSO_COLOR_PLANES
         riU = xBlend( iUR, iUL, m_iBlendDistWeight );
         riV = xBlend( iVR, iVL, m_iBlendDistWeight );
+#endif
 #endif
       }
Index: trunk/source/Lib/TLibRenderer/TRenTop.cpp
===================================================================
--- trunk/source/Lib/TLibRenderer/TRenTop.cpp	(revision 78)
+++ trunk/source/Lib/TLibRenderer/TRenTop.cpp	(revision 81)
@@ -1013,4 +1013,18 @@
           if ((iPrevShiftedPos + (iStep >> 1) ) > iPrevShiftedPosCeiled )
           {
+#if HHI_FIX
+            if ( !((iInterPolPos < (Int) 0) || (iInterPolPos >= iOutputWidth)))
+            {
+
+              for( UInt uiCurPlane = 0; uiCurPlane < uiNumberOfPlanes; uiCurPlane++)
+              {
+                apcOutputData[uiCurPlane][iInterPolPos]  = apcInputData[uiCurPlane][iPosX - iStep];
+              }
+              pcFilledData[iInterPolPos]  = REN_IS_FILLED;
+
+            }           
+            iInterPolPos++;
+          }          
+#else
           if ( (iInterPolPos < (Int) 0) || (iInterPolPos >= iOutputWidth))
           {
@@ -1027,4 +1041,5 @@
             iInterPolPos++;
         }
+#endif
 
           // Fill Disocclusion
@@ -1039,5 +1054,4 @@
                   apcOutputData[uiCurPlane][iInterPolPos]  = apcInputData[uiCurPlane][iPosX];
                 }
-
               }
             }
@@ -1050,4 +1064,15 @@
         {
           iInterPolPos = iShiftedPosFloor >> m_iRelShiftLUTPrec;
+#if HHI_FIX
+          if ( !((iInterPolPos < (Int) 0) || (iInterPolPos >= iOutputWidth)))
+          {        
+            for( UInt uiCurPlane = 0; uiCurPlane < uiNumberOfPlanes; uiCurPlane++)
+            {
+              apcOutputData[uiCurPlane][iInterPolPos]  = apcInputData[uiCurPlane][iPosX ];
+            }
+
+            pcFilledData[iInterPolPos]  = REN_IS_FILLED;
+          }
+#else
           if ( (iInterPolPos < (Int) 0) || (iInterPolPos >= iOutputWidth))
           {
@@ -1063,4 +1088,5 @@
 
           pcFilledData[iInterPolPos]  = REN_IS_FILLED;
+#endif
         }
       }
