Index: branches/SHM-4.1-dev/source/App/TAppEncoder/TAppEncCfg.cpp
===================================================================
--- branches/SHM-4.1-dev/source/App/TAppEncoder/TAppEncCfg.cpp	(revision 511)
+++ branches/SHM-4.1-dev/source/App/TAppEncoder/TAppEncCfg.cpp	(revision 512)
@@ -970,4 +970,7 @@
   ("IlNumSetsInMessage",               m_ilNumSetsInMessage,                         0u, "Number of inter layer constrained tile sets")
   ("TileSetsArray",                    cfg_tileSets,                         string(""), "Array containing tile sets params (TopLeftTileIndex, BottonRightTileIndex and ilcIdc for each set) ")
+#endif
+#if O0153_ALT_OUTPUT_LAYER_FLAG
+  ("AltOutputLayerFlag",               m_altOutputLayerFlag,                      false, "Specifies the value of alt_output_layer_flag in VPS extension")
 #endif
   ;
Index: branches/SHM-4.1-dev/source/App/TAppEncoder/TAppEncCfg.h
===================================================================
--- branches/SHM-4.1-dev/source/App/TAppEncoder/TAppEncCfg.h	(revision 511)
+++ branches/SHM-4.1-dev/source/App/TAppEncoder/TAppEncCfg.h	(revision 512)
@@ -358,4 +358,7 @@
   Int       m_log2MaxMvLengthHorizontal;                      ///< Indicate the maximum absolute value of a decoded horizontal MV component in quarter-pel luma units
   Int       m_log2MaxMvLengthVertical;                        ///< Indicate the maximum absolute value of a decoded vertical MV component in quarter-pel luma units
+#if O0153_ALT_OUTPUT_LAYER_FLAG
+  Bool      m_altOutputLayerFlag;                             ///< Specifies the value of alt_output_laye_flag in VPS extension
+#endif
 
 #if SVC_EXTENSION
Index: branches/SHM-4.1-dev/source/App/TAppEncoder/TAppEncTop.cpp
===================================================================
--- branches/SHM-4.1-dev/source/App/TAppEncoder/TAppEncTop.cpp	(revision 511)
+++ branches/SHM-4.1-dev/source/App/TAppEncoder/TAppEncTop.cpp	(revision 512)
@@ -618,4 +618,7 @@
     m_acTEncTop[layer].setChromaFormatIDC( m_acLayerCfg[layer].m_chromaFormatIDC );
 #endif
+#if O0153_ALT_OUTPUT_LAYER_FLAG
+    m_acTEncTop[layer].setAltOuputLayerFlag( m_altOutputLayerFlag );
+#endif
   }
 }
@@ -1307,4 +1310,8 @@
 #endif
 
+#if O0153_ALT_OUTPUT_LAYER_FLAG
+  vps->setAltOuputLayerFlag( m_altOutputLayerFlag );
+#endif
+
 #else //SVC_EXTENSION
   m_cTEncTop.init(isFieldCoding);
Index: branches/SHM-4.1-dev/source/Lib/TLibCommon/TComSlice.h
===================================================================
--- branches/SHM-4.1-dev/source/Lib/TLibCommon/TComSlice.h	(revision 511)
+++ branches/SHM-4.1-dev/source/Lib/TLibCommon/TComSlice.h	(revision 512)
@@ -616,4 +616,7 @@
   Int         m_avgPicRate          [MAX_VPS_LAYER_SETS_PLUS1][MAX_TLAYER];
 #endif
+#if O0153_ALT_OUTPUT_LAYER_FLAG
+  Bool       m_altOutputLayerFlag;
+#endif
 #if REPN_FORMAT_IN_VPS
   Bool       m_repFormatIdxPresentFlag;
@@ -879,5 +882,8 @@
   Void setAvgPicRate(Int i, Int j, Int x)   { m_avgPicRate[i][j] = x;    }
 #endif
-
+#if O0153_ALT_OUTPUT_LAYER_FLAG
+  Bool   getAltOuputLayerFlag()             { return m_altOutputLayerFlag; }
+  Void   setAltOuputLayerFlag(Bool x)       { m_altOutputLayerFlag = x;    }
+#endif
 #if REPN_FORMAT_IN_VPS
   Bool   getRepFormatIdxPresentFlag()       { return m_repFormatIdxPresentFlag; }
Index: branches/SHM-4.1-dev/source/Lib/TLibCommon/TypeDef.h
===================================================================
--- branches/SHM-4.1-dev/source/Lib/TLibCommon/TypeDef.h	(revision 511)
+++ branches/SHM-4.1-dev/source/Lib/TLibCommon/TypeDef.h	(revision 512)
@@ -179,4 +179,6 @@
 #define RESAMPLING_CONSTRAINT_BUG_FIX    1
 #define O0098_SCALED_REF_LAYER_ID        1      ///< JCTVC-O0098: signal scaled reference id
+
+#define O0153_ALT_OUTPUT_LAYER_FLAG      1      ///< JCTVC-O0153: alt output layer flag
 
 #else
Index: branches/SHM-4.1-dev/source/Lib/TLibDecoder/TDecCAVLC.cpp
===================================================================
--- branches/SHM-4.1-dev/source/Lib/TLibDecoder/TDecCAVLC.cpp	(revision 511)
+++ branches/SHM-4.1-dev/source/Lib/TLibDecoder/TDecCAVLC.cpp	(revision 512)
@@ -1252,4 +1252,12 @@
   }
 
+#if O0153_ALT_OUTPUT_LAYER_FLAG
+  if( vps->getMaxLayers() > 1 )
+  {
+    READ_FLAG( uiCode, "alt_output_layer_flag");
+    vps->setAltOuputLayerFlag( uiCode ? true : false );
+  }
+#endif
+
 #if REPN_FORMAT_IN_VPS
   READ_FLAG( uiCode, "rep_format_idx_present_flag");
Index: branches/SHM-4.1-dev/source/Lib/TLibEncoder/TEncCavlc.cpp
===================================================================
--- branches/SHM-4.1-dev/source/Lib/TLibEncoder/TEncCavlc.cpp	(revision 511)
+++ branches/SHM-4.1-dev/source/Lib/TLibEncoder/TEncCavlc.cpp	(revision 512)
@@ -999,4 +999,11 @@
   }
 
+#if O0153_ALT_OUTPUT_LAYER_FLAG
+  if( vps->getMaxLayers() > 1 )
+  {
+    WRITE_FLAG( vps->getAltOuputLayerFlag(), "alt_output_layer_flag" );   
+  }
+#endif
+
 #if REPN_FORMAT_IN_VPS
   WRITE_FLAG( vps->getRepFormatIdxPresentFlag(), "rep_format_idx_present_flag"); 
Index: branches/SHM-4.1-dev/source/Lib/TLibEncoder/TEncCfg.h
===================================================================
--- branches/SHM-4.1-dev/source/Lib/TLibEncoder/TEncCfg.h	(revision 511)
+++ branches/SHM-4.1-dev/source/Lib/TLibEncoder/TEncCfg.h	(revision 512)
@@ -392,4 +392,7 @@
 #if M0040_ADAPTIVE_RESOLUTION_CHANGE
   Int       m_adaptiveResolutionChange;
+#endif
+#if O0153_ALT_OUTPUT_LAYER_FLAG
+  Bool      m_altOutputLayerFlag;
 #endif
 #endif
@@ -938,4 +941,8 @@
   ChromaFormat getChromaFormatIDC()               { return m_chromaFormatIDC; }
 #endif
+#if O0153_ALT_OUTPUT_LAYER_FLAG
+  Bool      getAltOuputLayerFlag() const { return m_altOutputLayerFlag; }
+  Void      setAltOuputLayerFlag(Bool b) { m_altOutputLayerFlag = b;    }
+#endif
 #endif
 };
