Index: /branches/HTM-11.2-dev3-Samsung/cfg/3D-HEVC/NonCTC/allintra/baseCfg_2view+depth_AllIntra.cfg
===================================================================
--- /branches/HTM-11.2-dev3-Samsung/cfg/3D-HEVC/NonCTC/allintra/baseCfg_2view+depth_AllIntra.cfg	(revision 1014)
+++ /branches/HTM-11.2-dev3-Samsung/cfg/3D-HEVC/NonCTC/allintra/baseCfg_2view+depth_AllIntra.cfg	(revision 1015)
@@ -173,4 +173,5 @@
 VSO                       : 1                                      # use of view synthesis optimization for depth coding
 DMM                                : 1
+IVP                                : 1                 # use of intra-view prediction mode
 SDC                                : 1
 DLT                                : 1
Index: /branches/HTM-11.2-dev3-Samsung/cfg/3D-HEVC/NonCTC/allintra/baseCfg_3view+depth_AllIntra.cfg
===================================================================
--- /branches/HTM-11.2-dev3-Samsung/cfg/3D-HEVC/NonCTC/allintra/baseCfg_3view+depth_AllIntra.cfg	(revision 1014)
+++ /branches/HTM-11.2-dev3-Samsung/cfg/3D-HEVC/NonCTC/allintra/baseCfg_3view+depth_AllIntra.cfg	(revision 1015)
@@ -188,4 +188,5 @@
 VSO                       : 1                                      # use of view synthesis optimization for depth coding
 DMM                                : 1
+IVP                                : 1                 # use of intra-view prediction mode
 SDC                                : 1
 DLT                                : 1
Index: /branches/HTM-11.2-dev3-Samsung/cfg/3D-HEVC/baseCfg_2view+depth.cfg
===================================================================
--- /branches/HTM-11.2-dev3-Samsung/cfg/3D-HEVC/baseCfg_2view+depth.cfg	(revision 1014)
+++ /branches/HTM-11.2-dev3-Samsung/cfg/3D-HEVC/baseCfg_2view+depth.cfg	(revision 1015)
@@ -209,4 +209,5 @@
 VSO                                : 1                 # use of view synthesis optimization for depth coding
 DMM                                : 1
+IVP                                : 1                 # use of intra-view prediction mode
 SDC                                : 1
 DLT                                : 1
Index: /branches/HTM-11.2-dev3-Samsung/cfg/3D-HEVC/baseCfg_3view+depth.cfg
===================================================================
--- /branches/HTM-11.2-dev3-Samsung/cfg/3D-HEVC/baseCfg_3view+depth.cfg	(revision 1014)
+++ /branches/HTM-11.2-dev3-Samsung/cfg/3D-HEVC/baseCfg_3view+depth.cfg	(revision 1015)
@@ -240,4 +240,5 @@
 VSO                                : 1                 # use of view synthesis optimization for depth coding
 DMM                                : 1
+IVP                                : 1                 # use of intra-view prediction mode
 SDC                                : 1
 DLT                                : 1
Index: /branches/HTM-11.2-dev3-Samsung/cfg/3D-HEVC/fullCfg.cfg
===================================================================
--- /branches/HTM-11.2-dev3-Samsung/cfg/3D-HEVC/fullCfg.cfg	(revision 1014)
+++ /branches/HTM-11.2-dev3-Samsung/cfg/3D-HEVC/fullCfg.cfg	(revision 1015)
@@ -262,4 +262,5 @@
 VSO                       : 1                          # use of view synthesis optimization for depth coding
 DMM                                : 1
+IVP                                : 1                 # use of intra-view prediction mode
 SDC                                : 1
 DLT                                : 1
Index: /branches/HTM-11.2-dev3-Samsung/source/App/TAppEncoder/TAppEncCfg.cpp
===================================================================
--- /branches/HTM-11.2-dev3-Samsung/source/App/TAppEncoder/TAppEncCfg.cpp	(revision 1014)
+++ /branches/HTM-11.2-dev3-Samsung/source/App/TAppEncoder/TAppEncCfg.cpp	(revision 1015)
@@ -378,4 +378,7 @@
 #if H_3D_DIM
   ("DMM",                   m_useDMM,           true,  "Depth intra model modes")
+#if SEPARATE_FLAG_I0085
+  ("IVP",                   m_useIVP,           true,  "intra-view prediction")
+#endif
   ("SDC",                   m_useSDC,           true,  "Simplified depth coding")
   ("DLT",                   m_useDLT,           true,  "Depth lookup table")
@@ -2523,4 +2526,7 @@
 #if H_3D_DIM
   printf("DMM:%d ", m_useDMM );
+#if SEPARATE_FLAG_I0085
+  printf("IVP:%d ", m_useIVP );
+#endif
   printf("SDC:%d ", m_useSDC );
   printf("DLT:%d ", m_useDLT );
Index: /branches/HTM-11.2-dev3-Samsung/source/App/TAppEncoder/TAppEncCfg.h
===================================================================
--- /branches/HTM-11.2-dev3-Samsung/source/App/TAppEncoder/TAppEncCfg.h	(revision 1014)
+++ /branches/HTM-11.2-dev3-Samsung/source/App/TAppEncoder/TAppEncCfg.h	(revision 1015)
@@ -470,4 +470,7 @@
 #if H_3D_DIM
   Bool      m_useDMM;                                        ///< flag for using DMM
+#if SEPARATE_FLAG_I0085
+  Bool      m_useIVP;
+#endif
   Bool      m_useSDC;                                        ///< flag for using SDC
   Bool      m_useDLT;                                        ///< flag for using DLT
Index: /branches/HTM-11.2-dev3-Samsung/source/App/TAppEncoder/TAppEncTop.cpp
===================================================================
--- /branches/HTM-11.2-dev3-Samsung/source/App/TAppEncoder/TAppEncTop.cpp	(revision 1014)
+++ /branches/HTM-11.2-dev3-Samsung/source/App/TAppEncoder/TAppEncTop.cpp	(revision 1015)
@@ -199,4 +199,7 @@
 #if H_3D_DIM
     m_cTEncTop.setUseDMM                       ( isDepth ? m_useDMM               : false );
+#if SEPARATE_FLAG_I0085
+    m_cTEncTop.setUseIVP                       ( isDepth ? m_useIVP               : false );
+#endif
     m_cTEncTop.setUseSDC                       ( isDepth ? m_useSDC               : false );
     m_cTEncTop.setUseDLT                       ( isDepth ? m_useDLT               : false );
@@ -1827,4 +1830,7 @@
 #if H_3D_DIM
     vps.setVpsDepthModesFlag( layer, isDepth && !isLayerZero && (m_useDMM || m_useSDC || m_useDLT ) );
+#if SEPARATE_FLAG_I0085
+    vps.setIVPFlag          ( layer, isDepth && !isLayerZero && m_useIVP );
+#endif
 #endif
 
Index: /branches/HTM-11.2-dev3-Samsung/source/Lib/TLibCommon/TComSlice.cpp
===================================================================
--- /branches/HTM-11.2-dev3-Samsung/source/Lib/TLibCommon/TComSlice.cpp	(revision 1014)
+++ /branches/HTM-11.2-dev3-Samsung/source/Lib/TLibCommon/TComSlice.cpp	(revision 1015)
@@ -1952,4 +1952,7 @@
     m_viewIndex         [i] = -1; 
     m_vpsDepthModesFlag [i] = false;
+#if SEPARATE_FLAG_I0085
+    m_bIVPFlag [i]      = false;
+#endif
     m_ivMvScalingFlag = true; 
 #endif
@@ -1992,4 +1995,7 @@
 #if H_3D_INTER_SDC
     m_bInterSDCFlag        [ i ] = false;
+#endif
+#if SEPARATE_FLAG_I0085
+    m_bIVPFlag             [ i ] = false;
 #endif
 #if H_3D_DBBP
Index: /branches/HTM-11.2-dev3-Samsung/source/Lib/TLibCommon/TComSlice.h
===================================================================
--- /branches/HTM-11.2-dev3-Samsung/source/Lib/TLibCommon/TComSlice.h	(revision 1014)
+++ /branches/HTM-11.2-dev3-Samsung/source/Lib/TLibCommon/TComSlice.h	(revision 1015)
@@ -810,4 +810,7 @@
 #endif
   Bool        m_vpsDepthModesFlag        [MAX_NUM_LAYERS   ];
+#if SEPARATE_FLAG_I0085
+  Bool        m_bIVPFlag                 [MAX_NUM_LAYERS   ];
+#endif
 
 #if H_3D
@@ -1144,4 +1147,8 @@
   Void    setVpsDepthModesFlag( Int layerIdInVps, Bool val )               { m_vpsDepthModesFlag[ layerIdInVps ] = val; }
   Bool    getVpsDepthModesFlag( Int layerIdInVps )                         { return m_vpsDepthModesFlag[ layerIdInVps ]; }
+#if SEPARATE_FLAG_I0085
+  Void    setIVPFlag( Int layerIdInVps, Bool val )                    { m_bIVPFlag[ layerIdInVps ] = val; }
+  Bool    getIVPFlag( Int layerIdInVps )                              { return m_bIVPFlag[ layerIdInVps ]; }
+#endif
 
   Bool    getIvMvScalingFlag   (  )                       { return m_ivMvScalingFlag; }
@@ -2515,5 +2522,7 @@
   Int* getDepthToDisparityF( Int refViewIdx ) { return m_depthToDisparityF[ refViewIdx ]; }; 
   Bool getVpsDepthModesFlag  ()  { return getVPS()->getVpsDepthModesFlag( getVPS()->getLayerIdInVps( m_layerId ) ); }
-
+#if SEPARATE_FLAG_I0085
+  Bool getIVPFlag       ()  { return getVPS()->getIVPFlag( getVPS()->getLayerIdInVps( m_layerId ) ); }
+#endif
 #endif
 #if H_MV
Index: /branches/HTM-11.2-dev3-Samsung/source/Lib/TLibCommon/TypeDef.h
===================================================================
--- /branches/HTM-11.2-dev3-Samsung/source/Lib/TLibCommon/TypeDef.h	(revision 1014)
+++ /branches/HTM-11.2-dev3-Samsung/source/Lib/TLibCommon/TypeDef.h	(revision 1015)
@@ -300,4 +300,5 @@
 #define FIX_WARNING                       1   // fix narrowing conversion of NumPocStCurr0,NumPocStCurr1 at TComSlice.cpp
 #define FAST_SDC_OFFSET_DECISION_I0084    1
+#define SEPARATE_FLAG_I0085               1
 
 #if H_3D_DIM_DLT
Index: /branches/HTM-11.2-dev3-Samsung/source/Lib/TLibDecoder/TDecCAVLC.cpp
===================================================================
--- /branches/HTM-11.2-dev3-Samsung/source/Lib/TLibDecoder/TDecCAVLC.cpp	(revision 1014)
+++ /branches/HTM-11.2-dev3-Samsung/source/Lib/TLibDecoder/TDecCAVLC.cpp	(revision 1015)
@@ -1822,4 +1822,7 @@
 #endif
         READ_FLAG( uiCode, "vps_depth_modes_flag[i]" );             pcVPS->setVpsDepthModesFlag( i, uiCode == 1 ? true : false );
+#if SEPARATE_FLAG_I0085
+        READ_FLAG( uiCode, "ivp_flag[i]" );                   pcVPS->setIVPFlag( i, uiCode == 1 ? true : false );
+#endif
         //          READ_FLAG( uiCode, "lim_qt_pred_flag[i]");                  pcVPS->setLimQtPreFlag     ( i, uiCode == 1 ? true : false ); 
 #if H_3D_INTER_SDC
Index: /branches/HTM-11.2-dev3-Samsung/source/Lib/TLibDecoder/TDecSbac.cpp
===================================================================
--- /branches/HTM-11.2-dev3-Samsung/source/Lib/TLibDecoder/TDecSbac.cpp	(revision 1014)
+++ /branches/HTM-11.2-dev3-Samsung/source/Lib/TLibDecoder/TDecSbac.cpp	(revision 1015)
@@ -1049,5 +1049,9 @@
   {
 #if H_3D_DIM
+#if SEPARATE_FLAG_I0085
+    if( pcCU->getSlice()->getVpsDepthModesFlag() || pcCU->getSlice()->getIVPFlag() )
+#else
     if( pcCU->getSlice()->getVpsDepthModesFlag() )
+#endif
     {
       parseIntraDepth( pcCU, absPartIdx+partOffset*j, depth );
@@ -1191,6 +1195,26 @@
   if( uiIsDimMode )
   {
-    m_pcTDecBinIf->decodeBin( uiSymbol, m_cDepthIntraModeSCModel.get( 0, 0, 0 ) );
-    if( !uiSymbol )
+#if SEPARATE_FLAG_I0085
+    if( pcCU->getSlice()->getVpsDepthModesFlag() && pcCU->getSlice()->getIVPFlag() )
+    {
+      m_pcTDecBinIf->decodeBin( uiSymbol, m_cDepthIntraModeSCModel.get( 0, 0, 0 ) );
+      if( !uiSymbol )
+      {
+#if HS_DMM_SIGNALLING_I0120
+        pcCU->setLumaIntraDirSubParts( DIM_OFFSET, absPartIdx, depth );
+#else
+        pcCU->setLumaIntraDirSubParts( ( 2 * DMM1_IDX + DIM_OFFSET ), absPartIdx, depth );
+#endif
+      }
+      else
+      {
+#if HS_DMM_SIGNALLING_I0120
+        pcCU->setLumaIntraDirSubParts( ( 1+ DIM_OFFSET ), absPartIdx, depth );
+#else
+        pcCU->setLumaIntraDirSubParts( ( 2 * DMM4_IDX + DIM_OFFSET ), absPartIdx, depth );
+#endif
+      }
+    }
+    else if ( pcCU->getSlice()->getVpsDepthModesFlag() )
     {
 #if HS_DMM_SIGNALLING_I0120
@@ -1200,5 +1224,5 @@
 #endif
     }
-    else
+    else if( pcCU->getSlice()->getIVPFlag() )
     {
 #if HS_DMM_SIGNALLING_I0120
@@ -1208,4 +1232,23 @@
 #endif
     }
+#else
+    m_pcTDecBinIf->decodeBin( uiSymbol, m_cDepthIntraModeSCModel.get( 0, 0, 0 ) );
+    if( !uiSymbol )
+    {
+#if HS_DMM_SIGNALLING_I0120
+      pcCU->setLumaIntraDirSubParts( DIM_OFFSET, absPartIdx, depth );
+#else
+      pcCU->setLumaIntraDirSubParts( ( 2 * DMM1_IDX + DIM_OFFSET ), absPartIdx, depth );
+#endif
+    }
+    else
+    {
+#if HS_DMM_SIGNALLING_I0120
+      pcCU->setLumaIntraDirSubParts( ( 1+ DIM_OFFSET ), absPartIdx, depth );
+#else
+      pcCU->setLumaIntraDirSubParts( ( 2 * DMM4_IDX + DIM_OFFSET ), absPartIdx, depth );
+#endif
+    }
+#endif
   }
 }
Index: /branches/HTM-11.2-dev3-Samsung/source/Lib/TLibEncoder/TEncCavlc.cpp
===================================================================
--- /branches/HTM-11.2-dev3-Samsung/source/Lib/TLibEncoder/TEncCavlc.cpp	(revision 1014)
+++ /branches/HTM-11.2-dev3-Samsung/source/Lib/TLibEncoder/TEncCavlc.cpp	(revision 1015)
@@ -1599,4 +1599,7 @@
 #endif
         WRITE_FLAG( pcVPS->getVpsDepthModesFlag( i ) ? 1 : 0 ,          "vps_depth_modes_flag[i]" );
+#if SEPARATE_FLAG_I0085
+        WRITE_FLAG( pcVPS->getIVPFlag( i ) ? 1 : 0 ,               "IVP_flag[i]" );
+#endif
         //WRITE_FLAG( pcVPS->getLimQtPredFlag    ( i ) ? 1 : 0 ,          "lim_qt_pred_flag[i]"     ); 
 #if H_3D_INTER_SDC
Index: /branches/HTM-11.2-dev3-Samsung/source/Lib/TLibEncoder/TEncCfg.h
===================================================================
--- /branches/HTM-11.2-dev3-Samsung/source/Lib/TLibEncoder/TEncCfg.h	(revision 1014)
+++ /branches/HTM-11.2-dev3-Samsung/source/Lib/TLibEncoder/TEncCfg.h	(revision 1015)
@@ -414,4 +414,7 @@
 #if H_3D_DIM
   Bool      m_useDMM;
+#if SEPARATE_FLAG_I0085
+  Bool      m_useIVP;
+#endif
   Bool      m_useSDC;
   Bool      m_useDLT;
@@ -1006,4 +1009,8 @@
   Bool      getUseDMM                       ()        { return m_useDMM; }
   Void      setUseDMM                       ( Bool b) { m_useDMM = b;    }
+#if SEPARATE_FLAG_I0085
+  Bool      getUseIVP                       ()        { return m_useIVP; }
+  Void      setUseIVP                       ( Bool b) { m_useIVP = b;    }
+#endif
   Bool      getUseSDC                       ()        { return m_useSDC; }
   Void      setUseSDC                       ( Bool b) { m_useSDC = b;    }
Index: /branches/HTM-11.2-dev3-Samsung/source/Lib/TLibEncoder/TEncSbac.cpp
===================================================================
--- /branches/HTM-11.2-dev3-Samsung/source/Lib/TLibEncoder/TEncSbac.cpp	(revision 1014)
+++ /branches/HTM-11.2-dev3-Samsung/source/Lib/TLibEncoder/TEncSbac.cpp	(revision 1015)
@@ -255,5 +255,9 @@
       curCost += m_CUTransquantBypassFlagSCModel.calcCost( curSliceType, qp, (UChar*)INIT_CU_TRANSQUANT_BYPASS_FLAG );
 #if H_3D_DIM
+#if SEPARATE_FLAG_I0085
+    if( m_pcSlice->getVpsDepthModesFlag() || m_pcSlice->getIVPFlag() )
+#else
     if( m_pcSlice->getVpsDepthModesFlag() )
+#endif
     {
       curCost += m_cDepthIntraModeSCModel.calcCost    ( curSliceType, qp, (UChar*)INIT_DEPTH_INTRA_MODE );
@@ -1134,5 +1138,9 @@
     dir[j] = pcCU->getLumaIntraDir( absPartIdx+partOffset*j );
 #if H_3D_DIM
+#if SEPARATE_FLAG_I0085
+    if( pcCU->getSlice()->getVpsDepthModesFlag() ||  pcCU->getSlice()->getIVPFlag() )
+#else
     if( pcCU->getSlice()->getVpsDepthModesFlag() )
+#endif
     {
       codeIntraDepth( pcCU, absPartIdx+partOffset*j );
@@ -1280,5 +1288,12 @@
     }
     //mode coding
+#if SEPARATE_FLAG_I0085
+    if( pcCU->getSlice()->getVpsDepthModesFlag() && pcCU->getSlice()->getIVPFlag())
+    {
+      m_pcBinIf->encodeBin( uiCodeIdx == 0 ? 0 : 1, m_cDepthIntraModeSCModel.get( 0, 0, 0 ) );
+    }
+#else
     m_pcBinIf->encodeBin( uiCodeIdx == 0 ? 0 : 1, m_cDepthIntraModeSCModel.get( 0, 0, 0 ) );
+#endif
   }
 }
Index: /branches/HTM-11.2-dev3-Samsung/source/Lib/TLibEncoder/TEncSearch.cpp
===================================================================
--- /branches/HTM-11.2-dev3-Samsung/source/Lib/TLibEncoder/TEncSearch.cpp	(revision 1014)
+++ /branches/HTM-11.2-dev3-Samsung/source/Lib/TLibEncoder/TEncSearch.cpp	(revision 1015)
@@ -3132,5 +3132,9 @@
 
 #if H_3D_DIM_DMM
+#if SEPARATE_FLAG_I0085
+      if( ( m_pcEncCfg->getUseDMM() || m_pcEncCfg->getUseIVP() )
+#else
       if( m_pcEncCfg->getUseDMM()
+#endif
 #if H_3D_FAST_DEPTH_INTRA
          && (uiRdModeList[0] != PLANAR_IDX || varCU >= varThreshold)
@@ -3138,5 +3142,30 @@
         )
       {
+#if SEPARATE_FLAG_I0085
+        UInt uiStart, uiEnd;
+        if( m_pcEncCfg->getUseDMM() &&  m_pcEncCfg->getUseIVP() )
+        {
+          uiStart = 0;
+          uiEnd   = 2;
+        }
+        else if( m_pcEncCfg->getUseDMM() )
+        {
+          uiStart = 0;
+          uiEnd   = 1;
+        }
+        else if( m_pcEncCfg->getUseIVP() )
+        {
+          uiStart = 1;
+          uiEnd   = 2;
+        }
+        else
+        {
+          uiStart = 0;
+          uiEnd   = 0;
+        }
+        for( UInt dmmType = uiStart; dmmType < uiEnd; dmmType++ )
+#else
         for( UInt dmmType = 0; dmmType < DMM_NUM_TYPE; dmmType++ )
+#endif
         {
 #if H_3D_FCO
