Index: /branches/HTM-13.1-dev2-Sony/source/App/TAppEncoder/TAppEncCfg.cpp
===================================================================
--- /branches/HTM-13.1-dev2-Sony/source/App/TAppEncoder/TAppEncCfg.cpp	(revision 1157)
+++ /branches/HTM-13.1-dev2-Sony/source/App/TAppEncoder/TAppEncCfg.cpp	(revision 1158)
@@ -1587,5 +1587,5 @@
   xConfirmPara( m_bipredSearchRange < 0 ,                                                   "Search Range must be more than 0" );
 #ifdef SONY_MV_V_CONST_C0078
-  xConfirmPara( m_iVerticalDisparitySearchRange < 0 ,                                      "Vertical Disparity Search Range must be more than 0" );
+  xConfirmPara( m_iVerticalDisparitySearchRange <= 0 ,                                      "Vertical Disparity Search Range must be more than 0" );
 #endif
   xConfirmPara( m_iMaxDeltaQP > 7,                                                          "Absolute Delta QP exceeds supported range (0 to 7)" );
Index: /branches/HTM-13.1-dev2-Sony/source/Lib/TLibCommon/TComDataCU.cpp
===================================================================
--- /branches/HTM-13.1-dev2-Sony/source/Lib/TLibCommon/TComDataCU.cpp	(revision 1157)
+++ /branches/HTM-13.1-dev2-Sony/source/Lib/TLibCommon/TComDataCU.cpp	(revision 1158)
@@ -5341,4 +5341,20 @@
 }
 
+#if SONY_MV_V_CONST_C0078
+Void TComDataCU::checkMV_V (TComMv&  rcMv,  RefPicList eRefPicList, int iRefIdx )
+{
+  if ( getSlice()->getSPS()->getInterViewMvVertConstraintFlag() )
+  {
+    if ( getSlice()->getRefPic( eRefPicList, iRefIdx )->getPOC() == getSlice()->getPOC() )
+    {
+        //When inter_view_mv_vert_constraint_flag is equal to 1,
+        //the vertical component of the motion vectors used for inter-layer prediction 
+        //shall be equal to or less than 56 in units of luma samples
+        assert ( rcMv.getVer() <= (56<<2) );
+    }
+  }
+}
+#endif
+
 UInt TComDataCU::getIntraSizeIdx(UInt uiAbsPartIdx)
 {
Index: /branches/HTM-13.1-dev2-Sony/source/Lib/TLibCommon/TComDataCU.h
===================================================================
--- /branches/HTM-13.1-dev2-Sony/source/Lib/TLibCommon/TComDataCU.h	(revision 1157)
+++ /branches/HTM-13.1-dev2-Sony/source/Lib/TLibCommon/TComDataCU.h	(revision 1158)
@@ -591,4 +591,7 @@
   
   Void          clipMv                ( TComMv&     rcMv     );
+#if SONY_MV_V_CONST_C0078
+  Void          checkMV_V (TComMv&  rcMv,  RefPicList eRefPicList, int iRefIdx );
+#endif
   Void          getMvPredLeft         ( TComMv&     rcMvPred )   { rcMvPred = m_cMvFieldA.getMv(); }
   Void          getMvPredAbove        ( TComMv&     rcMvPred )   { rcMvPred = m_cMvFieldB.getMv(); }
Index: /branches/HTM-13.1-dev2-Sony/source/Lib/TLibCommon/TComPrediction.cpp
===================================================================
--- /branches/HTM-13.1-dev2-Sony/source/Lib/TLibCommon/TComPrediction.cpp	(revision 1157)
+++ /branches/HTM-13.1-dev2-Sony/source/Lib/TLibCommon/TComPrediction.cpp	(revision 1158)
@@ -1293,5 +1293,7 @@
   TComMv      cMv         = pcCU->getCUMvField( eRefPicList )->getMv( uiPartAddr );
   pcCU->clipMv(cMv);
-
+#if SONY_MV_V_CONST_C0078
+  pcCU->checkMV_V(cMv, eRefPicList, iRefIdx );
+#endif
 #if H_3D_ARP
   if(pcCU->getARPW( uiPartAddr ) > 0  && pcCU->getSlice()->getRefPic( eRefPicList, iRefIdx )->getPOC()== pcCU->getSlice()->getPOC())
Index: /branches/HTM-13.1-dev2-Sony/source/Lib/TLibEncoder/TEncSearch.cpp
===================================================================
--- /branches/HTM-13.1-dev2-Sony/source/Lib/TLibEncoder/TEncSearch.cpp	(revision 1157)
+++ /branches/HTM-13.1-dev2-Sony/source/Lib/TLibEncoder/TEncSearch.cpp	(revision 1158)
@@ -5398,10 +5398,7 @@
 #ifdef SONY_MV_V_CONST_C0078
   if ( bMv_VRng_Restricted ) {
-    Int iRestrictMvVrange = ( iVerDispSrchRng << iMvShift ) ;
+    Int iRestrictMvVrange = ( iVerDispSrchRng - 1 ) << iMvShift ; // -1 to consider subpel search
     if ( rcMvSrchRngRB.getVer() >= iRestrictMvVrange  ){
-      rcMvSrchRngRB.setVer( iRestrictMvVrange );
-    }
-    if ( rcMvSrchRngLT.getVer() <= -iRestrictMvVrange ){
-      rcMvSrchRngLT.setVer( -iRestrictMvVrange );
+      rcMvSrchRngRB.setVer( iRestrictMvVrange ); //only positive side is restricted
     }
   }
