Index: branches/HTM-8.2-dev2-LG/source/Lib/TLibCommon/TComDataCU.cpp
===================================================================
--- branches/HTM-8.2-dev2-LG/source/Lib/TLibCommon/TComDataCU.cpp	(revision 685)
+++ branches/HTM-8.2-dev2-LG/source/Lib/TLibCommon/TComDataCU.cpp	(revision 690)
@@ -3526,4 +3526,14 @@
   Bool bDepthIPMCAvai = false;
 #endif 
+
+#if LGE_SHARP_VSP_INHERIT_F0104
+#if H_3D_IC
+  Bool bICFlag = getICFlag(uiAbsPartIdx);
+#endif
+#if H_3D_ARP
+  Bool bARPFlag = getARPW(uiAbsPartIdx)>0 ? true : false;
+#endif
+#endif
+
 #if H_3D_IV_MERGE
   
@@ -3747,5 +3757,14 @@
 #endif
 #if H_3D_VSP
-      if (pcCULeft->getVSPFlag(uiLeftPartIdx) == 1)
+      if (pcCULeft->getVSPFlag(uiLeftPartIdx) == 1
+#if LGE_SHARP_VSP_INHERIT_F0104
+#if H_3D_IC
+          && !bICFlag
+#endif
+#if H_3D_ARP
+          && !bARPFlag
+#endif
+#endif
+          )
       {
         vspFlag[iCount] = 1;
@@ -3835,7 +3854,25 @@
 #if H_3D_VSP
 #if MTK_VSP_SIMPLIFICATION_F0111
-      if ( ( ( getAddr() - pcCUAbove->getAddr() ) == 0) && (pcCUAbove->getVSPFlag(uiAbovePartIdx) == 1) )
+      if ( ( ( getAddr() - pcCUAbove->getAddr() ) == 0) && (pcCUAbove->getVSPFlag(uiAbovePartIdx) == 1) 
+#if LGE_SHARP_VSP_INHERIT_F0104
+#if H_3D_IC
+          && !bICFlag
+#endif
+#if H_3D_ARP
+          && !bARPFlag
+#endif
+#endif
+          )
 #else
-      if (pcCUAbove->getVSPFlag(uiAbovePartIdx) == 1)
+      if (pcCUAbove->getVSPFlag(uiAbovePartIdx) == 1
+#if LGE_SHARP_VSP_INHERIT_F0104
+#if H_3D_IC
+          && !bICFlag
+#endif
+#if H_3D_ARP
+          && !bARPFlag
+#endif
+#endif
+          )
 #endif
       {
@@ -3897,7 +3934,25 @@
 #if H_3D_VSP
 #if MTK_VSP_SIMPLIFICATION_F0111
-    if ( ( ( getAddr() - pcCUAboveRight->getAddr() ) == 0) && (pcCUAboveRight->getVSPFlag(uiAboveRightPartIdx) == 1) )
+    if ( ( ( getAddr() - pcCUAboveRight->getAddr() ) == 0) && (pcCUAboveRight->getVSPFlag(uiAboveRightPartIdx) == 1) 
+#if LGE_SHARP_VSP_INHERIT_F0104
+#if H_3D_IC
+        && !bICFlag
+#endif
+#if H_3D_ARP
+        && !bARPFlag
+#endif
+#endif
+        )
 #else
-    if (pcCUAboveRight->getVSPFlag(uiAboveRightPartIdx) == 1)
+    if (pcCUAboveRight->getVSPFlag(uiAboveRightPartIdx) == 1
+#if LGE_SHARP_VSP_INHERIT_F0104
+#if H_3D_IC
+        && !bICFlag
+#endif
+#if H_3D_ARP
+        && !bARPFlag
+#endif
+#endif
+        )
 #endif
     {
@@ -3983,5 +4038,14 @@
   /////////////////////////////////////////////////
 
-  if ( xAddVspCand( mrgCandIdx, &cDisInfo, iCount, abCandIsInter, pcMvFieldNeighbours, puhInterDirNeighbours, vspFlag ) )
+  if (
+#if LGE_SHARP_VSP_INHERIT_F0104
+#if H_3D_IC
+      !bICFlag &&
+#endif
+#if H_3D_ARP
+      !bARPFlag &&
+#endif
+#endif
+      xAddVspCand( mrgCandIdx, &cDisInfo, iCount, abCandIsInter, pcMvFieldNeighbours, puhInterDirNeighbours, vspFlag ) )
   {
     return;
@@ -4023,5 +4087,14 @@
 #endif
 #if H_3D_VSP
-    if (pcCULeftBottom->getVSPFlag(uiLeftBottomPartIdx) == 1)
+    if (pcCULeftBottom->getVSPFlag(uiLeftBottomPartIdx) == 1
+#if LGE_SHARP_VSP_INHERIT_F0104
+#if H_3D_IC
+        && !bICFlag
+#endif
+#if H_3D_ARP
+        && !bARPFlag
+#endif
+#endif
+        )
     {
       vspFlag[iCount] = 1;
@@ -4075,7 +4148,25 @@
 #if H_3D_VSP
 #if MTK_VSP_SIMPLIFICATION_F0111
-      if ( ( ( getAddr() - pcCUAboveLeft->getAddr() ) == 0) && (pcCUAboveLeft->getVSPFlag(uiAboveLeftPartIdx) == 1) )
+      if ( ( ( getAddr() - pcCUAboveLeft->getAddr() ) == 0) && (pcCUAboveLeft->getVSPFlag(uiAboveLeftPartIdx) == 1) 
+#if LGE_SHARP_VSP_INHERIT_F0104
+#if H_3D_IC
+          && !bICFlag
+#endif
+#if H_3D_ARP
+          && !bARPFlag
+#endif
+#endif
+          )
 #else
-      if (pcCUAboveLeft->getVSPFlag(uiAboveLeftPartIdx) == 1)
+      if (pcCUAboveLeft->getVSPFlag(uiAboveLeftPartIdx) == 1
+#if LGE_SHARP_VSP_INHERIT_F0104
+#if H_3D_IC
+          && !bICFlag
+#endif
+#if H_3D_ARP
+          && !bARPFlag
+#endif
+#endif
+          )
 #endif
       {
Index: branches/HTM-8.2-dev2-LG/source/Lib/TLibCommon/TypeDef.h
===================================================================
--- branches/HTM-8.2-dev2-LG/source/Lib/TLibCommon/TypeDef.h	(revision 685)
+++ branches/HTM-8.2-dev2-LG/source/Lib/TLibCommon/TypeDef.h	(revision 690)
@@ -233,4 +233,5 @@
 #endif
 #define MTK_VSP_SIMPLIFICATION_F0111      1   // 1. Inherited VSP also use NBDV of current CU, 2. VSP cannot be inherited from above LCU rowss
+#define LGE_SHARP_VSP_INHERIT_F0104       1
 #endif
 
Index: branches/HTM-8.2-dev2-LG/source/Lib/TLibDecoder/TDecCu.cpp
===================================================================
--- branches/HTM-8.2-dev2-LG/source/Lib/TLibDecoder/TDecCu.cpp	(revision 685)
+++ branches/HTM-8.2-dev2-LG/source/Lib/TLibDecoder/TDecCu.cpp	(revision 690)
@@ -390,4 +390,13 @@
     UInt uiMergeIndex = pcCU->getMergeIndex(uiAbsPartIdx);
 
+#if LGE_SHARP_VSP_INHERIT_F0104
+#if H_3D_IC
+    m_pcEntropyDecoder->decodeICFlag( pcCU, uiAbsPartIdx, uiDepth );
+#endif
+#if H_3D_ARP
+    m_pcEntropyDecoder->decodeARPW( pcCU , uiAbsPartIdx , uiDepth );
+#endif
+#endif
+
 #if H_3D_VSP
     Int vspFlag[MRG_MAX_NUM_CANDS_MEM];
@@ -435,4 +444,5 @@
       }
     }
+#if !LGE_SHARP_VSP_INHERIT_F0104
 #if H_3D_IC
     m_pcEntropyDecoder->decodeICFlag( pcCU, uiAbsPartIdx, uiDepth );
@@ -441,4 +451,6 @@
     m_pcEntropyDecoder->decodeARPW( pcCU , uiAbsPartIdx , uiDepth );
 #endif
+#endif
+
     xFinishDecodeCU( pcCU, uiAbsPartIdx, uiDepth, ruiIsLast );
 #if QC_DEPTH_IV_MRG_F0125
@@ -470,4 +482,5 @@
   // prediction mode ( Intra : direction mode, Inter : Mv, reference idx )
   m_pcEntropyDecoder->decodePredInfo( pcCU, uiAbsPartIdx, uiDepth, m_ppcCU[uiDepth]);
+#if !LGE_SHARP_VSP_INHERIT_F0104
 #if H_3D_IC
   m_pcEntropyDecoder->decodeICFlag( pcCU, uiAbsPartIdx, uiDepth );
@@ -476,4 +489,5 @@
   m_pcEntropyDecoder->decodeARPW    ( pcCU , uiAbsPartIdx , uiDepth );  
 #endif  
+#endif
 #if H_3D_INTER_SDC
   m_pcEntropyDecoder->decodeInterSDCFlag( pcCU, uiAbsPartIdx, uiDepth );
Index: branches/HTM-8.2-dev2-LG/source/Lib/TLibDecoder/TDecEntropy.cpp
===================================================================
--- branches/HTM-8.2-dev2-LG/source/Lib/TLibDecoder/TDecEntropy.cpp	(revision 685)
+++ branches/HTM-8.2-dev2-LG/source/Lib/TLibDecoder/TDecEntropy.cpp	(revision 690)
@@ -235,4 +235,12 @@
       decodeMergeIndex( pcCU, uiPartIdx, uiSubPartIdx, uiDepth );
       UInt uiMergeIndex = pcCU->getMergeIndex(uiSubPartIdx);
+#if LGE_SHARP_VSP_INHERIT_F0104
+#if H_3D_IC
+      decodeICFlag( pcCU, uiAbsPartIdx, uiDepth );
+#endif
+#if H_3D_ARP
+      decodeARPW  ( pcCU, uiAbsPartIdx, uiDepth );
+#endif
+#endif
       if ( pcCU->getSlice()->getPPS()->getLog2ParallelMergeLevelMinus2() && ePartSize != SIZE_2Nx2N && pcSubCU->getWidth( 0 ) <= 8 ) 
       {
@@ -301,4 +309,12 @@
         }
       }
+#if LGE_SHARP_VSP_INHERIT_F0104
+#if H_3D_IC
+      decodeICFlag( pcCU, uiAbsPartIdx, uiDepth );
+#endif
+#if H_3D_ARP
+      decodeARPW  ( pcCU, uiAbsPartIdx, uiDepth );
+#endif
+#endif
     }
 #if H_3D_VSP
Index: branches/HTM-8.2-dev2-LG/source/Lib/TLibEncoder/TEncCu.cpp
===================================================================
--- branches/HTM-8.2-dev2-LG/source/Lib/TLibEncoder/TEncCu.cpp	(revision 685)
+++ branches/HTM-8.2-dev2-LG/source/Lib/TLibEncoder/TEncCu.cpp	(revision 690)
@@ -1775,12 +1775,18 @@
 #endif
 
+#if H_3D_ARP && LGE_SHARP_VSP_INHERIT_F0104 
+  DisInfo cOrigDisInfo = rpcTempCU->getDvInfo(0);
+#else
   rpcTempCU->setPartSizeSubParts( SIZE_2Nx2N, 0, uhDepth ); // interprets depth relative to LCU level
   rpcTempCU->setCUTransquantBypassSubParts( m_pcEncCfg->getCUTransquantBypassFlagValue(), 0, uhDepth );
+#endif
 
 #if H_3D_VSP
+#if !(H_3D_ARP && LGE_SHARP_VSP_INHERIT_F0104)
   Int vspFlag[MRG_MAX_NUM_CANDS_MEM];
   memset(vspFlag, 0, sizeof(Int)*MRG_MAX_NUM_CANDS_MEM);
   InheritedVSPDisInfo inheritedVSPDisInfo[MRG_MAX_NUM_CANDS_MEM];
-  rpcTempCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours,uhInterDirNeighbours, vspFlag,inheritedVSPDisInfo, numValidMergeCand );
+  rpcTempCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours,uhInterDirNeighbours, vspFlag, inheritedVSPDisInfo, numValidMergeCand );
+#endif
 #else
   rpcTempCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours,uhInterDirNeighbours, numValidMergeCand );
@@ -1792,5 +1798,9 @@
   Int mergeCandBuffer[MRG_MAX_NUM_CANDS];
 #endif
+#if H_3D_ARP && LGE_SHARP_VSP_INHERIT_F0104
+for( UInt ui = 0; ui < rpcTempCU->getSlice()->getMaxNumMergeCand(); ++ui )
+#else
 for( UInt ui = 0; ui < numValidMergeCand; ++ui )
+#endif
   {
     mergeCandBuffer[ui] = 0;
@@ -1817,5 +1827,19 @@
   for( Int nARPW=nARPWMax; nARPW >= 0 ; nARPW-- )
   {
-    memset( mergeCandBuffer, 0, MRG_MAX_NUM_CANDS*sizeof(Int) );
+    memset( mergeCandBuffer, 0, MRG_MAX_NUM_CANDS_MEM*sizeof(Int) );
+#if LGE_SHARP_VSP_INHERIT_F0104
+    rpcTempCU->setPartSizeSubParts( SIZE_2Nx2N, 0, uhDepth ); // interprets depth relative to LCU level
+    rpcTempCU->setCUTransquantBypassSubParts( m_pcEncCfg->getCUTransquantBypassFlagValue(), 0, uhDepth );
+    rpcTempCU->setARPWSubParts( (UChar)nARPW , 0 , uhDepth );
+#if H_3D_IC
+    rpcTempCU->setICFlagSubParts( bICFlag, 0, 0, uhDepth );
+#endif
+    rpcTempCU->getDvInfo(0) = cOrigDisInfo;
+    rpcTempCU->setDvInfoSubParts(cOrigDisInfo, 0, 0, uhDepth );
+    Int vspFlag[MRG_MAX_NUM_CANDS_MEM];
+    memset(vspFlag, 0, sizeof(Int)*MRG_MAX_NUM_CANDS_MEM);
+    InheritedVSPDisInfo inheritedVSPDisInfo[MRG_MAX_NUM_CANDS_MEM];
+    rpcTempCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours,uhInterDirNeighbours, vspFlag, inheritedVSPDisInfo, numValidMergeCand );
+#endif
 #endif
   for( UInt uiNoResidual = 0; uiNoResidual < iteration; ++uiNoResidual )
@@ -1855,5 +1879,4 @@
           rpcTempCU->getCUMvField( REF_PIC_LIST_0 )->setAllMvField( cMvFieldNeighbours[0 + 2*uiMergeCand], SIZE_2Nx2N, 0, 0 ); // interprets depth relative to rpcTempCU level
           rpcTempCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( cMvFieldNeighbours[1 + 2*uiMergeCand], SIZE_2Nx2N, 0, 0 ); // interprets depth relative to rpcTempCU level
-
 #if H_3D_ARP
           if( nARPW )
@@ -1871,5 +1894,9 @@
             if( !bSignalflag[0] && !bSignalflag[1] )
             {
+#if LGE_SHARP_VSP_INHERIT_F0104
+              continue;
+#else
               rpcTempCU->setARPWSubParts( 0 , 0 , uhDepth );
+#endif
             }
           }
