Index: branches/HTM-13.1-dev1-Samsung/source/Lib/TLibCommon/TComDataCU.cpp
===================================================================
--- branches/HTM-13.1-dev1-Samsung/source/Lib/TLibCommon/TComDataCU.cpp	(revision 1146)
+++ branches/HTM-13.1-dev1-Samsung/source/Lib/TLibCommon/TComDataCU.cpp	(revision 1147)
@@ -891,5 +891,5 @@
   memset( m_puhCbf[2],          0, iSizeInUchar );
   memset( m_puhDepth,     uiDepth, iSizeInUchar );
-#if H_3D_NBDV
+#if H_3D_NBDV && !SEC_ARP_REM_ENC_RESTRICT_K0035
   m_pDvInfo->bDV = false;
 #endif
@@ -5940,5 +5940,9 @@
 #endif
 #if H_3D_IV_MERGE
+#if SEC_ARP_REM_ENC_RESTRICT_K0035
+Void TComDataCU::getDispforDepth (UInt uiPartIdx, UInt uiPartAddr, DisInfo* pDisp)
+#else
 Bool TComDataCU::getDispforDepth (UInt uiPartIdx, UInt uiPartAddr, DisInfo* pDisp)
+#endif
 {
 
@@ -5956,8 +5960,11 @@
       pDisp->m_acNBDV = cMv;
       pDisp->m_aVIdxCan = iViewIdx;
-
+#if !SEC_ARP_REM_ENC_RESTRICT_K0035
       return true;
-  }
+#endif
+  }
+#if !SEC_ARP_REM_ENC_RESTRICT_K0035
   return false;
+#endif
 }
 #endif
@@ -6038,5 +6045,9 @@
 //TBD#2: set of DvMCP values need to be done as part of inter-view motion prediction process. Remove this comment once merge related integration is done
 //To be checked: Parallel Merge features for NBDV, related to DV_DERIVATION_PARALLEL_B0096 and LGE_IVMP_PARALLEL_MERGE_B0136 are not integrated. The need of these features due to the adoption of CU-based NBDV is not clear. We need confirmation on this, especially by proponents
+#if SEC_ARP_REM_ENC_RESTRICT_K0035
+Void TComDataCU::getDisMvpCandNBDV( DisInfo* pDInfo
+#else
 Bool TComDataCU::getDisMvpCandNBDV( DisInfo* pDInfo
+#endif
 #if H_3D_NBDV_REF
 , Bool bDepthRefine
@@ -6046,5 +6057,7 @@
   //// ******* Init variables ******* /////
   // Init disparity struct for results
+#if !SEC_ARP_REM_ENC_RESTRICT_K0035
   pDInfo->bDV = false;   
+#endif
   pDInfo->m_aVIdxCan = -1;
 
@@ -6141,5 +6154,9 @@
         pDInfo->m_acDoNBDV  = cColMv;
 #endif //H_3D_NBDV_REF
+#if SEC_ARP_REM_ENC_RESTRICT_K0035
+        return;
+#else
         return true;
+#endif
       }
     }
@@ -6158,5 +6175,9 @@
 #endif
     ) )
+#if SEC_ARP_REM_ENC_RESTRICT_K0035
+    return;
+#else
     return true;
+#endif
 
   //// ******* Get disparity from above block ******* /////
@@ -6170,5 +6191,9 @@
 #endif
       ) )
+#if SEC_ARP_REM_ENC_RESTRICT_K0035
+      return;
+#else
       return true;
+#endif
   }
 
@@ -6216,5 +6241,9 @@
           pDInfo->m_acDoNBDV = cDispVec;
 #endif
+#if SEC_ARP_REM_ENC_RESTRICT_K0035
+          return;
+#else
           return true;
+#endif
         }
       }
@@ -6252,7 +6281,11 @@
       pDInfo->m_acDoNBDV = defaultDV;
 #endif
+#if !SEC_ARP_REM_ENC_RESTRICT_K0035
       return true;
-  }
+#endif
+  }
+#if !SEC_ARP_REM_ENC_RESTRICT_K0035
   return false; 
+#endif
 }
 
Index: branches/HTM-13.1-dev1-Samsung/source/Lib/TLibCommon/TComDataCU.h
===================================================================
--- branches/HTM-13.1-dev1-Samsung/source/Lib/TLibCommon/TComDataCU.h	(revision 1146)
+++ branches/HTM-13.1-dev1-Samsung/source/Lib/TLibCommon/TComDataCU.h	(revision 1147)
@@ -501,5 +501,9 @@
   );
   Bool          xGetColDisMV      ( Int currCandPic, RefPicList eRefPicList, Int refidx, Int uiCUAddr, Int uiPartUnitIdx, TComMv& rcMv, Int & iTargetViewIdx, Int & iStartViewIdx );
+#if SEC_ARP_REM_ENC_RESTRICT_K0035
+  Void          getDisMvpCandNBDV ( DisInfo* pDInfo
+#else
   Bool          getDisMvpCandNBDV ( DisInfo* pDInfo
+#endif
 #if H_3D_NBDV_REF
    , Bool bDepthRefine = false
@@ -508,5 +512,9 @@
    
 #if H_3D
+#if SEC_ARP_REM_ENC_RESTRICT_K0035
+  Void          getDispforDepth  ( UInt uiPartIdx, UInt uiPartAddr, DisInfo* cDisp);
+#else
   Bool          getDispforDepth  ( UInt uiPartIdx, UInt uiPartAddr, DisInfo* cDisp);
+#endif
   Bool          getDispMvPredCan(UInt uiPartIdx, RefPicList eRefPicList, Int iRefIdx, Int* paiPdmRefIdx, TComMv* pacPdmMv, DisInfo* pDis, Int* iPdm );
 #endif
Index: branches/HTM-13.1-dev1-Samsung/source/Lib/TLibCommon/TComMotionInfo.h
===================================================================
--- branches/HTM-13.1-dev1-Samsung/source/Lib/TLibCommon/TComMotionInfo.h	(revision 1146)
+++ branches/HTM-13.1-dev1-Samsung/source/Lib/TLibCommon/TComMotionInfo.h	(revision 1147)
@@ -63,5 +63,7 @@
 typedef struct _DisCand 
 {
+#if !SEC_ARP_REM_ENC_RESTRICT_K0035
   Bool bDV;
+#endif
   TComMv m_acNBDV;              // DV from NBDV
 #if H_3D_NBDV_REF 
Index: branches/HTM-13.1-dev1-Samsung/source/Lib/TLibCommon/TComPrediction.cpp
===================================================================
--- branches/HTM-13.1-dev1-Samsung/source/Lib/TLibCommon/TComPrediction.cpp	(revision 1146)
+++ branches/HTM-13.1-dev1-Samsung/source/Lib/TLibCommon/TComPrediction.cpp	(revision 1147)
@@ -1255,4 +1255,8 @@
 #if H_3D_NBDV
   DisInfo cDistparity;
+#if SEC_ARP_REM_ENC_RESTRICT_K0035
+  cDistparity.m_acNBDV = pcCU->getDvInfo(0).m_acNBDV;
+  cDistparity.m_aVIdxCan = pcCU->getDvInfo(uiPartAddr).m_aVIdxCan;
+#else
   cDistparity.bDV           = pcCU->getDvInfo(uiPartAddr).bDV;
   if( cDistparity.bDV )
@@ -1262,11 +1266,17 @@
     cDistparity.m_aVIdxCan = pcCU->getDvInfo(uiPartAddr).m_aVIdxCan;
   }
+#endif
 #else
   assert(0); // ARP can be applied only when a DV is available
 #endif
-
+#if SEC_ARP_REM_ENC_RESTRICT_K0035
+  UChar dW = pcCU->getARPW ( uiPartAddr );
+#else
   UChar dW = cDistparity.bDV ? pcCU->getARPW ( uiPartAddr ) : 0;
-
+#endif
+
+#if !SEC_ARP_REM_ENC_RESTRICT_K0035
   if( cDistparity.bDV ) 
+#endif
   {
     Int arpRefIdx = pcCU->getSlice()->getFirstTRefIdx(eRefPicList);
@@ -1320,7 +1330,7 @@
       pYuvB0->clear(); pYuvB1->clear();
     }
-
+#if !SEC_ARP_REM_ENC_RESTRICT_K0035
     assert ( cDistparity.bDV );
-    
+#endif    
     TComMv cNBDV = cDistparity.m_acNBDV;
     pcCU->clipMv( cNBDV );
Index: branches/HTM-13.1-dev1-Samsung/source/Lib/TLibCommon/TypeDef.h
===================================================================
--- branches/HTM-13.1-dev1-Samsung/source/Lib/TLibCommon/TypeDef.h	(revision 1146)
+++ branches/HTM-13.1-dev1-Samsung/source/Lib/TLibCommon/TypeDef.h	(revision 1147)
@@ -118,4 +118,6 @@
                                               // MTK_I0072_IVARP_SCALING_FIX
 #define SEC_ARP_VIEW_REF_CHECK_J0037      1   // Signaling iv_res_pred_weight_idx when the current slice has both view and temporal reference picture(s), JCT3V-J0037 item1
+
+#define SEC_ARP_REM_ENC_RESTRICT_K0035    1   // Removal of encoder restriction of ARP, JCT3V-K0035
 
 #define H_3D_IC                           1   // Illumination Compensation, JCT3V-B0045, JCT3V-C0046, JCT3V-D0060
Index: branches/HTM-13.1-dev1-Samsung/source/Lib/TLibDecoder/TDecCu.cpp
===================================================================
--- branches/HTM-13.1-dev1-Samsung/source/Lib/TLibDecoder/TDecCu.cpp	(revision 1146)
+++ branches/HTM-13.1-dev1-Samsung/source/Lib/TLibDecoder/TDecCu.cpp	(revision 1147)
@@ -299,5 +299,7 @@
 #if H_3D_NBDV 
   DisInfo DvInfo; 
+#if !SEC_ARP_REM_ENC_RESTRICT_K0035
   DvInfo.bDV = false;
+#endif
   DvInfo.m_acNBDV.setZero();
   DvInfo.m_aVIdxCan = 0;
@@ -334,5 +336,9 @@
       if( pcCU->getSlice()->getIsDepth())
       {
+#if SEC_ARP_REM_ENC_RESTRICT_K0035
+        m_ppcCU[uiDepth]->getDispforDepth(0, 0, &DvInfo);
+#else
         DvInfo.bDV = m_ppcCU[uiDepth]->getDispforDepth(0, 0, &DvInfo);
+#endif
       }
       else
@@ -342,10 +348,18 @@
       if( pcCU->getSlice()->getDepthBasedBlkPartFlag() )  //Notes from QC: please check the condition for DoNBDV. Remove this comment once it is done.
       {
+#if SEC_ARP_REM_ENC_RESTRICT_K0035
+        m_ppcCU[uiDepth]->getDisMvpCandNBDV(&DvInfo, true);
+#else
         DvInfo.bDV = m_ppcCU[uiDepth]->getDisMvpCandNBDV(&DvInfo, true);
+#endif
       }
       else
 #endif
       {
+#if SEC_ARP_REM_ENC_RESTRICT_K0035
+        m_ppcCU[uiDepth]->getDisMvpCandNBDV(&DvInfo);
+#else
         DvInfo.bDV = m_ppcCU[uiDepth]->getDisMvpCandNBDV(&DvInfo);
+#endif
       }
 #if H_3D_IV_MERGE
Index: branches/HTM-13.1-dev1-Samsung/source/Lib/TLibEncoder/TEncCu.cpp
===================================================================
--- branches/HTM-13.1-dev1-Samsung/source/Lib/TLibEncoder/TEncCu.cpp	(revision 1146)
+++ branches/HTM-13.1-dev1-Samsung/source/Lib/TLibEncoder/TEncCu.cpp	(revision 1147)
@@ -437,5 +437,7 @@
 #if H_3D_VSP
   DisInfo DvInfo; 
+#if !SEC_ARP_REM_ENC_RESTRICT_K0035
   DvInfo.bDV = false;
+#endif
   DvInfo.m_acNBDV.setZero();
   DvInfo.m_aVIdxCan = 0;
@@ -583,5 +585,9 @@
           if (rpcTempCU->getSlice()->getIsDepth() )
           {
+#if SEC_ARP_REM_ENC_RESTRICT_K0035
+            rpcTempCU->getDispforDepth(0, 0, &DvInfo);
+#else
             DvInfo.bDV = rpcTempCU->getDispforDepth(0, 0, &DvInfo);
+#endif
           }
           else
@@ -590,8 +596,16 @@
 #if H_3D_NBDV_REF
           if( rpcTempCU->getSlice()->getDepthRefinementFlag() )
+#if SEC_ARP_REM_ENC_RESTRICT_K0035
+            rpcTempCU->getDisMvpCandNBDV(&DvInfo, true);
+#else
             DvInfo.bDV = rpcTempCU->getDisMvpCandNBDV(&DvInfo, true);
+#endif
           else
 #endif 
+#if SEC_ARP_REM_ENC_RESTRICT_K0035
+            rpcTempCU->getDisMvpCandNBDV(&DvInfo);
+#else
             DvInfo.bDV = rpcTempCU->getDisMvpCandNBDV(&DvInfo);
+#endif
 
 #if H_3D_IV_MERGE
@@ -1853,5 +1867,9 @@
 #if H_3D_ARP
   Int nARPWMax = rpcTempCU->getSlice()->getARPStepNum() - 1;
+#if SEC_ARP_REM_ENC_RESTRICT_K0035
+  if( nARPWMax < 0 || bICFlag )
+#else
   if( nARPWMax < 0 || !rpcTempCU->getDvInfo(0).bDV || bICFlag )
+#endif
   {
     nARPWMax = 0;
@@ -2193,6 +2211,9 @@
   Bool bFirstTime = true;
   Int nARPWMax    = rpcTempCU->getSlice()->getARPStepNum() - 1;
-
+#if SEC_ARP_REM_ENC_RESTRICT_K0035
+  if( nARPWMax < 0 || ePartSize != SIZE_2Nx2N || rpcTempCU->getICFlag(0) )
+#else
   if( nARPWMax < 0 || ePartSize != SIZE_2Nx2N || !rpcTempCU->getDvInfo(0).bDV || rpcTempCU->getICFlag(0) )
+#endif
   {
     nARPWMax = 0;
