Index: branches/HTM-11.2-dev1-Samsung/source/Lib/TLibCommon/ContextTables.h
===================================================================
--- branches/HTM-11.2-dev1-Samsung/source/Lib/TLibCommon/ContextTables.h	(revision 989)
+++ branches/HTM-11.2-dev1-Samsung/source/Lib/TLibCommon/ContextTables.h	(revision 990)
@@ -432,9 +432,15 @@
 static const UChar INIT_DBBP_FLAG[3][DBBP_NUM_FLAG_CTX] =
 {
+#if SEC_DBBP_EXPLICIT_SIG_I0077
+  { CNU },
+  { CNU },
+  { CNU },
+#else
   { 161 },
   { 161 },
   { 161 },
-};
-#endif
-
-#endif
+#endif
+};
+#endif
+
+#endif
Index: branches/HTM-11.2-dev1-Samsung/source/Lib/TLibCommon/TypeDef.h
===================================================================
--- branches/HTM-11.2-dev1-Samsung/source/Lib/TLibCommon/TypeDef.h	(revision 989)
+++ branches/HTM-11.2-dev1-Samsung/source/Lib/TLibCommon/TypeDef.h	(revision 990)
@@ -235,4 +235,5 @@
                                               // H_3D_FIX_DBBP_IVMP        Fix . Enable IVMP is always disabled, when DBBP is enabled. The original intention is to disable Sub-PU IVMP when DBBP is enabled, not to disable IVMP itself. 
 
+#define SEC_DBBP_EXPLICIT_SIG_I0077       1   // Remove the partition derivation and signal dbbp_flag only when the partion mode is 2NxN/Nx2N, JCT3V-I0077
 
 #define H_3D_DDD                          1   // Disparity derived depth coding
Index: branches/HTM-11.2-dev1-Samsung/source/Lib/TLibDecoder/TDecEntropy.cpp
===================================================================
--- branches/HTM-11.2-dev1-Samsung/source/Lib/TLibDecoder/TDecEntropy.cpp	(revision 989)
+++ branches/HTM-11.2-dev1-Samsung/source/Lib/TLibDecoder/TDecEntropy.cpp	(revision 990)
@@ -139,9 +139,12 @@
   
 #if H_3D_DBBP
-
+#if SEC_DBBP_EXPLICIT_SIG_I0077
+  if( pcCU->getSlice()->getVPS()->getUseDBBP(pcCU->getSlice()->getLayerIdInVps()) && (pcCU->getPartitionSize(uiAbsPartIdx) == SIZE_2NxN || pcCU->getPartitionSize(uiAbsPartIdx) == SIZE_Nx2N) )
+#else
   if( pcCU->getSlice()->getVPS()->getUseDBBP(pcCU->getSlice()->getLayerIdInVps()) )
+#endif
   {
     decodeDBBPFlag(pcCU, uiAbsPartIdx, uiDepth);
-    
+#if !SEC_DBBP_EXPLICIT_SIG_I0077    
     if( pcCU->getDBBPFlag(uiAbsPartIdx) )
     {
@@ -167,4 +170,5 @@
       pcCU->setDBBPFlagSubParts(true, uiAbsPartIdx+uiPUOffset, 1, uiDepth);
     }
+#endif
   }
 #endif
Index: branches/HTM-11.2-dev1-Samsung/source/Lib/TLibDecoder/TDecSbac.cpp
===================================================================
--- branches/HTM-11.2-dev1-Samsung/source/Lib/TLibDecoder/TDecSbac.cpp	(revision 989)
+++ branches/HTM-11.2-dev1-Samsung/source/Lib/TLibDecoder/TDecSbac.cpp	(revision 990)
@@ -2138,4 +2138,11 @@
   m_pcTDecBinIf->decodeBin( uiSymbol, m_cDBBPFlagSCModel.get( 0, 0, 0 ) );
   
+#if SEC_DBBP_EXPLICIT_SIG_I0077
+  PartSize ePartSize = pcCU->getPartitionSize( uiAbsPartIdx );
+  AOF( ePartSize == SIZE_2NxN || ePartSize == SIZE_Nx2N );
+  UInt uiPUOffset = ( g_auiPUOffset[UInt( ePartSize )] << ( ( pcCU->getSlice()->getSPS()->getMaxCUDepth() - uiDepth ) << 1 ) ) >> 4;
+  pcCU->setDBBPFlagSubParts(uiSymbol, uiAbsPartIdx, 0, uiDepth);
+  pcCU->setDBBPFlagSubParts(uiSymbol, uiAbsPartIdx+uiPUOffset, 1, uiDepth);
+#else
   if( uiSymbol )
   {
@@ -2144,4 +2151,5 @@
     pcCU->setDBBPFlagSubParts(true, uiAbsPartIdx + 2*uiCurrPartNumQ, 1, uiDepth);
   }
+#endif
 }
 #endif
Index: branches/HTM-11.2-dev1-Samsung/source/Lib/TLibEncoder/TEncEntropy.cpp
===================================================================
--- branches/HTM-11.2-dev1-Samsung/source/Lib/TLibEncoder/TEncEntropy.cpp	(revision 989)
+++ branches/HTM-11.2-dev1-Samsung/source/Lib/TLibEncoder/TEncEntropy.cpp	(revision 990)
@@ -244,4 +244,5 @@
   
 #if H_3D_DBBP
+#if! SEC_DBBP_EXPLICIT_SIG_I0077
   PartSize eVirtualPartSize = pcCU->getPartitionSize(uiAbsPartIdx);
   if( pcCU->getDBBPFlag(uiAbsPartIdx) )
@@ -253,12 +254,17 @@
   }
 #endif
+#endif
   
   m_pcEntropyCoderIf->codePartSize( pcCU, uiAbsPartIdx, uiDepth );
   
 #if H_3D_DBBP
+#if SEC_DBBP_EXPLICIT_SIG_I0077
+  if( pcCU->getSlice()->getVPS()->getUseDBBP(pcCU->getSlice()->getLayerIdInVps()) && (pcCU->getPartitionSize(uiAbsPartIdx) == SIZE_2NxN || pcCU->getPartitionSize(uiAbsPartIdx) == SIZE_Nx2N) )
+#else
   if( pcCU->getSlice()->getVPS()->getUseDBBP(pcCU->getSlice()->getLayerIdInVps()) )
+#endif
   {
     encodeDBBPFlag(pcCU, uiAbsPartIdx, bRD);
-    
+#if !SEC_DBBP_EXPLICIT_SIG_I0077
     if( pcCU->getDBBPFlag(uiAbsPartIdx) )
     {
@@ -266,4 +272,5 @@
       pcCU->setPartSizeSubParts(eVirtualPartSize, uiAbsPartIdx, uiDepth);
     }
+#endif
   }
 #endif
Index: branches/HTM-11.2-dev1-Samsung/source/Lib/TLibEncoder/TEncSbac.cpp
===================================================================
--- branches/HTM-11.2-dev1-Samsung/source/Lib/TLibEncoder/TEncSbac.cpp	(revision 989)
+++ branches/HTM-11.2-dev1-Samsung/source/Lib/TLibEncoder/TEncSbac.cpp	(revision 990)
@@ -2343,4 +2343,8 @@
 Void TEncSbac::codeDBBPFlag( TComDataCU* pcCU, UInt uiAbsPartIdx )
 {
+#if SEC_DBBP_EXPLICIT_SIG_I0077
+  PartSize ePartSize = pcCU->getPartitionSize( uiAbsPartIdx );
+  AOF( ePartSize == SIZE_2NxN || ePartSize == SIZE_Nx2N );
+#endif
   AOF( pcCU->getSlice()->getVPS()->getUseDBBP(pcCU->getSlice()->getLayerIdInVps()) );
   AOF( !pcCU->getSlice()->getIsDepth() );
