Index: branches/SHM-upgrade/source/Lib/TLibCommon/TComSlice.h
===================================================================
--- branches/SHM-upgrade/source/Lib/TLibCommon/TComSlice.h	(revision 940)
+++ branches/SHM-upgrade/source/Lib/TLibCommon/TComSlice.h	(revision 945)
@@ -621,9 +621,13 @@
   Bool        m_layerIdIncludedFlag[MAX_VPS_OP_SETS_PLUS1][MAX_VPS_NUH_RESERVED_ZERO_LAYER_ID_PLUS1];
 #endif
-
+#if !MULTIPLE_PTL_SUPPORT
   TComPTL     m_pcPTL;
+#endif
   TimingInfo  m_timingInfo;
 
 #if SVC_EXTENSION
+#if MULTIPLE_PTL_SUPPORT
+  TComPTL     m_pcPTLList[NUM_POSSIBLE_LEVEL];
+#endif
 #if DERIVE_LAYER_ID_LIST_VARIABLES
 #if Q0078_ADD_LAYER_SETS
@@ -689,5 +693,7 @@
   UInt       m_profileLayerSetRef[MAX_VPS_LAYER_SETS_PLUS1];    // The value with index 0 will not be used.
 #endif
+#if !MULTIPLE_PTL_SUPPORT
   std::vector<TComPTL>    m_pcPTLForExtn;  
+#endif
 #endif
 #if VPS_EXTN_OP_LAYER_SETS
@@ -1004,8 +1010,15 @@
   Void    setLayerIdIncludedFlag(Bool v, UInt opsIdx, UInt id)  { m_layerIdIncludedFlag[opsIdx][id] = v;    }
 
+#if !MULTIPLE_PTL_SUPPORT
   TComPTL* getPTL() { return &m_pcPTL; }
+#endif
+
   TimingInfo* getTimingInfo() { return &m_timingInfo; }
 
 #if SVC_EXTENSION
+#if MULTIPLE_PTL_SUPPORT
+  TComPTL* getPTL() { return &m_pcPTLList[0]; }
+  TComPTL* getPTL(UInt idx) { return &m_pcPTLList[idx]; }
+#endif
 #if DERIVE_LAYER_ID_LIST_VARIABLES
   Int     getLayerSetLayerIdList(Int set, Int layerId)          { return m_layerSetLayerIdList[set][layerId]; }
@@ -1105,6 +1118,8 @@
 #endif
 
+#if !MULTIPLE_PTL_SUPPORT
   std::vector<TComPTL>* getPTLForExtnPtr()                      { return &m_pcPTLForExtn;          }
   TComPTL* getPTLForExtn(Int id)                                { return &m_pcPTLForExtn[id];      }
+#endif
 #endif
 #if VPS_EXTN_OP_LAYER_SETS
@@ -1172,5 +1187,8 @@
   Int    getProfileLevelTierIdx(Int const olsIdx, Int const layerIdx)     { return m_profileLevelTierIdx[olsIdx][layerIdx]; }
   Void   setProfileLevelTierIdx(Int const olsIdx, Int const layerIdx, Int const ptlIdx)     { m_profileLevelTierIdx[olsIdx][layerIdx] = ptlIdx; }
-  Int calculateLenOfSyntaxElement( Int const numVal );
+#if MULTIPLE_PTL_SUPPORT
+  Void   addProfileLevelTierIdx(Int const olsIdx, Int const ptlIdx)     { m_profileLevelTierIdx[olsIdx].push_back(ptlIdx); }
+#endif
+  Int    calculateLenOfSyntaxElement( Int const numVal );
 #else
   Int    getProfileLevelTierIdx(Int i)                        { return m_profileLevelTierIdx[i]; }
Index: branches/SHM-upgrade/source/Lib/TLibCommon/TypeDef.h
===================================================================
--- branches/SHM-upgrade/source/Lib/TLibCommon/TypeDef.h	(revision 940)
+++ branches/SHM-upgrade/source/Lib/TLibCommon/TypeDef.h	(revision 945)
@@ -245,4 +245,6 @@
 #define MAX_NUM_ADD_LAYER_SETS           1023
 #endif
+#define MULTIPLE_PTL_SUPPORT             1      ///< Profile, tier and level signalling
+#define NUM_POSSIBLE_LEVEL               13
 
 #define VPS_DPB_SIZE_TABLE               1      ///< JCTVC-O0217: DPB operations: signaling DPB-related parameters
@@ -927,8 +929,4 @@
     MAINREXT = 4,
     HIGHTHROUGHPUTREXT = 5,
-#if SVC_EXTENSION
-    SCALABLE = 6,
-    SCALABLE10 = 7,
-#endif
   };
 }
Index: branches/SHM-upgrade/source/Lib/TLibDecoder/TDecCAVLC.cpp
===================================================================
--- branches/SHM-upgrade/source/Lib/TLibDecoder/TDecCAVLC.cpp	(revision 940)
+++ branches/SHM-upgrade/source/Lib/TLibDecoder/TDecCAVLC.cpp	(revision 945)
@@ -2234,8 +2234,12 @@
   for (Int i = 0; i < maxNumSubLayersMinus1; i++)
   {
+#if MULTIPLE_PTL_SUPPORT
+    READ_FLAG( uiCode, "sub_layer_profile_present_flag[i]" ); rpcPTL->setSubLayerProfilePresentFlag(i, uiCode);
+#else
     if(profilePresentFlag)
     {
       READ_FLAG( uiCode, "sub_layer_profile_present_flag[i]" ); rpcPTL->setSubLayerProfilePresentFlag(i, uiCode);
     }
+#endif
     READ_FLAG( uiCode, "sub_layer_level_present_flag[i]"   ); rpcPTL->setSubLayerLevelPresentFlag  (i, uiCode);
   }
@@ -2252,5 +2256,9 @@
   for(Int i = 0; i < maxNumSubLayersMinus1; i++)
   {
+#if MULTIPLE_PTL_SUPPORT
+    if( rpcPTL->getSubLayerProfilePresentFlag(i) )
+#else
     if( profilePresentFlag && rpcPTL->getSubLayerProfilePresentFlag(i) )
+#endif
     {
       parseProfileTier(rpcPTL->getSubLayerPTL(i));
@@ -2744,8 +2752,12 @@
   {
     vps->setProfilePresentFlag(1, false);
+#if MULTIPLE_PTL_SUPPORT
+    parsePTL( vps->getPTL(1), vps->getProfilePresentFlag(1), vps->getMaxTLayers() - 1 );
+#else
     vps->getPTLForExtnPtr()->empty();
     vps->getPTLForExtnPtr()->resize(2);
     vps->getPTLForExtn(1)->copyProfileInfo( vps->getPTL() );
     parsePTL( vps->getPTLForExtn(1), vps->getProfilePresentFlag(1), vps->getMaxTLayers() - 1 );
+#endif
   }
 #endif
@@ -2974,5 +2986,7 @@
   Int const numBitsForPtlIdx = vps->calculateLenOfSyntaxElement( vps->getNumProfileTierLevel() );
 #endif
+#if !MULTIPLE_PTL_SUPPORT
   vps->getPTLForExtnPtr()->resize(vps->getNumProfileTierLevel());
+#endif
 #if LIST_OF_PTL
   for(Int idx = vps->getBaseLayerInternalFlag() ? 2 : 1; idx <= vps->getNumProfileTierLevel() - 1; idx++)
@@ -2986,5 +3000,9 @@
 #if P0048_REMOVE_PROFILE_REF
       // Copy profile information from previous one
+#if MULTIPLE_PTL_SUPPORT
+      vps->getPTL(idx)->copyProfileInfo( vps->getPTL( idx - 1 ) );
+#else
       vps->getPTLForExtn(idx)->copyProfileInfo( (idx==1) ? vps->getPTL() : vps->getPTLForExtn( idx - 1 ) );
+#endif
 #else
       READ_CODE( 6, uiCode, "profile_ref_minus1[i]" ); vps->setProfileLayerSetRef(idx, uiCode + 1);
@@ -2998,5 +3016,9 @@
 #endif
     }
+#if MULTIPLE_PTL_SUPPORT
+    parsePTL( vps->getPTL(idx), vps->getProfilePresentFlag(idx), vps->getMaxTLayers() - 1 );
+#else
     parsePTL( vps->getPTLForExtn(idx), vps->getProfilePresentFlag(idx), vps->getMaxTLayers() - 1 );
+#endif
   }
 #endif
Index: branches/SHM-upgrade/source/Lib/TLibEncoder/TEncCavlc.cpp
===================================================================
--- branches/SHM-upgrade/source/Lib/TLibEncoder/TEncCavlc.cpp	(revision 940)
+++ branches/SHM-upgrade/source/Lib/TLibEncoder/TEncCavlc.cpp	(revision 945)
@@ -1455,8 +1455,12 @@
   for (Int i = 0; i < maxNumSubLayersMinus1; i++)
   {
+#if MULTIPLE_PTL_SUPPORT
+    WRITE_FLAG( pcPTL->getSubLayerProfilePresentFlag(i), "sub_layer_profile_present_flag[i]" );
+#else
     if(profilePresentFlag)
     {
       WRITE_FLAG( pcPTL->getSubLayerProfilePresentFlag(i), "sub_layer_profile_present_flag[i]" );
     }
+#endif
 
     WRITE_FLAG( pcPTL->getSubLayerLevelPresentFlag(i),   "sub_layer_level_present_flag[i]" );
@@ -1473,5 +1477,9 @@
   for(Int i = 0; i < maxNumSubLayersMinus1; i++)
   {
+#if MULTIPLE_PTL_SUPPORT
+    if( pcPTL->getSubLayerProfilePresentFlag(i) )
+#else
     if( profilePresentFlag && pcPTL->getSubLayerProfilePresentFlag(i) )
+#endif
     {
       codeProfileTier(pcPTL->getSubLayerPTL(i));  // sub_layer_...
@@ -2060,5 +2068,9 @@
   if( vps->getMaxLayers() > 1 && vps->getBaseLayerInternalFlag() )
   {
+#if MULTIPLE_PTL_SUPPORT
+    codePTL( vps->getPTL(1), false, vps->getMaxTLayers() - 1 );
+#else
     codePTL( vps->getPTLForExtn(1), false, vps->getMaxTLayers() - 1 );
+#endif
   }
 #endif
@@ -2226,5 +2238,9 @@
 #endif
 #if LIST_OF_PTL
+#if MULTIPLE_PTL_SUPPORT
+  //Do something here to make sure the loop is correct to consider base layer internal stuff
+#else
   assert( vps->getNumProfileTierLevel() == vps->getPTLForExtnPtr()->size());
+#endif
   for(Int idx = vps->getBaseLayerInternalFlag() ? 2 : 1; idx <= vps->getNumProfileTierLevel() - 1; idx++)
 #else
@@ -2232,4 +2248,7 @@
 #endif
   {
+#if MULTIPLE_PTL_SUPPORT
+    vps->setProfilePresentFlag(idx, true);
+#endif
     WRITE_FLAG( vps->getProfilePresentFlag(idx),       "vps_profile_present_flag[i]" );
 #if !P0048_REMOVE_PROFILE_REF
@@ -2239,5 +2258,9 @@
     }
 #endif
+#if MULTIPLE_PTL_SUPPORT
+    codePTL( vps->getPTL(idx), vps->getProfilePresentFlag(idx), vps->getMaxTLayers() - 1 );
+#else
     codePTL( vps->getPTLForExtn(idx), vps->getProfilePresentFlag(idx), vps->getMaxTLayers() - 1 );
+#endif
   }
 #endif
