diff --git a/Android.mk b/Android.mk
index 27a179f..6ed838e 100644
--- a/Android.mk
+++ b/Android.mk
@@ -3,7 +3,7 @@
 PV_TOP := $(LOCAL_PATH)
 include $(CLEAR_VARS)
 
-PV_CFLAGS := -Wno-non-virtual-dtor -DENABLE_MEMORY_PLAYBACK -DUSE_CML2_CONFIG
+PV_CFLAGS := -Wno-non-virtual-dtor -DENABLE_MEMORY_PLAYBACK -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -DUSE_CML2_CONFIG
 
 ifeq ($(ENABLE_PV_LOGGING),1)
  PV_CFLAGS += -DPVLOGGER_INST_LEVEL=5
@@ -15,7 +15,7 @@
 
 include $(CLEAR_VARS)
 
-FORMAT := nj
+FORMAT := android
 
 PV_COPY_HEADERS_TO := libpv
 
@@ -23,13 +23,13 @@
 	$(PV_TOP)/android \
 	$(PV_TOP)/extern_libs_v2/khronos/openmax/include \
 	$(PV_TOP)/engines/common/include \
-	$(PV_TOP)/engines/player/config/linux_nj \
+	$(PV_TOP)/engines/player/config/android \
 	$(PV_TOP)/engines/player/include \
 	$(PV_TOP)/nodes/pvmediaoutputnode/include \
 	$(PV_TOP)/nodes/pvdownloadmanagernode/config/opencore \
 	$(PV_TOP)/pvmi/pvmf/include \
 	$(PV_TOP)/fileformats/mp4/parser/config/opencore \
-	$(PV_TOP)/oscl/oscl/config/linux_nj \
+	$(PV_TOP)/oscl/oscl/config/android \
 	$(PV_TOP)/oscl/oscl/config/shared \
 	$(PV_TOP)/engines/author/include \
 	$(PV_TOP)/android/drm/oma1/src \
diff --git a/README b/README
index 52a9631..1a26415 100644
--- a/README
+++ b/README
@@ -58,3 +58,4 @@
       |-- make
     |-- include
     |-- src
+
diff --git a/android/android_audio_output.cpp b/android/android_audio_output.cpp
index ab20c83..8f2a3fc 100755
--- a/android/android_audio_output.cpp
+++ b/android/android_audio_output.cpp
@@ -373,7 +373,7 @@
     int outputFrameSizeInBytes = mAudioSink->frameSize();
     float msecsPerFrame = mAudioSink->msecsPerFrame();
     uint32 latency = mAudioSink->latency();
-    LOGV("driver latency(%u),bufferSizeInSamples(%d),outputFrameSizeInBytes(%d),msecsPerFrame(%f),frame count(%d)", latency,bufferSizeInSamples,outputFrameSizeInBytes,msecsPerFrame,mAudioSink->frameCount());
+    LOGV("driver latency(%u),outputFrameSizeInBytes(%d),msecsPerFrame(%f),frame count(%d)", latency,outputFrameSizeInBytes,msecsPerFrame,mAudioSink->frameCount());
 
     // initialize active timing
     iActiveTiming->setFrameRate(msecsPerFrame);
diff --git a/android/drm/oma1/test/Android.mk b/android/drm/oma1/test/Android.mk
index 6d82a90..bdf4be6 100644
--- a/android/drm/oma1/test/Android.mk
+++ b/android/drm/oma1/test/Android.mk
@@ -121,7 +121,7 @@
     $(PV_TOP)/engines/player/include \
     $(PV_TOP)/nodes/common/include \
     $(PV_TOP)/engines/player/src \
-    $(PV_TOP)/engines/player/test/config/linux_nj \
+    $(PV_TOP)/engines/player/test/config/android \
     $(PV_TOP)/android/drm/oma1/test \
     $(PV_TOP)/oscl/unit_test/src \
     libs/drm/mobile1/include
diff --git a/android/drm/oma1/test/test_pv_drm_plugin.cpp b/android/drm/oma1/test/test_pv_drm_plugin.cpp
index b22eca3..0d4d4ac 100644
--- a/android/drm/oma1/test/test_pv_drm_plugin.cpp
+++ b/android/drm/oma1/test/test_pv_drm_plugin.cpp
@@ -145,9 +145,8 @@
             iDataSource->SetDataSourceURL(wFileName);
             iDataSource->SetDataSourceFormatType(iFileType);
 
-            //Create a data source with the CPM usage flag set.
-            bool useCPM = true;
-            iLocalDataSource = new PVMFLocalDataSource(useCPM);
+            //Create a data source 
+            iLocalDataSource = new PVMFLocalDataSource();
             iDataSource->SetDataSourceContextData((OsclAny*)iLocalDataSource);
 
             //Add the data source
diff --git a/android/metadatadriver.cpp b/android/metadatadriver.cpp
index 1c709e2..68e3ca4 100644
--- a/android/metadatadriver.cpp
+++ b/android/metadatadriver.cpp
@@ -500,7 +500,7 @@
         if (mMode & GET_FRAME_ONLY) {
 #if BEST_THUMBNAIL_MODE
             // Set the intent to thumbnails.
-            mLocalDataSource = new PVMFLocalDataSource(false);
+            mLocalDataSource = new PVMFLocalDataSource();
             mLocalDataSource->iIntent = BITMASK_PVMF_SOURCE_INTENT_THUMBNAILS;
             mDataSource->SetDataSourceContextData((OsclAny*)mLocalDataSource);
 #endif
diff --git a/android/playerdriver.cpp b/android/playerdriver.cpp
index cb1d4f4..af1c170 100644
--- a/android/playerdriver.cpp
+++ b/android/playerdriver.cpp
@@ -478,8 +478,7 @@
                 0xFFFFFFFF,
                 mDownloadProxy,
                 0,
-                PVMFDownloadDataSourceHTTP::ENoSaveToFile,
-                false);
+                PVMFDownloadDataSourceHTTP::ENoSaveToFile);
 
 #else
     mDownloadContextData = new PVMFSourceContextData();
@@ -492,7 +491,6 @@
     mDownloadContextData->DownloadHTTPData()->iProxyName = _STRLIT_CHAR("");
     mDownloadContextData->DownloadHTTPData()->iProxyPort = 0;
     mDownloadContextData->DownloadHTTPData()->iPlaybackControl = PVMFSourceContextDataDownloadHTTP::EAsap;
-    mDownloadContextData->CommonData()->iUseCPMPluginRegistry = false;
 #endif
 
     mDataSource->SetDataSourceContextData(mDownloadContextData);
@@ -509,7 +507,7 @@
     int error = 0;
 
     iKVPSetAsync.key = _STRLIT_CHAR("x-pvmf/net/user-agent;valtype=wchar*");
-    OSCL_wHeapString<OsclMemAllocator> userAgent = _STRLIT_WCHAR("CORE/6.101.1.1 OpenCORE/2.0 (Linux;Android 1.0)(AndroidMediaPlayer 1.0)");
+    OSCL_wHeapString<OsclMemAllocator> userAgent = _STRLIT_WCHAR("CORE/6.504.1.1 OpenCORE/2.1 (Linux;Android 1.0)(AndroidMediaPlayer 1.0)");
     iKVPSetAsync.value.pWChar_value=userAgent.get_str();
     iErrorKVP=NULL;
     OSCL_TRY(error, mPlayerCapConfig->setParametersSync(NULL, &iKVPSetAsync, 1, iErrorKVP));
@@ -1078,7 +1076,13 @@
             uint8 *localBuf = aEvent.GetLocalBuffer();
             if (localBuf != NULL) {
                 uint32 bufPercent;
-                oscl_memcpy(&bufPercent, localBuf, sizeof(uint32));
+                // @TODO - Get rid of this later
+                if (mDataSource->GetDataSourceFormatType() == (char*)PVMF_MIME_DATA_SOURCE_HTTP_URL) {
+                    oscl_memcpy(&bufPercent, localBuf, sizeof(uint32));
+                }
+                else {//RTSP
+                    oscl_memcpy(&bufPercent, &localBuf[4], sizeof(uint32));
+                }
                 LOGV("PVMFInfoBufferingStatus(%u)", bufPercent);
                 mPvPlayer->sendEvent(MEDIA_BUFFERING_UPDATE, bufPercent);
             }
diff --git a/baselibs/gen_data_structures/Android.mk b/baselibs/gen_data_structures/Android.mk
index ae8447e..3548ed3 100644
--- a/baselibs/gen_data_structures/Android.mk
+++ b/baselibs/gen_data_structures/Android.mk
@@ -7,7 +7,8 @@
  	src/pv_string_uri.cpp \
  	src/rtsp_range_utils.cpp \
  	src/base64_codec.cpp \
- 	src/bitstreamparser.cpp
+ 	src/bitstreamparser.cpp \
+ 	src/wchar_size_utils.cpp
 
 
 LOCAL_MODULE := libpvgendatastruct
@@ -40,6 +41,7 @@
  	src/rtsp_time_formats.h \
  	src/mime_registry.h \
  	src/base64_codec.h \
- 	src/bitstreamparser.h
+ 	src/bitstreamparser.h \
+ 	src/wchar_size_utils.h
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/baselibs/gen_data_structures/build/make/local.mk b/baselibs/gen_data_structures/build/make/local.mk
index 13da489..03f6a51 100644
--- a/baselibs/gen_data_structures/build/make/local.mk
+++ b/baselibs/gen_data_structures/build/make/local.mk
@@ -17,7 +17,8 @@
 	pv_string_uri.cpp \
 	rtsp_range_utils.cpp \
 	base64_codec.cpp \
-	bitstreamparser.cpp
+	bitstreamparser.cpp \
+	wchar_size_utils.cpp
 
 HDRS := buf_frag_group.h \
 	hash_functions.h \
@@ -31,7 +32,8 @@
 	rtsp_time_formats.h \
 	mime_registry.h \
 	base64_codec.h \
-	bitstreamparser.h
+	bitstreamparser.h \
+	wchar_size_utils.h
 
 include $(MK)/library.mk
 
diff --git a/baselibs/gen_data_structures/src/bitstreamparser.cpp b/baselibs/gen_data_structures/src/bitstreamparser.cpp
index fc90fd0..5054137 100644
--- a/baselibs/gen_data_structures/src/bitstreamparser.cpp
+++ b/baselibs/gen_data_structures/src/bitstreamparser.cpp
@@ -15,12 +15,28 @@
  * and limitations under the License.
  * -------------------------------------------------------------------
  */
-
-
+#ifndef   BITSTREAMPARSER_H_INCLUDED
 #include "bitstreamparser.h"
+#endif
+#ifndef   OSCL_ASSERT_H_INCLUDED
 #include "oscl_assert.h"
+#endif
+#ifndef   OSCL_BYTE_ORDER_H_INCLUDED
 #include "oscl_byte_order.h"
+#endif
+#ifndef   OSCL_DLL_H_INCLUDED
 #include "oscl_dll.h"
+#endif
+#ifndef   OSCL_ERROR_H_INCLUDED
+#include "oscl_error.h"
+#endif
+#ifndef   OSCL_ERROR_CODES_H_INCLUDED
+#include "oscl_error_codes.h"
+#endif
+#ifndef   OSCL_EXCEPTION_H_INCLUDED
+#include "oscl_exception.h"
+#endif
+
 
 OSCL_EXPORT_REF BitStreamParser::BitStreamParser(uint8* stream, uint32 size)
 {
@@ -37,11 +53,6 @@
 
 OSCL_EXPORT_REF uint32 BitStreamParser::ReadBits(uint8 numberOfBits)
 {
-    // Make sure bytepos won't exceed the size of the buffer while reading
-    if ((bytepos + numberOfBits) >= (start + size))
-    {
-        OSCL_LEAVE(OsclErrOverflow);
-    }
     //Initialize output to zero before shifting out bits.
     uint32 output = 0;
 
@@ -53,6 +64,12 @@
     //convert from big endian to host's endianness.
     while (numberOfBits)
     {
+        // Make sure bytepos won't exceed the size of the buffer while reading
+        if (bytepos >= (start + size))
+        {
+            OSCL_LEAVE(OsclErrOverflow);
+        }
+
         //Optimize reads for special cases such as byte-aligned reads and
         //processing multiple bits at a time.
         if ((numberOfBits >= BITS_PER_UINT8) && (bitpos == MOST_SIG_BIT))
@@ -209,17 +226,16 @@
 
 OSCL_EXPORT_REF void BitStreamParser::NextBits(uint32 numberOfBits)
 {
-    // Make sure bytepos won't exceed the size of the buffer while reading
-    if ((bytepos + numberOfBits) >= (start + size))
-    {
-        OSCL_LEAVE(OsclErrOverflow);
-    }
-
     //bitpos counts down from 7 to 0, so subtract it from 7 to get the ascending position.
     uint32 newbitpos = numberOfBits  + (MOST_SIG_BIT - bitpos);
     //Convert the ascending bit position to a descending position using only the least-significant bits.
     bitpos = MOST_SIG_BIT - (newbitpos & LEAST_SIG_3_BITS_MASK);
     //Calculate the number of bytes advanced.
     bytepos += (newbitpos / BITS_PER_BYTE);
+    // Make sure bytepos won't exceed the size of the buffer while reading
+    if (bytepos >= (start + size))
+    {
+        OSCL_LEAVE(OsclErrOverflow);
+    }
 }
 
diff --git a/baselibs/gen_data_structures/src/wchar_size_utils.cpp b/baselibs/gen_data_structures/src/wchar_size_utils.cpp
new file mode 100644
index 0000000..ecfc57b
--- /dev/null
+++ b/baselibs/gen_data_structures/src/wchar_size_utils.cpp
@@ -0,0 +1,52 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+
+#ifndef WCHAR_SIZE_UTILS_H_INCLUDED
+#include "wchar_size_utils.h"
+#endif
+
+/**
+ * Converts the 4 byte wchar data to 16 bit data
+ */
+OSCL_EXPORT_REF void PackWChar4BytesTo2Bytes(uint8* dest, oscl_wchar* src, int nChars)
+{
+    int count;
+    uint8* destPtr = dest;
+    oscl_wchar* srcPtr = src;
+    for (count = 0; count < (nChars - 1); count++)
+    {
+        oscl_memcpy(destPtr, srcPtr, 2);
+        destPtr += 2;
+        srcPtr++;
+    }
+    *destPtr = 0;
+    *(++destPtr) = 0;
+}
+
+/**
+ * Converts the 2 byte wchar data to 4 byte data
+ */
+OSCL_EXPORT_REF void ExpandWChar2BytesTo4Bytes(oscl_wchar * dest, uint16* src, int nChars)
+{
+    int count;
+    for (count = 0; count < (nChars - 1); count++)
+    {
+        dest[count] = src[count];
+    }
+    dest[count] = 0;
+}
diff --git a/baselibs/gen_data_structures/src/wchar_size_utils.h b/baselibs/gen_data_structures/src/wchar_size_utils.h
new file mode 100644
index 0000000..9c153e6
--- /dev/null
+++ b/baselibs/gen_data_structures/src/wchar_size_utils.h
@@ -0,0 +1,50 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+
+#ifndef WCHAR_SIZE_UTILS_H_INCLUDED
+#define WCHAR_SIZE_UTILS_H_INCLUDED
+
+#ifndef OSCL_BASE_H_INCLUDED
+#include "oscl_base.h"
+#endif
+
+#ifndef OSCL_MEM_H_INCLUDED
+#include "oscl_mem.h"
+#endif
+
+/**
+ * Converts the 4 byte wchar data to 2 byte data.
+ *
+ * @param dest Destination buffer pointer to receive 16 bit data
+ * @param src Source buffer pointer holding 4 byte wchar data
+ * @param nChars Length of chars need to be converted including null char
+ * @return none
+ */
+OSCL_IMPORT_REF void PackWChar4BytesTo2Bytes(uint8* dest, oscl_wchar* src, int nChars);
+
+/**
+ * Converts the 2 byte wchar data to 4 byte data
+ *
+ * @param dest Destination buffer pointer to receive 4 byte data
+ * @param src Source buffer pointer holding 16 bit wchar data
+ * @param nChars Length of chars need to be converted including null char
+ * @return none
+ */
+OSCL_IMPORT_REF void ExpandWChar2BytesTo4Bytes(oscl_wchar* dest, uint16* src, int nChars);
+
+#endif // WCHAR_SIZE_UTILS_H_INCLUDED
diff --git a/build_config/common/local.mk b/build_config/common/local.mk
index d84f220..5a379d7 100644
--- a/build_config/common/local.mk
+++ b/build_config/common/local.mk
@@ -2,7 +2,8 @@
 LOCAL_PATH := $(call get_makefile_dir)
 
 # include the CML2 configuration
-include $(CFG_DIR)/pv_config.mk
+include $(CFG_DIR)/pv_config_selected.mk
+include $(CFG_DIR)/pv_config_derived.mk
 
 # define some basic preprocessor conditionals that may be needed
 # to get the pv_config.h file to be included
diff --git a/build_config/default/setup b/build_config/default/setup
deleted file mode 100644
index 2726eca..0000000
--- a/build_config/default/setup
+++ /dev/null
@@ -1,68 +0,0 @@
-
-# Setup environment for necessary for the
-# makefiles, etc.
-
-# Set this flag for integarting CML2 config with the builds.
-# 
-setenv USE_CML2_CONFIG 1
-
-# How is VOB_BASE_DIR value set?
-# 1. If there is an argument to the setup script execution, use that. 
-# 2. Else, check if the value is already set and use that. 
-# 3. Throw an error.
-# @TODO : Obsolete VOB_BASE_DIR when that macro is no longer used.
-
-if ($# >= 1) then
-   setenv VOB_BASE_DIR $1
-   echo Set VOB_BASE_DIR to $VOB_BASE_DIR ...
-else
-   if (! $?VOB_BASE_DIR) then
-      echo "Error. !!!!!!!VOB_BASE_DIR is not set!!!!!!!"
-   else
-      echo VOB_BASE_DIR already defined as $VOB_BASE_DIR ...
-   endif
-endif
-
-# Set the PV_TOP
-#
-setenv PV_TOP $VOB_BASE_DIR/oscl
-echo Set PV_TOP to $PV_TOP ...
-
-setenv PROJECT $PV_TOP
-echo Set PROJECT to $PROJECT ...
-
-setenv MK $VOB_BASE_DIR/tools_v2/build/make
-echo Set MK to $MK ...
-
-setenv CCASE_MAKE_COMPAT gnu
-echo Set CCASE_MAKE_COMPAT to $CCASE_MAKE_COMPAT ...
-
-if (! -f $MK/../bin/archtype) then
-   echo "Error. Cannot find archtype script $MK/../bin/archtype."
-endif
-
-set arch_bin_path = `$MK/../bin/archtype`
-set extern_tools_path = $VOB_BASE_DIR/extern_tools_v2/bin/$arch_bin_path
-set path = (./$arch_bin_path  $extern_tools_path $path)
-unset arch_bin_path
-unset extern_tools_path
-
-if ( -f ./setup.extras ) then
-  echo File setup.extras found, sourcing ...
-  source ./setup.extras
-else
-  echo File setup.extras not found, skipping ...
-endif
-
-# Rehash
-#
-rehash
-rehash
-
-# Finita
-#
-echo 
-echo Environment is ready if no errors reported
-echo 
-
-# END OF SCRIPT - NO CODE BEYOND THIS POINT 
diff --git a/build_config/default/setup.bat b/build_config/default/setup.bat
deleted file mode 100755
index 77f3209..0000000
--- a/build_config/default/setup.bat
+++ /dev/null
@@ -1,42 +0,0 @@
-@echo OFF
-IF (%1)==() echo.Usage ERROR! %0 VOB base directory "use double slashes" eg: C:\\static_view_dir [Static] D:\ [Dynamic]
-
-rem *** Setup environment for necessary for the makefiles, etc. ***
-
-rem *** Set this flag for integarting CML2 config with the builds ***
-set USE_CML2_CONFIG=1
-
-rem *** Set the VOB_BASE_DIR ***
-set VOB_BASE_DIR=%1
-echo Set VOB_BASE_DIR to %VOB_BASE_DIR% ...
-
-rem *** Set the PV_TOP ***
-set PV_TOP=%VOB_BASE_DIR%\\oscl
-echo Set PV_TOP to %PV_TOP% ...
-
-rem *** Set the PROJECT ***
-set PROJECT=%PV_TOP%
-echo Set PROJECT to %PROJECT% ...
-
-rem *** Set MK to path keeping the makefiles templates ***
-set MK=%VOB_BASE_DIR%\tools_v2\build\make
-echo Set MK to %MK% ...
-
-rem *** Append win32 make.exe path in PATH ***
-
-rem *** Set Defaults Path for Perl bin directory ***
-set PERL_HOME_PATH=C:\Perl\bin
-set PATH=%VOB_BASE_DIR%\extern_tools_v2\bin\win32;C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin;C:\Program Files\Microsoft Visual Studio\VC98\Bin;C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;c:\Program Files\Microsoft Visual Studio 8\Common7\Tools;c:\windows;c:\windows\system32;C:\Windows\System32\Wbem;C:\Program Files\Rational\ClearCase\bin;C:\Program Files\Rational\common;C:\Program Files\AccuRev\bin
-
-rem ***Check if PERL_HOME is already defined ***
-if exist %PERL_HOME% set PERL_HOME_PATH=%PERL_HOME%
-
-rem *** Check if Perl is installed in the host machine ***
-if not exist %PERL_HOME_PATH%\perl.exe echo Error :"%PERL_HOME_PATH%\perl.exe Not found. Either install perl at 'C:\Perl\bin' or Set PERL_HOME to the Perl bin Directory."
-if exist %PERL_HOME_PATH%\perl.exe set PATH=%PERL_HOME_PATH%;%PATH%
-
-
-echo ******************************************
-echo Environment is ready if no errors reported
-echo ******************************************
-
diff --git a/build_config/default/setup.ksh b/build_config/default/setup.ksh
deleted file mode 100644
index f209094..0000000
--- a/build_config/default/setup.ksh
+++ /dev/null
@@ -1,62 +0,0 @@
-echo Setting up build environment with default configuration ...
-
-# Setup environment for necessary for the
-# makefiles, etc.
-
-# Set this flag for integarting CML2 config with the builds.
-# 
-export USE_CML2_CONFIG=1
-
-# How is VOB_BASE_DIR value set?
-# 1. If there is an argument to the setup script execution, use that. 
-# 2. Else, check if the value is already set and use that. 
-# 3. Throw an error.
-# @TODO : Obsolete VOB_BASE_DIR when that macro is no longer used.
-
-if [[ $# -ge 1 ]]; then
-   export VOB_BASE_DIR="$1"
-   echo "Set VOB_BASE_DIR to $VOB_BASE_DIR ..."
-else
-   if [[ -z $VOB_BASE_DIR ]]; then
-      echo "Error. !!!!!!!VOB_BASE_DIR is not set!!!!!!!"
-   else   
-      echo VOB_BASE_DIR already defined as $VOB_BASE_DIR ...
-   fi
-fi
-
-# Set the PV_TOP
-#
-export PV_TOP=$VOB_BASE_DIR/oscl
-echo Set PV_TOP to $PV_TOP ...
-
-export PROJECT=$PV_TOP
-echo "Set PROJECT to $PROJECT ..."
-
-export MK="$VOB_BASE_DIR/tools_v2/build/make"
-echo "Set MK to $MK ..."
-
-export CCASE_MAKE_COMPAT="gnu"
-echo "Set CCASE_MAKE_COMPAT to $CCASE_MAKE_COMPAT ..."
-
-if [[ ! -f "$MK/../bin/archtype" ]];  then
-  echo "Error. Cannot find archtype script $MK/../bin/archtype."
-fi
-
-export arch_bin_path=`$MK/../bin/archtype`
-export extern_tools_path=$VOB_BASE_DIR/extern_tools_v2/bin/$arch_bin_path
-export PATH=./$arch_bin_path:$extern_tools_path:$PATH
-
-export arch_bin_path=
-export extern_tools_path=
-
-if [[ -f ./setup.extras.ksh ]]; then
-   echo File setup.extras.ksh found, sourcing ...
-   . ./setup.extras.ksh
-else
-   echo File setup.extras not found, skipping ...
-fi 
-
-echo 
-echo Environment is ready if no errors reported
-echo
-
diff --git a/build_config/default/setup.sh b/build_config/default/setup.sh
index f209094..924efd8 100644
--- a/build_config/default/setup.sh
+++ b/build_config/default/setup.sh
@@ -1,60 +1,148 @@
+function print_menu()
+{
+    echo
+    echo "Build selection menu... choose from the following:"
+    echo
+    echo "1. Build for host platform"
+    echo "2. Arm device build using OpenCORE (Android) cross-compiler"
+    echo "3. Build using default linux-arm cross-compiler"
+    echo "4. Arm device build using OpenCORE (Android) cross-compiler inside AccuRev workspace"
+    echo
+
+}
+
+function clean_env()
+{
+  echo "**********************************"
+  echo "Cleaning ARCHITECTURE ..."
+  unset ARCHITECTURE
+  echo "Cleaning ANDROID_BASE ..."
+  unset ANDROID_BASE
+  echo "Setting PATH back to the original ..."
+  export PATH=$BASE_PATH
+  echo "**********************************"
+}
+
+function menu()
+{
+    if [ "$1" ] ; then
+        CHOICE=$1
+    else
+        print_menu
+        read -p "Which selection would you like? " CHOICE
+    fi
+
+    case $CHOICE in
+    1)
+        echo "Choice is to build for the host platform."
+        clean_env
+        ;;
+    2)
+        echo "Choice is to build for target with OpenCORE (Android) cross-compiler"
+        ## clean the environment
+        clean_env
+        ## set path up for linux OpenCore build
+        android_gcc_arm_path=/opt/environments/android/toolchain-eabi-4.2.1/bin
+        export ARCHITECTURE=android
+        echo "ARCHITECTURE=$ARCHITECTURE"
+        export PATH=$android_gcc_arm_path:$BASE_PATH
+        export ANDROID_BASE=/opt/environments/android
+        echo "ANDROID_BASE=$ANDROID_BASE"
+        ;;
+    3)
+        echo "Choice is to build for target with the default linux-arm cross-compiler"
+        # clean the environment
+        clean_env
+        # set path up for linux-arm compiler
+        linux_arm_path=/opt/environments/linux_arm/data/omapts/linux/arm-tc/gcc-3.4.0-1/bin
+        export ARCHITECTURE=linux_arm
+        export PATH=$linux_arm_path:$BASE_PATH
+        ;;
+    4)  
+        echo "Choice is to build for target with workspace's OpenCORE (Android) cross-compiler"
+        ## clean the environment
+        clean_env
+        ## set path up for linux OpenCore build
+        android_gcc_arm_path=$BASE_DIR/toolchains/android/toolchain-eabi-4.2.1/bin
+        export ARCHITECTURE=android
+        echo "ARCHITECTURE=$ARCHITECTURE"
+        export PATH=$android_gcc_arm_path:$BASE_PATH
+        export ANDROID_BASE=$BASE_DIR/toolchains/android
+        echo "ANDROID_BASE=$ANDROID_BASE"
+        ;;
+    *)
+        echo "Invalid selection.  Please enter your selection again."
+        print_menu
+        return
+        ;;
+    esac
+}
+
+function mkcmdcmpl()
+{
+    printf "\nGetting make cmdline completion values...\n"
+    export PV_MAKE_COMPLETION_TARGETS=`make -j completion_targets`
+    printf "Done getting make cmdline completion values.\n\n"
+}
+
+
+
 echo Setting up build environment with default configuration ...
 
-# Setup environment for necessary for the
-# makefiles, etc.
+export PROJECT_DIR=$PWD
 
-# Set this flag for integarting CML2 config with the builds.
-# 
-export USE_CML2_CONFIG=1
-
-# How is VOB_BASE_DIR value set?
-# 1. If there is an argument to the setup script execution, use that. 
-# 2. Else, check if the value is already set and use that. 
-# 3. Throw an error.
-# @TODO : Obsolete VOB_BASE_DIR when that macro is no longer used.
+# Set CFG_DIR
+#
+export CFG_DIR=$PWD
+echo "Set CFG_DIR to $CFG_DIR ..."
 
 if [[ $# -ge 1 ]]; then
-   export VOB_BASE_DIR="$1"
-   echo "Set VOB_BASE_DIR to $VOB_BASE_DIR ..."
+  export BASE_DIR=${1%/}
+  echo "Set BASE_DIR to $BASE_DIR ..."
 else
-   if [[ -z $VOB_BASE_DIR ]]; then
-      echo "Error. !!!!!!!VOB_BASE_DIR is not set!!!!!!!"
+   if [[ -z $BASE_DIR ]]; then
+      echo "Error. !!!!!!!BASE_DIR is not set!!!!!!!"
    else   
-      echo VOB_BASE_DIR already defined as $VOB_BASE_DIR ...
+      echo BASE_DIR already defined as $BASE_DIR ...
    fi
 fi
 
-# Set the PV_TOP
-#
-export PV_TOP=$VOB_BASE_DIR/oscl
-echo Set PV_TOP to $PV_TOP ...
+export BUILD_ROOT=$PROJECT_DIR/build
+echo Set BUILD_ROOT to $BUILD_ROOT ...
 
-export PROJECT=$PV_TOP
-echo "Set PROJECT to $PROJECT ..."
+export SRC_ROOT=$BASE_DIR
+echo Set SRC_ROOT to $SRC_ROOT ...
 
-export MK="$VOB_BASE_DIR/tools_v2/build/make"
-echo "Set MK to $MK ..."
+export MK=$BASE_DIR/tools_v2/build/make
+echo Set MK to $MK ...
 
-export CCASE_MAKE_COMPAT="gnu"
-echo "Set CCASE_MAKE_COMPAT to $CCASE_MAKE_COMPAT ..."
 
-if [[ ! -f "$MK/../bin/archtype" ]];  then
-  echo "Error. Cannot find archtype script $MK/../bin/archtype."
-fi
+extern_tools_path=$BASE_DIR/extern_tools_v2/bin/linux
+export PATH=$extern_tools_path:$PATH
+export BASE_PATH=$PATH
 
-export arch_bin_path=`$MK/../bin/archtype`
-export extern_tools_path=$VOB_BASE_DIR/extern_tools_v2/bin/$arch_bin_path
-export PATH=./$arch_bin_path:$extern_tools_path:$PATH
+_pv_make_completion()
+{
+    local cur prev opts
+    COMPREPLY=()
+    cur="${COMP_WORDS[COMP_CWORD]}"
+    prev="${COMP_WORDS[COMP_CWORD-1]}"
+    opts="${PV_MAKE_COMPLETION_TARGETS}"
 
-export arch_bin_path=
-export extern_tools_path=
+    case "${prev}" in 
+      -f)
+        COMPREPLY=( $(compgen -f ${cur}) )
+        return 0
+        ;;
+    *)
+        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+        return 0
+        ;;
+    esac
+}
 
-if [[ -f ./setup.extras.ksh ]]; then
-   echo File setup.extras.ksh found, sourcing ...
-   . ./setup.extras.ksh
-else
-   echo File setup.extras not found, skipping ...
-fi 
+complete -F _pv_make_completion make
+###
 
 echo 
 echo Environment is ready if no errors reported
diff --git a/build_config/default/setup_nr.bat b/build_config/default/setup_nr.bat
deleted file mode 100755
index 07fb9bd..0000000
--- a/build_config/default/setup_nr.bat
+++ /dev/null
@@ -1,38 +0,0 @@
-@echo OFF
-IF (%1)==() echo.Usage !!!ERROR!!! %0 {Base Directory} Use capital letter for drive letter.
-
-rem *** Setup environment for necessary for the makefiles, etc. ***
-
-rem *** All build output goes under BUILD_ROOT including object files, dependency files, libraries, installed headers, etc ***
-set BUILD_ROOT=%PROJECT_DIR%\build
-echo Set BUILD_ROOT to %BUILD_ROOT%
-
-rem *** BASE_DIR is the base directory mainly to specify MK. ***
-rem *** Helps us to set path for some of the extern_tools required in the build. ***
-set BASE_DIR=%1
-echo Set BASE_DIR to %BASE_DIR%
-
-rem *** SRC_ROOT is the root of all the sources ***
-set SRC_ROOT=%BASE_DIR%
-echo Set SRC_ROOT to %SRC_ROOT%
-
-rem *** MK is where all the makefile templates are picked from. ***
-set MK=%BASE_DIR%\tools_v2\build\make_nr\tools_v2\build\make
-echo Set MK to %MK%
-
-rem *** Append win32 make.exe path in PATH ***
-set PATH=%BASE_DIR%\extern_tools_v2\bin\win32;C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin;C:\Program Files\Microsoft Visual Studio\VC98\Bin;C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;c:\Program Files\Microsoft Visual Studio 8\Common7\Tools;%PATH%
-
-rem *** TOOLSET is used to determine which tools to use ***
-set TOOLSET=vc6
-echo Set TOOLSET to %TOOLSET%
-
-rem *** PLATFORM_EXTRAS is used to include platform specific templates ***
-set PLATFORM_EXTRAS=%MK%\projfile.mk
-echo Set PLATFORM_EXTRAS to %PLATFORM_EXTRAS%
-
-
-echo ******************************************
-echo Environment is ready if no errors reported
-echo ******************************************
-
diff --git a/build_config/default/setup_nr.sh b/build_config/default/setup_nr.sh
deleted file mode 100644
index e18682a..0000000
--- a/build_config/default/setup_nr.sh
+++ /dev/null
@@ -1,150 +0,0 @@
-function print_menu()
-{
-    echo
-    echo "Build selection menu... choose from the following:"
-    echo
-    echo "1. Build for host platform"
-    echo "2. Arm device build using OpenCORE (Android) cross-compiler"
-    echo "3. Build using default linux-arm cross-compiler"
-    echo "4. Arm device build using OpenCORE (Android) cross-compiler inside AccuRev workspace"
-    echo
-
-}
-
-function clean_env()
-{
-  echo "**********************************"
-  echo "Cleaning ARCHITECTURE ..."
-  unset ARCHITECTURE
-  echo "Cleaning ANDROID_BASE ..."
-  unset ANDROID_BASE
-  echo "Setting PATH back to the original ..."
-  export PATH=$BASE_PATH
-  echo "**********************************"
-}
-
-function menu()
-{
-    if [ "$1" ] ; then
-        CHOICE=$1
-    else
-        print_menu
-        read -p "Which selection would you like? " CHOICE
-    fi
-
-    case $CHOICE in
-    1)
-        echo "Choice is to build for the host platform."
-        clean_env
-        ;;
-    2)
-        echo "Choice is to build for target with OpenCORE (Android) cross-compiler"
-        ## clean the environment
-        clean_env
-        ## set path up for linux OpenCore build
-        android_gcc_arm_path=/opt/environments/android/toolchain-eabi-4.2.1/bin
-        export ARCHITECTURE=linux_nj
-        echo "ARCHITECTURE=$ARCHITECTURE"
-        export PATH=$android_gcc_arm_path:$BASE_PATH
-        export ANDROID_BASE=/opt/environments/android
-        echo "ANDROID_BASE=$ANDROID_BASE"
-        ;;
-    3)
-        echo "Choice is to build for target with the default linux-arm cross-compiler"
-        # clean the environment
-        clean_env
-        # set path up for linux-arm compiler
-        linux_arm_path=/opt/environments/linux_arm/data/omapts/linux/arm-tc/gcc-3.4.0-1/bin
-        export ARCHITECTURE=linux_arm
-        export PATH=$linux_arm_path:$BASE_PATH
-        ;;
-    4)  
-        echo "Choice is to build for target with workspace's OpenCORE (Android) cross-compiler"
-        ## clean the environment
-        clean_env
-        ## set path up for linux OpenCore build
-        android_gcc_arm_path=$BASE_DIR/toolchains/android/toolchain-eabi-4.2.1/bin
-        export ARCHITECTURE=linux_nj
-        echo "ARCHITECTURE=$ARCHITECTURE"
-        export PATH=$android_gcc_arm_path:$BASE_PATH
-        export ANDROID_BASE=$BASE_DIR/toolchains/android
-        echo "ANDROID_BASE=$ANDROID_BASE"
-        ;;
-    *)
-        echo "Invalid selection.  Please enter your selection again."
-        print_menu
-        return
-        ;;
-    esac
-}
-
-function mkcmdcmpl()
-{
-    printf "\nGetting make cmdline completion values...\n"
-    export PV_MAKE_COMPLETION_TARGETS=`make -j -f makefile_nr completion_targets`
-    printf "Done getting make cmdline completion values.\n\n"
-}
-
-
-
-echo Setting up build environment with default configuration ...
-
-export PROJECT_DIR=$PWD
-
-# Set CFG_DIR
-#
-export CFG_DIR=$PWD
-echo "Set CFG_DIR to $CFG_DIR ..."
-
-if [[ $# -ge 1 ]]; then
-  export BASE_DIR=${1%/}
-  echo "Set BASE_DIR to $BASE_DIR ..."
-else
-   if [[ -z $BASE_DIR ]]; then
-      echo "Error. !!!!!!!BASE_DIR is not set!!!!!!!"
-   else   
-      echo BASE_DIR already defined as $BASE_DIR ...
-   fi
-fi
-
-export BUILD_ROOT=$PROJECT_DIR/build
-echo Set BUILD_ROOT to $BUILD_ROOT ...
-
-export SRC_ROOT=$BASE_DIR
-echo Set SRC_ROOT to $SRC_ROOT ...
-
-export MK=$BASE_DIR/tools_v2/build/make_nr/tools_v2/build/make
-echo Set MK to $MK ...
-
-
-extern_tools_path=$BASE_DIR/extern_tools_v2/bin/linux
-export PATH=$extern_tools_path:$PATH
-export BASE_PATH=$PATH
-
-_pv_make_completion()
-{
-    local cur prev opts
-    COMPREPLY=()
-    cur="${COMP_WORDS[COMP_CWORD]}"
-    prev="${COMP_WORDS[COMP_CWORD-1]}"
-    opts="${PV_MAKE_COMPLETION_TARGETS}"
-
-    case "${prev}" in 
-      -f)
-        COMPREPLY=( $(compgen -f ${cur}) )
-        return 0
-        ;;
-    *)
-        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
-        return 0
-        ;;
-    esac
-}
-
-complete -F _pv_make_completion make
-###
-
-echo 
-echo Environment is ready if no errors reported
-echo
-
diff --git a/build_config/default/setup_shell.bat b/build_config/default/setup_shell.bat
deleted file mode 100755
index a6311f4..0000000
--- a/build_config/default/setup_shell.bat
+++ /dev/null
@@ -1,20 +0,0 @@
-@echo off
-
-rem *** Set the BASE_DIR ***
-set BASE_DIR=
-for /f "tokens=* delims=\" %%P in ('cd') do (
-	set mypath=%%P
-	)
-set array=%mypath:\= %
-	
-for %%E in (%array%) do (
-	if .%%E==. goto getout
-  if %%E==build_config goto getout
-  call set BASE_DIR=%%BASE_DIR%%\%%E
-)
-
-:getout 
-	set BASE_DIR=%BASE_DIR:~1%
-
-echo Set BASE_DIR to %BASE_DIR% ...
-
diff --git a/build_config/opencore_dynamic/Android_omx_aacdec_sharedlibrary.mk b/build_config/opencore_dynamic/Android_omx_aacdec_sharedlibrary.mk
index eca9b66..593d179 100644
--- a/build_config/opencore_dynamic/Android_omx_aacdec_sharedlibrary.mk
+++ b/build_config/opencore_dynamic/Android_omx_aacdec_sharedlibrary.mk
@@ -7,6 +7,8 @@
 
 LOCAL_MODULE := libomx_aacdec_sharedlibrary
 
+LOCAL_PRELINK_MODULE := false
+
 -include $(PV_TOP)/Android_platform_extras.mk
 
 -include $(PV_TOP)/Android_system_extras.mk
diff --git a/build_config/opencore_dynamic/Android_omx_amrdec_sharedlibrary.mk b/build_config/opencore_dynamic/Android_omx_amrdec_sharedlibrary.mk
index 329fd6d..84cd911 100644
--- a/build_config/opencore_dynamic/Android_omx_amrdec_sharedlibrary.mk
+++ b/build_config/opencore_dynamic/Android_omx_amrdec_sharedlibrary.mk
@@ -8,6 +8,8 @@
 
 LOCAL_MODULE := libomx_amrdec_sharedlibrary
 
+LOCAL_PRELINK_MODULE := false
+
 -include $(PV_TOP)/Android_platform_extras.mk
 
 -include $(PV_TOP)/Android_system_extras.mk
diff --git a/build_config/opencore_dynamic/Android_omx_amrenc_sharedlibrary.mk b/build_config/opencore_dynamic/Android_omx_amrenc_sharedlibrary.mk
index da7db8e..c5022a5 100644
--- a/build_config/opencore_dynamic/Android_omx_amrenc_sharedlibrary.mk
+++ b/build_config/opencore_dynamic/Android_omx_amrenc_sharedlibrary.mk
@@ -7,6 +7,8 @@
 
 LOCAL_MODULE := libomx_amrenc_sharedlibrary
 
+LOCAL_PRELINK_MODULE := false
+
 -include $(PV_TOP)/Android_platform_extras.mk
 
 -include $(PV_TOP)/Android_system_extras.mk
diff --git a/build_config/opencore_dynamic/Android_omx_avcdec_sharedlibrary.mk b/build_config/opencore_dynamic/Android_omx_avcdec_sharedlibrary.mk
index 7d4d11e..3d03d40 100644
--- a/build_config/opencore_dynamic/Android_omx_avcdec_sharedlibrary.mk
+++ b/build_config/opencore_dynamic/Android_omx_avcdec_sharedlibrary.mk
@@ -7,6 +7,8 @@
 
 LOCAL_MODULE := libomx_avcdec_sharedlibrary
 
+LOCAL_PRELINK_MODULE := false
+
 -include $(PV_TOP)/Android_platform_extras.mk
 
 -include $(PV_TOP)/Android_system_extras.mk
diff --git a/build_config/opencore_dynamic/Android_omx_avcenc_sharedlibrary.mk b/build_config/opencore_dynamic/Android_omx_avcenc_sharedlibrary.mk
index bb68351..67a8200 100644
--- a/build_config/opencore_dynamic/Android_omx_avcenc_sharedlibrary.mk
+++ b/build_config/opencore_dynamic/Android_omx_avcenc_sharedlibrary.mk
@@ -7,6 +7,8 @@
 
 LOCAL_MODULE := libomx_avcenc_sharedlibrary
 
+LOCAL_PRELINK_MODULE := false
+
 -include $(PV_TOP)/Android_platform_extras.mk
 
 -include $(PV_TOP)/Android_system_extras.mk
diff --git a/build_config/opencore_dynamic/Android_omx_m4vdec_sharedlibrary.mk b/build_config/opencore_dynamic/Android_omx_m4vdec_sharedlibrary.mk
index 6df5086..1315c2c 100644
--- a/build_config/opencore_dynamic/Android_omx_m4vdec_sharedlibrary.mk
+++ b/build_config/opencore_dynamic/Android_omx_m4vdec_sharedlibrary.mk
@@ -7,6 +7,8 @@
 
 LOCAL_MODULE := libomx_m4vdec_sharedlibrary
 
+LOCAL_PRELINK_MODULE := false
+
 -include $(PV_TOP)/Android_platform_extras.mk
 
 -include $(PV_TOP)/Android_system_extras.mk
diff --git a/build_config/opencore_dynamic/Android_omx_m4venc_sharedlibrary.mk b/build_config/opencore_dynamic/Android_omx_m4venc_sharedlibrary.mk
index bf46bad..e6268c9 100644
--- a/build_config/opencore_dynamic/Android_omx_m4venc_sharedlibrary.mk
+++ b/build_config/opencore_dynamic/Android_omx_m4venc_sharedlibrary.mk
@@ -7,6 +7,8 @@
 
 LOCAL_MODULE := libomx_m4venc_sharedlibrary
 
+LOCAL_PRELINK_MODULE := false
+
 -include $(PV_TOP)/Android_platform_extras.mk
 
 -include $(PV_TOP)/Android_system_extras.mk
diff --git a/build_config/opencore_dynamic/Android_omx_mp3dec_sharedlibrary.mk b/build_config/opencore_dynamic/Android_omx_mp3dec_sharedlibrary.mk
index b9fe4bc..911f180 100644
--- a/build_config/opencore_dynamic/Android_omx_mp3dec_sharedlibrary.mk
+++ b/build_config/opencore_dynamic/Android_omx_mp3dec_sharedlibrary.mk
@@ -7,6 +7,8 @@
 
 LOCAL_MODULE := libomx_mp3dec_sharedlibrary
 
+LOCAL_PRELINK_MODULE := false
+
 -include $(PV_TOP)/Android_platform_extras.mk
 
 -include $(PV_TOP)/Android_system_extras.mk
diff --git a/build_config/opencore_dynamic/Android_omx_sharedlibrary.mk b/build_config/opencore_dynamic/Android_omx_sharedlibrary.mk
index 574f6f5..241457b 100644
--- a/build_config/opencore_dynamic/Android_omx_sharedlibrary.mk
+++ b/build_config/opencore_dynamic/Android_omx_sharedlibrary.mk
@@ -10,6 +10,8 @@
 
 LOCAL_MODULE := libomx_sharedlibrary
 
+LOCAL_PRELINK_MODULE := false
+
 -include $(PV_TOP)/Android_platform_extras.mk
 
 -include $(PV_TOP)/Android_system_extras.mk
diff --git a/build_config/opencore_dynamic/Android_opencore_download.mk b/build_config/opencore_dynamic/Android_opencore_download.mk
index 4de9eb8..1c8db5d 100644
--- a/build_config/opencore_dynamic/Android_opencore_download.mk
+++ b/build_config/opencore_dynamic/Android_opencore_download.mk
@@ -8,6 +8,8 @@
 
 LOCAL_MODULE := libopencore_download
 
+LOCAL_PRELINK_MODULE := false
+
 -include $(PV_TOP)/Android_platform_extras.mk
 
 -include $(PV_TOP)/Android_system_extras.mk
diff --git a/build_config/opencore_dynamic/Android_opencore_downloadreg.mk b/build_config/opencore_dynamic/Android_opencore_downloadreg.mk
index 2ab5090..a448cd3 100644
--- a/build_config/opencore_dynamic/Android_opencore_downloadreg.mk
+++ b/build_config/opencore_dynamic/Android_opencore_downloadreg.mk
@@ -6,6 +6,8 @@
 
 LOCAL_MODULE := libopencore_downloadreg
 
+LOCAL_PRELINK_MODULE := false
+
 -include $(PV_TOP)/Android_platform_extras.mk
 
 -include $(PV_TOP)/Android_system_extras.mk
diff --git a/build_config/opencore_dynamic/Android_opencore_mp4local.mk b/build_config/opencore_dynamic/Android_opencore_mp4local.mk
index e90759d..269c0ff 100644
--- a/build_config/opencore_dynamic/Android_opencore_mp4local.mk
+++ b/build_config/opencore_dynamic/Android_opencore_mp4local.mk
@@ -7,6 +7,8 @@
 
 LOCAL_MODULE := libopencore_mp4local
 
+LOCAL_PRELINK_MODULE := false
+
 -include $(PV_TOP)/Android_platform_extras.mk
 
 -include $(PV_TOP)/Android_system_extras.mk
diff --git a/build_config/opencore_dynamic/Android_opencore_mp4localreg.mk b/build_config/opencore_dynamic/Android_opencore_mp4localreg.mk
index 2378bb6..7002d80 100644
--- a/build_config/opencore_dynamic/Android_opencore_mp4localreg.mk
+++ b/build_config/opencore_dynamic/Android_opencore_mp4localreg.mk
@@ -7,6 +7,8 @@
 
 LOCAL_MODULE := libopencore_mp4localreg
 
+LOCAL_PRELINK_MODULE := false
+
 -include $(PV_TOP)/Android_platform_extras.mk
 
 -include $(PV_TOP)/Android_system_extras.mk
diff --git a/build_config/opencore_dynamic/Android_opencore_net_support.mk b/build_config/opencore_dynamic/Android_opencore_net_support.mk
index a56f8d1..45c4694 100644
--- a/build_config/opencore_dynamic/Android_opencore_net_support.mk
+++ b/build_config/opencore_dynamic/Android_opencore_net_support.mk
@@ -7,6 +7,8 @@
 
 LOCAL_MODULE := libopencore_net_support
 
+LOCAL_PRELINK_MODULE := false
+
 -include $(PV_TOP)/Android_platform_extras.mk
 
 -include $(PV_TOP)/Android_system_extras.mk
diff --git a/build_config/opencore_dynamic/Android_opencore_player.mk b/build_config/opencore_dynamic/Android_opencore_player.mk
index 32d71f4..80cf2c5 100644
--- a/build_config/opencore_dynamic/Android_opencore_player.mk
+++ b/build_config/opencore_dynamic/Android_opencore_player.mk
@@ -4,6 +4,7 @@
 LOCAL_WHOLE_STATIC_LIBRARIES := \
 	libcpm \
  	libpassthru_oma1 \
+ 	libpvpvxparser \
  	libpvid3parcom \
  	libpvamrffparsernode \
  	libpvamrffrecognizer \
@@ -34,6 +35,7 @@
 include $(BUILD_SHARED_LIBRARY)
 include   $(PV_TOP)/pvmi/content_policy_manager/Android.mk
 include   $(PV_TOP)/pvmi/content_policy_manager/plugins/oma1/passthru/Android.mk
+include   $(PV_TOP)/fileformats/pvx/parser/Android.mk
 include   $(PV_TOP)/fileformats/id3parcom/Android.mk
 include   $(PV_TOP)/nodes/pvamrffparsernode/Android.mk
 include   $(PV_TOP)/pvmi/recognizer/plugins/pvamrffrecognizer/Android.mk
diff --git a/build_config/opencore_dynamic/Android_opencore_rtsp.mk b/build_config/opencore_dynamic/Android_opencore_rtsp.mk
index 304a07f..e5b9384 100644
--- a/build_config/opencore_dynamic/Android_opencore_rtsp.mk
+++ b/build_config/opencore_dynamic/Android_opencore_rtsp.mk
@@ -8,12 +8,16 @@
  	libpvrtsp_cli_eng_node \
  	librtppayloadparser \
  	librtprtcp \
+ 	libpvjitterbuffer \
+ 	libpvjitterbufferrtp \
  	libpvjitterbuffernode \
  	libpvmedialayernode \
  	libpvsdpparser
 
 LOCAL_MODULE := libopencore_rtsp
 
+LOCAL_PRELINK_MODULE := false
+
 -include $(PV_TOP)/Android_platform_extras.mk
 
 -include $(PV_TOP)/Android_system_extras.mk
@@ -27,6 +31,8 @@
 include   $(PV_TOP)/protocols/rtsp_client_engine/Android.mk
 include   $(PV_TOP)/protocols/rtp_payload_parser/Android.mk
 include   $(PV_TOP)/protocols/rtp/Android.mk
+include   $(PV_TOP)/nodes/streaming/jitterbuffernode/jitterbuffer/common/Android.mk
+include   $(PV_TOP)/nodes/streaming/jitterbuffernode/jitterbuffer/rtp/Android.mk
 include   $(PV_TOP)/nodes/streaming/jitterbuffernode/Android.mk
 include   $(PV_TOP)/nodes/streaming/medialayernode/Android.mk
 include   $(PV_TOP)/protocols/sdp/parser/Android.mk
diff --git a/build_config/opencore_dynamic/Android_opencore_rtspreg.mk b/build_config/opencore_dynamic/Android_opencore_rtspreg.mk
index 5b20a27..91599dc 100644
--- a/build_config/opencore_dynamic/Android_opencore_rtspreg.mk
+++ b/build_config/opencore_dynamic/Android_opencore_rtspreg.mk
@@ -6,6 +6,8 @@
 
 LOCAL_MODULE := libopencore_rtspreg
 
+LOCAL_PRELINK_MODULE := false
+
 -include $(PV_TOP)/Android_platform_extras.mk
 
 -include $(PV_TOP)/Android_system_extras.mk
diff --git a/build_config/opencore_dynamic/makefile b/build_config/opencore_dynamic/makefile
new file mode 100644
index 0000000..a3bd52e
--- /dev/null
+++ b/build_config/opencore_dynamic/makefile
@@ -0,0 +1,19 @@
+
+include $(MK)/entry_point.mk
+
+FORMAT := android
+
+include $(CFG_DIR)/../common/local.mk
+
+TESTAPPS="pvplayer_engine_test test_pvauthorengine pv2way_omx_engine_test"
+TESTAPP_DIR_pvplayer_engine_test="/engines/player/test/build/android"
+TESTAPP_DIR_test_pvauthorengine="/engines/author/test/build/android"
+TESTAPP_DIR_pv2way_omx_engine_test="/engines/2way/test/build/make"
+
+opencore_common_PRELINK := true
+opencore_player_PRELINK := true
+opencore_author_PRELINK := true
+opencore_2way_PRELINK := true
+
+include $(MK)/cml2_shared.mk
+
diff --git a/build_config/opencore_dynamic/makefile_nr b/build_config/opencore_dynamic/makefile_nr
deleted file mode 100644
index 7530afb..0000000
--- a/build_config/opencore_dynamic/makefile_nr
+++ /dev/null
@@ -1,14 +0,0 @@
-
-include $(MK)/entry_point.mk
-
-FORMAT := nj
-
-include $(CFG_DIR)/../common/local.mk
-
-TESTAPPS="pvplayer_engine_test test_pvauthorengine pv2way_omx_engine_test"
-TESTAPP_DIR_pvplayer_engine_test="/engines/player/test/build/linux_nj"
-TESTAPP_DIR_test_pvauthorengine="/engines/author/test/build/linux_nj"
-TESTAPP_DIR_pv2way_omx_engine_test="/engines/2way/test/build/make"
-
-include $(MK)/cml2_shared.mk
-
diff --git a/build_config/opencore_dynamic/prelink-linux-arm.map b/build_config/opencore_dynamic/prelink-linux-arm.map
deleted file mode 100644
index 8043a03..0000000
--- a/build_config/opencore_dynamic/prelink-linux-arm.map
+++ /dev/null
@@ -1,124 +0,0 @@
-
-# 0xC0000000 - 0xFFFFFFFF Kernel
-# 0xB0100000 - 0xBFFFFFFF Thread 0 Stack
-# 0xB0000000 - 0xB00FFFFF Linker
-# 0xA0000000 - 0xBFFFFFFF Prelinked System Libraries
-# 0x90000000 - 0x9FFFFFFF Prelinked App Libraries
-# 0x80000000 - 0x8FFFFFFF Non-prelinked Libraries
-# 0x40000000 - 0x7FFFFFFF mmap'd stuff
-# 0x10000000 - 0x3FFFFFFF Thread Stacks
-# 0x00000000 - 0x0FFFFFFF .text / .data / heap
-
-# core system libraries
-libdl.so                0xAFF00000
-libc.so                 0xAFE00000
-libstdc++.so            0xAFD00000
-libm.so                 0xAFC00000
-liblog.so               0xAFBC0000
-libcutils.so            0xAFB00000
-libthread_db.so         0xAFA00000
-libz.so                 0xAF900000
-libevent.so             0xAF800000
-libssl.so               0xAF700000
-libcrypto.so            0xAF500000
-
-# extended system libraries
-libbluetooth.so         0xAEC00000
-libdbus.so              0xAE800000
-libril.so               0xAE400000
-libreference-ril.so     0xAE000000
-libwpa_client.so        0xADC00000
-libnetutils.so          0xADB00000
-
-# core dalvik runtime support
-libandroid_servers.so   0xAD900000
-libicudata.so           0xAD600000
-libicuuc.so             0xAD500000
-libicui18n.so           0xAD400000
-libandroid_runtime.so   0xAD300000
-libnativehelper.so      0xAD200000
-libdvm-ARM.so           0xAD100000
-libdvm.so               0xAD000000
-
-# graphics
-libpixelflinger.so      0xACF00000
-libcorecg.so            0xACE00000
-libsurfaceflinger.so    0xACD00000
-libagl.so               0xACC00000
-libGLES_CM.so           0xACB00000
-libexif.so              0xAC500000
-libui.so                0xAC400000
-libsgl.so               0xAC000000
-
-# audio
-libaudio.so             0xAB700000
-libsonivox.so           0xAB600000
-libsoundpool.so         0xAB500000
-libvorbisidec.so        0xAB400000
-libmedia_jni.so         0xAB300000
-libmediaplayerservice.so 0xAB280000
-libmedia.so             0xAB200000
-libFFTEm.so             0xAB100000
-libaudioflinger.so      0xAB000000
-
-# assorted system libraries
-libsqlite.so            0xAAC00000
-libexpat.so             0xAA800000
-libwebcore.so           0xAA000000
-libutils.so             0xA9D00000
-libcameraservice.so     0xA9C80000
-libhardware.so          0xA9C00000
-libapp_process.so       0xA9B00000
-libsystem_server.so     0xA9A00000
-libime.so               0xA9800000
-libgps.so               0xA9700000
-libcamera.so            0xA9680000
-libqcamera.so           0xA9400000
-
-# pv libraries
-libpvasf.so                    0xA7C26000
-libpvasfreg.so                 0xA7C00000
-libomx_sharedlibrary.so        0xA7BA0000
-libopencore_download.so        0xA7B40000
-libopencore_downloadreg.so     0xA7B00000
-libopencore_net_support.so     0xA7A00000
-libopencore_rtsp.so            0xA7900000
-libopencore_rtspreg.so         0xA7840000
-libopencore_author.so          0xA7700000
-libomx_aacdec_sharedlibrary.so 0xA76C0000
-libomx_amrdec_sharedlibrary.so 0xA76A0000
-libomx_amrenc_sharedlibrary.so 0xA7680000
-libomx_avcdec_sharedlibrary.so 0xA7660000
-libomx_avcenc_sharedlibrary.so 0xA7640000
-libomx_m4vdec_sharedlibrary.so 0xA7610000
-libomx_m4venc_sharedlibrary.so 0xA75E0000
-libomx_mp3dec_sharedlibrary.so 0xA75C0000
-libopencore_mp4local.so        0xA7400000
-libopencore_mp4localreg.so     0xA7300000
-libopencore_player.so          0xA7000000
-libopencore_common.so          0xA6000000
-libopencore_2way.so            0xA5A00000
-
-# libraries for specific apps or temporary libraries
-libcam_ipl.so           0x9F000000
-libwbxml.so             0x9E800000
-libwbxml_jni.so         0x9E400000
-libxml2wbxml.so         0x9E000000
-libaes.so               0x9DC00000
-libdrm1.so              0x9D800000
-libdrm1_jni.so          0x9D400000
-libwapcore.so           0x9D000000
-libstreetview.so        0x9CC00000
-libwapbrowsertest.so    0x9C800000
-libminiglobe.so         0x9C400000
-libearth.so             0x9C000000
-libembunit.so           0x9BC00000
-libneon.so              0x9B800000
-libjni_example.so       0x9B400000
-libjni_load_test.so     0x9B000000
-libjni_lib_test.so      0x9AC00000
-librunperf.so           0x9A800000
-libctest.so             0x9A700000
-libUAPI_jni.so          0x9A500000
-librpc.so               0x9A400000 
-libtrace_test.so        0x9A300000 
diff --git a/build_config/opencore_dynamic/pv_config.h b/build_config/opencore_dynamic/pv_config.h
index f5fca67..e1fbac0 100644
--- a/build_config/opencore_dynamic/pv_config.h
+++ b/build_config/opencore_dynamic/pv_config.h
@@ -18,7 +18,7 @@
 //
 // Automatically generated, don't edit
 //
-// At: Fri, 16 Jan 2009 06:11:38 +0000
+// At: Wed, 18 Feb 2009 00:59:11 +0000
 
 //
 // PV Code Base Configuration System
@@ -28,6 +28,7 @@
 // Menu for selecting supported features
 //
 #define module_support 1
+#define shoutcast_support 0
 
 
 //
@@ -49,6 +50,7 @@
 #define janus_support 0
 #define wmdrmplat_support 0
 #define wmdrmdev_support 0
+#define wmdrmsysclk_support 0
 #define mtp_db_support 0
 
 
@@ -81,7 +83,7 @@
 #define pvrmffparser_lib 0
 #define pvfileparserutils_lib m
 #define pvid3parcom_lib m
-#define pvpvxparser_lib 0
+#define pvpvxparser_lib m
 #define pvwav_lib m
 #define pvasxparser_lib 0
 #define pvavifileparser_lib m
@@ -176,7 +178,13 @@
 #define pvmedialayernode_lib m
 #define pvmedialayernode_opencore_lib 0
 #define pvjitterbuffernode_lib m
-#define pvjitterbuffernode_opencore_lib 0
+
+//
+// Menu for configuring Jitter Buffer Node
+//
+#define rtpjitterbuffer_support m
+#define asfjitterbuffer_support 0
+
 
 
 //
@@ -187,15 +195,29 @@
 //
 // Menu for configuring downloadmanager features
 //
-#define PVMF_DOWNLOADMANAGER_SUPPORT_PVX 0
 #define PVMF_DOWNLOADMANAGER_SUPPORT_PPB 1
-#define PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE 0
-#define PVMF_DOWNLOADMANAGER_MIN_TCP_BUFFERS_FOR_PPB 13
-#define ENABLE_LARGE_MBDS_CACHE_SIZE 0
+#define PVMF_DOWNLOADMANAGER_MIN_TCP_BUFFERS_FOR_PPB 39
+#define PVMF_DOWNLOADMANAGER_CACHE_SIZE_FOR_SC_IN_SECONDS 6
+#define PVMF_DOWNLOADMANAGER_MAX_BITRATE_FOR_SC 128
 
 
 
 //
+// Menu for adding NON-OMX Nodes
+//
+#define aacdecnode_lib 0
+#define mp3decnode_lib 0
+#define pvavcdecnode_lib 0
+#define pvwmadecnode_lib 0
+#define pvwmvdecnode_lib 0
+#define gsmamrdecnode_lib 0
+#define pvvideodecnode_lib 0
+#define pvvideoencnode_lib 0
+#define pvamrencnode_lib 0
+#define pvavcencnode_lib 0
+
+
+//
 // Menu for configuring ProtocolEngine
 //
 #define pvprotocolenginenode_segments_lib m
@@ -213,21 +235,14 @@
 #define pvfileoutputnode_lib m
 #define pvmediaoutputnode_lib m
 #define pvsocketnode_lib m
-#define pvavcdecnode_lib 0
-#define pvvideodecnode_lib 0
 #define pvwavffparsernode_lib m
-#define pvwmadecnode_lib 0
-#define pvwmvdecnode_lib 0
 #define pvomxencnode_lib m
 #define pvomxaudiodecnode_lib m
 #define pvomxbasedecnode_lib m
 #define pvomxvideodecnode_lib m
-#define aacdecnode_lib 0
 #define pvaacffparsernode_lib m
-#define gsmamrdecnode_lib 0
 #define pvamrffparsernode_lib m
 #define pvasfffparsernode_lib 0
-#define mp3decnode_lib 0
 #define pvmp3ffparsernode_lib m
 #define pvmp4ffparsernode_lib 0
 #define pvmp4ffparsernodeopencore_lib m
@@ -236,12 +251,9 @@
 #define pvrmffparsernode_lib 0
 #define pvrtppacketsourcenode_lib 0
 #define nodes_common_headers_lib m
-#define pvamrencnode_lib 0
 #define pvmediainputnode_lib m
 #define pvmp4ffcomposernode_lib 0
 #define pvmp4ffcomposernodeopencore_lib m
-#define pvvideoencnode_lib 0
-#define pvavcencnode_lib 0
 #define pvpvr_lib 0
 #define pvpvrnode_lib 0
 #define pvcommsionode_lib m
@@ -410,6 +422,8 @@
 #define BUILD_MP3_FF_REC 1
 #define BUILD_WAV_FF_REC 1
 #define BUILD_AMR_FF_REC 1
+#define BUILD_DIVX_FF_PARSER_NODE 0
+#define BUILD_DIVX_FF_REC 0
 
 
 
@@ -438,6 +452,8 @@
 
 
 //
+// That's all, folks!
+//
 // Derived symbols
 //
 #define pvmediaoutputnode_y_mk ""
@@ -460,13 +476,14 @@
 #define sdp_common_m_mk "/protocols/sdp/common/build/make"
 #define sdp_parser_mksegment_opencore "sdp_opencore.mk"
 #define pvloopbacknode_y_mk ""
+#define scsp_m_lib ""
 #define pvrtspreginterface_m_mk "/modules/linux_rtsp/node_registry/build/make"
 #define LIBDIR_oscl_static " /oscl/unit_test/build/make"
 #define SOLIBDIRS_omx_m4venc_sharedlibrary "/codecs_v2/omx/omx_m4venc/build/make_multithreaded /codecs_v2/video/m4v_h263/enc/build/make"
 #define pvrmff_m_lib ""
-#define pvjitterbuffernode_plugins_pvasfstreaming "jb_asf.mk"
 #define omx_wmv_component_y_lib ""
 #define pvwmdrm_m_mk ""
+#define pvstreamingmanagernode_segments_m_mk "/nodes/streaming/streamingmanager/build/make_segments"
 #define omx_amrenc_component_m_lib "-lomx_amrenc_component_lib"
 #define pvdummyinputnode_y_mk ""
 #define pvfileparserutils_y_mk ""
@@ -497,7 +514,7 @@
 #define pvaacparser_m_lib "-lpvaacparser"
 #define mp4recognizer_utility_m_lib "-lmp4recognizer_utility"
 #define SOLIBDIRS_pvjanus " "
-#define USING_OMX 1
+#define pvjitterbufferasf_y_lib ""
 #define pvmediainputnode_m_lib "-lpvmediainputnode"
 #define protocolenginenode_segments_m_mk "/nodes/pvprotocolenginenode/build/make_segments"
 #define asfrecognizer_utility_m_lib ""
@@ -513,15 +530,15 @@
 #define omx_baseclass_y_lib ""
 #define LIBS_packetsources_static "n"
 #define pvdecoder_gsmamr_imp_m_lib ""
-#define LIBDIR_fileformats_shared "/fileformats/common/parser/build/make /fileformats/id3parcom/build/make  /fileformats/wav/parser/build/make  /fileformats/avi/parser/build/make  /fileformats/mp3/parser/build/make /fileformats/rawaac/parser/build/make /fileformats/rawgsmamr/parser/build/make    /fileformats/mp4/parser/utils/mp4recognizer/build/make /fileformats/mp4/parser/build_opencore/make  /fileformats/mp4/composer/build_opencore/make   "
+#define LIBDIR_fileformats_shared "/fileformats/common/parser/build/make /fileformats/id3parcom/build/make /fileformats/pvx/parser/build/make /fileformats/wav/parser/build/make  /fileformats/avi/parser/build/make  /fileformats/mp3/parser/build/make /fileformats/rawaac/parser/build/make /fileformats/rawgsmamr/parser/build/make    /fileformats/mp4/parser/utils/mp4recognizer/build/make /fileformats/mp4/parser/build_opencore/make  /fileformats/mp4/composer/build_opencore/make    "
 #define pvdummyoutputnode_m_mk "/nodes/pvdummyoutputnode/build/make"
 #define pvasfff_m_lib ""
 #define pvrmff_m_mk ""
 #define csprng_m_lib ""
 #define pv_avc_common_lib_y_mk ""
 #define pvavcdecoder_m_mk "/codecs_v2/video/avc_h264/dec/build/make"
-#define SOLIBDIRS_pvasfstreaming " /nodes/streaming/streamingmanager/build/make_segments /nodes/streaming/jitterbuffernode/build/make /nodes/streaming/medialayernode/build/make /protocols/rtp_payload_parser/build/make /protocols/rtp/build/make /nodes/pvprotocolenginenode/build/make_segments"
-#define LIBDIR_extern_libs_shared "    "
+#define SOLIBDIRS_pvasfstreaming " /nodes/streaming/streamingmanager/build/make_segments /nodes/streaming/jitterbuffernode/jitterbuffer/common/build/make  /nodes/streaming/jitterbuffernode/build/make /nodes/streaming/medialayernode/build/make /protocols/rtp_payload_parser/build/make /protocols/rtp/build/make /nodes/pvprotocolenginenode/build/make_segments"
+#define DYNAMIC_LOAD_OMX_AVCENC_COMPONENT 1
 #define protocolenginenode_y_mk ""
 #define omx_mastercore_m_mk "/codecs_v2/omx/omx_mastercore/build/make_multithreaded"
 #define m4v_config_m_mk "/codecs_v2/utilities/m4v_config_parser/build/make"
@@ -560,12 +577,13 @@
 #define SOLIBS_opencore_author " -lpvmp4ffcomposer  -lpvmp4ffcomposernode -lpvauthorengine"
 #define pvmp3ff_y_lib ""
 #define pv324m_plugins "default_support.mk"
+#define pvwmdrmsysclk_so_name ""
 #define MODS_omx_wmadec_sharedlibrary "-lomx_sharedlibrary -lopencore_common"
 #define omx_m4vdec_sharedlibrary_so_name "omx_m4vdec_sharedlibrary"
 #define pvrtppacketsourcenode_y_mk ""
 #define pvmiofileinput_y_lib ""
 #define pvavcdecoder_m_lib "-lpvavcdecoder"
-#define LIBS_fileformats_static "                  "
+#define LIBS_fileformats_static "                   "
 #define SOLIBDIRS_opencore_mp4localreg "/modules/linux_mp4/node_registry/build/make /pvmi/recognizer/plugins/pvmp4ffrecognizer/build/make"
 #define pvamrffrecognizer_y_mk ""
 #define REGISTER_OMX_WMV_COMPONENT 0
@@ -577,10 +595,8 @@
 #define packetsources_default_y_lib ""
 #define LIBDIR_baselibs_shared "   /baselibs/gen_data_structures/build/make /baselibs/media_data_structures/build/make /baselibs/pv_mime_utils/build/make /baselibs/threadsafe_callback_ao/build/make /baselibs/thread_messaging/build/make"
 #define pvomx_proxy_m_mk "/codecs_v2/omx/omx_proxy/build/make"
-#define LIBS_recognizer_shared "-lpvmfrecognizer -lpvaacffrecognizer -lpvamrffrecognizer   -lpvmp3ffrecognizer -lpvmp4ffrecognizer -lpvwavffrecognizer  "
 #define pvasf_streaming_so_name ""
 #define pvsocketnode_m_mk "/nodes/pvsocketnode/build/make"
-#define pvstreamingmanagernode_3gpp_m_mk ""
 #define pv2wayengine_y_lib ""
 #define pvwmadecnode_y_mk ""
 #define pvaacffrecognizer_y_lib ""
@@ -594,7 +610,6 @@
 #define pvvideoparsernode_y_mk ""
 #define pvmp4ffcomposer_m_lib ""
 #define dl_common_mk "pe_dl_common.mk"
-#define pvjitterbuffernode_opencore_m_mk ""
 #define pvmp4ffcomposer_y_lib ""
 #define threadsafe_callback_ao_m_lib "-lthreadsafe_callback_ao"
 #define pvmp4ffopencore_m_lib "-lpvmp4ff"
@@ -608,21 +623,21 @@
 #define pvwmdrmdev_so_name ""
 #define rvdecoder_y_mk ""
 #define pvavifileparser_m_mk "/fileformats/avi/parser/build/make"
-#define pvjitterbuffernode_opencore_y_mk ""
 #define gsm_amr_headers_m_mk "/codecs_v2/audio/gsm_amr/common/dec/build/make"
 #define pvaacparser_y_mk ""
 #define pvaacffparsernode_m_mk "/nodes/pvaacffparsernode/build/make"
-#define LIBS_extern_libs_shared "    "
+#define LIBS_extern_libs_shared "  "
 #define LIBDIR_media_io_static "   "
 #define getactualaacconfig_m_mk "/codecs_v2/audio/aac/dec/util/getactualaacconfig/build/make"
 #define colorconvert_y_mk ""
 #define pvgendatastruct_y_lib ""
-#define LIBDIR_pvmi_shared "/pvmi/content_policy_manager/build/make /pvmi/content_policy_manager/plugins/oma1/passthru/build/make   /pvmi/content_policy_manager/plugins/common/build/make  /pvmi/media_io/pvmiofileoutput/build/make /pvmi/media_io/pvmi_mio_fileinput/build/make_pvauthor /pvmi/media_io/pvmi_mio_avi_wav_fileinput/build/make /pvmi/media_io/pvmio_comm_loopback/build/make /pvmi/recognizer/build/make /pvmi/recognizer/plugins/pvaacffrecognizer/build/make /pvmi/recognizer/plugins/pvamrffrecognizer/build/make   /pvmi/recognizer/plugins/pvmp3ffrecognizer/build/make /pvmi/recognizer/plugins/pvmp4ffrecognizer/build/make /pvmi/recognizer/plugins/pvwavffrecognizer/build/make    /pvmi/pvmf/build/make  "
+#define LIBDIR_pvmi_shared "/pvmi/content_policy_manager/build/make /pvmi/content_policy_manager/plugins/oma1/passthru/build/make  /pvmi/content_policy_manager/plugins/common/build/make  /pvmi/media_io/pvmiofileoutput/build/make /pvmi/media_io/pvmi_mio_fileinput/build/make_pvauthor /pvmi/media_io/pvmi_mio_avi_wav_fileinput/build/make /pvmi/media_io/pvmio_comm_loopback/build/make /pvmi/recognizer/build/make /pvmi/recognizer/plugins/pvaacffrecognizer/build/make /pvmi/recognizer/plugins/pvamrffrecognizer/build/make   /pvmi/recognizer/plugins/pvmp3ffrecognizer/build/make /pvmi/recognizer/plugins/pvmp4ffrecognizer/build/make /pvmi/recognizer/plugins/pvwavffrecognizer/build/make    /pvmi/pvmf/build/make  "
 #define pvoma1ffrecognizer_m_mk ""
 #define csprng_y_mk ""
 #define pvdivxffparsernode_y_lib ""
 #define pvauthorengine_y_lib ""
 #define pvrtspinterface_m_lib "-lpvrtspinterface"
+#define scsp_y_lib ""
 #define pvmp3ff_y_mk ""
 #define pv_aac_dec_imp_m_lib ""
 #define rfc_3016_mk "rfc_3016.mk"
@@ -668,6 +683,7 @@
 #define pvmio_comm_loopback_m_mk "/pvmi/media_io/pvmio_comm_loopback/build/make"
 #define LIBS_baselibs_shared "   -lpvgendatastruct -lpvmediadatastruct -lpvmimeutils -lthreadsafe_callback_ao -lpvthreadmessaging"
 #define omx_avcenc_component_imp_m_mk ""
+#define pvjitterbufferasf_m_lib ""
 #define omx_amr_component_m_mk "/codecs_v2/omx/omx_amr/build/make_multithreaded"
 #define pvwmdrmplat_so_name ""
 #define pv_omx_interface_m_mk "/codecs_v2/omx/omx_sharedlibrary/interface/build/make"
@@ -676,13 +692,11 @@
 #define omx_avc_component_imp_m_lib ""
 #define pvavch264enc_y_lib ""
 #define pvmp3ff_m_lib "-lpvmp3ff"
-#define oscl_m_mk "/oscl"
-#define pvrvdecnode_y_lib ""
-#define pvclientserversocketnode_m_mk "/nodes/pvclientserversocketnode/build/make"
+#define scsp_m_mk ""
+#define pvjitterbufferasf_y_mk ""
 #define PROTOCOL_PLUGINS "pe_dl_common.mk pe_ps.mk pe_pdl.mk  "
-#define LIBDIR_nodes_shared "/nodes/pvfileoutputnode/build/make /nodes/pvmediaoutputnode/build/make /nodes/pvsocketnode/build/make  /nodes/pvprotocolenginenode/build/make_segments   /nodes/pvwavffparsernode/build/make   /nodes/pvomxencnode/build/make /nodes/pvomxbasedecnode/build/make /nodes/pvomxaudiodecnode/build/make /nodes/pvomxvideodecnode/build/make  /nodes/pvaacffparsernode/build/make  /nodes/pvamrffparsernode/build/make   /nodes/pvmp3ffparsernode/build/make  /nodes/pvmp4ffparsernode/build_opencore/make     /nodes/common/build/make  /nodes/pvmediainputnode/build/make_pvauthor  /nodes/pvmp4ffcomposernode/build_opencore/make     /nodes/pvdownloadmanagernode/build/make   /nodes/streaming/streamingmanager/build/make_segments   /modules/linux_rtsp/core/build/make /modules/linux_rtsp/node_registry/build/make /nodes/streaming/medialayernode/build/make  /nodes/streaming/jitterbuffernode/build/make  /nodes/pvcommsionode/build/make /nodes/pvclientserversocketnode/build/make /nodes/pvloopbacknode/build/make /nodes/pvvideoparsernode/build/make /nodes/pvdummyinputnode/build/make /nodes/pvdummyoutputnode/build/make "
+#define LIBDIR_nodes_shared "/nodes/pvfileoutputnode/build/make /nodes/pvmediaoutputnode/build/make /nodes/pvsocketnode/build/make  /nodes/pvprotocolenginenode/build/make_segments   /nodes/pvwavffparsernode/build/make   /nodes/pvomxencnode/build/make /nodes/pvomxbasedecnode/build/make /nodes/pvomxaudiodecnode/build/make /nodes/pvomxvideodecnode/build/make  /nodes/pvaacffparsernode/build/make  /nodes/pvamrffparsernode/build/make   /nodes/pvmp3ffparsernode/build/make  /nodes/pvmp4ffparsernode/build_opencore/make     /nodes/common/build/make   /nodes/pvmediainputnode/build/make_pvauthor  /nodes/pvmp4ffcomposernode/build_opencore/make    /nodes/pvdownloadmanagernode/build/make   /nodes/streaming/streamingmanager/build/make_segments   /modules/linux_rtsp/core/build/make /modules/linux_rtsp/node_registry/build/make /nodes/streaming/medialayernode/build/make  /nodes/streaming/jitterbuffernode/jitterbuffer/common/build/make /nodes/streaming/jitterbuffernode/jitterbuffer/rtp/build/make  /nodes/streaming/jitterbuffernode/build/make /nodes/pvcommsionode/build/make /nodes/pvclientserversocketnode/build/make /nodes/pvloopbacknode/build/make /nodes/pvvideoparsernode/build/make /nodes/pvdummyinputnode/build/make /nodes/pvdummyoutputnode/build/make "
 #define pvavcdecoder_imp_m_mk ""
-#define pvwmdrmdevinterface_m_lib ""
 #define pvdownloadinterface_m_lib "-lpvdownloadinterface"
 #define pvasfff_y_mk ""
 #define pvstreamingmanagernode_segments_y_lib ""
@@ -706,6 +720,7 @@
 #define DYNAMIC_LOAD_OMX_MP3_COMPONENT 1
 #define omx_aac_component_y_lib ""
 #define pvavcdecoder_y_mk ""
+#define SOLIBS_omx_sharedlibrary "-lomx_common_lib -lomx_queue_lib -lpvomx_proxy_lib -lomx_baseclass_lib -lpv_omx_interface"
 #define getactualaacconfig_y_lib ""
 #define pvrtsp_cli_eng_node_opencore_y_mk ""
 #define SOLIBDIRS_pvwmdrm "   "
@@ -715,13 +730,14 @@
 #define pvauthorengine_m_lib "-lpvauthorengine"
 #define standard_bcast_ps_mk ""
 #define pvmediaoutputnode_y_lib ""
-#define pv2wayengine_y_mk ""
 #define pvmio_comm_loopback_y_mk ""
 #define pvmediaoutputnode_m_lib "-lpvmediaoutputnode"
 #define SOLIBS_pvasfstreamingreg "n"
 #define pvomxaudiodecnode_m_lib "-lpvomxaudiodecnode"
+#define LIBDIR_audio_static "         "
 #define pvid3parcom_y_lib ""
 #define pvwavffparsernode_y_lib ""
+#define pv324m_y_lib ""
 #define pvrtsp_cli_eng_node_opencore_y_lib ""
 #define pvra8decoder_m_lib ""
 #define pvcommsionode_m_lib "-lpvcommsionode"
@@ -729,13 +745,15 @@
 #define pv324m_y_mk ""
 #define LIBDIR_omxencimp_static ""
 #define pvrmffparser_y_mk ""
-#define pvmp4ffparsernode_y_mk ""
+#define omx_avc_component_m_lib "-lomx_avc_component_lib"
 #define pvmp4ffrecognizer_y_mk ""
 #define pvstreamingmanagernode_3gpp_y_mk ""
 #define pvlatmpayloadparser_y_mk ""
 #define protocolenginenode_segments_y_lib ""
 #define MODS_omx_m4venc_sharedlibrary "-lomx_sharedlibrary -lopencore_common "
+#define SOLIBDIRS_omx_amrdec_sharedlibrary "/codecs_v2/omx/omx_amr/build/make_multithreaded /codecs_v2/audio/gsm_amr/amr_nb/dec/build/make /codecs_v2/audio/gsm_amr/amr_wb/dec/build/make"
 #define LIBDIR_omxdec_static "      "
+#define pvjitterbufferrtp_m_lib "-lpvjitterbufferrtp"
 #define pvthreadmessaging_m_lib "-lpvthreadmessaging"
 #define pvmp4ff_y_mk ""
 #define pvpvr_m_mk ""
@@ -744,6 +762,7 @@
 #define pvmediaoutputnode_m_mk "/nodes/pvmediaoutputnode/build/make"
 #define pvvideoparsernode_m_mk "/nodes/pvvideoparsernode/build/make"
 #define LIBDIR_omxencimp_shared ""
+#define omx_baseclass_y_mk ""
 #define pvwmdrmplatinterface_m_mk ""
 #define config_asf_mk ""
 #define pvvideodecnode_y_lib ""
@@ -762,6 +781,7 @@
 #define pvasfff_y_lib ""
 #define pvdownloadreginterface_m_lib "-lpvdownloadreginterface"
 #define pvjanus_so_name ""
+#define pvid3parcom_m_lib "-lpvid3parcom"
 #define pvpvr_m_lib ""
 #define omx_m4v_component_imp_m_mk ""
 #define rtspunicast_support_mk "rtspunicast.mk"
@@ -780,14 +800,14 @@
 #define MODS_opencore_download "-lopencore_net_support -lopencore_player -lopencore_common"
 #define pvasxparser_y_mk ""
 #define pvstreamingmanagernode_segments_m_lib "-lpvstreamingmanagernode"
-#define pvdecoder_gsmamr_imp_m_mk ""
+#define pvjitterbuffercommon_y_lib ""
 #define pvomxbasedecnode_y_lib ""
 #define pvmiofileinput_m_mk "/pvmi/media_io/pvmi_mio_fileinput/build/make_pvauthor"
 #define pvwavffparsernode_m_mk "/nodes/pvwavffparsernode/build/make"
 #define pvmedialayernode_opencore_y_lib ""
 #define LIBS_audio_static "        "
 #define colorconvert_m_mk "/codecs_v2/utilities/colorconvert/build/make"
-#define LIBDIR_omxdec_shared "/codecs_v2/omx/omx_h264/build/make_multithreaded /codecs_v2/omx/omx_m4v/build/make_multithreaded  /codecs_v2/omx/omx_aac/build/make_multithreaded /codecs_v2/omx/omx_amr/build/make_multithreaded /codecs_v2/omx/omx_mp3/build/make_multithreaded "
+#define getactualaacconfig_y_mk ""
 #define opencore_rtsp_so_name "opencore_rtsp"
 #define pvwmadecnode_m_mk ""
 #define pvmp4ffcomposer_y_mk ""
@@ -823,17 +843,18 @@
 #define pvrmffrecognizer_y_mk ""
 #define SOLIBS_pvwmdrm "   "
 #define omx_sharedlibrary_so_name "omx_sharedlibrary"
-#define SOLIBDIRS_opencore_rtsp "/modules/linux_rtsp/core/build/make /nodes/streaming/streamingmanager/build/make_segments /protocols/rtsp_parcom/build/make /protocols/rtsp_client_engine/build_opencore/make /protocols/rtp_payload_parser/build/make /protocols/rtp/build/make /nodes/streaming/jitterbuffernode/build/make /nodes/streaming/medialayernode/build/make /protocols/sdp/parser/build/make /protocols/sdp/common/build/make"
+#define SOLIBDIRS_opencore_rtsp "/modules/linux_rtsp/core/build/make /nodes/streaming/streamingmanager/build/make_segments /protocols/rtsp_parcom/build/make /protocols/rtsp_client_engine/build_opencore/make /protocols/rtp_payload_parser/build/make /protocols/rtp/build/make /nodes/streaming/jitterbuffernode/jitterbuffer/common/build/make /nodes/streaming/jitterbuffernode/jitterbuffer/rtp/build/make /nodes/streaming/jitterbuffernode/build/make /nodes/streaming/medialayernode/build/make /protocols/sdp/parser/build/make /protocols/sdp/common/build/make"
 #define omx_avc_component_imp_m_mk ""
 #define omx_avcenc_component_y_lib ""
 #define rtprtcp_y_mk ""
 #define MODS_pvasfcommon "-lopencore_player -lopencore_common"
 #define pvrtsp_cli_eng_node_m_lib ""
+#define pvmp4reginterface_m_mk "/modules/linux_mp4/node_registry/build/make"
 #define SOLIBDIRS_omx_wmvdec_sharedlibrary " "
-#define pvpvxparser_m_mk ""
+#define omx_m4venc_component_y_mk ""
 #define pvvideoparsernode_m_lib "-lpvvideoparsernode"
 #define LIBDIR_module "/modules"
-#define pventropysrc_y_mk ""
+#define pvpvxparser_m_mk "/fileformats/pvx/parser/build/make"
 #define pvrmffparser_m_mk ""
 #define pv_omx_interface_m_lib "-lpv_omx_interface"
 #define SOLIBS_pvwmdrmplat "n"
@@ -847,8 +868,9 @@
 #define pvsocketnode_y_mk ""
 #define pvmediainputnode_m_mk "/nodes/pvmediainputnode/build/make_pvauthor"
 #define pvrtsp_cli_eng_node_opencore_m_lib "-lpvrtsp_cli_eng_node"
+#define pventropysrc_y_mk ""
 #define mp4recognizer_utility_m_mk "/fileformats/mp4/parser/utils/mp4recognizer/build/make"
-#define SOLIBDIRS_pv "/oscl   /codecs_v2/audio/aac/dec/build/make /codecs_v2/audio/mp3/dec/build/make  /codecs_v2/audio/gsm_amr/amr_nb/dec/build/make /codecs_v2/audio/gsm_amr/amr_nb/enc/build/make /codecs_v2/audio/gsm_amr/amr_nb/common/build/make /codecs_v2/audio/gsm_amr/amr_wb/dec/build/make /codecs_v2/video/avc_h264/dec/build/make /codecs_v2/video/avc_h264/common/build/make /codecs_v2/video/avc_h264/enc/build/make  /codecs_v2/video/m4v_h263/dec/build/make /codecs_v2/video/m4v_h263/enc/build/make  /codecs_v2/audio/aac/dec/util/getactualaacconfig/build/make /codecs_v2/utilities/colorconvert/build/make /codecs_v2/utilities/m4v_config_parser/build/make /codecs_v2/utilities/pv_config_parser/build/make /codecs_v2/omx/omx_h264/build/make_multithreaded /codecs_v2/omx/omx_m4v/build/make_multithreaded  /codecs_v2/omx/omx_aac/build/make_multithreaded /codecs_v2/omx/omx_amr/build/make_multithreaded /codecs_v2/omx/omx_mp3/build/make_multithreaded  /codecs_v2/omx/omx_common/build/make_multithreaded /codecs_v2/omx/omx_queue/build/make /codecs_v2/omx/omx_proxy/build/make /codecs_v2/omx/omx_baseclass/build/make /codecs_v2/omx/omx_mastercore/build/make_multithreaded /codecs_v2/omx/omx_sharedlibrary/interface/build/make /baselibs/threadsafe_callback_ao/build/make /baselibs/media_data_structures/build/make /baselibs/pv_mime_utils/build/make /baselibs/gen_data_structures/build/make /pvmi/pvmf/build/make /pvmi/content_policy_manager/build/make /pvmi/content_policy_manager/plugins/oma1/passthru/build/make /pvmi/media_io/pvmiofileoutput/build/make /fileformats/common/parser/build/make /fileformats/id3parcom/build/make  /fileformats/mp4/parser/build_opencore/make /fileformats/mp4/parser/utils/mp4recognizer/build/make  /fileformats/mp4/composer/build_opencore/make  /nodes/pvmp4ffcomposernode/build_opencore/make      /nodes/pvmediainputnode/build/make_pvauthor /nodes/pvmediaoutputnode/build/make /nodes/pvfileoutputnode/build/make /fileformats/rawgsmamr/parser/build/make /nodes/pvamrffparsernode/build/make  /pvmi/recognizer/plugins/pvamrffrecognizer/build/make /fileformats/rawaac/parser/build/make /nodes/pvaacffparsernode/build/make  /pvmi/recognizer/plugins/pvaacffrecognizer/build/make /fileformats/mp3/parser/build/make  /nodes/pvmp3ffparsernode/build/make /pvmi/recognizer/plugins/pvmp3ffrecognizer/build/make    /nodes/pvomxvideodecnode/build/make /nodes/pvomxaudiodecnode/build/make /nodes/pvomxbasedecnode/build/make        /nodes/pvwavffparsernode/build/make /pvmi/recognizer/plugins/pvwavffrecognizer/build/make     /pvmi/recognizer/build/make /pvmi/media_io/pvmi_mio_fileinput/build/make_pvauthor /pvmi/media_io/pvmi_mio_avi_wav_fileinput/build/make /engines/adapters/player/framemetadatautility/build/make /engines/player/build/make /engines/author/build/make /protocols/systems/3g-324m_pvterminal/build/make/ /engines/2way/build/make /fileformats/avi/parser/build/make /baselibs/thread_messaging/build/make /protocols/rtp_payload_parser/util/build/latmparser/make "
+#define SOLIBDIRS_pv "/oscl   /codecs_v2/audio/aac/dec/build/make /codecs_v2/audio/mp3/dec/build/make  /codecs_v2/audio/gsm_amr/amr_nb/dec/build/make /codecs_v2/audio/gsm_amr/amr_nb/enc/build/make /codecs_v2/audio/gsm_amr/amr_nb/common/build/make /codecs_v2/audio/gsm_amr/amr_wb/dec/build/make /codecs_v2/video/avc_h264/dec/build/make /codecs_v2/video/avc_h264/common/build/make /codecs_v2/video/avc_h264/enc/build/make  /codecs_v2/video/m4v_h263/dec/build/make /codecs_v2/video/m4v_h263/enc/build/make  /codecs_v2/audio/aac/dec/util/getactualaacconfig/build/make /codecs_v2/utilities/colorconvert/build/make /codecs_v2/utilities/m4v_config_parser/build/make /codecs_v2/utilities/pv_config_parser/build/make /codecs_v2/omx/omx_h264/build/make_multithreaded /codecs_v2/omx/omx_m4v/build/make_multithreaded  /codecs_v2/omx/omx_aac/build/make_multithreaded /codecs_v2/omx/omx_amr/build/make_multithreaded /codecs_v2/omx/omx_mp3/build/make_multithreaded  /codecs_v2/omx/omx_common/build/make_multithreaded /codecs_v2/omx/omx_queue/build/make /codecs_v2/omx/omx_proxy/build/make /codecs_v2/omx/omx_baseclass/build/make /codecs_v2/omx/omx_mastercore/build/make_multithreaded /codecs_v2/omx/omx_sharedlibrary/interface/build/make /baselibs/threadsafe_callback_ao/build/make /baselibs/media_data_structures/build/make /baselibs/pv_mime_utils/build/make /baselibs/gen_data_structures/build/make /pvmi/pvmf/build/make /pvmi/content_policy_manager/build/make /pvmi/content_policy_manager/plugins/oma1/passthru/build/make /pvmi/media_io/pvmiofileoutput/build/make /fileformats/common/parser/build/make /fileformats/id3parcom/build/make  /fileformats/mp4/parser/build_opencore/make /fileformats/mp4/parser/utils/mp4recognizer/build/make  /fileformats/mp4/composer/build_opencore/make  /nodes/pvmp4ffcomposernode/build_opencore/make  /fileformats/pvx/parser/build/make /nodes/pvmediainputnode/build/make_pvauthor /nodes/pvmediaoutputnode/build/make /nodes/pvfileoutputnode/build/make /fileformats/rawgsmamr/parser/build/make /nodes/pvamrffparsernode/build/make /pvmi/recognizer/plugins/pvamrffrecognizer/build/make /fileformats/rawaac/parser/build/make /nodes/pvaacffparsernode/build/make  /pvmi/recognizer/plugins/pvaacffrecognizer/build/make /fileformats/mp3/parser/build/make  /nodes/pvmp3ffparsernode/build/make /pvmi/recognizer/plugins/pvmp3ffrecognizer/build/make    /nodes/pvomxvideodecnode/build/make /nodes/pvomxaudiodecnode/build/make /nodes/pvomxbasedecnode/build/make        /nodes/pvwavffparsernode/build/make /pvmi/recognizer/plugins/pvwavffrecognizer/build/make     /pvmi/recognizer/build/make /pvmi/media_io/pvmi_mio_fileinput/build/make_pvauthor /pvmi/media_io/pvmi_mio_avi_wav_fileinput/build/make /engines/adapters/player/framemetadatautility/build/make /engines/player/build/make /engines/author/build/make /protocols/systems/3g-324m_pvterminal/build/make/ /engines/2way/build/make /fileformats/avi/parser/build/make /baselibs/thread_messaging/build/make /protocols/rtp_payload_parser/util/build/latmparser/make  "
 #define USE_DYNAMIC_LOAD_OMX_COMPONENTS 1
 #define LIBDIR_omxenc_static "  "
 #define pv_config_parser_m_mk "/codecs_v2/utilities/pv_config_parser/build/make"
@@ -875,9 +897,8 @@
 #define pvasflocalpbreg_so_name ""
 #define pvdummyinputnode_m_lib "-lpvdummyinputnode"
 #define pvamrencnode_y_mk ""
-#define pvwmadecnode_y_lib ""
 #define pvoma1ffrecognizer_y_mk ""
-#define unit_test_y_mk "/oscl/unit_test/build/make"
+#define pvmp4ffparsernode_y_mk ""
 #define pvgendatastruct_m_mk "/baselibs/gen_data_structures/build/make"
 #define pvmiofileinput_m_lib "-lpvmiofileinput"
 #define realaudio_deinterleaver_y_mk ""
@@ -885,16 +906,15 @@
 #define pvpvr_y_lib ""
 #define omx_queue_m_mk "/codecs_v2/omx/omx_queue/build/make"
 #define omx_avcenc_sharedlibrary_so_name "omx_avcenc_sharedlibrary"
+#define rtppayloadparser_plugins_opencore_rtsp "rfc_2429.mk rfc_3016.mk rfc_3267.mk rfc_3640.mk rfc_3984.mk"
 #define pvdummyinputnode_y_lib ""
 #define omx_m4v_component_y_mk ""
 #define DYNAMIC_LOAD_OMX_AVC_COMPONENT 1
-#define pvwav_y_lib ""
 #define pvgendatastruct_y_mk ""
 #define pvra8decnode_y_lib ""
 #define omx_common_y_lib ""
 #define LIBS_extern_libs_static "  "
 #define pvmiofileoutput_y_lib ""
-#define pvjitterbuffernode_plugins "jb_default.mk"
 #define omx_wma_component_imp_m_mk "n"
 #define pvmfrecognizer_y_mk ""
 #define protocolenginenode_plugins "pe_dl_common.mk pe_ps.mk pe_pdl.mk  "
@@ -902,6 +922,7 @@
 #define gsm_amr_headers_y_mk ""
 #define gsmamrdecnode_m_mk ""
 #define protocolenginenode_y_lib ""
+#define pvjanusplugin_m_mk ""
 #define omx_m4venc_sharedlibrary_so_name "omx_m4venc_sharedlibrary"
 #define pvmedialayernode_plugins_opencore_rtsp "ml_rtsp.mk"
 #define pvaacffparsernode_m_lib "-lpvaacffparsernode"
@@ -910,7 +931,7 @@
 #define MODS_opencore_net_support "-lopencore_common"
 #define cpm_y_mk ""
 #define pvmp3_imp_m_lib ""
-#define LIBDIR_cpm_shared "/pvmi/content_policy_manager/build/make /pvmi/content_policy_manager/plugins/oma1/passthru/build/make   /pvmi/content_policy_manager/plugins/common/build/make "
+#define LIBDIR_cpm_shared "/pvmi/content_policy_manager/build/make /pvmi/content_policy_manager/plugins/oma1/passthru/build/make  /pvmi/content_policy_manager/plugins/common/build/make "
 #define threadsafe_callback_ao_y_mk ""
 #define MODS_pvjanus "-lopencore_player -lopencore_common -lpvwmdrm"
 #define pvstreamingmanagernode_3gpp_y_lib ""
@@ -922,19 +943,21 @@
 #define pv_aac_dec_m_mk "/codecs_v2/audio/aac/dec/build/make"
 #define LIBS_oscl_shared "-losclbase -losclerror -losclmemory -losclproc -losclregcli -losclregserv -losclutil -losclio -lunit_test  -loscllib"
 #define MODS_pvasflocalpb "-lopencore_player -lopencore_common -lpvasfcommon"
-#define pvframemetadatautility_m_lib "-lpvframemetadatautility"
-#define pvamrwbdecoder_m_lib "-lpvamrwbdecoder"
+#define pvasfff_m_mk ""
+#define pvrvdecnode_y_lib ""
 #define omx_mastercore_y_lib ""
 #define pvmfrecognizer_y_lib ""
 #define pvmp3ff_m_mk "/fileformats/mp3/parser/build/make"
 #define rtppayloadparser_m_mk "/protocols/rtp_payload_parser/build/make"
 #define LIBS_engines_shared "-lpvplayer_engine -lpvauthorengine -lpv2wayengine -lpvframemetadatautility"
 #define SOLIBDIRS_pvasfcommon " "
+#define pvwmdrmsysclkinterface_m_lib ""
 #define pvomx_proxy_y_lib ""
 #define pvsdpparser_m_lib ""
-#define omx_wmv_component_imp_m_mk "n"
+#define omx_mp3dec_sharedlibrary_so_name "omx_mp3dec_sharedlibrary"
 #define pvasfstreaminginterface_m_lib ""
 #define oscl_y_lib ""
+#define MODS_opencore_author "-lopencore_common"
 #define pvwmvdecnode_m_lib ""
 #define rtprtcp_m_mk "/protocols/rtp/build/make"
 #define pv_http_parcom_m_mk "/protocols/http_parcom/build/make"
@@ -945,7 +968,7 @@
 #define opencore_net_support_so_name "opencore_net_support"
 #define MODS_omx_avcdec_sharedlibrary "-lomx_sharedlibrary -lopencore_common"
 #define aacdecnode_y_lib ""
-#define LIBS_nodes_static "                                                 "
+#define LIBS_nodes_static "                                                   "
 #define pvcommsionode_y_lib ""
 #define pvasfffrecognizer_m_mk ""
 #define pvlatmpayloadparser_y_lib ""
@@ -968,21 +991,23 @@
 #define rfc_3640_mk "rfc_3640.mk"
 #define pvavifileparser_y_lib ""
 #define pvrtsp_cli_eng_node_3gpp_y_mk ""
-#define pv324m_y_lib ""
-#define pvasflocalpbreginterface_m_lib ""
+#define pvfileoutputnode_m_lib "-lpvfileoutputnode"
 #define MODS_omx_sharedlibrary "-lopencore_common"
 #define pvvideodecnode_y_mk ""
 #define pvsocketnode_y_lib ""
+#define unit_test_y_mk "/oscl/unit_test/build/make"
 #define pvamrffparsernode_m_lib "-lpvamrffparsernode"
 #define pvomxencnode_m_mk "/nodes/pvomxencnode/build/make"
 #define SOLIBDIRS_opencore_mp4local "/modules/linux_mp4/core/build/make  /nodes/pvmp4ffparsernode/build_opencore/make"
 #define omx_m4venc_component_m_lib "-lomx_m4venc_component_lib"
 #define pvmp4ffcomposernodeopencore_m_lib "-lpvmp4ffcomposernode"
+#define pvmp4ffcomposeropencore_y_lib ""
 #define rfc_3267_mk "rfc_3267.mk"
-#define getactualaacconfig_y_mk ""
+#define LIBDIR_omxdec_shared "/codecs_v2/omx/omx_h264/build/make_multithreaded /codecs_v2/omx/omx_m4v/build/make_multithreaded  /codecs_v2/omx/omx_aac/build/make_multithreaded /codecs_v2/omx/omx_amr/build/make_multithreaded /codecs_v2/omx/omx_mp3/build/make_multithreaded "
 #define LIBS_media_io_shared "-lpvmiofileoutput -lpvmiofileinput -lpvmioaviwavfileinput -lpvmio_comm_loopback"
-#define LIBS_nodes_shared "-lpvfileoutputnode -lpvmediaoutputnode -lpvsocketnode  -lprotocolenginenode   -lpvwavffparsernode   -lpvomxencnode -lpvomxbasedecnode -lpvomxaudiodecnode -lpvomxvideodecnode  -lpvaacffparsernode  -lpvamrffparsernode   -lpvmp3ffparsernode  -lpvmp4ffparsernode      -lpvmediainputnode  -lpvmp4ffcomposernode     -lpvdownloadmanagernode   -lpvstreamingmanagernode   -lpvrtspinterface -lpvrtspreginterface -lpvmedialayernode  -lpvjitterbuffernode  -lpvcommsionode -lpvclientserversocketnode -lpvloopbacknode -lpvvideoparsernode -lpvdummyinputnode -lpvdummyoutputnode "
+#define LIBS_nodes_shared "-lpvfileoutputnode -lpvmediaoutputnode -lpvsocketnode  -lprotocolenginenode   -lpvwavffparsernode   -lpvomxencnode -lpvomxbasedecnode -lpvomxaudiodecnode -lpvomxvideodecnode  -lpvaacffparsernode  -lpvamrffparsernode   -lpvmp3ffparsernode  -lpvmp4ffparsernode      -lpvmediainputnode  -lpvmp4ffcomposernode     -lpvdownloadmanagernode   -lpvstreamingmanagernode   -lpvrtspinterface -lpvrtspreginterface -lpvmedialayernode  -lpvjitterbuffer -lpvjitterbufferrtp  -lpvjitterbuffernode -lpvcommsionode -lpvclientserversocketnode -lpvloopbacknode -lpvvideoparsernode -lpvdummyinputnode -lpvdummyoutputnode "
 #define LIBS_audio_shared "  -lpv_aac_dec -lpv_amr_nb_common_lib -lpvamrwbdecoder -lpvdecoder_gsmamr -lpvmp3  -lpvencoder_gsmamr"
+#define LIBDIR_extern_libs_shared "  "
 #define pvloopbacknode_m_mk "/nodes/pvloopbacknode/build/make"
 #define pvvideoparsernode_y_lib ""
 #define pvavch264enc_m_mk "/codecs_v2/video/avc_h264/enc/build/make"
@@ -1000,7 +1025,6 @@
 #define m4v_config_m_lib "-lm4v_config"
 #define pv_rtsp_parcom_m_lib "-lpv_rtsp_parcom"
 #define omx_aac_component_y_mk ""
-#define protocolenginenode_plugins_pvdownload "pe_ps.mk pe_pdl.mk pe_dl_common.mk"
 #define pvaacffrecognizer_m_lib "-lpvaacffrecognizer"
 #define packetsources_default_y_mk ""
 #define rdt_parser_m_lib ""
@@ -1021,30 +1045,28 @@
 #define SOLIBS_pvasfcommon " "
 #define cpm_headers_m_mk "/pvmi/content_policy_manager/plugins/common/build/make"
 #define opencore_mp4localreg_so_name "opencore_mp4localreg"
+#define SOLIBS_pvwmdrmsysclk "n"
 #define pvmp4ffrecognizer_m_mk "/pvmi/recognizer/plugins/pvmp4ffrecognizer/build/make"
 #define LIBS_cpm_static "   "
 #define SOLIBS_omx_m4vdec_sharedlibrary "-lomx_m4v_component_lib -lpvmp4decoder"
-#define pvid3parcom_m_lib "-lpvid3parcom"
-#define pvstreamingmanagernode_segments_m_mk "/nodes/streaming/streamingmanager/build/make_segments"
 #define pvrtsp_cli_eng_node_y_mk ""
 #define omx_avcenc_component_imp_m_lib ""
 #define pvmp4ffcomposernodeopencore_y_mk ""
 #define DYNAMIC_LOAD_OMX_H263ENC_COMPONENT 1
 #define pvasflocalpb_so_name ""
 #define pvsocketnode_m_lib "-lpvsocketnode"
-#define SOLIBDIRS_opencore_common "/oscl  /codecs_v2/omx/omx_mastercore/build/make_multithreaded              /codecs_v2/audio/gsm_amr/common/dec/build/make /codecs_v2/video/avc_h264/common/build/make /codecs_v2/audio/gsm_amr/amr_nb/common/build/make   /fileformats/rawgsmamr/parser/build/make  /codecs_v2/audio/aac/dec/util/getactualaacconfig/build/make /codecs_v2/utilities/m4v_config_parser/build/make /codecs_v2/utilities/pv_config_parser/build/make /codecs_v2/utilities/colorconvert/build/make /baselibs/threadsafe_callback_ao/build/make /baselibs/media_data_structures/build/make /baselibs/pv_mime_utils/build/make /baselibs/gen_data_structures/build/make /pvmi/pvmf/build/make /nodes/pvfileoutputnode/build/make /nodes/pvmediainputnode/build/make_pvauthor /nodes/pvomxencnode/build/make /pvmi/media_io/pvmi_mio_fileinput/build/make_pvauthor /pvmi/media_io/pvmi_mio_avi_wav_fileinput/build/make /fileformats/avi/parser/build/make /baselibs/thread_messaging/build/make /pvmi/media_io/pvmiofileoutput/build/make /nodes/pvmediaoutputnode/build/make /nodes/pvomxvideodecnode/build/make /nodes/pvomxaudiodecnode/build/make /nodes/pvomxbasedecnode/build/make /protocols/rtp_payload_parser/util/build/latmparser/make /fileformats/wav/parser/build/make /fileformats/common/parser/build/make /nodes/common/build/make /engines/common/build/make /pvmi/content_policy_manager/plugins/common/build/make"
-#define SOLIBS_opencore_common "-losclbase -losclerror -losclmemory -losclproc -losclregcli -losclregserv -losclutil -losclio -lunit_test  -loscllib -lomx_mastercore_lib              -lpv_avc_common_lib -lpv_amr_nb_common_lib   -lpvgsmamrparser  -lgetactualaacconfig -lm4v_config -lpv_config_parser -lcolorconvert -lthreadsafe_callback_ao -lpvmediadatastruct -lpvmimeutils -lpvgendatastruct -lpvmf -lpvfileoutputnode -lpvmediainputnode -lpvomxencnode -lpvmiofileinput -lpvmioaviwavfileinput -lpvavifileparser -lpvthreadmessaging -lpvmiofileoutput -lpvmediaoutputnode -lpvomxvideodecnode -lpvomxaudiodecnode -lpvomxbasedecnode -lpvlatmpayloadparser -lpvwav -lpvfileparserutils"
+#define SOLIBDIRS_opencore_common "/oscl  /codecs_v2/omx/omx_mastercore/build/make_multithreaded             /codecs_v2/audio/gsm_amr/common/dec/build/make /codecs_v2/video/avc_h264/common/build/make /codecs_v2/audio/gsm_amr/amr_nb/common/build/make /fileformats/rawgsmamr/parser/build/make /codecs_v2/audio/aac/dec/util/getactualaacconfig/build/make /codecs_v2/utilities/m4v_config_parser/build/make /codecs_v2/utilities/pv_config_parser/build/make /codecs_v2/utilities/colorconvert/build/make /baselibs/threadsafe_callback_ao/build/make /baselibs/media_data_structures/build/make /baselibs/pv_mime_utils/build/make /baselibs/gen_data_structures/build/make /pvmi/pvmf/build/make /nodes/pvfileoutputnode/build/make /nodes/pvmediainputnode/build/make_pvauthor /nodes/pvomxencnode/build/make /pvmi/media_io/pvmi_mio_fileinput/build/make_pvauthor /pvmi/media_io/pvmi_mio_avi_wav_fileinput/build/make /fileformats/avi/parser/build/make /baselibs/thread_messaging/build/make /pvmi/media_io/pvmiofileoutput/build/make /nodes/pvmediaoutputnode/build/make /nodes/pvomxvideodecnode/build/make /nodes/pvomxaudiodecnode/build/make /nodes/pvomxbasedecnode/build/make /protocols/rtp_payload_parser/util/build/latmparser/make /fileformats/wav/parser/build/make /fileformats/common/parser/build/make /nodes/common/build/make /engines/common/build/make /pvmi/content_policy_manager/plugins/common/build/make"
+#define SOLIBS_opencore_common "-losclbase -losclerror -losclmemory -losclproc -losclregcli -losclregserv -losclutil -losclio -lunit_test  -loscllib -lomx_mastercore_lib             -lpv_avc_common_lib -lpv_amr_nb_common_lib -lpvgsmamrparser -lgetactualaacconfig -lm4v_config -lpv_config_parser -lcolorconvert -lthreadsafe_callback_ao -lpvmediadatastruct -lpvmimeutils -lpvgendatastruct -lpvmf -lpvfileoutputnode -lpvmediainputnode -lpvomxencnode -lpvmiofileinput -lpvmioaviwavfileinput -lpvavifileparser -lpvthreadmessaging -lpvmiofileoutput -lpvmediaoutputnode -lpvomxvideodecnode -lpvomxaudiodecnode -lpvomxbasedecnode -lpvlatmpayloadparser -lpvwav -lpvfileparserutils"
 #define pvmp4decoder_y_lib ""
 #define rtprtcp_m_lib "-lrtprtcp"
 #define pvmimeutils_m_lib "-lpvmimeutils"
-#define pvasfff_m_mk ""
+#define MODS_omx_mp3dec_sharedlibrary "-lomx_sharedlibrary -lopencore_common"
 #define pvgsmamrparser_m_mk "/fileformats/rawgsmamr/parser/build/make"
 #define pvframemetadatautility_y_mk ""
 #define pvmtp_engine_y_lib ""
 #define omx_mp3_component_y_lib ""
 #define rvdecoder_m_mk ""
 #define pvmedialayernode_plugins "ml_default.mk"
-#define pvjitterbuffernode_plugins_opencore_rtsp "jb_rtsp.mk"
 #define omx_mastercore_y_mk ""
 #define pvmp4ffcomposer_m_mk ""
 #define pvasflocalpbreginterface_m_mk ""
@@ -1059,6 +1081,7 @@
 #define pvavcencnode_y_mk ""
 #define optimized_bcast_ps_mk ""
 #define pvmtp_engine_m_mk ""
+#define pvjitterbufferrtp_y_lib ""
 #define pvstreamingmanagernode_3gpp_m_lib ""
 #define pvplayer_engine_m_mk "/engines/player/build/make"
 #define LIBDIR_engines_static "    "
@@ -1073,9 +1096,9 @@
 #define REGISTER_OMX_AVC_COMPONENT 1
 #define pvaacffparsernode_y_lib ""
 #define SOLIBDIRS_omx_amrenc_sharedlibrary "/codecs_v2/omx/omx_amrenc/build/make_multithreaded /codecs_v2/audio/gsm_amr/amr_nb/enc/build/make"
-#define LIBS_tools_v2_shared "-lpvrtspinterface -lpvrtspreginterface   -lpvdownloadinterface -lpvdownloadreginterface -lpvmp4interface -lpvmp4reginterface  "
-#define SOLIBS_pvasfstreaming " -lpvstreamingmanagernode -lpvjitterbuffernode -lpvmedialayernode -lrtppayloadparser -lrtprtcp -lprotocolenginenode"
-#define LIBS_pvmi_shared "-lcpm -lpassthru_oma1    -lpvmiofileoutput -lpvmiofileinput -lpvmioaviwavfileinput -lpvmio_comm_loopback -lpvmfrecognizer -lpvaacffrecognizer -lpvamrffrecognizer   -lpvmp3ffrecognizer -lpvmp4ffrecognizer -lpvwavffrecognizer    -lpvmf  "
+#define LIBS_tools_v2_shared "-lpvrtspinterface -lpvrtspreginterface   -lpvdownloadinterface -lpvdownloadreginterface -lpvmp4interface -lpvmp4reginterface      "
+#define SOLIBS_pvasfstreaming " -lpvstreamingmanagernode -lpvjitterbuffer  -lpvjitterbuffernode -lpvmedialayernode -lrtppayloadparser -lrtprtcp -lprotocolenginenode"
+#define LIBS_pvmi_shared "-lcpm -lpassthru_oma1   -lpvmiofileoutput -lpvmiofileinput -lpvmioaviwavfileinput -lpvmio_comm_loopback -lpvmfrecognizer -lpvaacffrecognizer -lpvamrffrecognizer   -lpvmp3ffrecognizer -lpvmp4ffrecognizer -lpvwavffrecognizer    -lpvmf  "
 #define pvmioaviwavfileinput_y_mk ""
 #define omx_mp3_component_imp_m_mk ""
 #define pvm4vencoder_imp_m_mk ""
@@ -1103,6 +1126,7 @@
 #define getactualaacconfig_m_lib "-lgetactualaacconfig"
 #define sdp_parser_mksegment_default ""
 #define threadsafe_callback_ao_m_mk "/baselibs/threadsafe_callback_ao/build/make"
+#define pvwmdrmdevinterface_m_lib ""
 #define pvasfstreamingreginterface_m_mk ""
 #define SOLIBDIRS_opencore_download "/nodes/pvprotocolenginenode/build/make_segments /nodes/pvdownloadmanagernode/build/make /modules/linux_download/core/build/make"
 #define mp3decnode_m_lib ""
@@ -1112,10 +1136,10 @@
 #define omx_baseclass_m_mk "/codecs_v2/omx/omx_baseclass/build/make"
 #define LIBDIR_oscl_shared "/oscl "
 #define pvencoder_gsmamr_imp_m_mk ""
+#define pvrmffrecognizer_m_mk ""
 #define pvra8decoder_y_lib ""
 #define nodes_common_headers_m_mk "/nodes/common/build/make"
 #define LIBDIR_recognizer_shared "/pvmi/recognizer/build/make /pvmi/recognizer/plugins/pvaacffrecognizer/build/make /pvmi/recognizer/plugins/pvamrffrecognizer/build/make   /pvmi/recognizer/plugins/pvmp3ffrecognizer/build/make /pvmi/recognizer/plugins/pvmp4ffrecognizer/build/make /pvmi/recognizer/plugins/pvwavffrecognizer/build/make  "
-#define MODS_opencore_author "-lopencore_common"
 #define omx_wmv_component_m_lib ""
 #define MODS_pvasflocalpbreg "-lopencore_common -lpvasfcommon"
 #define pvrmffparsernode_m_lib ""
@@ -1134,6 +1158,7 @@
 #define pvmedialayernode_y_mk ""
 #define pvoma1ffrecognizer_y_lib ""
 #define pvrtsp_cli_eng_node_3gpp_m_mk ""
+#define shoutcast_support_flag ""
 #define protocolenginenode_plugins_pvasfstreaming "pe_http.mk"
 #define pvdbmanager_y_mk ""
 #define pv_amr_nb_common_imp_lib_m_mk ""
@@ -1143,13 +1168,13 @@
 #define opencore_common_so_name "opencore_common"
 #define pvmp4ffcomposernodeopencore_m_mk "/nodes/pvmp4ffcomposernode/build_opencore/make"
 #define pvrmff_y_lib ""
-#define omx_mp3_component_y_mk ""
+#define pvjitterbufferrtp_y_mk ""
 #define SOLIBS_opencore_2way "-lpv2wayengine -lpv324m -lpvvideoparsernode -lpvcommsionode -lpvmio_comm_loopback -lpvgeneraltools "
-#define SOLIBS_opencore_player "        -lcpm -lpassthru_oma1  -lpvid3parcom -lpvamrffparsernode -lpvamrffrecognizer -lpvmp3ff  -lpvmp3ffparsernode -lpvmp3ffrecognizer  -lpvmp4ff -lmp4recognizer_utility -lpvaacparser -lpvaacffparsernode  -lpvaacffrecognizer -lpvwavffparsernode -lpvwavffrecognizer           -lpvmfrecognizer   -lpvframemetadatautility -lpvplayer_engine"
+#define SOLIBS_opencore_player "        -lcpm -lpassthru_oma1 -lpvpvxparser -lpvid3parcom -lpvamrffparsernode -lpvamrffrecognizer -lpvmp3ff  -lpvmp3ffparsernode -lpvmp3ffrecognizer  -lpvmp4ff -lmp4recognizer_utility -lpvaacparser -lpvaacffparsernode  -lpvaacffrecognizer -lpvwavffparsernode -lpvwavffrecognizer           -lpvmfrecognizer   -lpvframemetadatautility -lpvplayer_engine"
 #define MODS_opencore_mp4localreg "-lopencore_player -lopencore_common"
 #define rdt_parser_y_mk ""
 #define LIBDIR_packetsources_static "n"
-#define SOLIBDIRS_omx_amrdec_sharedlibrary "/codecs_v2/omx/omx_amr/build/make_multithreaded /codecs_v2/audio/gsm_amr/amr_nb/dec/build/make /codecs_v2/audio/gsm_amr/amr_wb/dec/build/make"
+#define pvasflocalpbreginterface_m_lib ""
 #define pvjanusplugininterface_m_mk ""
 #define pvmedialayernode_plugins_pvasfstreaming "ml_asf.mk"
 #define pv_rtsp_parcom_y_mk ""
@@ -1157,8 +1182,6 @@
 #define pvmiofileoutput_m_mk "/pvmi/media_io/pvmiofileoutput/build/make"
 #define aacdecnode_m_lib ""
 #define pvcrypto_m_mk ""
-#define rtppayloadparser_plugins_pvrtsp "rfc_2429.mk rfc_3016.mk rfc_3267.mk rfc_3640.mk rfc_3984.mk"
-#define DYNAMIC_LOAD_OMX_AVCENC_COMPONENT 1
 #define pvvideoencnode_m_lib ""
 #define USE_OMX_ENC_NODE 1
 #define pvamrwbdecoder_y_mk ""
@@ -1171,38 +1194,41 @@
 #define colorconvert_y_lib ""
 #define pvm4vencoder_m_lib "-lpvm4vencoder"
 #define pv_aac_dec_y_lib ""
-#define omx_mp3dec_sharedlibrary_so_name "omx_mp3dec_sharedlibrary"
+#define pvjitterbufferrtp_m_mk "/nodes/streaming/jitterbuffernode/jitterbuffer/rtp/build/make"
 #define omx_wma_component_m_mk ""
 #define SOLIBS_pvasflocalpbreg " "
 #define opencore_2way_so_name "opencore_2way"
 #define pv_http_parcom_y_mk ""
 #define pvgsmamrparser_y_lib ""
-#define pvfileoutputnode_m_lib "-lpvfileoutputnode"
+#define pvjitterbuffercommon_y_mk ""
+#define pvwmadecnode_y_lib ""
 #define pvmedialayernode_opencore_m_mk ""
 #define omx_wmvdec_sharedlibrary_so_name ""
 #define opencore_rtspreg_so_name "opencore_rtspreg"
 #define rfc_2429_mk "rfc_2429.mk"
 #define SOLIBDIRS_opencore_net_support "/nodes/pvsocketnode/build/make /protocols/http_parcom/build/make"
-#define LIBDIR_audio_static "         "
+#define pvjitterbuffercommon_m_mk "/nodes/streaming/jitterbuffernode/jitterbuffer/common/build/make"
 #define pvoma1ffrecognizer_m_lib ""
 #define wmvdecoder_m_mk ""
 #define rtprtcp_y_lib ""
 #define rfc_3984_mk "rfc_3984.mk"
-#define LIBDIR_shared "/oscl     /baselibs/gen_data_structures/build/make /baselibs/media_data_structures/build/make /baselibs/pv_mime_utils/build/make /baselibs/threadsafe_callback_ao/build/make /baselibs/thread_messaging/build/make /codecs_v2/omx/omx_h264/build/make_multithreaded /codecs_v2/omx/omx_m4v/build/make_multithreaded  /codecs_v2/omx/omx_aac/build/make_multithreaded /codecs_v2/omx/omx_amr/build/make_multithreaded /codecs_v2/omx/omx_mp3/build/make_multithreaded  /codecs_v2/omx/omx_amrenc/build/make_multithreaded /codecs_v2/omx/omx_m4venc/build/make_multithreaded /codecs_v2/omx/omx_h264enc/build/make_multithreaded /codecs_v2/omx/omx_common/build/make_multithreaded /codecs_v2/omx/omx_queue/build/make /codecs_v2/omx/omx_proxy/build/make /codecs_v2/omx/omx_baseclass/build/make /codecs_v2/omx/omx_mastercore/build/make_multithreaded /codecs_v2/omx/omx_sharedlibrary/interface/build/make   /codecs_v2/audio/aac/dec/build/make /codecs_v2/audio/gsm_amr/amr_nb/common/build/make /codecs_v2/audio/gsm_amr/amr_wb/dec/build/make /codecs_v2/audio/gsm_amr/amr_nb/dec/build/make /codecs_v2/audio/mp3/dec/build/make  /codecs_v2/audio/gsm_amr/common/dec/build/make /codecs_v2/audio/gsm_amr/amr_nb/enc/build/make /codecs_v2/video/avc_h264/common/build/make /codecs_v2/video/avc_h264/dec/build/make  /codecs_v2/video/m4v_h263/dec/build/make  /codecs_v2/video/m4v_h263/enc/build/make /codecs_v2/video/avc_h264/enc/build/make /codecs_v2/utilities/m4v_config_parser/build/make /codecs_v2/utilities/pv_config_parser/build/make /codecs_v2/utilities/colorconvert/build/make /fileformats/common/parser/build/make /fileformats/id3parcom/build/make  /fileformats/wav/parser/build/make  /fileformats/avi/parser/build/make  /fileformats/mp3/parser/build/make /fileformats/rawaac/parser/build/make /fileformats/rawgsmamr/parser/build/make    /fileformats/mp4/parser/utils/mp4recognizer/build/make /fileformats/mp4/parser/build_opencore/make  /fileformats/mp4/composer/build_opencore/make    /protocols/http_parcom/build/make /protocols/rtp_payload_parser/util/build/latmparser/make /protocols/sdp/parser/build/make /protocols/sdp/common/build/make  /protocols/rtsp_parcom/build/make   /protocols/rtsp_client_engine/build_opencore/make /protocols/rtp_payload_parser/build/make /protocols/rtp/build/make /protocols/systems/3g-324m_pvterminal/build/make/ /protocols/systems/common/build/make/ /protocols/systems/tools/general/build/make /pvmi/content_policy_manager/build/make /pvmi/content_policy_manager/plugins/oma1/passthru/build/make   /pvmi/content_policy_manager/plugins/common/build/make  /pvmi/media_io/pvmiofileoutput/build/make /pvmi/media_io/pvmi_mio_fileinput/build/make_pvauthor /pvmi/media_io/pvmi_mio_avi_wav_fileinput/build/make /pvmi/media_io/pvmio_comm_loopback/build/make /pvmi/recognizer/build/make /pvmi/recognizer/plugins/pvaacffrecognizer/build/make /pvmi/recognizer/plugins/pvamrffrecognizer/build/make   /pvmi/recognizer/plugins/pvmp3ffrecognizer/build/make /pvmi/recognizer/plugins/pvmp4ffrecognizer/build/make /pvmi/recognizer/plugins/pvwavffrecognizer/build/make    /pvmi/pvmf/build/make        /nodes/pvfileoutputnode/build/make /nodes/pvmediaoutputnode/build/make /nodes/pvsocketnode/build/make  /nodes/pvprotocolenginenode/build/make_segments   /nodes/pvwavffparsernode/build/make   /nodes/pvomxencnode/build/make /nodes/pvomxbasedecnode/build/make /nodes/pvomxaudiodecnode/build/make /nodes/pvomxvideodecnode/build/make  /nodes/pvaacffparsernode/build/make  /nodes/pvamrffparsernode/build/make   /nodes/pvmp3ffparsernode/build/make  /nodes/pvmp4ffparsernode/build_opencore/make     /nodes/common/build/make  /nodes/pvmediainputnode/build/make_pvauthor  /nodes/pvmp4ffcomposernode/build_opencore/make     /nodes/pvdownloadmanagernode/build/make   /nodes/streaming/streamingmanager/build/make_segments   /modules/linux_rtsp/core/build/make /modules/linux_rtsp/node_registry/build/make /nodes/streaming/medialayernode/build/make  /nodes/streaming/jitterbuffernode/build/make  /nodes/pvcommsionode/build/make /nodes/pvclientserversocketnode/build/make /nodes/pvloopbacknode/build/make /nodes/pvvideoparsernode/build/make /nodes/pvdummyinputnode/build/make /nodes/pvdummyoutputnode/build/make  /engines/player/build/make /engines/author/build/make /engines/2way/build/make /engines/common/build/make /engines/adapters/player/framemetadatautility/build/make /modules/linux_rtsp/core/build/make /modules/linux_rtsp/node_registry/build/make   /modules/linux_download/core/build/make /modules/linux_download/node_registry/build/make /modules/linux_mp4/core/build/make /modules/linux_mp4/node_registry/build/make  "
+#define LIBDIR_shared "/oscl     /baselibs/gen_data_structures/build/make /baselibs/media_data_structures/build/make /baselibs/pv_mime_utils/build/make /baselibs/threadsafe_callback_ao/build/make /baselibs/thread_messaging/build/make /codecs_v2/omx/omx_h264/build/make_multithreaded /codecs_v2/omx/omx_m4v/build/make_multithreaded  /codecs_v2/omx/omx_aac/build/make_multithreaded /codecs_v2/omx/omx_amr/build/make_multithreaded /codecs_v2/omx/omx_mp3/build/make_multithreaded  /codecs_v2/omx/omx_amrenc/build/make_multithreaded /codecs_v2/omx/omx_m4venc/build/make_multithreaded /codecs_v2/omx/omx_h264enc/build/make_multithreaded /codecs_v2/omx/omx_common/build/make_multithreaded /codecs_v2/omx/omx_queue/build/make /codecs_v2/omx/omx_proxy/build/make /codecs_v2/omx/omx_baseclass/build/make /codecs_v2/omx/omx_mastercore/build/make_multithreaded /codecs_v2/omx/omx_sharedlibrary/interface/build/make   /codecs_v2/audio/aac/dec/build/make /codecs_v2/audio/gsm_amr/amr_nb/common/build/make /codecs_v2/audio/gsm_amr/amr_wb/dec/build/make /codecs_v2/audio/gsm_amr/amr_nb/dec/build/make /codecs_v2/audio/mp3/dec/build/make  /codecs_v2/audio/gsm_amr/common/dec/build/make /codecs_v2/audio/gsm_amr/amr_nb/enc/build/make /codecs_v2/video/avc_h264/common/build/make /codecs_v2/video/avc_h264/dec/build/make  /codecs_v2/video/m4v_h263/dec/build/make  /codecs_v2/video/m4v_h263/enc/build/make /codecs_v2/video/avc_h264/enc/build/make /codecs_v2/utilities/m4v_config_parser/build/make /codecs_v2/utilities/pv_config_parser/build/make /codecs_v2/utilities/colorconvert/build/make /fileformats/common/parser/build/make /fileformats/id3parcom/build/make /fileformats/pvx/parser/build/make /fileformats/wav/parser/build/make  /fileformats/avi/parser/build/make  /fileformats/mp3/parser/build/make /fileformats/rawaac/parser/build/make /fileformats/rawgsmamr/parser/build/make    /fileformats/mp4/parser/utils/mp4recognizer/build/make /fileformats/mp4/parser/build_opencore/make  /fileformats/mp4/composer/build_opencore/make     /protocols/http_parcom/build/make /protocols/rtp_payload_parser/util/build/latmparser/make /protocols/sdp/parser/build/make /protocols/sdp/common/build/make  /protocols/rtsp_parcom/build/make   /protocols/rtsp_client_engine/build_opencore/make /protocols/rtp_payload_parser/build/make /protocols/rtp/build/make /protocols/systems/3g-324m_pvterminal/build/make/ /protocols/systems/common/build/make/ /protocols/systems/tools/general/build/make /pvmi/content_policy_manager/build/make /pvmi/content_policy_manager/plugins/oma1/passthru/build/make  /pvmi/content_policy_manager/plugins/common/build/make  /pvmi/media_io/pvmiofileoutput/build/make /pvmi/media_io/pvmi_mio_fileinput/build/make_pvauthor /pvmi/media_io/pvmi_mio_avi_wav_fileinput/build/make /pvmi/media_io/pvmio_comm_loopback/build/make /pvmi/recognizer/build/make /pvmi/recognizer/plugins/pvaacffrecognizer/build/make /pvmi/recognizer/plugins/pvamrffrecognizer/build/make   /pvmi/recognizer/plugins/pvmp3ffrecognizer/build/make /pvmi/recognizer/plugins/pvmp4ffrecognizer/build/make /pvmi/recognizer/plugins/pvwavffrecognizer/build/make    /pvmi/pvmf/build/make      /nodes/pvfileoutputnode/build/make /nodes/pvmediaoutputnode/build/make /nodes/pvsocketnode/build/make  /nodes/pvprotocolenginenode/build/make_segments   /nodes/pvwavffparsernode/build/make   /nodes/pvomxencnode/build/make /nodes/pvomxbasedecnode/build/make /nodes/pvomxaudiodecnode/build/make /nodes/pvomxvideodecnode/build/make  /nodes/pvaacffparsernode/build/make  /nodes/pvamrffparsernode/build/make   /nodes/pvmp3ffparsernode/build/make  /nodes/pvmp4ffparsernode/build_opencore/make     /nodes/common/build/make   /nodes/pvmediainputnode/build/make_pvauthor  /nodes/pvmp4ffcomposernode/build_opencore/make    /nodes/pvdownloadmanagernode/build/make   /nodes/streaming/streamingmanager/build/make_segments   /modules/linux_rtsp/core/build/make /modules/linux_rtsp/node_registry/build/make /nodes/streaming/medialayernode/build/make  /nodes/streaming/jitterbuffernode/jitterbuffer/common/build/make /nodes/streaming/jitterbuffernode/jitterbuffer/rtp/build/make  /nodes/streaming/jitterbuffernode/build/make /nodes/pvcommsionode/build/make /nodes/pvclientserversocketnode/build/make /nodes/pvloopbacknode/build/make /nodes/pvvideoparsernode/build/make /nodes/pvdummyinputnode/build/make /nodes/pvdummyoutputnode/build/make  /engines/player/build/make /engines/author/build/make /engines/2way/build/make /engines/common/build/make /engines/adapters/player/framemetadatautility/build/make /modules/linux_rtsp/core/build/make /modules/linux_rtsp/node_registry/build/make   /modules/linux_download/core/build/make /modules/linux_download/node_registry/build/make /modules/linux_mp4/core/build/make /modules/linux_mp4/node_registry/build/make      "
 #define pdl_support_mk "pe_pdl.mk"
 #define wmadecoder_m_mk ""
 #define omx_aacdec_sharedlibrary_so_name "omx_aacdec_sharedlibrary"
 #define pv_so_name ""
 #define asf_payload_mk ""
 #define pvmioaviwavfileinput_m_lib "-lpvmioaviwavfileinput"
+#define SOLIBDIRS_pvwmdrmsysclk "n"
 #define protocolenginenode_segments_y_mk ""
 #define pvamrencnode_m_lib ""
 #define pvrvdecnode_y_mk ""
 #define pvmp3ffrecognizer_m_mk "/pvmi/recognizer/plugins/pvmp3ffrecognizer/build/make"
+#define MODS_pvwmdrmsysclk "-lopencore_player -lopencore_common"
 #define LIBDIR_omxjoint_shared "/codecs_v2/omx/omx_common/build/make_multithreaded /codecs_v2/omx/omx_queue/build/make /codecs_v2/omx/omx_proxy/build/make /codecs_v2/omx/omx_baseclass/build/make /codecs_v2/omx/omx_mastercore/build/make_multithreaded /codecs_v2/omx/omx_sharedlibrary/interface/build/make"
 #define pv324m_m_mk "/protocols/systems/3g-324m_pvterminal/build/make/"
 #define pvavch264enc_imp_m_mk ""
-#define LIBS_shared "-losclbase -losclerror -losclmemory -losclproc -losclregcli -losclregserv -losclutil -losclio -lunit_test  -loscllib    -lpvgendatastruct -lpvmediadatastruct -lpvmimeutils -lthreadsafe_callback_ao -lpvthreadmessaging -lomx_avc_component_lib -lomx_m4v_component_lib  -lomx_aac_component_lib -lomx_amr_component_lib -lomx_mp3_component_lib  -lomx_amrenc_component_lib -lomx_m4venc_component_lib -lomx_avcenc_component_lib -lomx_common_lib -lomx_queue_lib -lpvomx_proxy_lib -lomx_baseclass_lib -lomx_mastercore_lib -lpv_omx_interface   -lpv_aac_dec -lpv_amr_nb_common_lib -lpvamrwbdecoder -lpvdecoder_gsmamr -lpvmp3  -lpvencoder_gsmamr -lpv_avc_common_lib -lpvavcdecoder  -lpvmp4decoder  -lpvm4vencoder -lpvavch264enc -lm4v_config -lpv_config_parser -lcolorconvert -lpvfileparserutils -lpvid3parcom  -lpvwav  -lpvavifileparser  -lpvmp3ff -lpvaacparser -lpvgsmamrparser   -lmp4recognizer_utility -lpvmp4ff  -lpvmp4ffcomposer    -lpv_http_parcom -lpvlatmpayloadparser  -lpvsdpparser  -lpv_rtsp_parcom   -lpvrtsp_cli_eng_node -lrtppayloadparser -lrtprtcp -lpv324m -lpvgeneraltools -lcpm -lpassthru_oma1    -lpvmiofileoutput -lpvmiofileinput -lpvmioaviwavfileinput -lpvmio_comm_loopback -lpvmfrecognizer -lpvaacffrecognizer -lpvamrffrecognizer   -lpvmp3ffrecognizer -lpvmp4ffrecognizer -lpvwavffrecognizer    -lpvmf        -lpvfileoutputnode -lpvmediaoutputnode -lpvsocketnode  -lprotocolenginenode   -lpvwavffparsernode   -lpvomxencnode -lpvomxbasedecnode -lpvomxaudiodecnode -lpvomxvideodecnode  -lpvaacffparsernode  -lpvamrffparsernode   -lpvmp3ffparsernode  -lpvmp4ffparsernode      -lpvmediainputnode  -lpvmp4ffcomposernode     -lpvdownloadmanagernode   -lpvstreamingmanagernode   -lpvrtspinterface -lpvrtspreginterface -lpvmedialayernode  -lpvjitterbuffernode  -lpvcommsionode -lpvclientserversocketnode -lpvloopbacknode -lpvvideoparsernode -lpvdummyinputnode -lpvdummyoutputnode  -lpvplayer_engine -lpvauthorengine -lpv2wayengine -lpvframemetadatautility -lpvrtspinterface -lpvrtspreginterface   -lpvdownloadinterface -lpvdownloadreginterface -lpvmp4interface -lpvmp4reginterface  "
+#define LIBS_shared "-losclbase -losclerror -losclmemory -losclproc -losclregcli -losclregserv -losclutil -losclio -lunit_test  -loscllib    -lpvgendatastruct -lpvmediadatastruct -lpvmimeutils -lthreadsafe_callback_ao -lpvthreadmessaging -lomx_avc_component_lib -lomx_m4v_component_lib  -lomx_aac_component_lib -lomx_amr_component_lib -lomx_mp3_component_lib  -lomx_amrenc_component_lib -lomx_m4venc_component_lib -lomx_avcenc_component_lib -lomx_common_lib -lomx_queue_lib -lpvomx_proxy_lib -lomx_baseclass_lib -lomx_mastercore_lib -lpv_omx_interface   -lpv_aac_dec -lpv_amr_nb_common_lib -lpvamrwbdecoder -lpvdecoder_gsmamr -lpvmp3  -lpvencoder_gsmamr -lpv_avc_common_lib -lpvavcdecoder  -lpvmp4decoder  -lpvm4vencoder -lpvavch264enc -lm4v_config -lpv_config_parser -lcolorconvert -lpvfileparserutils -lpvid3parcom -lpvpvxparser -lpvwav  -lpvavifileparser  -lpvmp3ff -lpvaacparser -lpvgsmamrparser   -lmp4recognizer_utility -lpvmp4ff  -lpvmp4ffcomposer     -lpv_http_parcom -lpvlatmpayloadparser  -lpvsdpparser  -lpv_rtsp_parcom   -lpvrtsp_cli_eng_node -lrtppayloadparser -lrtprtcp -lpv324m -lpvgeneraltools -lcpm -lpassthru_oma1   -lpvmiofileoutput -lpvmiofileinput -lpvmioaviwavfileinput -lpvmio_comm_loopback -lpvmfrecognizer -lpvaacffrecognizer -lpvamrffrecognizer   -lpvmp3ffrecognizer -lpvmp4ffrecognizer -lpvwavffrecognizer    -lpvmf      -lpvfileoutputnode -lpvmediaoutputnode -lpvsocketnode  -lprotocolenginenode   -lpvwavffparsernode   -lpvomxencnode -lpvomxbasedecnode -lpvomxaudiodecnode -lpvomxvideodecnode  -lpvaacffparsernode  -lpvamrffparsernode   -lpvmp3ffparsernode  -lpvmp4ffparsernode      -lpvmediainputnode  -lpvmp4ffcomposernode     -lpvdownloadmanagernode   -lpvstreamingmanagernode   -lpvrtspinterface -lpvrtspreginterface -lpvmedialayernode  -lpvjitterbuffer -lpvjitterbufferrtp  -lpvjitterbuffernode -lpvcommsionode -lpvclientserversocketnode -lpvloopbacknode -lpvvideoparsernode -lpvdummyinputnode -lpvdummyoutputnode  -lpvplayer_engine -lpvauthorengine -lpv2wayengine -lpvframemetadatautility -lpvrtspinterface -lpvrtspreginterface   -lpvdownloadinterface -lpvdownloadreginterface -lpvmp4interface -lpvmp4reginterface      "
 #define omx_amrenc_component_y_lib ""
 #define pvgeneraltools_m_lib "-lpvgeneraltools"
 #define REGISTER_OMX_AAC_COMPONENT 1
@@ -1212,9 +1238,8 @@
 #define pvstreamingmanagernode_plugins_opencore_rtsp "3gpp.mk rtspunicast.mk"
 #define LIBS_omxjoint_shared "-lomx_common_lib -lomx_queue_lib -lpvomx_proxy_lib -lomx_baseclass_lib -lomx_mastercore_lib -lpv_omx_interface"
 #define pvasfffrecognizer_m_lib ""
-#define SOLIBS_pv "-losclbase -losclerror -losclmemory -losclproc -losclregcli -losclregserv -losclutil -losclio -lunit_test  -loscllib  -lpv_aac_dec -lpvmp3  -lpvdecoder_gsmamr -lpvencoder_gsmamr -lpv_amr_nb_common_lib -lpvamrwbdecoder -lpvavcdecoder -lpv_avc_common_lib -lpvavch264enc  -lpvmp4decoder -lpvm4vencoder  -lgetactualaacconfig -lcolorconvert -lm4v_config -lpv_config_parser -lomx_avc_component_lib -lomx_m4v_component_lib  -lomx_aac_component_lib -lomx_amr_component_lib -lomx_mp3_component_lib  -lomx_common_lib -lomx_queue_lib -lpvomx_proxy_lib -lomx_baseclass_lib -lomx_mastercore_lib -lpv_omx_interface -lthreadsafe_callback_ao -lpvmediadatastruct -lpvmimeutils -lpvgendatastruct -lpvmf -lcpm -lpassthru_oma1 -lpvmiofileoutput -lpvfileparserutils -lpvid3parcom  -lpvmp4ff -lmp4recognizer_utility  -lpvmp4ffcomposer  -lpvmp4ffcomposernode      -lpvmediainputnode -lpvmediaoutputnode -lpvfileoutputnode -lpvgsmamrparser -lpvamrffparsernode  -lpvamrffrecognizer -lpvaacparser -lpvaacffparsernode  -lpvaacffrecognizer -lpvmp3ff  -lpvmp3ffparsernode -lpvmp3ffrecognizer    -lpvomxvideodecnode -lpvomxaudiodecnode -lpvomxbasedecnode        -lpvwavffparsernode -lpvwavffrecognizer     -lpvmfrecognizer -lpvmiofileinput -lpvmioaviwavfileinput -lpvframemetadatautility -lpvplayer_engine -lpvauthorengine -lpv324m -lpv2wayengine -lpvavifileparser -lpvthreadmessaging -lpvlatmpayloadparser "
+#define SOLIBS_pv "-losclbase -losclerror -losclmemory -losclproc -losclregcli -losclregserv -losclutil -losclio -lunit_test  -loscllib  -lpv_aac_dec -lpvmp3  -lpvdecoder_gsmamr -lpvencoder_gsmamr -lpv_amr_nb_common_lib -lpvamrwbdecoder -lpvavcdecoder -lpv_avc_common_lib -lpvavch264enc  -lpvmp4decoder -lpvm4vencoder  -lgetactualaacconfig -lcolorconvert -lm4v_config -lpv_config_parser -lomx_avc_component_lib -lomx_m4v_component_lib  -lomx_aac_component_lib -lomx_amr_component_lib -lomx_mp3_component_lib  -lomx_common_lib -lomx_queue_lib -lpvomx_proxy_lib -lomx_baseclass_lib -lomx_mastercore_lib -lpv_omx_interface -lthreadsafe_callback_ao -lpvmediadatastruct -lpvmimeutils -lpvgendatastruct -lpvmf -lcpm -lpassthru_oma1 -lpvmiofileoutput -lpvfileparserutils -lpvid3parcom  -lpvmp4ff -lmp4recognizer_utility  -lpvmp4ffcomposer  -lpvmp4ffcomposernode  -lpvpvxparser -lpvmediainputnode -lpvmediaoutputnode -lpvfileoutputnode -lpvgsmamrparser -lpvamrffparsernode -lpvamrffrecognizer -lpvaacparser -lpvaacffparsernode  -lpvaacffrecognizer -lpvmp3ff  -lpvmp3ffparsernode -lpvmp3ffrecognizer    -lpvomxvideodecnode -lpvomxaudiodecnode -lpvomxbasedecnode        -lpvwavffparsernode -lpvwavffrecognizer     -lpvmfrecognizer -lpvmiofileinput -lpvmioaviwavfileinput -lpvframemetadatautility -lpvplayer_engine -lpvauthorengine -lpv324m -lpv2wayengine -lpvavifileparser -lpvthreadmessaging -lpvlatmpayloadparser  "
 #define pvmp3ffparsernode_y_lib ""
-#define pvjitterbuffernode_opencore_m_lib ""
 #define MODS_opencore_player "-lopencore_common"
 #define pvjitterbuffernode_m_lib "-lpvjitterbuffernode"
 #define MODS_pvwmdrmplat "-lopencore_player -lopencore_common"
@@ -1226,7 +1251,6 @@
 #define pvra8decoder_m_mk ""
 #define pvrmffparser_y_lib ""
 #define pvmp4decoder_m_lib "-lpvmp4decoder"
-#define omx_avc_component_m_lib "-lomx_avc_component_lib"
 #define MODS_omx_avcenc_sharedlibrary "-lomx_sharedlibrary -lopencore_common "
 #define pvwmvdecnode_m_mk ""
 #define pvwav_y_mk ""
@@ -1237,13 +1261,14 @@
 #define pvaacparser_m_mk "/fileformats/rawaac/parser/build/make"
 #define omx_aac_component_m_lib "-lomx_aac_component_lib"
 #define SOLIBS_omx_wmadec_sharedlibrary " "
-#define SOLIBS_opencore_rtsp "-lpvrtspinterface -lpvstreamingmanagernode -lpv_rtsp_parcom -lpvrtsp_cli_eng_node -lrtppayloadparser -lrtprtcp -lpvjitterbuffernode -lpvmedialayernode  -lpvsdpparser"
+#define SOLIBS_opencore_rtsp "-lpvrtspinterface -lpvstreamingmanagernode -lpv_rtsp_parcom -lpvrtsp_cli_eng_node -lrtppayloadparser -lrtprtcp -lpvjitterbuffer -lpvjitterbufferrtp -lpvjitterbuffernode -lpvmedialayernode  -lpvsdpparser"
 #define omx_amrenc_component_imp_m_lib ""
 #define pvjanusplugin_m_lib ""
 #define config_3gpp_mk "3gpp.mk"
 #define pvaacffrecognizer_y_mk ""
 #define pvvideoencnode_y_lib ""
 #define pvaacffparsernode_y_mk ""
+#define pvwmdrmsysclkinterface_m_mk ""
 #define pvomx_proxy_m_lib "-lpvomx_proxy_lib"
 #define pvrvdecnode_m_mk ""
 #define pvavcdecoder_imp_m_lib ""
@@ -1253,7 +1278,7 @@
 #define MODS_opencore_mp4local "-lopencore_common -lopencore_player"
 #define pvavch264enc_y_mk ""
 #define rtppayloadparser_m_lib "-lrtppayloadparser"
-#define pvcrypto_y_mk ""
+#define pvwav_y_lib ""
 #define pvmp4ffparsernodeopencore_m_mk "/nodes/pvmp4ffparsernode/build_opencore/make"
 #define SOLIBDIRS_pvmtpdb "  "
 #define LIBDIR_codecs_v2_static "                                 "
@@ -1270,12 +1295,12 @@
 #define pv2wayengine_m_mk "/engines/2way/build/make"
 #define MODS_opencore_rtspreg "-lopencore_player -lopencore_common"
 #define pvmtp_engine_m_lib ""
+#define LIBS_recognizer_shared "-lpvmfrecognizer -lpvaacffrecognizer -lpvamrffrecognizer   -lpvmp3ffrecognizer -lpvmp4ffrecognizer -lpvwavffrecognizer  "
 #define pvdivxffparsernode_m_lib ""
 #define aacdecnode_y_mk ""
 #define pvasfffrecognizer_y_mk ""
 #define wmadecoder_y_lib ""
 #define engines_common_headers_y_mk ""
-#define MODS_omx_mp3dec_sharedlibrary "-lomx_sharedlibrary -lopencore_common"
 #define asfrecognizer_utility_m_mk ""
 #define oscllib_lib "-loscllib"
 #define pvrmffparsernode_m_mk ""
@@ -1284,13 +1309,13 @@
 #define LIBDIR_baselibs_static "       "
 #define pvwav_m_lib "-lpvwav"
 #define omx_avc_component_y_lib ""
-#define pvmp4decoder_imp_m_lib ""
+#define omx_wmv_component_imp_m_mk "n"
 #define pv_rtsp_parcom_y_lib ""
 #define pvmedialayernode_opencore_m_lib ""
 #define pvmioaviwavfileinput_m_mk "/pvmi/media_io/pvmi_mio_avi_wav_fileinput/build/make"
 #define omx_mp3_component_m_mk "/codecs_v2/omx/omx_mp3/build/make_multithreaded"
 #define pvwmdrm_y_mk ""
-#define LIBDIR_static " /oscl/unit_test/build/make                                                                                                                                                              "
+#define LIBDIR_static " /oscl/unit_test/build/make                                                                                                                                                                 "
 #define SOLIBS_opencore_mp4local "-lpvmp4interface  -lpvmp4ffparsernode"
 #define config_3gpp_pvr_asf_mk ""
 #define pvavch264enc_imp_m_lib ""
@@ -1298,14 +1323,15 @@
 #define LIBS_omxdec_static "         "
 #define pvwmadecnode_m_lib ""
 #define REGISTER_OMX_WMA_COMPONENT 0
-#define pvrmffrecognizer_m_mk ""
 #define SOLIBS_opencore_net_support "-lpvsocketnode -lpv_http_parcom"
 #define pv_http_parcom_m_lib "-lpv_http_parcom"
 #define pvmediadatastruct_m_lib "-lpvmediadatastruct"
+#define pvstreamingmanagernode_3gpp_m_mk ""
+#define pvcrypto_y_mk ""
 #define pvlatmpayloadparser_m_lib "-lpvlatmpayloadparser"
 #define pv_config_parser_y_mk ""
 #define pvstreamingmanagernode_plugins "  3gpp.mk rtspunicast.mk    "
-#define TARGET_shared " opencore_common opencore_author opencore_player opencore_2way omx_sharedlibrary omx_avcdec_sharedlibrary omx_m4vdec_sharedlibrary  omx_aacdec_sharedlibrary omx_amrdec_sharedlibrary omx_mp3dec_sharedlibrary  omx_avcenc_sharedlibrary omx_m4venc_sharedlibrary omx_amrenc_sharedlibrary opencore_net_support opencore_downloadreg opencore_download opencore_rtspreg opencore_rtsp      opencore_mp4localreg opencore_mp4local     "
+#define TARGET_shared " opencore_common opencore_author opencore_player opencore_2way omx_sharedlibrary omx_avcdec_sharedlibrary omx_m4vdec_sharedlibrary  omx_aacdec_sharedlibrary omx_amrdec_sharedlibrary omx_mp3dec_sharedlibrary  omx_avcenc_sharedlibrary omx_m4venc_sharedlibrary omx_amrenc_sharedlibrary opencore_net_support opencore_downloadreg opencore_download opencore_rtspreg opencore_rtsp      opencore_mp4localreg opencore_mp4local      "
 #define pvsdpparser_opencore_y_lib ""
 #define omx_aac_component_m_mk "/codecs_v2/omx/omx_aac/build/make_multithreaded"
 #define LIBS_oscl_static " -lunit_test"
@@ -1313,21 +1339,21 @@
 #define pvfileoutputnode_m_mk "/nodes/pvfileoutputnode/build/make"
 #define wmadecoder_imp_m_lib "n"
 #define pv_rtsp_parcom_m_mk "/protocols/rtsp_parcom/build/make"
-#define ftdl_support_mk ""
+#define opencore_mp4local_so_name "opencore_mp4local"
 #define omx_wma_component_y_lib ""
 #define pv_config_parser_m_lib "-lpv_config_parser"
 #define m4v_config_y_mk ""
 #define pvcrypto_m_lib ""
 #define SOLIBDIRS_omx_avcdec_sharedlibrary "/codecs_v2/omx/omx_h264/build/make_multithreaded /codecs_v2/video/avc_h264/dec/build/make"
-#define LIBS_fileformats_shared "-lpvfileparserutils -lpvid3parcom  -lpvwav  -lpvavifileparser  -lpvmp3ff -lpvaacparser -lpvgsmamrparser   -lmp4recognizer_utility -lpvmp4ff  -lpvmp4ffcomposer   "
+#define LIBS_fileformats_shared "-lpvfileparserutils -lpvid3parcom -lpvpvxparser -lpvwav  -lpvavifileparser  -lpvmp3ff -lpvaacparser -lpvgsmamrparser   -lmp4recognizer_utility -lpvmp4ff  -lpvmp4ffcomposer    "
 #define gsmamrdecnode_y_mk ""
 #define LIBS_engines_static "   "
-#define pvjanusplugin_m_mk ""
-#define LIBS_static " -lunit_test                                                                                                                                                           "
+#define oscl_m_mk "/oscl"
+#define LIBS_static " -lunit_test                                                                                                                                                              "
 #define pvsqlite_y_lib ""
 #define pvasfffparsernode_y_lib ""
 #define pvmp3_m_lib "-lpvmp3"
-#define SOLIBDIRS_opencore_player "        /pvmi/content_policy_manager/build/make /pvmi/content_policy_manager/plugins/oma1/passthru/build/make  /fileformats/id3parcom/build/make /nodes/pvamrffparsernode/build/make /pvmi/recognizer/plugins/pvamrffrecognizer/build/make /fileformats/mp3/parser/build/make  /nodes/pvmp3ffparsernode/build/make /pvmi/recognizer/plugins/pvmp3ffrecognizer/build/make  /fileformats/mp4/parser/build_opencore/make /fileformats/mp4/parser/utils/mp4recognizer/build/make /fileformats/rawaac/parser/build/make /nodes/pvaacffparsernode/build/make  /pvmi/recognizer/plugins/pvaacffrecognizer/build/make /nodes/pvwavffparsernode/build/make /pvmi/recognizer/plugins/pvwavffrecognizer/build/make           /pvmi/recognizer/build/make   /engines/adapters/player/framemetadatautility/build/make /engines/player/build/make"
+#define SOLIBDIRS_opencore_player "        /pvmi/content_policy_manager/build/make /pvmi/content_policy_manager/plugins/oma1/passthru/build/make /fileformats/pvx/parser/build/make /fileformats/id3parcom/build/make /nodes/pvamrffparsernode/build/make /pvmi/recognizer/plugins/pvamrffrecognizer/build/make /fileformats/mp3/parser/build/make  /nodes/pvmp3ffparsernode/build/make /pvmi/recognizer/plugins/pvmp3ffrecognizer/build/make  /fileformats/mp4/parser/build_opencore/make /fileformats/mp4/parser/utils/mp4recognizer/build/make /fileformats/rawaac/parser/build/make /nodes/pvaacffparsernode/build/make  /pvmi/recognizer/plugins/pvaacffrecognizer/build/make /nodes/pvwavffparsernode/build/make /pvmi/recognizer/plugins/pvwavffrecognizer/build/make           /pvmi/recognizer/build/make   /engines/adapters/player/framemetadatautility/build/make /engines/player/build/make"
 #define pvfileoutputnode_y_lib ""
 #define pvstreamingmanagernode_plugins_pvasfstreaming "asf.mk mshttp.mk"
 #define omx_avcdec_sharedlibrary_so_name "omx_avcdec_sharedlibrary"
@@ -1336,7 +1362,7 @@
 #define pvencoder_gsmamr_m_lib "-lpvencoder_gsmamr"
 #define SOLIBS_omx_amrenc_sharedlibrary "-lomx_amrenc_component_lib -lpvencoder_gsmamr"
 #define pvplayer_engine_m_lib "-lpvplayer_engine"
-#define pvpvxparser_m_lib ""
+#define pvpvxparser_m_lib "-lpvpvxparser"
 #define pvmp3ffparsernode_m_lib "-lpvmp3ffparsernode"
 #define passthru_oma1_y_mk ""
 #define pvmp4ffcomposernode_y_lib ""
@@ -1344,18 +1370,21 @@
 #define LIBDIR_cpm_static "    "
 #define pvrtspinterface_m_mk "/modules/linux_rtsp/core/build/make"
 #define wmvdecoder_m_lib ""
+#define pvomxbasedecnode_m_mk "/nodes/pvomxbasedecnode/build/make"
 #define opencore_downloadreg_so_name "opencore_downloadreg"
 #define omx_avcenc_component_y_mk ""
 #define pvra8decnode_m_mk ""
+#define ftdl_support_mk ""
 #define pvamrwbdecoder_imp_m_lib ""
 #define oscl_m_lib "-losclbase -losclerror -losclmemory -losclproc -losclregcli -losclregserv -losclutil -losclio -lunit_test"
-#define CONFIG_FLAGS "USE_CML2_CONFIG"
-#define pvomxbasedecnode_m_mk "/nodes/pvomxbasedecnode/build/make"
+#define CONFIG_FLAGS "USE_CML2_CONFIG "
+#define pvjitterbuffercommon_m_lib "-lpvjitterbuffer"
 #define SOLIBDIRS_pvasflocalpbreg " "
 #define pvasfffrecognizer_y_lib ""
 #define mp4recognizer_utility_y_mk ""
 #define pvmediainputnode_y_mk ""
 #define REGISTER_OMX_H263_COMPONENT 1
+#define scsp_y_mk ""
 #define pvmp3_m_mk "/codecs_v2/audio/mp3/dec/build/make"
 #define LIBS_codecs_utilities_static "  "
 #define LIBDIR_omxjointimp_shared "/codecs_v2/omx/omx_mastercore/build/make_multithreaded"
@@ -1364,6 +1393,7 @@
 #define SOLIBDIRS_omx_aacdec_sharedlibrary "/codecs_v2/omx/omx_aac/build/make_multithreaded /codecs_v2/audio/aac/dec/build/make"
 #define pvmp4reginterface_m_lib "-lpvmp4reginterface"
 #define pvavcdecnode_m_lib ""
+#define pvmp4decoder_imp_m_lib ""
 #define pvpvrnode_y_lib ""
 #define unit_test_y_lib "-lunit_test"
 #define pvpvrff_y_lib ""
@@ -1374,7 +1404,7 @@
 #define omx_m4venc_component_m_mk "/codecs_v2/omx/omx_m4venc/build/make_multithreaded"
 #define SOLIBDIRS_omx_m4vdec_sharedlibrary "/codecs_v2/omx/omx_m4v/build/make_multithreaded /codecs_v2/video/m4v_h263/dec/build/make"
 #define pvcommsionode_m_mk "/nodes/pvcommsionode/build/make"
-#define pvmp4reginterface_m_mk "/modules/linux_mp4/node_registry/build/make"
+#define pvjitterbufferasf_m_mk ""
 #define pvgeneraltools_m_mk "/protocols/systems/tools/general/build/make"
 #define unit_test_m_mk ""
 #define omx_m4venc_component_imp_m_lib ""
@@ -1396,28 +1426,28 @@
 #define MODS_pvwmdrm "-lopencore_player -lopencore_common"
 #define wmvdecoder_imp_m_mk "n"
 #define pvamrwbdecoder_m_mk "/codecs_v2/audio/gsm_amr/amr_wb/dec/build/make"
+#define omx_mp3_component_y_mk ""
 #define pvrtsp_cli_eng_node_opencore_m_mk "/protocols/rtsp_client_engine/build_opencore/make"
 #define mshttp_support_mk ""
 #define opencore_download_so_name "opencore_download"
 #define SOLIBS_pvmtpdb "  "
 #define SOLIBS_opencore_downloadreg "-lpvdownloadreginterface"
 #define mp3decnode_m_mk ""
-#define SOLIBS_omx_sharedlibrary "-lomx_common_lib -lomx_queue_lib -lpvomx_proxy_lib -lomx_baseclass_lib -lpv_omx_interface"
+#define pvdecoder_gsmamr_imp_m_mk ""
 #define pvwavffrecognizer_y_lib ""
 #define pvavcencnode_m_lib ""
 #define pvjitterbuffernode_y_lib ""
 #define pvmediadatastruct_m_mk "/baselibs/media_data_structures/build/make"
 #define REGISTER_OMX_M4VENC_COMPONENT 1
-#define LIBDIR_fileformats_static "                   "
+#define LIBDIR_fileformats_static "                    "
 #define pvpvrff_y_mk ""
 #define pvpvrnode_y_mk ""
 #define MODS_omx_amrenc_sharedlibrary "-lomx_sharedlibrary -lopencore_common "
-#define LIBS_cpm_shared "-lcpm -lpassthru_oma1   "
+#define LIBS_cpm_shared "-lcpm -lpassthru_oma1  "
 #define pvmediainputnode_y_lib ""
 #define pvmiofileinput_y_mk ""
 #define pvmiofileoutput_m_lib "-lpvmiofileoutput"
 #define pvmp4ffparsernode_m_lib ""
-#define omx_m4venc_component_y_mk ""
 #define LIBDIR_omxdecimp_static ""
 #define omx_amr_component_y_lib ""
 #define rvdecoder_y_lib ""
@@ -1427,25 +1457,26 @@
 #define pvsqlite_m_lib ""
 #define pvmp4ffopencore_m_mk "/fileformats/mp4/parser/build_opencore/make"
 #define pv_amr_nb_common_lib_m_mk "/codecs_v2/audio/gsm_amr/amr_nb/common/build/make"
-#define LIBDIR_tools_v2_shared "/modules/linux_rtsp/core/build/make /modules/linux_rtsp/node_registry/build/make   /modules/linux_download/core/build/make /modules/linux_download/node_registry/build/make /modules/linux_mp4/core/build/make /modules/linux_mp4/node_registry/build/make  "
+#define LIBDIR_tools_v2_shared "/modules/linux_rtsp/core/build/make /modules/linux_rtsp/node_registry/build/make   /modules/linux_download/core/build/make /modules/linux_download/node_registry/build/make /modules/linux_mp4/core/build/make /modules/linux_mp4/node_registry/build/make      "
 #define DYNAMIC_LOAD_OMX_AMRENC_COMPONENT 1
 #define pvamrencnode_y_lib ""
 #define pvjanusplugin_y_mk ""
 #define pv324m_m_lib "-lpv324m"
 #define pvvideoencnode_m_mk ""
-#define LIBDIR_nodes_static "                                                  "
+#define LIBDIR_nodes_static "                                                    "
 #define LIBDIR_audio_shared "  /codecs_v2/audio/aac/dec/build/make /codecs_v2/audio/gsm_amr/amr_nb/common/build/make /codecs_v2/audio/gsm_amr/amr_wb/dec/build/make /codecs_v2/audio/gsm_amr/amr_nb/dec/build/make /codecs_v2/audio/mp3/dec/build/make  /codecs_v2/audio/gsm_amr/common/dec/build/make /codecs_v2/audio/gsm_amr/amr_nb/enc/build/make"
+#define pv2wayengine_y_mk ""
 #define SOLIBDIRS_pvwmdrmdev "n"
-#define opencore_mp4local_so_name "opencore_mp4local"
+#define protocolenginenode_plugins_opencore_download "pe_ps.mk pe_pdl.mk pe_dl_common.mk"
 #define pvavcdecnode_y_lib ""
 #define threadsafe_callback_ao_y_lib ""
 #define pvmimeutils_m_mk "/baselibs/pv_mime_utils/build/make"
 #define pvmp4ffcomposernodeopencore_y_lib ""
 #define pvavcdecnode_y_mk ""
-#define pvjitterbuffernode_opencore_y_lib ""
+#define pvframemetadatautility_m_lib "-lpvframemetadatautility"
 #define rdt_parser_m_mk ""
-#define omx_baseclass_y_mk ""
-#define pvmp4ffcomposeropencore_y_lib ""
+#define pvamrwbdecoder_m_lib "-lpvamrwbdecoder"
+#define USING_OMX 1
 #define pvfileparserutils_m_lib "-lpvfileparserutils"
 #define pv_http_parcom_y_lib ""
 #define pvgendatastruct_m_lib "-lpvgendatastruct"
@@ -1453,6 +1484,7 @@
 #define SOLIBS_opencore_rtspreg "-lpvrtspreginterface"
 #define protocolenginenode_m_mk ""
 #define pvmedialayernode_y_lib ""
+#define pvclientserversocketnode_m_mk "/nodes/pvclientserversocketnode/build/make"
 #define pvdivxffrecognizer_m_mk ""
 #define SOLIBDIRS_omx_avcenc_sharedlibrary "/codecs_v2/omx/omx_h264enc/build/make_multithreaded /codecs_v2/video/avc_h264/enc/build/make"
 #define pvdownloadmanagernode_m_mk "/nodes/pvdownloadmanagernode/build/make"
diff --git a/build_config/opencore_dynamic/pv_config.mk b/build_config/opencore_dynamic/pv_config_derived.mk
similarity index 71%
rename from build_config/opencore_dynamic/pv_config.mk
rename to build_config/opencore_dynamic/pv_config_derived.mk
index 942aa1c..4d2fda5 100644
--- a/build_config/opencore_dynamic/pv_config.mk
+++ b/build_config/opencore_dynamic/pv_config_derived.mk
@@ -1,426 +1,4 @@
 #
-# Automatically generated, don't edit
-#
-# At: Fri, 16 Jan 2009 06:11:38 +0000
-
-#
-# PV Code Base Configuration System
-#
-
-#
-# Menu for selecting supported features
-#
-module_support=y
-
-
-#
-# Menu for configuring runtime loadable modules
-#
-pv_so=n
-pvsplit_so=y
-streaming_support=y
-
-#
-# Menu for selecting streaming features
-#
-rtsp_support=y
-asf_streaming_support=n
-
-download_support=y
-mp4local_support=y
-asflocal_support=n
-janus_support=n
-wmdrmplat_support=n
-wmdrmdev_support=n
-mtp_db_support=n
-
-
-#
-# Menu for configuring Baselibs
-#
-csprng_lib=n
-pvcrypto_lib=n
-pventropysrc_lib=n
-pvgendatastruct_lib=m
-pvmediadatastruct_lib=m
-pvmimeutils_lib=m
-threadsafe_callback_ao_lib=m
-pvthreadmessaging_lib=m
-
-
-#
-# Menu for configuring File Formats
-#
-pvasfff_lib=n
-pvmp3ff_lib=m
-pvmp4ffcomposer_lib=n
-pvmp4ffcomposeropencore_lib=m
-pvmp4ff_lib=n
-pvmp4ffopencore_lib=m
-mp4recognizer_utility_lib=m
-pvaacparser_lib=m
-pvgsmamrparser_lib=m
-pvrmff_lib=n
-pvrmffparser_lib=n
-pvfileparserutils_lib=m
-pvid3parcom_lib=m
-pvpvxparser_lib=n
-pvwav_lib=m
-pvasxparser_lib=n
-pvavifileparser_lib=m
-pvpvrff_lib=n
-asfrecognizer_utility_lib=n
-pv_divxfile_parser_lib=n
-
-
-#
-# Menu for configuring Codecs
-#
-
-#
-# Menu for configuring OMX Support
-#
-omx_mastercore_lib=m
-MAX_NUMBER_OF_OMX_CORES=10
-MAX_NUMBER_OF_OMX_COMPONENTS=50
-pv_omx=y
-omx_avc_component_lib=m
-omx_common_lib=m
-omx_m4v_component_lib=m
-omx_queue_lib=m
-omx_wmv_component_lib=n
-pvomx_proxy_lib=m
-omx_aac_component_lib=m
-omx_amr_component_lib=m
-omx_mp3_component_lib=m
-omx_wma_component_lib=n
-omx_amrenc_component_lib=m
-omx_m4venc_component_lib=m
-omx_avcenc_component_lib=m
-omx_baseclass_lib=m
-
-
-#
-# Menu for configuring audio codecs
-#
-pv_aac_dec_lib=m
-getactualaacconfig_lib=m
-pv_amr_nb_common_lib=m
-pvdecoder_gsmamr_lib=m
-pvencoder_gsmamr_lib=m
-pvamrwbdecoder_lib=m
-gsm_amr_headers_lib=m
-pvmp3_lib=m
-pvra8decoder_lib=n
-wmadecoder_lib=n
-
-
-#
-# Menu for configuring video codecs
-#
-pv_avc_common_lib=m
-pvavcdecoder_lib=m
-wmvdecoder_lib=n
-pvmp4decoder_lib=m
-rvdecoder_lib=n
-pvm4vencoder_lib=m
-pvavch264enc_lib=m
-
-
-#
-# Menu for configuring codecs utilities
-#
-m4v_config_lib=m
-pv_config_parser_lib=m
-colorconvert_lib=m
-
-
-
-#
-# Menu for configuring Nodes
-#
-
-#
-# Menu for configuring Streaming
-#
-pvstreamingmanagernode_segments_lib=m
-
-#
-# Menu for configuring Streaming Features
-#
-mshttp_support=n
-rtspunicast_support=y
-unicastpvr_support=n
-broadcastpvr_support=n
-pvrfileplayback_support=n
-
-pvstreamingmanagernode_lib=n
-pvstreamingmanagernode_3gpp_lib=n
-pvmedialayernode_lib=m
-pvmedialayernode_opencore_lib=n
-pvjitterbuffernode_lib=m
-pvjitterbuffernode_opencore_lib=n
-
-
-#
-# Menu for configuring Download
-#
-pvdownloadmanagernode_lib=m
-
-#
-# Menu for configuring downloadmanager features
-#
-PVMF_DOWNLOADMANAGER_SUPPORT_PVX=n
-PVMF_DOWNLOADMANAGER_SUPPORT_PPB=y
-PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE=n
-PVMF_DOWNLOADMANAGER_MIN_TCP_BUFFERS_FOR_PPB=13
-ENABLE_LARGE_MBDS_CACHE_SIZE=n
-
-
-
-#
-# Menu for configuring ProtocolEngine
-#
-pvprotocolenginenode_segments_lib=m
-pvprotocolenginenode_lib=n
-
-#
-# Menu for configuring ProtocolEngine Features
-#
-ps_support=y
-pdl_support=y
-ftdl_support=n
-http_support=n
-
-
-pvfileoutputnode_lib=m
-pvmediaoutputnode_lib=m
-pvsocketnode_lib=m
-pvavcdecnode_lib=n
-pvvideodecnode_lib=n
-pvwavffparsernode_lib=m
-pvwmadecnode_lib=n
-pvwmvdecnode_lib=n
-pvomxencnode_lib=m
-pvomxaudiodecnode_lib=m
-pvomxbasedecnode_lib=m
-pvomxvideodecnode_lib=m
-aacdecnode_lib=n
-pvaacffparsernode_lib=m
-gsmamrdecnode_lib=n
-pvamrffparsernode_lib=m
-pvasfffparsernode_lib=n
-mp3decnode_lib=n
-pvmp3ffparsernode_lib=m
-pvmp4ffparsernode_lib=n
-pvmp4ffparsernodeopencore_lib=m
-pvrvdecnode_lib=n
-pvra8decnode_lib=n
-pvrmffparsernode_lib=n
-pvrtppacketsourcenode_lib=n
-nodes_common_headers_lib=m
-pvamrencnode_lib=n
-pvmediainputnode_lib=m
-pvmp4ffcomposernode_lib=n
-pvmp4ffcomposernodeopencore_lib=m
-pvvideoencnode_lib=n
-pvavcencnode_lib=n
-pvpvr_lib=n
-pvpvrnode_lib=n
-pvcommsionode_lib=m
-pvclientserversocketnode_lib=m
-pvloopbacknode_lib=m
-pvvideoparsernode_lib=m
-pvdummyinputnode_lib=m
-pvdummyoutputnode_lib=m
-pvdivxffparsernode_lib=n
-
-
-#
-# Menu for configuring Oscl
-#
-build_oscl=m
-unit_test_lib=y
-
-
-#
-# Menu for configuring Protocols
-#
-
-#
-# Menu for configuring Value Adds for 2way
-#
-twoway_value_add_config=y
-PV_2WAY_VALUE_ADD_NONE=y
-
-pv_http_parcom_lib=m
-pvlatmpayloadparser_lib=m
-sdp_common=m
-
-#
-# Menu for configuring SDPParser
-#
-sdp_default=n
-sdp_opencore=m
-
-rdt_parser_lib=n
-pv_rtsp_parcom_lib=m
-pvrtsp_cli_eng_node_lib=n
-pvrtsp_cli_eng_node_3gpp_lib=n
-pvrtsp_cli_eng_node_opencore_lib=m
-rtppayloadparser_lib=m
-
-#
-# Menu for rtppayload parser plugins
-#
-rfc_2429=y
-rfc_3016=y
-rfc_3267=y
-rfc_3640=y
-rfc_3984=y
-asf_payload=n
-realmedia_payload=n
-
-rtprtcp_lib=m
-pv324m_lib=m
-pv324m_common_headers_lib=m
-pvgeneraltools_lib=m
-
-
-#
-# Menu for configuring Pvmi
-#
-
-#
-# Menu for configuring Recognizers
-#
-pvmfrecognizer_lib=m
-pvaacffrecognizer_lib=m
-pvamrffrecognizer_lib=m
-pvoma1ffrecognizer_lib=n
-pvasfffrecognizer_lib=n
-pvmp3ffrecognizer_lib=m
-pvmp4ffrecognizer_lib=m
-pvwavffrecognizer_lib=m
-pvrmffrecognizer_lib=n
-pvdivxffrecognizer_lib=n
-
-
-#
-# Menu for configuring Content Policy Manager
-#
-cpm_lib=m
-passthru_oma1_lib=m
-pvjanusplugin_lib=n
-cpm_headers_lib=m
-pvoma1lockstream_lib=n
-
-
-#
-# Menu for configuring Media IO
-#
-pvmiofileinput_lib=m
-pvmiofileoutput_lib=m
-pvmioaviwavfileinput_lib=m
-pvmio_comm_loopback_lib=m
-
-
-#
-# Menu for configuring PacketSources
-#
-packetsources_default_lib=n
-
-#
-# Menu for configuring PacketSource Plugins
-#
-optimized_bcast_ps_support=n
-standard_bcast_ps_support=n
-
-
-pvmf_lib=m
-realaudio_deinterleaver_lib=n
-pvdbmanager_lib=n
-
-
-#
-# Menu for configuring Engines
-#
-
-#
-# Menu for configuring Player
-#
-pvplayer_engine_lib=m
-
-#
-# Menu for player engine tunables
-#
-PVPLAYERENGINE_CONFIG_SKIPTOREQUESTEDPOS_DEF=y
-PVPLAYERENGINE_CONFIG_SYNCMARGIN_EARLY_DEF=-200
-PVPLAYERENGINE_CONFIG_SYNCMARGIN_LATE_DEF=200
-VIDEO_DEC_NODE_LOW_PRIORITY=y
-
-
-#
-# Menu for configuring player registry
-#
-BUILD_OMX_VIDEO_DEC_NODE=y
-BUILD_OMX_AUDIO_DEC_NODE=y
-BUILD_VIDEO_DEC_NODE=n
-BUILD_AVC_DEC_NODE=n
-BUILD_WMV_DEC_NODE=n
-BUILD_RV_DEC_NODE=n
-BUILD_WMA_DEC_NODE=n
-BUILD_G726_DEC_NODE=n
-BUILD_GSMAMR_DEC_NODE=n
-BUILD_AAC_DEC_NODE=n
-BUILD_MP3_DEC_NODE=n
-BUILD_RA8_DEC_NODE=n
-BUILD_MP4_FF_PARSER_NODE=n
-BUILD_AMR_FF_PARSER_NODE=y
-BUILD_AAC_FF_PARSER_NODE=y
-BUILD_MP3_FF_PARSER_NODE=y
-BUILD_WAV_FF_PARSER_NODE=y
-BUILD_ASF_FF_PARSER_NODE=n
-BUILD_RM_FF_PARSER_NODE=n
-BUILD_STREAMING_MANAGER_NODE=n
-BUILD_DOWNLOAD_MANAGER_NODE=n
-BUILD_STILL_IMAGE_NODE=n
-BUILD_MP4_FF_REC=n
-BUILD_ASF_FF_REC=n
-BUILD_OMA1_FF_REC=n
-BUILD_AAC_FF_REC=y
-BUILD_RM_FF_REC=n
-BUILD_MP3_FF_REC=y
-BUILD_WAV_FF_REC=y
-BUILD_AMR_FF_REC=y
-
-
-
-#
-# Menu for configuring Author
-#
-pvauthorengine_lib=m
-
-
-#
-# Menu for configuring pv2way
-#
-pv2wayengine_lib=m
-
-engines_common_headers_lib=m
-pvframemetadatautility_lib=m
-
-
-#
-# Menu for configuring Extern_libs
-#
-pvmtp_engine_lib=n
-pvsqlite_lib=n
-pvwmdrm_lib=n
-wmdrm_config=n
-
-
-#
 # Derived symbols
 #
 pvmediaoutputnode_y_mk=""
@@ -443,13 +21,14 @@
 sdp_common_m_mk="/protocols/sdp/common/build/make"
 sdp_parser_mksegment_opencore="sdp_opencore.mk"
 pvloopbacknode_y_mk=""
+scsp_m_lib=""
 pvrtspreginterface_m_mk="/modules/linux_rtsp/node_registry/build/make"
 LIBDIR_oscl_static=" /oscl/unit_test/build/make"
 SOLIBDIRS_omx_m4venc_sharedlibrary="/codecs_v2/omx/omx_m4venc/build/make_multithreaded /codecs_v2/video/m4v_h263/enc/build/make"
 pvrmff_m_lib=""
-pvjitterbuffernode_plugins_pvasfstreaming="jb_asf.mk"
 omx_wmv_component_y_lib=""
 pvwmdrm_m_mk=""
+pvstreamingmanagernode_segments_m_mk="/nodes/streaming/streamingmanager/build/make_segments"
 omx_amrenc_component_m_lib="-lomx_amrenc_component_lib"
 pvdummyinputnode_y_mk=""
 pvfileparserutils_y_mk=""
@@ -480,7 +59,7 @@
 pvaacparser_m_lib="-lpvaacparser"
 mp4recognizer_utility_m_lib="-lmp4recognizer_utility"
 SOLIBDIRS_pvjanus=" "
-USING_OMX=1
+pvjitterbufferasf_y_lib=""
 pvmediainputnode_m_lib="-lpvmediainputnode"
 protocolenginenode_segments_m_mk="/nodes/pvprotocolenginenode/build/make_segments"
 asfrecognizer_utility_m_lib=""
@@ -496,15 +75,15 @@
 omx_baseclass_y_lib=""
 LIBS_packetsources_static="n"
 pvdecoder_gsmamr_imp_m_lib=""
-LIBDIR_fileformats_shared="/fileformats/common/parser/build/make /fileformats/id3parcom/build/make  /fileformats/wav/parser/build/make  /fileformats/avi/parser/build/make  /fileformats/mp3/parser/build/make /fileformats/rawaac/parser/build/make /fileformats/rawgsmamr/parser/build/make    /fileformats/mp4/parser/utils/mp4recognizer/build/make /fileformats/mp4/parser/build_opencore/make  /fileformats/mp4/composer/build_opencore/make   "
+LIBDIR_fileformats_shared="/fileformats/common/parser/build/make /fileformats/id3parcom/build/make /fileformats/pvx/parser/build/make /fileformats/wav/parser/build/make  /fileformats/avi/parser/build/make  /fileformats/mp3/parser/build/make /fileformats/rawaac/parser/build/make /fileformats/rawgsmamr/parser/build/make    /fileformats/mp4/parser/utils/mp4recognizer/build/make /fileformats/mp4/parser/build_opencore/make  /fileformats/mp4/composer/build_opencore/make    "
 pvdummyoutputnode_m_mk="/nodes/pvdummyoutputnode/build/make"
 pvasfff_m_lib=""
 pvrmff_m_mk=""
 csprng_m_lib=""
 pv_avc_common_lib_y_mk=""
 pvavcdecoder_m_mk="/codecs_v2/video/avc_h264/dec/build/make"
-SOLIBDIRS_pvasfstreaming=" /nodes/streaming/streamingmanager/build/make_segments /nodes/streaming/jitterbuffernode/build/make /nodes/streaming/medialayernode/build/make /protocols/rtp_payload_parser/build/make /protocols/rtp/build/make /nodes/pvprotocolenginenode/build/make_segments"
-LIBDIR_extern_libs_shared="    "
+SOLIBDIRS_pvasfstreaming=" /nodes/streaming/streamingmanager/build/make_segments /nodes/streaming/jitterbuffernode/jitterbuffer/common/build/make  /nodes/streaming/jitterbuffernode/build/make /nodes/streaming/medialayernode/build/make /protocols/rtp_payload_parser/build/make /protocols/rtp/build/make /nodes/pvprotocolenginenode/build/make_segments"
+DYNAMIC_LOAD_OMX_AVCENC_COMPONENT=1
 protocolenginenode_y_mk=""
 omx_mastercore_m_mk="/codecs_v2/omx/omx_mastercore/build/make_multithreaded"
 m4v_config_m_mk="/codecs_v2/utilities/m4v_config_parser/build/make"
@@ -543,12 +122,13 @@
 SOLIBS_opencore_author=" -lpvmp4ffcomposer  -lpvmp4ffcomposernode -lpvauthorengine"
 pvmp3ff_y_lib=""
 pv324m_plugins="default_support.mk"
+pvwmdrmsysclk_so_name=""
 MODS_omx_wmadec_sharedlibrary="-lomx_sharedlibrary -lopencore_common"
 omx_m4vdec_sharedlibrary_so_name="omx_m4vdec_sharedlibrary"
 pvrtppacketsourcenode_y_mk=""
 pvmiofileinput_y_lib=""
 pvavcdecoder_m_lib="-lpvavcdecoder"
-LIBS_fileformats_static="                  "
+LIBS_fileformats_static="                   "
 SOLIBDIRS_opencore_mp4localreg="/modules/linux_mp4/node_registry/build/make /pvmi/recognizer/plugins/pvmp4ffrecognizer/build/make"
 pvamrffrecognizer_y_mk=""
 REGISTER_OMX_WMV_COMPONENT=0
@@ -560,10 +140,8 @@
 packetsources_default_y_lib=""
 LIBDIR_baselibs_shared="   /baselibs/gen_data_structures/build/make /baselibs/media_data_structures/build/make /baselibs/pv_mime_utils/build/make /baselibs/threadsafe_callback_ao/build/make /baselibs/thread_messaging/build/make"
 pvomx_proxy_m_mk="/codecs_v2/omx/omx_proxy/build/make"
-LIBS_recognizer_shared="-lpvmfrecognizer -lpvaacffrecognizer -lpvamrffrecognizer   -lpvmp3ffrecognizer -lpvmp4ffrecognizer -lpvwavffrecognizer  "
 pvasf_streaming_so_name=""
 pvsocketnode_m_mk="/nodes/pvsocketnode/build/make"
-pvstreamingmanagernode_3gpp_m_mk=""
 pv2wayengine_y_lib=""
 pvwmadecnode_y_mk=""
 pvaacffrecognizer_y_lib=""
@@ -577,7 +155,6 @@
 pvvideoparsernode_y_mk=""
 pvmp4ffcomposer_m_lib=""
 dl_common_mk="pe_dl_common.mk"
-pvjitterbuffernode_opencore_m_mk=""
 pvmp4ffcomposer_y_lib=""
 threadsafe_callback_ao_m_lib="-lthreadsafe_callback_ao"
 pvmp4ffopencore_m_lib="-lpvmp4ff"
@@ -591,21 +168,21 @@
 pvwmdrmdev_so_name=""
 rvdecoder_y_mk=""
 pvavifileparser_m_mk="/fileformats/avi/parser/build/make"
-pvjitterbuffernode_opencore_y_mk=""
 gsm_amr_headers_m_mk="/codecs_v2/audio/gsm_amr/common/dec/build/make"
 pvaacparser_y_mk=""
 pvaacffparsernode_m_mk="/nodes/pvaacffparsernode/build/make"
-LIBS_extern_libs_shared="    "
+LIBS_extern_libs_shared="  "
 LIBDIR_media_io_static="   "
 getactualaacconfig_m_mk="/codecs_v2/audio/aac/dec/util/getactualaacconfig/build/make"
 colorconvert_y_mk=""
 pvgendatastruct_y_lib=""
-LIBDIR_pvmi_shared="/pvmi/content_policy_manager/build/make /pvmi/content_policy_manager/plugins/oma1/passthru/build/make   /pvmi/content_policy_manager/plugins/common/build/make  /pvmi/media_io/pvmiofileoutput/build/make /pvmi/media_io/pvmi_mio_fileinput/build/make_pvauthor /pvmi/media_io/pvmi_mio_avi_wav_fileinput/build/make /pvmi/media_io/pvmio_comm_loopback/build/make /pvmi/recognizer/build/make /pvmi/recognizer/plugins/pvaacffrecognizer/build/make /pvmi/recognizer/plugins/pvamrffrecognizer/build/make   /pvmi/recognizer/plugins/pvmp3ffrecognizer/build/make /pvmi/recognizer/plugins/pvmp4ffrecognizer/build/make /pvmi/recognizer/plugins/pvwavffrecognizer/build/make    /pvmi/pvmf/build/make  "
+LIBDIR_pvmi_shared="/pvmi/content_policy_manager/build/make /pvmi/content_policy_manager/plugins/oma1/passthru/build/make  /pvmi/content_policy_manager/plugins/common/build/make  /pvmi/media_io/pvmiofileoutput/build/make /pvmi/media_io/pvmi_mio_fileinput/build/make_pvauthor /pvmi/media_io/pvmi_mio_avi_wav_fileinput/build/make /pvmi/media_io/pvmio_comm_loopback/build/make /pvmi/recognizer/build/make /pvmi/recognizer/plugins/pvaacffrecognizer/build/make /pvmi/recognizer/plugins/pvamrffrecognizer/build/make   /pvmi/recognizer/plugins/pvmp3ffrecognizer/build/make /pvmi/recognizer/plugins/pvmp4ffrecognizer/build/make /pvmi/recognizer/plugins/pvwavffrecognizer/build/make    /pvmi/pvmf/build/make  "
 pvoma1ffrecognizer_m_mk=""
 csprng_y_mk=""
 pvdivxffparsernode_y_lib=""
 pvauthorengine_y_lib=""
 pvrtspinterface_m_lib="-lpvrtspinterface"
+scsp_y_lib=""
 pvmp3ff_y_mk=""
 pv_aac_dec_imp_m_lib=""
 rfc_3016_mk="rfc_3016.mk"
@@ -651,6 +228,7 @@
 pvmio_comm_loopback_m_mk="/pvmi/media_io/pvmio_comm_loopback/build/make"
 LIBS_baselibs_shared="   -lpvgendatastruct -lpvmediadatastruct -lpvmimeutils -lthreadsafe_callback_ao -lpvthreadmessaging"
 omx_avcenc_component_imp_m_mk=""
+pvjitterbufferasf_m_lib=""
 omx_amr_component_m_mk="/codecs_v2/omx/omx_amr/build/make_multithreaded"
 pvwmdrmplat_so_name=""
 pv_omx_interface_m_mk="/codecs_v2/omx/omx_sharedlibrary/interface/build/make"
@@ -659,13 +237,11 @@
 omx_avc_component_imp_m_lib=""
 pvavch264enc_y_lib=""
 pvmp3ff_m_lib="-lpvmp3ff"
-oscl_m_mk="/oscl"
-pvrvdecnode_y_lib=""
-pvclientserversocketnode_m_mk="/nodes/pvclientserversocketnode/build/make"
+scsp_m_mk=""
+pvjitterbufferasf_y_mk=""
 PROTOCOL_PLUGINS="pe_dl_common.mk pe_ps.mk pe_pdl.mk  "
-LIBDIR_nodes_shared="/nodes/pvfileoutputnode/build/make /nodes/pvmediaoutputnode/build/make /nodes/pvsocketnode/build/make  /nodes/pvprotocolenginenode/build/make_segments   /nodes/pvwavffparsernode/build/make   /nodes/pvomxencnode/build/make /nodes/pvomxbasedecnode/build/make /nodes/pvomxaudiodecnode/build/make /nodes/pvomxvideodecnode/build/make  /nodes/pvaacffparsernode/build/make  /nodes/pvamrffparsernode/build/make   /nodes/pvmp3ffparsernode/build/make  /nodes/pvmp4ffparsernode/build_opencore/make     /nodes/common/build/make  /nodes/pvmediainputnode/build/make_pvauthor  /nodes/pvmp4ffcomposernode/build_opencore/make     /nodes/pvdownloadmanagernode/build/make   /nodes/streaming/streamingmanager/build/make_segments   /modules/linux_rtsp/core/build/make /modules/linux_rtsp/node_registry/build/make /nodes/streaming/medialayernode/build/make  /nodes/streaming/jitterbuffernode/build/make  /nodes/pvcommsionode/build/make /nodes/pvclientserversocketnode/build/make /nodes/pvloopbacknode/build/make /nodes/pvvideoparsernode/build/make /nodes/pvdummyinputnode/build/make /nodes/pvdummyoutputnode/build/make "
+LIBDIR_nodes_shared="/nodes/pvfileoutputnode/build/make /nodes/pvmediaoutputnode/build/make /nodes/pvsocketnode/build/make  /nodes/pvprotocolenginenode/build/make_segments   /nodes/pvwavffparsernode/build/make   /nodes/pvomxencnode/build/make /nodes/pvomxbasedecnode/build/make /nodes/pvomxaudiodecnode/build/make /nodes/pvomxvideodecnode/build/make  /nodes/pvaacffparsernode/build/make  /nodes/pvamrffparsernode/build/make   /nodes/pvmp3ffparsernode/build/make  /nodes/pvmp4ffparsernode/build_opencore/make     /nodes/common/build/make   /nodes/pvmediainputnode/build/make_pvauthor  /nodes/pvmp4ffcomposernode/build_opencore/make    /nodes/pvdownloadmanagernode/build/make   /nodes/streaming/streamingmanager/build/make_segments   /modules/linux_rtsp/core/build/make /modules/linux_rtsp/node_registry/build/make /nodes/streaming/medialayernode/build/make  /nodes/streaming/jitterbuffernode/jitterbuffer/common/build/make /nodes/streaming/jitterbuffernode/jitterbuffer/rtp/build/make  /nodes/streaming/jitterbuffernode/build/make /nodes/pvcommsionode/build/make /nodes/pvclientserversocketnode/build/make /nodes/pvloopbacknode/build/make /nodes/pvvideoparsernode/build/make /nodes/pvdummyinputnode/build/make /nodes/pvdummyoutputnode/build/make "
 pvavcdecoder_imp_m_mk=""
-pvwmdrmdevinterface_m_lib=""
 pvdownloadinterface_m_lib="-lpvdownloadinterface"
 pvasfff_y_mk=""
 pvstreamingmanagernode_segments_y_lib=""
@@ -689,6 +265,7 @@
 DYNAMIC_LOAD_OMX_MP3_COMPONENT=1
 omx_aac_component_y_lib=""
 pvavcdecoder_y_mk=""
+SOLIBS_omx_sharedlibrary="-lomx_common_lib -lomx_queue_lib -lpvomx_proxy_lib -lomx_baseclass_lib -lpv_omx_interface"
 getactualaacconfig_y_lib=""
 pvrtsp_cli_eng_node_opencore_y_mk=""
 SOLIBDIRS_pvwmdrm="   "
@@ -698,13 +275,14 @@
 pvauthorengine_m_lib="-lpvauthorengine"
 standard_bcast_ps_mk=""
 pvmediaoutputnode_y_lib=""
-pv2wayengine_y_mk=""
 pvmio_comm_loopback_y_mk=""
 pvmediaoutputnode_m_lib="-lpvmediaoutputnode"
 SOLIBS_pvasfstreamingreg="n"
 pvomxaudiodecnode_m_lib="-lpvomxaudiodecnode"
+LIBDIR_audio_static="         "
 pvid3parcom_y_lib=""
 pvwavffparsernode_y_lib=""
+pv324m_y_lib=""
 pvrtsp_cli_eng_node_opencore_y_lib=""
 pvra8decoder_m_lib=""
 pvcommsionode_m_lib="-lpvcommsionode"
@@ -712,13 +290,15 @@
 pv324m_y_mk=""
 LIBDIR_omxencimp_static=""
 pvrmffparser_y_mk=""
-pvmp4ffparsernode_y_mk=""
+omx_avc_component_m_lib="-lomx_avc_component_lib"
 pvmp4ffrecognizer_y_mk=""
 pvstreamingmanagernode_3gpp_y_mk=""
 pvlatmpayloadparser_y_mk=""
 protocolenginenode_segments_y_lib=""
 MODS_omx_m4venc_sharedlibrary="-lomx_sharedlibrary -lopencore_common "
+SOLIBDIRS_omx_amrdec_sharedlibrary="/codecs_v2/omx/omx_amr/build/make_multithreaded /codecs_v2/audio/gsm_amr/amr_nb/dec/build/make /codecs_v2/audio/gsm_amr/amr_wb/dec/build/make"
 LIBDIR_omxdec_static="      "
+pvjitterbufferrtp_m_lib="-lpvjitterbufferrtp"
 pvthreadmessaging_m_lib="-lpvthreadmessaging"
 pvmp4ff_y_mk=""
 pvpvr_m_mk=""
@@ -727,6 +307,7 @@
 pvmediaoutputnode_m_mk="/nodes/pvmediaoutputnode/build/make"
 pvvideoparsernode_m_mk="/nodes/pvvideoparsernode/build/make"
 LIBDIR_omxencimp_shared=""
+omx_baseclass_y_mk=""
 pvwmdrmplatinterface_m_mk=""
 config_asf_mk=""
 pvvideodecnode_y_lib=""
@@ -745,6 +326,7 @@
 pvasfff_y_lib=""
 pvdownloadreginterface_m_lib="-lpvdownloadreginterface"
 pvjanus_so_name=""
+pvid3parcom_m_lib="-lpvid3parcom"
 pvpvr_m_lib=""
 omx_m4v_component_imp_m_mk=""
 rtspunicast_support_mk="rtspunicast.mk"
@@ -763,14 +345,14 @@
 MODS_opencore_download="-lopencore_net_support -lopencore_player -lopencore_common"
 pvasxparser_y_mk=""
 pvstreamingmanagernode_segments_m_lib="-lpvstreamingmanagernode"
-pvdecoder_gsmamr_imp_m_mk=""
+pvjitterbuffercommon_y_lib=""
 pvomxbasedecnode_y_lib=""
 pvmiofileinput_m_mk="/pvmi/media_io/pvmi_mio_fileinput/build/make_pvauthor"
 pvwavffparsernode_m_mk="/nodes/pvwavffparsernode/build/make"
 pvmedialayernode_opencore_y_lib=""
 LIBS_audio_static="        "
 colorconvert_m_mk="/codecs_v2/utilities/colorconvert/build/make"
-LIBDIR_omxdec_shared="/codecs_v2/omx/omx_h264/build/make_multithreaded /codecs_v2/omx/omx_m4v/build/make_multithreaded  /codecs_v2/omx/omx_aac/build/make_multithreaded /codecs_v2/omx/omx_amr/build/make_multithreaded /codecs_v2/omx/omx_mp3/build/make_multithreaded "
+getactualaacconfig_y_mk=""
 opencore_rtsp_so_name="opencore_rtsp"
 pvwmadecnode_m_mk=""
 pvmp4ffcomposer_y_mk=""
@@ -806,17 +388,18 @@
 pvrmffrecognizer_y_mk=""
 SOLIBS_pvwmdrm="   "
 omx_sharedlibrary_so_name="omx_sharedlibrary"
-SOLIBDIRS_opencore_rtsp="/modules/linux_rtsp/core/build/make /nodes/streaming/streamingmanager/build/make_segments /protocols/rtsp_parcom/build/make /protocols/rtsp_client_engine/build_opencore/make /protocols/rtp_payload_parser/build/make /protocols/rtp/build/make /nodes/streaming/jitterbuffernode/build/make /nodes/streaming/medialayernode/build/make /protocols/sdp/parser/build/make /protocols/sdp/common/build/make"
+SOLIBDIRS_opencore_rtsp="/modules/linux_rtsp/core/build/make /nodes/streaming/streamingmanager/build/make_segments /protocols/rtsp_parcom/build/make /protocols/rtsp_client_engine/build_opencore/make /protocols/rtp_payload_parser/build/make /protocols/rtp/build/make /nodes/streaming/jitterbuffernode/jitterbuffer/common/build/make /nodes/streaming/jitterbuffernode/jitterbuffer/rtp/build/make /nodes/streaming/jitterbuffernode/build/make /nodes/streaming/medialayernode/build/make /protocols/sdp/parser/build/make /protocols/sdp/common/build/make"
 omx_avc_component_imp_m_mk=""
 omx_avcenc_component_y_lib=""
 rtprtcp_y_mk=""
 MODS_pvasfcommon="-lopencore_player -lopencore_common"
 pvrtsp_cli_eng_node_m_lib=""
+pvmp4reginterface_m_mk="/modules/linux_mp4/node_registry/build/make"
 SOLIBDIRS_omx_wmvdec_sharedlibrary=" "
-pvpvxparser_m_mk=""
+omx_m4venc_component_y_mk=""
 pvvideoparsernode_m_lib="-lpvvideoparsernode"
 LIBDIR_module="/modules"
-pventropysrc_y_mk=""
+pvpvxparser_m_mk="/fileformats/pvx/parser/build/make"
 pvrmffparser_m_mk=""
 pv_omx_interface_m_lib="-lpv_omx_interface"
 SOLIBS_pvwmdrmplat="n"
@@ -830,9 +413,10 @@
 pvsocketnode_y_mk=""
 pvmediainputnode_m_mk="/nodes/pvmediainputnode/build/make_pvauthor"
 pvrtsp_cli_eng_node_opencore_m_lib="-lpvrtsp_cli_eng_node"
+pventropysrc_y_mk=""
 mp4recognizer_utility_m_mk="/fileformats/mp4/parser/utils/mp4recognizer/build/make"
-SOLIBDIRS_pv="/oscl   /codecs_v2/audio/aac/dec/build/make /codecs_v2/audio/mp3/dec/build/make  /codecs_v2/audio/gsm_amr/amr_nb/dec/build/make /codecs_v2/audio/gsm_amr/amr_nb/enc/build/make /codecs_v2/audio/gsm_amr/amr_nb/common/build/make /codecs_v2/audio/gsm_amr/amr_wb/dec/build/make /codecs_v2/video/avc_h264/dec/build/make /codecs_v2/video/avc_h264/common/build/make /codecs_v2/video/avc_h264/enc/build/make  /codecs_v2/video/m4v_h263/dec/build/make /codecs_v2/video/m4v_h263/enc/build/make  /codecs_v2/audio/aac/dec/util/getactualaacconfig/build/make /codecs_v2/utilities/colorconvert/build/make /codecs_v2/utilities/m4v_config_parser/build/make /codecs_v2/utilities/pv_config_parser/build/make /codecs_v2/omx/omx_h264/build/make_multithreaded /codecs_v2/omx/omx_m4v/build/make_multithreaded  /codecs_v2/omx/omx_aac/build/make_multithreaded /codecs_v2/omx/omx_amr/build/make_multithreaded /codecs_v2/omx/omx_mp3/build/make_multithreaded  /codecs_v2/omx/omx_common/build/make_multithreaded /codecs_v2/omx/omx_queue/build/make /codecs_v2/omx/omx_proxy/build/make /codecs_v2/omx/omx_baseclass/build/make /codecs_v2/omx/omx_mastercore/build/make_multithreaded /codecs_v2/omx/omx_sharedlibrary/interface/build/make /baselibs/threadsafe_callback_ao/build/make /baselibs/media_data_structures/build/make /baselibs/pv_mime_utils/build/make /baselibs/gen_data_structures/build/make /pvmi/pvmf/build/make /pvmi/content_policy_manager/build/make /pvmi/content_policy_manager/plugins/oma1/passthru/build/make /pvmi/media_io/pvmiofileoutput/build/make /fileformats/common/parser/build/make /fileformats/id3parcom/build/make  /fileformats/mp4/parser/build_opencore/make /fileformats/mp4/parser/utils/mp4recognizer/build/make  /fileformats/mp4/composer/build_opencore/make  /nodes/pvmp4ffcomposernode/build_opencore/make      /nodes/pvmediainputnode/build/make_pvauthor /nodes/pvmediaoutputnode/build/make /nodes/pvfileoutputnode/build/make /fileformats/rawgsmamr/parser/build/make /nodes/pvamrffparsernode/build/make  /pvmi/recognizer/plugins/pvamrffrecognizer/build/make /fileformats/rawaac/parser/build/make /nodes/pvaacffparsernode/build/make  /pvmi/recognizer/plugins/pvaacffrecognizer/build/make /fileformats/mp3/parser/build/make  /nodes/pvmp3ffparsernode/build/make /pvmi/recognizer/plugins/pvmp3ffrecognizer/build/make    /nodes/pvomxvideodecnode/build/make /nodes/pvomxaudiodecnode/build/make /nodes/pvomxbasedecnode/build/make        /nodes/pvwavffparsernode/build/make /pvmi/recognizer/plugins/pvwavffrecognizer/build/make     /pvmi/recognizer/build/make /pvmi/media_io/pvmi_mio_fileinput/build/make_pvauthor /pvmi/media_io/pvmi_mio_avi_wav_fileinput/build/make /engines/adapters/player/framemetadatautility/build/make /engines/player/build/make /engines/author/build/make /protocols/systems/3g-324m_pvterminal/build/make/ /engines/2way/build/make /fileformats/avi/parser/build/make /baselibs/thread_messaging/build/make /protocols/rtp_payload_parser/util/build/latmparser/make "
-USE_DYNAMIC_LOAD_OMX_COMPONENTS=1
+SOLIBDIRS_pv="/oscl   /codecs_v2/audio/aac/dec/build/make /codecs_v2/audio/mp3/dec/build/make  /codecs_v2/audio/gsm_amr/amr_nb/dec/build/make /codecs_v2/audio/gsm_amr/amr_nb/enc/build/make /codecs_v2/audio/gsm_amr/amr_nb/common/build/make /codecs_v2/audio/gsm_amr/amr_wb/dec/build/make /codecs_v2/video/avc_h264/dec/build/make /codecs_v2/video/avc_h264/common/build/make /codecs_v2/video/avc_h264/enc/build/make  /codecs_v2/video/m4v_h263/dec/build/make /codecs_v2/video/m4v_h263/enc/build/make  /codecs_v2/audio/aac/dec/util/getactualaacconfig/build/make /codecs_v2/utilities/colorconvert/build/make /codecs_v2/utilities/m4v_config_parser/build/make /codecs_v2/utilities/pv_config_parser/build/make /codecs_v2/omx/omx_h264/build/make_multithreaded /codecs_v2/omx/omx_m4v/build/make_multithreaded  /codecs_v2/omx/omx_aac/build/make_multithreaded /codecs_v2/omx/omx_amr/build/make_multithreaded /codecs_v2/omx/omx_mp3/build/make_multithreaded  /codecs_v2/omx/omx_common/build/make_multithreaded /codecs_v2/omx/omx_queue/build/make /codecs_v2/omx/omx_proxy/build/make /codecs_v2/omx/omx_baseclass/build/make /codecs_v2/omx/omx_mastercore/build/make_multithreaded /codecs_v2/omx/omx_sharedlibrary/interface/build/make /baselibs/threadsafe_callback_ao/build/make /baselibs/media_data_structures/build/make /baselibs/pv_mime_utils/build/make /baselibs/gen_data_structures/build/make /pvmi/pvmf/build/make /pvmi/content_policy_manager/build/make /pvmi/content_policy_manager/plugins/oma1/passthru/build/make /pvmi/media_io/pvmiofileoutput/build/make /fileformats/common/parser/build/make /fileformats/id3parcom/build/make  /fileformats/mp4/parser/build_opencore/make /fileformats/mp4/parser/utils/mp4recognizer/build/make  /fileformats/mp4/composer/build_opencore/make  /nodes/pvmp4ffcomposernode/build_opencore/make  /fileformats/pvx/parser/build/make /nodes/pvmediainputnode/build/make_pvauthor /nodes/pvmediaoutputnode/build/make /nodes/pvfileoutputnode/build/make /fileformats/rawgsmamr/parser/build/make /nodes/pvamrffparsernode/build/make /pvmi/recognizer/plugins/pvamrffrecognizer/build/make /fileformats/rawaac/parser/build/make /nodes/pvaacffparsernode/build/make  /pvmi/recognizer/plugins/pvaacffrecognizer/build/make /fileformats/mp3/parser/build/make  /nodes/pvmp3ffparsernode/build/make /pvmi/recognizer/plugins/pvmp3ffrecognizer/build/make    /nodes/pvomxvideodecnode/build/make /nodes/pvomxaudiodecnode/build/make /nodes/pvomxbasedecnode/build/make        /nodes/pvwavffparsernode/build/make /pvmi/recognizer/plugins/pvwavffrecognizer/build/make     /pvmi/recognizer/build/make /pvmi/media_io/pvmi_mio_fileinput/build/make_pvauthor /pvmi/media_io/pvmi_mio_avi_wav_fileinput/build/make /engines/adapters/player/framemetadatautility/build/make /engines/player/build/make /engines/author/build/make /protocols/systems/3g-324m_pvterminal/build/make/ /engines/2way/build/make /fileformats/avi/parser/build/make /baselibs/thread_messaging/build/make /protocols/rtp_payload_parser/util/build/latmparser/make  "
+USE_DYNAMIC_LOAD_OMX_COMPONENTS=y
 LIBDIR_omxenc_static="  "
 pv_config_parser_m_mk="/codecs_v2/utilities/pv_config_parser/build/make"
 pvamrffrecognizer_m_mk="/pvmi/recognizer/plugins/pvamrffrecognizer/build/make"
@@ -858,9 +442,8 @@
 pvasflocalpbreg_so_name=""
 pvdummyinputnode_m_lib="-lpvdummyinputnode"
 pvamrencnode_y_mk=""
-pvwmadecnode_y_lib=""
 pvoma1ffrecognizer_y_mk=""
-unit_test_y_mk="/oscl/unit_test/build/make"
+pvmp4ffparsernode_y_mk=""
 pvgendatastruct_m_mk="/baselibs/gen_data_structures/build/make"
 pvmiofileinput_m_lib="-lpvmiofileinput"
 realaudio_deinterleaver_y_mk=""
@@ -868,16 +451,15 @@
 pvpvr_y_lib=""
 omx_queue_m_mk="/codecs_v2/omx/omx_queue/build/make"
 omx_avcenc_sharedlibrary_so_name="omx_avcenc_sharedlibrary"
+rtppayloadparser_plugins_opencore_rtsp="rfc_2429.mk rfc_3016.mk rfc_3267.mk rfc_3640.mk rfc_3984.mk"
 pvdummyinputnode_y_lib=""
 omx_m4v_component_y_mk=""
 DYNAMIC_LOAD_OMX_AVC_COMPONENT=1
-pvwav_y_lib=""
 pvgendatastruct_y_mk=""
 pvra8decnode_y_lib=""
 omx_common_y_lib=""
 LIBS_extern_libs_static="  "
 pvmiofileoutput_y_lib=""
-pvjitterbuffernode_plugins="jb_default.mk"
 omx_wma_component_imp_m_mk="n"
 pvmfrecognizer_y_mk=""
 protocolenginenode_plugins="pe_dl_common.mk pe_ps.mk pe_pdl.mk  "
@@ -885,6 +467,7 @@
 gsm_amr_headers_y_mk=""
 gsmamrdecnode_m_mk=""
 protocolenginenode_y_lib=""
+pvjanusplugin_m_mk=""
 omx_m4venc_sharedlibrary_so_name="omx_m4venc_sharedlibrary"
 pvmedialayernode_plugins_opencore_rtsp="ml_rtsp.mk"
 pvaacffparsernode_m_lib="-lpvaacffparsernode"
@@ -893,7 +476,7 @@
 MODS_opencore_net_support="-lopencore_common"
 cpm_y_mk=""
 pvmp3_imp_m_lib=""
-LIBDIR_cpm_shared="/pvmi/content_policy_manager/build/make /pvmi/content_policy_manager/plugins/oma1/passthru/build/make   /pvmi/content_policy_manager/plugins/common/build/make "
+LIBDIR_cpm_shared="/pvmi/content_policy_manager/build/make /pvmi/content_policy_manager/plugins/oma1/passthru/build/make  /pvmi/content_policy_manager/plugins/common/build/make "
 threadsafe_callback_ao_y_mk=""
 MODS_pvjanus="-lopencore_player -lopencore_common -lpvwmdrm"
 pvstreamingmanagernode_3gpp_y_lib=""
@@ -905,19 +488,21 @@
 pv_aac_dec_m_mk="/codecs_v2/audio/aac/dec/build/make"
 LIBS_oscl_shared="-losclbase -losclerror -losclmemory -losclproc -losclregcli -losclregserv -losclutil -losclio -lunit_test  -loscllib"
 MODS_pvasflocalpb="-lopencore_player -lopencore_common -lpvasfcommon"
-pvframemetadatautility_m_lib="-lpvframemetadatautility"
-pvamrwbdecoder_m_lib="-lpvamrwbdecoder"
+pvasfff_m_mk=""
+pvrvdecnode_y_lib=""
 omx_mastercore_y_lib=""
 pvmfrecognizer_y_lib=""
 pvmp3ff_m_mk="/fileformats/mp3/parser/build/make"
 rtppayloadparser_m_mk="/protocols/rtp_payload_parser/build/make"
 LIBS_engines_shared="-lpvplayer_engine -lpvauthorengine -lpv2wayengine -lpvframemetadatautility"
 SOLIBDIRS_pvasfcommon=" "
+pvwmdrmsysclkinterface_m_lib=""
 pvomx_proxy_y_lib=""
 pvsdpparser_m_lib=""
-omx_wmv_component_imp_m_mk="n"
+omx_mp3dec_sharedlibrary_so_name="omx_mp3dec_sharedlibrary"
 pvasfstreaminginterface_m_lib=""
 oscl_y_lib=""
+MODS_opencore_author="-lopencore_common"
 pvwmvdecnode_m_lib=""
 rtprtcp_m_mk="/protocols/rtp/build/make"
 pv_http_parcom_m_mk="/protocols/http_parcom/build/make"
@@ -928,7 +513,7 @@
 opencore_net_support_so_name="opencore_net_support"
 MODS_omx_avcdec_sharedlibrary="-lomx_sharedlibrary -lopencore_common"
 aacdecnode_y_lib=""
-LIBS_nodes_static="                                                 "
+LIBS_nodes_static="                                                   "
 pvcommsionode_y_lib=""
 pvasfffrecognizer_m_mk=""
 pvlatmpayloadparser_y_lib=""
@@ -951,21 +536,23 @@
 rfc_3640_mk="rfc_3640.mk"
 pvavifileparser_y_lib=""
 pvrtsp_cli_eng_node_3gpp_y_mk=""
-pv324m_y_lib=""
-pvasflocalpbreginterface_m_lib=""
+pvfileoutputnode_m_lib="-lpvfileoutputnode"
 MODS_omx_sharedlibrary="-lopencore_common"
 pvvideodecnode_y_mk=""
 pvsocketnode_y_lib=""
+unit_test_y_mk="/oscl/unit_test/build/make"
 pvamrffparsernode_m_lib="-lpvamrffparsernode"
 pvomxencnode_m_mk="/nodes/pvomxencnode/build/make"
 SOLIBDIRS_opencore_mp4local="/modules/linux_mp4/core/build/make  /nodes/pvmp4ffparsernode/build_opencore/make"
 omx_m4venc_component_m_lib="-lomx_m4venc_component_lib"
 pvmp4ffcomposernodeopencore_m_lib="-lpvmp4ffcomposernode"
+pvmp4ffcomposeropencore_y_lib=""
 rfc_3267_mk="rfc_3267.mk"
-getactualaacconfig_y_mk=""
+LIBDIR_omxdec_shared="/codecs_v2/omx/omx_h264/build/make_multithreaded /codecs_v2/omx/omx_m4v/build/make_multithreaded  /codecs_v2/omx/omx_aac/build/make_multithreaded /codecs_v2/omx/omx_amr/build/make_multithreaded /codecs_v2/omx/omx_mp3/build/make_multithreaded "
 LIBS_media_io_shared="-lpvmiofileoutput -lpvmiofileinput -lpvmioaviwavfileinput -lpvmio_comm_loopback"
-LIBS_nodes_shared="-lpvfileoutputnode -lpvmediaoutputnode -lpvsocketnode  -lprotocolenginenode   -lpvwavffparsernode   -lpvomxencnode -lpvomxbasedecnode -lpvomxaudiodecnode -lpvomxvideodecnode  -lpvaacffparsernode  -lpvamrffparsernode   -lpvmp3ffparsernode  -lpvmp4ffparsernode      -lpvmediainputnode  -lpvmp4ffcomposernode     -lpvdownloadmanagernode   -lpvstreamingmanagernode   -lpvrtspinterface -lpvrtspreginterface -lpvmedialayernode  -lpvjitterbuffernode  -lpvcommsionode -lpvclientserversocketnode -lpvloopbacknode -lpvvideoparsernode -lpvdummyinputnode -lpvdummyoutputnode "
+LIBS_nodes_shared="-lpvfileoutputnode -lpvmediaoutputnode -lpvsocketnode  -lprotocolenginenode   -lpvwavffparsernode   -lpvomxencnode -lpvomxbasedecnode -lpvomxaudiodecnode -lpvomxvideodecnode  -lpvaacffparsernode  -lpvamrffparsernode   -lpvmp3ffparsernode  -lpvmp4ffparsernode      -lpvmediainputnode  -lpvmp4ffcomposernode     -lpvdownloadmanagernode   -lpvstreamingmanagernode   -lpvrtspinterface -lpvrtspreginterface -lpvmedialayernode  -lpvjitterbuffer -lpvjitterbufferrtp  -lpvjitterbuffernode -lpvcommsionode -lpvclientserversocketnode -lpvloopbacknode -lpvvideoparsernode -lpvdummyinputnode -lpvdummyoutputnode "
 LIBS_audio_shared="  -lpv_aac_dec -lpv_amr_nb_common_lib -lpvamrwbdecoder -lpvdecoder_gsmamr -lpvmp3  -lpvencoder_gsmamr"
+LIBDIR_extern_libs_shared="  "
 pvloopbacknode_m_mk="/nodes/pvloopbacknode/build/make"
 pvvideoparsernode_y_lib=""
 pvavch264enc_m_mk="/codecs_v2/video/avc_h264/enc/build/make"
@@ -983,7 +570,6 @@
 m4v_config_m_lib="-lm4v_config"
 pv_rtsp_parcom_m_lib="-lpv_rtsp_parcom"
 omx_aac_component_y_mk=""
-protocolenginenode_plugins_pvdownload="pe_ps.mk pe_pdl.mk pe_dl_common.mk"
 pvaacffrecognizer_m_lib="-lpvaacffrecognizer"
 packetsources_default_y_mk=""
 rdt_parser_m_lib=""
@@ -1004,30 +590,28 @@
 SOLIBS_pvasfcommon=" "
 cpm_headers_m_mk="/pvmi/content_policy_manager/plugins/common/build/make"
 opencore_mp4localreg_so_name="opencore_mp4localreg"
+SOLIBS_pvwmdrmsysclk="n"
 pvmp4ffrecognizer_m_mk="/pvmi/recognizer/plugins/pvmp4ffrecognizer/build/make"
 LIBS_cpm_static="   "
 SOLIBS_omx_m4vdec_sharedlibrary="-lomx_m4v_component_lib -lpvmp4decoder"
-pvid3parcom_m_lib="-lpvid3parcom"
-pvstreamingmanagernode_segments_m_mk="/nodes/streaming/streamingmanager/build/make_segments"
 pvrtsp_cli_eng_node_y_mk=""
 omx_avcenc_component_imp_m_lib=""
 pvmp4ffcomposernodeopencore_y_mk=""
 DYNAMIC_LOAD_OMX_H263ENC_COMPONENT=1
 pvasflocalpb_so_name=""
 pvsocketnode_m_lib="-lpvsocketnode"
-SOLIBDIRS_opencore_common="/oscl  /codecs_v2/omx/omx_mastercore/build/make_multithreaded              /codecs_v2/audio/gsm_amr/common/dec/build/make /codecs_v2/video/avc_h264/common/build/make /codecs_v2/audio/gsm_amr/amr_nb/common/build/make   /fileformats/rawgsmamr/parser/build/make  /codecs_v2/audio/aac/dec/util/getactualaacconfig/build/make /codecs_v2/utilities/m4v_config_parser/build/make /codecs_v2/utilities/pv_config_parser/build/make /codecs_v2/utilities/colorconvert/build/make /baselibs/threadsafe_callback_ao/build/make /baselibs/media_data_structures/build/make /baselibs/pv_mime_utils/build/make /baselibs/gen_data_structures/build/make /pvmi/pvmf/build/make /nodes/pvfileoutputnode/build/make /nodes/pvmediainputnode/build/make_pvauthor /nodes/pvomxencnode/build/make /pvmi/media_io/pvmi_mio_fileinput/build/make_pvauthor /pvmi/media_io/pvmi_mio_avi_wav_fileinput/build/make /fileformats/avi/parser/build/make /baselibs/thread_messaging/build/make /pvmi/media_io/pvmiofileoutput/build/make /nodes/pvmediaoutputnode/build/make /nodes/pvomxvideodecnode/build/make /nodes/pvomxaudiodecnode/build/make /nodes/pvomxbasedecnode/build/make /protocols/rtp_payload_parser/util/build/latmparser/make /fileformats/wav/parser/build/make /fileformats/common/parser/build/make /nodes/common/build/make /engines/common/build/make /pvmi/content_policy_manager/plugins/common/build/make"
-SOLIBS_opencore_common="-losclbase -losclerror -losclmemory -losclproc -losclregcli -losclregserv -losclutil -losclio -lunit_test  -loscllib -lomx_mastercore_lib              -lpv_avc_common_lib -lpv_amr_nb_common_lib   -lpvgsmamrparser  -lgetactualaacconfig -lm4v_config -lpv_config_parser -lcolorconvert -lthreadsafe_callback_ao -lpvmediadatastruct -lpvmimeutils -lpvgendatastruct -lpvmf -lpvfileoutputnode -lpvmediainputnode -lpvomxencnode -lpvmiofileinput -lpvmioaviwavfileinput -lpvavifileparser -lpvthreadmessaging -lpvmiofileoutput -lpvmediaoutputnode -lpvomxvideodecnode -lpvomxaudiodecnode -lpvomxbasedecnode -lpvlatmpayloadparser -lpvwav -lpvfileparserutils"
+SOLIBDIRS_opencore_common="/oscl  /codecs_v2/omx/omx_mastercore/build/make_multithreaded             /codecs_v2/audio/gsm_amr/common/dec/build/make /codecs_v2/video/avc_h264/common/build/make /codecs_v2/audio/gsm_amr/amr_nb/common/build/make /fileformats/rawgsmamr/parser/build/make /codecs_v2/audio/aac/dec/util/getactualaacconfig/build/make /codecs_v2/utilities/m4v_config_parser/build/make /codecs_v2/utilities/pv_config_parser/build/make /codecs_v2/utilities/colorconvert/build/make /baselibs/threadsafe_callback_ao/build/make /baselibs/media_data_structures/build/make /baselibs/pv_mime_utils/build/make /baselibs/gen_data_structures/build/make /pvmi/pvmf/build/make /nodes/pvfileoutputnode/build/make /nodes/pvmediainputnode/build/make_pvauthor /nodes/pvomxencnode/build/make /pvmi/media_io/pvmi_mio_fileinput/build/make_pvauthor /pvmi/media_io/pvmi_mio_avi_wav_fileinput/build/make /fileformats/avi/parser/build/make /baselibs/thread_messaging/build/make /pvmi/media_io/pvmiofileoutput/build/make /nodes/pvmediaoutputnode/build/make /nodes/pvomxvideodecnode/build/make /nodes/pvomxaudiodecnode/build/make /nodes/pvomxbasedecnode/build/make /protocols/rtp_payload_parser/util/build/latmparser/make /fileformats/wav/parser/build/make /fileformats/common/parser/build/make /nodes/common/build/make /engines/common/build/make /pvmi/content_policy_manager/plugins/common/build/make"
+SOLIBS_opencore_common="-losclbase -losclerror -losclmemory -losclproc -losclregcli -losclregserv -losclutil -losclio -lunit_test  -loscllib -lomx_mastercore_lib             -lpv_avc_common_lib -lpv_amr_nb_common_lib -lpvgsmamrparser -lgetactualaacconfig -lm4v_config -lpv_config_parser -lcolorconvert -lthreadsafe_callback_ao -lpvmediadatastruct -lpvmimeutils -lpvgendatastruct -lpvmf -lpvfileoutputnode -lpvmediainputnode -lpvomxencnode -lpvmiofileinput -lpvmioaviwavfileinput -lpvavifileparser -lpvthreadmessaging -lpvmiofileoutput -lpvmediaoutputnode -lpvomxvideodecnode -lpvomxaudiodecnode -lpvomxbasedecnode -lpvlatmpayloadparser -lpvwav -lpvfileparserutils"
 pvmp4decoder_y_lib=""
 rtprtcp_m_lib="-lrtprtcp"
 pvmimeutils_m_lib="-lpvmimeutils"
-pvasfff_m_mk=""
+MODS_omx_mp3dec_sharedlibrary="-lomx_sharedlibrary -lopencore_common"
 pvgsmamrparser_m_mk="/fileformats/rawgsmamr/parser/build/make"
 pvframemetadatautility_y_mk=""
 pvmtp_engine_y_lib=""
 omx_mp3_component_y_lib=""
 rvdecoder_m_mk=""
 pvmedialayernode_plugins="ml_default.mk"
-pvjitterbuffernode_plugins_opencore_rtsp="jb_rtsp.mk"
 omx_mastercore_y_mk=""
 pvmp4ffcomposer_m_mk=""
 pvasflocalpbreginterface_m_mk=""
@@ -1042,6 +626,7 @@
 pvavcencnode_y_mk=""
 optimized_bcast_ps_mk=""
 pvmtp_engine_m_mk=""
+pvjitterbufferrtp_y_lib=""
 pvstreamingmanagernode_3gpp_m_lib=""
 pvplayer_engine_m_mk="/engines/player/build/make"
 LIBDIR_engines_static="    "
@@ -1056,9 +641,9 @@
 REGISTER_OMX_AVC_COMPONENT=1
 pvaacffparsernode_y_lib=""
 SOLIBDIRS_omx_amrenc_sharedlibrary="/codecs_v2/omx/omx_amrenc/build/make_multithreaded /codecs_v2/audio/gsm_amr/amr_nb/enc/build/make"
-LIBS_tools_v2_shared="-lpvrtspinterface -lpvrtspreginterface   -lpvdownloadinterface -lpvdownloadreginterface -lpvmp4interface -lpvmp4reginterface  "
-SOLIBS_pvasfstreaming=" -lpvstreamingmanagernode -lpvjitterbuffernode -lpvmedialayernode -lrtppayloadparser -lrtprtcp -lprotocolenginenode"
-LIBS_pvmi_shared="-lcpm -lpassthru_oma1    -lpvmiofileoutput -lpvmiofileinput -lpvmioaviwavfileinput -lpvmio_comm_loopback -lpvmfrecognizer -lpvaacffrecognizer -lpvamrffrecognizer   -lpvmp3ffrecognizer -lpvmp4ffrecognizer -lpvwavffrecognizer    -lpvmf  "
+LIBS_tools_v2_shared="-lpvrtspinterface -lpvrtspreginterface   -lpvdownloadinterface -lpvdownloadreginterface -lpvmp4interface -lpvmp4reginterface      "
+SOLIBS_pvasfstreaming=" -lpvstreamingmanagernode -lpvjitterbuffer  -lpvjitterbuffernode -lpvmedialayernode -lrtppayloadparser -lrtprtcp -lprotocolenginenode"
+LIBS_pvmi_shared="-lcpm -lpassthru_oma1   -lpvmiofileoutput -lpvmiofileinput -lpvmioaviwavfileinput -lpvmio_comm_loopback -lpvmfrecognizer -lpvaacffrecognizer -lpvamrffrecognizer   -lpvmp3ffrecognizer -lpvmp4ffrecognizer -lpvwavffrecognizer    -lpvmf  "
 pvmioaviwavfileinput_y_mk=""
 omx_mp3_component_imp_m_mk=""
 pvm4vencoder_imp_m_mk=""
@@ -1086,6 +671,7 @@
 getactualaacconfig_m_lib="-lgetactualaacconfig"
 sdp_parser_mksegment_default=""
 threadsafe_callback_ao_m_mk="/baselibs/threadsafe_callback_ao/build/make"
+pvwmdrmdevinterface_m_lib=""
 pvasfstreamingreginterface_m_mk=""
 SOLIBDIRS_opencore_download="/nodes/pvprotocolenginenode/build/make_segments /nodes/pvdownloadmanagernode/build/make /modules/linux_download/core/build/make"
 mp3decnode_m_lib=""
@@ -1095,10 +681,10 @@
 omx_baseclass_m_mk="/codecs_v2/omx/omx_baseclass/build/make"
 LIBDIR_oscl_shared="/oscl "
 pvencoder_gsmamr_imp_m_mk=""
+pvrmffrecognizer_m_mk=""
 pvra8decoder_y_lib=""
 nodes_common_headers_m_mk="/nodes/common/build/make"
 LIBDIR_recognizer_shared="/pvmi/recognizer/build/make /pvmi/recognizer/plugins/pvaacffrecognizer/build/make /pvmi/recognizer/plugins/pvamrffrecognizer/build/make   /pvmi/recognizer/plugins/pvmp3ffrecognizer/build/make /pvmi/recognizer/plugins/pvmp4ffrecognizer/build/make /pvmi/recognizer/plugins/pvwavffrecognizer/build/make  "
-MODS_opencore_author="-lopencore_common"
 omx_wmv_component_m_lib=""
 MODS_pvasflocalpbreg="-lopencore_common -lpvasfcommon"
 pvrmffparsernode_m_lib=""
@@ -1117,6 +703,7 @@
 pvmedialayernode_y_mk=""
 pvoma1ffrecognizer_y_lib=""
 pvrtsp_cli_eng_node_3gpp_m_mk=""
+shoutcast_support_flag=""
 protocolenginenode_plugins_pvasfstreaming="pe_http.mk"
 pvdbmanager_y_mk=""
 pv_amr_nb_common_imp_lib_m_mk=""
@@ -1126,13 +713,13 @@
 opencore_common_so_name="opencore_common"
 pvmp4ffcomposernodeopencore_m_mk="/nodes/pvmp4ffcomposernode/build_opencore/make"
 pvrmff_y_lib=""
-omx_mp3_component_y_mk=""
+pvjitterbufferrtp_y_mk=""
 SOLIBS_opencore_2way="-lpv2wayengine -lpv324m -lpvvideoparsernode -lpvcommsionode -lpvmio_comm_loopback -lpvgeneraltools "
-SOLIBS_opencore_player="        -lcpm -lpassthru_oma1  -lpvid3parcom -lpvamrffparsernode -lpvamrffrecognizer -lpvmp3ff  -lpvmp3ffparsernode -lpvmp3ffrecognizer  -lpvmp4ff -lmp4recognizer_utility -lpvaacparser -lpvaacffparsernode  -lpvaacffrecognizer -lpvwavffparsernode -lpvwavffrecognizer           -lpvmfrecognizer   -lpvframemetadatautility -lpvplayer_engine"
+SOLIBS_opencore_player="        -lcpm -lpassthru_oma1 -lpvpvxparser -lpvid3parcom -lpvamrffparsernode -lpvamrffrecognizer -lpvmp3ff  -lpvmp3ffparsernode -lpvmp3ffrecognizer  -lpvmp4ff -lmp4recognizer_utility -lpvaacparser -lpvaacffparsernode  -lpvaacffrecognizer -lpvwavffparsernode -lpvwavffrecognizer           -lpvmfrecognizer   -lpvframemetadatautility -lpvplayer_engine"
 MODS_opencore_mp4localreg="-lopencore_player -lopencore_common"
 rdt_parser_y_mk=""
 LIBDIR_packetsources_static="n"
-SOLIBDIRS_omx_amrdec_sharedlibrary="/codecs_v2/omx/omx_amr/build/make_multithreaded /codecs_v2/audio/gsm_amr/amr_nb/dec/build/make /codecs_v2/audio/gsm_amr/amr_wb/dec/build/make"
+pvasflocalpbreginterface_m_lib=""
 pvjanusplugininterface_m_mk=""
 pvmedialayernode_plugins_pvasfstreaming="ml_asf.mk"
 pv_rtsp_parcom_y_mk=""
@@ -1140,8 +727,6 @@
 pvmiofileoutput_m_mk="/pvmi/media_io/pvmiofileoutput/build/make"
 aacdecnode_m_lib=""
 pvcrypto_m_mk=""
-rtppayloadparser_plugins_pvrtsp="rfc_2429.mk rfc_3016.mk rfc_3267.mk rfc_3640.mk rfc_3984.mk"
-DYNAMIC_LOAD_OMX_AVCENC_COMPONENT=1
 pvvideoencnode_m_lib=""
 USE_OMX_ENC_NODE=1
 pvamrwbdecoder_y_mk=""
@@ -1154,38 +739,41 @@
 colorconvert_y_lib=""
 pvm4vencoder_m_lib="-lpvm4vencoder"
 pv_aac_dec_y_lib=""
-omx_mp3dec_sharedlibrary_so_name="omx_mp3dec_sharedlibrary"
+pvjitterbufferrtp_m_mk="/nodes/streaming/jitterbuffernode/jitterbuffer/rtp/build/make"
 omx_wma_component_m_mk=""
 SOLIBS_pvasflocalpbreg=" "
 opencore_2way_so_name="opencore_2way"
 pv_http_parcom_y_mk=""
 pvgsmamrparser_y_lib=""
-pvfileoutputnode_m_lib="-lpvfileoutputnode"
+pvjitterbuffercommon_y_mk=""
+pvwmadecnode_y_lib=""
 pvmedialayernode_opencore_m_mk=""
 omx_wmvdec_sharedlibrary_so_name=""
 opencore_rtspreg_so_name="opencore_rtspreg"
 rfc_2429_mk="rfc_2429.mk"
 SOLIBDIRS_opencore_net_support="/nodes/pvsocketnode/build/make /protocols/http_parcom/build/make"
-LIBDIR_audio_static="         "
+pvjitterbuffercommon_m_mk="/nodes/streaming/jitterbuffernode/jitterbuffer/common/build/make"
 pvoma1ffrecognizer_m_lib=""
 wmvdecoder_m_mk=""
 rtprtcp_y_lib=""
 rfc_3984_mk="rfc_3984.mk"
-LIBDIR_shared="/oscl     /baselibs/gen_data_structures/build/make /baselibs/media_data_structures/build/make /baselibs/pv_mime_utils/build/make /baselibs/threadsafe_callback_ao/build/make /baselibs/thread_messaging/build/make /codecs_v2/omx/omx_h264/build/make_multithreaded /codecs_v2/omx/omx_m4v/build/make_multithreaded  /codecs_v2/omx/omx_aac/build/make_multithreaded /codecs_v2/omx/omx_amr/build/make_multithreaded /codecs_v2/omx/omx_mp3/build/make_multithreaded  /codecs_v2/omx/omx_amrenc/build/make_multithreaded /codecs_v2/omx/omx_m4venc/build/make_multithreaded /codecs_v2/omx/omx_h264enc/build/make_multithreaded /codecs_v2/omx/omx_common/build/make_multithreaded /codecs_v2/omx/omx_queue/build/make /codecs_v2/omx/omx_proxy/build/make /codecs_v2/omx/omx_baseclass/build/make /codecs_v2/omx/omx_mastercore/build/make_multithreaded /codecs_v2/omx/omx_sharedlibrary/interface/build/make   /codecs_v2/audio/aac/dec/build/make /codecs_v2/audio/gsm_amr/amr_nb/common/build/make /codecs_v2/audio/gsm_amr/amr_wb/dec/build/make /codecs_v2/audio/gsm_amr/amr_nb/dec/build/make /codecs_v2/audio/mp3/dec/build/make  /codecs_v2/audio/gsm_amr/common/dec/build/make /codecs_v2/audio/gsm_amr/amr_nb/enc/build/make /codecs_v2/video/avc_h264/common/build/make /codecs_v2/video/avc_h264/dec/build/make  /codecs_v2/video/m4v_h263/dec/build/make  /codecs_v2/video/m4v_h263/enc/build/make /codecs_v2/video/avc_h264/enc/build/make /codecs_v2/utilities/m4v_config_parser/build/make /codecs_v2/utilities/pv_config_parser/build/make /codecs_v2/utilities/colorconvert/build/make /fileformats/common/parser/build/make /fileformats/id3parcom/build/make  /fileformats/wav/parser/build/make  /fileformats/avi/parser/build/make  /fileformats/mp3/parser/build/make /fileformats/rawaac/parser/build/make /fileformats/rawgsmamr/parser/build/make    /fileformats/mp4/parser/utils/mp4recognizer/build/make /fileformats/mp4/parser/build_opencore/make  /fileformats/mp4/composer/build_opencore/make    /protocols/http_parcom/build/make /protocols/rtp_payload_parser/util/build/latmparser/make /protocols/sdp/parser/build/make /protocols/sdp/common/build/make  /protocols/rtsp_parcom/build/make   /protocols/rtsp_client_engine/build_opencore/make /protocols/rtp_payload_parser/build/make /protocols/rtp/build/make /protocols/systems/3g-324m_pvterminal/build/make/ /protocols/systems/common/build/make/ /protocols/systems/tools/general/build/make /pvmi/content_policy_manager/build/make /pvmi/content_policy_manager/plugins/oma1/passthru/build/make   /pvmi/content_policy_manager/plugins/common/build/make  /pvmi/media_io/pvmiofileoutput/build/make /pvmi/media_io/pvmi_mio_fileinput/build/make_pvauthor /pvmi/media_io/pvmi_mio_avi_wav_fileinput/build/make /pvmi/media_io/pvmio_comm_loopback/build/make /pvmi/recognizer/build/make /pvmi/recognizer/plugins/pvaacffrecognizer/build/make /pvmi/recognizer/plugins/pvamrffrecognizer/build/make   /pvmi/recognizer/plugins/pvmp3ffrecognizer/build/make /pvmi/recognizer/plugins/pvmp4ffrecognizer/build/make /pvmi/recognizer/plugins/pvwavffrecognizer/build/make    /pvmi/pvmf/build/make        /nodes/pvfileoutputnode/build/make /nodes/pvmediaoutputnode/build/make /nodes/pvsocketnode/build/make  /nodes/pvprotocolenginenode/build/make_segments   /nodes/pvwavffparsernode/build/make   /nodes/pvomxencnode/build/make /nodes/pvomxbasedecnode/build/make /nodes/pvomxaudiodecnode/build/make /nodes/pvomxvideodecnode/build/make  /nodes/pvaacffparsernode/build/make  /nodes/pvamrffparsernode/build/make   /nodes/pvmp3ffparsernode/build/make  /nodes/pvmp4ffparsernode/build_opencore/make     /nodes/common/build/make  /nodes/pvmediainputnode/build/make_pvauthor  /nodes/pvmp4ffcomposernode/build_opencore/make     /nodes/pvdownloadmanagernode/build/make   /nodes/streaming/streamingmanager/build/make_segments   /modules/linux_rtsp/core/build/make /modules/linux_rtsp/node_registry/build/make /nodes/streaming/medialayernode/build/make  /nodes/streaming/jitterbuffernode/build/make  /nodes/pvcommsionode/build/make /nodes/pvclientserversocketnode/build/make /nodes/pvloopbacknode/build/make /nodes/pvvideoparsernode/build/make /nodes/pvdummyinputnode/build/make /nodes/pvdummyoutputnode/build/make  /engines/player/build/make /engines/author/build/make /engines/2way/build/make /engines/common/build/make /engines/adapters/player/framemetadatautility/build/make /modules/linux_rtsp/core/build/make /modules/linux_rtsp/node_registry/build/make   /modules/linux_download/core/build/make /modules/linux_download/node_registry/build/make /modules/linux_mp4/core/build/make /modules/linux_mp4/node_registry/build/make  "
+LIBDIR_shared="/oscl     /baselibs/gen_data_structures/build/make /baselibs/media_data_structures/build/make /baselibs/pv_mime_utils/build/make /baselibs/threadsafe_callback_ao/build/make /baselibs/thread_messaging/build/make /codecs_v2/omx/omx_h264/build/make_multithreaded /codecs_v2/omx/omx_m4v/build/make_multithreaded  /codecs_v2/omx/omx_aac/build/make_multithreaded /codecs_v2/omx/omx_amr/build/make_multithreaded /codecs_v2/omx/omx_mp3/build/make_multithreaded  /codecs_v2/omx/omx_amrenc/build/make_multithreaded /codecs_v2/omx/omx_m4venc/build/make_multithreaded /codecs_v2/omx/omx_h264enc/build/make_multithreaded /codecs_v2/omx/omx_common/build/make_multithreaded /codecs_v2/omx/omx_queue/build/make /codecs_v2/omx/omx_proxy/build/make /codecs_v2/omx/omx_baseclass/build/make /codecs_v2/omx/omx_mastercore/build/make_multithreaded /codecs_v2/omx/omx_sharedlibrary/interface/build/make   /codecs_v2/audio/aac/dec/build/make /codecs_v2/audio/gsm_amr/amr_nb/common/build/make /codecs_v2/audio/gsm_amr/amr_wb/dec/build/make /codecs_v2/audio/gsm_amr/amr_nb/dec/build/make /codecs_v2/audio/mp3/dec/build/make  /codecs_v2/audio/gsm_amr/common/dec/build/make /codecs_v2/audio/gsm_amr/amr_nb/enc/build/make /codecs_v2/video/avc_h264/common/build/make /codecs_v2/video/avc_h264/dec/build/make  /codecs_v2/video/m4v_h263/dec/build/make  /codecs_v2/video/m4v_h263/enc/build/make /codecs_v2/video/avc_h264/enc/build/make /codecs_v2/utilities/m4v_config_parser/build/make /codecs_v2/utilities/pv_config_parser/build/make /codecs_v2/utilities/colorconvert/build/make /fileformats/common/parser/build/make /fileformats/id3parcom/build/make /fileformats/pvx/parser/build/make /fileformats/wav/parser/build/make  /fileformats/avi/parser/build/make  /fileformats/mp3/parser/build/make /fileformats/rawaac/parser/build/make /fileformats/rawgsmamr/parser/build/make    /fileformats/mp4/parser/utils/mp4recognizer/build/make /fileformats/mp4/parser/build_opencore/make  /fileformats/mp4/composer/build_opencore/make     /protocols/http_parcom/build/make /protocols/rtp_payload_parser/util/build/latmparser/make /protocols/sdp/parser/build/make /protocols/sdp/common/build/make  /protocols/rtsp_parcom/build/make   /protocols/rtsp_client_engine/build_opencore/make /protocols/rtp_payload_parser/build/make /protocols/rtp/build/make /protocols/systems/3g-324m_pvterminal/build/make/ /protocols/systems/common/build/make/ /protocols/systems/tools/general/build/make /pvmi/content_policy_manager/build/make /pvmi/content_policy_manager/plugins/oma1/passthru/build/make  /pvmi/content_policy_manager/plugins/common/build/make  /pvmi/media_io/pvmiofileoutput/build/make /pvmi/media_io/pvmi_mio_fileinput/build/make_pvauthor /pvmi/media_io/pvmi_mio_avi_wav_fileinput/build/make /pvmi/media_io/pvmio_comm_loopback/build/make /pvmi/recognizer/build/make /pvmi/recognizer/plugins/pvaacffrecognizer/build/make /pvmi/recognizer/plugins/pvamrffrecognizer/build/make   /pvmi/recognizer/plugins/pvmp3ffrecognizer/build/make /pvmi/recognizer/plugins/pvmp4ffrecognizer/build/make /pvmi/recognizer/plugins/pvwavffrecognizer/build/make    /pvmi/pvmf/build/make      /nodes/pvfileoutputnode/build/make /nodes/pvmediaoutputnode/build/make /nodes/pvsocketnode/build/make  /nodes/pvprotocolenginenode/build/make_segments   /nodes/pvwavffparsernode/build/make   /nodes/pvomxencnode/build/make /nodes/pvomxbasedecnode/build/make /nodes/pvomxaudiodecnode/build/make /nodes/pvomxvideodecnode/build/make  /nodes/pvaacffparsernode/build/make  /nodes/pvamrffparsernode/build/make   /nodes/pvmp3ffparsernode/build/make  /nodes/pvmp4ffparsernode/build_opencore/make     /nodes/common/build/make   /nodes/pvmediainputnode/build/make_pvauthor  /nodes/pvmp4ffcomposernode/build_opencore/make    /nodes/pvdownloadmanagernode/build/make   /nodes/streaming/streamingmanager/build/make_segments   /modules/linux_rtsp/core/build/make /modules/linux_rtsp/node_registry/build/make /nodes/streaming/medialayernode/build/make  /nodes/streaming/jitterbuffernode/jitterbuffer/common/build/make /nodes/streaming/jitterbuffernode/jitterbuffer/rtp/build/make  /nodes/streaming/jitterbuffernode/build/make /nodes/pvcommsionode/build/make /nodes/pvclientserversocketnode/build/make /nodes/pvloopbacknode/build/make /nodes/pvvideoparsernode/build/make /nodes/pvdummyinputnode/build/make /nodes/pvdummyoutputnode/build/make  /engines/player/build/make /engines/author/build/make /engines/2way/build/make /engines/common/build/make /engines/adapters/player/framemetadatautility/build/make /modules/linux_rtsp/core/build/make /modules/linux_rtsp/node_registry/build/make   /modules/linux_download/core/build/make /modules/linux_download/node_registry/build/make /modules/linux_mp4/core/build/make /modules/linux_mp4/node_registry/build/make      "
 pdl_support_mk="pe_pdl.mk"
 wmadecoder_m_mk=""
 omx_aacdec_sharedlibrary_so_name="omx_aacdec_sharedlibrary"
 pv_so_name=""
 asf_payload_mk=""
 pvmioaviwavfileinput_m_lib="-lpvmioaviwavfileinput"
+SOLIBDIRS_pvwmdrmsysclk="n"
 protocolenginenode_segments_y_mk=""
 pvamrencnode_m_lib=""
 pvrvdecnode_y_mk=""
 pvmp3ffrecognizer_m_mk="/pvmi/recognizer/plugins/pvmp3ffrecognizer/build/make"
+MODS_pvwmdrmsysclk="-lopencore_player -lopencore_common"
 LIBDIR_omxjoint_shared="/codecs_v2/omx/omx_common/build/make_multithreaded /codecs_v2/omx/omx_queue/build/make /codecs_v2/omx/omx_proxy/build/make /codecs_v2/omx/omx_baseclass/build/make /codecs_v2/omx/omx_mastercore/build/make_multithreaded /codecs_v2/omx/omx_sharedlibrary/interface/build/make"
 pv324m_m_mk="/protocols/systems/3g-324m_pvterminal/build/make/"
 pvavch264enc_imp_m_mk=""
-LIBS_shared="-losclbase -losclerror -losclmemory -losclproc -losclregcli -losclregserv -losclutil -losclio -lunit_test  -loscllib    -lpvgendatastruct -lpvmediadatastruct -lpvmimeutils -lthreadsafe_callback_ao -lpvthreadmessaging -lomx_avc_component_lib -lomx_m4v_component_lib  -lomx_aac_component_lib -lomx_amr_component_lib -lomx_mp3_component_lib  -lomx_amrenc_component_lib -lomx_m4venc_component_lib -lomx_avcenc_component_lib -lomx_common_lib -lomx_queue_lib -lpvomx_proxy_lib -lomx_baseclass_lib -lomx_mastercore_lib -lpv_omx_interface   -lpv_aac_dec -lpv_amr_nb_common_lib -lpvamrwbdecoder -lpvdecoder_gsmamr -lpvmp3  -lpvencoder_gsmamr -lpv_avc_common_lib -lpvavcdecoder  -lpvmp4decoder  -lpvm4vencoder -lpvavch264enc -lm4v_config -lpv_config_parser -lcolorconvert -lpvfileparserutils -lpvid3parcom  -lpvwav  -lpvavifileparser  -lpvmp3ff -lpvaacparser -lpvgsmamrparser   -lmp4recognizer_utility -lpvmp4ff  -lpvmp4ffcomposer    -lpv_http_parcom -lpvlatmpayloadparser  -lpvsdpparser  -lpv_rtsp_parcom   -lpvrtsp_cli_eng_node -lrtppayloadparser -lrtprtcp -lpv324m -lpvgeneraltools -lcpm -lpassthru_oma1    -lpvmiofileoutput -lpvmiofileinput -lpvmioaviwavfileinput -lpvmio_comm_loopback -lpvmfrecognizer -lpvaacffrecognizer -lpvamrffrecognizer   -lpvmp3ffrecognizer -lpvmp4ffrecognizer -lpvwavffrecognizer    -lpvmf        -lpvfileoutputnode -lpvmediaoutputnode -lpvsocketnode  -lprotocolenginenode   -lpvwavffparsernode   -lpvomxencnode -lpvomxbasedecnode -lpvomxaudiodecnode -lpvomxvideodecnode  -lpvaacffparsernode  -lpvamrffparsernode   -lpvmp3ffparsernode  -lpvmp4ffparsernode      -lpvmediainputnode  -lpvmp4ffcomposernode     -lpvdownloadmanagernode   -lpvstreamingmanagernode   -lpvrtspinterface -lpvrtspreginterface -lpvmedialayernode  -lpvjitterbuffernode  -lpvcommsionode -lpvclientserversocketnode -lpvloopbacknode -lpvvideoparsernode -lpvdummyinputnode -lpvdummyoutputnode  -lpvplayer_engine -lpvauthorengine -lpv2wayengine -lpvframemetadatautility -lpvrtspinterface -lpvrtspreginterface   -lpvdownloadinterface -lpvdownloadreginterface -lpvmp4interface -lpvmp4reginterface  "
+LIBS_shared="-losclbase -losclerror -losclmemory -losclproc -losclregcli -losclregserv -losclutil -losclio -lunit_test  -loscllib    -lpvgendatastruct -lpvmediadatastruct -lpvmimeutils -lthreadsafe_callback_ao -lpvthreadmessaging -lomx_avc_component_lib -lomx_m4v_component_lib  -lomx_aac_component_lib -lomx_amr_component_lib -lomx_mp3_component_lib  -lomx_amrenc_component_lib -lomx_m4venc_component_lib -lomx_avcenc_component_lib -lomx_common_lib -lomx_queue_lib -lpvomx_proxy_lib -lomx_baseclass_lib -lomx_mastercore_lib -lpv_omx_interface   -lpv_aac_dec -lpv_amr_nb_common_lib -lpvamrwbdecoder -lpvdecoder_gsmamr -lpvmp3  -lpvencoder_gsmamr -lpv_avc_common_lib -lpvavcdecoder  -lpvmp4decoder  -lpvm4vencoder -lpvavch264enc -lm4v_config -lpv_config_parser -lcolorconvert -lpvfileparserutils -lpvid3parcom -lpvpvxparser -lpvwav  -lpvavifileparser  -lpvmp3ff -lpvaacparser -lpvgsmamrparser   -lmp4recognizer_utility -lpvmp4ff  -lpvmp4ffcomposer     -lpv_http_parcom -lpvlatmpayloadparser  -lpvsdpparser  -lpv_rtsp_parcom   -lpvrtsp_cli_eng_node -lrtppayloadparser -lrtprtcp -lpv324m -lpvgeneraltools -lcpm -lpassthru_oma1   -lpvmiofileoutput -lpvmiofileinput -lpvmioaviwavfileinput -lpvmio_comm_loopback -lpvmfrecognizer -lpvaacffrecognizer -lpvamrffrecognizer   -lpvmp3ffrecognizer -lpvmp4ffrecognizer -lpvwavffrecognizer    -lpvmf      -lpvfileoutputnode -lpvmediaoutputnode -lpvsocketnode  -lprotocolenginenode   -lpvwavffparsernode   -lpvomxencnode -lpvomxbasedecnode -lpvomxaudiodecnode -lpvomxvideodecnode  -lpvaacffparsernode  -lpvamrffparsernode   -lpvmp3ffparsernode  -lpvmp4ffparsernode      -lpvmediainputnode  -lpvmp4ffcomposernode     -lpvdownloadmanagernode   -lpvstreamingmanagernode   -lpvrtspinterface -lpvrtspreginterface -lpvmedialayernode  -lpvjitterbuffer -lpvjitterbufferrtp  -lpvjitterbuffernode -lpvcommsionode -lpvclientserversocketnode -lpvloopbacknode -lpvvideoparsernode -lpvdummyinputnode -lpvdummyoutputnode  -lpvplayer_engine -lpvauthorengine -lpv2wayengine -lpvframemetadatautility -lpvrtspinterface -lpvrtspreginterface   -lpvdownloadinterface -lpvdownloadreginterface -lpvmp4interface -lpvmp4reginterface      "
 omx_amrenc_component_y_lib=""
 pvgeneraltools_m_lib="-lpvgeneraltools"
 REGISTER_OMX_AAC_COMPONENT=1
@@ -1195,9 +783,8 @@
 pvstreamingmanagernode_plugins_opencore_rtsp="3gpp.mk rtspunicast.mk"
 LIBS_omxjoint_shared="-lomx_common_lib -lomx_queue_lib -lpvomx_proxy_lib -lomx_baseclass_lib -lomx_mastercore_lib -lpv_omx_interface"
 pvasfffrecognizer_m_lib=""
-SOLIBS_pv="-losclbase -losclerror -losclmemory -losclproc -losclregcli -losclregserv -losclutil -losclio -lunit_test  -loscllib  -lpv_aac_dec -lpvmp3  -lpvdecoder_gsmamr -lpvencoder_gsmamr -lpv_amr_nb_common_lib -lpvamrwbdecoder -lpvavcdecoder -lpv_avc_common_lib -lpvavch264enc  -lpvmp4decoder -lpvm4vencoder  -lgetactualaacconfig -lcolorconvert -lm4v_config -lpv_config_parser -lomx_avc_component_lib -lomx_m4v_component_lib  -lomx_aac_component_lib -lomx_amr_component_lib -lomx_mp3_component_lib  -lomx_common_lib -lomx_queue_lib -lpvomx_proxy_lib -lomx_baseclass_lib -lomx_mastercore_lib -lpv_omx_interface -lthreadsafe_callback_ao -lpvmediadatastruct -lpvmimeutils -lpvgendatastruct -lpvmf -lcpm -lpassthru_oma1 -lpvmiofileoutput -lpvfileparserutils -lpvid3parcom  -lpvmp4ff -lmp4recognizer_utility  -lpvmp4ffcomposer  -lpvmp4ffcomposernode      -lpvmediainputnode -lpvmediaoutputnode -lpvfileoutputnode -lpvgsmamrparser -lpvamrffparsernode  -lpvamrffrecognizer -lpvaacparser -lpvaacffparsernode  -lpvaacffrecognizer -lpvmp3ff  -lpvmp3ffparsernode -lpvmp3ffrecognizer    -lpvomxvideodecnode -lpvomxaudiodecnode -lpvomxbasedecnode        -lpvwavffparsernode -lpvwavffrecognizer     -lpvmfrecognizer -lpvmiofileinput -lpvmioaviwavfileinput -lpvframemetadatautility -lpvplayer_engine -lpvauthorengine -lpv324m -lpv2wayengine -lpvavifileparser -lpvthreadmessaging -lpvlatmpayloadparser "
+SOLIBS_pv="-losclbase -losclerror -losclmemory -losclproc -losclregcli -losclregserv -losclutil -losclio -lunit_test  -loscllib  -lpv_aac_dec -lpvmp3  -lpvdecoder_gsmamr -lpvencoder_gsmamr -lpv_amr_nb_common_lib -lpvamrwbdecoder -lpvavcdecoder -lpv_avc_common_lib -lpvavch264enc  -lpvmp4decoder -lpvm4vencoder  -lgetactualaacconfig -lcolorconvert -lm4v_config -lpv_config_parser -lomx_avc_component_lib -lomx_m4v_component_lib  -lomx_aac_component_lib -lomx_amr_component_lib -lomx_mp3_component_lib  -lomx_common_lib -lomx_queue_lib -lpvomx_proxy_lib -lomx_baseclass_lib -lomx_mastercore_lib -lpv_omx_interface -lthreadsafe_callback_ao -lpvmediadatastruct -lpvmimeutils -lpvgendatastruct -lpvmf -lcpm -lpassthru_oma1 -lpvmiofileoutput -lpvfileparserutils -lpvid3parcom  -lpvmp4ff -lmp4recognizer_utility  -lpvmp4ffcomposer  -lpvmp4ffcomposernode  -lpvpvxparser -lpvmediainputnode -lpvmediaoutputnode -lpvfileoutputnode -lpvgsmamrparser -lpvamrffparsernode -lpvamrffrecognizer -lpvaacparser -lpvaacffparsernode  -lpvaacffrecognizer -lpvmp3ff  -lpvmp3ffparsernode -lpvmp3ffrecognizer    -lpvomxvideodecnode -lpvomxaudiodecnode -lpvomxbasedecnode        -lpvwavffparsernode -lpvwavffrecognizer     -lpvmfrecognizer -lpvmiofileinput -lpvmioaviwavfileinput -lpvframemetadatautility -lpvplayer_engine -lpvauthorengine -lpv324m -lpv2wayengine -lpvavifileparser -lpvthreadmessaging -lpvlatmpayloadparser  "
 pvmp3ffparsernode_y_lib=""
-pvjitterbuffernode_opencore_m_lib=""
 MODS_opencore_player="-lopencore_common"
 pvjitterbuffernode_m_lib="-lpvjitterbuffernode"
 MODS_pvwmdrmplat="-lopencore_player -lopencore_common"
@@ -1209,7 +796,6 @@
 pvra8decoder_m_mk=""
 pvrmffparser_y_lib=""
 pvmp4decoder_m_lib="-lpvmp4decoder"
-omx_avc_component_m_lib="-lomx_avc_component_lib"
 MODS_omx_avcenc_sharedlibrary="-lomx_sharedlibrary -lopencore_common "
 pvwmvdecnode_m_mk=""
 pvwav_y_mk=""
@@ -1220,13 +806,14 @@
 pvaacparser_m_mk="/fileformats/rawaac/parser/build/make"
 omx_aac_component_m_lib="-lomx_aac_component_lib"
 SOLIBS_omx_wmadec_sharedlibrary=" "
-SOLIBS_opencore_rtsp="-lpvrtspinterface -lpvstreamingmanagernode -lpv_rtsp_parcom -lpvrtsp_cli_eng_node -lrtppayloadparser -lrtprtcp -lpvjitterbuffernode -lpvmedialayernode  -lpvsdpparser"
+SOLIBS_opencore_rtsp="-lpvrtspinterface -lpvstreamingmanagernode -lpv_rtsp_parcom -lpvrtsp_cli_eng_node -lrtppayloadparser -lrtprtcp -lpvjitterbuffer -lpvjitterbufferrtp -lpvjitterbuffernode -lpvmedialayernode  -lpvsdpparser"
 omx_amrenc_component_imp_m_lib=""
 pvjanusplugin_m_lib=""
 config_3gpp_mk="3gpp.mk"
 pvaacffrecognizer_y_mk=""
 pvvideoencnode_y_lib=""
 pvaacffparsernode_y_mk=""
+pvwmdrmsysclkinterface_m_mk=""
 pvomx_proxy_m_lib="-lpvomx_proxy_lib"
 pvrvdecnode_m_mk=""
 pvavcdecoder_imp_m_lib=""
@@ -1236,7 +823,7 @@
 MODS_opencore_mp4local="-lopencore_common -lopencore_player"
 pvavch264enc_y_mk=""
 rtppayloadparser_m_lib="-lrtppayloadparser"
-pvcrypto_y_mk=""
+pvwav_y_lib=""
 pvmp4ffparsernodeopencore_m_mk="/nodes/pvmp4ffparsernode/build_opencore/make"
 SOLIBDIRS_pvmtpdb="  "
 LIBDIR_codecs_v2_static="                                 "
@@ -1253,12 +840,12 @@
 pv2wayengine_m_mk="/engines/2way/build/make"
 MODS_opencore_rtspreg="-lopencore_player -lopencore_common"
 pvmtp_engine_m_lib=""
+LIBS_recognizer_shared="-lpvmfrecognizer -lpvaacffrecognizer -lpvamrffrecognizer   -lpvmp3ffrecognizer -lpvmp4ffrecognizer -lpvwavffrecognizer  "
 pvdivxffparsernode_m_lib=""
 aacdecnode_y_mk=""
 pvasfffrecognizer_y_mk=""
 wmadecoder_y_lib=""
 engines_common_headers_y_mk=""
-MODS_omx_mp3dec_sharedlibrary="-lomx_sharedlibrary -lopencore_common"
 asfrecognizer_utility_m_mk=""
 oscllib_lib="-loscllib"
 pvrmffparsernode_m_mk=""
@@ -1267,13 +854,13 @@
 LIBDIR_baselibs_static="       "
 pvwav_m_lib="-lpvwav"
 omx_avc_component_y_lib=""
-pvmp4decoder_imp_m_lib=""
+omx_wmv_component_imp_m_mk="n"
 pv_rtsp_parcom_y_lib=""
 pvmedialayernode_opencore_m_lib=""
 pvmioaviwavfileinput_m_mk="/pvmi/media_io/pvmi_mio_avi_wav_fileinput/build/make"
 omx_mp3_component_m_mk="/codecs_v2/omx/omx_mp3/build/make_multithreaded"
 pvwmdrm_y_mk=""
-LIBDIR_static=" /oscl/unit_test/build/make                                                                                                                                                              "
+LIBDIR_static=" /oscl/unit_test/build/make                                                                                                                                                                 "
 SOLIBS_opencore_mp4local="-lpvmp4interface  -lpvmp4ffparsernode"
 config_3gpp_pvr_asf_mk=""
 pvavch264enc_imp_m_lib=""
@@ -1281,14 +868,15 @@
 LIBS_omxdec_static="         "
 pvwmadecnode_m_lib=""
 REGISTER_OMX_WMA_COMPONENT=0
-pvrmffrecognizer_m_mk=""
 SOLIBS_opencore_net_support="-lpvsocketnode -lpv_http_parcom"
 pv_http_parcom_m_lib="-lpv_http_parcom"
 pvmediadatastruct_m_lib="-lpvmediadatastruct"
+pvstreamingmanagernode_3gpp_m_mk=""
+pvcrypto_y_mk=""
 pvlatmpayloadparser_m_lib="-lpvlatmpayloadparser"
 pv_config_parser_y_mk=""
 pvstreamingmanagernode_plugins="  3gpp.mk rtspunicast.mk    "
-TARGET_shared=" opencore_common opencore_author opencore_player opencore_2way omx_sharedlibrary omx_avcdec_sharedlibrary omx_m4vdec_sharedlibrary  omx_aacdec_sharedlibrary omx_amrdec_sharedlibrary omx_mp3dec_sharedlibrary  omx_avcenc_sharedlibrary omx_m4venc_sharedlibrary omx_amrenc_sharedlibrary opencore_net_support opencore_downloadreg opencore_download opencore_rtspreg opencore_rtsp      opencore_mp4localreg opencore_mp4local     "
+TARGET_shared=" opencore_common opencore_author opencore_player opencore_2way omx_sharedlibrary omx_avcdec_sharedlibrary omx_m4vdec_sharedlibrary  omx_aacdec_sharedlibrary omx_amrdec_sharedlibrary omx_mp3dec_sharedlibrary  omx_avcenc_sharedlibrary omx_m4venc_sharedlibrary omx_amrenc_sharedlibrary opencore_net_support opencore_downloadreg opencore_download opencore_rtspreg opencore_rtsp      opencore_mp4localreg opencore_mp4local      "
 pvsdpparser_opencore_y_lib=""
 omx_aac_component_m_mk="/codecs_v2/omx/omx_aac/build/make_multithreaded"
 LIBS_oscl_static=" -lunit_test"
@@ -1296,21 +884,21 @@
 pvfileoutputnode_m_mk="/nodes/pvfileoutputnode/build/make"
 wmadecoder_imp_m_lib="n"
 pv_rtsp_parcom_m_mk="/protocols/rtsp_parcom/build/make"
-ftdl_support_mk=""
+opencore_mp4local_so_name="opencore_mp4local"
 omx_wma_component_y_lib=""
 pv_config_parser_m_lib="-lpv_config_parser"
 m4v_config_y_mk=""
 pvcrypto_m_lib=""
 SOLIBDIRS_omx_avcdec_sharedlibrary="/codecs_v2/omx/omx_h264/build/make_multithreaded /codecs_v2/video/avc_h264/dec/build/make"
-LIBS_fileformats_shared="-lpvfileparserutils -lpvid3parcom  -lpvwav  -lpvavifileparser  -lpvmp3ff -lpvaacparser -lpvgsmamrparser   -lmp4recognizer_utility -lpvmp4ff  -lpvmp4ffcomposer   "
+LIBS_fileformats_shared="-lpvfileparserutils -lpvid3parcom -lpvpvxparser -lpvwav  -lpvavifileparser  -lpvmp3ff -lpvaacparser -lpvgsmamrparser   -lmp4recognizer_utility -lpvmp4ff  -lpvmp4ffcomposer    "
 gsmamrdecnode_y_mk=""
 LIBS_engines_static="   "
-pvjanusplugin_m_mk=""
-LIBS_static=" -lunit_test                                                                                                                                                           "
+oscl_m_mk="/oscl"
+LIBS_static=" -lunit_test                                                                                                                                                              "
 pvsqlite_y_lib=""
 pvasfffparsernode_y_lib=""
 pvmp3_m_lib="-lpvmp3"
-SOLIBDIRS_opencore_player="        /pvmi/content_policy_manager/build/make /pvmi/content_policy_manager/plugins/oma1/passthru/build/make  /fileformats/id3parcom/build/make /nodes/pvamrffparsernode/build/make /pvmi/recognizer/plugins/pvamrffrecognizer/build/make /fileformats/mp3/parser/build/make  /nodes/pvmp3ffparsernode/build/make /pvmi/recognizer/plugins/pvmp3ffrecognizer/build/make  /fileformats/mp4/parser/build_opencore/make /fileformats/mp4/parser/utils/mp4recognizer/build/make /fileformats/rawaac/parser/build/make /nodes/pvaacffparsernode/build/make  /pvmi/recognizer/plugins/pvaacffrecognizer/build/make /nodes/pvwavffparsernode/build/make /pvmi/recognizer/plugins/pvwavffrecognizer/build/make           /pvmi/recognizer/build/make   /engines/adapters/player/framemetadatautility/build/make /engines/player/build/make"
+SOLIBDIRS_opencore_player="        /pvmi/content_policy_manager/build/make /pvmi/content_policy_manager/plugins/oma1/passthru/build/make /fileformats/pvx/parser/build/make /fileformats/id3parcom/build/make /nodes/pvamrffparsernode/build/make /pvmi/recognizer/plugins/pvamrffrecognizer/build/make /fileformats/mp3/parser/build/make  /nodes/pvmp3ffparsernode/build/make /pvmi/recognizer/plugins/pvmp3ffrecognizer/build/make  /fileformats/mp4/parser/build_opencore/make /fileformats/mp4/parser/utils/mp4recognizer/build/make /fileformats/rawaac/parser/build/make /nodes/pvaacffparsernode/build/make  /pvmi/recognizer/plugins/pvaacffrecognizer/build/make /nodes/pvwavffparsernode/build/make /pvmi/recognizer/plugins/pvwavffrecognizer/build/make           /pvmi/recognizer/build/make   /engines/adapters/player/framemetadatautility/build/make /engines/player/build/make"
 pvfileoutputnode_y_lib=""
 pvstreamingmanagernode_plugins_pvasfstreaming="asf.mk mshttp.mk"
 omx_avcdec_sharedlibrary_so_name="omx_avcdec_sharedlibrary"
@@ -1319,7 +907,7 @@
 pvencoder_gsmamr_m_lib="-lpvencoder_gsmamr"
 SOLIBS_omx_amrenc_sharedlibrary="-lomx_amrenc_component_lib -lpvencoder_gsmamr"
 pvplayer_engine_m_lib="-lpvplayer_engine"
-pvpvxparser_m_lib=""
+pvpvxparser_m_lib="-lpvpvxparser"
 pvmp3ffparsernode_m_lib="-lpvmp3ffparsernode"
 passthru_oma1_y_mk=""
 pvmp4ffcomposernode_y_lib=""
@@ -1327,18 +915,21 @@
 LIBDIR_cpm_static="    "
 pvrtspinterface_m_mk="/modules/linux_rtsp/core/build/make"
 wmvdecoder_m_lib=""
+pvomxbasedecnode_m_mk="/nodes/pvomxbasedecnode/build/make"
 opencore_downloadreg_so_name="opencore_downloadreg"
 omx_avcenc_component_y_mk=""
 pvra8decnode_m_mk=""
+ftdl_support_mk=""
 pvamrwbdecoder_imp_m_lib=""
 oscl_m_lib="-losclbase -losclerror -losclmemory -losclproc -losclregcli -losclregserv -losclutil -losclio -lunit_test"
-CONFIG_FLAGS="USE_CML2_CONFIG"
-pvomxbasedecnode_m_mk="/nodes/pvomxbasedecnode/build/make"
+CONFIG_FLAGS="USE_CML2_CONFIG "
+pvjitterbuffercommon_m_lib="-lpvjitterbuffer"
 SOLIBDIRS_pvasflocalpbreg=" "
 pvasfffrecognizer_y_lib=""
 mp4recognizer_utility_y_mk=""
 pvmediainputnode_y_mk=""
 REGISTER_OMX_H263_COMPONENT=1
+scsp_y_mk=""
 pvmp3_m_mk="/codecs_v2/audio/mp3/dec/build/make"
 LIBS_codecs_utilities_static="  "
 LIBDIR_omxjointimp_shared="/codecs_v2/omx/omx_mastercore/build/make_multithreaded"
@@ -1347,6 +938,7 @@
 SOLIBDIRS_omx_aacdec_sharedlibrary="/codecs_v2/omx/omx_aac/build/make_multithreaded /codecs_v2/audio/aac/dec/build/make"
 pvmp4reginterface_m_lib="-lpvmp4reginterface"
 pvavcdecnode_m_lib=""
+pvmp4decoder_imp_m_lib=""
 pvpvrnode_y_lib=""
 unit_test_y_lib="-lunit_test"
 pvpvrff_y_lib=""
@@ -1357,7 +949,7 @@
 omx_m4venc_component_m_mk="/codecs_v2/omx/omx_m4venc/build/make_multithreaded"
 SOLIBDIRS_omx_m4vdec_sharedlibrary="/codecs_v2/omx/omx_m4v/build/make_multithreaded /codecs_v2/video/m4v_h263/dec/build/make"
 pvcommsionode_m_mk="/nodes/pvcommsionode/build/make"
-pvmp4reginterface_m_mk="/modules/linux_mp4/node_registry/build/make"
+pvjitterbufferasf_m_mk=""
 pvgeneraltools_m_mk="/protocols/systems/tools/general/build/make"
 unit_test_m_mk=""
 omx_m4venc_component_imp_m_lib=""
@@ -1379,28 +971,28 @@
 MODS_pvwmdrm="-lopencore_player -lopencore_common"
 wmvdecoder_imp_m_mk="n"
 pvamrwbdecoder_m_mk="/codecs_v2/audio/gsm_amr/amr_wb/dec/build/make"
+omx_mp3_component_y_mk=""
 pvrtsp_cli_eng_node_opencore_m_mk="/protocols/rtsp_client_engine/build_opencore/make"
 mshttp_support_mk=""
 opencore_download_so_name="opencore_download"
 SOLIBS_pvmtpdb="  "
 SOLIBS_opencore_downloadreg="-lpvdownloadreginterface"
 mp3decnode_m_mk=""
-SOLIBS_omx_sharedlibrary="-lomx_common_lib -lomx_queue_lib -lpvomx_proxy_lib -lomx_baseclass_lib -lpv_omx_interface"
+pvdecoder_gsmamr_imp_m_mk=""
 pvwavffrecognizer_y_lib=""
 pvavcencnode_m_lib=""
 pvjitterbuffernode_y_lib=""
 pvmediadatastruct_m_mk="/baselibs/media_data_structures/build/make"
 REGISTER_OMX_M4VENC_COMPONENT=1
-LIBDIR_fileformats_static="                   "
+LIBDIR_fileformats_static="                    "
 pvpvrff_y_mk=""
 pvpvrnode_y_mk=""
 MODS_omx_amrenc_sharedlibrary="-lomx_sharedlibrary -lopencore_common "
-LIBS_cpm_shared="-lcpm -lpassthru_oma1   "
+LIBS_cpm_shared="-lcpm -lpassthru_oma1  "
 pvmediainputnode_y_lib=""
 pvmiofileinput_y_mk=""
 pvmiofileoutput_m_lib="-lpvmiofileoutput"
 pvmp4ffparsernode_m_lib=""
-omx_m4venc_component_y_mk=""
 LIBDIR_omxdecimp_static=""
 omx_amr_component_y_lib=""
 rvdecoder_y_lib=""
@@ -1410,25 +1002,26 @@
 pvsqlite_m_lib=""
 pvmp4ffopencore_m_mk="/fileformats/mp4/parser/build_opencore/make"
 pv_amr_nb_common_lib_m_mk="/codecs_v2/audio/gsm_amr/amr_nb/common/build/make"
-LIBDIR_tools_v2_shared="/modules/linux_rtsp/core/build/make /modules/linux_rtsp/node_registry/build/make   /modules/linux_download/core/build/make /modules/linux_download/node_registry/build/make /modules/linux_mp4/core/build/make /modules/linux_mp4/node_registry/build/make  "
+LIBDIR_tools_v2_shared="/modules/linux_rtsp/core/build/make /modules/linux_rtsp/node_registry/build/make   /modules/linux_download/core/build/make /modules/linux_download/node_registry/build/make /modules/linux_mp4/core/build/make /modules/linux_mp4/node_registry/build/make      "
 DYNAMIC_LOAD_OMX_AMRENC_COMPONENT=1
 pvamrencnode_y_lib=""
 pvjanusplugin_y_mk=""
 pv324m_m_lib="-lpv324m"
 pvvideoencnode_m_mk=""
-LIBDIR_nodes_static="                                                  "
+LIBDIR_nodes_static="                                                    "
 LIBDIR_audio_shared="  /codecs_v2/audio/aac/dec/build/make /codecs_v2/audio/gsm_amr/amr_nb/common/build/make /codecs_v2/audio/gsm_amr/amr_wb/dec/build/make /codecs_v2/audio/gsm_amr/amr_nb/dec/build/make /codecs_v2/audio/mp3/dec/build/make  /codecs_v2/audio/gsm_amr/common/dec/build/make /codecs_v2/audio/gsm_amr/amr_nb/enc/build/make"
+pv2wayengine_y_mk=""
 SOLIBDIRS_pvwmdrmdev="n"
-opencore_mp4local_so_name="opencore_mp4local"
+protocolenginenode_plugins_opencore_download="pe_ps.mk pe_pdl.mk pe_dl_common.mk"
 pvavcdecnode_y_lib=""
 threadsafe_callback_ao_y_lib=""
 pvmimeutils_m_mk="/baselibs/pv_mime_utils/build/make"
 pvmp4ffcomposernodeopencore_y_lib=""
 pvavcdecnode_y_mk=""
-pvjitterbuffernode_opencore_y_lib=""
+pvframemetadatautility_m_lib="-lpvframemetadatautility"
 rdt_parser_m_mk=""
-omx_baseclass_y_mk=""
-pvmp4ffcomposeropencore_y_lib=""
+pvamrwbdecoder_m_lib="-lpvamrwbdecoder"
+USING_OMX=1
 pvfileparserutils_m_lib="-lpvfileparserutils"
 pv_http_parcom_y_lib=""
 pvgendatastruct_m_lib="-lpvgendatastruct"
@@ -1436,6 +1029,7 @@
 SOLIBS_opencore_rtspreg="-lpvrtspreginterface"
 protocolenginenode_m_mk=""
 pvmedialayernode_y_lib=""
+pvclientserversocketnode_m_mk="/nodes/pvclientserversocketnode/build/make"
 pvdivxffrecognizer_m_mk=""
 SOLIBDIRS_omx_avcenc_sharedlibrary="/codecs_v2/omx/omx_h264enc/build/make_multithreaded /codecs_v2/video/avc_h264/enc/build/make"
 pvdownloadmanagernode_m_mk="/nodes/pvdownloadmanagernode/build/make"
diff --git a/build_config/opencore_dynamic/pv_config_selected.mk b/build_config/opencore_dynamic/pv_config_selected.mk
new file mode 100644
index 0000000..ae9fb22
--- /dev/null
+++ b/build_config/opencore_dynamic/pv_config_selected.mk
@@ -0,0 +1,438 @@
+#
+# Automatically generated, don't edit
+#
+# At: Wed, 18 Feb 2009 00:59:11 +0000
+
+#
+# PV Code Base Configuration System
+#
+
+#
+# Menu for selecting supported features
+#
+module_support=y
+shoutcast_support=n
+
+
+#
+# Menu for configuring runtime loadable modules
+#
+pv_so=n
+pvsplit_so=y
+streaming_support=y
+
+#
+# Menu for selecting streaming features
+#
+rtsp_support=y
+asf_streaming_support=n
+
+download_support=y
+mp4local_support=y
+asflocal_support=n
+janus_support=n
+wmdrmplat_support=n
+wmdrmdev_support=n
+wmdrmsysclk_support=n
+mtp_db_support=n
+
+
+#
+# Menu for configuring Baselibs
+#
+csprng_lib=n
+pvcrypto_lib=n
+pventropysrc_lib=n
+pvgendatastruct_lib=m
+pvmediadatastruct_lib=m
+pvmimeutils_lib=m
+threadsafe_callback_ao_lib=m
+pvthreadmessaging_lib=m
+
+
+#
+# Menu for configuring File Formats
+#
+pvasfff_lib=n
+pvmp3ff_lib=m
+pvmp4ffcomposer_lib=n
+pvmp4ffcomposeropencore_lib=m
+pvmp4ff_lib=n
+pvmp4ffopencore_lib=m
+mp4recognizer_utility_lib=m
+pvaacparser_lib=m
+pvgsmamrparser_lib=m
+pvrmff_lib=n
+pvrmffparser_lib=n
+pvfileparserutils_lib=m
+pvid3parcom_lib=m
+pvpvxparser_lib=m
+pvwav_lib=m
+pvasxparser_lib=n
+pvavifileparser_lib=m
+pvpvrff_lib=n
+asfrecognizer_utility_lib=n
+pv_divxfile_parser_lib=n
+
+
+#
+# Menu for configuring Codecs
+#
+
+#
+# Menu for configuring OMX Support
+#
+omx_mastercore_lib=m
+MAX_NUMBER_OF_OMX_CORES=10
+MAX_NUMBER_OF_OMX_COMPONENTS=50
+pv_omx=y
+omx_avc_component_lib=m
+omx_common_lib=m
+omx_m4v_component_lib=m
+omx_queue_lib=m
+omx_wmv_component_lib=n
+pvomx_proxy_lib=m
+omx_aac_component_lib=m
+omx_amr_component_lib=m
+omx_mp3_component_lib=m
+omx_wma_component_lib=n
+omx_amrenc_component_lib=m
+omx_m4venc_component_lib=m
+omx_avcenc_component_lib=m
+omx_baseclass_lib=m
+
+
+#
+# Menu for configuring audio codecs
+#
+pv_aac_dec_lib=m
+getactualaacconfig_lib=m
+pv_amr_nb_common_lib=m
+pvdecoder_gsmamr_lib=m
+pvencoder_gsmamr_lib=m
+pvamrwbdecoder_lib=m
+gsm_amr_headers_lib=m
+pvmp3_lib=m
+pvra8decoder_lib=n
+wmadecoder_lib=n
+
+
+#
+# Menu for configuring video codecs
+#
+pv_avc_common_lib=m
+pvavcdecoder_lib=m
+wmvdecoder_lib=n
+pvmp4decoder_lib=m
+rvdecoder_lib=n
+pvm4vencoder_lib=m
+pvavch264enc_lib=m
+
+
+#
+# Menu for configuring codecs utilities
+#
+m4v_config_lib=m
+pv_config_parser_lib=m
+colorconvert_lib=m
+
+
+
+#
+# Menu for configuring Nodes
+#
+
+#
+# Menu for configuring Streaming
+#
+pvstreamingmanagernode_segments_lib=m
+
+#
+# Menu for configuring Streaming Features
+#
+mshttp_support=n
+rtspunicast_support=y
+unicastpvr_support=n
+broadcastpvr_support=n
+pvrfileplayback_support=n
+
+pvstreamingmanagernode_lib=n
+pvstreamingmanagernode_3gpp_lib=n
+pvmedialayernode_lib=m
+pvmedialayernode_opencore_lib=n
+pvjitterbuffernode_lib=m
+
+#
+# Menu for configuring Jitter Buffer Node
+#
+rtpjitterbuffer_support=m
+asfjitterbuffer_support=n
+
+
+
+#
+# Menu for configuring Download
+#
+pvdownloadmanagernode_lib=m
+
+#
+# Menu for configuring downloadmanager features
+#
+PVMF_DOWNLOADMANAGER_SUPPORT_PPB=y
+PVMF_DOWNLOADMANAGER_MIN_TCP_BUFFERS_FOR_PPB=39
+PVMF_DOWNLOADMANAGER_CACHE_SIZE_FOR_SC_IN_SECONDS=6
+PVMF_DOWNLOADMANAGER_MAX_BITRATE_FOR_SC=128
+
+
+
+#
+# Menu for adding NON-OMX Nodes
+#
+aacdecnode_lib=n
+mp3decnode_lib=n
+pvavcdecnode_lib=n
+pvwmadecnode_lib=n
+pvwmvdecnode_lib=n
+gsmamrdecnode_lib=n
+pvvideodecnode_lib=n
+pvvideoencnode_lib=n
+pvamrencnode_lib=n
+pvavcencnode_lib=n
+
+
+#
+# Menu for configuring ProtocolEngine
+#
+pvprotocolenginenode_segments_lib=m
+pvprotocolenginenode_lib=n
+
+#
+# Menu for configuring ProtocolEngine Features
+#
+ps_support=y
+pdl_support=y
+ftdl_support=n
+http_support=n
+
+
+pvfileoutputnode_lib=m
+pvmediaoutputnode_lib=m
+pvsocketnode_lib=m
+pvwavffparsernode_lib=m
+pvomxencnode_lib=m
+pvomxaudiodecnode_lib=m
+pvomxbasedecnode_lib=m
+pvomxvideodecnode_lib=m
+pvaacffparsernode_lib=m
+pvamrffparsernode_lib=m
+pvasfffparsernode_lib=n
+pvmp3ffparsernode_lib=m
+pvmp4ffparsernode_lib=n
+pvmp4ffparsernodeopencore_lib=m
+pvrvdecnode_lib=n
+pvra8decnode_lib=n
+pvrmffparsernode_lib=n
+pvrtppacketsourcenode_lib=n
+nodes_common_headers_lib=m
+pvmediainputnode_lib=m
+pvmp4ffcomposernode_lib=n
+pvmp4ffcomposernodeopencore_lib=m
+pvpvr_lib=n
+pvpvrnode_lib=n
+pvcommsionode_lib=m
+pvclientserversocketnode_lib=m
+pvloopbacknode_lib=m
+pvvideoparsernode_lib=m
+pvdummyinputnode_lib=m
+pvdummyoutputnode_lib=m
+pvdivxffparsernode_lib=n
+
+
+#
+# Menu for configuring Oscl
+#
+build_oscl=m
+unit_test_lib=y
+
+
+#
+# Menu for configuring Protocols
+#
+
+#
+# Menu for configuring Value Adds for 2way
+#
+twoway_value_add_config=y
+PV_2WAY_VALUE_ADD_NONE=y
+
+pv_http_parcom_lib=m
+pvlatmpayloadparser_lib=m
+sdp_common=m
+
+#
+# Menu for configuring SDPParser
+#
+sdp_default=n
+sdp_opencore=m
+
+rdt_parser_lib=n
+pv_rtsp_parcom_lib=m
+pvrtsp_cli_eng_node_lib=n
+pvrtsp_cli_eng_node_3gpp_lib=n
+pvrtsp_cli_eng_node_opencore_lib=m
+rtppayloadparser_lib=m
+
+#
+# Menu for rtppayload parser plugins
+#
+rfc_2429=y
+rfc_3016=y
+rfc_3267=y
+rfc_3640=y
+rfc_3984=y
+asf_payload=n
+realmedia_payload=n
+
+rtprtcp_lib=m
+pv324m_lib=m
+pv324m_common_headers_lib=m
+pvgeneraltools_lib=m
+
+
+#
+# Menu for configuring Pvmi
+#
+
+#
+# Menu for configuring Recognizers
+#
+pvmfrecognizer_lib=m
+pvaacffrecognizer_lib=m
+pvamrffrecognizer_lib=m
+pvoma1ffrecognizer_lib=n
+pvasfffrecognizer_lib=n
+pvmp3ffrecognizer_lib=m
+pvmp4ffrecognizer_lib=m
+pvwavffrecognizer_lib=m
+pvrmffrecognizer_lib=n
+pvdivxffrecognizer_lib=n
+
+
+#
+# Menu for configuring Content Policy Manager
+#
+cpm_lib=m
+passthru_oma1_lib=m
+pvjanusplugin_lib=n
+cpm_headers_lib=m
+pvoma1lockstream_lib=n
+
+
+#
+# Menu for configuring Media IO
+#
+pvmiofileinput_lib=m
+pvmiofileoutput_lib=m
+pvmioaviwavfileinput_lib=m
+pvmio_comm_loopback_lib=m
+
+
+#
+# Menu for configuring PacketSources
+#
+packetsources_default_lib=n
+
+#
+# Menu for configuring PacketSource Plugins
+#
+optimized_bcast_ps_support=n
+standard_bcast_ps_support=n
+
+
+pvmf_lib=m
+realaudio_deinterleaver_lib=n
+pvdbmanager_lib=n
+
+
+#
+# Menu for configuring Engines
+#
+
+#
+# Menu for configuring Player
+#
+pvplayer_engine_lib=m
+
+#
+# Menu for player engine tunables
+#
+PVPLAYERENGINE_CONFIG_SKIPTOREQUESTEDPOS_DEF=y
+PVPLAYERENGINE_CONFIG_SYNCMARGIN_EARLY_DEF=-200
+PVPLAYERENGINE_CONFIG_SYNCMARGIN_LATE_DEF=200
+VIDEO_DEC_NODE_LOW_PRIORITY=y
+
+
+#
+# Menu for configuring player registry
+#
+BUILD_OMX_VIDEO_DEC_NODE=y
+BUILD_OMX_AUDIO_DEC_NODE=y
+BUILD_VIDEO_DEC_NODE=n
+BUILD_AVC_DEC_NODE=n
+BUILD_WMV_DEC_NODE=n
+BUILD_RV_DEC_NODE=n
+BUILD_WMA_DEC_NODE=n
+BUILD_G726_DEC_NODE=n
+BUILD_GSMAMR_DEC_NODE=n
+BUILD_AAC_DEC_NODE=n
+BUILD_MP3_DEC_NODE=n
+BUILD_RA8_DEC_NODE=n
+BUILD_MP4_FF_PARSER_NODE=n
+BUILD_AMR_FF_PARSER_NODE=y
+BUILD_AAC_FF_PARSER_NODE=y
+BUILD_MP3_FF_PARSER_NODE=y
+BUILD_WAV_FF_PARSER_NODE=y
+BUILD_ASF_FF_PARSER_NODE=n
+BUILD_RM_FF_PARSER_NODE=n
+BUILD_STREAMING_MANAGER_NODE=n
+BUILD_DOWNLOAD_MANAGER_NODE=n
+BUILD_STILL_IMAGE_NODE=n
+BUILD_MP4_FF_REC=n
+BUILD_ASF_FF_REC=n
+BUILD_OMA1_FF_REC=n
+BUILD_AAC_FF_REC=y
+BUILD_RM_FF_REC=n
+BUILD_MP3_FF_REC=y
+BUILD_WAV_FF_REC=y
+BUILD_AMR_FF_REC=y
+BUILD_DIVX_FF_PARSER_NODE=n
+BUILD_DIVX_FF_REC=n
+
+
+
+#
+# Menu for configuring Author
+#
+pvauthorengine_lib=m
+
+
+#
+# Menu for configuring pv2way
+#
+pv2wayengine_lib=m
+
+engines_common_headers_lib=m
+pvframemetadatautility_lib=m
+
+
+#
+# Menu for configuring Extern_libs
+#
+pvmtp_engine_lib=n
+pvsqlite_lib=n
+pvwmdrm_lib=n
+wmdrm_config=n
+
+
+#
+# That's all, folks!
diff --git a/build_config/opencore_dynamic/setup b/build_config/opencore_dynamic/setup
deleted file mode 100644
index a94a4f9..0000000
--- a/build_config/opencore_dynamic/setup
+++ /dev/null
@@ -1,28 +0,0 @@
-
-echo Setting up build environment with default configuration ...
-
-# SDK_LOCAL is the local staging area (i.e., view private) for private
-# builds and installs of the corelibs libraries. 
-setenv SDK_LOCAL $PWD
-echo Set SDK_LOCAL to $SDK_LOCAL ...
-
-
-# Set CFG_DIR
-#
-setenv CFG_DIR $PWD
-echo Set CFG_DIR to $CFG_DIR ...
-
-
-# For picking the node registry and tunables, set this flag
-#
-setenv FORMAT nj
-
-# Setup the default environment
-#
-if (! $?DEFAULT_SETUP_PATH) then
-  setenv DEFAULT_SETUP_PATH ../default
-endif
-
-source $DEFAULT_SETUP_PATH/setup
-
-# END OF SCRIPT - NO CODE BEYOND THIS POINT 
diff --git a/build_config/opencore_dynamic/setup.ksh b/build_config/opencore_dynamic/setup.ksh
deleted file mode 100644
index ab75c1a..0000000
--- a/build_config/opencore_dynamic/setup.ksh
+++ /dev/null
@@ -1,24 +0,0 @@
-echo Setting up build environment with default configuration ...
-
-# SDK_LOCAL is the local staging area (i.e., view private) for private
-# builds and installs of the corelibs libraries.  
-export SDK_LOCAL=$PWD
-echo "Set SDK_LOCAL to $SDK_LOCAL ..."
-
-
-# Set CFG_DIR
-#
-export CFG_DIR=$PWD
-echo "Set CFG_DIR to $CFG_DIR ..."
-
-# For picking the node registry and tunables, set this flag
-#
-export FORMAT=nj
-
-# Setup the default environment
-#
-if [[ -z $DEFAULT_SETUP_PATH ]]; then
-  export DEFAULT_SETUP_PATH=../default
-fi
-
-. $DEFAULT_SETUP_PATH/setup.ksh
diff --git a/build_config/opencore_dynamic/setup_nr.sh b/build_config/opencore_dynamic/setup.sh
similarity index 80%
rename from build_config/opencore_dynamic/setup_nr.sh
rename to build_config/opencore_dynamic/setup.sh
index 73336df..16761fc 100644
--- a/build_config/opencore_dynamic/setup_nr.sh
+++ b/build_config/opencore_dynamic/setup.sh
@@ -9,10 +9,10 @@
 
 # Setup the default environment
 #
-. ../default/setup_nr.sh
+. ../default/setup.sh
 
 # include the android definitions for export to android makefiles.
-export PLATFORM_EXTRAS=$MK/android.mk
+export PLATFORM_EXTRAS=$MK/android_make_extras.mk
 
 # For make completion targets
 mkcmdcmpl
diff --git a/build_config/opencore_dynamic/setup_nr b/build_config/opencore_dynamic/setup_nr
deleted file mode 100644
index 877b6ef..0000000
--- a/build_config/opencore_dynamic/setup_nr
+++ /dev/null
@@ -1,40 +0,0 @@
-# This file is suitable for tcsh, csh, etc.
-
-echo Setting up build environment with default configuration ...
-echo Using $PWD as top directory ...
-
-setenv PROJECT_DIR $PWD
-echo Set PROJECT_DIR to $PROJECT_DIR ...
-
-setenv CFG_DIR $PWD
-echo Set CFG_DIR to $CFG_DIR ...
-
-# In this case, set it based on the first argument if it is present
-if ($# >= 1) then
-   setenv BASE_DIR `echo $1 | sed 's/\/$//'`
-else if ($?BASE_DIR) then
-   echo  BASE_DIR already defined as $BASE_DIR ...
-else
-   echo ERROR - Must provide the BASE_DIR value as a argument or env variable
-   exit 1
-endif
-
-setenv BUILD_ROOT $PROJECT_DIR/build
-echo Set BUILD_ROOT to $BUILD_ROOT ...
-
-setenv SRC_ROOT $BASE_DIR
-echo Set SRC_ROOT to $SRC_ROOT ...
-
-setenv MK $BASE_DIR/tools_v2/build/make_nr/tools_v2/build/make
-echo Set MK to $MK ...
-
-set extern_tools_path = $BASE_DIR/extern_tools_v2/bin/linux
-set path = ($extern_tools_path $path)
-unset extern_tools_path
-
-rehash
-rehash
-
-echo 
-echo "Environment is ready if no errors reported"
-echo 
diff --git a/build_config/opencore_dynamic/smoke_nr.sh b/build_config/opencore_dynamic/smoke_nr.sh
deleted file mode 100644
index aa6e597..0000000
--- a/build_config/opencore_dynamic/smoke_nr.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Player smoke test
-#
-
-echo "Setting lib path"
-export LD_LIBRARY_PATH=$CFG_DIR/build/installed_lib/linux
-echo "Lib Path" $LD_LIBRARY_PATH
-
-echo "Removing old output"
-rm -f smoke*.txt
-
-cd $CFG_DIR/build/bin/linux
-
-echo "Fetching config files"
-rm -f *.cfg
-cp $SRC_ROOT/tools_v2/build/package/opencore/*.cfg ./
-echo "Running player tests"
-
-echo "Copying test content"
-cp $SRC_ROOT/engines/player/test/data/test_m4v_amr.mp4 .
-cp $SRC_ROOT/engines/player/test/data/pv_amr_mpeg4.sdp .
-
-echo "MP4 Local..."
-./pvplayer_engine_test -output $CFG_DIR/smoke_local_mp4.txt -logfile -test 51 51
-
-echo "MP4 Download..."
-./pvplayer_engine_test -output $CFG_DIR/smoke_dl_mp4.txt -logfile -test 102 106 -source http://pvwmsoha.pv.com:7070/MediaDownloadContent/MP4/prog_dl/mpeg4+aac_metadata_qt.mp4
-
-echo "RTSP Streaming..."
-./pvplayer_engine_test -output $CFG_DIR/smoke_sm_rtsp.txt -logfile -test 851 851 
-
-echo "Done!"
-cd $CFG_DIR
-
-grep "Successes: " smoke*.txt
-grep "Failures: " smoke*.txt
-grep "Memory Leaks" smoke*.txt
-
-#END OF SCRIPT, NO TEXT BEYOND THIS LINE
diff --git a/codecs_v2/audio/aac/dec/src/get_audio_specific_config.cpp b/codecs_v2/audio/aac/dec/src/get_audio_specific_config.cpp
index 44f5ba2..092f397 100644
--- a/codecs_v2/audio/aac/dec/src/get_audio_specific_config.cpp
+++ b/codecs_v2/audio/aac/dec/src/get_audio_specific_config.cpp
@@ -344,15 +344,22 @@
     /* sampling rate index */
     pVars->prog_config.sampling_rate_idx = temp & 0xf;
 
-    if (pVars->prog_config.sampling_rate_idx == 0xf)
+    if (pVars->prog_config.sampling_rate_idx > 0xb)
     {
         /*
-         * sampling rate not listed in Table 1.6.2,
-         * this release does not support this
+         *  Only support 12 sampling frequencies from array samp_rate_info ( see sfb.cpp)
+         *  7350 Hz (index 0xc) is not supported, the other indexes are reserved or escape
          */
-        /*sampling_rate =  getbits( LEN_SAMP_RATE,
-                                  pInputStream);*/
-        getbits(LEN_SAMP_RATE, pInputStream);
+        if (pVars->prog_config.sampling_rate_idx == 0xf) /* escape sequence */
+        {
+            /*
+             * sampling rate not listed in Table 1.6.2,
+             * this release does not support this
+             */
+            /*sampling_rate =  getbits( LEN_SAMP_RATE,
+                                      pInputStream);*/
+            getbits(LEN_SAMP_RATE, pInputStream); /* future use */
+        }
 
         status = 1;
     }
@@ -421,12 +428,12 @@
         if ((pVars->mc_info.audioObjectType != MP4AUDIO_AAC_LC) &&
                 (pVars->mc_info.audioObjectType != MP4AUDIO_LTP))
         {
-            status = 1;
+            return 1;   /* status != SUCCESS invalid aot */
         }
     }
     else
     {
-        status = 1;
+        return 1;   /* status != SUCCESS invalid aot or invalid parameter */
     }
 
     /*
diff --git a/codecs_v2/audio/aac/dec/util/getactualaacconfig/src/get_audio_specific_config.cpp b/codecs_v2/audio/aac/dec/util/getactualaacconfig/src/get_audio_specific_config.cpp
index 44f5ba2..092f397 100644
--- a/codecs_v2/audio/aac/dec/util/getactualaacconfig/src/get_audio_specific_config.cpp
+++ b/codecs_v2/audio/aac/dec/util/getactualaacconfig/src/get_audio_specific_config.cpp
@@ -344,15 +344,22 @@
     /* sampling rate index */
     pVars->prog_config.sampling_rate_idx = temp & 0xf;
 
-    if (pVars->prog_config.sampling_rate_idx == 0xf)
+    if (pVars->prog_config.sampling_rate_idx > 0xb)
     {
         /*
-         * sampling rate not listed in Table 1.6.2,
-         * this release does not support this
+         *  Only support 12 sampling frequencies from array samp_rate_info ( see sfb.cpp)
+         *  7350 Hz (index 0xc) is not supported, the other indexes are reserved or escape
          */
-        /*sampling_rate =  getbits( LEN_SAMP_RATE,
-                                  pInputStream);*/
-        getbits(LEN_SAMP_RATE, pInputStream);
+        if (pVars->prog_config.sampling_rate_idx == 0xf) /* escape sequence */
+        {
+            /*
+             * sampling rate not listed in Table 1.6.2,
+             * this release does not support this
+             */
+            /*sampling_rate =  getbits( LEN_SAMP_RATE,
+                                      pInputStream);*/
+            getbits(LEN_SAMP_RATE, pInputStream); /* future use */
+        }
 
         status = 1;
     }
@@ -421,12 +428,12 @@
         if ((pVars->mc_info.audioObjectType != MP4AUDIO_AAC_LC) &&
                 (pVars->mc_info.audioObjectType != MP4AUDIO_LTP))
         {
-            status = 1;
+            return 1;   /* status != SUCCESS invalid aot */
         }
     }
     else
     {
-        status = 1;
+        return 1;   /* status != SUCCESS invalid aot or invalid parameter */
     }
 
     /*
diff --git a/codecs_v2/audio/aac/dec/util/getactualaacconfig/src/getactualaacconfig.cpp b/codecs_v2/audio/aac/dec/util/getactualaacconfig/src/getactualaacconfig.cpp
index 92640ed..9f0bd64 100644
--- a/codecs_v2/audio/aac/dec/util/getactualaacconfig/src/getactualaacconfig.cpp
+++ b/codecs_v2/audio/aac/dec/util/getactualaacconfig/src/getactualaacconfig.cpp
@@ -182,20 +182,18 @@
     Int            status = ERROR_BUFFER_OVERRUN;
 
 
-
     /*
      *  Allocate memory to decode one AAC frame
      */
 
+
+    iAACDecExt = new tPVMP4AudioDecoderExternal;
     if (!iAACDecExt)
     {
-        iAACDecExt = new tPVMP4AudioDecoderExternal;
-        if (!iAACDecExt)
-        {
-            return 1;
-        }
-        iAACDecExt->inputBufferCurrentLength = 0;
+        return 1;
     }
+    iAACDecExt->inputBufferCurrentLength = 0;
+
 
     iAACDecExt->pInputBuffer = aConfigHeader;
     iAACDecExt->inputBufferMaxLength = PVMP4AUDIODECODER_INBUFSIZE;
diff --git a/codecs_v2/audio/gsm_amr/amr_nb/common/include/q_plsf_3_tbl.h b/codecs_v2/audio/gsm_amr/amr_nb/common/include/q_plsf_3_tbl.h
new file mode 100644
index 0000000..1bd0212
--- /dev/null
+++ b/codecs_v2/audio/gsm_amr/amr_nb/common/include/q_plsf_3_tbl.h
@@ -0,0 +1,136 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+/****************************************************************************************
+Portions of this file are derived from the following 3GPP standard:
+
+    3GPP TS 26.073
+    ANSI-C code for the Adaptive Multi-Rate (AMR) speech codec
+    Available from http://www.3gpp.org
+
+(C) 2004, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TTA, TTC)
+Permission to distribute, modify and use this file under the standard license
+terms listed above has been obtained from the copyright holder.
+****************************************************************************************/
+/*
+
+ Filename: /audio/gsm_amr/c/src/q_plsf_3_tbl.h
+
+------------------------------------------------------------------------------
+ REVISION HISTORY
+
+ Description: Created this file from the reference, q_plsf_3_tbl.tab
+
+ Description: Added #ifdef __cplusplus and removed "extern" from table
+              definition.
+
+ Description: Put "extern" back.
+
+ Who: 						Date:
+ Description:
+
+------------------------------------------------------------------------------
+ MODULE DESCRIPTION
+
+------------------------------------------------------------------------------
+*/
+
+/*----------------------------------------------------------------------------
+; INCLUDES
+----------------------------------------------------------------------------*/
+#include "typedef.h"
+
+/*--------------------------------------------------------------------------*/
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+    /*----------------------------------------------------------------------------
+    ; MACROS
+    ; [Define module specific macros here]
+    ----------------------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------------------
+    ; DEFINES
+    ; [Include all pre-processor statements here. Include conditional
+    ; compile variables also.]
+    ----------------------------------------------------------------------------*/
+#define MR795_1_SIZE  512
+#define PAST_RQ_INIT_SIZE 8
+
+#define DICO1_SIZE  256
+#define DICO2_SIZE  512
+#define DICO3_SIZE  512
+
+#define MR515_3_SIZE  128
+
+    /*----------------------------------------------------------------------------
+    ; LOCAL FUNCTION DEFINITIONS
+    ; [List function prototypes here]
+    ----------------------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------------------
+    ; LOCAL VARIABLE DEFINITIONS
+    ; [Variable declaration - defined here and used outside this module]
+    ----------------------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------------------
+    ; EXTERNAL VARIABLES REFERENCES
+    ; Declare variables used in this module but defined elsewhere
+    ----------------------------------------------------------------------------*/
+
+    /* Codebooks of LSF prediction residual */
+    extern const Word16 mean_lsf_3[];
+
+    extern const Word16 pred_fac_3[];
+
+    extern const Word16 dico1_lsf_3[];
+    extern const Word16 dico2_lsf_3[];
+    extern const Word16 dico3_lsf_3[];
+
+    extern const Word16 mr515_3_lsf[];
+    extern const Word16 mr795_1_lsf[];
+
+    extern const Word16 past_rq_init[];
+    /*----------------------------------------------------------------------------
+    ; SIMPLE TYPEDEF'S
+    ----------------------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------------------
+    ; ENUMERATED TYPEDEF'S
+    ----------------------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------------------
+    ; STRUCTURES TYPEDEF'S
+    ----------------------------------------------------------------------------*/
+
+
+    /*----------------------------------------------------------------------------
+    ; GLOBAL FUNCTION DEFINITIONS
+    ; Function Prototype declaration
+    ----------------------------------------------------------------------------*/
+
+
+    /*----------------------------------------------------------------------------
+    ; END
+    ----------------------------------------------------------------------------*/
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/codecs_v2/audio/gsm_amr/amr_nb/common/include/qgain475_tab.h b/codecs_v2/audio/gsm_amr/amr_nb/common/include/qgain475_tab.h
index ac1b1dd..6c0d766 100644
--- a/codecs_v2/audio/gsm_amr/amr_nb/common/include/qgain475_tab.h
+++ b/codecs_v2/audio/gsm_amr/amr_nb/common/include/qgain475_tab.h
@@ -50,6 +50,8 @@
 #ifndef QGAIN475_TAB_H
 #define QGAIN475_TAB_H
 
+#define MR475_VQ_SIZE 256
+
 /*----------------------------------------------------------------------------
 ; INCLUDES
 ----------------------------------------------------------------------------*/
diff --git a/codecs_v2/audio/gsm_amr/amr_nb/common/src/gains_tbl.cpp b/codecs_v2/audio/gsm_amr/amr_nb/common/src/gains_tbl.cpp
index b086662..f91957c 100644
--- a/codecs_v2/audio/gsm_amr/amr_nb/common/src/gains_tbl.cpp
+++ b/codecs_v2/audio/gsm_amr/amr_nb/common/src/gains_tbl.cpp
@@ -93,7 +93,7 @@
     };
 
 
-    extern const Word16 qua_gain_code[NB_QUA_CODE*3] =
+    extern const Word16 qua_gain_code[(NB_QUA_CODE+1)*3] =
     {
         /* gain factor (g_fac) and quantized energy error (qua_ener_MR122, qua_ener)
          * are stored:
@@ -137,6 +137,7 @@
         12510,                 2673,           16096,
         16263,                 3060,           18429,
         21142,                 3448,           20763,
+        27485,                 3836,           23097,
         27485,                 3836,           23097
     };
 
diff --git a/codecs_v2/audio/gsm_amr/amr_nb/common/src/pow2.cpp b/codecs_v2/audio/gsm_amr/amr_nb/common/src/pow2.cpp
index aae9b9e..a8686f8 100644
--- a/codecs_v2/audio/gsm_amr/amr_nb/common/src/pow2.cpp
+++ b/codecs_v2/audio/gsm_amr/amr_nb/common/src/pow2.cpp
@@ -184,14 +184,10 @@
 
     L_x = L_mult(fraction, 32, pOverflow);      /* L_x = fraction<<6    */
 
-    /* Extract b10-b16 of fraction */
+    /* Extract b0-b16 of fraction */
 
-    i = (Word16)(L_x >> 16);
-    L_x >>= 1;
-
-    /* Extract b0-b9   of fraction */
-    a = (Word16)(L_x);
-    a = a & (Word16) 0x7fff;
+    i = ((Word16)(L_x >> 16)) & 31;             /* ensure index i is bounded */
+    a = (Word16)((L_x >> 1) & 0x7fff);
 
     L_x = L_deposit_h(pow2_tbl[i]);             /* pow2_tbl[i] << 16       */
 
diff --git a/codecs_v2/audio/gsm_amr/amr_nb/common/src/q_plsf_3_tbl.cpp b/codecs_v2/audio/gsm_amr/amr_nb/common/src/q_plsf_3_tbl.cpp
index 533ca0d..8f8e04c 100644
--- a/codecs_v2/audio/gsm_amr/amr_nb/common/src/q_plsf_3_tbl.cpp
+++ b/codecs_v2/audio/gsm_amr/amr_nb/common/src/q_plsf_3_tbl.cpp
@@ -52,2127 +52,2045 @@
 /*----------------------------------------------------------------------------
 ; INCLUDES
 ----------------------------------------------------------------------------*/
-#include "typedef.h"
+#include "q_plsf_3_tbl.h"
 
 /*--------------------------------------------------------------------------*/
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-    /*----------------------------------------------------------------------------
-    ; MACROS
-    ; [Define module specific macros here]
-    ----------------------------------------------------------------------------*/
-
-    /*----------------------------------------------------------------------------
-    ; DEFINES
-    ; [Include all pre-processor statements here. Include conditional
-    ; compile variables also.]
-    ----------------------------------------------------------------------------*/
-#define MR795_1_SIZE  512
-#define PAST_RQ_INIT_SIZE 8
-
-#define DICO1_SIZE  256
-#define DICO2_SIZE  512
-#define DICO3_SIZE  512
-
-#define MR515_3_SIZE  128
-
-    /*----------------------------------------------------------------------------
-    ; LOCAL FUNCTION DEFINITIONS
-    ; [List function prototypes here]
-    ----------------------------------------------------------------------------*/
-
-    /*----------------------------------------------------------------------------
-    ; LOCAL VARIABLE DEFINITIONS
-    ; [Variable declaration - defined here and used outside this module]
-    ----------------------------------------------------------------------------*/
-    /*
-    ********************************************************************************
-    *
-    *      GSM AMR-NB speech codec   R98   Version 7.5.0   March 2, 2001
-    *                                R99   Version 3.2.0
-    *                                REL-4 Version 4.0.0
-    *
-    ********************************************************************************
-    *
-    *      File             : q_plsf_3.tab
-    *      Purpose          : Table for routine LSF VQ.
-    *      $Id $
-    *
-    ********************************************************************************
-    */
-
-
-    /* initalization table for MA predictor in dtx mode */
-    extern const Word16 past_rq_init[80] =
-    {
-        -258, -318, -439, -634, -656, -773, -711, -502, -268, -193,
-        -2,  125,  122,  -39,   -9,  105,  129,  283,  372,  575,
-        -277, -324, -197, -487, -445, -362, -292,  -27,  177,  543,
-        342,  517,  516,  130,   27, -104, -120, -140,  -74,  -56,
-        -564, -943, -1520, -965, -814, -526, -322,   -2,  159,  657,
-        -312, -284, -386, -597, -493, -526, -418, -229,  105,  449,
-        -557, -870, -1075, -919, -950, -752, -709, -316,   62,  486,
-        -314, -191, -203, -330, -160, -103,  -51,  131,  338,  515
-    };
-
-
-    extern const Word16 mean_lsf_3[10] =
-    {
-        1546,
-        2272,
-        3778,
-        5488,
-        6972,
-        8382,
-        10047,
-        11229,
-        12766,
-        13714
-    };
-
-
-    extern const Word16 pred_fac_3[10] =
-    {
-        9556,
-        10769,
-        12571,
-        13292,
-        14381,
-        11651,
-        10588,
-        9767,
-        8593,
-        6484
-    };
-
-
-
-    /* first codebook from IS641 */
-
-    extern const Word16 dico1_lsf_3[] =
-    {
-        6, 82, -131,
-        154, -56, -735,
-        183, -65, -265,
-        9, -210, -361,
-        113, 718, 1817,
-        1010, 1214, 1573,
-        857, 1333, 2276,
-        827, 1568, 1933,
-        717, 1989, 2206,
-        838, 1172, 1823,
-        721, 1000, 2154,
-        286, 476, 1509,
-        -247, -531, 230,
-        147, -82, 569,
-        26, -177, -944,
-        -27, -273, 692,
-        -164, -264, -183,
-        224, 790, 1039,
-        899, 946, 601,
-        485, 771, 1150,
-        524, 677, 903,
-        -140, 375, 778,
-        410, 676, 429,
-        301, 530, 1009,
-        719, 646, 38,
-        226, 367, 40,
-        145, -45, -505,
-        290, 121, -121,
-        302, 127, 166,
-        -124, -383, -956,
-        -358, -455, -977,
-        715, 878, 894,
-        978, 923, 211,
-        477, 272, 64,
-        188, -78, 17,
-        -143, -65, 38,
-        643, 586, 621,
-        -134, -426, -651,
-        347, 545, 2820,
-        1188, 2726, 2442,
-        142, -80, 1735,
-        283, 130, 461,
-        -262, -399, -1145,
-        -411, 155, 430,
-        329, 375, 779,
-        53, -226, -139,
-        -129, -236, 1682,
-        285, 744, 1327,
-        738, 697, 1664,
-        312, 409, 266,
-        325, 720, 135,
-        1, 221, 453,
-        8, 203, 145,
-        299, 640, 760,
-        29, 468, 638,
-        103, 429, 379,
-        420, 954, 932,
-        1326, 1210, 1258,
-        704, 1012, 1152,
-        -166, -444, -266,
-        -316, -130, -376,
-        191, 1151, 1904,
-        -240, -543, -1260,
-        -112, 268, 1207,
-        70, 1062, 1583,
-        278, 1360, 1574,
-        -258, -272, -768,
-        19, 563, 2240,
-        -3, -265, 135,
-        -295, -591, -388,
-        140, 354, -206,
-        -260, -504, -795,
-        -433, -718, -1319,
-        109, 331, 962,
-        -429, -87, 652,
-        -296, 426, 1019,
-        -239, 775, 851,
-        489, 1334, 1073,
-        -334, -332, 25,
-        543, 1206, 1807,
-        326, 61, 727,
-        578, 849, 1405,
-        -208, -277, 329,
-        -152, 64, 669,
-        -434, -678, -727,
-        -454, -71, 251,
-        605, 480, 254,
-        -482, 11, 996,
-        -289, 395, 486,
-        722, 1049, 1440,
-        -30, -316, -786,
-        -106, -115, -619,
-        861, 1474, 1412,
-        1055, 1366, 1184,
-        812, 1237, 925,
-        42, -251, -576,
-        342, 141, -454,
-        -168, -80, 1359,
-        -342, -656, -1763,
-        100, 821, 725,
-        990, 747, 800,
-        332, 440, 568,
-        663, 379, 852,
-        112, 165, -369,
-        597, 910, 282,
-        -8, 834, 1281,
-        -352, 572, 695,
-        462, 2246, 1806,
-        345, 190, 1374,
-        416, 915, 2166,
-        168, -82, 280,
-        -516, -446, 840,
-        47, 533, 44,
-        -362, -711, -1143,
-        22, 193, 1472,
-        -85, 233, 1813,
-        -62, 579, 1504,
-        550, 944, 1749,
-        723, 650, 1148,
-        972, 884, 1395,
-        -425, 643, 0,
-        1000, 952, 1098,
-        249, 1446, 672,
-        -334, -87, 2172,
-        -554, 1882, 2672,
-        140, 1826, 1853,
-        920, 1749, 2590,
-        1076, 1933, 2038,
-        -137, -443, -1555,
-        1269, 1174, 468,
-        -493, -122, 1521,
-        -451, 1033, 1214,
-        482, 1695, 1118,
-        815, 649, 384,
-        -446, -692, 107,
-        -319, -605, -118,
-        -207, -505, 525,
-        -468, -12, 2736,
-        75, 1934, 1305,
-        880, 2358, 2267,
-        1285, 1575, 2004,
-        -48, -304, -1186,
-        -435, -461, -251,
-        -366, -404, -547,
-        -289, -605, -597,
-        -538, -810, -165,
-        -120, 3, 356,
-        639, 1241, 1502,
-        96, 177, 750,
-        -435, -585, -1174,
-        -356, 109, -79,
-        -485, 288, 2005,
-        9, 1116, 731,
-        880, 2134, 946,
-        -265, 1585, 1065,
-        1157, 1210, 843,
-        -498, -668, 431,
-        374, 321, -229,
-        1440, 2101, 1381,
-        449, 461, 1155,
-        -105, 39, -384,
-        -263, 367, 182,
-        -371, -660, 773,
-        -188, 1151, 971,
-        1333, 1632, 1435,
-        774, 1267, 1221,
-        -482, -832, -1489,
-        -237, -210, 860,
-        890, 1615, 1064,
-        472, 1062, 1192,
-        185, 1077, 989,
-        -568, -992, -1704,
-        -449, -902, -2043,
-        -142, -377, -458,
-        -210, -554, -1029,
-        -11, 1133, 2265,
-        -329, -675, -893,
-        -250, 657, 1187,
-        519, 1510, 1779,
-        520, 539, 1403,
-        527, 1421, 1302,
-        -563, -871, -1248,
-        -147, -463, 879,
-        -76, 2334, 2840,
-        563, 2573, 2385,
-        632, 1926, 2920,
-        719, 2023, 1840,
-        -545, -723, 1108,
-        129, -125, 884,
-        1417, 1632, 925,
-        -94, 1566, 1751,
-        -341, 1533, 1551,
-        591, 395, -274,
-        -76, 981, 2831,
-        153, 2985, 1844,
-        1032, 2565, 2749,
-        1508, 2832, 1879,
-        791, 1199, 538,
-        -190, -453, 1489,
-        -278, -548, 1158,
-        -245, 1941, 2044,
-        1024, 1560, 1650,
-        512, 253, 466,
-        -62, -323, 1151,
-        -473, -376, 507,
-        -433, 1380, 2162,
-        899, 1943, 1445,
-        134, 704, 440,
-        460, 525, -28,
-        -450, 279, 1338,
-        0, 971, 252,
-        -445, -627, -991,
-        -348, -602, -1424,
-        398, 712, 1656,
-        -107, 314, -178,
-        93, 2226, 2238,
-        518, 849, 656,
-        -462, -711, -447,
-        174, -34, 1191,
-        -119, 42, 1005,
-        -372, 274, 758,
-        1036, 2352, 1838,
-        675, 1724, 1498,
-        430, 1286, 2133,
-        -129, -439, 0,
-        -373, 800, 2144,
-        6, 1587, 2478,
-        478, 596, 2128,
-        -428, -736, 1505,
-        385, 178, 980,
-        139, 449, 1225,
-        -526, -842, -982,
-        145, 1554, 1242,
-        623, 1448, 656,
-        349, 1016, 1482,
-        31, -280, 415,
-        -316, 724, 1641,
-        360, 1058, 556,
-        -436, -358, 1201,
-        -355, 1123, 1939,
-        401, 1584, 2248,
-        -527, -1012, 355,
-        233, 238, 2233,
-        -550, -897, -639,
-        -365, -501, 1957,
-        389, 1860, 1621,
-        162, 1132, 1264,
-        -237, 1174, 1390,
-        -640, -411, 116,
-        -228, 1694, 2298,
-        1639, 2186, 2267,
-        562, 1273, 2658,
-        323, 338, 1774,
-        578, 1107, 852,
-        22, 594, 934,
-        -143, 718, 446
-    };
-
-
-    /* second codebook from IS641 */
-
-    extern const Word16 dico2_lsf_3[] =
-    {
-        50, 71, -9,
-        -338, -698, -1407,
-        102, -138, -820,
-        -310, -469, -1147,
-        414, 67, -267,
-        1060, 814, 1441,
-        1548, 1360, 1272,
-        1754, 1895, 1661,
-        2019, 2133, 1820,
-        1808, 2318, 1845,
-        644, -93, 454,
-        858, 329, -136,
-        489, -258, -128,
-        -198, -745, -41,
-        -52, -265, -985,
-        346, 137, 479,
-        -1741, -748, -684,
-        -1163, -1725, -367,
-        -895, -1145, -784,
-        -488, -946, -968,
-        -85, -390, -725,
-        215, -340, -171,
-        1020, 916, 1969,
-        564, 179, 746,
-        662, 977, 1734,
-        887, 622, 914,
-        939, 856, 1165,
-        309, 688, 803,
-        917, 161, 570,
-        118, -20, -283,
-        -816, -42, 204,
-        -1228, -325, -462,
-        -963, -202, -143,
-        -988, -484, -361,
-        -702, -978, -477,
-        -302, -790, -1188,
-        -100, -786, -1088,
-        -1054, -947, -1684,
-        -202, -843, -782,
-        -1039, -1378, -901,
-        -624, -110, -85,
-        356, 213, -10,
-        -493, 364, 774,
-        425, 822, 479,
-        -83, 557, 520,
-        -992, -1560, -572,
-        -603, -741, -26,
-        -502, -638, -903,
-        209, 306, 147,
-        -316, -593, -596,
-        -85, -211, -225,
-        -918, -529, 117,
-        233, -439, -738,
-        1101, 751, 633,
-        1457, 1716, 1511,
-        1765, 1457, 910,
-        1122, 1156, 849,
-        1354, 868, 470,
-        -871, -1150, -1796,
-        -871, -861, -992,
-        -118, 155, 212,
-        -1051, -849, -606,
-        -1117, -1849, -2750,
-        -1019, -1427, -1869,
-        370, -184, -414,
-        959, 493, 104,
-        958, 1039, 543,
-        154, 653, 201,
-        1249, 507, 150,
-        663, 503, 230,
-        623, 777, 675,
-        659, 88, -110,
-        843, 244, 224,
-        382, 541, 302,
-        724, 433, 666,
-        1166, 734, 341,
-        -138, 20, -397,
-        -1183, -424, -46,
-        -321, -352, -124,
-        1333, 1021, 1080,
-        262, 366, 723,
-        922, 283, -551,
-        31, -636, -611,
-        -689, -697, -415,
-        -952, -779, -201,
-        -1329, -598, -359,
-        -953, -1285, 166,
-        493, 305, 221,
-        846, 703, 610,
-        840, 936, 774,
-        -723, -1324, -1261,
-        -357, -1025, -1388,
-        -1096, -1376, -365,
-        -1416, -1881, -608,
-        -1798, -1727, -674,
-        -545, -1173, -703,
-        678, 786, 148,
-        -123, 696, 1288,
-        644, 350, -10,
-        414, 614, 15,
-        137, 344, -211,
-        -814, -1512, -819,
-        -391, -930, -588,
-        47, -591, -898,
-        -909, -1097, -163,
-        -1272, -1167, -157,
-        -1464, -1525, -389,
-        -1274, -1188, -624,
-        671, 213, 454,
-        124, -274, -525,
-        -729, -496, -152,
-        -1344, 122, 135,
-        -2905, -589, -394,
-        -1728, 441, -50,
-        1476, 904, 787,
-        316, 236, -440,
-        -347, 217, 413,
-        -911, -917, 121,
-        -455, -932, 202,
-        -92, -465, -375,
-        488, 390, 474,
-        876, 729, 316,
-        -1815, -1312, -669,
-        87, 962, 432,
-        563, -249, -1058,
-        250, 285, 1105,
-        1141, 427, 696,
-        -1038, -1664, -1582,
-        -948, 346, 160,
-        -309, -272, -858,
-        670, 624, 1250,
-        -944, -408, -666,
-        -606, -320, -384,
-        -492, 230, 65,
-        334, -50, -16,
-        -16, -690, -1397,
-        1791, 1716, 1399,
-        2478, 2063, 1404,
-        1245, 1471, 1426,
-        -382, -1037, -2,
-        173, -398, 1145,
-        1491, 2024, 1801,
-        772, 1274, 1506,
-        1429, 1735, 2001,
-        1079, 1218, 1273,
-        -1154, -1851, -1329,
-        -808, -1133, -1096,
-        -451, -1033, -1722,
-        65, 578, -84,
-        -1476, -2434, -1778,
-        -765, -1366, -494,
-        -218, -594, -931,
-        337, -236, 562,
-        2357, 2662, 1938,
-        1489, 1276, 874,
-        189, 358, 374,
-        -1519, -2281, -2346,
-        -967, -1271, -2095,
-        -628, -1188, -1542,
-        1661, 1043, 546,
-        565, 1061, 732,
-        -64, -836, -434,
-        -436, -96, 203,
-        1078, 1216, 1636,
-        907, 1534, 986,
-        326, 965, 845,
-        142, -84, 197,
-        470, 2379, 1570,
-        1133, 470, 1214,
-        395, 1376, 1200,
-        1125, 1042, 348,
-        -543, -1234, -376,
-        -215, -181, 481,
-        -1947, -1621, -210,
-        -750, -1185, 390,
-        29, -399, 27,
-        820, 1236, 755,
-        695, 979, 409,
-        -174, 1197, 1035,
-        912, 1356, 1846,
-        -992, -1437, 484,
-        -1485, -1700, 208,
-        -412, 1204, 1432,
-        -271, 896, 1144,
-        -416, 1777, 1434,
-        -1696, -2644, -204,
-        -1789, -1551, 1033,
-        -1656, -1559, 1303,
-        -1253, -1589, 1081,
-        -669, -1095, -66,
-        -682, 320, -345,
-        659, 305, 1069,
-        -1292, -804, -19,
-        -1635, -1291, 29,
-        -1683, -497, 71,
-        -287, -7, -100,
-        -494, -962, -237,
-        852, 1881, 1740,
-        -1217, -1387, 227,
-        -660, 302, 373,
-        96, 1087, 1257,
-        -1074, -1669, 160,
-        485, 2076, 1798,
-        -934, -220, 552,
-        -596, -612, 237,
-        336, 1720, 879,
-        643, 629, 434,
-        1267, 522, 1633,
-        15, 244, -441,
-        1475, 717, 184,
-        1819, 1590, 1709,
-        988, 261, 937,
-        2093, 2345, 1520,
-        2139, 1858, 1606,
-        -577, -579, -1203,
-        -956, 135, -488,
-        -464, 51, -338,
-        -629, -348, -723,
-        1146, 2073, 1442,
-        2192, 1466, 911,
-        -1444, -1572, -2278,
-        1400, 710, 1297,
-        1335, 633, 928,
-        1434, 2194, 2594,
-        2422, 2204, 1881,
-        982, 2242, 1854,
-        380, 792, 1145,
-        -63, -539, 414,
-        -252, -964, -314,
-        -1261, -683, -780,
-        -831, -526, -1005,
-        -1666, -1135, -424,
-        -1611, -452, -299,
-        1268, 1048, 642,
-        1147, 853, 856,
-        -675, -336, 139,
-        2268, 1343, 1418,
-        29, 768, 797,
-        -1224, 423, 564,
-        -1318, -1082, 245,
-        -1302, -812, 573,
-        -1298, -1617, 646,
-        -968, 834, 723,
-        993, 1652, 2027,
-        -191, -817, 432,
-        662, 60, 198,
-        626, 997, 1330,
-        1648, 1963, 1289,
-        -1597, -93, -45,
-        -1088, 37, -84,
-        1653, 2607, 2337,
-        1065, 2040, 2377,
-        1139, 2326, 2118,
-        859, 357, 1510,
-        664, 1227, 1099,
-        479, 1360, 912,
-        1897, 1754, 2019,
-        1168, 1909, 1784,
-        399, 34, 256,
-        -593, -304, -1053,
-        547, 1694, 1407,
-        647, -99, -341,
-        1492, 1647, 1190,
-        38, -644, -212,
-        395, 846, 222,
-        -704, -765, -716,
-        -724, -1964, -2804,
-        -150, 291, -82,
-        1233, 1459, 1007,
-        -140, -155, 153,
-        439, 297, 1568,
-        -1529, -410, -636,
-        1536, 455, -237,
-        -1328, -139, -260,
-        531, 554, 868,
-        269, 1264, 606,
-        -233, 883, 463,
-        742, 600, -120,
-        -73, 421, 212,
-        -439, -58, 804,
-        -1286, -1241, 728,
-        294, -490, 50,
-        -591, -905, -1254,
-        42, -687, 147,
-        -25, 273, 596,
-        -311, 1213, 601,
-        -754, 849, 584,
-        429, 607, 587,
-        -602, -166, 461,
-        -796, -823, 777,
-        1380, 910, 1755,
-        119, 1417, 972,
-        -219, -880, -1596,
-        -1049, -1010, 438,
-        -713, -1379, 78,
-        0, -447, -1179,
-        -1136, -1319, -1573,
-        2248, 1767, 1309,
-        946, 1583, 1432,
-        1150, 482, 436,
-        -469, -1108, 618,
-        -447, -966, 1088,
-        -1252, -1515, -114,
-        -1104, -2008, -579,
-        210, 613, 497,
-        -1975, -1437, 642,
-        -1269, -856, 1011,
-        -1646, -1185, 1063,
-        -1555, -672, 1204,
-        -1692, -1114, 623,
-        -979, -1326, -1277,
-        539, -147, 894,
-        -1354, -897, -434,
-        888, 475, 428,
-        153, -384, 338,
-        -1492, -511, 359,
-        -974, -1115, -470,
-        105, -550, 677,
-        -937, -1145, 877,
-        380, -260, 210,
-        1685, 924, 1256,
-        1775, 1190, 1095,
-        1419, 631, 533,
-        627, 299, -347,
-        -411, -534, 647,
-        -650, 29, -595,
-        -378, -1367, 1563,
-        1402, 1121, 1465,
-        1089, 1410, 648,
-        -2096, -1090, -6,
-        311, -194, -869,
-        -639, -831, 416,
-        -1162, -1224, 1349,
-        -1247, -941, 1813,
-        -2193, -1987, 453,
-        -619, -1367, -956,
-        -1606, -1972, -1507,
-        -1175, -1057, -1104,
-        -377, 601, 201,
-        1876, 825, 374,
-        -430, -1323, 29,
-        -1397, -1249, -1331,
-        -1007, -1504, 960,
-        -1401, -2009, 197,
-        -1379, -1949, -236,
-        -1077, 123, 422,
-        615, 1269, 546,
-        -306, 1526, 904,
-        1194, 1788, 1177,
-        -626, -884, -1526,
-        199, 766, 1504,
-        -1065, 862, 197,
-        -1034, -1773, -887,
-        -800, 145, 599,
-        -1134, -519, 626,
-        -1205, -1926, 500,
-        -910, -1041, -1395,
-        -1476, -1567, -969,
-        -523, 842, 34,
-        1794, 646, 862,
-        -1207, -1888, -1002,
-        -78, -9, -672,
-        1044, 759, 80,
-        -600, 1139, 1019,
-        57, 2000, 1422,
-        -833, 1414, 1121,
-        -1202, 1630, 1260,
-        -461, 1420, 1244,
-        1537, 975, 253,
-        -283, 324, -359,
-        599, -195, 106,
-        588, 62, -587,
-        -757, 645, 205,
-        51, 1201, 758,
-        -1209, 673, -390,
-        -624, 1581, 941,
-        -151, 1023, 735,
-        2820, 1301, 690,
-        -302, 524, -99,
-        -900, -1588, -1189,
-        1084, 251, 238,
-        2014, 1792, 1010,
-        1245, 1633, 1741,
-        -1227, -1540, -1208,
-        -621, 456, -109,
-        40, -65, 788,
-        -805, -699, -1350,
-        -583, 904, 832,
-        -801, 532, 594,
-        1972, 1408, 1351,
-        -1177, -1880, -2114,
-        -773, 568, 948,
-        -1015, 1079, 1260,
-        -1111, 482, -130,
-        1778, 1044, 780,
-        -1491, 245, 912,
-        -316, -1141, -917,
-        -536, -1442, -2346,
-        -785, -1546, -1988,
-        -2003, 257, 909,
-        -1849, -633, -1209,
-        -1538, -1918, -1054,
-        1606, 2239, 1576,
-        -567, -1500, -1544,
-        -1279, 195, 1369,
-        -817, 293, 1219,
-        -525, 630, 1197,
-        -1698, -2425, -1840,
-        -303, 731, 747,
-        -1169, -251, 269,
-        -950, -75, 1684,
-        -1182, -453, 1005,
-        -1599, 585, 378,
-        -2075, -571, -427,
-        -529, -1159, -1171,
-        -283, -205, -564,
-        -796, 1246, 717,
-        2277, 927, 539,
-        -454, 559, 440,
-        -717, 1460, 1615,
-        -1030, 1052, 1610,
-        -1169, -138, 847,
-        226, 39, -612,
-        -1251, -106, -729,
-        -651, 968, 1302,
-        -714, -636, 1727,
-        353, 1069, 410,
-        -798, -156, 1099,
-        -574, 918, 446,
-        -1310, 1012, 466,
-        1408, 1591, 765,
-        1429, 1380, 1757,
-        1949, 1956, 2378,
-        1578, 2047, 2148,
-        916, 98, -7,
-        1893, 1418, 2141,
-        348, 1405, 1579,
-        152, 1134, 1801,
-        -267, 154, 1395,
-        -1166, 469, 1054,
-        -1142, -405, -1073,
-        -1341, -2264, -1581,
-        -364, 869, 1706,
-        -1162, 549, 1550,
-        -1225, -1932, -1666,
-        -1485, -1977, -2055,
-        -1727, -906, -98,
-        -1897, 233, 1492,
-        892, 108, -331,
-        -1728, -1170, -1700,
-        -1060, 1980, 1790,
-        -1070, -1741, -1909,
-        -11, 1539, 1317,
-        -1600, 94, 497,
-        421, 443, -197,
-        -1578, -349, -994,
-        -599, -539, 1140,
-        -965, -1419, -129,
-        -1341, 175, -447,
-        -375, 1311, 2055,
-        -371, -650, -307,
-        -1073, 605, 365,
-        -2057, -113, 430,
-        652, 914, 967,
-        -1012, -1586, -2323,
-        1505, 1248, 559,
-        262, -486, -401,
-        -1727, 1342, 1546,
-        50, 56, 432,
-        -330, 119, -604,
-        -1517, -1080, -810,
-        946, 1127, 1055,
-        -1400, -1703, -1712,
-        -1270, -704, -1317,
-        807, 1821, 1143,
-        2760, 1606, 2171,
-        1120, 409, -150,
-        -147, 404, 959,
-        2439, 1911, 2189,
-        -906, -141, -866,
-        -904, -142, -458,
-        -557, -708, -1679,
-        -830, -1431, -1583,
-        -1842, -1346, -1086,
-        -1604, -272, 915,
-        -1196, 772, 1056,
-        -638, -1234, -1897,
-        -500, -81, -822,
-        -1289, -1613, -735,
-        -117, 785, 168,
-        -1090, 1133, 922,
-        -1096, -746, 1384,
-        287, -547, -1063,
-        -1376, -2201, -1204,
-        -2176, -1570, -1757,
-        -1511, -2241, -771,
-        -1737, 1099, 830,
-        -1588, 724, 1243,
-        -1542, 693, 805,
-        -1690, -240, 1665,
-        -1700, -4, -668,
-        2149, 816, 1042,
-        -818, -1841, 22,
-        -764, -507, 449,
-        -1151, -617, 289,
-        -843, -1596, -240,
-        498, -234, -657,
-        -752, 480, 1678,
-        -319, -481, 193,
-        -811, 171, -119,
-        -2128, -202, -848,
-        1717, 1140, 1700
-    };
-
-
-    /* third codebook from IS641 */
-
-    extern const Word16 dico3_lsf_3[] =
-    {
-        67, -17, 66, -12,
-        -1690, -581, -104, -272,
-        -1076, -1186, -1845, -376,
-        -1140, -926, -420, -58,
-        -259, -656, -1134, -553,
-        1788, 1227, 455, 129,
-        462, 441, -240, -528,
-        840, 514, 130, -75,
-        1114, 623, 153, 216,
-        1068, 564, -6, -276,
-        1119, 727, 190, -68,
-        704, 306, 119, -264,
-        329, 61, -100, 156,
-        364, 123, 183, -208,
-        -171, -123, 220, -65,
-        -306, -62, 402, 17,
-        -660, -938, -266, 0,
-        385, 235, 276, 285,
-        320, 268, -336, -200,
-        -724, 17, -84, 381,
-        -544, 429, 494, 519,
-        -117, 288, 304, 329,
-        643, 157, 701, 508,
-        1200, 625, 796, 608,
-        998, 421, 492, 632,
-        1204, 780, 446, 132,
-        1257, 844, 547, 449,
-        829, 658, 541, 470,
-        1132, 1258, 918, 639,
-        547, 51, 423, 279,
-        9, 392, 83, 94,
-        542, 543, 229, -147,
-        -198, 129, 194, -185,
-        -863, -1321, -302, 30,
-        -597, -629, -19, 114,
-        -900, -1081, 466, 353,
-        -1483, -1573, 15, -143,
-        -1708, -2059, -751, 196,
-        -1876, -2067, -642, -258,
-        -2335, -1470, -450, -564,
-        -584, -186, -872, -414,
-        -1805, -988, -1125, -1310,
-        -726, -1129, 28, 169,
-        -1039, -864, -718, -246,
-        484, 36, -233, -49,
-        265, 67, 289, 467,
-        178, 543, 810, 540,
-        84, 282, 672, 703,
-        -975, -777, 129, 287,
-        -938, -227, 955, 595,
-        -1617, -289, 836, 649,
-        -1847, -215, 1106, 718,
-        -2034, -1085, 650, 440,
-        -2101, -529, 907, 575,
-        -2011, -336, 670, 204,
-        -2389, -692, 360, 137,
-        -2156, -2204, -9, 280,
-        -266, 119, 39, 193,
-        78, -59, -120, 226,
-        -975, -858, -781, -1095,
-        -619, -413, -451, -842,
-        -1216, -1321, -813, -883,
-        -1376, -1615, -394, -428,
-        -737, -1113, -549, -790,
-        -880, -975, -967, -642,
-        -985, -886, -1273, -1361,
-        -473, -804, -1401, -1407,
-        160, -265, -919, -275,
-        -248, -250, -718, -380,
-        97, -103, -375, -229,
-        -415, -193, -135, -555,
-        628, 361, 119, 216,
-        579, 364, 391, 209,
-        634, 522, -154, -148,
-        526, 389, 170, 33,
-        105, 267, 64, 380,
-        -1503, -1000, -30, -369,
-        -1070, 58, 647, 223,
-        -1520, -291, 621, 307,
-        -1531, 156, 762, 404,
-        -2029, 141, 734, 499,
-        -1849, -650, 306, 512,
-        -187, -104, -59, 438,
-        134, -230, 156, -186,
-        -61, -260, -16, 10,
-        -569, -3, -421, -297,
-        -1725, -521, -346, 178,
-        -1362, -59, -44, 157,
-        -2146, -461, -470, -349,
-        -2170, -1, -369, -121,
-        -1579, -373, -900, -1015,
-        -1117, -591, -613, -784,
-        -561, 122, -75, -449,
-        -4, -171, -123, -372,
-        192, 168, -76, -132,
-        252, -107, 340, 210,
-        392, 509, 272, 181,
-        -109, 145, 218, 119,
-        -416, -263, 485, 265,
-        -181, -8, -286, 226,
-        -244, -218, 69, -290,
-        -158, 191, -1, -64,
-        -592, -90, 213, -96,
-        255, 435, 178, -80,
-        -369, -18, -33, -80,
-        -42, 415, 140, -222,
-        1143, 651, 649, 329,
-        767, 556, 249, 235,
-        948, 413, 442, 279,
-        141, 339, 356, 557,
-        -470, -170, 99, 237,
-        -569, -800, 352, 565,
-        282, 473, 470, 332,
-        -199, -690, -1284, -917,
-        -193, -426, -800, -1122,
-        -26, -371, -490, -193,
-        637, 595, 519, 330,
-        408, -115, 79, 12,
-        477, 87, -103, -376,
-        -666, -347, -277, -291,
-        -510, -481, 169, 297,
-        -829, -738, -205, -171,
-        -320, -540, 328, 283,
-        -859, -958, 442, -2,
-        556, 686, 130, 56,
-        1383, 1012, 755, 427,
-        612, 741, 628, 553,
-        -339, -796, 134, 277,
-        -633, -1085, -2, -246,
-        -880, -1035, -1607, -1064,
-        -994, -474, -1138, -488,
-        -414, -795, 73, -206,
-        -8, -139, 439, 204,
-        -176, -578, 23, 131,
-        -269, -757, -191, 245,
-        -109, -338, 112, 316,
-        120, -406, -118, 611,
-        -180, -186, -645, 115,
-        -173, 34, -518, -489,
-        -151, 61, -583, -844,
-        220, -138, -681, -1020,
-        391, -17, -598, -321,
-        157, -295, 129, 155,
-        -926, -875, -987, 285,
-        241, -83, -125, -125,
-        620, 597, 432, 92,
-        393, 78, 409, 61,
-        -393, -739, -413, -748,
-        83, 54, 361, 27,
-        -1084, 130, -337, -694,
-        -1565, 297, 318, -19,
-        -1873, 36, 51, -317,
-        -2323, -246, 231, -84,
-        -2306, -783, 40, -179,
-        -2233, -930, -474, -462,
-        -754, -86, -288, -626,
-        -2411, -455, -63, 171,
-        -1099, -1094, -26, -143,
-        -1193, -455, -406, -381,
-        -605, -210, -96, -51,
-        -580, -476, -276, -15,
-        -1195, -634, -1203, -881,
-        -378, -221, -669, -952,
-        594, 178, -403, -676,
-        763, 327, 601, 290,
-        172, 300, 203, 157,
-        -56, -336, 356, 24,
-        -228, -296, -259, -29,
-        -186, 263, 416, 14,
-        -353, 373, -12, -216,
-        257, 96, 174, 57,
-        -1526, -616, -954, -499,
-        -497, -152, -333, 125,
-        105, 200, 179, -97,
-        -331, -224, 765, 697,
-        760, 256, 301, 59,
-        455, -85, 204, 288,
-        -514, 240, 251, -109,
-        256, 417, -34, -413,
-        101, 430, 384, 156,
-        -31, -10, 206, 426,
-        589, 145, 143, 71,
-        808, 906, 333, 349,
-        986, 938, 589, 331,
-        1300, 824, 187, 509,
-        1062, 653, 379, 466,
-        1462, 937, 401, 274,
-        787, 861, 265, 2,
-        609, 553, 28, 305,
-        926, 340, 106, 386,
-        241, -267, -147, 225,
-        -178, -534, 347, 502,
-        -643, -381, 397, 30,
-        -651, -733, -435, 398,
-        -407, -726, -484, -248,
-        -789, -914, -438, -476,
-        -498, -390, 75, -295,
-        -964, -590, -606, 150,
-        -121, -49, -155, -78,
-        935, 550, 389, 38,
-        -321, 127, 424, 315,
-        -285, -113, 283, 259,
-        658, 203, 322, 486,
-        903, 505, 748, 417,
-        611, 423, 555, 512,
-        239, -83, -578, -19,
-        -339, -731, 349, 13,
-        -934, -1399, -114, -360,
-        107, 692, 182, 90,
-        -1243, -1538, -1551, -725,
-        -568, -903, -1363, -525,
-        -517, -853, -861, -1004,
-        -168, -690, -835, 63,
-        -137, -556, -547, 144,
-        -286, -817, 485, 319,
-        -147, -408, 526, 246,
-        -347, -434, 297, -28,
-        -290, -471, -1110, -1285,
-        -460, -359, -988, -794,
-        1347, 1299, 690, 523,
-        1216, 1068, 1094, 757,
-        825, 1140, 752, 494,
-        1252, 1365, 1195, 898,
-        521, 1053, 532, 432,
-        -334, -216, -313, -263,
-        -160, 52, -472, -155,
-        127, 136, -380, 44,
-        851, 410, -162, -489,
-        123, -255, -796, -667,
-        1090, 917, 789, 493,
-        1397, 1197, 558, 202,
-        -51, -118, -342, -701,
-        83, 108, -42, -441,
-        61, 95, 287, 256,
-        -27, 89, 524, 531,
-        351, 227, 592, 545,
-        697, 155, -164, 307,
-        638, 274, -489, -50,
-        754, 240, -166, -124,
-        -116, -579, -1212, -63,
-        190, -295, -1040, -1296,
-        147, -376, -177, -113,
-        841, 1241, 1051, 668,
-        2, 293, 551, 304,
-        -1096, -953, -248, 376,
-        -750, -965, 87, 516,
-        -275, -516, 689, 391,
-        -379, -643, 876, 594,
-        -390, -1013, -645, 573,
-        -107, -568, -689, -826,
-        -1025, -27, -328, -203,
-        861, 749, 548, 233,
-        -1660, -1043, 451, 108,
-        -660, -620, 430, 236,
-        21, -396, -1158, -631,
-        1372, 1298, 967, 577,
-        1125, 1125, 589, 454,
-        -323, -865, -467, 153,
-        -468, -699, -804, -509,
-        -392, -718, -204, -35,
-        -603, -1093, -567, -162,
-        -505, -1004, -102, 350,
-        219, 224, 423, 252,
-        395, 591, 608, 363,
-        -746, -96, 373, 172,
-        171, 295, 714, 339,
-        233, 77, 107, 277,
-        157, 153, -499, -356,
-        1547, 1073, 576, 494,
-        -292, -339, -504, -592,
-        -903, -72, -619, -481,
-        -1594, -1117, -567, -254,
-        -793, -507, -564, -291,
-        -492, -532, 502, 560,
-        -382, 427, 600, 230,
-        -227, 477, 251, 75,
-        285, 842, 813, 476,
-        -1310, -1333, 186, 377,
-        -587, -917, 643, 381,
-        -1186, -553, 411, 82,
-        -1127, -820, -174, -540,
-        -604, 119, 543, 205,
-        -380, 657, 909, 567,
-        112, -298, -374, 114,
-        -857, -251, 56, 159,
-        401, 345, -34, -140,
-        -111, -607, 41, 614,
-        355, -114, -77, 474,
-        578, 56, 1450, 924,
-        1098, 1420, 741, 400,
-        246, 22, 588, 313,
-        -121, 327, 831, 472,
-        -1138, -608, 856, 552,
-        -1241, -1072, 638, 600,
-        -358, 254, -333, -303,
-        -646, 739, 358, 74,
-        1226, 1671, 1221, 849,
-        2241, 1624, 983, 636,
-        1841, 1477, 749, 384,
-        350, 263, 87, 128,
-        -1902, -941, -144, -64,
-        -1734, -255, 288, -31,
-        -2644, -1238, 366, 235,
-        -1643, -1092, -1344, -304,
-        -541, -1075, -1116, 123,
-        -1178, -252, -816, -180,
-        -1016, 533, 565, 233,
-        -487, -430, -188, 334,
-        867, 1236, 534, 171,
-        -1590, -1607, 635, 630,
-        -2196, 310, 924, 412,
-        -2358, -328, 956, 529,
-        -2639, -377, 630, 278,
-        -2602, 317, 799, 299,
-        -2406, 133, 340, 31,
-        -2156, -1468, 131, 125,
-        -1184, -490, -139, 46,
-        -744, 447, 891, 564,
-        67, -451, 646, 604,
-        -553, -429, -876, 396,
-        162, -66, 1305, 915,
-        479, 579, 1088, 794,
-        450, 278, 566, 324,
-        -1057, -154, 148, -177,
-        -2545, 168, 1070, 592,
-        -2351, -42, 819, 345,
-        -2344, -707, 721, 250,
-        -2175, -1497, -309, 122,
-        -78, -73, 120, 173,
-        -4, 262, -263, -261,
-        -431, -64, -405, -732,
-        -2609, 116, -83, -193,
-        -1525, -944, -477, -725,
-        -508, 307, 170, 172,
-        832, 417, 832, 686,
-        -225, 177, 894, 818,
-        -482, -389, 1279, 1039,
-        -383, 201, -350, 40,
-        730, 635, 226, 526,
-        503, 462, 338, 398,
-        535, 714, 40, -282,
-        1482, 1471, 1085, 731,
-        1561, 1072, 909, 693,
-        1419, 1282, 889, 879,
-        1153, 728, 1186, 840,
-        -226, 1130, 949, 689,
-        -494, -986, -1556, -128,
-        -568, -721, -713, -26,
-        317, 524, 70, 135,
-        -405, -865, -1766, -652,
-        -174, -801, 885, 773,
-        -153, -91, 1099, 751,
-        -506, -1149, 853, 646,
-        241, 782, 519, 539,
-        1853, 1700, 1101, 684,
-        -1249, -1486, -464, 188,
-        -893, -1409, -1312, -341,
-        -135, 438, -175, 18,
-        1111, 976, 319, 208,
-        -1430, -1768, 83, 458,
-        -530, -1000, 307, 129,
-        -840, -15, -29, -356,
-        -911, -924, -1147, -242,
-        -119, -528, 127, -133,
-        -761, -765, 190, -83,
-        -315, 895, 522, 231,
-        -222, 102, -63, -428,
-        316, 699, 379, 70,
-        25, 716, 314, -108,
-        507, 874, 566, 238,
-        108, 941, 519, 195,
-        425, -60, -427, 257,
-        139, -103, -630, 446,
-        334, 370, 412, 48,
-        -172, -690, -283, 557,
-        187, -286, 158, 483,
-        140, 270, -344, -631,
-        924, 579, -116, 132,
-        142, 466, -68, -64,
-        230, -145, -302, -542,
-        -803, -912, 1018, 737,
-        -773, 1015, 630, 297,
-        -2596, 95, 445, 336,
-        -2122, 491, 510, 191,
-        -1253, 161, -2, -324,
-        -1450, -633, -712, -105,
-        -842, -254, -411, 100,
-        -640, -290, 1010, 763,
-        -650, 313, 1169, 730,
-        140, 505, 1030, 766,
-        772, 287, 1067, 823,
-        495, 749, 305, 323,
-        -164, 462, 78, 399,
-        -342, -874, 69, 597,
-        -16, 620, 621, 337,
-        -138, -444, -265, 218,
-        84, -450, 953, 666,
-        -222, -803, 541, 604,
-        -921, -1376, 244, 116,
-        -841, -723, 630, 588,
-        140, 663, 294, 368,
-        935, 1046, 881, 759,
-        1746, 1464, 916, 628,
-        436, 963, 281, 1,
-        -119, 74, 542, 213,
-        1, -567, 301, 241,
-        260, 435, 222, 396,
-        936, 957, 1108, 703,
-        510, 506, 808, 478,
-        601, 694, 960, 620,
-        972, 741, 980, 600,
-        834, 717, 767, 684,
-        643, 972, 935, 638,
-        501, 661, 720, 851,
-        -105, -632, -303, -117,
-        -429, 130, 789, 442,
-        -522, -188, 704, 373,
-        -759, 42, 814, 523,
-        -531, -1137, 373, 578,
-        -682, -1203, -455, 285,
-        -1163, -1577, -1098, 44,
-        81, -82, 712, 363,
-        477, 246, 954, 622,
-        1604, 1622, 1277, 891,
-        1409, 859, 924, 892,
-        774, 1041, 947, 1142,
-        40, -546, -75, 288,
-        -616, -106, -697, -26,
-        -169, -160, -891, -739,
-        -279, -384, -1029, -350,
-        1781, 1308, 1046, 816,
-        1580, 1533, 1472, 1178,
-        1505, 1076, 1216, 899,
-        890, 904, 564, 654,
-        920, 692, 1021, 856,
-        -493, 132, 177, 505,
-        71, 195, -28, 97,
-        456, 351, -164, 88,
-        439, 278, -40, 350,
-        1395, 949, 234, -95,
-        -805, -472, 38, -163,
-        367, -98, 489, 523,
-        1025, 1178, 1212, 906,
-        319, 1314, 814, 461,
-        -123, -543, -804, 447,
-        -748, -324, -897, -1127,
-        -737, -501, -789, -713,
-        715, 777, 1239, 922,
-        1949, 1939, 1368, 865,
-        730, 880, 758, 388,
-        -871, 454, 17, -251,
-        -381, -810, -1583, 239,
-        -521, -966, -792, 259,
-        -890, -1358, -770, -73,
-        166, 349, -212, 323,
-        -840, -301, 473, 435,
-        -679, -464, 728, 351,
-        -156, -199, 667, 432,
-        29, -252, 415, 480,
-        -731, -379, 145, 559,
-        -528, -631, -1158, -159,
-        445, 273, 123, 639,
-        373, -126, 800, 568,
-        84, -162, 720, 712,
-        -830, -536, -185, 222,
-        408, 452, 501, 771,
-        -897, -1355, -67, 442,
-        -792, -1406, 566, 602,
-        167, -326, 509, 330,
-        -95, -626, -730, -344,
-        1668, 1217, 779, 455,
-        1316, 828, 584, 719,
-        404, -31, 1013, 789,
-        89, 107, 891, 549,
-        871, 1581, 917, 671,
-        866, 1479, 1289, 854,
-        391, 1068, 1122, 812,
-        78, -562, 345, 563,
-        429, -103, 417, 787,
-        -122, -437, 411, 788,
-        -913, -417, 602, 754,
-        -226, -16, 151, 760,
-        -700, 118, -104, -14,
-        -1128, 48, 284, 393,
-        -390, -419, -639, -116,
-        -910, 306, 316, -13,
-        1207, 984, 821, 669,
-        -1195, -693, 140, -213,
-        -884, -416, -199, -558,
-        -616, 245, -404, -664,
-        262, 56, -617, -724,
-        -85, -491, -320, -656,
-        -570, -831, -129, -528,
-        -1506, -63, -367, -385,
-        -358, -321, 4, 51,
-        -366, -214, 319, 511,
-        146, 671, -17, -291,
-        -110, 464, -139, -496,
-        -202, 220, -312, -631,
-        -660, -73, -655, -820,
-        -662, -653, -1288, -857,
-        -430, -953, -959, -264,
-        -49, -468, -72, -381,
-        -350, -563, -193, -407,
-        55, -408, -803, 11,
-        -309, 649, 188, -198,
-        -512, 461, -79, -458,
-        -1318, -263, -134, -523,
-        -1657, -435, -495, -765,
-        57, -347, -414, 434,
-        -1141, -242, -664, -857,
-        34, -68, -707, -338
-    };
-
-
-
-    /* third codebook for MR475, MR515 */
-
-    extern const Word16 mr515_3_lsf[] =
-    {
-        419,   163,   -30,  -262,
-        -455,  -789, -1430,  -721,
-        1006,   664,   269,    25,
-        619,   260,   183,    96,
-        -968, -1358,  -388,   135,
-        -693,   835,   456,   154,
-        1105,   703,   569,   363,
-        1625,  1326,   985,   748,
-        -220,   219,    76,  -208,
-        -1455, -1662,    49,   149,
-        -964,  -172,  -752,  -336,
-        625,   209,  -250,   -66,
-        -1017,  -838,    -2,   317,
-        -2168, -1485,  -138,   123,
-        -1876, -2099,  -521,    85,
-        -967,  -366,  -695,  -881,
-        -921, -1011,  -763,  -949,
-        -124,  -256,  -352,  -660,
-        178,   463,   354,   304,
-        -1744,  -591,  -282,    79,
-        -2249,   175,   867,   499,
-        -138,  -180,  -181,   -21,
-        -2291, -1241,  -460,  -520,
-        -771,   451,   -10,  -308,
-        271,   -65,     4,   214,
-        -279,  -435,   -43,  -348,
-        -670,    35,   -65,  -211,
-        806,   535,    85,   297,
-        57,   239,   722,   493,
-        225,   661,   840,   547,
-        -540,  -376,    14,   349,
-        469,   721,   331,   162,
-        -544,  -752,   -62,   -10,
-        398,   -88,   724,   701,
-        -19,  -533,   -94,   601,
-        136,   -71,  -681,  -747,
-        -166,  -344,   261,   -50,
-        161,   -52,   485,   337,
-        -1675,    50,   190,   -93,
-        -2282,  -231,  -194,   -82,
-        -95,  -595,  -154,   128,
-        894,   501,   588,   457,
-        -345,   206,   122,   110,
-        -631,  -227,  -569,     3,
-        408,   239,   397,   226,
-        -197,    -2,   128,   491,
-        1281,   904,   292,   215,
-        538,   306,   259,   509,
-        -677, -1047,    13,   321,
-        -679,  -588,  -358,  -212,
-        -558,   243,   646,   479,
-        486,   342,   634,   532,
-        107,   802,   331,   136,
-        -112,  -398, -1031,  -286,
-        -326,  -705,   288,   272,
-        1299,  1144,  1178,   860,
-        -423,   121,  -385,  -148,
-        -295,  -302,  -834,  -819,
-        16,   -24,  -201,  -476,
-        555,    91,  -245,   294,
-        -38,  -379,  -962, -1221,
-        -1191, -1518,  -273,  -395,
-        -390, -1013,  -645,   573,
-        -1843, -1030,   505,   468,
-        744,   947,   609,   493,
-        -689, -1172,  -628,  -135,
-        -1026,   195,   411,   196,
-        1582,  1147,   575,   337,
-        -1239,  -777,  -648,  -142,
-        595,   825,   967,   735,
-        -1206,  -970,   -81,  -342,
-        -745,    13,   -72,   375,
-        454,    19,  1407,   921,
-        -1647,  -172,   861,   562,
-        928,  1537,  1063,   740,
-        -2472,  -952,   264,    82,
-        -502,  -965, -1334,   123,
-        867,  1236,   534,   171,
-        -2320,  -460,   780,   363,
-        -1190,  -617,   252,   -61,
-        -174,    34,  1011,   788,
-        -2333,   247,   423,   153,
-        -16,  -355,   262,   449,
-        -1576, -1073,  -544,  -371,
-        -615,  -305,  1051,   805,
-        687,   528,     6,  -182,
-        935,   875,  1002,   809,
-        199,   257,   126,    76,
-        -584, -1138,   599,   556,
-        -1105, -1391, -1591,  -519,
-        -977, -1325,   108,   347,
-        -722,  -975,   365,   101,
-        -145,   681,   249,  -153,
-        0,  -334,  -570,   159,
-        412,   285,  -336,  -617,
-        -953,  -966,   887,   689,
-        -1251,    84,  -185,  -398,
-        -592,   433,  1044,   653,
-        85,   329,   -40,   361,
-        -433,  -705,   466,   574,
-        -154,   654,   592,   290,
-        -167,    72,   349,   175,
-        674,   297,   977,   720,
-        1235,  1204,   757,   488,
-        -400,  -269,   538,   372,
-        -1350, -1387, -1194,   -91,
-        1262,   876,   775,   700,
-        -599,   -38,  -430,  -722,
-        1976,  1630,   991,   608,
-        111,   276,  -226,   -96,
-        -947,  -388,   -11,    -7,
-        -303,  -531,  -839,   338,
-        1734,  1710,  1405,  1013,
-        -516,  -855,  -645,   210,
-        -688,  -416,   513,   230,
-        -822,  -637, -1146,  -320,
-        -952,  -658,  -694,   183,
-        -114,  -623,   818,   674,
-        -191,  -204,   731,   635,
-        51,  1221,   883,   576,
-        -954,  -431,   826,   598,
-        -342,  -755,  -900,  -407,
-        -1126,  -354,  -206,  -512,
-        -547,  -810,  -357,  -620,
-        66,   515,   -73,  -410,
-        -872,  -945, -1444, -1227,
-        191,   -17,  -544,  -231,
-        -1540,  -544,  -901,  -886
-    };
-
-    /* first codebook for MR795 */
-
-    extern const Word16 mr795_1_lsf[] =
-    {
-        -890, -1550, -2541,
-        -819,  -970,   175,
-        -826, -1234,  -762,
-        -599,   -22,   634,
-        -811,  -987,  -902,
-        -323,   203,    26,
-        -383,  -235,  -781,
-        -399,  1262,   906,
-        -932, -1399, -1380,
-        -624,    93,    87,
-        -414,  -539,  -691,
-        37,   633,   510,
-        -387,  -476, -1330,
-        399,    66,   263,
-        -407,   -49,  -335,
-        -417,  1041,  1865,
-        -779, -1089, -1440,
-        -746,  -858,   832,
-        -581,  -759,  -371,
-        -673,  -506,  2088,
-        -560,  -634, -1179,
-        271,   241,    14,
-        -438,  -244,  -397,
-        463,  1202,  1047,
-        -606,  -797, -1438,
-        -51,  -323,   481,
-        -224,  -584,  -527,
-        494,   881,   682,
-        -433,  -306, -1002,
-        554,   659,   222,
-        171,  -160,  -353,
-        681,  1798,  1565,
-        -852, -1181, -1695,
-        -336,  -666,   114,
-        -581,  -756,  -744,
-        -195,   375,   497,
-        -465,  -804, -1098,
-        154,   282,  -131,
-        -50,  -191,  -719,
-        323,   732,  1542,
-        -722,  -819, -1404,
-        105,  -250,   185,
-        -178,  -502,  -742,
-        321,   510,  1111,
-        -323,  -567,  -966,
-        127,   484,   338,
-        -160,    52,  -338,
-        732,  1367,  1554,
-        -626,  -802, -1696,
-        -286,  -586,   676,
-        -695,  -343,  -370,
-        -490,   295,  1893,
-        -630,  -574, -1014,
-        -80,   645,   -69,
-        -6,  -318,  -364,
-        782,  1450,  1038,
-        -313,  -733, -1395,
-        120,    60,   477,
-        -264,  -585,  -123,
-        711,  1245,   633,
-        -91,  -355, -1016,
-        771,   758,   261,
-        253,    81,  -474,
-        930,  2215,  1720,
-        -808, -1099, -1925,
-        -560,  -782,   169,
-        -804, -1074,  -188,
-        -626,   -55,  1405,
-        -694,  -716, -1194,
-        -660,   354,   329,
-        -514,   -55,  -543,
-        366,  1033,  1182,
-        -658,  -959, -1357,
-        -55,  -184,    93,
-        -605,  -286,  -662,
-        404,   449,   827,
-        -286,  -350, -1263,
-        628,   306,   227,
-        -16,   147,  -623,
-        186,   923,  2146,
-        -674,  -890, -1606,
-        -443,  -228,   339,
-        -369,  -790,  -409,
-        231,    86,  1469,
-        -448,  -581, -1061,
-        594,   450,  -177,
-        -124,  -170,  -447,
-        671,  1159,  1404,
-        -476,  -667, -1511,
-        -77,  -138,   716,
-        -177,  -372,  -381,
-        451,   934,   915,
-        -250,  -432,  -822,
-        272,   828,   446,
-        26,    19,   -31,
-        698,  1692,  2168,
-        -646,  -977, -1924,
-        -179,  -473,   268,
-        -379,  -745,  -691,
-        11,   127,  1033,
-        -488,  -917,  -825,
-        61,   323,   135,
-        147,  -145,  -686,
-        685,   786,  1682,
-        -506,  -848, -1297,
-        35,    90,   222,
-        -23,  -346,  -670,
-        455,   591,  1287,
-        -203,  -593, -1086,
-        652,   352,   437,
-        39,    63,  -457,
-        841,  1265,  2105,
-        -520,  -882, -1584,
-        -328,  -711,  1421,
-        -596,  -342,   -70,
-        209,   173,  1928,
-        -423,  -598,  -921,
-        421,   605,   -38,
-        -2,  -245,  -127,
-        896,  1969,  1135,
-        -379,  -518, -1579,
-        173,   118,   753,
-        -55,  -381,   -52,
-        985,  1021,   753,
-        -2,  -291,  -891,
-        753,   992,   423,
-        264,   131,  -196,
-        895,  2274,  2543,
-        -635, -1088, -2499,
-        -529,  -982,   526,
-        -764,  -830,  -548,
-        -436,   316,   599,
-        -675,  -940,  -746,
-        -57,   236,   -11,
-        -201,   -81,  -798,
-        16,   845,  1558,
-        -737,  -985, -1212,
-        -468,    17,   290,
-        -279,  -584,  -700,
-        183,   822,   705,
-        -265,  -492, -1187,
-        421,   152,   468,
-        -390,   166,  -268,
-        39,  1550,  1868,
-        -635,  -966, -1571,
-        -453,  -492,   910,
-        -284, -1027,   -75,
-        -181,  -133,  1852,
-        -445,  -624, -1174,
-        420,   367,   -49,
-        -389,  -212,  -169,
-        707,  1073,  1208,
-        -539,  -710, -1449,
-        83,  -163,   484,
-        -236,  -543,  -355,
-        338,  1175,   814,
-        -246,  -309,  -958,
-        606,   760,    60,
-        166,    -8,  -163,
-        -306,  1849,  2563,
-        -747, -1025, -1783,
-        -419,  -446,   209,
-        -718,  -566,  -534,
-        -506,   693,   857,
-        -463,  -697, -1082,
-        325,   431,  -206,
-        -15,    -8,  -763,
-        545,   919,  1518,
-        -611,  -783, -1313,
-        256,   -55,   208,
-        -165,  -348,  -662,
-        321,   680,   930,
-        -326,  -429,  -951,
-        484,   446,   570,
-        -197,    72,   -73,
-        909,  1455,  1741,
-        -563,  -737, -1974,
-        -124,  -416,   718,
-        -478,  -404,  -314,
-        -16,   446,  1636,
-        -551,  -537,  -750,
-        -58,   638,   214,
-        55,  -185,  -271,
-        1148,  1301,  1212,
-        -483,  -671, -1264,
-        117,   285,   543,
-        -204,  -391,  -111,
-        513,  1538,   854,
-        -114,  -190,  -978,
-        877,   595,   464,
-        260,   260,  -311,
-        748,  2283,  2216,
-        -517,  -945, -2171,
-        -326,  -708,   378,
-        -812,  -691,  -232,
-        -560,   687,  1409,
-        -732,  -690,  -836,
-        -359,   645,   386,
-        -265,    62,  -678,
-        145,  1644,  1208,
-        -555,  -988, -1233,
-        -78,    14,   114,
-        -327,  -358,  -489,
-        392,   677,   697,
-        -201,  -236, -1140,
-        693,   449,   178,
-        -243,   256,  -433,
-        611,  1385,  2456,
-        -612,  -901, -1464,
-        -307,   -17,   499,
-        -315,  -667,  -254,
-        256,   428,  1463,
-        -486,  -422, -1056,
-        655,   370,    18,
-        -102,  -185,  -276,
-        755,  1578,  1335,
-        -488,  -603, -1418,
-        182,   -93,   870,
-        -73,  -458,  -348,
-        835,   862,   957,
-        -282,  -333,  -746,
-        547,   839,   428,
-        273,   -89,    13,
-        940,  1708,  2576,
-        -418, -1084, -1758,
-        -44,  -358,   259,
-        -497,  -643,  -560,
-        99,   557,   961,
-        -421,  -766,  -917,
-        295,   326,   184,
-        175,    15,  -626,
-        532,   878,  1981,
-        -443,  -768, -1275,
-        221,   156,   268,
-        39,  -363,  -505,
-        695,   772,  1140,
-        -162,  -459,  -912,
-        709,   444,   658,
-        25,   303,  -312,
-        1268,  1410,  1715,
-        -297,  -766, -1836,
-        -263,  -108,  1070,
-        -406,   -13,  -129,
-        57,   438,  2734,
-        -374,  -487,  -835,
-        304,   696,   164,
-        104,  -235,     5,
-        1611,  1900,  1399,
-        -229,  -582, -1325,
-        405,   192,   817,
-        -87,  -438,   111,
-        1028,  1199,   993,
-        68,  -175,  -934,
-        1033,  1117,   451,
-        478,   200,  -248,
-        2127,  2696,  2042,
-        -835, -1323, -2131,
-        -799,  -692,   466,
-        -812, -1032,  -469,
-        -622,   288,   920,
-        -701,  -841, -1070,
-        -411,   512,     8,
-        -390,   -91,  -744,
-        -30,  1043,  1161,
-        -822, -1148, -1156,
-        -294,   -46,   110,
-        -411,  -374,  -678,
-        214,   531,   668,
-        -406,  -420, -1194,
-        487,   232,   303,
-        -318,    91,  -472,
-        123,  1232,  2445,
-        -722,  -952, -1495,
-        -738,  -675,  1332,
-        -543,  -606,  -211,
-        -95,   -98,  1508,
-        -549,  -514, -1193,
-        473,   211,    73,
-        -288,  -112,  -389,
-        537,  1332,  1258,
-        -567,  -755, -1545,
-        71,  -283,   632,
-        -170,  -481,  -493,
-        681,  1002,   817,
-        -356,  -331,  -877,
-        419,   706,   346,
-        241,   -34,  -326,
-        377,  1950,  1883,
-        -727, -1075, -1625,
-        -233,  -543,   116,
-        -524,  -806,  -585,
-        -73,   478,   729,
-        -288,  -925, -1143,
-        173,   447,   -52,
-        68,  -229,  -606,
-        449,   529,  1797,
-        -591,  -875, -1363,
-        183,  -144,   324,
-        -103,  -452,  -666,
-        623,   488,  1176,
-        -238,  -511, -1004,
-        326,   552,   458,
-        136,   108,  -319,
-        626,  1343,  1883,
-        -490,  -646, -1730,
-        -186,  -449,   984,
-        -738,   -76,  -170,
-        -550,   755,  2560,
-        -496,  -510,  -947,
-        210,   694,   -52,
-        84,  -322,  -199,
-        1090,  1625,  1224,
-        -376,  -603, -1396,
-        343,    74,   632,
-        -175,  -502,   -32,
-        972,  1332,   734,
-        52,  -295, -1113,
-        1065,   918,   160,
-        393,   107,  -397,
-        1214,  2649,  1741,
-        -632, -1201, -1891,
-        -719,  -277,   353,
-        -651,  -880,  -122,
-        -211,   209,  1338,
-        -562,  -714, -1059,
-        -208,   388,   159,
-        -320,   -61,  -551,
-        293,  1092,  1443,
-        -648,  -865, -1253,
-        -49,  -143,   305,
-        -401,  -227,  -585,
-        561,   532,   927,
-        -117,  -443, -1188,
-        507,   436,   292,
-        -79,   233,  -458,
-        671,  1025,  2396,
-        -633,  -842, -1525,
-        -308,  -286,   640,
-        -373,  -621,  -407,
-        418,   253,  1305,
-        -315,  -581, -1137,
-        572,   685,  -281,
-        61,   -68,  -371,
-        991,  1101,  1498,
-        -493,  -683, -1362,
-        -47,   164,   704,
-        -256,  -314,  -268,
-        631,   949,  1052,
-        -118,  -348,  -833,
-        68,  1180,   568,
-        152,   117,    34,
-        1113,  1902,  2239,
-        -601,  -959, -1706,
-        -143,  -489,   480,
-        -332,  -655,  -574,
-        54,   353,  1192,
-        -462,  -652,  -796,
-        150,   549,   112,
-        195,  -111,  -515,
-        679,  1108,  1647,
-        -558,  -749, -1217,
-        -9,   272,   341,
-        -53,  -265,  -535,
-        489,   843,  1298,
-        -120,  -482, -1032,
-        632,   543,   408,
-        179,   306,  -526,
-        1124,  1464,  2244,
-        -417,  -786, -1562,
-        -224,  -384,  1364,
-        -377,  -459,   -25,
-        385,   489,  2174,
-        -332,  -651,  -829,
-        544,   553,    61,
-        22,  -113,   -89,
-        1128,  1725,  1524,
-        -216,  -373, -1653,
-        161,   316,   908,
-        -165,  -222,   -67,
-        1362,  1175,   789,
-        73,  -252,  -767,
-        738,   932,   616,
-        362,   246,  -126,
-        787,  2654,  3027,
-        -691, -1106, -2190,
-        -565,  -588,   524,
-        -590,  -979,  -490,
-        -263,   397,   982,
-        -577,  -837,  -945,
-        -22,   435,   -49,
-        -190,  -118,  -629,
-        -88,  1240,  1513,
-        -636, -1051, -1019,
-        -291,   189,   259,
-        -257,  -470,  -629,
-        145,   945,   894,
-        -326,  -364, -1094,
-        543,   260,   630,
-        -202,   189,  -209,
-        357,  1379,  2091,
-        -569, -1075, -1449,
-        -714,  -239,   919,
-        -420,  -705,   -84,
-        -109,  -114,  2407,
-        -413,  -529, -1177,
-        482,   368,   131,
-        -186,   -72,  -131,
-        861,  1255,  1220,
-        -611,  -658, -1341,
-        227,  -121,   631,
-        -176,  -489,  -218,
-        745,  1175,   957,
-        -321,  -148,  -936,
-        671,   966,   216,
-        340,    -3,  -143,
-        469,  1848,  2437,
-        -729,  -961, -1683,
-        -213,  -254,   321,
-        -511,  -438,  -521,
-        -126,   725,   903,
-        -340,  -685, -1032,
-        316,   480,    20,
-        23,   -89,  -551,
-        353,  1051,  1789,
-        -544,  -757, -1364,
-        298,   -25,   436,
-        -100,  -392,  -519,
-        467,   754,  1078,
-        -210,  -398, -1078,
-        620,   658,   630,
-        33,   147,  -178,
-        921,  1687,  1921,
-        -325,  -528, -1978,
-        2,  -285,   910,
-        -371,  -490,  -230,
-        0,   597,  2010,
-        -496,  -395,  -834,
-        37,   945,   245,
-        181,  -160,  -144,
-        1481,  1373,  1357,
-        -355,  -601, -1270,
-        298,   322,   672,
-        -193,  -336,    77,
-        1089,  1533,   922,
-        177,   -39, -1125,
-        996,   781,   536,
-        456,   366,  -432,
-        1415,  2440,  2279,
-        -466,  -758, -2325,
-        -303,  -509,   387,
-        -727,  -557,    66,
-        -145,   643,  1248,
-        -544,  -676,  -916,
-        -225,   862,   588,
-        -152,    40,  -533,
-        423,  1423,  1558,
-        -572,  -843, -1145,
-        -128,    85,   461,
-        -238,  -257,  -584,
-        605,   748,   861,
-        24,  -202, -1409,
-        797,   487,   303,
-        -181,   364,  -182,
-        616,  1378,  2942,
-        -494,  -852, -1441,
-        -292,    61,   812,
-        -84,  -723,  -182,
-        555,   532,  1506,
-        -365,  -493, -1057,
-        822,   588,    11,
-        -14,   -18,  -230,
-        1001,  1401,  1451,
-        -474,  -569, -1292,
-        302,    62,  1062,
-        -70,  -376,  -222,
-        982,   974,  1149,
-        -196,  -234,  -795,
-        479,  1098,   499,
-        362,    58,    70,
-        1147,  2069,  2857,
-        -487,  -878, -1824,
-        73,  -288,   348,
-        -358,  -500,  -508,
-        199,   721,  1242,
-        -78,  -697,  -795,
-        361,   536,   196,
-        374,   110,  -735,
-        847,  1051,  1896,
-        -366,  -713, -1182,
-        315,   320,   429,
-        72,  -215,  -450,
-        759,   886,  1363,
-        -30,  -428,  -834,
-        861,   627,   796,
-        118,   468,  -279,
-        1355,  1883,  1893,
-        -188,  -642, -1612,
-        63,  -175,  1198,
-        -418,  -211,    51,
-        414,   587,  2601,
-        -234,  -557,  -858,
-        424,   889,   222,
-        136,  -101,    83,
-        1413,  2278,  1383,
-        -84,  -445, -1389,
-        414,   313,  1045,
-        29,  -343,    65,
-        1552,  1647,   980,
-        183,   -91,  -829,
-        1273,  1413,   360,
-        553,   272,  -107,
-        1587,  3149,  2603
-    };
-
-    /*--------------------------------------------------------------------------*/
-#ifdef __cplusplus
-}
-#endif
-
-/*
-------------------------------------------------------------------------------
- FUNCTION NAME:
-------------------------------------------------------------------------------
- INPUT AND OUTPUT DEFINITIONS
-
- Inputs:
-	None
-
- Outputs:
-	None
-
- Returns:
-	None
-
- Global Variables Used:
-    None
-
- Local Variables Needed:
-    None
-
-------------------------------------------------------------------------------
- FUNCTION DESCRIPTION
-
- None
-
-------------------------------------------------------------------------------
- REQUIREMENTS
-
- None
-
-------------------------------------------------------------------------------
- REFERENCES
-
- [1] q_plsf_3_tbl.tab
-                UMTS GSM AMR speech codec, R99 - Version 3.2.0, March 2, 2001
-
-------------------------------------------------------------------------------
- PSEUDO-CODE
-
-
-------------------------------------------------------------------------------
- RESOURCES USED [optional]
-
- When the code is written for a specific target processor the
- the resources used should be documented below.
-
- HEAP MEMORY USED: x bytes
-
- STACK MEMORY USED: x bytes
-
- CLOCK CYCLES: (cycle count equation for this function) + (variable
-                used to represent cycle count for each subroutine
-                called)
-     where: (cycle count variable) = cycle count for [subroutine
-                                     name]
-
-------------------------------------------------------------------------------
- CAUTION [optional]
- [State any special notes, constraints or cautions for users of this function]
-
-------------------------------------------------------------------------------
-*/
 
 /*----------------------------------------------------------------------------
-; FUNCTION CODE
+; MACROS
+; [Define module specific macros here]
 ----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; DEFINES
+; [Include all pre-processor statements here. Include conditional
+; compile variables also.]
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; LOCAL FUNCTION DEFINITIONS
+; [List function prototypes here]
+----------------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------------
+; LOCAL VARIABLE DEFINITIONS
+; [Variable declaration - defined here and used outside this module]
+----------------------------------------------------------------------------*/
+/*
+********************************************************************************
+*
+*      GSM AMR-NB speech codec   R98   Version 7.5.0   March 2, 2001
+*                                R99   Version 3.2.0
+*                                REL-4 Version 4.0.0
+*
+********************************************************************************
+*
+*      File             : q_plsf_3.tab
+*      Purpose          : Table for routine LSF VQ.
+*      $Id $
+*
+********************************************************************************
+*/
+
+
+/* initalization table for MA predictor in dtx mode */
+const Word16 past_rq_init[80] =
+{
+    -258, -318, -439, -634, -656, -773, -711, -502, -268, -193,
+    -2,  125,  122,  -39,   -9,  105,  129,  283,  372,  575,
+    -277, -324, -197, -487, -445, -362, -292,  -27,  177,  543,
+    342,  517,  516,  130,   27, -104, -120, -140,  -74,  -56,
+    -564, -943, -1520, -965, -814, -526, -322,   -2,  159,  657,
+    -312, -284, -386, -597, -493, -526, -418, -229,  105,  449,
+    -557, -870, -1075, -919, -950, -752, -709, -316,   62,  486,
+    -314, -191, -203, -330, -160, -103,  -51,  131,  338,  515
+};
+
+
+const Word16 mean_lsf_3[10] =
+{
+    1546,
+    2272,
+    3778,
+    5488,
+    6972,
+    8382,
+    10047,
+    11229,
+    12766,
+    13714
+};
+
+
+const Word16 pred_fac_3[10] =
+{
+    9556,
+    10769,
+    12571,
+    13292,
+    14381,
+    11651,
+    10588,
+    9767,
+    8593,
+    6484
+};
+
+
+
+/* first codebook from IS641 */
+
+const Word16 dico1_lsf_3[DICO1_SIZE*3] =
+{
+    6, 82, -131,
+    154, -56, -735,
+    183, -65, -265,
+    9, -210, -361,
+    113, 718, 1817,
+    1010, 1214, 1573,
+    857, 1333, 2276,
+    827, 1568, 1933,
+    717, 1989, 2206,
+    838, 1172, 1823,
+    721, 1000, 2154,
+    286, 476, 1509,
+    -247, -531, 230,
+    147, -82, 569,
+    26, -177, -944,
+    -27, -273, 692,
+    -164, -264, -183,
+    224, 790, 1039,
+    899, 946, 601,
+    485, 771, 1150,
+    524, 677, 903,
+    -140, 375, 778,
+    410, 676, 429,
+    301, 530, 1009,
+    719, 646, 38,
+    226, 367, 40,
+    145, -45, -505,
+    290, 121, -121,
+    302, 127, 166,
+    -124, -383, -956,
+    -358, -455, -977,
+    715, 878, 894,
+    978, 923, 211,
+    477, 272, 64,
+    188, -78, 17,
+    -143, -65, 38,
+    643, 586, 621,
+    -134, -426, -651,
+    347, 545, 2820,
+    1188, 2726, 2442,
+    142, -80, 1735,
+    283, 130, 461,
+    -262, -399, -1145,
+    -411, 155, 430,
+    329, 375, 779,
+    53, -226, -139,
+    -129, -236, 1682,
+    285, 744, 1327,
+    738, 697, 1664,
+    312, 409, 266,
+    325, 720, 135,
+    1, 221, 453,
+    8, 203, 145,
+    299, 640, 760,
+    29, 468, 638,
+    103, 429, 379,
+    420, 954, 932,
+    1326, 1210, 1258,
+    704, 1012, 1152,
+    -166, -444, -266,
+    -316, -130, -376,
+    191, 1151, 1904,
+    -240, -543, -1260,
+    -112, 268, 1207,
+    70, 1062, 1583,
+    278, 1360, 1574,
+    -258, -272, -768,
+    19, 563, 2240,
+    -3, -265, 135,
+    -295, -591, -388,
+    140, 354, -206,
+    -260, -504, -795,
+    -433, -718, -1319,
+    109, 331, 962,
+    -429, -87, 652,
+    -296, 426, 1019,
+    -239, 775, 851,
+    489, 1334, 1073,
+    -334, -332, 25,
+    543, 1206, 1807,
+    326, 61, 727,
+    578, 849, 1405,
+    -208, -277, 329,
+    -152, 64, 669,
+    -434, -678, -727,
+    -454, -71, 251,
+    605, 480, 254,
+    -482, 11, 996,
+    -289, 395, 486,
+    722, 1049, 1440,
+    -30, -316, -786,
+    -106, -115, -619,
+    861, 1474, 1412,
+    1055, 1366, 1184,
+    812, 1237, 925,
+    42, -251, -576,
+    342, 141, -454,
+    -168, -80, 1359,
+    -342, -656, -1763,
+    100, 821, 725,
+    990, 747, 800,
+    332, 440, 568,
+    663, 379, 852,
+    112, 165, -369,
+    597, 910, 282,
+    -8, 834, 1281,
+    -352, 572, 695,
+    462, 2246, 1806,
+    345, 190, 1374,
+    416, 915, 2166,
+    168, -82, 280,
+    -516, -446, 840,
+    47, 533, 44,
+    -362, -711, -1143,
+    22, 193, 1472,
+    -85, 233, 1813,
+    -62, 579, 1504,
+    550, 944, 1749,
+    723, 650, 1148,
+    972, 884, 1395,
+    -425, 643, 0,
+    1000, 952, 1098,
+    249, 1446, 672,
+    -334, -87, 2172,
+    -554, 1882, 2672,
+    140, 1826, 1853,
+    920, 1749, 2590,
+    1076, 1933, 2038,
+    -137, -443, -1555,
+    1269, 1174, 468,
+    -493, -122, 1521,
+    -451, 1033, 1214,
+    482, 1695, 1118,
+    815, 649, 384,
+    -446, -692, 107,
+    -319, -605, -118,
+    -207, -505, 525,
+    -468, -12, 2736,
+    75, 1934, 1305,
+    880, 2358, 2267,
+    1285, 1575, 2004,
+    -48, -304, -1186,
+    -435, -461, -251,
+    -366, -404, -547,
+    -289, -605, -597,
+    -538, -810, -165,
+    -120, 3, 356,
+    639, 1241, 1502,
+    96, 177, 750,
+    -435, -585, -1174,
+    -356, 109, -79,
+    -485, 288, 2005,
+    9, 1116, 731,
+    880, 2134, 946,
+    -265, 1585, 1065,
+    1157, 1210, 843,
+    -498, -668, 431,
+    374, 321, -229,
+    1440, 2101, 1381,
+    449, 461, 1155,
+    -105, 39, -384,
+    -263, 367, 182,
+    -371, -660, 773,
+    -188, 1151, 971,
+    1333, 1632, 1435,
+    774, 1267, 1221,
+    -482, -832, -1489,
+    -237, -210, 860,
+    890, 1615, 1064,
+    472, 1062, 1192,
+    185, 1077, 989,
+    -568, -992, -1704,
+    -449, -902, -2043,
+    -142, -377, -458,
+    -210, -554, -1029,
+    -11, 1133, 2265,
+    -329, -675, -893,
+    -250, 657, 1187,
+    519, 1510, 1779,
+    520, 539, 1403,
+    527, 1421, 1302,
+    -563, -871, -1248,
+    -147, -463, 879,
+    -76, 2334, 2840,
+    563, 2573, 2385,
+    632, 1926, 2920,
+    719, 2023, 1840,
+    -545, -723, 1108,
+    129, -125, 884,
+    1417, 1632, 925,
+    -94, 1566, 1751,
+    -341, 1533, 1551,
+    591, 395, -274,
+    -76, 981, 2831,
+    153, 2985, 1844,
+    1032, 2565, 2749,
+    1508, 2832, 1879,
+    791, 1199, 538,
+    -190, -453, 1489,
+    -278, -548, 1158,
+    -245, 1941, 2044,
+    1024, 1560, 1650,
+    512, 253, 466,
+    -62, -323, 1151,
+    -473, -376, 507,
+    -433, 1380, 2162,
+    899, 1943, 1445,
+    134, 704, 440,
+    460, 525, -28,
+    -450, 279, 1338,
+    0, 971, 252,
+    -445, -627, -991,
+    -348, -602, -1424,
+    398, 712, 1656,
+    -107, 314, -178,
+    93, 2226, 2238,
+    518, 849, 656,
+    -462, -711, -447,
+    174, -34, 1191,
+    -119, 42, 1005,
+    -372, 274, 758,
+    1036, 2352, 1838,
+    675, 1724, 1498,
+    430, 1286, 2133,
+    -129, -439, 0,
+    -373, 800, 2144,
+    6, 1587, 2478,
+    478, 596, 2128,
+    -428, -736, 1505,
+    385, 178, 980,
+    139, 449, 1225,
+    -526, -842, -982,
+    145, 1554, 1242,
+    623, 1448, 656,
+    349, 1016, 1482,
+    31, -280, 415,
+    -316, 724, 1641,
+    360, 1058, 556,
+    -436, -358, 1201,
+    -355, 1123, 1939,
+    401, 1584, 2248,
+    -527, -1012, 355,
+    233, 238, 2233,
+    -550, -897, -639,
+    -365, -501, 1957,
+    389, 1860, 1621,
+    162, 1132, 1264,
+    -237, 1174, 1390,
+    -640, -411, 116,
+    -228, 1694, 2298,
+    1639, 2186, 2267,
+    562, 1273, 2658,
+    323, 338, 1774,
+    578, 1107, 852,
+    22, 594, 934,
+    -143, 718, 446
+};
+
+
+/* second codebook from IS641 */
+
+const Word16 dico2_lsf_3[DICO2_SIZE*3] =
+{
+    50, 71, -9,
+    -338, -698, -1407,
+    102, -138, -820,
+    -310, -469, -1147,
+    414, 67, -267,
+    1060, 814, 1441,
+    1548, 1360, 1272,
+    1754, 1895, 1661,
+    2019, 2133, 1820,
+    1808, 2318, 1845,
+    644, -93, 454,
+    858, 329, -136,
+    489, -258, -128,
+    -198, -745, -41,
+    -52, -265, -985,
+    346, 137, 479,
+    -1741, -748, -684,
+    -1163, -1725, -367,
+    -895, -1145, -784,
+    -488, -946, -968,
+    -85, -390, -725,
+    215, -340, -171,
+    1020, 916, 1969,
+    564, 179, 746,
+    662, 977, 1734,
+    887, 622, 914,
+    939, 856, 1165,
+    309, 688, 803,
+    917, 161, 570,
+    118, -20, -283,
+    -816, -42, 204,
+    -1228, -325, -462,
+    -963, -202, -143,
+    -988, -484, -361,
+    -702, -978, -477,
+    -302, -790, -1188,
+    -100, -786, -1088,
+    -1054, -947, -1684,
+    -202, -843, -782,
+    -1039, -1378, -901,
+    -624, -110, -85,
+    356, 213, -10,
+    -493, 364, 774,
+    425, 822, 479,
+    -83, 557, 520,
+    -992, -1560, -572,
+    -603, -741, -26,
+    -502, -638, -903,
+    209, 306, 147,
+    -316, -593, -596,
+    -85, -211, -225,
+    -918, -529, 117,
+    233, -439, -738,
+    1101, 751, 633,
+    1457, 1716, 1511,
+    1765, 1457, 910,
+    1122, 1156, 849,
+    1354, 868, 470,
+    -871, -1150, -1796,
+    -871, -861, -992,
+    -118, 155, 212,
+    -1051, -849, -606,
+    -1117, -1849, -2750,
+    -1019, -1427, -1869,
+    370, -184, -414,
+    959, 493, 104,
+    958, 1039, 543,
+    154, 653, 201,
+    1249, 507, 150,
+    663, 503, 230,
+    623, 777, 675,
+    659, 88, -110,
+    843, 244, 224,
+    382, 541, 302,
+    724, 433, 666,
+    1166, 734, 341,
+    -138, 20, -397,
+    -1183, -424, -46,
+    -321, -352, -124,
+    1333, 1021, 1080,
+    262, 366, 723,
+    922, 283, -551,
+    31, -636, -611,
+    -689, -697, -415,
+    -952, -779, -201,
+    -1329, -598, -359,
+    -953, -1285, 166,
+    493, 305, 221,
+    846, 703, 610,
+    840, 936, 774,
+    -723, -1324, -1261,
+    -357, -1025, -1388,
+    -1096, -1376, -365,
+    -1416, -1881, -608,
+    -1798, -1727, -674,
+    -545, -1173, -703,
+    678, 786, 148,
+    -123, 696, 1288,
+    644, 350, -10,
+    414, 614, 15,
+    137, 344, -211,
+    -814, -1512, -819,
+    -391, -930, -588,
+    47, -591, -898,
+    -909, -1097, -163,
+    -1272, -1167, -157,
+    -1464, -1525, -389,
+    -1274, -1188, -624,
+    671, 213, 454,
+    124, -274, -525,
+    -729, -496, -152,
+    -1344, 122, 135,
+    -2905, -589, -394,
+    -1728, 441, -50,
+    1476, 904, 787,
+    316, 236, -440,
+    -347, 217, 413,
+    -911, -917, 121,
+    -455, -932, 202,
+    -92, -465, -375,
+    488, 390, 474,
+    876, 729, 316,
+    -1815, -1312, -669,
+    87, 962, 432,
+    563, -249, -1058,
+    250, 285, 1105,
+    1141, 427, 696,
+    -1038, -1664, -1582,
+    -948, 346, 160,
+    -309, -272, -858,
+    670, 624, 1250,
+    -944, -408, -666,
+    -606, -320, -384,
+    -492, 230, 65,
+    334, -50, -16,
+    -16, -690, -1397,
+    1791, 1716, 1399,
+    2478, 2063, 1404,
+    1245, 1471, 1426,
+    -382, -1037, -2,
+    173, -398, 1145,
+    1491, 2024, 1801,
+    772, 1274, 1506,
+    1429, 1735, 2001,
+    1079, 1218, 1273,
+    -1154, -1851, -1329,
+    -808, -1133, -1096,
+    -451, -1033, -1722,
+    65, 578, -84,
+    -1476, -2434, -1778,
+    -765, -1366, -494,
+    -218, -594, -931,
+    337, -236, 562,
+    2357, 2662, 1938,
+    1489, 1276, 874,
+    189, 358, 374,
+    -1519, -2281, -2346,
+    -967, -1271, -2095,
+    -628, -1188, -1542,
+    1661, 1043, 546,
+    565, 1061, 732,
+    -64, -836, -434,
+    -436, -96, 203,
+    1078, 1216, 1636,
+    907, 1534, 986,
+    326, 965, 845,
+    142, -84, 197,
+    470, 2379, 1570,
+    1133, 470, 1214,
+    395, 1376, 1200,
+    1125, 1042, 348,
+    -543, -1234, -376,
+    -215, -181, 481,
+    -1947, -1621, -210,
+    -750, -1185, 390,
+    29, -399, 27,
+    820, 1236, 755,
+    695, 979, 409,
+    -174, 1197, 1035,
+    912, 1356, 1846,
+    -992, -1437, 484,
+    -1485, -1700, 208,
+    -412, 1204, 1432,
+    -271, 896, 1144,
+    -416, 1777, 1434,
+    -1696, -2644, -204,
+    -1789, -1551, 1033,
+    -1656, -1559, 1303,
+    -1253, -1589, 1081,
+    -669, -1095, -66,
+    -682, 320, -345,
+    659, 305, 1069,
+    -1292, -804, -19,
+    -1635, -1291, 29,
+    -1683, -497, 71,
+    -287, -7, -100,
+    -494, -962, -237,
+    852, 1881, 1740,
+    -1217, -1387, 227,
+    -660, 302, 373,
+    96, 1087, 1257,
+    -1074, -1669, 160,
+    485, 2076, 1798,
+    -934, -220, 552,
+    -596, -612, 237,
+    336, 1720, 879,
+    643, 629, 434,
+    1267, 522, 1633,
+    15, 244, -441,
+    1475, 717, 184,
+    1819, 1590, 1709,
+    988, 261, 937,
+    2093, 2345, 1520,
+    2139, 1858, 1606,
+    -577, -579, -1203,
+    -956, 135, -488,
+    -464, 51, -338,
+    -629, -348, -723,
+    1146, 2073, 1442,
+    2192, 1466, 911,
+    -1444, -1572, -2278,
+    1400, 710, 1297,
+    1335, 633, 928,
+    1434, 2194, 2594,
+    2422, 2204, 1881,
+    982, 2242, 1854,
+    380, 792, 1145,
+    -63, -539, 414,
+    -252, -964, -314,
+    -1261, -683, -780,
+    -831, -526, -1005,
+    -1666, -1135, -424,
+    -1611, -452, -299,
+    1268, 1048, 642,
+    1147, 853, 856,
+    -675, -336, 139,
+    2268, 1343, 1418,
+    29, 768, 797,
+    -1224, 423, 564,
+    -1318, -1082, 245,
+    -1302, -812, 573,
+    -1298, -1617, 646,
+    -968, 834, 723,
+    993, 1652, 2027,
+    -191, -817, 432,
+    662, 60, 198,
+    626, 997, 1330,
+    1648, 1963, 1289,
+    -1597, -93, -45,
+    -1088, 37, -84,
+    1653, 2607, 2337,
+    1065, 2040, 2377,
+    1139, 2326, 2118,
+    859, 357, 1510,
+    664, 1227, 1099,
+    479, 1360, 912,
+    1897, 1754, 2019,
+    1168, 1909, 1784,
+    399, 34, 256,
+    -593, -304, -1053,
+    547, 1694, 1407,
+    647, -99, -341,
+    1492, 1647, 1190,
+    38, -644, -212,
+    395, 846, 222,
+    -704, -765, -716,
+    -724, -1964, -2804,
+    -150, 291, -82,
+    1233, 1459, 1007,
+    -140, -155, 153,
+    439, 297, 1568,
+    -1529, -410, -636,
+    1536, 455, -237,
+    -1328, -139, -260,
+    531, 554, 868,
+    269, 1264, 606,
+    -233, 883, 463,
+    742, 600, -120,
+    -73, 421, 212,
+    -439, -58, 804,
+    -1286, -1241, 728,
+    294, -490, 50,
+    -591, -905, -1254,
+    42, -687, 147,
+    -25, 273, 596,
+    -311, 1213, 601,
+    -754, 849, 584,
+    429, 607, 587,
+    -602, -166, 461,
+    -796, -823, 777,
+    1380, 910, 1755,
+    119, 1417, 972,
+    -219, -880, -1596,
+    -1049, -1010, 438,
+    -713, -1379, 78,
+    0, -447, -1179,
+    -1136, -1319, -1573,
+    2248, 1767, 1309,
+    946, 1583, 1432,
+    1150, 482, 436,
+    -469, -1108, 618,
+    -447, -966, 1088,
+    -1252, -1515, -114,
+    -1104, -2008, -579,
+    210, 613, 497,
+    -1975, -1437, 642,
+    -1269, -856, 1011,
+    -1646, -1185, 1063,
+    -1555, -672, 1204,
+    -1692, -1114, 623,
+    -979, -1326, -1277,
+    539, -147, 894,
+    -1354, -897, -434,
+    888, 475, 428,
+    153, -384, 338,
+    -1492, -511, 359,
+    -974, -1115, -470,
+    105, -550, 677,
+    -937, -1145, 877,
+    380, -260, 210,
+    1685, 924, 1256,
+    1775, 1190, 1095,
+    1419, 631, 533,
+    627, 299, -347,
+    -411, -534, 647,
+    -650, 29, -595,
+    -378, -1367, 1563,
+    1402, 1121, 1465,
+    1089, 1410, 648,
+    -2096, -1090, -6,
+    311, -194, -869,
+    -639, -831, 416,
+    -1162, -1224, 1349,
+    -1247, -941, 1813,
+    -2193, -1987, 453,
+    -619, -1367, -956,
+    -1606, -1972, -1507,
+    -1175, -1057, -1104,
+    -377, 601, 201,
+    1876, 825, 374,
+    -430, -1323, 29,
+    -1397, -1249, -1331,
+    -1007, -1504, 960,
+    -1401, -2009, 197,
+    -1379, -1949, -236,
+    -1077, 123, 422,
+    615, 1269, 546,
+    -306, 1526, 904,
+    1194, 1788, 1177,
+    -626, -884, -1526,
+    199, 766, 1504,
+    -1065, 862, 197,
+    -1034, -1773, -887,
+    -800, 145, 599,
+    -1134, -519, 626,
+    -1205, -1926, 500,
+    -910, -1041, -1395,
+    -1476, -1567, -969,
+    -523, 842, 34,
+    1794, 646, 862,
+    -1207, -1888, -1002,
+    -78, -9, -672,
+    1044, 759, 80,
+    -600, 1139, 1019,
+    57, 2000, 1422,
+    -833, 1414, 1121,
+    -1202, 1630, 1260,
+    -461, 1420, 1244,
+    1537, 975, 253,
+    -283, 324, -359,
+    599, -195, 106,
+    588, 62, -587,
+    -757, 645, 205,
+    51, 1201, 758,
+    -1209, 673, -390,
+    -624, 1581, 941,
+    -151, 1023, 735,
+    2820, 1301, 690,
+    -302, 524, -99,
+    -900, -1588, -1189,
+    1084, 251, 238,
+    2014, 1792, 1010,
+    1245, 1633, 1741,
+    -1227, -1540, -1208,
+    -621, 456, -109,
+    40, -65, 788,
+    -805, -699, -1350,
+    -583, 904, 832,
+    -801, 532, 594,
+    1972, 1408, 1351,
+    -1177, -1880, -2114,
+    -773, 568, 948,
+    -1015, 1079, 1260,
+    -1111, 482, -130,
+    1778, 1044, 780,
+    -1491, 245, 912,
+    -316, -1141, -917,
+    -536, -1442, -2346,
+    -785, -1546, -1988,
+    -2003, 257, 909,
+    -1849, -633, -1209,
+    -1538, -1918, -1054,
+    1606, 2239, 1576,
+    -567, -1500, -1544,
+    -1279, 195, 1369,
+    -817, 293, 1219,
+    -525, 630, 1197,
+    -1698, -2425, -1840,
+    -303, 731, 747,
+    -1169, -251, 269,
+    -950, -75, 1684,
+    -1182, -453, 1005,
+    -1599, 585, 378,
+    -2075, -571, -427,
+    -529, -1159, -1171,
+    -283, -205, -564,
+    -796, 1246, 717,
+    2277, 927, 539,
+    -454, 559, 440,
+    -717, 1460, 1615,
+    -1030, 1052, 1610,
+    -1169, -138, 847,
+    226, 39, -612,
+    -1251, -106, -729,
+    -651, 968, 1302,
+    -714, -636, 1727,
+    353, 1069, 410,
+    -798, -156, 1099,
+    -574, 918, 446,
+    -1310, 1012, 466,
+    1408, 1591, 765,
+    1429, 1380, 1757,
+    1949, 1956, 2378,
+    1578, 2047, 2148,
+    916, 98, -7,
+    1893, 1418, 2141,
+    348, 1405, 1579,
+    152, 1134, 1801,
+    -267, 154, 1395,
+    -1166, 469, 1054,
+    -1142, -405, -1073,
+    -1341, -2264, -1581,
+    -364, 869, 1706,
+    -1162, 549, 1550,
+    -1225, -1932, -1666,
+    -1485, -1977, -2055,
+    -1727, -906, -98,
+    -1897, 233, 1492,
+    892, 108, -331,
+    -1728, -1170, -1700,
+    -1060, 1980, 1790,
+    -1070, -1741, -1909,
+    -11, 1539, 1317,
+    -1600, 94, 497,
+    421, 443, -197,
+    -1578, -349, -994,
+    -599, -539, 1140,
+    -965, -1419, -129,
+    -1341, 175, -447,
+    -375, 1311, 2055,
+    -371, -650, -307,
+    -1073, 605, 365,
+    -2057, -113, 430,
+    652, 914, 967,
+    -1012, -1586, -2323,
+    1505, 1248, 559,
+    262, -486, -401,
+    -1727, 1342, 1546,
+    50, 56, 432,
+    -330, 119, -604,
+    -1517, -1080, -810,
+    946, 1127, 1055,
+    -1400, -1703, -1712,
+    -1270, -704, -1317,
+    807, 1821, 1143,
+    2760, 1606, 2171,
+    1120, 409, -150,
+    -147, 404, 959,
+    2439, 1911, 2189,
+    -906, -141, -866,
+    -904, -142, -458,
+    -557, -708, -1679,
+    -830, -1431, -1583,
+    -1842, -1346, -1086,
+    -1604, -272, 915,
+    -1196, 772, 1056,
+    -638, -1234, -1897,
+    -500, -81, -822,
+    -1289, -1613, -735,
+    -117, 785, 168,
+    -1090, 1133, 922,
+    -1096, -746, 1384,
+    287, -547, -1063,
+    -1376, -2201, -1204,
+    -2176, -1570, -1757,
+    -1511, -2241, -771,
+    -1737, 1099, 830,
+    -1588, 724, 1243,
+    -1542, 693, 805,
+    -1690, -240, 1665,
+    -1700, -4, -668,
+    2149, 816, 1042,
+    -818, -1841, 22,
+    -764, -507, 449,
+    -1151, -617, 289,
+    -843, -1596, -240,
+    498, -234, -657,
+    -752, 480, 1678,
+    -319, -481, 193,
+    -811, 171, -119,
+    -2128, -202, -848,
+    1717, 1140, 1700
+};
+
+
+/* third codebook from IS641 */
+
+const Word16 dico3_lsf_3[DICO3_SIZE*4] =
+{
+    67, -17, 66, -12,
+    -1690, -581, -104, -272,
+    -1076, -1186, -1845, -376,
+    -1140, -926, -420, -58,
+    -259, -656, -1134, -553,
+    1788, 1227, 455, 129,
+    462, 441, -240, -528,
+    840, 514, 130, -75,
+    1114, 623, 153, 216,
+    1068, 564, -6, -276,
+    1119, 727, 190, -68,
+    704, 306, 119, -264,
+    329, 61, -100, 156,
+    364, 123, 183, -208,
+    -171, -123, 220, -65,
+    -306, -62, 402, 17,
+    -660, -938, -266, 0,
+    385, 235, 276, 285,
+    320, 268, -336, -200,
+    -724, 17, -84, 381,
+    -544, 429, 494, 519,
+    -117, 288, 304, 329,
+    643, 157, 701, 508,
+    1200, 625, 796, 608,
+    998, 421, 492, 632,
+    1204, 780, 446, 132,
+    1257, 844, 547, 449,
+    829, 658, 541, 470,
+    1132, 1258, 918, 639,
+    547, 51, 423, 279,
+    9, 392, 83, 94,
+    542, 543, 229, -147,
+    -198, 129, 194, -185,
+    -863, -1321, -302, 30,
+    -597, -629, -19, 114,
+    -900, -1081, 466, 353,
+    -1483, -1573, 15, -143,
+    -1708, -2059, -751, 196,
+    -1876, -2067, -642, -258,
+    -2335, -1470, -450, -564,
+    -584, -186, -872, -414,
+    -1805, -988, -1125, -1310,
+    -726, -1129, 28, 169,
+    -1039, -864, -718, -246,
+    484, 36, -233, -49,
+    265, 67, 289, 467,
+    178, 543, 810, 540,
+    84, 282, 672, 703,
+    -975, -777, 129, 287,
+    -938, -227, 955, 595,
+    -1617, -289, 836, 649,
+    -1847, -215, 1106, 718,
+    -2034, -1085, 650, 440,
+    -2101, -529, 907, 575,
+    -2011, -336, 670, 204,
+    -2389, -692, 360, 137,
+    -2156, -2204, -9, 280,
+    -266, 119, 39, 193,
+    78, -59, -120, 226,
+    -975, -858, -781, -1095,
+    -619, -413, -451, -842,
+    -1216, -1321, -813, -883,
+    -1376, -1615, -394, -428,
+    -737, -1113, -549, -790,
+    -880, -975, -967, -642,
+    -985, -886, -1273, -1361,
+    -473, -804, -1401, -1407,
+    160, -265, -919, -275,
+    -248, -250, -718, -380,
+    97, -103, -375, -229,
+    -415, -193, -135, -555,
+    628, 361, 119, 216,
+    579, 364, 391, 209,
+    634, 522, -154, -148,
+    526, 389, 170, 33,
+    105, 267, 64, 380,
+    -1503, -1000, -30, -369,
+    -1070, 58, 647, 223,
+    -1520, -291, 621, 307,
+    -1531, 156, 762, 404,
+    -2029, 141, 734, 499,
+    -1849, -650, 306, 512,
+    -187, -104, -59, 438,
+    134, -230, 156, -186,
+    -61, -260, -16, 10,
+    -569, -3, -421, -297,
+    -1725, -521, -346, 178,
+    -1362, -59, -44, 157,
+    -2146, -461, -470, -349,
+    -2170, -1, -369, -121,
+    -1579, -373, -900, -1015,
+    -1117, -591, -613, -784,
+    -561, 122, -75, -449,
+    -4, -171, -123, -372,
+    192, 168, -76, -132,
+    252, -107, 340, 210,
+    392, 509, 272, 181,
+    -109, 145, 218, 119,
+    -416, -263, 485, 265,
+    -181, -8, -286, 226,
+    -244, -218, 69, -290,
+    -158, 191, -1, -64,
+    -592, -90, 213, -96,
+    255, 435, 178, -80,
+    -369, -18, -33, -80,
+    -42, 415, 140, -222,
+    1143, 651, 649, 329,
+    767, 556, 249, 235,
+    948, 413, 442, 279,
+    141, 339, 356, 557,
+    -470, -170, 99, 237,
+    -569, -800, 352, 565,
+    282, 473, 470, 332,
+    -199, -690, -1284, -917,
+    -193, -426, -800, -1122,
+    -26, -371, -490, -193,
+    637, 595, 519, 330,
+    408, -115, 79, 12,
+    477, 87, -103, -376,
+    -666, -347, -277, -291,
+    -510, -481, 169, 297,
+    -829, -738, -205, -171,
+    -320, -540, 328, 283,
+    -859, -958, 442, -2,
+    556, 686, 130, 56,
+    1383, 1012, 755, 427,
+    612, 741, 628, 553,
+    -339, -796, 134, 277,
+    -633, -1085, -2, -246,
+    -880, -1035, -1607, -1064,
+    -994, -474, -1138, -488,
+    -414, -795, 73, -206,
+    -8, -139, 439, 204,
+    -176, -578, 23, 131,
+    -269, -757, -191, 245,
+    -109, -338, 112, 316,
+    120, -406, -118, 611,
+    -180, -186, -645, 115,
+    -173, 34, -518, -489,
+    -151, 61, -583, -844,
+    220, -138, -681, -1020,
+    391, -17, -598, -321,
+    157, -295, 129, 155,
+    -926, -875, -987, 285,
+    241, -83, -125, -125,
+    620, 597, 432, 92,
+    393, 78, 409, 61,
+    -393, -739, -413, -748,
+    83, 54, 361, 27,
+    -1084, 130, -337, -694,
+    -1565, 297, 318, -19,
+    -1873, 36, 51, -317,
+    -2323, -246, 231, -84,
+    -2306, -783, 40, -179,
+    -2233, -930, -474, -462,
+    -754, -86, -288, -626,
+    -2411, -455, -63, 171,
+    -1099, -1094, -26, -143,
+    -1193, -455, -406, -381,
+    -605, -210, -96, -51,
+    -580, -476, -276, -15,
+    -1195, -634, -1203, -881,
+    -378, -221, -669, -952,
+    594, 178, -403, -676,
+    763, 327, 601, 290,
+    172, 300, 203, 157,
+    -56, -336, 356, 24,
+    -228, -296, -259, -29,
+    -186, 263, 416, 14,
+    -353, 373, -12, -216,
+    257, 96, 174, 57,
+    -1526, -616, -954, -499,
+    -497, -152, -333, 125,
+    105, 200, 179, -97,
+    -331, -224, 765, 697,
+    760, 256, 301, 59,
+    455, -85, 204, 288,
+    -514, 240, 251, -109,
+    256, 417, -34, -413,
+    101, 430, 384, 156,
+    -31, -10, 206, 426,
+    589, 145, 143, 71,
+    808, 906, 333, 349,
+    986, 938, 589, 331,
+    1300, 824, 187, 509,
+    1062, 653, 379, 466,
+    1462, 937, 401, 274,
+    787, 861, 265, 2,
+    609, 553, 28, 305,
+    926, 340, 106, 386,
+    241, -267, -147, 225,
+    -178, -534, 347, 502,
+    -643, -381, 397, 30,
+    -651, -733, -435, 398,
+    -407, -726, -484, -248,
+    -789, -914, -438, -476,
+    -498, -390, 75, -295,
+    -964, -590, -606, 150,
+    -121, -49, -155, -78,
+    935, 550, 389, 38,
+    -321, 127, 424, 315,
+    -285, -113, 283, 259,
+    658, 203, 322, 486,
+    903, 505, 748, 417,
+    611, 423, 555, 512,
+    239, -83, -578, -19,
+    -339, -731, 349, 13,
+    -934, -1399, -114, -360,
+    107, 692, 182, 90,
+    -1243, -1538, -1551, -725,
+    -568, -903, -1363, -525,
+    -517, -853, -861, -1004,
+    -168, -690, -835, 63,
+    -137, -556, -547, 144,
+    -286, -817, 485, 319,
+    -147, -408, 526, 246,
+    -347, -434, 297, -28,
+    -290, -471, -1110, -1285,
+    -460, -359, -988, -794,
+    1347, 1299, 690, 523,
+    1216, 1068, 1094, 757,
+    825, 1140, 752, 494,
+    1252, 1365, 1195, 898,
+    521, 1053, 532, 432,
+    -334, -216, -313, -263,
+    -160, 52, -472, -155,
+    127, 136, -380, 44,
+    851, 410, -162, -489,
+    123, -255, -796, -667,
+    1090, 917, 789, 493,
+    1397, 1197, 558, 202,
+    -51, -118, -342, -701,
+    83, 108, -42, -441,
+    61, 95, 287, 256,
+    -27, 89, 524, 531,
+    351, 227, 592, 545,
+    697, 155, -164, 307,
+    638, 274, -489, -50,
+    754, 240, -166, -124,
+    -116, -579, -1212, -63,
+    190, -295, -1040, -1296,
+    147, -376, -177, -113,
+    841, 1241, 1051, 668,
+    2, 293, 551, 304,
+    -1096, -953, -248, 376,
+    -750, -965, 87, 516,
+    -275, -516, 689, 391,
+    -379, -643, 876, 594,
+    -390, -1013, -645, 573,
+    -107, -568, -689, -826,
+    -1025, -27, -328, -203,
+    861, 749, 548, 233,
+    -1660, -1043, 451, 108,
+    -660, -620, 430, 236,
+    21, -396, -1158, -631,
+    1372, 1298, 967, 577,
+    1125, 1125, 589, 454,
+    -323, -865, -467, 153,
+    -468, -699, -804, -509,
+    -392, -718, -204, -35,
+    -603, -1093, -567, -162,
+    -505, -1004, -102, 350,
+    219, 224, 423, 252,
+    395, 591, 608, 363,
+    -746, -96, 373, 172,
+    171, 295, 714, 339,
+    233, 77, 107, 277,
+    157, 153, -499, -356,
+    1547, 1073, 576, 494,
+    -292, -339, -504, -592,
+    -903, -72, -619, -481,
+    -1594, -1117, -567, -254,
+    -793, -507, -564, -291,
+    -492, -532, 502, 560,
+    -382, 427, 600, 230,
+    -227, 477, 251, 75,
+    285, 842, 813, 476,
+    -1310, -1333, 186, 377,
+    -587, -917, 643, 381,
+    -1186, -553, 411, 82,
+    -1127, -820, -174, -540,
+    -604, 119, 543, 205,
+    -380, 657, 909, 567,
+    112, -298, -374, 114,
+    -857, -251, 56, 159,
+    401, 345, -34, -140,
+    -111, -607, 41, 614,
+    355, -114, -77, 474,
+    578, 56, 1450, 924,
+    1098, 1420, 741, 400,
+    246, 22, 588, 313,
+    -121, 327, 831, 472,
+    -1138, -608, 856, 552,
+    -1241, -1072, 638, 600,
+    -358, 254, -333, -303,
+    -646, 739, 358, 74,
+    1226, 1671, 1221, 849,
+    2241, 1624, 983, 636,
+    1841, 1477, 749, 384,
+    350, 263, 87, 128,
+    -1902, -941, -144, -64,
+    -1734, -255, 288, -31,
+    -2644, -1238, 366, 235,
+    -1643, -1092, -1344, -304,
+    -541, -1075, -1116, 123,
+    -1178, -252, -816, -180,
+    -1016, 533, 565, 233,
+    -487, -430, -188, 334,
+    867, 1236, 534, 171,
+    -1590, -1607, 635, 630,
+    -2196, 310, 924, 412,
+    -2358, -328, 956, 529,
+    -2639, -377, 630, 278,
+    -2602, 317, 799, 299,
+    -2406, 133, 340, 31,
+    -2156, -1468, 131, 125,
+    -1184, -490, -139, 46,
+    -744, 447, 891, 564,
+    67, -451, 646, 604,
+    -553, -429, -876, 396,
+    162, -66, 1305, 915,
+    479, 579, 1088, 794,
+    450, 278, 566, 324,
+    -1057, -154, 148, -177,
+    -2545, 168, 1070, 592,
+    -2351, -42, 819, 345,
+    -2344, -707, 721, 250,
+    -2175, -1497, -309, 122,
+    -78, -73, 120, 173,
+    -4, 262, -263, -261,
+    -431, -64, -405, -732,
+    -2609, 116, -83, -193,
+    -1525, -944, -477, -725,
+    -508, 307, 170, 172,
+    832, 417, 832, 686,
+    -225, 177, 894, 818,
+    -482, -389, 1279, 1039,
+    -383, 201, -350, 40,
+    730, 635, 226, 526,
+    503, 462, 338, 398,
+    535, 714, 40, -282,
+    1482, 1471, 1085, 731,
+    1561, 1072, 909, 693,
+    1419, 1282, 889, 879,
+    1153, 728, 1186, 840,
+    -226, 1130, 949, 689,
+    -494, -986, -1556, -128,
+    -568, -721, -713, -26,
+    317, 524, 70, 135,
+    -405, -865, -1766, -652,
+    -174, -801, 885, 773,
+    -153, -91, 1099, 751,
+    -506, -1149, 853, 646,
+    241, 782, 519, 539,
+    1853, 1700, 1101, 684,
+    -1249, -1486, -464, 188,
+    -893, -1409, -1312, -341,
+    -135, 438, -175, 18,
+    1111, 976, 319, 208,
+    -1430, -1768, 83, 458,
+    -530, -1000, 307, 129,
+    -840, -15, -29, -356,
+    -911, -924, -1147, -242,
+    -119, -528, 127, -133,
+    -761, -765, 190, -83,
+    -315, 895, 522, 231,
+    -222, 102, -63, -428,
+    316, 699, 379, 70,
+    25, 716, 314, -108,
+    507, 874, 566, 238,
+    108, 941, 519, 195,
+    425, -60, -427, 257,
+    139, -103, -630, 446,
+    334, 370, 412, 48,
+    -172, -690, -283, 557,
+    187, -286, 158, 483,
+    140, 270, -344, -631,
+    924, 579, -116, 132,
+    142, 466, -68, -64,
+    230, -145, -302, -542,
+    -803, -912, 1018, 737,
+    -773, 1015, 630, 297,
+    -2596, 95, 445, 336,
+    -2122, 491, 510, 191,
+    -1253, 161, -2, -324,
+    -1450, -633, -712, -105,
+    -842, -254, -411, 100,
+    -640, -290, 1010, 763,
+    -650, 313, 1169, 730,
+    140, 505, 1030, 766,
+    772, 287, 1067, 823,
+    495, 749, 305, 323,
+    -164, 462, 78, 399,
+    -342, -874, 69, 597,
+    -16, 620, 621, 337,
+    -138, -444, -265, 218,
+    84, -450, 953, 666,
+    -222, -803, 541, 604,
+    -921, -1376, 244, 116,
+    -841, -723, 630, 588,
+    140, 663, 294, 368,
+    935, 1046, 881, 759,
+    1746, 1464, 916, 628,
+    436, 963, 281, 1,
+    -119, 74, 542, 213,
+    1, -567, 301, 241,
+    260, 435, 222, 396,
+    936, 957, 1108, 703,
+    510, 506, 808, 478,
+    601, 694, 960, 620,
+    972, 741, 980, 600,
+    834, 717, 767, 684,
+    643, 972, 935, 638,
+    501, 661, 720, 851,
+    -105, -632, -303, -117,
+    -429, 130, 789, 442,
+    -522, -188, 704, 373,
+    -759, 42, 814, 523,
+    -531, -1137, 373, 578,
+    -682, -1203, -455, 285,
+    -1163, -1577, -1098, 44,
+    81, -82, 712, 363,
+    477, 246, 954, 622,
+    1604, 1622, 1277, 891,
+    1409, 859, 924, 892,
+    774, 1041, 947, 1142,
+    40, -546, -75, 288,
+    -616, -106, -697, -26,
+    -169, -160, -891, -739,
+    -279, -384, -1029, -350,
+    1781, 1308, 1046, 816,
+    1580, 1533, 1472, 1178,
+    1505, 1076, 1216, 899,
+    890, 904, 564, 654,
+    920, 692, 1021, 856,
+    -493, 132, 177, 505,
+    71, 195, -28, 97,
+    456, 351, -164, 88,
+    439, 278, -40, 350,
+    1395, 949, 234, -95,
+    -805, -472, 38, -163,
+    367, -98, 489, 523,
+    1025, 1178, 1212, 906,
+    319, 1314, 814, 461,
+    -123, -543, -804, 447,
+    -748, -324, -897, -1127,
+    -737, -501, -789, -713,
+    715, 777, 1239, 922,
+    1949, 1939, 1368, 865,
+    730, 880, 758, 388,
+    -871, 454, 17, -251,
+    -381, -810, -1583, 239,
+    -521, -966, -792, 259,
+    -890, -1358, -770, -73,
+    166, 349, -212, 323,
+    -840, -301, 473, 435,
+    -679, -464, 728, 351,
+    -156, -199, 667, 432,
+    29, -252, 415, 480,
+    -731, -379, 145, 559,
+    -528, -631, -1158, -159,
+    445, 273, 123, 639,
+    373, -126, 800, 568,
+    84, -162, 720, 712,
+    -830, -536, -185, 222,
+    408, 452, 501, 771,
+    -897, -1355, -67, 442,
+    -792, -1406, 566, 602,
+    167, -326, 509, 330,
+    -95, -626, -730, -344,
+    1668, 1217, 779, 455,
+    1316, 828, 584, 719,
+    404, -31, 1013, 789,
+    89, 107, 891, 549,
+    871, 1581, 917, 671,
+    866, 1479, 1289, 854,
+    391, 1068, 1122, 812,
+    78, -562, 345, 563,
+    429, -103, 417, 787,
+    -122, -437, 411, 788,
+    -913, -417, 602, 754,
+    -226, -16, 151, 760,
+    -700, 118, -104, -14,
+    -1128, 48, 284, 393,
+    -390, -419, -639, -116,
+    -910, 306, 316, -13,
+    1207, 984, 821, 669,
+    -1195, -693, 140, -213,
+    -884, -416, -199, -558,
+    -616, 245, -404, -664,
+    262, 56, -617, -724,
+    -85, -491, -320, -656,
+    -570, -831, -129, -528,
+    -1506, -63, -367, -385,
+    -358, -321, 4, 51,
+    -366, -214, 319, 511,
+    146, 671, -17, -291,
+    -110, 464, -139, -496,
+    -202, 220, -312, -631,
+    -660, -73, -655, -820,
+    -662, -653, -1288, -857,
+    -430, -953, -959, -264,
+    -49, -468, -72, -381,
+    -350, -563, -193, -407,
+    55, -408, -803, 11,
+    -309, 649, 188, -198,
+    -512, 461, -79, -458,
+    -1318, -263, -134, -523,
+    -1657, -435, -495, -765,
+    57, -347, -414, 434,
+    -1141, -242, -664, -857,
+    34, -68, -707, -338
+};
+
+
+
+/* third codebook for MR475, MR515 */
+
+const Word16 mr515_3_lsf[MR515_3_SIZE*4] =
+{
+    419,   163,   -30,  -262,
+    -455,  -789, -1430,  -721,
+    1006,   664,   269,    25,
+    619,   260,   183,    96,
+    -968, -1358,  -388,   135,
+    -693,   835,   456,   154,
+    1105,   703,   569,   363,
+    1625,  1326,   985,   748,
+    -220,   219,    76,  -208,
+    -1455, -1662,    49,   149,
+    -964,  -172,  -752,  -336,
+    625,   209,  -250,   -66,
+    -1017,  -838,    -2,   317,
+    -2168, -1485,  -138,   123,
+    -1876, -2099,  -521,    85,
+    -967,  -366,  -695,  -881,
+    -921, -1011,  -763,  -949,
+    -124,  -256,  -352,  -660,
+    178,   463,   354,   304,
+    -1744,  -591,  -282,    79,
+    -2249,   175,   867,   499,
+    -138,  -180,  -181,   -21,
+    -2291, -1241,  -460,  -520,
+    -771,   451,   -10,  -308,
+    271,   -65,     4,   214,
+    -279,  -435,   -43,  -348,
+    -670,    35,   -65,  -211,
+    806,   535,    85,   297,
+    57,   239,   722,   493,
+    225,   661,   840,   547,
+    -540,  -376,    14,   349,
+    469,   721,   331,   162,
+    -544,  -752,   -62,   -10,
+    398,   -88,   724,   701,
+    -19,  -533,   -94,   601,
+    136,   -71,  -681,  -747,
+    -166,  -344,   261,   -50,
+    161,   -52,   485,   337,
+    -1675,    50,   190,   -93,
+    -2282,  -231,  -194,   -82,
+    -95,  -595,  -154,   128,
+    894,   501,   588,   457,
+    -345,   206,   122,   110,
+    -631,  -227,  -569,     3,
+    408,   239,   397,   226,
+    -197,    -2,   128,   491,
+    1281,   904,   292,   215,
+    538,   306,   259,   509,
+    -677, -1047,    13,   321,
+    -679,  -588,  -358,  -212,
+    -558,   243,   646,   479,
+    486,   342,   634,   532,
+    107,   802,   331,   136,
+    -112,  -398, -1031,  -286,
+    -326,  -705,   288,   272,
+    1299,  1144,  1178,   860,
+    -423,   121,  -385,  -148,
+    -295,  -302,  -834,  -819,
+    16,   -24,  -201,  -476,
+    555,    91,  -245,   294,
+    -38,  -379,  -962, -1221,
+    -1191, -1518,  -273,  -395,
+    -390, -1013,  -645,   573,
+    -1843, -1030,   505,   468,
+    744,   947,   609,   493,
+    -689, -1172,  -628,  -135,
+    -1026,   195,   411,   196,
+    1582,  1147,   575,   337,
+    -1239,  -777,  -648,  -142,
+    595,   825,   967,   735,
+    -1206,  -970,   -81,  -342,
+    -745,    13,   -72,   375,
+    454,    19,  1407,   921,
+    -1647,  -172,   861,   562,
+    928,  1537,  1063,   740,
+    -2472,  -952,   264,    82,
+    -502,  -965, -1334,   123,
+    867,  1236,   534,   171,
+    -2320,  -460,   780,   363,
+    -1190,  -617,   252,   -61,
+    -174,    34,  1011,   788,
+    -2333,   247,   423,   153,
+    -16,  -355,   262,   449,
+    -1576, -1073,  -544,  -371,
+    -615,  -305,  1051,   805,
+    687,   528,     6,  -182,
+    935,   875,  1002,   809,
+    199,   257,   126,    76,
+    -584, -1138,   599,   556,
+    -1105, -1391, -1591,  -519,
+    -977, -1325,   108,   347,
+    -722,  -975,   365,   101,
+    -145,   681,   249,  -153,
+    0,  -334,  -570,   159,
+    412,   285,  -336,  -617,
+    -953,  -966,   887,   689,
+    -1251,    84,  -185,  -398,
+    -592,   433,  1044,   653,
+    85,   329,   -40,   361,
+    -433,  -705,   466,   574,
+    -154,   654,   592,   290,
+    -167,    72,   349,   175,
+    674,   297,   977,   720,
+    1235,  1204,   757,   488,
+    -400,  -269,   538,   372,
+    -1350, -1387, -1194,   -91,
+    1262,   876,   775,   700,
+    -599,   -38,  -430,  -722,
+    1976,  1630,   991,   608,
+    111,   276,  -226,   -96,
+    -947,  -388,   -11,    -7,
+    -303,  -531,  -839,   338,
+    1734,  1710,  1405,  1013,
+    -516,  -855,  -645,   210,
+    -688,  -416,   513,   230,
+    -822,  -637, -1146,  -320,
+    -952,  -658,  -694,   183,
+    -114,  -623,   818,   674,
+    -191,  -204,   731,   635,
+    51,  1221,   883,   576,
+    -954,  -431,   826,   598,
+    -342,  -755,  -900,  -407,
+    -1126,  -354,  -206,  -512,
+    -547,  -810,  -357,  -620,
+    66,   515,   -73,  -410,
+    -872,  -945, -1444, -1227,
+    191,   -17,  -544,  -231,
+    -1540,  -544,  -901,  -886
+};
+
+/* first codebook for MR795 */
+
+const Word16 mr795_1_lsf[MR795_1_SIZE*3] =
+{
+    -890, -1550, -2541,
+    -819,  -970,   175,
+    -826, -1234,  -762,
+    -599,   -22,   634,
+    -811,  -987,  -902,
+    -323,   203,    26,
+    -383,  -235,  -781,
+    -399,  1262,   906,
+    -932, -1399, -1380,
+    -624,    93,    87,
+    -414,  -539,  -691,
+    37,   633,   510,
+    -387,  -476, -1330,
+    399,    66,   263,
+    -407,   -49,  -335,
+    -417,  1041,  1865,
+    -779, -1089, -1440,
+    -746,  -858,   832,
+    -581,  -759,  -371,
+    -673,  -506,  2088,
+    -560,  -634, -1179,
+    271,   241,    14,
+    -438,  -244,  -397,
+    463,  1202,  1047,
+    -606,  -797, -1438,
+    -51,  -323,   481,
+    -224,  -584,  -527,
+    494,   881,   682,
+    -433,  -306, -1002,
+    554,   659,   222,
+    171,  -160,  -353,
+    681,  1798,  1565,
+    -852, -1181, -1695,
+    -336,  -666,   114,
+    -581,  -756,  -744,
+    -195,   375,   497,
+    -465,  -804, -1098,
+    154,   282,  -131,
+    -50,  -191,  -719,
+    323,   732,  1542,
+    -722,  -819, -1404,
+    105,  -250,   185,
+    -178,  -502,  -742,
+    321,   510,  1111,
+    -323,  -567,  -966,
+    127,   484,   338,
+    -160,    52,  -338,
+    732,  1367,  1554,
+    -626,  -802, -1696,
+    -286,  -586,   676,
+    -695,  -343,  -370,
+    -490,   295,  1893,
+    -630,  -574, -1014,
+    -80,   645,   -69,
+    -6,  -318,  -364,
+    782,  1450,  1038,
+    -313,  -733, -1395,
+    120,    60,   477,
+    -264,  -585,  -123,
+    711,  1245,   633,
+    -91,  -355, -1016,
+    771,   758,   261,
+    253,    81,  -474,
+    930,  2215,  1720,
+    -808, -1099, -1925,
+    -560,  -782,   169,
+    -804, -1074,  -188,
+    -626,   -55,  1405,
+    -694,  -716, -1194,
+    -660,   354,   329,
+    -514,   -55,  -543,
+    366,  1033,  1182,
+    -658,  -959, -1357,
+    -55,  -184,    93,
+    -605,  -286,  -662,
+    404,   449,   827,
+    -286,  -350, -1263,
+    628,   306,   227,
+    -16,   147,  -623,
+    186,   923,  2146,
+    -674,  -890, -1606,
+    -443,  -228,   339,
+    -369,  -790,  -409,
+    231,    86,  1469,
+    -448,  -581, -1061,
+    594,   450,  -177,
+    -124,  -170,  -447,
+    671,  1159,  1404,
+    -476,  -667, -1511,
+    -77,  -138,   716,
+    -177,  -372,  -381,
+    451,   934,   915,
+    -250,  -432,  -822,
+    272,   828,   446,
+    26,    19,   -31,
+    698,  1692,  2168,
+    -646,  -977, -1924,
+    -179,  -473,   268,
+    -379,  -745,  -691,
+    11,   127,  1033,
+    -488,  -917,  -825,
+    61,   323,   135,
+    147,  -145,  -686,
+    685,   786,  1682,
+    -506,  -848, -1297,
+    35,    90,   222,
+    -23,  -346,  -670,
+    455,   591,  1287,
+    -203,  -593, -1086,
+    652,   352,   437,
+    39,    63,  -457,
+    841,  1265,  2105,
+    -520,  -882, -1584,
+    -328,  -711,  1421,
+    -596,  -342,   -70,
+    209,   173,  1928,
+    -423,  -598,  -921,
+    421,   605,   -38,
+    -2,  -245,  -127,
+    896,  1969,  1135,
+    -379,  -518, -1579,
+    173,   118,   753,
+    -55,  -381,   -52,
+    985,  1021,   753,
+    -2,  -291,  -891,
+    753,   992,   423,
+    264,   131,  -196,
+    895,  2274,  2543,
+    -635, -1088, -2499,
+    -529,  -982,   526,
+    -764,  -830,  -548,
+    -436,   316,   599,
+    -675,  -940,  -746,
+    -57,   236,   -11,
+    -201,   -81,  -798,
+    16,   845,  1558,
+    -737,  -985, -1212,
+    -468,    17,   290,
+    -279,  -584,  -700,
+    183,   822,   705,
+    -265,  -492, -1187,
+    421,   152,   468,
+    -390,   166,  -268,
+    39,  1550,  1868,
+    -635,  -966, -1571,
+    -453,  -492,   910,
+    -284, -1027,   -75,
+    -181,  -133,  1852,
+    -445,  -624, -1174,
+    420,   367,   -49,
+    -389,  -212,  -169,
+    707,  1073,  1208,
+    -539,  -710, -1449,
+    83,  -163,   484,
+    -236,  -543,  -355,
+    338,  1175,   814,
+    -246,  -309,  -958,
+    606,   760,    60,
+    166,    -8,  -163,
+    -306,  1849,  2563,
+    -747, -1025, -1783,
+    -419,  -446,   209,
+    -718,  -566,  -534,
+    -506,   693,   857,
+    -463,  -697, -1082,
+    325,   431,  -206,
+    -15,    -8,  -763,
+    545,   919,  1518,
+    -611,  -783, -1313,
+    256,   -55,   208,
+    -165,  -348,  -662,
+    321,   680,   930,
+    -326,  -429,  -951,
+    484,   446,   570,
+    -197,    72,   -73,
+    909,  1455,  1741,
+    -563,  -737, -1974,
+    -124,  -416,   718,
+    -478,  -404,  -314,
+    -16,   446,  1636,
+    -551,  -537,  -750,
+    -58,   638,   214,
+    55,  -185,  -271,
+    1148,  1301,  1212,
+    -483,  -671, -1264,
+    117,   285,   543,
+    -204,  -391,  -111,
+    513,  1538,   854,
+    -114,  -190,  -978,
+    877,   595,   464,
+    260,   260,  -311,
+    748,  2283,  2216,
+    -517,  -945, -2171,
+    -326,  -708,   378,
+    -812,  -691,  -232,
+    -560,   687,  1409,
+    -732,  -690,  -836,
+    -359,   645,   386,
+    -265,    62,  -678,
+    145,  1644,  1208,
+    -555,  -988, -1233,
+    -78,    14,   114,
+    -327,  -358,  -489,
+    392,   677,   697,
+    -201,  -236, -1140,
+    693,   449,   178,
+    -243,   256,  -433,
+    611,  1385,  2456,
+    -612,  -901, -1464,
+    -307,   -17,   499,
+    -315,  -667,  -254,
+    256,   428,  1463,
+    -486,  -422, -1056,
+    655,   370,    18,
+    -102,  -185,  -276,
+    755,  1578,  1335,
+    -488,  -603, -1418,
+    182,   -93,   870,
+    -73,  -458,  -348,
+    835,   862,   957,
+    -282,  -333,  -746,
+    547,   839,   428,
+    273,   -89,    13,
+    940,  1708,  2576,
+    -418, -1084, -1758,
+    -44,  -358,   259,
+    -497,  -643,  -560,
+    99,   557,   961,
+    -421,  -766,  -917,
+    295,   326,   184,
+    175,    15,  -626,
+    532,   878,  1981,
+    -443,  -768, -1275,
+    221,   156,   268,
+    39,  -363,  -505,
+    695,   772,  1140,
+    -162,  -459,  -912,
+    709,   444,   658,
+    25,   303,  -312,
+    1268,  1410,  1715,
+    -297,  -766, -1836,
+    -263,  -108,  1070,
+    -406,   -13,  -129,
+    57,   438,  2734,
+    -374,  -487,  -835,
+    304,   696,   164,
+    104,  -235,     5,
+    1611,  1900,  1399,
+    -229,  -582, -1325,
+    405,   192,   817,
+    -87,  -438,   111,
+    1028,  1199,   993,
+    68,  -175,  -934,
+    1033,  1117,   451,
+    478,   200,  -248,
+    2127,  2696,  2042,
+    -835, -1323, -2131,
+    -799,  -692,   466,
+    -812, -1032,  -469,
+    -622,   288,   920,
+    -701,  -841, -1070,
+    -411,   512,     8,
+    -390,   -91,  -744,
+    -30,  1043,  1161,
+    -822, -1148, -1156,
+    -294,   -46,   110,
+    -411,  -374,  -678,
+    214,   531,   668,
+    -406,  -420, -1194,
+    487,   232,   303,
+    -318,    91,  -472,
+    123,  1232,  2445,
+    -722,  -952, -1495,
+    -738,  -675,  1332,
+    -543,  -606,  -211,
+    -95,   -98,  1508,
+    -549,  -514, -1193,
+    473,   211,    73,
+    -288,  -112,  -389,
+    537,  1332,  1258,
+    -567,  -755, -1545,
+    71,  -283,   632,
+    -170,  -481,  -493,
+    681,  1002,   817,
+    -356,  -331,  -877,
+    419,   706,   346,
+    241,   -34,  -326,
+    377,  1950,  1883,
+    -727, -1075, -1625,
+    -233,  -543,   116,
+    -524,  -806,  -585,
+    -73,   478,   729,
+    -288,  -925, -1143,
+    173,   447,   -52,
+    68,  -229,  -606,
+    449,   529,  1797,
+    -591,  -875, -1363,
+    183,  -144,   324,
+    -103,  -452,  -666,
+    623,   488,  1176,
+    -238,  -511, -1004,
+    326,   552,   458,
+    136,   108,  -319,
+    626,  1343,  1883,
+    -490,  -646, -1730,
+    -186,  -449,   984,
+    -738,   -76,  -170,
+    -550,   755,  2560,
+    -496,  -510,  -947,
+    210,   694,   -52,
+    84,  -322,  -199,
+    1090,  1625,  1224,
+    -376,  -603, -1396,
+    343,    74,   632,
+    -175,  -502,   -32,
+    972,  1332,   734,
+    52,  -295, -1113,
+    1065,   918,   160,
+    393,   107,  -397,
+    1214,  2649,  1741,
+    -632, -1201, -1891,
+    -719,  -277,   353,
+    -651,  -880,  -122,
+    -211,   209,  1338,
+    -562,  -714, -1059,
+    -208,   388,   159,
+    -320,   -61,  -551,
+    293,  1092,  1443,
+    -648,  -865, -1253,
+    -49,  -143,   305,
+    -401,  -227,  -585,
+    561,   532,   927,
+    -117,  -443, -1188,
+    507,   436,   292,
+    -79,   233,  -458,
+    671,  1025,  2396,
+    -633,  -842, -1525,
+    -308,  -286,   640,
+    -373,  -621,  -407,
+    418,   253,  1305,
+    -315,  -581, -1137,
+    572,   685,  -281,
+    61,   -68,  -371,
+    991,  1101,  1498,
+    -493,  -683, -1362,
+    -47,   164,   704,
+    -256,  -314,  -268,
+    631,   949,  1052,
+    -118,  -348,  -833,
+    68,  1180,   568,
+    152,   117,    34,
+    1113,  1902,  2239,
+    -601,  -959, -1706,
+    -143,  -489,   480,
+    -332,  -655,  -574,
+    54,   353,  1192,
+    -462,  -652,  -796,
+    150,   549,   112,
+    195,  -111,  -515,
+    679,  1108,  1647,
+    -558,  -749, -1217,
+    -9,   272,   341,
+    -53,  -265,  -535,
+    489,   843,  1298,
+    -120,  -482, -1032,
+    632,   543,   408,
+    179,   306,  -526,
+    1124,  1464,  2244,
+    -417,  -786, -1562,
+    -224,  -384,  1364,
+    -377,  -459,   -25,
+    385,   489,  2174,
+    -332,  -651,  -829,
+    544,   553,    61,
+    22,  -113,   -89,
+    1128,  1725,  1524,
+    -216,  -373, -1653,
+    161,   316,   908,
+    -165,  -222,   -67,
+    1362,  1175,   789,
+    73,  -252,  -767,
+    738,   932,   616,
+    362,   246,  -126,
+    787,  2654,  3027,
+    -691, -1106, -2190,
+    -565,  -588,   524,
+    -590,  -979,  -490,
+    -263,   397,   982,
+    -577,  -837,  -945,
+    -22,   435,   -49,
+    -190,  -118,  -629,
+    -88,  1240,  1513,
+    -636, -1051, -1019,
+    -291,   189,   259,
+    -257,  -470,  -629,
+    145,   945,   894,
+    -326,  -364, -1094,
+    543,   260,   630,
+    -202,   189,  -209,
+    357,  1379,  2091,
+    -569, -1075, -1449,
+    -714,  -239,   919,
+    -420,  -705,   -84,
+    -109,  -114,  2407,
+    -413,  -529, -1177,
+    482,   368,   131,
+    -186,   -72,  -131,
+    861,  1255,  1220,
+    -611,  -658, -1341,
+    227,  -121,   631,
+    -176,  -489,  -218,
+    745,  1175,   957,
+    -321,  -148,  -936,
+    671,   966,   216,
+    340,    -3,  -143,
+    469,  1848,  2437,
+    -729,  -961, -1683,
+    -213,  -254,   321,
+    -511,  -438,  -521,
+    -126,   725,   903,
+    -340,  -685, -1032,
+    316,   480,    20,
+    23,   -89,  -551,
+    353,  1051,  1789,
+    -544,  -757, -1364,
+    298,   -25,   436,
+    -100,  -392,  -519,
+    467,   754,  1078,
+    -210,  -398, -1078,
+    620,   658,   630,
+    33,   147,  -178,
+    921,  1687,  1921,
+    -325,  -528, -1978,
+    2,  -285,   910,
+    -371,  -490,  -230,
+    0,   597,  2010,
+    -496,  -395,  -834,
+    37,   945,   245,
+    181,  -160,  -144,
+    1481,  1373,  1357,
+    -355,  -601, -1270,
+    298,   322,   672,
+    -193,  -336,    77,
+    1089,  1533,   922,
+    177,   -39, -1125,
+    996,   781,   536,
+    456,   366,  -432,
+    1415,  2440,  2279,
+    -466,  -758, -2325,
+    -303,  -509,   387,
+    -727,  -557,    66,
+    -145,   643,  1248,
+    -544,  -676,  -916,
+    -225,   862,   588,
+    -152,    40,  -533,
+    423,  1423,  1558,
+    -572,  -843, -1145,
+    -128,    85,   461,
+    -238,  -257,  -584,
+    605,   748,   861,
+    24,  -202, -1409,
+    797,   487,   303,
+    -181,   364,  -182,
+    616,  1378,  2942,
+    -494,  -852, -1441,
+    -292,    61,   812,
+    -84,  -723,  -182,
+    555,   532,  1506,
+    -365,  -493, -1057,
+    822,   588,    11,
+    -14,   -18,  -230,
+    1001,  1401,  1451,
+    -474,  -569, -1292,
+    302,    62,  1062,
+    -70,  -376,  -222,
+    982,   974,  1149,
+    -196,  -234,  -795,
+    479,  1098,   499,
+    362,    58,    70,
+    1147,  2069,  2857,
+    -487,  -878, -1824,
+    73,  -288,   348,
+    -358,  -500,  -508,
+    199,   721,  1242,
+    -78,  -697,  -795,
+    361,   536,   196,
+    374,   110,  -735,
+    847,  1051,  1896,
+    -366,  -713, -1182,
+    315,   320,   429,
+    72,  -215,  -450,
+    759,   886,  1363,
+    -30,  -428,  -834,
+    861,   627,   796,
+    118,   468,  -279,
+    1355,  1883,  1893,
+    -188,  -642, -1612,
+    63,  -175,  1198,
+    -418,  -211,    51,
+    414,   587,  2601,
+    -234,  -557,  -858,
+    424,   889,   222,
+    136,  -101,    83,
+    1413,  2278,  1383,
+    -84,  -445, -1389,
+    414,   313,  1045,
+    29,  -343,    65,
+    1552,  1647,   980,
+    183,   -91,  -829,
+    1273,  1413,   360,
+    553,   272,  -107,
+    1587,  3149,  2603
+};
+
+
+
diff --git a/codecs_v2/audio/gsm_amr/amr_nb/common/src/sqrt_l.cpp b/codecs_v2/audio/gsm_amr/amr_nb/common/src/sqrt_l.cpp
index 2b77b44..8f74aa6 100644
--- a/codecs_v2/audio/gsm_amr/amr_nb/common/src/sqrt_l.cpp
+++ b/codecs_v2/audio/gsm_amr/amr_nb/common/src/sqrt_l.cpp
@@ -240,15 +240,17 @@
     L_x = L_shl(L_x, e, pOverflow);         /* L_x is normalized to [0.25..1) */
     *pExp = e;                              /* return 2*exponent (or Q1)      */
 
-    L_x = L_shr(L_x, 9, pOverflow);
-    i = (Word16)(L_x >> 16);               /* Extract b25-b31, 16 <= i <= 63
-                                            because of normalization          */
+    L_x >>= 10;
+    i = (Word16)(L_x >> 15) & 63;            /* Extract b25-b31, 16<= i <=63  */
+    /* because of normalization       */
 
-    L_x = L_shr(L_x, 1, pOverflow);
     a = (Word16)(L_x);                      /* Extract b10-b24 */
     a &= (Word16) 0x7fff;
 
-    i = sub(i, 16, pOverflow);              /* 0 <= i <= 47                   */
+    if (i > 15)
+    {
+        i -= 16;                              /* 0 <= i <= 47                   */
+    }
 
     L_y = L_deposit_h(sqrt_l_tbl[i]);       /* sqrt_l_tbl[i] << 16            */
 
diff --git a/codecs_v2/audio/gsm_amr/amr_nb/common/src/sqrt_l_tbl.cpp b/codecs_v2/audio/gsm_amr/amr_nb/common/src/sqrt_l_tbl.cpp
index c108196..5e9898c 100644
--- a/codecs_v2/audio/gsm_amr/amr_nb/common/src/sqrt_l_tbl.cpp
+++ b/codecs_v2/audio/gsm_amr/amr_nb/common/src/sqrt_l_tbl.cpp
@@ -85,13 +85,13 @@
     ; LOCAL VARIABLE DEFINITIONS
     ; [Variable declaration - defined here and used outside this module]
     ----------------------------------------------------------------------------*/
-    extern const Word16 sqrt_l_tbl[49] =
+    extern const Word16 sqrt_l_tbl[50] =
     {
         16384, 16888, 17378, 17854, 18318, 18770, 19212, 19644, 20066, 20480,
         20886, 21283, 21674, 22058, 22435, 22806, 23170, 23530, 23884, 24232,
         24576, 24915, 25249, 25580, 25905, 26227, 26545, 26859, 27170, 27477,
         27780, 28081, 28378, 28672, 28963, 29251, 29537, 29819, 30099, 30377,
-        30652, 30924, 31194, 31462, 31727, 31991, 32252, 32511, 32767
+        30652, 30924, 31194, 31462, 31727, 31991, 32252, 32511, 32767, 32767
     };
 
 
diff --git a/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d8_31pf.cpp b/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d8_31pf.cpp
index 4cc8db4..917c47f 100644
--- a/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d8_31pf.cpp
+++ b/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d8_31pf.cpp
@@ -197,19 +197,8 @@
             25,
             pOverflow);
 
-    ia =
-        (Word16)
-        L_shr(
-            tempWord32,
-            1,
-            pOverflow);
 
-    ia =
-        sub(
-            MSBs,
-            ia,
-            pOverflow);
-
+    ia = (Word16)(MSBs - (tempWord32 >> 1));
     ib =
         mult(
             ia,
@@ -222,18 +211,7 @@
             5,
             pOverflow);
 
-    ib =
-        (Word16)
-        L_shr(
-            tempWord32,
-            1,
-            pOverflow);
-
-    ib =
-        sub(
-            ia,
-            ib,
-            pOverflow);
+    ib = ia - (Word16)(tempWord32 >> 1);
 
     ib =
         shl(
@@ -241,29 +219,12 @@
             1,
             pOverflow);
 
-    ic =
-        shr(
-            LSBs,
-            2,
-            pOverflow);
-    ic =
-        shl(
-            ic,
-            2,
-            pOverflow);
 
-    ic =
-        sub(
-            LSBs,
-            ic,
-            pOverflow);
+    ic = LSBs - ((LSBs >> 2) << 2);
 
 
-    pos_indx[index1] =
-        add(
-            (Word16)ib,
-            (Word16)(ic & 0x1),
-            pOverflow);
+    pos_indx[index1] = ib + (ic & 1);
+
 
     ib =
         mult(
@@ -277,23 +238,11 @@
             1,
             pOverflow);
 
-    ic =
-        shr(
-            ic,
-            1,
-            pOverflow);
 
-    pos_indx[index2] =
-        add(
-            ib,
-            ic,
-            pOverflow);
+    pos_indx[index2] = ib + (ic >> 1);
 
-    ib =
-        shr(
-            LSBs,
-            2,
-            pOverflow);
+
+    ib = LSBs >> 2;
 
     ic =
         mult(
@@ -415,11 +364,7 @@
       MSBs = indx[NB_TRACK]/8;
       LSBs = indx[NB_TRACK]%8;
       */
-    MSBs =
-        shr(
-            indx[NB_TRACK_MR102],
-            3,
-            pOverflow);
+    MSBs = indx[NB_TRACK_MR102] >> 3;
 
     LSBs = indx[NB_TRACK_MR102] & 0x7;
 
@@ -437,11 +382,7 @@
       MSBs = indx[NB_TRACK+1]/8;
       LSBs = indx[NB_TRACK+1]%8;
       */
-    MSBs =
-        shr(
-            indx[NB_TRACK_MR102+1],
-            3,
-            pOverflow);
+    MSBs = indx[NB_TRACK_MR102+1] >> 3;
 
     LSBs = indx[NB_TRACK_MR102+1] & 0x7;
 
@@ -466,11 +407,7 @@
       pos_indx[7] = (MSBs0_24/5)*2 + LSBs/2;
       */
 
-    MSBs =
-        shr(
-            indx[NB_TRACK_MR102+2],
-            2,
-            pOverflow);
+    MSBs = indx[NB_TRACK_MR102+2] >> 2;
 
     LSBs = indx[NB_TRACK_MR102+2] & 0x3;
 
@@ -487,18 +424,10 @@
             1,
             pOverflow);
 
-    ia =
-        add(
-            ia,
-            12,
-            pOverflow);
+    ia += 12;
 
+    MSBs0_24 = ia >> 5;
 
-    MSBs0_24 =
-        shr(
-            ia,
-            5,
-            pOverflow);
 
     ia =
         mult(
@@ -521,26 +450,13 @@
             5,
             pOverflow);
 
-    ib =
-        (Word16)
-        L_shr(
-            tempWord32,
-            1,
-            pOverflow);
 
-    ib =
-        sub(
-            MSBs0_24,
-            ib,
-            pOverflow);
+    ib = MSBs0_24 - (Word16)(tempWord32 >> 1);
 
     if (ia == 1)
     {
-        ib =
-            sub(
-                4,
-                ib,
-                pOverflow);
+        ib = 4 - ib;
+
     }
 
 
@@ -570,17 +486,8 @@
             1,
             pOverflow);
 
-    ib =
-        shr(
-            LSBs,
-            1,
-            pOverflow);
+    pos_indx[7] = ia + (LSBs >> 1);
 
-    pos_indx[7] =
-        add(
-            ia,
-            ib,
-            pOverflow);
 }
 
 /*
@@ -659,7 +566,6 @@
     Word16 pos1;
     Word16 pos2;
     Word16 sign;
-    Word32 tempWord32;
 
     Word16 linear_signs[NB_TRACK_MR102];
     Word16 linear_codewords[NB_PULSE];
@@ -676,30 +582,12 @@
         pOverflow);
 
     /* decode the positions and signs of pulses and build the codeword */
-    for (j = 0; j < NB_TRACK_MR102; j++)
+    for (j = 0; j < NB_TRACK_MR102; j++)    /* NB_TRACK_MR102 = 4 */
     {
-        /* compute index i */
+        /* position of pulse "j" */
 
-        i = linear_codewords[j];
+        pos1 = (linear_codewords[j] << 2) + j;
 
-        tempWord32 =
-            L_mult(
-                i,
-                4,
-                pOverflow);
-
-        i =
-            (Word16)
-            L_shr(
-                tempWord32,
-                1,
-                pOverflow);
-
-        pos1 =
-            add(
-                i,
-                j,
-                pOverflow);   /* position of pulse "j" */
 
         if (linear_signs[j] == 0)
         {
@@ -710,47 +598,27 @@
             sign = -NEG_CODE; /* -1.0 */
         }
 
-        cod[pos1] = sign;
+        if (pos1 < L_SUBFR)
+        {
+            cod[pos1] = sign;    /* avoid buffer overflow */
+        }
 
         /* compute index i */
+        /* position of pulse "j+4" */
 
-        i =
-            add(
-                j,
-                4,
-                pOverflow);
+        pos2 = (linear_codewords[j + 4] << 2) + j;
 
-        i = linear_codewords[i];
-
-        tempWord32 =
-            L_mult(
-                i,
-                4,
-                pOverflow);
-
-        i =
-            (Word16)
-            L_shr(
-                tempWord32,
-                1,
-                pOverflow);
-
-        pos2 =
-            add(
-                i,
-                j,
-                pOverflow);      /* position of pulse "j+4" */
 
         if (pos2 < pos1)
         {
             sign = negate(sign);
         }
 
-        cod[pos2] =
-            add(
-                cod[pos2],
-                sign,
-                pOverflow);
+        if (pos2 < L_SUBFR)
+        {
+            cod[pos2] += sign;     /* avoid buffer overflow */
+        }
+
 
     } /* for (j = 0; j < NB_TRACK_MR102; j++) */
 
diff --git a/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d_gain_c.cpp b/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d_gain_c.cpp
index b016de8..b6c62f8 100644
--- a/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d_gain_c.cpp
+++ b/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d_gain_c.cpp
@@ -217,7 +217,8 @@
     gc_pred(pred_state, mode, code, &exp, &frac,
             &exp_inn_en, &frac_inn_en, pOverflow);
 
-    tbl_tmp = add(add(index, index, pOverflow), index, pOverflow);
+    index &= 31;                    /* index < 32, to avoid buffer overflow */
+    tbl_tmp = index + (index << 1);
 
     p = &qua_gain_code[tbl_tmp];
 
diff --git a/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d_plsf_3.cpp b/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d_plsf_3.cpp
index 38ca513..7b31d04 100644
--- a/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d_plsf_3.cpp
+++ b/codecs_v2/audio/gsm_amr/amr_nb/dec/src/d_plsf_3.cpp
@@ -115,66 +115,45 @@
 #include "lsp_lsf.h"
 #include "reorder.h"
 #include "copy.h"
-
-/*--------------------------------------------------------------------------*/
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-    /*----------------------------------------------------------------------------
-    ; MACROS
-    ; Define module specific macros here
-    ----------------------------------------------------------------------------*/
+#include "q_plsf_3_tbl.h"
 
 
-    /*----------------------------------------------------------------------------
-    ; DEFINES
-    ; Include all pre-processor statements here. Include conditional
-    ; compile variables also.
-    ----------------------------------------------------------------------------*/
+/*----------------------------------------------------------------------------
+; MACROS
+; Define module specific macros here
+----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------
+; DEFINES
+; Include all pre-processor statements here. Include conditional
+; compile variables also.
+----------------------------------------------------------------------------*/
 #define ALPHA     29491     /* ALPHA    ->  0.9                            */
 #define ONE_ALPHA 3277      /* ONE_ALPHA-> (1.0-ALPHA)                     */
 
 
-    /*----------------------------------------------------------------------------
-    ; LOCAL FUNCTION DEFINITIONS
-    ; Function Prototype declaration
-    ----------------------------------------------------------------------------*/
+/*----------------------------------------------------------------------------
+; LOCAL FUNCTION DEFINITIONS
+; Function Prototype declaration
+----------------------------------------------------------------------------*/
 
 
-    /*----------------------------------------------------------------------------
-    ; LOCAL STORE/BUFFER/POINTER DEFINITIONS
-    ; Variable declaration - defined here and used outside this module
-    ----------------------------------------------------------------------------*/
+/*----------------------------------------------------------------------------
+; LOCAL STORE/BUFFER/POINTER DEFINITIONS
+; Variable declaration - defined here and used outside this module
+----------------------------------------------------------------------------*/
 
-    /*----------------------------------------------------------------------------
-    ; EXTERNAL FUNCTION REFERENCES
-    ; Declare functions defined elsewhere and referenced in this module
-    ----------------------------------------------------------------------------*/
+/*----------------------------------------------------------------------------
+; EXTERNAL FUNCTION REFERENCES
+; Declare functions defined elsewhere and referenced in this module
+----------------------------------------------------------------------------*/
 
-    /*----------------------------------------------------------------------------
-    ; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
-    ; Declare variables used in this module but defined elsewhere
-    ----------------------------------------------------------------------------*/
-    /* Codebooks of LSF prediction residual */
-    extern const Word16 mean_lsf_3[];
+/*----------------------------------------------------------------------------
+; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
+; Declare variables used in this module but defined elsewhere
+----------------------------------------------------------------------------*/
 
-    extern const Word16 pred_fac_3[];
-
-    extern const Word16 dico1_lsf_3[];
-    extern const Word16 dico2_lsf_3[];
-    extern const Word16 dico3_lsf_3[];
-
-    extern const Word16 mr515_3_lsf[];
-    extern const Word16 mr795_1_lsf[];
-
-    extern const Word16 past_rq_init[];
-
-    /*--------------------------------------------------------------------------*/
-#ifdef __cplusplus
-}
-#endif
 
 /*----------------------------------------------------------------------------
 ; FUNCTION CODE
@@ -191,13 +170,8 @@
 )
 {
     Word16 i;
-    Word16 index;
-
-    const Word16 *p_cb1;
-    const Word16 *p_cb2;
-    const Word16 *p_cb3;
-    const Word16 *p_dico;
     Word16 temp;
+    Word16 index;
 
     Word16 lsf1_r[M];
     Word16 lsf1_q[M];
@@ -279,23 +253,45 @@
 
     else  /* if good LSFs received */
     {
+
+        Word16 index_limit_1 = 0;
+        Word16 index_limit_2 = (DICO2_SIZE - 1) * 3;
+        Word16 index_limit_3 = 0;
+
+        const Word16 *p_cb1;
+        const Word16 *p_cb2;
+        const Word16 *p_cb3;
+        const Word16 *p_dico;
+
+
+        p_cb2 = dico2_lsf_3;    /* size DICO2_SIZE*3 */
+
         if ((mode == MR475) || (mode == MR515))
         {   /* MR475, MR515 */
-            p_cb1 = dico1_lsf_3;
-            p_cb2 = dico2_lsf_3;
-            p_cb3 = mr515_3_lsf;
+            p_cb1 = dico1_lsf_3;    /* size DICO1_SIZE*3 */
+            p_cb3 = mr515_3_lsf;    /* size MR515_3_SIZE*4 */
+
+            index_limit_1 = (DICO1_SIZE - 1) * 3;
+            index_limit_3 = (MR515_3_SIZE - 1) * 4;
+
         }
         else if (mode == MR795)
         {   /* MR795 */
-            p_cb1 = mr795_1_lsf;
-            p_cb2 = dico2_lsf_3;
-            p_cb3 = dico3_lsf_3;
+            p_cb1 = mr795_1_lsf;    /* size MR795_1_SIZE*3 */
+            p_cb3 = dico3_lsf_3;    /* size DICO3_SIZE*4 */
+
+            index_limit_1 = (MR795_1_SIZE - 1) * 3;
+            index_limit_3 = (DICO3_SIZE - 1) * 4;
+
         }
         else
         {   /* MR59, MR67, MR74, MR102, MRDTX */
-            p_cb1 = dico1_lsf_3;
-            p_cb2 = dico2_lsf_3;
-            p_cb3 = dico3_lsf_3;
+            p_cb1 = dico1_lsf_3;    /* size DICO1_SIZE*3 */
+            p_cb3 = dico3_lsf_3;    /* size DICO3_SIZE*4 */
+
+            index_limit_1 = (DICO1_SIZE - 1) * 3;
+            index_limit_3 = (DICO3_SIZE - 1) * 4;
+
         }
 
         /* decode prediction residuals from 3 received indices */
@@ -303,8 +299,12 @@
         index = *indice++;
 
         /* temp = 3*index; */
-        temp = add(index, index, pOverflow);
-        temp = add(temp, index, pOverflow);
+        temp = index + (index << 1);
+
+        if (temp > index_limit_1)
+        {
+            temp = index_limit_1;  /* avoid buffer overrun */
+        }
 
         p_dico = &p_cb1[temp];
 
@@ -316,16 +316,16 @@
 
         if (mode == MR475 || mode == MR515)
         {   /* MR475, MR515 only using every second entry */
-            index =
-                shl(
-                    index,
-                    1,
-                    pOverflow);
+            index <<= 1;
         }
 
         /* temp = 3*index */
-        temp = add(index, index, pOverflow);
-        temp = add(index, temp, pOverflow);
+        temp = index + (index << 1);
+
+        if (temp > index_limit_2)
+        {
+            temp = index_limit_2;  /* avoid buffer overrun */
+        }
 
         p_dico = &p_cb2[temp];
 
@@ -335,11 +335,13 @@
 
         index = *indice++;
 
-        temp =
-            shl(
-                index,
-                2,
-                pOverflow);
+        temp = index << 2;
+
+        if (temp > index_limit_3)
+        {
+            temp = index_limit_3;  /* avoid buffer overrun */
+        }
+
 
         p_dico = &p_cb3[temp];
 
diff --git a/codecs_v2/audio/gsm_amr/amr_nb/dec/src/dec_gain.cpp b/codecs_v2/audio/gsm_amr/amr_nb/dec/src/dec_gain.cpp
index eae7e61..ceab48d 100644
--- a/codecs_v2/audio/gsm_amr/amr_nb/dec/src/dec_gain.cpp
+++ b/codecs_v2/audio/gsm_amr/amr_nb/dec/src/dec_gain.cpp
@@ -69,7 +69,6 @@
 
 #include "dec_gain.h"
 #include "typedef.h"
-//#include "stdlib.h"
 #include "mode.h"
 #include "cnst.h"
 #include "pow2.h"
@@ -217,9 +216,13 @@
     {
         if (mode == MR475)
         {
-            temp1 = sub(1, evenSubfr, pOverflow);
-            temp2 = shl(temp1, 1, pOverflow);
-            index = add(index, temp2, pOverflow);
+            index += (1 ^ evenSubfr) << 1; /* evenSubfr is 0 or 1 */
+
+            if (index > (MR475_VQ_SIZE*4 - 2))
+            {
+                index = (MR475_VQ_SIZE * 4 - 2); /* avoid possible buffer overflow */
+            }
+
             p = &table_gain_MR475[index];
 
             *gain_pit = *p++;
diff --git a/codecs_v2/audio/gsm_amr/amr_nb/dec/src/qgain475_tab.cpp b/codecs_v2/audio/gsm_amr/amr_nb/dec/src/qgain475_tab.cpp
index 33b551e..57814f9 100644
--- a/codecs_v2/audio/gsm_amr/amr_nb/dec/src/qgain475_tab.cpp
+++ b/codecs_v2/audio/gsm_amr/amr_nb/dec/src/qgain475_tab.cpp
@@ -55,7 +55,7 @@
 /*----------------------------------------------------------------------------
 ; INCLUDES
 ----------------------------------------------------------------------------*/
-#include "typedef.h"
+#include "qgain475_tab.h"
 
 /*--------------------------------------------------------------------------*/
 #ifdef __cplusplus
@@ -73,7 +73,6 @@
     ; [Include all pre-processor statements here. Include conditional
     ; compile variables also.]
     ----------------------------------------------------------------------------*/
-#define MR475_VQ_SIZE 256
 
     /*----------------------------------------------------------------------------
     ; LOCAL FUNCTION DEFINITIONS
diff --git a/codecs_v2/audio/mp3/dec/src/pvmp3_framedecoder.cpp b/codecs_v2/audio/mp3/dec/src/pvmp3_framedecoder.cpp
index 6b82071..7a5f635 100644
--- a/codecs_v2/audio/mp3/dec/src/pvmp3_framedecoder.cpp
+++ b/codecs_v2/audio/mp3/dec/src/pvmp3_framedecoder.cpp
@@ -478,9 +478,7 @@
 
             int32 ancillary_data_lenght = pVars->predicted_frame_size << 3;
 
-            pExt->totalNumberOfBitsUsed += pVars->inputStream.usedBits;
-
-            ancillary_data_lenght  -= pExt->totalNumberOfBitsUsed;
+            ancillary_data_lenght  -= pVars->inputStream.usedBits;
 
             /* skip ancillary data */
             if (ancillary_data_lenght > 0)
@@ -506,6 +504,7 @@
     }
 
     pExt->inputBufferUsedLength = pVars->inputStream.usedBits >> 3;
+    pExt->totalNumberOfBitsUsed += pVars->inputStream.usedBits;
     pExt->version = info->version_x;
     pExt->samplingRate = mp3_s_freq[info->version_x][info->sampling_frequency];
     pExt->bitRate = mp3_bitrate[pExt->version][info->bitrate_index];
@@ -578,6 +577,9 @@
             {
                 fillDataBuf(&pVars->mainDataStream, tmp1);
             }
+
+            /* adjust circular buffer counter */
+            pVars->mainDataStream.offset = module(pVars->mainDataStream.offset, BUFSIZE);
         }
     }
     else
diff --git a/codecs_v2/audio/mp3/dec/src/pvmp3_stereo_proc.cpp b/codecs_v2/audio/mp3/dec/src/pvmp3_stereo_proc.cpp
index 7db9977..d69a46d 100644
--- a/codecs_v2/audio/mp3/dec/src/pvmp3_stereo_proc.cpp
+++ b/codecs_v2/audio/mp3/dec/src/pvmp3_stereo_proc.cpp
@@ -158,9 +158,10 @@
  *
  */
 
-const int32  is_ratio_factor[7] = {0,
+const int32  is_ratio_factor[8] = {0,
                                    Q31_fmt(0.21132486540519),   Q31_fmt(0.36602540378444),   Q31_fmt(0.50000000000000),
-                                   Q31_fmt(0.63397459621556),   Q31_fmt(0.78867513459481),   Q31_fmt(1.00000000000000)
+                                   Q31_fmt(0.63397459621556),   Q31_fmt(0.78867513459481),   Q31_fmt(1.00000000000000),
+                                   0
                                   };
 
 /*----------------------------------------------------------------------------
@@ -221,7 +222,7 @@
                         int32 Number)
 {
 
-    int32 TmpFac = is_ratio_factor[ is_pos];
+    int32 TmpFac = is_ratio_factor[ is_pos & 7];
 
     int32 *pt_xr  = &xr[Start];
     int32 *pt_xl  = &xl[Start];
diff --git a/codecs_v2/omx/omx_aac/src/omx_aac_component.cpp b/codecs_v2/omx/omx_aac/src/omx_aac_component.cpp
index dc981a5..140cb6f 100644
--- a/codecs_v2/omx/omx_aac/src/omx_aac_component.cpp
+++ b/codecs_v2/omx/omx_aac/src/omx_aac_component.cpp
@@ -197,8 +197,9 @@
     iPVCapabilityFlags.iOMXComponentSupportsExternalOutputBufferAlloc = OMX_TRUE;
     iPVCapabilityFlags.iOMXComponentSupportsMovableInputBuffers = OMX_TRUE;
     iPVCapabilityFlags.iOMXComponentSupportsPartialFrames = OMX_TRUE;
-    iPVCapabilityFlags.iOMXComponentNeedsNALStartCode = OMX_FALSE;
+    iPVCapabilityFlags.iOMXComponentUsesNALStartCodes = OMX_FALSE;
     iPVCapabilityFlags.iOMXComponentCanHandleIncompleteFrames = OMX_TRUE;
+    iPVCapabilityFlags.iOMXComponentUsesFullAVCFrames = OMX_FALSE;
 
     if (ipAppPriv)
     {
@@ -221,6 +222,7 @@
     }
 
     /** Domain specific section for the ports. */
+    ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.nPortIndex = OMX_PORT_INPUTPORT_INDEX;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.eDomain = OMX_PortDomainAudio;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.format.audio.cMIMEType = (OMX_STRING)"audio/mpeg";
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.format.audio.pNativeRender = 0;
@@ -235,6 +237,7 @@
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.bPopulated = OMX_FALSE;
 
 
+    ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.nPortIndex = OMX_PORT_OUTPUTPORT_INDEX;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.eDomain = OMX_PortDomainAudio;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.format.audio.cMIMEType = (OMX_STRING)"raw";
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.format.audio.pNativeRender = 0;
@@ -249,6 +252,7 @@
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.bPopulated = OMX_FALSE;
 
     //Default values for AAC audio param port
+    ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioAacParam.nPortIndex = OMX_PORT_INPUTPORT_INDEX;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioAacParam.nChannels = 2;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioAacParam.nBitRate = 0;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioAacParam.nSampleRate = 44100;
@@ -258,6 +262,7 @@
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioAacParam.eAACProfile = OMX_AUDIO_AACObjectHE_PS;    //OMX_AUDIO_AACObjectLC;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioAacParam.eAACStreamFormat = OMX_AUDIO_AACStreamFormatMP2ADTS;
 
+    ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->AudioPcmMode.nPortIndex = OMX_PORT_OUTPUTPORT_INDEX;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->AudioPcmMode.nChannels = 2;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->AudioPcmMode.eNumData = OMX_NumericalDataSigned;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->AudioPcmMode.bInterleaved = OMX_TRUE;
diff --git a/codecs_v2/omx/omx_aacenc/include/aac_enc.h b/codecs_v2/omx/omx_aacenc/include/aac_enc.h
index 1f67a55..b1f71e8 100644
--- a/codecs_v2/omx/omx_aacenc/include/aac_enc.h
+++ b/codecs_v2/omx/omx_aacenc/include/aac_enc.h
@@ -47,6 +47,11 @@
                                 OMX_U8* aInBuffer,
                                 OMX_U32 aInBufSize);
 
+        OMX_BOOL IsRawAACFormatUsed()
+        {
+            return ((TT_MP4_RAWPACKETS == iAacEncConfig.useTransmux) ? OMX_TRUE : OMX_FALSE);
+        };
+
     private:
 
         OMX_S32 AacEncConfigDefaultSettings(ENC_CONFIGURATION* pConfig);
diff --git a/codecs_v2/omx/omx_aacenc/include/aacenc_timestamp.h b/codecs_v2/omx/omx_aacenc/include/aacenc_timestamp.h
new file mode 100644
index 0000000..68bdfac
--- /dev/null
+++ b/codecs_v2/omx/omx_aacenc/include/aacenc_timestamp.h
@@ -0,0 +1,55 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#ifndef AACENC_TIMESTAMP_H_INCLUDED
+#define AACENC_TIMESTAMP_H_INCLUDED
+
+#ifndef OSCL_BASE_H_INCLUDED
+#include "oscl_base.h"
+#endif
+
+#define DEFAULT_SAMPLING_FREQ 48000
+#define DEFAULT_SAMPLES_PER_FRAME 1024
+
+class AacEncTimeStampCalc
+{
+    public:
+
+        AacEncTimeStampCalc()
+        {
+            iSamplingFreq = DEFAULT_SAMPLING_FREQ;
+            iCurrentTs = 0;
+            iCurrentSamples = 0;
+            iSamplesPerFrame = DEFAULT_SAMPLES_PER_FRAME;
+        };
+
+        void SetParameters(uint32 aFreq, uint32 aSamples);
+
+        void SetFromInputTimestamp(uint32 aValue);
+
+        void UpdateTimestamp(uint32 aValue);
+
+        uint32 GetConvertedTs();
+
+    private:
+        uint32 iSamplingFreq;
+        uint32 iCurrentTs;
+        uint32 iCurrentSamples;
+        uint32 iSamplesPerFrame;
+};
+
+#endif	//#ifndef AACENC_TIMESTAMP_H_INCLUDED
diff --git a/codecs_v2/omx/omx_aacenc/src/aac_enc.cpp b/codecs_v2/omx/omx_aacenc/src/aac_enc.cpp
index eda0cd8..3b57083 100644
--- a/codecs_v2/omx/omx_aacenc/src/aac_enc.cpp
+++ b/codecs_v2/omx/omx_aacenc/src/aac_enc.cpp
@@ -96,23 +96,23 @@
     iAacEncConfig.nChannelsIn = aPcmMode.nChannels;
     iAacEncConfig.nChannelsOut = aAacParam.nChannels;
 
-    iAacEncConfig.bitrate = aAacParam.nBitRate;
 
     if (0 != aAacParam.nAudioBandWidth)
     {
         iAacEncConfig.bandwidth = aAacParam.nAudioBandWidth;
     }
 
-    if (OMX_AUDIO_ChannelModeDual == aAacParam.eChannelMode)
-    {
-        iAacEncConfig.dualMono = 1;
-    }
+    /* DV: comment out for now
+        if (OMX_AUDIO_ChannelModeDual == aAacParam.eChannelMode)
+        {
+            iAacEncConfig.dualMono = 1;
+        }
 
-    if (OMX_AUDIO_ChannelModeMono == aAacParam.eChannelMode)
-    {
-        iAacEncConfig.nChannelsOut = 1;
-    }
-
+        if (OMX_AUDIO_ChannelModeMono == aAacParam.eChannelMode)
+        {
+            iAacEncConfig.nChannelsOut = 1;
+        }
+    */
 
     if (OMX_AUDIO_AACObjectMain == aAacParam.eAACProfile)
     {
@@ -155,6 +155,39 @@
         return OMX_FALSE;
     }
 
+    iAacEncConfig.bitrate = aAacParam.nBitRate;
+    // it is possible that desired bitrate is not set by the client - if so,
+    // use a default value based on appropriate sampling rate and type of AAC profile
+    if (iAacEncConfig.bitrate == 0)
+    {
+        switch (iAacEncConfig.sampleRate)
+        {
+            case 48000:
+            case 44100:
+                iAacEncConfig.bitrate = 96000;
+                break;
+            case 32000:
+                iAacEncConfig.bitrate = 84000;
+                break;
+            case 24000:
+            case 22050:
+                iAacEncConfig.bitrate = 72000;
+                break;
+            case 16000:
+                iAacEncConfig.bitrate = 48000;
+                break;
+            case 11025:
+                iAacEncConfig.bitrate = 36000;
+                break;
+            case 8000:
+                iAacEncConfig.bitrate = 24000;
+                break;
+            default:
+                iAacEncConfig.bitrate = 24000;
+                break;
+        }
+    }
+
 
     if ((OMX_AUDIO_AACStreamFormatMP2ADTS == aAacParam.eAACStreamFormat) ||
             (OMX_AUDIO_AACStreamFormatMP4ADTS == aAacParam.eAACStreamFormat))
@@ -175,7 +208,10 @@
     }
     else if (OMX_AUDIO_AACStreamFormatMP4FF == aAacParam.eAACStreamFormat)
     {
-        iAacEncConfig.useTransmux = TT_MP4_MP4F;
+        //iAacEncConfig.useTransmux = TT_MP4_MP4F;
+        // DV: use temporarily to bypass an error:
+        iAacEncConfig.useTransmux = TT_MP4_RAWPACKETS;
+
     }
     else if (OMX_AUDIO_AACStreamFormatRAW == aAacParam.eAACStreamFormat)
     {
@@ -247,6 +283,7 @@
         aacEncClose(&iAacEncoder);
         iAacEncoder = NULL;
     }
+
 }
 
 
@@ -259,22 +296,27 @@
 
     OMX_S32 NumImputSamples = iAacEncConfig.nSamplesRead;
     OMX_S32 Status;
-    OMX_S32 OutputOffset = 0;
+    //OMX_S32 OutputOffset = 0;
 
     if (TT_MP4_RAWPACKETS == iAacEncConfig.useTransmux)
     {
         if (OMX_FALSE == iAscFlag)
         {
-            oscl_memcpy(aOutputBuffer, &iAscSize, 4);
-            oscl_memcpy((aOutputBuffer + 4), iAscBuf, iAscSize);
+            //oscl_memcpy(aOutputBuffer, &iAscSize, 4);
+            //oscl_memcpy((aOutputBuffer + 4), iAscBuf, iAscSize);
+            // copy the config data
+            oscl_memcpy(aOutputBuffer, iAscBuf, iAscSize);
             iAscFlag = OMX_TRUE;
-            OutputOffset = 4 + iAscSize;
+            //OutputOffset = 4 + iAscSize;
+            *aOutputLength = iAscSize;
+            return OMX_TRUE;
+
         }
         //Four bytes to write the size of frame after it has been encoded
-        OutputOffset += 4;
+        //OutputOffset += 4;
     }
 
-    iAacEncConfig.pOutBuffer = aOutputBuffer + OutputOffset;
+    iAacEncConfig.pOutBuffer = aOutputBuffer; // + OutputOffset;
 
     if (aInBufSize < NumImputSamples)
     {
@@ -295,10 +337,10 @@
         return OMX_FALSE;
     }
 
-    if (TT_MP4_RAWPACKETS == iAacEncConfig.useTransmux)
-    {
-        oscl_memcpy((aOutputBuffer + (OutputOffset - 4)), &(*aOutputLength), 4);
-    }
+    //if (TT_MP4_RAWPACKETS == iAacEncConfig.useTransmux)
+    //{
+    //    oscl_memcpy((aOutputBuffer + (OutputOffset - 4)), &(*aOutputLength), 4);
+    //}
 
     return OMX_TRUE;
 }
diff --git a/codecs_v2/omx/omx_aacenc/src/aacenc_timestamp.cpp b/codecs_v2/omx/omx_aacenc/src/aacenc_timestamp.cpp
new file mode 100644
index 0000000..05f400c
--- /dev/null
+++ b/codecs_v2/omx/omx_aacenc/src/aacenc_timestamp.cpp
@@ -0,0 +1,63 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+
+#include "aacenc_timestamp.h"
+
+
+//Initialize the parameters
+void AacEncTimeStampCalc::SetParameters(uint32 aFreq, uint32 aSamples)
+{
+    if (0 != aFreq)
+    {
+        iSamplingFreq = aFreq;
+    }
+
+    iSamplesPerFrame = aSamples;
+}
+
+
+//Set the current timestamp equal to the input buffer timestamp
+void AacEncTimeStampCalc::SetFromInputTimestamp(uint32 aValue)
+{
+    iCurrentTs = aValue;
+    iCurrentSamples = 0;
+}
+
+
+void AacEncTimeStampCalc::UpdateTimestamp(uint32 aValue)
+{
+    iCurrentSamples += aValue;
+}
+
+//Convert current samples into the output timestamp
+uint32 AacEncTimeStampCalc::GetConvertedTs()
+{
+    uint32 Value = iCurrentTs;
+
+    //Formula used: TS in ms = (samples * 1000/sampling_freq)
+    //Rounding added (add 0.5 to the result), extra check for divide by zero
+    if (0 != iSamplingFreq)
+    {
+        Value = iCurrentTs + (iCurrentSamples * 1000 + (iSamplingFreq / 2)) / iSamplingFreq;
+    }
+
+    iCurrentTs = Value;
+    iCurrentSamples = 0;
+
+    return (Value);
+}
diff --git a/codecs_v2/omx/omx_aacenc/src/omx_aacenc_component.cpp b/codecs_v2/omx/omx_aacenc/src/omx_aacenc_component.cpp
index a4530b4..d2727c3 100644
--- a/codecs_v2/omx/omx_aacenc/src/omx_aacenc_component.cpp
+++ b/codecs_v2/omx/omx_aacenc/src/omx_aacenc_component.cpp
@@ -186,6 +186,7 @@
     iPVCapabilityFlags.iOMXComponentSupportsPartialFrames = OMX_TRUE;
     iPVCapabilityFlags.iOMXComponentNeedsNALStartCode = OMX_FALSE;
     iPVCapabilityFlags.iOMXComponentCanHandleIncompleteFrames = OMX_TRUE;
+    iPVCapabilityFlags.iOMXComponentNeedsFullAVCFrames = OMX_FALSE;
 
     if (ipAppPriv)
     {
@@ -209,6 +210,7 @@
 
     /** Domain specific section for the ports */
     /* Input port is raw/pcm for AAC encoder */
+    ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.nPortIndex = OMX_PORT_INPUTPORT_INDEX;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.eDomain = OMX_PortDomainAudio;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.format.audio.cMIMEType = (OMX_STRING)"raw";
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.format.audio.pNativeRender = 0;
@@ -224,6 +226,7 @@
 
 
     /* Output port is aac format for AAC encoder */
+    ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.nPortIndex = OMX_PORT_OUTPUTPORT_INDEX;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.eDomain = OMX_PortDomainAudio;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.format.audio.cMIMEType = (OMX_STRING)"audio/mpeg";
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.format.audio.pNativeRender = 0;
@@ -238,6 +241,7 @@
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.bPopulated = OMX_FALSE;
 
     //Default values for PCM input audio param port
+    ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioPcmMode.nPortIndex = OMX_PORT_INPUTPORT_INDEX;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioPcmMode.nChannels = 2;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioPcmMode.eNumData = OMX_NumericalDataSigned;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioPcmMode.bInterleaved = OMX_TRUE;
@@ -248,6 +252,7 @@
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioPcmMode.eChannelMapping[1] = OMX_AUDIO_ChannelRF;
 
     //Default values for AAC output audio param port
+    ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->AudioAacParam.nPortIndex = OMX_PORT_OUTPUTPORT_INDEX;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->AudioAacParam.nChannels = 2;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->AudioAacParam.nSampleRate = 48000;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->AudioAacParam.nBitRate = 128000;
@@ -348,7 +353,8 @@
 /* This routine will extract the input timestamp from the input buffer */
 void OmxComponentAacEncoderAO::SyncWithInputTimestamp()
 {
-    iCurrentFrameTS.SetFromInputTimestamp(iFrameTimestamp);
+    // DV: SKIP DOING THIS FOR NOW
+    //iCurrentFrameTS.SetFromInputTimestamp(iFrameTimestamp);
 }
 
 
@@ -382,6 +388,13 @@
             }
 
             ipOutputBuffer = (OMX_BUFFERHEADERTYPE*) DeQueue(pOutputQueue);
+
+            OSCL_ASSERT(NULL != ipOutputBuffer);
+            if (NULL == ipOutputBuffer)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "OmxComponentAacEncoderAO : ProcessData OUT ERR output buffer cannot be dequeued"));
+                return;
+            }
             ipOutputBuffer->nFilledLen = 0;
             iNewOutBufRequired = OMX_FALSE;
 
@@ -432,11 +445,12 @@
             ipOutputBuffer->nFilledLen += OutputLength;
             ipOutputBuffer->nOffset = 0;
 
-            if (OutputLength > 0)
+            if ((iFrameCount > 0) && (OutputLength > 0))
             {
                 iCurrentFrameTS.UpdateTimestamp((iInputFrameLength >> 1));
             }
 
+            iFrameCount++;
 
             /* If EOS flag has come from the client & there are no more
              * input buffers to decode, send the callback to the client
@@ -471,7 +485,10 @@
             {
                 if (iInputCurrLength >= iInputFrameLength)
                 {
-                    iInputCurrLength -= iInputFrameLength;
+                    // in case of "Raw" format - the first output frame contains the config data - but
+                    // actual input data has not been touched.
+                    if ((iFrameCount > 1) || (ipAacEnc->IsRawAACFormatUsed() != OMX_TRUE))
+                        iInputCurrLength -= iInputFrameLength;
                 }
                 else
                 {
@@ -492,7 +509,8 @@
                 else if (iInputCurrLength >= iInputFrameLength)
                 {
                     //Do not return the input buffer in case it has more than one frame data to encode
-                    ipFrameDecodeBuffer += iInputFrameLength;
+                    if ((iFrameCount > 1) || (ipAacEnc->IsRawAACFormatUsed() != OMX_TRUE))
+                        ipFrameDecodeBuffer += iInputFrameLength;
                 }
                 else
                 {
@@ -536,8 +554,12 @@
         }
         else
         {
-            oscl_memmove(ipTempInputBuffer, &ipFrameDecodeBuffer[iInputFrameLength], iInputCurrLength);
+            // if we ended up here - the data in the incoming input buffer combined with temp data still
+            // wasn't enough in quantity to send for processing - so it wasn't even processed - but we did
+            // the necessary memcopies  to save the data
+            //oscl_memmove(ipTempInputBuffer, &ipFrameDecodeBuffer[iInputFrameLength], iInputCurrLength);
             iTempInputBufferLength = iInputCurrLength;
+            ipTempInputBuffer = ipFrameDecodeBuffer;
 
             if (ipInputBuffer)
             {
diff --git a/codecs_v2/omx/omx_amr/src/amr_decode_frame.cpp b/codecs_v2/omx/omx_amr/src/amr_decode_frame.cpp
index ff2cb27..32cccfd 100644
--- a/codecs_v2/omx/omx_amr/src/amr_decode_frame.cpp
+++ b/codecs_v2/omx/omx_amr/src/amr_decode_frame.cpp
@@ -60,6 +60,7 @@
     , 1
     , 1
     , 1
+    , 1
     , 1		// WBAMR Frame No Data
     , 1		// WBAMR Frame No Data
 };
@@ -342,7 +343,6 @@
         if ((FrameLength + FrameBytesProcessed) <= (OMX_S32) *aInBufSize)
         {
             /* Set up pointer to the start of frame to be decoded */
-
             iCodecExternals->frame_type = (uint32)FrameType3gpp;
             iCodecExternals->mode = (uint32)FrameType3gpp;
             iCodecExternals->pInputBuffer = (uint8*) pSpeechBits;
diff --git a/codecs_v2/omx/omx_amr/src/omx_amr_component.cpp b/codecs_v2/omx/omx_amr/src/omx_amr_component.cpp
index 4fb02c7..11707a0 100644
--- a/codecs_v2/omx/omx_amr/src/omx_amr_component.cpp
+++ b/codecs_v2/omx/omx_amr/src/omx_amr_component.cpp
@@ -191,8 +191,9 @@
     iPVCapabilityFlags.iOMXComponentSupportsExternalOutputBufferAlloc = OMX_TRUE;
     iPVCapabilityFlags.iOMXComponentSupportsMovableInputBuffers = OMX_TRUE;
     iPVCapabilityFlags.iOMXComponentSupportsPartialFrames = OMX_TRUE;
-    iPVCapabilityFlags.iOMXComponentNeedsNALStartCode = OMX_FALSE;
+    iPVCapabilityFlags.iOMXComponentUsesNALStartCodes = OMX_FALSE;
     iPVCapabilityFlags.iOMXComponentCanHandleIncompleteFrames = OMX_TRUE;
+    iPVCapabilityFlags.iOMXComponentUsesFullAVCFrames = OMX_FALSE;
 
     if (ipAppPriv)
     {
@@ -215,6 +216,7 @@
     }
 
     /** Domain specific section for the ports. */
+    ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.nPortIndex = OMX_PORT_INPUTPORT_INDEX;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.eDomain = OMX_PortDomainAudio;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.format.audio.cMIMEType = (OMX_STRING)"audio/mpeg";
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.format.audio.pNativeRender = 0;
@@ -229,6 +231,7 @@
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.bPopulated = OMX_FALSE;
 
 
+    ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.nPortIndex = OMX_PORT_OUTPUTPORT_INDEX;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.eDomain = OMX_PortDomainAudio;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.format.audio.cMIMEType = (OMX_STRING)"raw";
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.format.audio.pNativeRender = 0;
@@ -243,12 +246,14 @@
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.bPopulated = OMX_FALSE;
 
     //Default values for AMR audio param port
+    ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioAmrParam.nPortIndex = OMX_PORT_INPUTPORT_INDEX;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioAmrParam.nChannels = 1;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioAmrParam.nBitRate = 0;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioAmrParam.eAMRBandMode = OMX_AUDIO_AMRBandModeNB0;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioAmrParam.eAMRDTXMode = OMX_AUDIO_AMRDTXModeOnVAD1;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioAmrParam.eAMRFrameFormat = OMX_AUDIO_AMRFrameFormatConformance;
 
+    ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->AudioPcmMode.nPortIndex = OMX_PORT_OUTPUTPORT_INDEX;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->AudioPcmMode.nChannels = 1;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->AudioPcmMode.eNumData = OMX_NumericalDataSigned;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->AudioPcmMode.bInterleaved = OMX_TRUE;
@@ -1046,6 +1051,27 @@
     }
     iIsInit = OMX_TRUE;
 
+
+    // Added an extra check based on whether client has set nb or wb as Role in
+    // SetParameter() for index OMX_IndexParamStandardComponentRole
+    OMX_AUDIO_AMRBANDMODETYPE AmrBandMode = ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioAmrParam.eAMRBandMode;
+    if ((OMX_TRUE == iComponentRoleFlag) && (0 == oscl_strcmp((OMX_STRING)iComponentRole, (OMX_STRING)"audio_decoder.amrnb")))
+    {
+        if ((AmrBandMode < OMX_AUDIO_AMRBandModeNB0) || (AmrBandMode > OMX_AUDIO_AMRBandModeNB7))
+        {
+            //Narrow band component does not support these band modes
+            return OMX_ErrorInvalidComponent;
+        }
+    }
+    else if ((OMX_TRUE == iComponentRoleFlag) && (0 == oscl_strcmp((OMX_STRING)iComponentRole, (OMX_STRING)"audio_decoder.amrwb")))
+    {
+        if ((AmrBandMode < OMX_AUDIO_AMRBandModeWB0) || (AmrBandMode > OMX_AUDIO_AMRBandModeWB8))
+        {
+            //Wide band component does not support these band modes
+            return OMX_ErrorInvalidComponent;
+        }
+    }
+
     //amr lib init
     if (!iCodecReady)
     {
diff --git a/codecs_v2/omx/omx_amrenc/src/omx_amrenc_component.cpp b/codecs_v2/omx/omx_amrenc/src/omx_amrenc_component.cpp
index e41d138..a8239b9 100644
--- a/codecs_v2/omx/omx_amrenc/src/omx_amrenc_component.cpp
+++ b/codecs_v2/omx/omx_amrenc/src/omx_amrenc_component.cpp
@@ -183,8 +183,9 @@
     iPVCapabilityFlags.iOMXComponentSupportsExternalOutputBufferAlloc = OMX_TRUE;
     iPVCapabilityFlags.iOMXComponentSupportsMovableInputBuffers = OMX_TRUE;
     iPVCapabilityFlags.iOMXComponentSupportsPartialFrames = OMX_TRUE;
-    iPVCapabilityFlags.iOMXComponentNeedsNALStartCode = OMX_FALSE;
+    iPVCapabilityFlags.iOMXComponentUsesNALStartCodes = OMX_FALSE;
     iPVCapabilityFlags.iOMXComponentCanHandleIncompleteFrames = OMX_TRUE;
+    iPVCapabilityFlags.iOMXComponentUsesFullAVCFrames = OMX_FALSE;
 
     if (ipAppPriv)
     {
@@ -208,6 +209,7 @@
 
     /** Domain specific section for the ports */
     /* Input port is raw/pcm for AMR encoder */
+    ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.nPortIndex = OMX_PORT_INPUTPORT_INDEX;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.eDomain = OMX_PortDomainAudio;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.format.audio.cMIMEType = (OMX_STRING)"raw";
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.format.audio.pNativeRender = 0;
@@ -223,6 +225,7 @@
 
 
     /* Output port is amr format for AMR encoder */
+    ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.nPortIndex = OMX_PORT_OUTPUTPORT_INDEX;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.eDomain = OMX_PortDomainAudio;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.format.audio.cMIMEType = (OMX_STRING)"audio/mpeg";
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.format.audio.pNativeRender = 0;
@@ -237,6 +240,7 @@
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.bPopulated = OMX_FALSE;
 
     //Default values for PCM input audio param port
+    ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioPcmMode.nPortIndex = OMX_PORT_INPUTPORT_INDEX;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioPcmMode.nChannels = 1;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioPcmMode.eNumData = OMX_NumericalDataSigned;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioPcmMode.bInterleaved = OMX_TRUE;
@@ -247,6 +251,7 @@
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioPcmMode.eChannelMapping[1] = OMX_AUDIO_ChannelRF;
 
     //Default values for AMR output audio param port
+    ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->AudioAmrParam.nPortIndex = OMX_PORT_OUTPUTPORT_INDEX;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->AudioAmrParam.nChannels = 1;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->AudioAmrParam.nBitRate = 0;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->AudioAmrParam.eAMRBandMode = OMX_AUDIO_AMRBandModeNB7;	//AMRNB Mode 7 = 12200 bps
@@ -380,6 +385,15 @@
             }
 
             ipOutputBuffer = (OMX_BUFFERHEADERTYPE*) DeQueue(pOutputQueue);
+
+            OSCL_ASSERT(NULL != ipOutputBuffer);
+            if (NULL == ipOutputBuffer)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "OmxComponentAmrEncoderAO : ProcessData ERROR - OUT buffer cannot be dequeued"));
+
+                return;
+            }
+
             ipOutputBuffer->nFilledLen = 0;
             iNewOutBufRequired = OMX_FALSE;
 
diff --git a/codecs_v2/omx/omx_baseclass/include/pv_omxcomponent.h b/codecs_v2/omx/omx_baseclass/include/pv_omxcomponent.h
index a5b8cc5..54ae63c 100644
--- a/codecs_v2/omx/omx_baseclass/include/pv_omxcomponent.h
+++ b/codecs_v2/omx/omx_baseclass/include/pv_omxcomponent.h
@@ -49,7 +49,7 @@
 #define OMX_PORT_OUTPUTPORT_INDEX OMX_DirOutput
 #define OMX_PORT_ALLPORT_INDEX -1
 
-#define OMX_PORT_NUMBER_FORMATS_SUPPORTED 3
+#define OMX_PORT_NUMBER_FORMATS_SUPPORTED 4
 
 
 /* Application's private data */
@@ -396,6 +396,7 @@
         }
 
         OMX_BOOL AssemblePartialFrames(OMX_BUFFERHEADERTYPE* aInputBuffer);
+        virtual OMX_BOOL ParseFullAVCFramesIntoNALs(OMX_BUFFERHEADERTYPE* aInputBuffer);
         OMX_ERRORTYPE MessageHandler(CoreMessage* Message);
         OMX_ERRORTYPE DoStateSet(OMX_U32);
 
@@ -498,6 +499,8 @@
         OMX_U32 iGroupID;
         //Roles of the component
         OMX_U8 iComponentRole[OMX_MAX_STRINGNAME_SIZE];
+        //Flag to indicate whether role has been set by client or not
+        OMX_BOOL iComponentRoleFlag;
         //This field holds the private data associated with a mark request, if any
         OMX_MARKTYPE* ipMark;
 
diff --git a/codecs_v2/omx/omx_baseclass/src/pv_omxcomponent.cpp b/codecs_v2/omx/omx_baseclass/src/pv_omxcomponent.cpp
index 7f5a63f..f3d6ed6 100644
--- a/codecs_v2/omx/omx_baseclass/src/pv_omxcomponent.cpp
+++ b/codecs_v2/omx/omx_baseclass/src/pv_omxcomponent.cpp
@@ -86,6 +86,7 @@
     iSendOutBufferAfterPortReconfigFlag = OMX_FALSE;
     iSizeOutBufferForPortReconfig = 0;
 
+    iComponentRoleFlag = OMX_FALSE;
 
     ipMark = NULL;
 
@@ -165,7 +166,7 @@
     ipTempOutBufferForPortReconfig = NULL;
     iSendOutBufferAfterPortReconfigFlag = OMX_FALSE;
     iSizeOutBufferForPortReconfig = 0;
-
+    iComponentRoleFlag = OMX_FALSE;
 
 
     /* Initialize the asynchronous command Queue */
@@ -394,10 +395,22 @@
     }
 }
 
+
+OMX_BOOL OmxComponentBase::ParseFullAVCFramesIntoNALs(OMX_BUFFERHEADERTYPE* aInputBuffer)
+{
+    OSCL_UNUSED_ARG(aInputBuffer);
+
+    // we should never arrive here if this is not an AVC component, since iOMXComponentUsesFullAVCFrames (which is tested before calling this function)
+    // should only be set for an AVC component
+
+    OSCL_ASSERT(OMX_FALSE);
+
+    return OMX_FALSE;
+}
+
 /** This function assembles multiple input buffers into
 	* one frame with the marker flag OMX_BUFFERFLAG_ENDOFFRAME set
 	*/
-
 OMX_BOOL OmxComponentBase::AssemblePartialFrames(OMX_BUFFERHEADERTYPE* aInputBuffer)
 {
     PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_NOTICE, (0, "OmxComponentBase : AssemblePartialFrames IN"));
@@ -2690,7 +2703,16 @@
                 //If OMX_BUFFERFLAG_ENDOFFRAME flag is marked, come here
                 else
                 {
-                    PartialFrameReturn = AssemblePartialFrames(ipInputBuffer);
+                    if (iPVCapabilityFlags.iOMXComponentUsesFullAVCFrames && (OMX_PORT_INPUTPORT_INDEX == iCompressedFormatPortNum))
+                    {
+                        // since full frames are sent, there will never be partial frame assembly,
+                        // but we do need to parse the frames into NALs to send to the decoder
+                        PartialFrameReturn = ParseFullAVCFramesIntoNALs(ipInputBuffer);
+                    }
+                    else
+                    {
+                        PartialFrameReturn = AssemblePartialFrames(ipInputBuffer);
+                    }
                     if (OMX_FALSE == PartialFrameReturn)
                     {
                         PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_NOTICE, (0, "OmxComponentBase : BufferMgmtFunction OUT"));
@@ -3574,6 +3596,7 @@
                 break;
             }
             oscl_strncpy((OMX_STRING)iComponentRole, (OMX_STRING)pCompRole->cRole, OMX_MAX_STRINGNAME_SIZE);
+            iComponentRoleFlag = OMX_TRUE;
         }
         break;
 
@@ -4171,6 +4194,7 @@
                 break;
             }
             oscl_strncpy((OMX_STRING)iComponentRole, (OMX_STRING)pCompRole->cRole, OMX_MAX_STRINGNAME_SIZE);
+            iComponentRoleFlag = OMX_TRUE;
         }
         break;
 
diff --git a/codecs_v2/omx/omx_common/Android.mk b/codecs_v2/omx/omx_common/Android.mk
index 6b96e7e..c1d6c03 100644
--- a/codecs_v2/omx/omx_common/Android.mk
+++ b/codecs_v2/omx/omx_common/Android.mk
@@ -3,6 +3,7 @@
 
 LOCAL_SRC_FILES := \
 	src/pv_omxcore.cpp \
+ 	src/pv_omx_config_parser.cpp \
  	src/pv_omxregistry.cpp
 
 
@@ -27,6 +28,7 @@
 
 LOCAL_COPY_HEADERS := \
 	include/pv_omxcore.h \
+ 	include/pv_omx_config_parser.h \
  	include/pv_omxdefs.h
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/codecs_v2/omx/omx_common/build/make_multithreaded/local.mk b/codecs_v2/omx/omx_common/build/make_multithreaded/local.mk
index c1faaf2..6acdea2 100644
--- a/codecs_v2/omx/omx_common/build/make_multithreaded/local.mk
+++ b/codecs_v2/omx/omx_common/build/make_multithreaded/local.mk
@@ -19,11 +19,13 @@
 
 SRCS := \
     pv_omxcore.cpp \
+    pv_omx_config_parser.cpp \
     pv_omxregistry.cpp
 
 
 HDRS := \
     pv_omxcore.h \
+    pv_omx_config_parser.h \
     pv_omxdefs.h
 
 
diff --git a/codecs_v2/omx/omx_common/include/pv_omx_config_parser.h b/codecs_v2/omx/omx_common/include/pv_omx_config_parser.h
new file mode 100644
index 0000000..9a1a175
--- /dev/null
+++ b/codecs_v2/omx/omx_common/include/pv_omx_config_parser.h
@@ -0,0 +1,87 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#ifndef PV_OMX_CONFIG_PARSER_H_INCLUDED
+#define PV_OMX_CONFIG_PARSER_H_INCLUDED
+
+#ifndef PV_OMXDEFS_H_INCLUDED
+#include "pv_omxdefs.h"
+#endif
+
+#ifndef PV_OMX_QUEUE_H_INCLUDED
+#include "pv_omx_queue.h"
+#endif
+
+#ifndef OMX_Types_h
+#include "omx_types.h"
+#endif
+
+#ifndef OSCL_BASE_INCLUDED_H
+#include "oscl_base.h"
+#endif
+
+#ifndef OMX_Core_h
+#include "omx_core.h"
+#endif
+
+#ifndef PV_AUDIO_CONFIG_PARSER_H
+#include "pv_audio_config_parser.h"
+#endif
+
+#ifndef PV_VIDEO_CONFIG_PARSER_H
+#include "pv_video_config_parser.h"
+#endif
+
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+    OSCL_IMPORT_REF OMX_BOOL OMXConfigParser(
+        OMX_PTR aInputParameters,
+        OMX_PTR aOutputParameters);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+typedef struct
+{
+    OMX_U8* inPtr;             //pointer to codec configuration header
+    OMX_U32 inBytes;           //length of codec configuration header
+    OMX_STRING cComponentRole; //OMX component codec type
+    OMX_STRING cComponentName;  //OMX component name
+} OMXConfigParserInputs;
+
+typedef struct
+{
+    OMX_U16 Channels;
+    OMX_U16 BitsPerSample;
+    OMX_U32 SamplesPerSec;
+} AudioOMXConfigParserOutputs;
+
+typedef struct
+{
+    OMX_U32 width;
+    OMX_U32 height;
+    OMX_U32 profile;
+    OMX_U32 level;
+} VideoOMXConfigParserOutputs;
+
+#endif
+
diff --git a/codecs_v2/omx/omx_common/include/pv_omxcore.h b/codecs_v2/omx/omx_common/include/pv_omxcore.h
index 4b35a05..24e6e45 100644
--- a/codecs_v2/omx/omx_common/include/pv_omxcore.h
+++ b/codecs_v2/omx/omx_common/include/pv_omxcore.h
@@ -105,6 +105,8 @@
 #endif
 #endif
 
+#define MAX_ROLES_SUPPORTED	3
+
 #ifdef __cplusplus
 extern "C"
 {
@@ -142,6 +144,9 @@
         OMX_OUT  OMX_HANDLETYPE *hPipe,
         OMX_IN   OMX_STRING szURI);
 
+    OSCL_IMPORT_REF OMX_BOOL OMXConfigParser(
+        OMX_PTR aInputParameters,
+        OMX_PTR aOutputParameters);
 
 
 #ifdef __cplusplus
@@ -178,12 +183,16 @@
 };
 #endif // USE_DYNAMIC_LOAD_OMX_COMPONENTS
 
+// PV additions to OMX_EXTRADATATYPE enum
+#define OMX_ExtraDataNALSizeArray 0x7F123321 // random value above 0x7F000000 (start of the unused range for vendors)
+
 class ComponentRegistrationType
 {
     public:
         // name of the component used as identifier
         OMX_STRING		ComponentName;
-        OMX_STRING		RoleString;
+        OMX_STRING		RoleString[MAX_ROLES_SUPPORTED];
+        OMX_U32			NumberOfRolesSupported;
         // pointer to factory function to be called when component needs to be instantiated
         OMX_ERRORTYPE(*FunctionPtrCreateComponent)(OMX_OUT OMX_HANDLETYPE* pHandle, OMX_IN  OMX_PTR pAppData,
                 OMX_PTR pProxy, OMX_STRING aOmxLibName, OMX_PTR &aOmxLib, OMX_PTR aOsclUuid, OMX_U32 &aRefCount);
@@ -192,7 +201,10 @@
         //This function will return the role string
         void GetRolesOfComponent(OMX_STRING* aRole_string)
         {
-            *aRole_string = RoleString;
+            for (OMX_U32 ii = 0; ii < NumberOfRolesSupported; ii++)
+            {
+                aRole_string[ii] = RoleString[ii];
+            }
         }
 
         // for dynamic loading
@@ -227,8 +239,9 @@
     OMX_BOOL iOMXComponentSupportsExternalInputBufferAlloc;
     OMX_BOOL iOMXComponentSupportsMovableInputBuffers;
     OMX_BOOL iOMXComponentSupportsPartialFrames;
-    OMX_BOOL iOMXComponentNeedsNALStartCode;
+    OMX_BOOL iOMXComponentUsesNALStartCodes;
     OMX_BOOL iOMXComponentCanHandleIncompleteFrames;
+    OMX_BOOL iOMXComponentUsesFullAVCFrames;
 
 } PV_OMXComponentCapabilityFlagsType;
 
diff --git a/codecs_v2/omx/omx_common/include/pv_omxdefs.h b/codecs_v2/omx/omx_common/include/pv_omxdefs.h
index 5dedb99..c9b09ad 100644
--- a/codecs_v2/omx/omx_common/include/pv_omxdefs.h
+++ b/codecs_v2/omx/omx_common/include/pv_omxdefs.h
@@ -24,6 +24,9 @@
 #define MAX_INSTANTIATED_COMPONENTS 7
 
 //#define INSERT_NAL_START_CODE
+// while there is no documented number of max NALs per frame, this should be more than enough
+// this used to keep track of the NAL sizes in full-frame, multiple NAL output buffers
+#define MAX_NAL_PER_FRAME 100
 
 // maximum length of component names
 #define PV_OMX_MAX_COMPONENT_NAME_LENGTH 128
diff --git a/codecs_v2/omx/omx_common/src/pv_omx_config_parser.cpp b/codecs_v2/omx/omx_common/src/pv_omx_config_parser.cpp
new file mode 100644
index 0000000..f625c60
--- /dev/null
+++ b/codecs_v2/omx/omx_common/src/pv_omx_config_parser.cpp
@@ -0,0 +1,145 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+
+#include "oscl_stdstring.h"
+
+// Use default DLL entry point
+#ifndef OSCL_DLL_H_INCLUDED
+#include "oscl_dll.h"
+#endif
+
+#include "pv_omx_config_parser.h"
+
+
+
+OSCL_EXPORT_REF OMX_BOOL OMXConfigParser(
+    OMX_PTR aInputParameters,
+    OMX_PTR aOutputParameters)
+
+{
+    OMXConfigParserInputs* pInputs;
+
+    pInputs = (OMXConfigParserInputs*) aInputParameters;
+
+
+    if (NULL != pInputs->cComponentRole)
+    {
+        if (0 == oscl_strncmp(pInputs->cComponentRole, (OMX_STRING)"audio_decoder", oscl_strlen("audio_decoder")))
+        {
+            OMX_S32 Status;
+            pvAudioConfigParserInputs aInputs;
+
+            aInputs.inPtr = pInputs->inPtr;
+            aInputs.inBytes = pInputs->inBytes;
+
+            if (0 == oscl_strcmp(pInputs->cComponentRole, (OMX_STRING)"audio_decoder.wma"))
+            {
+                aInputs.iMimeType = PVMF_MIME_WMA;
+
+            }
+            else if (0 == oscl_strcmp(pInputs->cComponentRole, (OMX_STRING)"audio_decoder.aac"))
+            {
+                aInputs.iMimeType = PVMF_MIME_AAC_SIZEHDR;
+
+            }
+            else if (0 == oscl_strcmp(pInputs->cComponentRole, (OMX_STRING)"audio_decoder.amr"))
+            {
+                aInputs.iMimeType = PVMF_MIME_AMR;
+
+            }
+            else if (0 == oscl_strcmp(pInputs->cComponentRole, (OMX_STRING)"audio_decoder.amrnb"))
+            {
+                aInputs.iMimeType = PVMF_MIME_AMR;
+
+            }
+            else if (0 == oscl_strcmp(pInputs->cComponentRole, (OMX_STRING)"audio_decoder.amrwb"))
+            {
+                aInputs.iMimeType = PVMF_MIME_AMRWB;
+
+            }
+            else if (0 == oscl_strcmp(pInputs->cComponentRole, (OMX_STRING)"audio_decoder.mp3"))
+            {
+                aInputs.iMimeType = PVMF_MIME_MP3;
+
+            }
+            else
+            {
+                return OMX_FALSE;
+            }
+
+
+            Status = pv_audio_config_parser(&aInputs, (pvAudioConfigParserOutputs *)aOutputParameters);
+            if (0 == Status)
+            {
+                return OMX_FALSE;
+            }
+        }
+        else if (0 == oscl_strncmp(pInputs->cComponentRole, (OMX_STRING)"video_decoder", oscl_strlen("video_decoder")))
+        {
+
+            OMX_S32 Status;
+            pvVideoConfigParserInputs aInputs;
+
+            aInputs.inPtr = pInputs->inPtr;
+            aInputs.inBytes = pInputs->inBytes;
+
+            if (0 == oscl_strcmp(pInputs->cComponentRole, (OMX_STRING)"video_decoder.wmv"))
+            {
+                aInputs.iMimeType = PVMF_MIME_WMV;
+
+            }
+            else if (0 == oscl_strcmp(pInputs->cComponentRole, (OMX_STRING)"video_decoder.avc"))
+            {
+                aInputs.iMimeType = PVMF_MIME_H264_VIDEO;
+
+            }
+            else if (0 == oscl_strcmp(pInputs->cComponentRole, (OMX_STRING)"video_decoder.mpeg4"))
+            {
+                aInputs.iMimeType = PVMF_MIME_M4V;
+
+            }
+            else if (0 == oscl_strcmp(pInputs->cComponentRole, (OMX_STRING)"video_decoder.h263"))
+            {
+                aInputs.iMimeType = PVMF_MIME_H2632000;
+
+            }
+            else
+            {
+                return OMX_FALSE;
+            }
+
+            Status = pv_video_config_parser(&aInputs, (pvVideoConfigParserOutputs *)aOutputParameters);
+            if (0 != Status)
+            {
+                return OMX_FALSE;
+            }
+        }
+        else
+        {
+            return OMX_FALSE;
+        }
+
+    }
+    else
+    {
+        return OMX_FALSE;
+    }
+
+    return OMX_TRUE;
+}
+
diff --git a/codecs_v2/omx/omx_common/src/pv_omxcore.cpp b/codecs_v2/omx/omx_common/src/pv_omxcore.cpp
index 2ba8d0f..0f7fd68 100644
--- a/codecs_v2/omx/omx_common/src/pv_omxcore.cpp
+++ b/codecs_v2/omx/omx_common/src/pv_omxcore.cpp
@@ -47,6 +47,10 @@
 #include "oscl_init.h"
 #endif
 
+#ifndef PV_OMX_CONFIG_PARSER_H
+#include "pv_omx_config_parser.h"
+#endif
+
 // pv_omxregistry.h is only needed if NOT using CML2
 #ifndef USE_CML2_CONFIG
 #include "pv_omxregistry.h"
@@ -59,6 +63,28 @@
 #include "oscl_dll.h"
 #endif
 
+#if USE_DYNAMIC_LOAD_OMX_COMPONENTS
+// until dynamic registry - register all components
+// unconditionally - may error out at load time
+
+OMX_ERRORTYPE Mpeg4Register();
+OMX_ERRORTYPE H263Register();
+OMX_ERRORTYPE AvcRegister();
+OMX_ERRORTYPE WmvRegister();
+OMX_ERRORTYPE AacRegister();
+OMX_ERRORTYPE AmrRegister();
+OMX_ERRORTYPE Mp3Register();
+OMX_ERRORTYPE WmaRegister();
+
+OMX_ERRORTYPE AmrEncRegister();
+OMX_ERRORTYPE Mpeg4EncRegister();
+OMX_ERRORTYPE H263EncRegister();
+OMX_ERRORTYPE AvcEncRegister();
+OMX_ERRORTYPE AacEncRegister();
+
+
+#else
+
 #if REGISTER_OMX_M4V_COMPONENT
 OMX_ERRORTYPE Mpeg4Register();
 #endif
@@ -110,7 +136,7 @@
 #if REGISTER_OMX_AACENC_COMPONENT
 OMX_ERRORTYPE AacEncRegister();
 #endif
-
+#endif
 OSCL_DLL_ENTRY_POINT_DEFAULT()
 
 /* Initializes the component */
@@ -159,6 +185,76 @@
         return Status;
     }
 
+#if USE_DYNAMIC_LOAD_OMX_COMPONENTS
+//unconditional registration
+    // MPEG4
+    Status = Mpeg4Register();
+    if (Status != OMX_ErrorNone)
+        return Status;
+
+
+    //H263
+    Status = H263Register();
+    if (Status != OMX_ErrorNone)
+        return Status;
+
+    // AVC
+    Status = AvcRegister();
+    if (Status != OMX_ErrorNone)
+        return Status;
+
+    // WMV
+    Status = WmvRegister();
+    if (Status != OMX_ErrorNone)
+        return Status;
+
+    // AAC
+    Status = AacRegister();
+    if (Status != OMX_ErrorNone)
+        return Status;
+
+    // AMR
+    Status = AmrRegister();
+    if (Status != OMX_ErrorNone)
+        return Status;
+
+    // MP3
+    Status = Mp3Register();
+    if (Status != OMX_ErrorNone)
+        return Status;
+
+    // WMA
+    Status = WmaRegister();
+    if (Status != OMX_ErrorNone)
+        return Status;
+
+    //AMR ENCODER
+    Status = AmrEncRegister();
+    if (Status != OMX_ErrorNone)
+        return Status;
+
+    //MPEG4 Encoder
+    Status = Mpeg4EncRegister();
+    if (Status != OMX_ErrorNone)
+        return Status;
+
+    //H263 Encoder
+    Status = H263EncRegister();
+    if (Status != OMX_ErrorNone)
+        return Status;
+
+    //H264/AVC Encoder
+    Status = AvcEncRegister();
+    if (Status != OMX_ErrorNone)
+        return Status;
+
+    //AAC Encoder
+    Status = AacEncRegister();
+    if (Status != OMX_ErrorNone)
+        return Status;
+
+
+#else
     // REGISTER COMPONENT TYPES (ONE BY ONE)
 #if REGISTER_OMX_M4V_COMPONENT
     // MPEG4
@@ -249,7 +345,7 @@
     if (Status != OMX_ErrorNone)
         return Status;
 #endif
-
+#endif
     return OMX_ErrorNone;
 }
 
@@ -556,6 +652,8 @@
     }
     pTempProxyTerm->Start();
 
+    *pHandle = NULL;
+
     ErrorType = pTempProxyTerm->ProxyGetHandle(pHandle, cComponentName, pAppData, pCallBacks);
 
     //Get registry to store values
@@ -573,35 +671,35 @@
         return OMX_ErrorInvalidState;
     }
 
-    OMX_U32* componentIndex = &(data->iComponentIndex);
-    OMX_HANDLETYPE* componentHandle = data->iComponentHandle;
-
-    // First, find an empty slot in the proxy/component handle array to store the component/proxy handle
-    OMX_U32 jj;
-    for (jj = 0; jj < MAX_INSTANTIATED_COMPONENTS; jj++)
+    if ((NULL != *pHandle) && (OMX_ErrorNone == ErrorType))
     {
-        if (componentHandle[jj] == NULL)
-            break;
-    }
-    // can't find a free slot
-    if (jj == MAX_INSTANTIATED_COMPONENTS)
-    {
-        OsclSingletonRegistry::registerInstanceAndUnlock(data, OSCL_SINGLETON_ID_OMX, error);
-        _Cleanup_Component(pTempProxyTerm, *pHandle, cComponentName);
-        ErrorType = OMX_ErrorInsufficientResources;
-        return ErrorType;
-    }
-    else
-    {
-        *componentIndex = jj;
-    }
+        OMX_U32* componentIndex = &(data->iComponentIndex);
+        OMX_HANDLETYPE* componentHandle = data->iComponentHandle;
 
-    ProxyApplication_OMX** pProxyTerm = data->ipProxyTerm;
+        // First, find an empty slot in the proxy/component handle array to store the component/proxy handle
+        OMX_U32 jj;
+        for (jj = 0; jj < MAX_INSTANTIATED_COMPONENTS; jj++)
+        {
+            if (componentHandle[jj] == NULL)
+                break;
+        }
+        // can't find a free slot
+        if (jj == MAX_INSTANTIATED_COMPONENTS)
+        {
+            OsclSingletonRegistry::registerInstanceAndUnlock(data, OSCL_SINGLETON_ID_OMX, error);
+            _Cleanup_Component(pTempProxyTerm, *pHandle, cComponentName);
+            ErrorType = OMX_ErrorInsufficientResources;
+            return ErrorType;
+        }
+        else
+        {
+            *componentIndex = jj;
+        }
 
-    pProxyTerm[*componentIndex] = pTempProxyTerm;
+        ProxyApplication_OMX** pProxyTerm = data->ipProxyTerm;
 
-    if (*pHandle)
-    {
+        pProxyTerm[*componentIndex] = pTempProxyTerm;
+
         // now that we got the component handle, store the handle in the componentHandle array
         componentHandle[*componentIndex] = *pHandle;
 
@@ -949,8 +1047,8 @@
         return OMX_ErrorUndefined;
     }
 
-    OMX_STRING RoleString = NULL;
-    OMX_S32 ii;
+    OMX_STRING RoleString[MAX_ROLES_SUPPORTED];
+    OMX_U32 ii;
 
     // first check if there is a component with the correct name
     for (ii = 0; ii < MAX_SUPPORTED_COMPONENTS; ii ++)
@@ -959,7 +1057,7 @@
         {
             if (!oscl_strcmp(data->ipRegTemplateList[ii]->ComponentName, compName))
             {
-                (data->ipRegTemplateList[ii])->GetRolesOfComponent(&RoleString);
+                (data->ipRegTemplateList[ii])->GetRolesOfComponent(RoleString);
                 break;
             }
         }
@@ -973,13 +1071,14 @@
     }
 
 
-    // for simplicity all our components have 1 role only
-    // if a component has more than 1 role, still register it for each role separately, and use
-    //	factory/destructor separately
-    *pNumRoles = 1;
+    // Return the number of roles supported by the component.
+    *pNumRoles = (data->ipRegTemplateList[ii])->NumberOfRolesSupported;
     if (roles != NULL)
     {
-        oscl_strncpy((OMX_STRING) roles[0], (OMX_STRING)RoleString, oscl_strlen((OMX_STRING)RoleString) + 1);
+        for (ii = 0; ii < *pNumRoles; ii++)
+        {
+            oscl_strncpy((OMX_STRING) roles[ii], (OMX_STRING)RoleString[ii], oscl_strlen((OMX_STRING)RoleString[ii]) + 1);
+        }
     }
 
     return OMX_ErrorNone;
@@ -1005,8 +1104,8 @@
         return OMX_ErrorUndefined;
     }
 
-    OMX_U32 ii;
-    OMX_STRING RoleString;
+    OMX_U32 ii, jj;
+    OMX_STRING RoleString[MAX_ROLES_SUPPORTED];
     // initialize
     *pNumComps = 0;
 
@@ -1016,19 +1115,22 @@
         if (data->ipRegTemplateList[ii])
         {
             // get the component role
-            (data->ipRegTemplateList[ii])->GetRolesOfComponent(&RoleString);
+            (data->ipRegTemplateList[ii])->GetRolesOfComponent(RoleString);
 
-            // if the role matches, increment the counter and record the comp. name
-            if (!oscl_strcmp(RoleString, role))
+            for (jj = 0; jj < (data->ipRegTemplateList[ii])->NumberOfRolesSupported; jj++)
             {
-                // if a placeholder for compNames is provided, copy the component name into it
-                if (compNames != NULL)
+                // if the role matches, increment the counter and record the comp. name
+                if (!oscl_strcmp(RoleString[jj], role))
                 {
-                    oscl_strncpy((OMX_STRING) compNames[*pNumComps], (data->ipRegTemplateList[ii])->ComponentName,
-                                 oscl_strlen((data->ipRegTemplateList[ii])->ComponentName) + 1);
+                    // if a placeholder for compNames is provided, copy the component name into it
+                    if (compNames != NULL)
+                    {
+                        oscl_strncpy((OMX_STRING) compNames[*pNumComps], (data->ipRegTemplateList[ii])->ComponentName,
+                                     oscl_strlen((data->ipRegTemplateList[ii])->ComponentName) + 1);
+                    }
+                    // increment the counter
+                    *pNumComps = (*pNumComps + 1);
                 }
-                // increment the counter
-                *pNumComps = (*pNumComps + 1);
 
             }
         }
@@ -1037,3 +1139,4 @@
     return OMX_ErrorNone;
 
 }
+
diff --git a/codecs_v2/omx/omx_common/src/pv_omxregistry.cpp b/codecs_v2/omx/omx_common/src/pv_omxregistry.cpp
index 4d71c84..a2050da 100644
--- a/codecs_v2/omx/omx_common/src/pv_omxregistry.cpp
+++ b/codecs_v2/omx/omx_common/src/pv_omxregistry.cpp
@@ -94,6 +94,9 @@
 extern OMX_ERRORTYPE Mpeg4OmxComponentFactory(OMX_OUT OMX_HANDLETYPE* pHandle, OMX_IN  OMX_PTR pAppData, OMX_IN OMX_PTR pProxy, OMX_STRING aOmxLibName, OMX_PTR &aOmxLib, OMX_PTR aOsclUuid, OMX_U32 &aRefCount);
 extern OMX_ERRORTYPE Mpeg4OmxComponentDestructor(OMX_IN OMX_HANDLETYPE pHandle, OMX_PTR &aOmxLib, OMX_PTR aOsclUuid, OMX_U32 &aRefCount);
 #endif
+#endif
+
+#if (REGISTER_OMX_M4V_COMPONENT) || (USE_DYNAMIC_LOAD_OMX_COMPONENTS)
 /////////////////////////////////////////////////////////////////////////////
 OMX_ERRORTYPE Mpeg4Register()
 {
@@ -102,27 +105,40 @@
     if (pCRT)
     {
         pCRT->ComponentName = (OMX_STRING)"OMX.PV.mpeg4dec";
-        pCRT->RoleString = (OMX_STRING)"video_decoder.mpeg4";
-#if DYNAMIC_LOAD_OMX_M4V_COMPONENT
+        pCRT->RoleString[0] = (OMX_STRING)"video_decoder.mpeg4";
+        pCRT->NumberOfRolesSupported = 1;
+        pCRT->SharedLibraryOsclUuid = NULL;
+#if USE_DYNAMIC_LOAD_OMX_COMPONENTS
         pCRT->FunctionPtrCreateComponent = &OmxComponentFactoryDynamicCreate;
         pCRT->FunctionPtrDestroyComponent = &OmxComponentFactoryDynamicDestructor;
         pCRT->SharedLibraryName = (OMX_STRING)"libomx_m4vdec_sharedlibrary.so";
         pCRT->SharedLibraryPtr = NULL;
 
         OsclUuid *temp = (OsclUuid *) oscl_malloc(sizeof(OsclUuid));
+        if (temp == NULL)
+        {
+            oscl_free(pCRT); // free allocated memory
+            return OMX_ErrorInsufficientResources;
+        }
         OSCL_PLACEMENT_NEW(temp, PV_OMX_M4VDEC_UUID);
 
         pCRT->SharedLibraryOsclUuid = (OMX_PTR) temp;
         pCRT->SharedLibraryRefCounter = 0;
-#else
+#endif
+#if REGISTER_OMX_M4V_COMPONENT
+#if (DYNAMIC_LOAD_OMX_M4V_COMPONENT == 0)
         pCRT->FunctionPtrCreateComponent = &Mpeg4OmxComponentFactory;
         pCRT->FunctionPtrDestroyComponent = &Mpeg4OmxComponentDestructor;
         pCRT->SharedLibraryName = NULL;
         pCRT->SharedLibraryPtr = NULL;
 
+        if (pCRT->SharedLibraryOsclUuid)
+            oscl_free(pCRT->SharedLibraryOsclUuid);
+
         pCRT->SharedLibraryOsclUuid = NULL;
         pCRT->SharedLibraryRefCounter = 0;
 #endif
+#endif
 
     }
     else
@@ -143,6 +159,8 @@
 extern OMX_ERRORTYPE H263OmxComponentFactory(OMX_OUT OMX_HANDLETYPE* pHandle, OMX_IN  OMX_PTR pAppData, OMX_IN OMX_PTR pProxy, OMX_STRING aOmxLibName, OMX_PTR &aOmxLib, OMX_PTR aOsclUuid, OMX_U32 &aRefCount);
 extern OMX_ERRORTYPE H263OmxComponentDestructor(OMX_IN OMX_HANDLETYPE pHandle, OMX_PTR &aOmxLib, OMX_PTR aOsclUuid, OMX_U32 &aRefCount);
 #endif
+#endif
+#if (REGISTER_OMX_H263_COMPONENT) || (USE_DYNAMIC_LOAD_OMX_COMPONENTS)
 /////////////////////////////////////////////////////////////////////////////
 OMX_ERRORTYPE H263Register()
 {
@@ -151,28 +169,41 @@
     if (pCRT)
     {
         pCRT->ComponentName = (OMX_STRING)"OMX.PV.h263dec";
-        pCRT->RoleString = (OMX_STRING)"video_decoder.h263";
-#if DYNAMIC_LOAD_OMX_H263_COMPONENT
+        pCRT->RoleString[0] = (OMX_STRING)"video_decoder.h263";
+        pCRT->NumberOfRolesSupported = 1;
+        pCRT->SharedLibraryOsclUuid = NULL;
+#if USE_DYNAMIC_LOAD_OMX_COMPONENTS
         pCRT->FunctionPtrCreateComponent = &OmxComponentFactoryDynamicCreate;
         pCRT->FunctionPtrDestroyComponent = &OmxComponentFactoryDynamicDestructor;
         pCRT->SharedLibraryName = (OMX_STRING)"libomx_m4vdec_sharedlibrary.so";
         pCRT->SharedLibraryPtr = NULL;
 
         OsclUuid *temp = (OsclUuid *) oscl_malloc(sizeof(OsclUuid));
+        if (temp == NULL)
+        {
+            oscl_free(pCRT); // free allocated memory
+            return OMX_ErrorInsufficientResources;
+        }
         OSCL_PLACEMENT_NEW(temp, PV_OMX_H263DEC_UUID);
 
         pCRT->SharedLibraryOsclUuid = (OMX_PTR) temp;
         pCRT->SharedLibraryRefCounter = 0;
-#else
+#endif
+#if REGISTER_OMX_H263_COMPONENT
+#if (DYNAMIC_LOAD_OMX_H263_COMPONENT == 0)
+
         pCRT->FunctionPtrCreateComponent = &H263OmxComponentFactory;
         pCRT->FunctionPtrDestroyComponent = &H263OmxComponentDestructor;
         pCRT->SharedLibraryName = NULL;
         pCRT->SharedLibraryPtr = NULL;
 
+        if (pCRT->SharedLibraryOsclUuid)
+            oscl_free(pCRT->SharedLibraryOsclUuid);
+
         pCRT->SharedLibraryOsclUuid = NULL;
         pCRT->SharedLibraryRefCounter = 0;
 #endif
-
+#endif
     }
     else
     {
@@ -189,6 +220,8 @@
 extern OMX_ERRORTYPE AvcOmxComponentFactory(OMX_OUT OMX_HANDLETYPE* pHandle, OMX_IN  OMX_PTR pAppData, OMX_IN OMX_PTR pProxy, OMX_STRING aOmxLibName, OMX_PTR &aOmxLib, OMX_PTR aOsclUuid, OMX_U32 &aRefCount);
 extern OMX_ERRORTYPE AvcOmxComponentDestructor(OMX_IN OMX_HANDLETYPE pHandle, OMX_PTR &aOmxLib, OMX_PTR aOsclUuid, OMX_U32 &aRefCount);
 #endif
+#endif
+#if (REGISTER_OMX_AVC_COMPONENT) || (USE_DYNAMIC_LOAD_OMX_COMPONENTS)
 /////////////////////////////////////////////////////////////////////
 OMX_ERRORTYPE AvcRegister()
 {
@@ -197,28 +230,40 @@
     if (pCRT)
     {
         pCRT->ComponentName = (OMX_STRING)"OMX.PV.avcdec";
-        pCRT->RoleString = (OMX_STRING)"video_decoder.avc";
-#if DYNAMIC_LOAD_OMX_AVC_COMPONENT
+        pCRT->RoleString[0] = (OMX_STRING)"video_decoder.avc";
+        pCRT->NumberOfRolesSupported = 1;
+        pCRT->SharedLibraryOsclUuid = NULL;
+#if USE_DYNAMIC_LOAD_OMX_COMPONENTS
         pCRT->FunctionPtrCreateComponent = &OmxComponentFactoryDynamicCreate;
         pCRT->FunctionPtrDestroyComponent = &OmxComponentFactoryDynamicDestructor;
         pCRT->SharedLibraryName = (OMX_STRING)"libomx_avcdec_sharedlibrary.so";
         pCRT->SharedLibraryPtr = NULL;
 
         OsclUuid *temp = (OsclUuid *) oscl_malloc(sizeof(OsclUuid));
+        if (temp == NULL)
+        {
+            oscl_free(pCRT); // free allocated memory
+            return OMX_ErrorInsufficientResources;
+        }
         OSCL_PLACEMENT_NEW(temp, PV_OMX_AVCDEC_UUID);
 
         pCRT->SharedLibraryOsclUuid = (OMX_PTR) temp;
         pCRT->SharedLibraryRefCounter = 0;
-#else
+#endif
+#if REGISTER_OMX_AVC_COMPONENT
+#if (DYNAMIC_LOAD_OMX_AVC_COMPONENT == 0)
         pCRT->FunctionPtrCreateComponent = &AvcOmxComponentFactory;
         pCRT->FunctionPtrDestroyComponent = &AvcOmxComponentDestructor;
         pCRT->SharedLibraryName = NULL;
         pCRT->SharedLibraryPtr = NULL;
 
+        if (pCRT->SharedLibraryOsclUuid)
+            oscl_free(pCRT->SharedLibraryOsclUuid);
+
         pCRT->SharedLibraryOsclUuid = NULL;
         pCRT->SharedLibraryRefCounter = 0;
 #endif
-
+#endif
     }
     else
     {
@@ -231,11 +276,12 @@
 ////////////////////////////////////////////////////////////////////////////////////
 
 #if REGISTER_OMX_WMV_COMPONENT
-
 #if (DYNAMIC_LOAD_OMX_WMV_COMPONENT == 0)
 extern OMX_ERRORTYPE WmvOmxComponentFactory(OMX_OUT OMX_HANDLETYPE* pHandle, OMX_IN  OMX_PTR pAppData, OMX_IN OMX_PTR pProxy, OMX_STRING aOmxLibName, OMX_PTR &aOmxLib, OMX_PTR aOsclUuid, OMX_U32 &aRefCount);
 extern OMX_ERRORTYPE WmvOmxComponentDestructor(OMX_IN OMX_HANDLETYPE pHandle, OMX_PTR &aOmxLib, OMX_PTR aOsclUuid, OMX_U32 &aRefCount);
 #endif
+#endif
+#if (REGISTER_OMX_WMV_COMPONENT) || (USE_DYNAMIC_LOAD_OMX_COMPONENTS)
 /////////////////////////////////////////////////////////////////////
 OMX_ERRORTYPE WmvRegister()
 {
@@ -244,27 +290,40 @@
     if (pCRT)
     {
         pCRT->ComponentName = (OMX_STRING)"OMX.PV.wmvdec";
-        pCRT->RoleString = (OMX_STRING)"video_decoder.wmv";
-#if DYNAMIC_LOAD_OMX_WMV_COMPONENT
+        pCRT->RoleString[0] = (OMX_STRING)"video_decoder.wmv";
+        pCRT->NumberOfRolesSupported = 1;
+        pCRT->SharedLibraryOsclUuid = NULL;
+#if USE_DYNAMIC_LOAD_OMX_COMPONENTS
         pCRT->FunctionPtrCreateComponent = &OmxComponentFactoryDynamicCreate;
         pCRT->FunctionPtrDestroyComponent = &OmxComponentFactoryDynamicDestructor;
         pCRT->SharedLibraryName = (OMX_STRING)"libomx_wmvdec_sharedlibrary.so";
         pCRT->SharedLibraryPtr = NULL;
 
         OsclUuid *temp = (OsclUuid *) oscl_malloc(sizeof(OsclUuid));
+        if (temp == NULL)
+        {
+            oscl_free(pCRT); // free allocated memory
+            return OMX_ErrorInsufficientResources;
+        }
         OSCL_PLACEMENT_NEW(temp, PV_OMX_WMVDEC_UUID);
 
         pCRT->SharedLibraryOsclUuid = (OMX_PTR) temp;
         pCRT->SharedLibraryRefCounter = 0;
-#else
+#endif
+#if REGISTER_OMX_WMV_COMPONENT
+#if (DYNAMIC_LOAD_OMX_WMV_COMPONENT == 0)
         pCRT->FunctionPtrCreateComponent = &WmvOmxComponentFactory;
         pCRT->FunctionPtrDestroyComponent = &WmvOmxComponentDestructor;
         pCRT->SharedLibraryName = NULL;
         pCRT->SharedLibraryPtr = NULL;
 
+        if (pCRT->SharedLibraryOsclUuid)
+            oscl_free(pCRT->SharedLibraryOsclUuid);
+
         pCRT->SharedLibraryOsclUuid = NULL;
         pCRT->SharedLibraryRefCounter = 0;
 #endif
+#endif
     }
     else
     {
@@ -281,7 +340,8 @@
 extern OMX_ERRORTYPE AacOmxComponentFactory(OMX_OUT OMX_HANDLETYPE* pHandle, OMX_IN  OMX_PTR pAppData, OMX_PTR pProxy, OMX_STRING aOmxLibName, OMX_PTR &aOmxLib, OMX_PTR aOsclUuid, OMX_U32 &aRefCount);
 extern OMX_ERRORTYPE AacOmxComponentDestructor(OMX_IN OMX_HANDLETYPE pHandle, OMX_PTR &aOmxLib, OMX_PTR aOsclUuid, OMX_U32 &aRefCount);
 #endif
-
+#endif
+#if (REGISTER_OMX_AAC_COMPONENT) || (USE_DYNAMIC_LOAD_OMX_COMPONENTS)
 /////////////////////////////////////////////////////////////////////////////
 OMX_ERRORTYPE AacRegister()
 {
@@ -290,27 +350,41 @@
     if (pCRT)
     {
         pCRT->ComponentName = (OMX_STRING)"OMX.PV.aacdec";
-        pCRT->RoleString = (OMX_STRING)"audio_decoder.aac";
-#if DYNAMIC_LOAD_OMX_AAC_COMPONENT
+        pCRT->RoleString[0] = (OMX_STRING)"audio_decoder.aac";
+        pCRT->NumberOfRolesSupported = 1;
+        pCRT->SharedLibraryOsclUuid = NULL;
+#if USE_DYNAMIC_LOAD_OMX_COMPONENTS
         pCRT->FunctionPtrCreateComponent = &OmxComponentFactoryDynamicCreate;
         pCRT->FunctionPtrDestroyComponent = &OmxComponentFactoryDynamicDestructor;
         pCRT->SharedLibraryName = (OMX_STRING)"libomx_aacdec_sharedlibrary.so";
         pCRT->SharedLibraryPtr = NULL;
 
         OsclUuid *temp = (OsclUuid *) oscl_malloc(sizeof(OsclUuid));
+        if (temp == NULL)
+        {
+            oscl_free(pCRT); // free allocated memory
+            return OMX_ErrorInsufficientResources;
+        }
         OSCL_PLACEMENT_NEW(temp, PV_OMX_AACDEC_UUID);
 
         pCRT->SharedLibraryOsclUuid = (OMX_PTR) temp;
         pCRT->SharedLibraryRefCounter = 0;
-#else
+#endif
+#if REGISTER_OMX_AAC_COMPONENT
+#if (DYNAMIC_LOAD_OMX_AAC_COMPONENT == 0)
+
         pCRT->FunctionPtrCreateComponent = &AacOmxComponentFactory;
         pCRT->FunctionPtrDestroyComponent = &AacOmxComponentDestructor;
         pCRT->SharedLibraryName = NULL;
         pCRT->SharedLibraryPtr = NULL;
 
+        if (pCRT->SharedLibraryOsclUuid)
+            oscl_free(pCRT->SharedLibraryOsclUuid);
+
         pCRT->SharedLibraryOsclUuid = NULL;
         pCRT->SharedLibraryRefCounter = 0;
 #endif
+#endif
     }
     else
     {
@@ -328,6 +402,8 @@
 extern OMX_ERRORTYPE AmrOmxComponentFactory(OMX_OUT OMX_HANDLETYPE* pHandle, OMX_IN  OMX_PTR pAppData, OMX_IN OMX_PTR pProxy, OMX_STRING aOmxLibName, OMX_PTR &aOmxLib, OMX_PTR aOsclUuid, OMX_U32 &aRefCount);
 extern OMX_ERRORTYPE AmrOmxComponentDestructor(OMX_IN OMX_HANDLETYPE pHandle, OMX_PTR &aOmxLib, OMX_PTR aOsclUuid, OMX_U32 &aRefCount);
 #endif
+#endif
+#if (REGISTER_OMX_AMR_COMPONENT) || (USE_DYNAMIC_LOAD_OMX_COMPONENTS)
 /////////////////////////////////////////////////////////////////////////////
 OMX_ERRORTYPE AmrRegister()
 {
@@ -336,29 +412,44 @@
     if (pCRT)
     {
         pCRT->ComponentName = (OMX_STRING)"OMX.PV.amrdec";
-        pCRT->RoleString = (OMX_STRING)"audio_decoder.amr";
-#if DYNAMIC_LOAD_OMX_AMR_COMPONENT
+        pCRT->RoleString[0] = (OMX_STRING)"audio_decoder.amr";
+        pCRT->RoleString[1] = (OMX_STRING)"audio_decoder.amrnb";
+        pCRT->RoleString[2] = (OMX_STRING)"audio_decoder.amrwb";
+        pCRT->NumberOfRolesSupported = 3;
+        pCRT->SharedLibraryOsclUuid = NULL;
+#if USE_DYNAMIC_LOAD_OMX_COMPONENTS
         pCRT->FunctionPtrCreateComponent = &OmxComponentFactoryDynamicCreate;
         pCRT->FunctionPtrDestroyComponent = &OmxComponentFactoryDynamicDestructor;
         pCRT->SharedLibraryName = (OMX_STRING)"libomx_amrdec_sharedlibrary.so";
         pCRT->SharedLibraryPtr = NULL;
 
         OsclUuid *temp = (OsclUuid *) oscl_malloc(sizeof(OsclUuid));
+        if (temp == NULL)
+        {
+            oscl_free(pCRT); // free allocated memory
+            return OMX_ErrorInsufficientResources;
+        }
         OSCL_PLACEMENT_NEW(temp, PV_OMX_AMRDEC_UUID);
 
         pCRT->SharedLibraryOsclUuid = (OMX_PTR) temp;
         pCRT->SharedLibraryRefCounter = 0;
 
-#else
+#endif
+#if REGISTER_OMX_AMR_COMPONENT
+#if (DYNAMIC_LOAD_OMX_AMR_COMPONENT == 0)
+
         pCRT->FunctionPtrCreateComponent = &AmrOmxComponentFactory;
         pCRT->FunctionPtrDestroyComponent = &AmrOmxComponentDestructor;
         pCRT->SharedLibraryName = NULL;
         pCRT->SharedLibraryPtr = NULL;
 
+        if (pCRT->SharedLibraryOsclUuid)
+            oscl_free(pCRT->SharedLibraryOsclUuid);
+
         pCRT->SharedLibraryOsclUuid = NULL;
         pCRT->SharedLibraryRefCounter = 0;
 #endif
-
+#endif
     }
     else
     {
@@ -376,6 +467,8 @@
 extern OMX_ERRORTYPE Mp3OmxComponentFactory(OMX_OUT OMX_HANDLETYPE* pHandle, OMX_IN  OMX_PTR pAppData, OMX_PTR pProxy, OMX_STRING aOmxLibName, OMX_PTR &aOmxLib, OMX_PTR aOsclUuid, OMX_U32 &aRefCount);
 extern OMX_ERRORTYPE Mp3OmxComponentDestructor(OMX_IN OMX_HANDLETYPE pHandle, OMX_PTR &aOmxLib, OMX_PTR aOsclUuid, OMX_U32 &aRefCount);
 #endif
+#endif
+#if (REGISTER_OMX_MP3_COMPONENT) || (USE_DYNAMIC_LOAD_OMX_COMPONENTS)
 /////////////////////////////////////////////////////////////////////////////
 OMX_ERRORTYPE Mp3Register()
 {
@@ -384,28 +477,41 @@
     if (pCRT)
     {
         pCRT->ComponentName = (OMX_STRING)"OMX.PV.mp3dec";
-        pCRT->RoleString = (OMX_STRING)"audio_decoder.mp3";
-#if DYNAMIC_LOAD_OMX_MP3_COMPONENT
+        pCRT->RoleString[0] = (OMX_STRING)"audio_decoder.mp3";
+        pCRT->NumberOfRolesSupported = 1;
+        pCRT->SharedLibraryOsclUuid = NULL;
+#if USE_DYNAMIC_LOAD_OMX_COMPONENTS
         pCRT->FunctionPtrCreateComponent = &OmxComponentFactoryDynamicCreate;
         pCRT->FunctionPtrDestroyComponent = &OmxComponentFactoryDynamicDestructor;
         pCRT->SharedLibraryName = (OMX_STRING)"libomx_mp3dec_sharedlibrary.so";
         pCRT->SharedLibraryPtr = NULL;
 
         OsclUuid *temp = (OsclUuid *) oscl_malloc(sizeof(OsclUuid));
+        if (temp == NULL)
+        {
+            oscl_free(pCRT); // free allocated memory
+            return OMX_ErrorInsufficientResources;
+        }
         OSCL_PLACEMENT_NEW(temp, PV_OMX_MP3DEC_UUID);
 
         pCRT->SharedLibraryOsclUuid = (OMX_PTR) temp;
         pCRT->SharedLibraryRefCounter = 0;
-#else
+#endif
+#if REGISTER_OMX_MP3_COMPONENT
+#if (DYNAMIC_LOAD_OMX_MP3_COMPONENT == 0)
+
         pCRT->FunctionPtrCreateComponent = &Mp3OmxComponentFactory;
         pCRT->FunctionPtrDestroyComponent = &Mp3OmxComponentDestructor;
         pCRT->SharedLibraryName = NULL;
         pCRT->SharedLibraryPtr = NULL;
 
+        if (pCRT->SharedLibraryOsclUuid)
+            oscl_free(pCRT->SharedLibraryOsclUuid);
+
         pCRT->SharedLibraryOsclUuid = NULL;
         pCRT->SharedLibraryRefCounter = 0;
 #endif
-
+#endif
     }
     else
     {
@@ -423,6 +529,8 @@
 extern OMX_ERRORTYPE WmaOmxComponentFactory(OMX_OUT OMX_HANDLETYPE* pHandle, OMX_IN  OMX_PTR pAppData, OMX_IN OMX_PTR pProxy, OMX_STRING aOmxLibName, OMX_PTR &aOmxLib, OMX_PTR aOsclUuid, OMX_U32 &aRefCount);
 extern OMX_ERRORTYPE WmaOmxComponentDestructor(OMX_IN OMX_HANDLETYPE pHandle, OMX_PTR &aOmxLib, OMX_PTR aOsclUuid, OMX_U32 &aRefCount);
 #endif
+#endif
+#if (REGISTER_OMX_WMA_COMPONENT) || (USE_DYNAMIC_LOAD_OMX_COMPONENTS)
 /////////////////////////////////////////////////////////////////////////////
 OMX_ERRORTYPE WmaRegister()
 {
@@ -431,27 +539,41 @@
     if (pCRT)
     {
         pCRT->ComponentName = (OMX_STRING)"OMX.PV.wmadec";
-        pCRT->RoleString = (OMX_STRING)"audio_decoder.wma";
-#if DYNAMIC_LOAD_OMX_WMA_COMPONENT
+        pCRT->RoleString[0] = (OMX_STRING)"audio_decoder.wma";
+        pCRT->NumberOfRolesSupported = 1;
+        pCRT->SharedLibraryOsclUuid = NULL;
+#if USE_DYNAMIC_LOAD_OMX_COMPONENTS
         pCRT->FunctionPtrCreateComponent = &OmxComponentFactoryDynamicCreate;
         pCRT->FunctionPtrDestroyComponent = &OmxComponentFactoryDynamicDestructor;
         pCRT->SharedLibraryName = (OMX_STRING)"libomx_wmadec_sharedlibrary.so";
         pCRT->SharedLibraryPtr = NULL;
 
         OsclUuid *temp = (OsclUuid *) oscl_malloc(sizeof(OsclUuid));
+        if (temp == NULL)
+        {
+            oscl_free(pCRT); // free allocated memory
+            return OMX_ErrorInsufficientResources;
+        }
         OSCL_PLACEMENT_NEW(temp, PV_OMX_WMADEC_UUID);
 
         pCRT->SharedLibraryOsclUuid = (OMX_PTR) temp;
         pCRT->SharedLibraryRefCounter = 0;
-#else
+#endif
+#if REGISTER_OMX_WMA_COMPONENT
+#if (DYNAMIC_LOAD_OMX_WMA_COMPONENT == 0)
+
         pCRT->FunctionPtrCreateComponent = &WmaOmxComponentFactory;
         pCRT->FunctionPtrDestroyComponent = &WmaOmxComponentDestructor;
         pCRT->SharedLibraryName = NULL;
         pCRT->SharedLibraryPtr = NULL;
 
+        if (pCRT->SharedLibraryOsclUuid)
+            oscl_free(pCRT->SharedLibraryOsclUuid);
+
         pCRT->SharedLibraryOsclUuid = NULL;
         pCRT->SharedLibraryRefCounter = 0;
 #endif
+#endif
     }
     else
     {
@@ -469,6 +591,8 @@
 extern OMX_ERRORTYPE AmrEncOmxComponentFactory(OMX_OUT OMX_HANDLETYPE* pHandle, OMX_IN  OMX_PTR pAppData, OMX_IN OMX_PTR pProxy, OMX_STRING aOmxLibName, OMX_PTR &aOmxLib, OMX_PTR aOsclUuid, OMX_U32 &aRefCount);
 extern OMX_ERRORTYPE AmrEncOmxComponentDestructor(OMX_IN OMX_HANDLETYPE pHandle, OMX_PTR &aOmxLib, OMX_PTR aOsclUuid, OMX_U32 &aRefCount);
 #endif
+#endif
+#if (REGISTER_OMX_AMRENC_COMPONENT) || (USE_DYNAMIC_LOAD_OMX_COMPONENTS)
 /////////////////////////////////////////////////////////////////////////////
 OMX_ERRORTYPE AmrEncRegister()
 {
@@ -477,28 +601,41 @@
     if (pCRT)
     {
         pCRT->ComponentName = (OMX_STRING)"OMX.PV.amrenc";
-        pCRT->RoleString = (OMX_STRING)"audio_encoder.amr";
-#if DYNAMIC_LOAD_OMX_AMRENC_COMPONENT
+        pCRT->RoleString[0] = (OMX_STRING)"audio_encoder.amr";
+        pCRT->NumberOfRolesSupported = 1;
+        pCRT->SharedLibraryOsclUuid = NULL;
+#if USE_DYNAMIC_LOAD_OMX_COMPONENTS
         pCRT->FunctionPtrCreateComponent = &OmxComponentFactoryDynamicCreate;
         pCRT->FunctionPtrDestroyComponent = &OmxComponentFactoryDynamicDestructor;
         pCRT->SharedLibraryName = (OMX_STRING)"libomx_amrenc_sharedlibrary.so";
         pCRT->SharedLibraryPtr = NULL;
 
         OsclUuid *temp = (OsclUuid *) oscl_malloc(sizeof(OsclUuid));
+        if (temp == NULL)
+        {
+            oscl_free(pCRT); // free allocated memory
+            return OMX_ErrorInsufficientResources;
+        }
         OSCL_PLACEMENT_NEW(temp, PV_OMX_AMRENC_UUID);
 
         pCRT->SharedLibraryOsclUuid = (OMX_PTR) temp;
         pCRT->SharedLibraryRefCounter = 0;
-#else
+#endif
+#if REGISTER_OMX_AMRENC_COMPONENT
+#if (DYNAMIC_LOAD_OMX_AMRENC_COMPONENT == 0)
+
         pCRT->FunctionPtrCreateComponent = &AmrEncOmxComponentFactory;
         pCRT->FunctionPtrDestroyComponent = &AmrEncOmxComponentDestructor;
         pCRT->SharedLibraryName = NULL;
         pCRT->SharedLibraryPtr = NULL;
 
+        if (pCRT->SharedLibraryOsclUuid)
+            oscl_free(pCRT->SharedLibraryOsclUuid);
+
         pCRT->SharedLibraryOsclUuid = NULL;
         pCRT->SharedLibraryRefCounter = 0;
 #endif
-
+#endif
     }
     else
     {
@@ -517,6 +654,8 @@
 extern OMX_ERRORTYPE Mpeg4EncOmxComponentFactory(OMX_OUT OMX_HANDLETYPE* pHandle, OMX_IN  OMX_PTR pAppData, OMX_IN OMX_PTR pProxy, OMX_STRING aOmxLibName, OMX_PTR &aOmxLib, OMX_PTR aOsclUuid, OMX_U32 &aRefCount);
 extern OMX_ERRORTYPE Mpeg4EncOmxComponentDestructor(OMX_IN OMX_HANDLETYPE pHandle, OMX_PTR &aOmxLib, OMX_PTR aOsclUuid, OMX_U32 &aRefCount);
 #endif
+#endif
+#if (REGISTER_OMX_M4VENC_COMPONENT) || (USE_DYNAMIC_LOAD_OMX_COMPONENTS)
 /////////////////////////////////////////////////////////////////////////////
 OMX_ERRORTYPE Mpeg4EncRegister()
 {
@@ -525,28 +664,42 @@
     if (pCRT)
     {
         pCRT->ComponentName = (OMX_STRING)"OMX.PV.mpeg4enc";
-        pCRT->RoleString = (OMX_STRING)"video_encoder.mpeg4";
-#if DYNAMIC_LOAD_OMX_M4VENC_COMPONENT
+        pCRT->RoleString[0] = (OMX_STRING)"video_encoder.mpeg4";
+        pCRT->NumberOfRolesSupported = 1;
+        pCRT->SharedLibraryOsclUuid = NULL;
+#if USE_DYNAMIC_LOAD_OMX_COMPONENTS
         pCRT->FunctionPtrCreateComponent = &OmxComponentFactoryDynamicCreate;
         pCRT->FunctionPtrDestroyComponent = &OmxComponentFactoryDynamicDestructor;
         pCRT->SharedLibraryName = (OMX_STRING)"libomx_m4venc_sharedlibrary.so";
         pCRT->SharedLibraryPtr = NULL;
 
         OsclUuid *temp = (OsclUuid *) oscl_malloc(sizeof(OsclUuid));
+        if (temp == NULL)
+        {
+            oscl_free(pCRT); // free allocated memory
+            return OMX_ErrorInsufficientResources;
+        }
         OSCL_PLACEMENT_NEW(temp, PV_OMX_M4VENC_UUID);
 
         pCRT->SharedLibraryOsclUuid = (OMX_PTR) temp;
         pCRT->SharedLibraryRefCounter = 0;
 
-#else
+#endif
+#if REGISTER_OMX_M4VENC_COMPONENT
+#if (DYNAMIC_LOAD_OMX_M4VENC_COMPONENT == 0)
+
         pCRT->FunctionPtrCreateComponent = &Mpeg4EncOmxComponentFactory;
         pCRT->FunctionPtrDestroyComponent = &Mpeg4EncOmxComponentDestructor;
         pCRT->SharedLibraryName = NULL;
         pCRT->SharedLibraryPtr = NULL;
 
+        if (pCRT->SharedLibraryOsclUuid)
+            oscl_free(pCRT->SharedLibraryOsclUuid);
+
         pCRT->SharedLibraryOsclUuid = NULL;
         pCRT->SharedLibraryRefCounter = 0;
 #endif
+#endif
     }
     else
     {
@@ -556,12 +709,15 @@
     return  ComponentRegister(pCRT);
 }
 #endif
+
 #if REGISTER_OMX_H263ENC_COMPONENT
 // external factory functions needed for creation of each component (or stubs for testing)
 #if (DYNAMIC_LOAD_OMX_H263ENC_COMPONENT == 0)
 extern OMX_ERRORTYPE H263EncOmxComponentFactory(OMX_OUT OMX_HANDLETYPE* pHandle, OMX_IN  OMX_PTR pAppData, OMX_IN OMX_PTR pProxy, OMX_STRING aOmxLibName, OMX_PTR &aOmxLib, OMX_PTR aOsclUuid, OMX_U32 &aRefCount);
 extern OMX_ERRORTYPE H263EncOmxComponentDestructor(OMX_IN OMX_HANDLETYPE pHandle, OMX_PTR &aOmxLib, OMX_PTR aOsclUuid, OMX_U32 &aRefCount);
 #endif
+#endif
+#if (REGISTER_OMX_H263ENC_COMPONENT) || (USE_DYNAMIC_LOAD_OMX_COMPONENTS)
 /////////////////////////////////////////////////////////////////////////////
 OMX_ERRORTYPE H263EncRegister()
 {
@@ -570,28 +726,42 @@
     if (pCRT)
     {
         pCRT->ComponentName = (OMX_STRING)"OMX.PV.h263enc";
-        pCRT->RoleString = (OMX_STRING)"video_encoder.h263";
-#if DYNAMIC_LOAD_OMX_H263ENC_COMPONENT
+        pCRT->RoleString[0] = (OMX_STRING)"video_encoder.h263";
+        pCRT->NumberOfRolesSupported = 1;
+        pCRT->SharedLibraryOsclUuid = NULL;
+#if USE_DYNAMIC_LOAD_OMX_COMPONENTS
         pCRT->FunctionPtrCreateComponent = &OmxComponentFactoryDynamicCreate;
         pCRT->FunctionPtrDestroyComponent = &OmxComponentFactoryDynamicDestructor;
         pCRT->SharedLibraryName = (OMX_STRING)"libomx_m4venc_sharedlibrary.so";
         pCRT->SharedLibraryPtr = NULL;
 
         OsclUuid *temp = (OsclUuid *) oscl_malloc(sizeof(OsclUuid));
+        if (temp == NULL)
+        {
+            oscl_free(pCRT); // free allocated memory
+            return OMX_ErrorInsufficientResources;
+        }
         OSCL_PLACEMENT_NEW(temp, PV_OMX_H263ENC_UUID);
 
         pCRT->SharedLibraryOsclUuid = (OMX_PTR) temp;
         pCRT->SharedLibraryRefCounter = 0;
 
-#else
+#endif
+#if REGISTER_OMX_H263ENC_COMPONENT
+#if (DYNAMIC_LOAD_OMX_H263ENC_COMPONENT == 0)
+
         pCRT->FunctionPtrCreateComponent = &H263EncOmxComponentFactory;
         pCRT->FunctionPtrDestroyComponent = &H263EncOmxComponentDestructor;
         pCRT->SharedLibraryName = NULL;
         pCRT->SharedLibraryPtr = NULL;
 
+        if (pCRT->SharedLibraryOsclUuid)
+            oscl_free(pCRT->SharedLibraryOsclUuid);
+
         pCRT->SharedLibraryOsclUuid = NULL;
         pCRT->SharedLibraryRefCounter = 0;
 #endif
+#endif
     }
     else
     {
@@ -610,6 +780,8 @@
 extern OMX_ERRORTYPE AvcEncOmxComponentFactory(OMX_OUT OMX_HANDLETYPE* pHandle, OMX_IN  OMX_PTR pAppData, OMX_IN OMX_PTR pProxy, OMX_STRING aOmxLibName, OMX_PTR &aOmxLib, OMX_PTR aOsclUuid, OMX_U32 &aRefCount);
 extern OMX_ERRORTYPE AvcEncOmxComponentDestructor(OMX_IN OMX_HANDLETYPE pHandle, OMX_PTR &aOmxLib, OMX_PTR aOsclUuid, OMX_U32 &aRefCount);
 #endif
+#endif
+#if (REGISTER_OMX_AVCENC_COMPONENT) || (USE_DYNAMIC_LOAD_OMX_COMPONENTS)
 /////////////////////////////////////////////////////////////////////////////
 OMX_ERRORTYPE AvcEncRegister()
 {
@@ -618,30 +790,43 @@
     if (pCRT)
     {
         pCRT->ComponentName = (OMX_STRING)"OMX.PV.avcenc";
-        pCRT->RoleString = (OMX_STRING)"video_encoder.avc";
-#if DYNAMIC_LOAD_OMX_AVCENC_COMPONENT
+        pCRT->RoleString[0] = (OMX_STRING)"video_encoder.avc";
+        pCRT->NumberOfRolesSupported = 1;
+        pCRT->SharedLibraryOsclUuid = NULL;
+#if USE_DYNAMIC_LOAD_OMX_COMPONENTS
         pCRT->FunctionPtrCreateComponent = &OmxComponentFactoryDynamicCreate;
         pCRT->FunctionPtrDestroyComponent = &OmxComponentFactoryDynamicDestructor;
         pCRT->SharedLibraryName = (OMX_STRING)"libomx_avcenc_sharedlibrary.so";
         pCRT->SharedLibraryPtr = NULL;
 
         OsclUuid *temp = (OsclUuid *) oscl_malloc(sizeof(OsclUuid));
+        if (temp == NULL)
+        {
+            oscl_free(pCRT); // free allocated memory
+            return OMX_ErrorInsufficientResources;
+        }
         OSCL_PLACEMENT_NEW(temp, PV_OMX_AVCENC_UUID);
 
         pCRT->SharedLibraryOsclUuid = (OMX_PTR) temp;
         pCRT->SharedLibraryRefCounter = 0;
 
-#else
+#endif
+#if REGISTER_OMX_AVCENC_COMPONENT
+#if (DYNAMIC_LOAD_OMX_AVCENC_COMPONENT == 0)
+
         pCRT->FunctionPtrCreateComponent = &AvcEncOmxComponentFactory;
         pCRT->FunctionPtrDestroyComponent = &AvcEncOmxComponentDestructor;
 
         pCRT->SharedLibraryName = NULL;
         pCRT->SharedLibraryPtr = NULL;
 
+        if (pCRT->SharedLibraryOsclUuid)
+            oscl_free(pCRT->SharedLibraryOsclUuid);
+
         pCRT->SharedLibraryOsclUuid = NULL;
         pCRT->SharedLibraryRefCounter = 0;
 #endif
-
+#endif
     }
     else
     {
@@ -659,6 +844,8 @@
 extern OMX_ERRORTYPE AacEncOmxComponentFactory(OMX_OUT OMX_HANDLETYPE* pHandle, OMX_IN  OMX_PTR pAppData, OMX_IN OMX_PTR pProxy, OMX_STRING aOmxLibName, OMX_PTR &aOmxLib, OMX_PTR aOsclUuid, OMX_U32 &aRefCount);
 extern OMX_ERRORTYPE AacEncOmxComponentDestructor(OMX_IN OMX_HANDLETYPE pHandle, OMX_PTR &aOmxLib, OMX_PTR aOsclUuid, OMX_U32 &aRefCount);
 #endif
+#endif
+#if (REGISTER_OMX_AACENC_COMPONENT) || (USE_DYNAMIC_LOAD_OMX_COMPONENTS)
 /////////////////////////////////////////////////////////////////////////////
 OMX_ERRORTYPE AacEncRegister()
 {
@@ -667,30 +854,43 @@
     if (pCRT)
     {
         pCRT->ComponentName = (OMX_STRING)"OMX.PV.aacenc";
-        pCRT->RoleString = (OMX_STRING)"audio_encoder.aac";
-#if DYNAMIC_LOAD_OMX_AACENC_COMPONENT
+        pCRT->RoleString[0] = (OMX_STRING)"audio_encoder.aac";
+        pCRT->NumberOfRolesSupported = 1;
+        pCRT->SharedLibraryOsclUuid = NULL;
+#if USE_DYNAMIC_LOAD_OMX_COMPONENTS
         pCRT->FunctionPtrCreateComponent = &OmxComponentFactoryDynamicCreate;
         pCRT->FunctionPtrDestroyComponent = &OmxComponentFactoryDynamicDestructor;
         pCRT->SharedLibraryName = (OMX_STRING)"libomx_aacenc_sharedlibrary.so";
         pCRT->SharedLibraryPtr = NULL;
 
         OsclUuid *temp = (OsclUuid *) oscl_malloc(sizeof(OsclUuid));
+        if (temp == NULL)
+        {
+            oscl_free(pCRT); // free allocated memory
+            return OMX_ErrorInsufficientResources;
+        }
         OSCL_PLACEMENT_NEW(temp, PV_OMX_AACENC_UUID);
 
         pCRT->SharedLibraryOsclUuid = (OMX_PTR) temp;
         pCRT->SharedLibraryRefCounter = 0;
 
-#else
+#endif
+#if REGISTER_OMX_AACENC_COMPONENT
+#if (DYNAMIC_LOAD_OMX_AACENC_COMPONENT == 0)
+
         pCRT->FunctionPtrCreateComponent = &AacEncOmxComponentFactory;
         pCRT->FunctionPtrDestroyComponent = &AacEncOmxComponentDestructor;
 
         pCRT->SharedLibraryName = NULL;
         pCRT->SharedLibraryPtr = NULL;
 
+        if (pCRT->SharedLibraryOsclUuid)
+            oscl_free(pCRT->SharedLibraryOsclUuid);
+
         pCRT->SharedLibraryOsclUuid = NULL;
         pCRT->SharedLibraryRefCounter = 0;
 #endif
-
+#endif
     }
     else
     {
diff --git a/codecs_v2/omx/omx_core_plugins/template/src/pv_omx_interface.cpp b/codecs_v2/omx/omx_core_plugins/template/src/pv_omx_interface.cpp
index 411fbe3..f764ce5 100644
--- a/codecs_v2/omx/omx_core_plugins/template/src/pv_omx_interface.cpp
+++ b/codecs_v2/omx/omx_core_plugins/template/src/pv_omx_interface.cpp
@@ -93,7 +93,8 @@
                 pOMX_GetRolesOfComponent = NULL;
                 pOMX_SetupTunnel = NULL;
                 pOMX_GetContentPipe = NULL;
-
+                // added extra method to enable config parsing without instantiating the component
+                pOMXConfigParser = NULL;
                 // check for errors
                 const char* pErr = dlerror();
                 if (NULL == pErr)
@@ -121,6 +122,7 @@
                 pOMX_GetRolesOfComponent = (tpOMX_GetRolesOfComponent)dlsym(ipHandle, "OMX_GetRolesOfComponent");
                 pOMX_SetupTunnel = (tpOMX_SetupTunnel)dlsym(ipHandle, "OMX_SetupTunnel");
                 pOMX_GetContentPipe = (tpOMX_GetContentPipe)dlsym(ipHandle, "OMX_GetContentPipe");
+                pOMXConfigParser = (tpOMXConfigParser)dlsym(ipHandle, "OMXConfigParser");
             }
         };
 
diff --git a/codecs_v2/omx/omx_h264/include/omx_avc_component.h b/codecs_v2/omx/omx_h264/include/omx_avc_component.h
index 78fa75a..6461683 100644
--- a/codecs_v2/omx/omx_h264/include/omx_avc_component.h
+++ b/codecs_v2/omx/omx_h264/include/omx_avc_component.h
@@ -32,8 +32,16 @@
 #include "avc_dec.h"
 #endif
 
-
+#if (defined(TEST_FULL_AVC_FRAME_MODE) || defined(TEST_FULL_AVC_FRAME_MODE_SC))
+#define INPUT_BUFFER_SIZE_AVC (2000 * MAX_NAL_PER_FRAME)
+#else
 #define INPUT_BUFFER_SIZE_AVC 2000
+#undef MAX_NAL_PER_FRAME
+#define MAX_NAL_PER_FRAME 1 /* this component doesn't need to suppoart more than 1 NAL per frame in this mode, so overwrite default */
+#endif
+
+#define NAL_START_CODE_SIZE 4
+
 #define OUTPUT_BUFFER_SIZE_AVC 65536
 
 #define NUMBER_INPUT_BUFFER_AVC  10
@@ -56,6 +64,7 @@
         static void ComponentGetRolesOfComponent(OMX_STRING* aRoleString);
 
         void ComponentBufferMgmtWithoutMarker();
+        OMX_BOOL ParseFullAVCFramesIntoNALs(OMX_BUFFERHEADERTYPE* aInputBuffer);
         void ProcessData();
         void DecodeWithoutMarker();
         void DecodeWithMarker();
@@ -70,6 +79,12 @@
 
         AvcDecoder_OMX* ipAvcDec;
         OMX_BOOL				iDecodeReturn;
+
+        // variables for "frame" mode i.e. iOMXComponentNeedsFullAVCFrames is turned on
+        OMX_U32 iNALSizeArray[MAX_NAL_PER_FRAME]; // 100 should be more than enough NALs per frame
+        OMX_U32 iCurrNAL;
+        OMX_U32 iNumNALs;
+        OMX_U32 iNALOffset;
 };
 
 
diff --git a/codecs_v2/omx/omx_h264/src/omx_avc_component.cpp b/codecs_v2/omx/omx_h264/src/omx_avc_component.cpp
index d81b5dd..c9c80da 100644
--- a/codecs_v2/omx/omx_h264/src/omx_avc_component.cpp
+++ b/codecs_v2/omx/omx_h264/src/omx_avc_component.cpp
@@ -143,6 +143,11 @@
     ipComponentProxy = pProxy;
     iOmxComponent.pApplicationPrivate = pAppData; // init the App data
 
+    iNumNALs = 0;
+    iCurrNAL = 0;
+    iNALOffset = 0;
+    oscl_memset(iNALSizeArray, 0, MAX_NAL_PER_FRAME * sizeof(uint32));
+
 
 #if PROXY_INTERFACE
     iPVCapabilityFlags.iIsOMXComponentMultiThreaded = OMX_TRUE;
@@ -184,12 +189,31 @@
     iOmxComponent.nVersion.s.nStep = SPECSTEP;
 
     // PV capability
+#ifdef TEST_FULL_AVC_FRAME_MODE
+    iPVCapabilityFlags.iOMXComponentSupportsExternalInputBufferAlloc = OMX_TRUE;
+    iPVCapabilityFlags.iOMXComponentSupportsExternalOutputBufferAlloc = OMX_TRUE;
+    iPVCapabilityFlags.iOMXComponentSupportsMovableInputBuffers = OMX_FALSE; // since we need copying for frame assembly in streaming case
+    iPVCapabilityFlags.iOMXComponentSupportsPartialFrames = OMX_FALSE;
+    iPVCapabilityFlags.iOMXComponentUsesNALStartCodes = OMX_FALSE;
+    iPVCapabilityFlags.iOMXComponentCanHandleIncompleteFrames = OMX_TRUE;
+    iPVCapabilityFlags.iOMXComponentUsesFullAVCFrames = OMX_TRUE;
+#elif TEST_FULL_AVC_FRAME_MODE_SC
+    iPVCapabilityFlags.iOMXComponentSupportsExternalInputBufferAlloc = OMX_TRUE;
+    iPVCapabilityFlags.iOMXComponentSupportsExternalOutputBufferAlloc = OMX_TRUE;
+    iPVCapabilityFlags.iOMXComponentSupportsMovableInputBuffers = OMX_FALSE; // since we need copying for frame assembly in streaming case
+    iPVCapabilityFlags.iOMXComponentSupportsPartialFrames = OMX_FALSE;
+    iPVCapabilityFlags.iOMXComponentUsesNALStartCodes = OMX_TRUE;
+    iPVCapabilityFlags.iOMXComponentCanHandleIncompleteFrames = OMX_TRUE;
+    iPVCapabilityFlags.iOMXComponentUsesFullAVCFrames = OMX_TRUE;
+#else
     iPVCapabilityFlags.iOMXComponentSupportsExternalInputBufferAlloc = OMX_TRUE;
     iPVCapabilityFlags.iOMXComponentSupportsExternalOutputBufferAlloc = OMX_TRUE;
     iPVCapabilityFlags.iOMXComponentSupportsMovableInputBuffers = OMX_TRUE;
     iPVCapabilityFlags.iOMXComponentSupportsPartialFrames = OMX_TRUE;
-    iPVCapabilityFlags.iOMXComponentNeedsNALStartCode = OMX_FALSE;
+    iPVCapabilityFlags.iOMXComponentUsesNALStartCodes = OMX_FALSE;
     iPVCapabilityFlags.iOMXComponentCanHandleIncompleteFrames = OMX_TRUE;
+    iPVCapabilityFlags.iOMXComponentUsesFullAVCFrames = OMX_FALSE;
+#endif
 
     if (ipAppPriv)
     {
@@ -212,6 +236,7 @@
     }
 
     /** Domain specific section for the ports. */
+    ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.nPortIndex = OMX_PORT_INPUTPORT_INDEX;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.eDomain = OMX_PortDomainVideo;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.format.video.cMIMEType = (OMX_STRING)"video/Avc";
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.format.video.pNativeRender = 0;
@@ -230,7 +255,7 @@
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.bEnabled = OMX_TRUE;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.bPopulated = OMX_FALSE;
 
-
+    ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.nPortIndex = OMX_PORT_OUTPUTPORT_INDEX;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.eDomain = OMX_PortDomainVideo;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.format.video.cMIMEType = (OMX_STRING)"raw";
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.format.video.pNativeRender = 0;
@@ -251,9 +276,11 @@
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.bPopulated = OMX_FALSE;
 
     //Default values for Avc video param port
+    ipPorts[OMX_PORT_INPUTPORT_INDEX]->VideoAvc.nPortIndex = OMX_PORT_INPUTPORT_INDEX;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->VideoAvc.eProfile = OMX_VIDEO_AVCProfileBaseline;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->VideoAvc.eLevel = OMX_VIDEO_AVCLevel1;
 
+    ipPorts[OMX_PORT_INPUTPORT_INDEX]->ProfileLevel.nPortIndex = OMX_PORT_INPUTPORT_INDEX;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->ProfileLevel.nProfileIndex = 0;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->ProfileLevel.eProfile = OMX_VIDEO_AVCProfileBaseline;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->ProfileLevel.eLevel = OMX_VIDEO_AVCLevel1;
@@ -364,6 +391,122 @@
     TempInputBufferMgmtWithoutMarker();
 }
 
+OMX_BOOL OpenmaxAvcAO::ParseFullAVCFramesIntoNALs(OMX_BUFFERHEADERTYPE* aInputBuffer)
+{
+    PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_NOTICE, (0, "OpenmaxAvcAO : ParseFullAVCFramesIntoNALs IN"));
+
+    ipInputBuffer = aInputBuffer;
+
+    if (iNumInputBuffer == 0)
+    {
+        PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_NOTICE, (0, "OmxComponentBase : ParseFullAVCFramesIntoNALs ERROR"));
+        return OMX_FALSE;
+    }
+
+    if (iPVCapabilityFlags.iOMXComponentUsesNALStartCodes && !(ipInputBuffer->nFlags & OMX_BUFFERFLAG_EXTRADATA))
+    {
+        OMX_U32 offset = ipInputBuffer->nOffset;
+        OMX_U32 length = ipInputBuffer->nFilledLen;
+        OMX_U8* pBuffer = ipInputBuffer->pBuffer + offset;
+        OMX_U8* pTemp;
+        int32 nalSize;
+
+        iNumNALs = 0;
+
+        while (length > 0)
+        {
+            if (AVCDEC_SUCCESS != ipAvcDec->GetNextFullNAL_OMX(&pTemp, &nalSize, pBuffer, &length))
+            {
+                break;
+            }
+
+            pBuffer += nalSize + (int32)(pTemp - pBuffer);
+
+            iNALSizeArray[iNumNALs] = nalSize;
+
+            iNumNALs++;
+        }
+
+        if (iNumNALs > 0)
+        {
+            iCurrNAL = 0;
+            iNALOffset = ipInputBuffer->nOffset + NAL_START_CODE_SIZE;
+            ipFrameDecodeBuffer = ipInputBuffer->pBuffer + iNALOffset;
+            iInputCurrLength = iNALSizeArray[iCurrNAL];
+            iNALOffset += (iInputCurrLength + NAL_START_CODE_SIZE); // offset for next NAL
+            //capture the timestamp to be send to the corresponding output buffer
+            iFrameTimestamp = ipInputBuffer->nTimeStamp;
+        }
+        else
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_NOTICE, (0, "OmxComponentBase : ParseFullAVCFramesIntoNALs ERROR"));
+            return OMX_FALSE;
+        }
+    }
+    // may be a full frame, or may incomplete, therefore don't check for OMX_BUFFERFLAG_ENDOFFRAME
+    else if (ipInputBuffer->nFlags & OMX_BUFFERFLAG_EXTRADATA)
+    {
+        // get extra data from end of buffer
+        OMX_OTHER_EXTRADATATYPE *pExtra;
+        OMX_U32 offset = ipInputBuffer->nOffset + ipInputBuffer->nFilledLen;
+        OMX_U32 allocLen = ipInputBuffer->nAllocLen;
+        OMX_U8* pTemp = ipInputBuffer->pBuffer + offset;
+
+        // align
+        pExtra = (OMX_OTHER_EXTRADATATYPE *)(((OMX_U32) pTemp + 3) & ~3);
+        offset += (OMX_U32) pExtra - (OMX_U32) pTemp;
+
+        while (pExtra->eType != OMX_ExtraDataNone)
+        {
+            if (pExtra->eType == OMX_ExtraDataNALSizeArray)
+            {
+                oscl_memcpy(iNALSizeArray, ((OMX_U8*)pExtra + 20), pExtra->nDataSize);
+                iNumNALs = pExtra->nDataSize >> 2;
+                iCurrNAL = 0;
+                iNALOffset = ipInputBuffer->nOffset;
+                break;
+            }
+
+            offset += pExtra->nSize;
+            if (offset > (allocLen - 20))
+            {
+                // corrupt data
+                break;
+            }
+            else
+            {
+                pExtra = (OMX_OTHER_EXTRADATATYPE *)((OMX_U8*)pExtra + pExtra->nSize);
+            }
+        }
+
+        if (pExtra->eType != OMX_ExtraDataNALSizeArray)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_NOTICE, (0, "OmxComponentBase : ParseFullAVCFramesIntoNALs ERROR"));
+            return OMX_FALSE;
+        }
+
+        ipFrameDecodeBuffer = ipInputBuffer->pBuffer + iNALOffset;
+        iInputCurrLength = iNALSizeArray[iCurrNAL];
+        iNALOffset += iInputCurrLength; // offset for next NAL
+        //capture the timestamp to be send to the corresponding output buffer
+        iFrameTimestamp = ipInputBuffer->nTimeStamp;
+    }
+    else if (ipInputBuffer->nFlags & OMX_BUFFERFLAG_CODECCONFIG)
+    {
+        iInputCurrLength = ipInputBuffer->nFilledLen;
+        ipFrameDecodeBuffer = ipInputBuffer->pBuffer + ipInputBuffer->nOffset;
+        //capture the timestamp to be send to the corresponding output buffer
+        iFrameTimestamp = ipInputBuffer->nTimeStamp;
+    }
+    else
+    {
+        PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_NOTICE, (0, "OmxComponentBase : ParseFullAVCFramesIntoNALs ERROR"));
+        return OMX_FALSE;
+    }
+
+    PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_NOTICE, (0, "OpenmaxAvcAO : ParseFullAVCFramesIntoNALs OUT"));
+    return OMX_TRUE;
+}
 
 
 void OpenmaxAvcAO::ProcessData()
@@ -716,11 +859,43 @@
 
             if (0 == iInputCurrLength)
             {
-                ipInputBuffer->nFilledLen = 0;
-                ReturnInputBuffer(ipInputBuffer, pInPort);
-                iNewInBufferRequired = OMX_TRUE;
-                iIsInputBufferEnded = OMX_TRUE;
-                ipInputBuffer = NULL;
+                if (iPVCapabilityFlags.iOMXComponentUsesFullAVCFrames)
+                {
+                    iCurrNAL++;
+
+                    if (iCurrNAL < iNumNALs)
+                    {
+                        ipFrameDecodeBuffer = ipInputBuffer->pBuffer + iNALOffset;
+                        iInputCurrLength = iNALSizeArray[iCurrNAL];
+
+                        if (iPVCapabilityFlags.iOMXComponentUsesNALStartCodes)
+                        {
+                            iNALOffset += (iInputCurrLength + NAL_START_CODE_SIZE); // offset for next NAL
+                        }
+                        else
+                        {
+                            iNALOffset += iInputCurrLength; // offset for next NAL
+                        }
+
+                        iNewInBufferRequired = OMX_FALSE;
+                    }
+                    else
+                    {
+                        ipInputBuffer->nFilledLen = 0;
+                        ReturnInputBuffer(ipInputBuffer, pInPort);
+                        iNewInBufferRequired = OMX_TRUE;
+                        iIsInputBufferEnded = OMX_TRUE;
+                        ipInputBuffer = NULL;
+                    }
+                }
+                else
+                {
+                    ipInputBuffer->nFilledLen = 0;
+                    ReturnInputBuffer(ipInputBuffer, pInPort);
+                    iNewInBufferRequired = OMX_TRUE;
+                    iIsInputBufferEnded = OMX_TRUE;
+                    ipInputBuffer = NULL;
+                }
             }
             else
             {
@@ -871,6 +1046,10 @@
     }
 
     iInputCurrLength = 0;
+    iNumNALs = 0;
+    iCurrNAL = 0;
+    iNALOffset = 0;
+    oscl_memset(iNALSizeArray, 0, MAX_NAL_PER_FRAME * sizeof(uint32));
     //Used in dynamic port reconfiguration
     iFrameCount = 0;
     PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_NOTICE, (0, "OpenmaxAvcAO : ComponentInit OUT"));
diff --git a/codecs_v2/omx/omx_h264enc/include/avc_enc.h b/codecs_v2/omx/omx_h264enc/include/avc_enc.h
index 666b2b6..3cffaae 100644
--- a/codecs_v2/omx/omx_h264enc/include/avc_enc.h
+++ b/codecs_v2/omx/omx_h264enc/include/avc_enc.h
@@ -71,9 +71,9 @@
                                      OMX_TICKS* aOutTimeStamp,
                                      OMX_BOOL*  aSyncFlag);
 
-        OMX_BOOL AvcEncodeSendInput(OMX_U8*    aInBuffer,
-                                    OMX_U32*   aInBufSize,
-                                    OMX_TICKS  aInTimeStamp);
+        AVCEnc_Status AvcEncodeSendInput(OMX_U8*    aInBuffer,
+                                         OMX_U32*   aInBufSize,
+                                         OMX_TICKS  aInTimeStamp);
 
 
         OMX_ERRORTYPE AvcEncDeinit();
@@ -81,6 +81,7 @@
         OMX_ERRORTYPE AvcRequestIFrame();
         OMX_BOOL AvcUpdateBitRate(OMX_U32 aEncodedBitRate);
         OMX_BOOL AvcUpdateFrameRate(OMX_U32 aEncodeFramerate);
+        OMX_BOOL GetSpsPpsHeaderFlag();
 
         /* for avc encoder lib callback functions */
         int		AVC_DPBAlloc(uint frame_size_in_mbs, uint num_buffers);
diff --git a/codecs_v2/omx/omx_h264enc/include/omx_avcenc_component.h b/codecs_v2/omx/omx_h264enc/include/omx_avcenc_component.h
index 0c63cd4..4b64b55 100644
--- a/codecs_v2/omx/omx_h264enc/include/omx_avcenc_component.h
+++ b/codecs_v2/omx/omx_h264enc/include/omx_avcenc_component.h
@@ -34,13 +34,16 @@
 
 
 #define INPUT_BUFFER_SIZE_AVCENC 38016			//(176 * 144 * 1.5) for YUV 420 format.
+
+#if (defined(TEST_FULL_AVC_FRAME_MODE) || defined(TEST_FULL_AVC_FRAME_MODE_SC))
+#define OUTPUT_BUFFER_SIZE_AVCENC 38581 // (20 + 4 * MAX_NAL_PER_FRAME + 20 + 6) is size of extra data
+#else
 #define OUTPUT_BUFFER_SIZE_AVCENC 38135
+#endif
 
 #define NUMBER_INPUT_BUFFER_AVCENC  5
 #define NUMBER_OUTPUT_BUFFER_AVCENC  2
 
-
-
 class OmxComponentAvcEncAO : public OmxComponentVideo
 {
     public:
@@ -67,6 +70,11 @@
     private:
 
         OMX_BOOL CopyDataToOutputBuffer();
+        OMX_BOOL AppendExtraDataToBuffer(OMX_BUFFERHEADERTYPE* aOutputBuffer,
+                                         OMX_EXTRADATATYPE aType,
+                                         OMX_U8* aExtraData,
+                                         OMX_U8 aDataLength);
+        void ManageFrameBoundaries();
 
         AvcEncoder_OMX*   ipAvcEncoderObject;
 
@@ -75,6 +83,11 @@
         OMX_U32			  iInternalOutBufFilledLen;
         OMX_TICKS		  iOutputTimeStamp;
         OMX_BOOL		  iSyncFlag;
+        OMX_BOOL          iEndOfOutputFrame;
+
+        OMX_U32			  iNALSizeArray[MAX_NAL_PER_FRAME];
+        OMX_U32			  iNALSizeSum;
+        OMX_U32			  iNALCount;
 };
 
 #endif // OMX_AVCENC_COMPONENT_H_INCLUDED
diff --git a/codecs_v2/omx/omx_h264enc/src/avc_enc.cpp b/codecs_v2/omx/omx_h264enc/src/avc_enc.cpp
index 9737bfc..726f9b0 100644
--- a/codecs_v2/omx/omx_h264enc/src/avc_enc.cpp
+++ b/codecs_v2/omx/omx_h264enc/src/avc_enc.cpp
@@ -129,6 +129,11 @@
 
     AVCEncParams aEncOption; /* encoding options */
 
+    uint32* slice_group = NULL;
+    int32 numTotalMBs;
+    int32 Ysize16;
+    int32 total_mb;
+    int32 run_length;
 
     iSrcWidth = aInputParam.nFrameWidth;
     iSrcHeight = aInputParam.nFrameHeight;
@@ -426,8 +431,14 @@
     aEncOption.num_ref_frame = 1;	//We only support this value
 
     //Since FMO is disabled in our case, num of slice group is always 1
+#if (defined(TEST_FULL_AVC_FRAME_MODE) || defined(TEST_FULL_AVC_FRAME_MODE_SC))
+    aEncOption.num_slice_group = 4;
+    aEncOption.fmo_type = 6;
+    aEncOption.use_overrun_buffer = AVC_OFF; // since we are to be outputing full frame buffers
+#else
     aEncOption.num_slice_group = 1;
     aEncOption.fmo_type = 0;	//Disabled in this case
+#endif
 
     aEncOption.db_filter = AVC_ON;
 
@@ -474,7 +485,38 @@
     aEncOption.rdopt_mode = AVC_OFF;
     aEncOption.bidir_pred = AVC_OFF;
 
-    /***** Initlaize the encoder *****/
+    Ysize16 = (((aEncOption.width + 15) >> 4) << 4) * (((aEncOption.height + 15) >> 4) << 4);
+    numTotalMBs = Ysize16 >> 8;
+    slice_group = (uint*) oscl_malloc(sizeof(uint) * numTotalMBs);
+
+    int32 idx = 0;
+    int32 ii;
+    for (ii = 0; ii < numTotalMBs; ii++)
+    {
+        slice_group[ii] = idx++;
+        if (idx >= aEncOption.num_slice_group)
+        {
+            idx = 0;
+        }
+    }
+    aEncOption.slice_group = slice_group;
+
+    if (aEncOption.num_slice_group > 1)  /* divide slice group equally */
+    {
+        run_length = numTotalMBs / aEncOption.num_slice_group;
+        total_mb = 0;
+        for (idx = 0; idx < aEncOption.num_slice_group; idx++)
+        {
+            aEncOption.run_length_minus1[idx] = run_length - 1;
+            total_mb += run_length;
+        }
+        if (total_mb < numTotalMBs)
+        {
+            aEncOption.run_length_minus1[aEncOption.num_slice_group-1] += (numTotalMBs - total_mb);
+        }
+    }
+
+    /***** Initialize the encoder *****/
     if (AVCENC_SUCCESS != PVAVCEncInitialize(&iAvcHandle, &aEncOption, NULL, NULL))
     {
         iInitialized = OMX_FALSE;
@@ -486,12 +528,14 @@
     iInitialized = OMX_TRUE;
     iReadyForNextFrame = OMX_TRUE;
 
+    oscl_free(slice_group);
+
     return OMX_ErrorNone;
 
 }
 
 
-OMX_BOOL AvcEncoder_OMX::AvcEncodeSendInput(OMX_U8*    aInBuffer,
+AVCEnc_Status AvcEncoder_OMX::AvcEncodeSendInput(OMX_U8*    aInBuffer,
         OMX_U32*   aInBufSize,
         OMX_TICKS  aInTimeStamp)
 {
@@ -506,7 +550,7 @@
         {
             //Mark the inpur buffer consumed to indicate corrupt frame
             *aInBufSize = 0;
-            return OMX_FALSE;
+            return AVCENC_FAIL;
         }
 
         if (iYUVIn) /* iSrcWidth is not multiple of 4 or iSrcHeight is odd number */
@@ -526,7 +570,7 @@
         {
             //Mark the inpur buffer consumed to indicate corrupt frame
             *aInBufSize = 0;
-            return OMX_FALSE;
+            return AVCENC_FAIL;
         }
         ccRGBtoYUV->Convert((uint8*)aInBuffer, iYUVIn);
         iVideoIn = iYUVIn;
@@ -537,7 +581,7 @@
         {
             //Mark the inpur buffer consumed to indicate corrupt frame
             *aInBufSize = 0;
-            return OMX_FALSE;
+            return AVCENC_FAIL;
         }
         ccRGBtoYUV->Convert((uint8*)aInBuffer, iYUVIn);
         iVideoIn = iYUVIn;
@@ -548,7 +592,7 @@
         {
             //Mark the inpur buffer consumed to indicate corrupt frame
             *aInBufSize = 0;
-            return OMX_FALSE;
+            return AVCENC_FAIL;
         }
         ccRGBtoYUV->Convert((uint8*)aInBuffer, iYUVIn);
         iVideoIn = iYUVIn;
@@ -566,25 +610,23 @@
     iVidIn.disp_order = iDispOrd;
 
     AvcStatus = PVAVCEncSetInput(&iAvcHandle, &iVidIn);
-    //Mark the inpur buffer consumed after caling SetInput api
-    *aInBufSize = 0;
 
     if (AVCENC_SUCCESS == AvcStatus)
     {
         iDispOrd++;
         iReadyForNextFrame = OMX_FALSE;
-        return OMX_TRUE;
+        return AvcStatus;
     }
     else if (AVCENC_NEW_IDR == AvcStatus)
     {
         iDispOrd++;
         iIDR = OMX_TRUE;
         iReadyForNextFrame = OMX_FALSE;
-        return OMX_TRUE;
+        return AvcStatus;
     }
     else
     {
-        return OMX_FALSE;
+        return AvcStatus;
     }
 
 }
@@ -603,10 +645,10 @@
 {
     AVCEnc_Status AvcStatus;
     AVCEnc_Status ReturnValue;
-    OMX_BOOL	SetInputStatus = OMX_TRUE;
+    AVCEnc_Status	SetInputStatus = AVCENC_SUCCESS;
     AVCFrameIO recon;
     uint Size;
-    int  NALType;
+    int  NALType = 0;
 
     if (OMX_FALSE == iSpsPpsHeaderFlag)
     {
@@ -648,7 +690,7 @@
         SetInputStatus = AvcEncodeSendInput(aInBuffer, aInBufSize, aInTimeStamp);
     }
 
-    if (OMX_TRUE == SetInputStatus)		//success
+    if ((AVCENC_SUCCESS == SetInputStatus) || (AVCENC_NEW_IDR == SetInputStatus))		//success
     {
         Size = *aOutputLength;
 
@@ -684,7 +726,9 @@
             {
                 iIDR = OMX_FALSE;
             }
+
             ReturnValue = AVCENC_PICTURE_READY;
+
             iReadyForNextFrame = OMX_TRUE;	//ready to receive another set of input frame
 
             AvcStatus = PVAVCEncGetRecon(&iAvcHandle, &recon);
@@ -693,6 +737,12 @@
                 PVAVCEncReleaseRecon(&iAvcHandle, &recon);
             }
         }
+        else if (AVCENC_SKIPPED_PICTURE == AvcStatus)
+        {
+            *aOutputLength = 0;
+            iReadyForNextFrame = OMX_TRUE;	//ready to receive another set of input frame
+            return AVCENC_SKIPPED_PICTURE;
+        }
         else
         {
             *aOutputLength = 0;
@@ -706,6 +756,11 @@
         return ReturnValue;
 
     }
+    else if (AVCENC_SKIPPED_PICTURE == SetInputStatus)
+    {
+        *aOutputLength = 0;
+        return AVCENC_SKIPPED_PICTURE;
+    }
     else
     {
         *aOutputLength = 0;
@@ -1032,3 +1087,9 @@
     return ;
 }
 
+OMX_BOOL AvcEncoder_OMX::GetSpsPpsHeaderFlag()
+{
+    return iSpsPpsHeaderFlag;
+}
+
+
diff --git a/codecs_v2/omx/omx_h264enc/src/omx_avcenc_component.cpp b/codecs_v2/omx/omx_h264enc/src/omx_avcenc_component.cpp
index 011d15b..b64e7d3 100644
--- a/codecs_v2/omx/omx_h264enc/src/omx_avcenc_component.cpp
+++ b/codecs_v2/omx/omx_h264enc/src/omx_avcenc_component.cpp
@@ -22,6 +22,14 @@
 #include "omx_proxy_interface.h"
 #endif
 
+const uint8 NAL_START_CODE[4] = {0, 0, 0, 1};
+
+#define CONFIG_SIZE_AND_VERSION(param) \
+	    param.nSize=sizeof(param); \
+	    param.nVersion.s.nVersionMajor = SPECVERSIONMAJOR; \
+	    param.nVersion.s.nVersionMinor = SPECVERSIONMINOR; \
+	    param.nVersion.s.nRevision = SPECREVISION; \
+	    param.nVersion.s.nStep = SPECSTEP;
 
 // This function is called by OMX_GetHandle and it creates an instance of the avc component AO
 OMX_ERRORTYPE AvcEncOmxComponentFactory(OMX_OUT OMX_HANDLETYPE* pHandle, OMX_IN OMX_PTR pAppData, OMX_PTR pProxy, OMX_STRING aOmxLibName, OMX_PTR &aOmxLib, OMX_PTR aOsclUuid, OMX_U32 &aRefCount)
@@ -138,6 +146,10 @@
     ipComponentProxy = pProxy;
     iOmxComponent.pApplicationPrivate = pAppData; // init the App data
 
+    oscl_memset((void *)iNALSizeArray, 0, MAX_NAL_PER_FRAME * sizeof(int32));
+    iNALCount = 0;
+    iNALSizeSum = 0;
+    iEndOfOutputFrame = OMX_FALSE;
 
 #if PROXY_INTERFACE
     iPVCapabilityFlags.iIsOMXComponentMultiThreaded = OMX_TRUE;
@@ -179,12 +191,37 @@
     iOmxComponent.nVersion.s.nStep = SPECSTEP;
 
     // PV capability
+#if defined(TEST_FULL_AVC_FRAME_MODE)
+    /* output buffers based on frame boundaries instead of NAL boundaries and specify NAL boundaries through
+     * through OMX_EXTRADATA structures appended on the end of the buffer
+     */
     iPVCapabilityFlags.iOMXComponentSupportsExternalInputBufferAlloc = OMX_TRUE;
     iPVCapabilityFlags.iOMXComponentSupportsExternalOutputBufferAlloc = OMX_TRUE;
     iPVCapabilityFlags.iOMXComponentSupportsMovableInputBuffers = OMX_TRUE;
     iPVCapabilityFlags.iOMXComponentSupportsPartialFrames = OMX_TRUE;
-    iPVCapabilityFlags.iOMXComponentNeedsNALStartCode = OMX_FALSE;
+    iPVCapabilityFlags.iOMXComponentUsesNALStartCodes = OMX_FALSE;
     iPVCapabilityFlags.iOMXComponentCanHandleIncompleteFrames = OMX_TRUE;
+    iPVCapabilityFlags.iOMXComponentUsesFullAVCFrames = OMX_TRUE;
+#elif defined(TEST_FULL_AVC_FRAME_MODE_SC)
+    /* output buffers based on frame boundaries instead of NAL boundaries and specify NAL boundaries
+     * with NAL start codes
+     */
+    iPVCapabilityFlags.iOMXComponentSupportsExternalInputBufferAlloc = OMX_TRUE;
+    iPVCapabilityFlags.iOMXComponentSupportsExternalOutputBufferAlloc = OMX_TRUE;
+    iPVCapabilityFlags.iOMXComponentSupportsMovableInputBuffers = OMX_TRUE;
+    iPVCapabilityFlags.iOMXComponentSupportsPartialFrames = OMX_TRUE;
+    iPVCapabilityFlags.iOMXComponentUsesNALStartCodes = OMX_TRUE;
+    iPVCapabilityFlags.iOMXComponentCanHandleIncompleteFrames = OMX_TRUE;
+    iPVCapabilityFlags.iOMXComponentUsesFullAVCFrames = OMX_TRUE;
+#else
+    iPVCapabilityFlags.iOMXComponentSupportsExternalInputBufferAlloc = OMX_TRUE;
+    iPVCapabilityFlags.iOMXComponentSupportsExternalOutputBufferAlloc = OMX_TRUE;
+    iPVCapabilityFlags.iOMXComponentSupportsMovableInputBuffers = OMX_TRUE;
+    iPVCapabilityFlags.iOMXComponentSupportsPartialFrames = OMX_TRUE;
+    iPVCapabilityFlags.iOMXComponentUsesNALStartCodes = OMX_FALSE;
+    iPVCapabilityFlags.iOMXComponentCanHandleIncompleteFrames = OMX_TRUE;
+    iPVCapabilityFlags.iOMXComponentUsesFullAVCFrames = OMX_FALSE;
+#endif
 
     if (ipAppPriv)
     {
@@ -207,6 +244,7 @@
     }
 
     /** Domain specific section for input raw port */ //OMX_PARAM_PORTDEFINITIONTYPE
+    ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.nPortIndex = OMX_PORT_INPUTPORT_INDEX;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.eDomain = OMX_PortDomainVideo;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.format.video.cMIMEType = (OMX_STRING)"raw";
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
@@ -228,6 +266,7 @@
 
 
     /** Domain specific section for output avc port */
+    ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.nPortIndex = OMX_PORT_OUTPUTPORT_INDEX;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.eDomain = OMX_PortDomainVideo;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.format.video.cMIMEType = (OMX_STRING)"video/avc";
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.format.video.eCompressionFormat = OMX_VIDEO_CodingAVC;
@@ -270,6 +309,7 @@
 
 
     //OMX_VIDEO_PARAM_PROFILELEVELTYPE structure
+    ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->ProfileLevel.nPortIndex = OMX_PORT_OUTPUTPORT_INDEX;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->ProfileLevel.nProfileIndex = 0;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->ProfileLevel.eProfile = OMX_VIDEO_AVCProfileBaseline;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->ProfileLevel.eLevel = OMX_VIDEO_AVCLevel1b;
@@ -477,7 +517,6 @@
     QueueType* pOutputQueue = ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->pBufferQueue;
 
     ComponentPortType*	pInPort = ipPorts[OMX_PORT_INPUTPORT_INDEX];
-    ComponentPortType*	pOutPort = ipPorts[OMX_PORT_OUTPUTPORT_INDEX];
 
     OMX_U8*					pOutBuffer;
     OMX_U32					OutputLength;
@@ -490,6 +529,7 @@
         if (OMX_TRUE == iNewOutBufRequired)
         {
             //Check whether a new output buffer is available or not
+
             if (0 == (GetQueueNumElem(pOutputQueue)))
             {
                 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_NOTICE, (0, "OmxComponentAvcEncAO : ProcessData OUT output buffer unavailable"));
@@ -497,9 +537,27 @@
             }
 
             ipOutputBuffer = (OMX_BUFFERHEADERTYPE*) DeQueue(pOutputQueue);
+
+            OSCL_ASSERT(NULL != ipOutputBuffer);
+            if (ipOutputBuffer == NULL)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "OmxComponentAvcEncAO : ProcessData ERR OUT output buffer cannot be dequeued"));
+                return;
+            }
             ipOutputBuffer->nFilledLen = 0;
             iNewOutBufRequired = OMX_FALSE;
 
+            oscl_memset((void *)iNALSizeArray, 0, iNALCount * sizeof(int32));
+            iNALCount = 0;
+            iNALSizeSum = 0;
+
+            if (iPVCapabilityFlags.iOMXComponentUsesNALStartCodes)
+            {
+                oscl_memcpy(ipOutputBuffer->pBuffer + ipOutputBuffer->nOffset + ipOutputBuffer->nFilledLen, &NAL_START_CODE, sizeof(uint8) * 4);
+                ipOutputBuffer->nFilledLen += 4;
+                iNALSizeSum += 4;
+            }
+
 
             /* If some output data was left to be send from the last processing due to
              * unavailability of required number of output buffers,
@@ -514,14 +572,7 @@
                 }
                 else
                 {
-                    //Attach the end of frame flag while sending out the last piece of output buffer
-                    ipOutputBuffer->nFlags |= OMX_BUFFERFLAG_ENDOFFRAME;
-                    if (OMX_TRUE == iSyncFlag)
-                    {
-                        ipOutputBuffer->nFlags |= OMX_BUFFERFLAG_SYNCFRAME;
-                        iSyncFlag = OMX_FALSE;
-                    }
-                    ReturnOutputBuffer(ipOutputBuffer, pOutPort);
+                    ManageFrameBoundaries();
 
                     //Dequeue new output buffer to continue encoding the next frame
                     if (0 == (GetQueueNumElem(pOutputQueue)))
@@ -529,8 +580,16 @@
                         PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_NOTICE, (0, "OmxComponentAvcEncAO : ProcessData OUT output buffer unavailable"));
                         return;
                     }
-
                     ipOutputBuffer = (OMX_BUFFERHEADERTYPE*) DeQueue(pOutputQueue);
+
+                    OSCL_ASSERT(NULL != ipOutputBuffer);
+                    if (ipOutputBuffer == NULL)
+                    {
+                        PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "OmxComponentAvcEncAO : ProcessData OUT ERR output buffer cannot be dequeued"));
+                        return;
+                    }
+
+
                     ipOutputBuffer->nFilledLen = 0;
                     iNewOutBufRequired = OMX_FALSE;
                 }
@@ -559,8 +618,18 @@
         //Call the encoder only if there is some data to encode
         if (iInputCurrLength > 0)
         {
-            pOutBuffer = ipOutputBuffer->pBuffer;
-            OutputLength = ipOutputBuffer->nAllocLen;
+            OMX_S32 filledLength = ipOutputBuffer->nOffset + ipOutputBuffer->nFilledLen;
+            pOutBuffer = ipOutputBuffer->pBuffer + (OMX_U32)filledLength;
+
+            if (iPVCapabilityFlags.iOMXComponentUsesFullAVCFrames && !iPVCapabilityFlags.iOMXComponentUsesNALStartCodes)
+            {
+                OutputLength = (OMX_U32)(((OMX_S32)ipOutputBuffer->nAllocLen - filledLength - (46 + 4 * (iNALCount + 1))) > 0) ? (ipOutputBuffer->nAllocLen - filledLength - (46 + 4 * (iNALCount + 1))) : 0;
+                // (20 + 4 * (iNALCount + 1) + 20 + 6) is size of extra data
+            }
+            else
+            {
+                OutputLength = (OMX_U32)(((OMX_S32)ipOutputBuffer->nAllocLen - filledLength) > 0) ? (ipOutputBuffer->nAllocLen - filledLength) : 0;
+            }
 
             //Output buffer is passed as a short pointer
             EncodeReturn = ipAvcEncoderObject->AvcEncodeVideo(pOutBuffer,
@@ -573,7 +642,6 @@
                            &iOutputTimeStamp,
                            &iSyncFlag);
 
-
             //Chk whether output data has been generated or not
             if (OutputLength > 0)
             {
@@ -584,7 +652,7 @@
                 if (OMX_FALSE == iBufferOverRun)
                 {
                     //No internal buffer is maintained
-                    ipOutputBuffer->nFilledLen = OutputLength;
+                    ipOutputBuffer->nFilledLen += OutputLength;
                 }
                 else
                 {
@@ -595,9 +663,9 @@
                 }	//else loop of if (OMX_FALSE == iMantainOutInternalBuffer)
             }	//if (OutputLength > 0)	 loop
 
-
             //If encoder returned error in case of frame skip/corrupt frame, report it to the client via a callback
-            if ((AVCENC_FAIL == EncodeReturn) && (OMX_FALSE == iEndofStream))
+            if (((AVCENC_SKIPPED_PICTURE == EncodeReturn) || (AVCENC_FAIL == EncodeReturn))
+                    && (OMX_FALSE == iEndofStream))
             {
                 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_NOTICE, (0, "OmxComponentAvcEncAO : Frame skipped, ProcessData ErrorStreamCorrupt callback send"));
 
@@ -610,9 +678,10 @@
                  NULL);
             }
 
-
             //Return the input buffer that has been consumed fully
-            if (0 == iInputCurrLength)
+            if ((AVCENC_PICTURE_READY == EncodeReturn) ||
+                    (AVCENC_SKIPPED_PICTURE == EncodeReturn) ||
+                    (AVCENC_FAIL == EncodeReturn))
             {
                 ipInputBuffer->nFilledLen = 0;
                 ReturnInputBuffer(ipInputBuffer, pInPort);
@@ -620,9 +689,14 @@
 
                 iIsInputBufferEnded = OMX_TRUE;
                 iInputCurrLength = 0;
+
+	            iFrameCount++;
             }
 
-            iFrameCount++;
+            if (AVCENC_PICTURE_READY == EncodeReturn)
+            {
+                iEndOfOutputFrame = OMX_TRUE;
+            }
         }
 
 
@@ -644,35 +718,30 @@
                  NULL);
                 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_NOTICE, (0, "OmxComponentAvcEncAO : ProcessData EOS callback sent"));
 
+                ManageFrameBoundaries();
 
                 //Mark this flag false once the callback has been send back
                 iEndofStream = OMX_FALSE;
 
-                ipOutputBuffer->nFlags |= OMX_BUFFERFLAG_EOS;
-                if (OMX_TRUE == iSyncFlag)
-                {
-                    ipOutputBuffer->nFlags |= OMX_BUFFERFLAG_SYNCFRAME;
-                    iSyncFlag = OMX_FALSE;
-                }
-                ReturnOutputBuffer(ipOutputBuffer, pOutPort);
-
                 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_NOTICE, (0, "OmxComponentAvcEncAO : ProcessData OUT"));
                 return;
             }
 
         }
 
-        //Send the output buffer back after decode
-        if ((ipOutputBuffer->nFilledLen > 0) && (OMX_FALSE == iNewOutBufRequired))
+        if (!iPVCapabilityFlags.iOMXComponentUsesNALStartCodes)
         {
-            //Attach the end of frame flag while sending out the last piece of output buffer
-            ipOutputBuffer->nFlags |= OMX_BUFFERFLAG_ENDOFFRAME;
-            if (OMX_TRUE == iSyncFlag)
+            if (iEndOfOutputFrame || ((ipOutputBuffer->nFilledLen > 0) && (OMX_FALSE == iNewOutBufRequired)))
             {
-                ipOutputBuffer->nFlags |= OMX_BUFFERFLAG_SYNCFRAME;
-                iSyncFlag = OMX_FALSE;
+                ManageFrameBoundaries();
             }
-            ReturnOutputBuffer(ipOutputBuffer, pOutPort);
+        }
+        else if (ipOutputBuffer->nFilledLen > 4) // therefore only if more than just start code in buffer
+        {
+            if (iEndOfOutputFrame || (OMX_FALSE == iNewOutBufRequired))
+            {
+                ManageFrameBoundaries();
+            }
         }
 
 
@@ -728,10 +797,19 @@
             //Check whether a new output buffer is available or not
             if (0 == (GetQueueNumElem(pOutputQueue)))
             {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_NOTICE, (0, "OmxComponentAvcEncAO : CopyDatatoOutputBuffer OUT output buffer unavailable"));
                 return OMX_FALSE;
             }
 
             ipOutputBuffer = (OMX_BUFFERHEADERTYPE*) DeQueue(pOutputQueue);
+
+            OSCL_ASSERT(NULL != ipOutputBuffer);
+            if (ipOutputBuffer == NULL)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "OmxComponentAvcEncAO : CopyDatatoOutputBuffer ERR OUT output buffer cannot be dequeued"));
+                return OMX_FALSE;
+            }
+
             ipOutputBuffer->nFilledLen = 0;
             ipOutputBuffer->nTimeStamp = iOutputTimeStamp;
             ipOutputBuffer->nOffset = 0;
@@ -1000,3 +1078,180 @@
 {
     iIsInputBufferEnded = OMX_FALSE;
 }
+
+/////////////////////////////////////////////////////////////////////////////
+OMX_BOOL OmxComponentAvcEncAO::AppendExtraDataToBuffer(OMX_BUFFERHEADERTYPE* aOutputBuffer,
+        OMX_EXTRADATATYPE aType,
+        OMX_U8* aExtraData,
+        OMX_U8 aDataLength)
+
+{
+    // This function is used to append AVC NAL info to the buffer using the OMX_EXTRADATA_TYPE structure, when
+    // a component requires buffers with full AVC frames rather than just NALs
+    PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_NOTICE,
+                    (0, "OmxComponentAvcEncAO::AppendExtraDataToBuffer() In"));
+
+
+    if ((aType != OMX_ExtraDataNone) && (aExtraData != NULL) && (aOutputBuffer->pBuffer != NULL))
+    {
+        const uint32 sizeOfExtraDataStruct = 20; // 20 is the number of bytes for the OMX_OTHER_EXTRADATATYPE structure (minus the data hint member)
+
+        OMX_OTHER_EXTRADATATYPE extra;
+        OMX_OTHER_EXTRADATATYPE terminator;
+
+        CONFIG_SIZE_AND_VERSION(extra);
+        CONFIG_SIZE_AND_VERSION(terminator);
+
+        extra.nPortIndex = OMX_PORT_OUTPUTPORT_INDEX;
+        terminator.nPortIndex = OMX_PORT_OUTPUTPORT_INDEX;
+
+        extra.eType = aType;
+        extra.nSize = (sizeOfExtraDataStruct + aDataLength + 3) & ~3; // size + padding for byte alignment
+        extra.nDataSize = aDataLength;
+
+        // fill in fields for terminator
+        terminator.eType = OMX_ExtraDataNone;
+        terminator.nDataSize = 0;
+
+        // make sure there is enough room in the buffer
+        if (aOutputBuffer->nAllocLen < (aOutputBuffer->nOffset + aOutputBuffer->nFilledLen + sizeOfExtraDataStruct + aDataLength + terminator.nSize + 6))
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                            (0, "OmxComponentAvcEncAO::AppendExtraDataToBuffer()  - Error (not enough room in buffer) appending extra data to Buffer 0x%x, TS=%d", aOutputBuffer->pBuffer, iOutputTimeStamp));
+
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                            (0, "OmxComponentAvcEncAO::AppendExtraDataToBuffer() Out"));
+
+            return OMX_FALSE;
+        }
+
+        // copy extra data into buffer
+        // need to align to 4 bytes
+        OMX_U8* buffer = aOutputBuffer->pBuffer + aOutputBuffer->nOffset + aOutputBuffer->nFilledLen;
+        buffer = (OMX_U8*)(((OMX_U32) buffer + 3) & ~3);
+
+        oscl_memcpy(buffer, &extra, sizeOfExtraDataStruct);
+        oscl_memcpy(buffer + sizeOfExtraDataStruct, aExtraData, aDataLength);
+        buffer += extra.nSize;
+
+        oscl_memcpy(buffer, &terminator, terminator.nSize);
+
+        // flag buffer
+        aOutputBuffer->nFlags |= OMX_BUFFERFLAG_EXTRADATA;
+
+        PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                        (0, "OmxComponentAvcEncAO::AppendExtraDataToBuffer()  - Appending extra data to Buffer 0x%x, TS=%d", aOutputBuffer->pBuffer, iOutputTimeStamp));
+
+        PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                        (0, "OmxComponentAvcEncAO::AppendExtraDataToBuffer() Out"));
+
+        return OMX_TRUE;
+    }
+    else
+    {
+        PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                        (0, "OmxComponentAvcEncAO::AppendExtraDataToBuffer() Out"));
+
+        return OMX_FALSE;
+    }
+}
+
+void OmxComponentAvcEncAO::ManageFrameBoundaries()
+{
+    PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_NOTICE,
+                    (0, "OmxComponentAvcEncAO::ManageFrameBoundaries() In"));
+
+    ComponentPortType*	pOutPort = ipPorts[OMX_PORT_OUTPUTPORT_INDEX];
+
+    if (!iPVCapabilityFlags.iOMXComponentUsesFullAVCFrames || !ipAvcEncoderObject->GetSpsPpsHeaderFlag())
+    {
+        if (iPVCapabilityFlags.iOMXComponentUsesNALStartCodes && ipOutputBuffer->nFilledLen == 4)
+        {
+            ipOutputBuffer->nFilledLen = 0;
+        }
+
+
+        //Attach the end of frame flag while sending out the last piece of output buffer
+        if (iEndofStream)
+        {
+            ipOutputBuffer->nFlags |= OMX_BUFFERFLAG_EOS;
+        }
+        else
+        {
+            ipOutputBuffer->nFlags |= OMX_BUFFERFLAG_ENDOFFRAME;
+        }
+
+        if (OMX_TRUE == iSyncFlag)
+        {
+            ipOutputBuffer->nFlags |= OMX_BUFFERFLAG_SYNCFRAME;
+            iSyncFlag = OMX_FALSE;
+        }
+        ReturnOutputBuffer(ipOutputBuffer, pOutPort);
+    }
+    else /* append extra data structure to buffer if iOMXComponentUsesFullAVCFrames is set and the buffer does not contain SPS or PPS NALs */
+    {
+        OMX_U32 CurrNALSize = ipOutputBuffer->nFilledLen - iNALSizeSum;
+        if (CurrNALSize > 0)
+        {
+            if (iPVCapabilityFlags.iOMXComponentUsesNALStartCodes && !iEndOfOutputFrame && !iEndofStream)
+            {
+                oscl_memcpy(ipOutputBuffer->pBuffer + ipOutputBuffer->nOffset + ipOutputBuffer->nFilledLen, &NAL_START_CODE, sizeof(uint8) * 4);
+                ipOutputBuffer->nFilledLen += 4;
+                iNALSizeSum += 4;
+            }
+
+            iNALSizeArray[iNALCount] = CurrNALSize;
+            iNALSizeSum += iNALSizeArray[iNALCount];
+            iNALCount++;
+        }
+
+        if (iEndOfOutputFrame || iEndofStream)
+        {
+            if (!iPVCapabilityFlags.iOMXComponentUsesNALStartCodes)
+            {
+                if (OMX_FALSE == AppendExtraDataToBuffer(ipOutputBuffer, (OMX_EXTRADATATYPE) OMX_ExtraDataNALSizeArray, (OMX_U8*) iNALSizeArray, sizeof(uint32) * iNALCount))
+                {
+                    ipOutputBuffer->nFlags |= OMX_BUFFERFLAG_DATACORRUPT;
+
+                    PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                                    (0, "OmxComponentAvcEncAO::ManageFrameBoundaries()  - Error appending extra data to Buffer 0x%x, TS=%d, returning anyway with data corrupt flag", ipOutputBuffer->pBuffer, iOutputTimeStamp));
+                }
+            }
+            else if (0 == iNALCount)
+            {
+                iNALSizeSum = 0;
+                ipOutputBuffer->nFilledLen = 0;
+            }
+
+            //Attach the end of frame flag while sending out the last piece of output buffer
+            if (iEndOfOutputFrame)
+            {
+                ipOutputBuffer->nFlags |= OMX_BUFFERFLAG_ENDOFFRAME;
+            }
+
+            //Attach the end of stream flag
+            if (iEndofStream)
+            {
+                ipOutputBuffer->nFlags |= OMX_BUFFERFLAG_EOS;
+            }
+
+            if (OMX_TRUE == iSyncFlag)
+            {
+                ipOutputBuffer->nFlags |= OMX_BUFFERFLAG_SYNCFRAME;
+                iSyncFlag = OMX_FALSE;
+            }
+
+            ReturnOutputBuffer(ipOutputBuffer, pOutPort);
+
+            oscl_memset((void *)iNALSizeArray, 0, iNALCount * sizeof(int32));
+            iNALCount = 0;
+            iNALSizeSum = 0;
+
+            iEndOfOutputFrame = OMX_FALSE;
+        }
+    }
+
+    PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_NOTICE,
+                    (0, "OmxComponentAvcEncAO::ManageFrameBoundaries() Out"));
+}
+
diff --git a/codecs_v2/omx/omx_m4v/src/omx_mpeg4_component.cpp b/codecs_v2/omx/omx_m4v/src/omx_mpeg4_component.cpp
index c9eaaa3..cde9706 100644
--- a/codecs_v2/omx/omx_m4v/src/omx_mpeg4_component.cpp
+++ b/codecs_v2/omx/omx_m4v/src/omx_mpeg4_component.cpp
@@ -272,8 +272,9 @@
     iPVCapabilityFlags.iOMXComponentSupportsExternalOutputBufferAlloc = OMX_TRUE;
     iPVCapabilityFlags.iOMXComponentSupportsMovableInputBuffers = OMX_TRUE;
     iPVCapabilityFlags.iOMXComponentSupportsPartialFrames = OMX_TRUE;
-    iPVCapabilityFlags.iOMXComponentNeedsNALStartCode = OMX_FALSE;
+    iPVCapabilityFlags.iOMXComponentUsesNALStartCodes = OMX_FALSE;
     iPVCapabilityFlags.iOMXComponentCanHandleIncompleteFrames = OMX_TRUE;
+    iPVCapabilityFlags.iOMXComponentUsesFullAVCFrames = OMX_FALSE;
 
     if (ipAppPriv)
     {
@@ -297,6 +298,7 @@
     }
 
     /** Domain specific section for the ports. */
+    ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.nPortIndex = OMX_PORT_INPUTPORT_INDEX;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.eDomain = OMX_PortDomainVideo;
     if (iDecMode == MODE_MPEG4)
     {
@@ -328,6 +330,7 @@
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.bPopulated = OMX_FALSE;
 
 
+    ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.nPortIndex = OMX_PORT_OUTPUTPORT_INDEX;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.eDomain = OMX_PortDomainVideo;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.format.video.cMIMEType = (OMX_STRING)"raw";
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.format.video.pNativeRender = 0;
@@ -349,9 +352,11 @@
     if (iDecMode == MODE_MPEG4)
     {
         //Default values for mpeg4 video param port
+        ipPorts[OMX_PORT_INPUTPORT_INDEX]->VideoMpeg4.nPortIndex = OMX_PORT_INPUTPORT_INDEX;
         ipPorts[OMX_PORT_INPUTPORT_INDEX]->VideoMpeg4.eProfile = OMX_VIDEO_MPEG4ProfileSimple;
         ipPorts[OMX_PORT_INPUTPORT_INDEX]->VideoMpeg4.eLevel = OMX_VIDEO_MPEG4Level1;
 
+        ipPorts[OMX_PORT_INPUTPORT_INDEX]->ProfileLevel.nPortIndex = OMX_PORT_INPUTPORT_INDEX;
         ipPorts[OMX_PORT_INPUTPORT_INDEX]->ProfileLevel.nProfileIndex = 0;
         ipPorts[OMX_PORT_INPUTPORT_INDEX]->ProfileLevel.eProfile = OMX_VIDEO_MPEG4ProfileSimple;
         ipPorts[OMX_PORT_INPUTPORT_INDEX]->ProfileLevel.eLevel = OMX_VIDEO_MPEG4Level1;
diff --git a/codecs_v2/omx/omx_m4venc/src/omx_mpeg4enc_component.cpp b/codecs_v2/omx/omx_m4venc/src/omx_mpeg4enc_component.cpp
index ef3775a..e311498 100644
--- a/codecs_v2/omx/omx_m4venc/src/omx_mpeg4enc_component.cpp
+++ b/codecs_v2/omx/omx_m4venc/src/omx_mpeg4enc_component.cpp
@@ -257,8 +257,9 @@
     iPVCapabilityFlags.iOMXComponentSupportsExternalOutputBufferAlloc = OMX_TRUE;
     iPVCapabilityFlags.iOMXComponentSupportsMovableInputBuffers = OMX_TRUE;
     iPVCapabilityFlags.iOMXComponentSupportsPartialFrames = OMX_TRUE;
-    iPVCapabilityFlags.iOMXComponentNeedsNALStartCode = OMX_FALSE;
+    iPVCapabilityFlags.iOMXComponentUsesNALStartCodes = OMX_FALSE;
     iPVCapabilityFlags.iOMXComponentCanHandleIncompleteFrames = OMX_TRUE;
+    iPVCapabilityFlags.iOMXComponentUsesFullAVCFrames = OMX_FALSE;
 
     if (ipAppPriv)
     {
@@ -281,6 +282,7 @@
     }
 
     /** Domain specific section for input raw port */ //OMX_PARAM_PORTDEFINITIONTYPE
+    ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.nPortIndex = OMX_PORT_INPUTPORT_INDEX;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.eDomain = OMX_PortDomainVideo;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.format.video.cMIMEType = (OMX_STRING)"raw";
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
@@ -302,6 +304,7 @@
 
 
     /** Domain specific section for output mpeg4/h263 port */
+    ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.nPortIndex = OMX_PORT_OUTPUTPORT_INDEX;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.eDomain = OMX_PortDomainVideo;
     if (MODE_MPEG4 == iEncMode)
     {
@@ -359,15 +362,17 @@
     if (MODE_MPEG4 == iEncMode)
     {
         //OMX_VIDEO_PARAM_PROFILELEVELTYPE structure
+        ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->ProfileLevel.nPortIndex = OMX_PORT_OUTPUTPORT_INDEX;
         ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->ProfileLevel.nProfileIndex = 0;
         ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->ProfileLevel.eProfile = OMX_VIDEO_MPEG4ProfileCore;
         ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->ProfileLevel.eLevel = OMX_VIDEO_MPEG4Level2;
     }
     else if (MODE_H263 == iEncMode)
     {
-        ipPorts[OMX_PORT_INPUTPORT_INDEX]->ProfileLevel.nProfileIndex = 0;
-        ipPorts[OMX_PORT_INPUTPORT_INDEX]->ProfileLevel.eProfile = OMX_VIDEO_H263ProfileBaseline;
-        ipPorts[OMX_PORT_INPUTPORT_INDEX]->ProfileLevel.eLevel = OMX_VIDEO_H263Level45;
+        ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->ProfileLevel.nPortIndex = OMX_PORT_OUTPUTPORT_INDEX;
+        ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->ProfileLevel.nProfileIndex = 0;
+        ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->ProfileLevel.eProfile = OMX_VIDEO_H263ProfileBaseline;
+        ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->ProfileLevel.eLevel = OMX_VIDEO_H263Level45;
     }
 
 
@@ -587,6 +592,7 @@
         if (OMX_TRUE == iNewOutBufRequired)
         {
             //Check whether a new output buffer is available or not
+
             if (0 == (GetQueueNumElem(pOutputQueue)))
             {
                 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_NOTICE, (0, "OmxComponentMpeg4EncAO : ProcessData OUT output buffer unavailable"));
@@ -594,6 +600,14 @@
             }
 
             ipOutputBuffer = (OMX_BUFFERHEADERTYPE*) DeQueue(pOutputQueue);
+
+            OSCL_ASSERT(NULL != ipOutputBuffer);
+            if (ipOutputBuffer == NULL)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "OmxComponentMpeg4EncAO : ProcessData OUT ERR output buffer cannot be dequeued"));
+                return;
+            }
+
             ipOutputBuffer->nFilledLen = 0;
             iNewOutBufRequired = OMX_FALSE;
 
@@ -628,6 +642,14 @@
                     }
 
                     ipOutputBuffer = (OMX_BUFFERHEADERTYPE*) DeQueue(pOutputQueue);
+
+                    OSCL_ASSERT(NULL != ipOutputBuffer);
+                    if (ipOutputBuffer == NULL)
+                    {
+                        PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "OmxComponentMpeg4EncAO : ProcessData OUT ERR output buffer cannot be dequeued"));
+                        return;
+                    }
+
                     ipOutputBuffer->nFilledLen = 0;
                     iNewOutBufRequired = OMX_FALSE;
                 }
@@ -827,10 +849,19 @@
             //Check whether a new output buffer is available or not
             if (0 == (GetQueueNumElem(pOutputQueue)))
             {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_NOTICE, (0, "OmxComponentMpeg4EncAO : CopyDataToOutputBuffer OUT output buffer unavailable"));
                 return OMX_FALSE;
             }
 
             ipOutputBuffer = (OMX_BUFFERHEADERTYPE*) DeQueue(pOutputQueue);
+
+            OSCL_ASSERT(NULL != ipOutputBuffer);
+            if (ipOutputBuffer == NULL)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "OmxComponentMpeg4EncAO : CopyDataToOutputBuffer  OUT ERR output buffer cannot be dequeued"));
+                return OMX_FALSE;
+            }
+
             ipOutputBuffer->nFilledLen = 0;
             ipOutputBuffer->nTimeStamp = iOutputTimeStamp;
             ipOutputBuffer->nOffset = 0;
diff --git a/codecs_v2/omx/omx_mastercore/include/omx_interface.h b/codecs_v2/omx/omx_mastercore/include/omx_interface.h
index 45da195..56d6b60 100644
--- a/codecs_v2/omx/omx_mastercore/include/omx_interface.h
+++ b/codecs_v2/omx/omx_mastercore/include/omx_interface.h
@@ -79,6 +79,10 @@
     OMX_OUT OMX_HANDLETYPE *hPipe,
     OMX_IN OMX_STRING szURI);
 
+typedef OMX_BOOL(*tpOMXConfigParser)(
+    OMX_PTR aInputParameters,
+    OMX_PTR aOutputParameters);
+
 
 class OMXInterface : public OsclSharedLibraryInterface
 {
@@ -94,6 +98,7 @@
             pOMX_GetRolesOfComponent = NULL;
             pOMX_SetupTunnel = NULL;
             pOMX_GetContentPipe = NULL;
+            pOMXConfigParser = NULL;
         };
 
         /* return true when the core library can be safely unloaded */
@@ -145,6 +150,11 @@
             return pOMX_GetContentPipe;
         };
 
+        tpOMXConfigParser GetpOMXConfigParser()
+        {
+            return pOMXConfigParser;
+        };
+
         // ptrs to all omx core methods
         // will be set in the derived classes
         OMX_ERRORTYPE OMX_APIENTRY(*pOMX_Init)(void);
@@ -189,6 +199,10 @@
         OMX_ERRORTYPE(*pOMX_GetContentPipe)(
             OMX_OUT OMX_HANDLETYPE *hPipe,
             OMX_IN OMX_STRING szURI);
+
+        OMX_BOOL(*pOMXConfigParser)(
+            OMX_PTR aInputParameters,
+            OMX_PTR aOutputParameters);
 };
 #endif
 
diff --git a/codecs_v2/omx/omx_mastercore/src/pv_omxmastercore.cpp b/codecs_v2/omx/omx_mastercore/src/pv_omxmastercore.cpp
index 402b91a..1b8f015 100644
--- a/codecs_v2/omx/omx_mastercore/src/pv_omxmastercore.cpp
+++ b/codecs_v2/omx/omx_mastercore/src/pv_omxmastercore.cpp
@@ -30,6 +30,7 @@
 #include "oscl_string.h"
 #include "oscl_mem.h"
 #include "oscl_stdstring.h"
+#include "pv_omx_config_parser.h"
 
 #define MAX_PATHNAME_LENGTH 512
 
@@ -865,4 +866,175 @@
     return OMX_ErrorNone;
 }
 
+OMX_BOOL PV_OMXConfigParser(
+    OMX_PTR aInputParameters,
+    OMX_PTR aOutputParameters)
+
+{
+    OMXConfigParserInputs* pInputs;
+
+    pInputs = (OMXConfigParserInputs*) aInputParameters;
+
+
+    if (NULL != pInputs->cComponentRole)
+    {
+        if (0 == oscl_strncmp(pInputs->cComponentRole, (OMX_STRING)"audio_decoder", oscl_strlen("audio_decoder")))
+        {
+            OMX_S32 Status;
+            pvAudioConfigParserInputs aInputs;
+
+            aInputs.inPtr = pInputs->inPtr;
+            aInputs.inBytes = pInputs->inBytes;
+
+            if (0 == oscl_strcmp(pInputs->cComponentRole, (OMX_STRING)"audio_decoder.wma"))
+            {
+                aInputs.iMimeType = PVMF_MIME_WMA;
+
+            }
+            else if (0 == oscl_strcmp(pInputs->cComponentRole, (OMX_STRING)"audio_decoder.aac"))
+            {
+                aInputs.iMimeType = PVMF_MIME_AAC_SIZEHDR;
+
+            }
+            else if (0 == oscl_strcmp(pInputs->cComponentRole, (OMX_STRING)"audio_decoder.amr"))
+            {
+                aInputs.iMimeType = PVMF_MIME_AMR;
+
+            }
+            else if (0 == oscl_strcmp(pInputs->cComponentRole, (OMX_STRING)"audio_decoder.mp3"))
+            {
+                aInputs.iMimeType = PVMF_MIME_MP3;
+
+            }
+            else
+            {
+                return OMX_FALSE;
+            }
+
+
+            Status = pv_audio_config_parser(&aInputs, (pvAudioConfigParserOutputs *)aOutputParameters);
+            if (0 == Status)
+            {
+                return OMX_FALSE;
+            }
+        }
+        else if (0 == oscl_strncmp(pInputs->cComponentRole, (OMX_STRING)"video_decoder", oscl_strlen("video_decoder")))
+        {
+
+            OMX_S32 Status;
+            pvVideoConfigParserInputs aInputs;
+
+            aInputs.inPtr = pInputs->inPtr;
+            aInputs.inBytes = pInputs->inBytes;
+
+            if (0 == oscl_strcmp(pInputs->cComponentRole, (OMX_STRING)"video_decoder.wmv"))
+            {
+                aInputs.iMimeType = PVMF_MIME_WMV;
+
+            }
+            else if (0 == oscl_strcmp(pInputs->cComponentRole, (OMX_STRING)"video_decoder.avc"))
+            {
+                aInputs.iMimeType = PVMF_MIME_H264_VIDEO;
+
+            }
+            else if (0 == oscl_strcmp(pInputs->cComponentRole, (OMX_STRING)"video_decoder.mpeg4"))
+            {
+                aInputs.iMimeType = PVMF_MIME_M4V;
+
+            }
+            else if (0 == oscl_strcmp(pInputs->cComponentRole, (OMX_STRING)"video_decoder.h263"))
+            {
+                aInputs.iMimeType = PVMF_MIME_H2632000;
+
+            }
+            else
+            {
+                return OMX_FALSE;
+            }
+
+            Status = pv_video_config_parser(&aInputs, (pvVideoConfigParserOutputs *)aOutputParameters);
+            if (0 != Status)
+            {
+                return OMX_FALSE;
+            }
+        }
+        else
+        {
+            return OMX_FALSE;
+        }
+
+    }
+    else
+    {
+        return OMX_FALSE;
+    }
+
+    return OMX_TRUE;
+}
+
+OSCL_EXPORT_REF OMX_BOOL OMXConfigParser(
+    OMX_PTR aInputParameters,
+    OMX_PTR aOutputParameters)
+
+{
+    OMX_BOOL Status = OMX_FALSE;
+    OMX_U32 ii;
+    int32 error;
+
+    OMXMasterCoreGlobalData* data = (OMXMasterCoreGlobalData*)OsclSingletonRegistry::getInstance(OSCL_SINGLETON_ID_OMXMASTERCORE, error);
+    if (data)
+    {
+        // try to get the omxconfigparser from omx cores
+        // return the first valid one
+        OMXInterface** pInterface = (OMXInterface**)(data->iInterface);
+        PVOMXMasterRegistryStruct* pOMXMasterRegistry = (PVOMXMasterRegistryStruct*)(data->iMasterRegistry);
+
+        if (pOMXMasterRegistry == NULL)
+        {
+            return Status;
+        }
+        if (pInterface)
+        {
+            for (ii = 0; ii < (data->iTotalNumOMXComponents); ii++)
+            {
+                if (!oscl_strcmp((OMX_STRING)pOMXMasterRegistry[ii].CompRole, ((OMXConfigParserInputs*)aInputParameters)->cComponentRole))
+                {
+                    // go through the list of supported components and find the component based on its name (identifier)
+                    if (!oscl_strcmp((OMX_STRING)pOMXMasterRegistry[ii].CompName, ((OMXConfigParserInputs*)aInputParameters)->cComponentName))
+                    {
+                        // found a matching name
+                        break;
+                    }
+                }
+            }
+
+            if (ii == (data->iTotalNumOMXComponents))
+            {
+                return Status;
+            }
+
+            OMX_U32 index = pOMXMasterRegistry[ii].OMXCoreIndex;
+            if (pInterface[index]->GetpOMXConfigParser() == NULL)
+            {
+                //The OMX core does not have config parser - use PV config parser
+                Status = PV_OMXConfigParser(aInputParameters, aOutputParameters);
+            }
+            else
+            {
+                Status = (*(pInterface[index]->GetpOMXConfigParser()))(aInputParameters, aOutputParameters);
+            }
+        }
+        else
+        {
+            return Status;
+        }
+    }
+
+    return Status;
+}
+
+
+
+
+
 
diff --git a/codecs_v2/omx/omx_mp3/src/omx_mp3_component.cpp b/codecs_v2/omx/omx_mp3/src/omx_mp3_component.cpp
index ad6e56f..dfe8987 100644
--- a/codecs_v2/omx/omx_mp3/src/omx_mp3_component.cpp
+++ b/codecs_v2/omx/omx_mp3/src/omx_mp3_component.cpp
@@ -188,8 +188,9 @@
     iPVCapabilityFlags.iOMXComponentSupportsExternalOutputBufferAlloc = OMX_TRUE;
     iPVCapabilityFlags.iOMXComponentSupportsMovableInputBuffers = OMX_TRUE;
     iPVCapabilityFlags.iOMXComponentSupportsPartialFrames = OMX_TRUE;
-    iPVCapabilityFlags.iOMXComponentNeedsNALStartCode = OMX_FALSE;
+    iPVCapabilityFlags.iOMXComponentUsesNALStartCodes = OMX_FALSE;
     iPVCapabilityFlags.iOMXComponentCanHandleIncompleteFrames = OMX_TRUE;
+    iPVCapabilityFlags.iOMXComponentUsesFullAVCFrames = OMX_FALSE;
 
     if (ipAppPriv)
     {
@@ -212,6 +213,7 @@
     }
 
     /** Domain specific section for the ports. */
+    ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.nPortIndex = OMX_PORT_INPUTPORT_INDEX;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.eDomain = OMX_PortDomainAudio;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.format.audio.cMIMEType = (OMX_STRING)"audio/mpeg";
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.format.audio.pNativeRender = 0;
@@ -226,6 +228,7 @@
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->PortParam.bPopulated = OMX_FALSE;
 
 
+    ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.nPortIndex = OMX_PORT_OUTPUTPORT_INDEX;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.eDomain = OMX_PortDomainAudio;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.format.audio.cMIMEType = (OMX_STRING)"raw";
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.format.audio.pNativeRender = 0;
@@ -240,6 +243,7 @@
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->PortParam.bPopulated = OMX_FALSE;
 
     //Default values for Mp3 audio param port
+    ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioMp3Param.nPortIndex = OMX_PORT_INPUTPORT_INDEX;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioMp3Param.nChannels = 2;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioMp3Param.nBitRate = 0;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioMp3Param.nSampleRate = 44100;
@@ -247,12 +251,14 @@
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioMp3Param.eChannelMode = OMX_AUDIO_ChannelModeStereo;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioMp3Param.eFormat = OMX_AUDIO_MP3StreamFormatMP1Layer3;
 
+    ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioEqualizerType.nPortIndex = OMX_PORT_INPUTPORT_INDEX;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioEqualizerType.sBandIndex.nMin = 0;
     //Taken these value from from mp3 decoder component
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioEqualizerType.sBandIndex.nValue = (e_equalization) flat;
     ipPorts[OMX_PORT_INPUTPORT_INDEX]->AudioEqualizerType.sBandIndex.nMax = (e_equalization) flat_;
 
 
+    ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->AudioPcmMode.nPortIndex = OMX_PORT_OUTPUTPORT_INDEX;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->AudioPcmMode.nChannels = 2;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->AudioPcmMode.eNumData = OMX_NumericalDataSigned;
     ipPorts[OMX_PORT_OUTPUTPORT_INDEX]->AudioPcmMode.bInterleaved = OMX_TRUE;
@@ -379,11 +385,10 @@
     if (ipMp3Dec)
     {
         ipMp3Dec->ResetDecoder();
+        //Set this length to zero for flushing the current input buffer
+        ipMp3Dec->iInputUsedLength = 0;
+        //ipMp3Dec->iInitFlag = 0;
     }
-
-    //Set this length to zero for flushing the current input buffer
-    ipMp3Dec->iInputUsedLength = 0;
-    //ipMp3Dec->iInitFlag = 0;
 }
 
 
diff --git a/codecs_v2/omx/omx_proxy/src/omx_proxy_interface.cpp b/codecs_v2/omx/omx_proxy/src/omx_proxy_interface.cpp
index f167fb2..72321f8 100644
--- a/codecs_v2/omx/omx_proxy/src/omx_proxy_interface.cpp
+++ b/codecs_v2/omx/omx_proxy/src/omx_proxy_interface.cpp
@@ -422,8 +422,7 @@
         return OMX_ErrorInsufficientResources;
     }
 
-    GetConfigMsg* Msg = new(ptr) GetConfigMsg(hComponent, nIndex, pComponentConfigStructure);
-
+    GetConfigMsg* Msg = OSCL_PLACEMENT_NEW(ptr, GetConfigMsg(hComponent, nIndex, pComponentConfigStructure));
 
     iMemCmd++;
     iNumClientMsg++;
@@ -450,7 +449,7 @@
         return OMX_ErrorInsufficientResources;
     }
 
-    SetConfigMsg* Msg = new(ptr) SetConfigMsg(hComponent, nIndex, pComponentConfigStructure);
+    SetConfigMsg* Msg = OSCL_PLACEMENT_NEW(ptr, SetConfigMsg(hComponent, nIndex, pComponentConfigStructure));
 
 
 
@@ -478,7 +477,7 @@
         return OMX_ErrorInsufficientResources;
     }
 
-    GetExtMsg* Msg = new(ptr) GetExtMsg(hComponent, cParameterName, pIndexType);
+    GetExtMsg* Msg = OSCL_PLACEMENT_NEW(ptr, GetExtMsg(hComponent, cParameterName, pIndexType));
 
     iMemCmd++;
     iNumClientMsg++;
@@ -503,7 +502,7 @@
         return OMX_ErrorInsufficientResources;
     }
 
-    GetStateMsg* Msg = new(ptr) GetStateMsg(hComponent, pState);
+    GetStateMsg* Msg = OSCL_PLACEMENT_NEW(ptr, GetStateMsg(hComponent, pState));
 
 
     iMemCmd++;
@@ -530,7 +529,7 @@
         return OMX_ErrorInsufficientResources;
     }
 
-    GetParameterMsg* Msg = new(ptr) GetParameterMsg(hComponent, nParamIndex, ComponentParameterStructure);
+    GetParameterMsg* Msg = OSCL_PLACEMENT_NEW(ptr, GetParameterMsg(hComponent, nParamIndex, ComponentParameterStructure));
 
 
     iMemCmd++;
@@ -558,7 +557,7 @@
         return OMX_ErrorInsufficientResources;
     }
 
-    SetParameterMsg* Msg = new(ptr) SetParameterMsg(hComponent, nParamIndex, ComponentParameterStructure);
+    SetParameterMsg* Msg = OSCL_PLACEMENT_NEW(ptr, SetParameterMsg(hComponent, nParamIndex, ComponentParameterStructure));
 
 
 
@@ -590,7 +589,7 @@
         return OMX_ErrorInsufficientResources;
     }
 
-    UseBufMsg* Msg = new(ptr) UseBufMsg(hComponent, ppBufferHdr, nPortIndex, pAppPrivate, nSizeBytes, pBuffer);
+    UseBufMsg* Msg = OSCL_PLACEMENT_NEW(ptr, UseBufMsg(hComponent, ppBufferHdr, nPortIndex, pAppPrivate, nSizeBytes, pBuffer));
 
 
     iMemCmd++;
@@ -619,7 +618,7 @@
         return OMX_ErrorInsufficientResources;
     }
 
-    AllocBufMsg* Msg = new(ptr) AllocBufMsg(hComponent, pBuffer, nPortIndex, pAppPrivate, nSizeBytes);
+    AllocBufMsg* Msg = OSCL_PLACEMENT_NEW(ptr, AllocBufMsg(hComponent, pBuffer, nPortIndex, pAppPrivate, nSizeBytes));
 
 
     iMemCmd++;
@@ -645,7 +644,7 @@
         return OMX_ErrorInsufficientResources;
     }
 
-    FreeBufMsg* Msg = new(ptr) FreeBufMsg(hComponent, nPortIndex, pBuffer);
+    FreeBufMsg* Msg = OSCL_PLACEMENT_NEW(ptr, FreeBufMsg(hComponent, nPortIndex, pBuffer));
 
 
     iMemCmd++;
@@ -671,7 +670,7 @@
         return OMX_ErrorInsufficientResources;
     }
 
-    SetCallMsg* Msg = new(ptr) SetCallMsg(hComponent, pCallbacks, pAppData);
+    SetCallMsg* Msg = OSCL_PLACEMENT_NEW(ptr, SetCallMsg(hComponent, pCallbacks, pAppData));
 
     iMemCmd++;
     iNumClientMsg++;
@@ -697,7 +696,7 @@
         return OMX_ErrorInsufficientResources;
     }
 
-    SetCommMsg* Msg = new(ptr) SetCommMsg(hComponent, Cmd, nParam, pCmdData);
+    SetCommMsg* Msg = OSCL_PLACEMENT_NEW(ptr, SetCommMsg(hComponent, Cmd, nParam, pCmdData));
 
     iMemCmd++;
     iNumClientMsg++;
@@ -721,7 +720,7 @@
         return OMX_ErrorInsufficientResources;
     }
 
-    EmptyBufMsg* Msg = new(ptr) EmptyBufMsg(hComponent, pBuffer);
+    EmptyBufMsg* Msg = OSCL_PLACEMENT_NEW(ptr, EmptyBufMsg(hComponent, pBuffer));
 
 
     iMemCmd++;
@@ -750,7 +749,7 @@
     }
 
 
-    FillBufMsg* Msg = new(ptr) FillBufMsg(hComponent, pBuffer);
+    FillBufMsg* Msg = OSCL_PLACEMENT_NEW(ptr, FillBufMsg(hComponent, pBuffer));
 
     iMemCmd++;
     iNumClientMsg++;
@@ -780,7 +779,7 @@
         return OMX_ErrorInsufficientResources;
     }
 
-    GetHandleMsg* Msg = new(ptr) GetHandleMsg(pHandle, cComponentName, pAppData, pCallBacks);
+    GetHandleMsg* Msg = OSCL_PLACEMENT_NEW(ptr, GetHandleMsg(pHandle, cComponentName, pAppData, pCallBacks));
 
 
     iMemCmd++;
@@ -805,7 +804,7 @@
         return OMX_ErrorInsufficientResources;
     }
 
-    FreeHandleMsg* Msg = new(ptr) FreeHandleMsg(hComponent);
+    FreeHandleMsg* Msg = OSCL_PLACEMENT_NEW(ptr, FreeHandleMsg(hComponent));
 
 
     iMemCmd++;
diff --git a/codecs_v2/omx/omx_sharedlibrary/interface/src/pv_omx_interface.cpp b/codecs_v2/omx/omx_sharedlibrary/interface/src/pv_omx_interface.cpp
index aaba91b..ba15cca 100644
--- a/codecs_v2/omx/omx_sharedlibrary/interface/src/pv_omx_interface.cpp
+++ b/codecs_v2/omx/omx_sharedlibrary/interface/src/pv_omx_interface.cpp
@@ -63,6 +63,7 @@
             pOMX_GetRolesOfComponent = OMX_GetRolesOfComponent;
             pOMX_SetupTunnel = OMX_SetupTunnel;
             pOMX_GetContentPipe = OMX_GetContentPipe;
+            pOMXConfigParser = OMXConfigParser;
         };
 
 };
diff --git a/codecs_v2/utilities/colorconvert/build/make/local_pvrgb12toyuv420.mk b/codecs_v2/utilities/colorconvert/build/make/local_pvrgb12toyuv420.mk
new file mode 100644
index 0000000..e4d5dc1
--- /dev/null
+++ b/codecs_v2/utilities/colorconvert/build/make/local_pvrgb12toyuv420.mk
@@ -0,0 +1,15 @@
+# Get the current local path as the first operation
+LOCAL_PATH := $(call get_makefile_dir)
+
+# Clear out the variables used in the local makefiles
+include $(MK)/clear.mk
+
+TARGET := pvrgb12toyuv420
+
+SRCDIR := ../../src
+
+
+SRCS := ccrgb12toyuv420.cpp \
+        cczoomrotationbase.cpp
+
+include $(MK)/library.mk
diff --git a/codecs_v2/utilities/colorconvert/build/make/local_pvrgb24toyuv420.mk b/codecs_v2/utilities/colorconvert/build/make/local_pvrgb24toyuv420.mk
new file mode 100644
index 0000000..feeb5aa
--- /dev/null
+++ b/codecs_v2/utilities/colorconvert/build/make/local_pvrgb24toyuv420.mk
@@ -0,0 +1,15 @@
+# Get the current local path as the first operation
+LOCAL_PATH := $(call get_makefile_dir)
+
+# Clear out the variables used in the local makefiles
+include $(MK)/clear.mk
+
+TARGET := pvrgb24toyuv420
+
+SRCDIR := ../../src
+
+
+SRCS :=	ccrgb24toyuv420.cpp \
+        cczoomrotationbase.cpp
+
+include $(MK)/library.mk
diff --git a/codecs_v2/utilities/colorconvert/build/make/local_pvyuv420semiplnrtoyuv420plnr.mk b/codecs_v2/utilities/colorconvert/build/make/local_pvyuv420semiplnrtoyuv420plnr.mk
new file mode 100644
index 0000000..b0b3418
--- /dev/null
+++ b/codecs_v2/utilities/colorconvert/build/make/local_pvyuv420semiplnrtoyuv420plnr.mk
@@ -0,0 +1,15 @@
+# Get the current local path as the first operation
+LOCAL_PATH := $(call get_makefile_dir)
+
+# Clear out the variables used in the local makefiles
+include $(MK)/clear.mk
+
+TARGET := pvyuv420semiplnrtoyuv420plnr
+
+SRCDIR := ../../src
+
+
+SRCS :=	ccyuv420semiplnrtoyuv420plnr.cpp \
+        cczoomrotationbase.cpp
+
+include $(MK)/library.mk
diff --git a/codecs_v2/utilities/colorconvert/include/cczoomrotation32.h b/codecs_v2/utilities/colorconvert/include/cczoomrotation32.h
index 8c3cac3..a822f31 100644
--- a/codecs_v2/utilities/colorconvert/include/cczoomrotation32.h
+++ b/codecs_v2/utilities/colorconvert/include/cczoomrotation32.h
@@ -53,6 +53,7 @@
         int32 get_frame32(uint8 **src, uint8 *dst, DisplayProperties *disp, uint8 *COFF_TBL);
         int32 cc32ZoomIn(uint8 **src, uint8 *dst, DisplayProperties *disp, uint8 *COFF_TBL);
         int32 cc32Rotate(uint8 **src, uint8 *dst, DisplayProperties *disp, uint8 *COFF_TBL);
+        int32 cc32ZoomRotate(uint8 **src, uint8 *dst, DisplayProperties *disp, uint8 *COFF_TBL);
         int32(ColorConvert32::*mPtrYUV2RGB)(uint8 **src, uint8 *dst, DisplayProperties *disp, uint8 *COFF_TBL);
 };
 
diff --git a/codecs_v2/utilities/colorconvert/src/cczoomrotation16.cpp b/codecs_v2/utilities/colorconvert/src/cczoomrotation16.cpp
index 6c150c2..4c5b491 100644
--- a/codecs_v2/utilities/colorconvert/src/cczoomrotation16.cpp
+++ b/codecs_v2/utilities/colorconvert/src/cczoomrotation16.cpp
@@ -166,7 +166,7 @@
         mPtrYUV2RGB	=	&ColorConvert16::get_frame16;
         _mState		=	0;
         _mDisp.src_pitch = _mSrc_pitch  ;
-        _mDisp.dst_pitch = _mDst_pitch	;
+        _mDisp.dst_pitch = _mSrc_width	;
         _mDisp.src_width = _mSrc_width	;
         _mDisp.src_height = _mSrc_height ;
         _mDisp.dst_width = _mSrc_width	;
diff --git a/codecs_v2/utilities/colorconvert/src/cczoomrotation32.cpp b/codecs_v2/utilities/colorconvert/src/cczoomrotation32.cpp
index 513d288..68ddce8 100644
--- a/codecs_v2/utilities/colorconvert/src/cczoomrotation32.cpp
+++ b/codecs_v2/utilities/colorconvert/src/cczoomrotation32.cpp
@@ -25,6 +25,10 @@
 #include "osclconfig_compiler_warnings.h"
 
 
+/*---------------------------------------------------------------------------------
+ * ARM V6 INLINE ASSEMBLY ROUTINES
+ *---------------------------------------------------------------------------------
+ */
 
 
 OSCL_EXPORT_REF ColorConvertBase* ColorConvert32::NewL(void)
@@ -120,7 +124,7 @@
         {
             if (_mRotation&0x1) /* zoom and rotate */
             {
-                return 0;
+                mPtrYUV2RGB = &ColorConvert32::cc32ZoomRotate;
             }
             else /* zoom only */
             {
@@ -131,7 +135,7 @@
         {
             if (_mRotation&0x1) /* rotate only*/
             {
-                return 0;
+                mPtrYUV2RGB = &ColorConvert32::cc32Rotate;
             }
             else /* no zoom, no rotate, SetMode(1) = SetMode(0) */
             {
@@ -203,6 +207,7 @@
 
 
 int32 cc32(uint8 **src, uint8 *dst, int32 *disp_prop, uint8 *coeff_tbl);
+int32 cc32Reverse(uint8 **src, uint8 *dst, int32 *disp_prop, uint8 *coeff_tbl);
 
 int32 ColorConvert32::get_frame32(uint8 **src, uint8 *dst, DisplayProperties *disp, uint8 *clip)
 {
@@ -217,17 +222,20 @@
     disp_prop[6] = (_mRotation > 0 ? 1 : 0);
     disp_prop[7] = _mIsFlip;
 
-//	if(disp_prop[6]^disp_prop[7])	/* flip and rotate 180*/
-//	{
-//		return 0 ;//not yet implemented cc32Reverse(src,dst,disp_prop,coff_tbl);
-//	}
-//	else
+    if (disp_prop[6] ^ disp_prop[7])	/* flip and rotate 180*/
+    {
+        return cc32Reverse(src, dst, disp_prop, clip);
+    }
+    else
     {
         return cc32(src, dst, disp_prop, clip);
     }
 }
 
-
+/*---------------------------------------------------------------------------------
+ * CC32 WITH ARMV6 ASSEMBLY
+ *---------------------------------------------------------------------------------
+ */
 int32 cc32(uint8 **src, uint8 *dst, int32 *disp, uint8 *clip)
 {
     uint8		*pCb, *pCr;
@@ -239,6 +247,7 @@
     int32 row, col;
     int32 tmp0, tmp1, tmp2;
 
+
     src_pitch	=	disp[0];
     dst_pitch	=	disp[1];
     src_width	=	disp[2];
@@ -266,7 +275,6 @@
 
     deltaDst	=	((dst_pitch << 1) - src_width) * 4;
     pDst =	dst;
-
     dst_pitch4	=	4 * dst_pitch;
 
     for (row = disp[3]; row > 0; row -= 2)
@@ -282,12 +290,15 @@
 
             Cb -= 128;
             Cr -= 128;
+
             Cg	=	Cr * (*((int32*)(clip - 400)));
             Cg	+=	Cb * (*((int32*)(clip - 392)));
 
             Cr	*=	(*((int32*)(clip - 396)));
             Cb	*=	(*((int32*)(clip - 388)));
 
+
+
             tmp0	=	Y & 0xFF;	//Low endian	left pixel
 
             tmp1	=	(tmp0 << 16) - Cg;
@@ -363,6 +374,316 @@
     return 1;
 }
 
+int32 cc32Reverse(uint8 **src, uint8 *dst, int32 *disp, uint8 *clip)
+{
+    uint8   *pCb, *pCr;
+    uint16	*pY;
+    uint8	*pDst;
+    int32	src_pitch, dst_pitch, dst_pitch4 , src_width;
+    int32	Y, Cb, Cr, Cg;
+    int32	deltaY, deltaDst, deltaCbCr;
+    int32	row, col;
+    int32	tmp0, tmp1, tmp2;
+    int32	nextrow ;
+
+    src_pitch	=	disp[0];
+    dst_pitch	=	disp[1];
+    src_width	=	disp[2];
+
+    if (disp[6]) /* rotation, only */
+    {  /* move the starting point to the bottom-right corner of the picture */
+        nextrow = src_pitch * (disp[3] - 1);
+        pY = (uint16*)(src[0] + nextrow + src_width - 2);
+        nextrow = (src_pitch >> 1) * ((disp[3] >> 1) - 1);
+        pCb = src[1] + nextrow + (src_width >> 1) - 1;
+        pCr = src[2] + nextrow + (src_width >> 1) - 1;
+        nextrow = -(src_pitch >> 1);
+        deltaY		=	src_width - (src_pitch << 1);
+        deltaCbCr	=	(src_width - src_pitch) >> 1;
+    }
+    else	/* flip only */
+    {   /* move the starting point to the top-right corner of the picture */
+        pY = (uint16 *)(src[0] + src_width - 2);
+        pCb = src[1] + (src_width >> 1) - 1;
+        pCr = src[2] + (src_width >> 1) - 1;
+        nextrow = src_pitch >> 1;
+        deltaY = src_width + (src_pitch << 1);
+        deltaCbCr = (src_width + src_pitch) >> 1;
+    }
+
+    deltaDst	=	((dst_pitch << 1) - src_width) * 4;
+    pDst =	dst;
+    dst_pitch4	=	4 * dst_pitch;
+
+    for (row = disp[3]; row > 0; row -= 2)
+    {
+
+        for (col = src_width - 1; col >= 0; col -= 2)
+        {
+
+            Cb = *pCb--;
+            Cr = *pCr--;
+            //load the bottom two pixels
+
+            Y = pY[nextrow];
+            Cb -= 128;
+            Cr -= 128;
+
+            Cg	=	Cr * (*((int32*)(clip - 400)));
+            Cg	+=	Cb * (*((int32*)(clip - 392)));
+
+            Cr	*=	(*((int32*)(clip - 396)));
+            Cb	*=	(*((int32*)(clip - 388)));
+
+            tmp0   = (Y >> 8) & 0xFF; // First Pixel in reverse order
+
+            tmp1	=	(tmp0 << 16) - Cg;
+            tmp2	=	(tmp0 << 16) + Cb;
+            tmp0	=	(tmp0 << 16) + Cr;
+
+            tmp0	=	clip[tmp0>>16];
+            tmp1	=	clip[tmp1>>16];
+            tmp2	=	clip[tmp2>>16];
+
+
+
+#if RGB_FORMAT
+            *((uint32 *)(pDst + dst_pitch4 + 0))	=	tmp0 | (tmp1 << 8) | (tmp2 << 16)  ; /* bgr */
+#else
+            *((uint32 *)(pDst + dst_pitch4 + 0))	=	tmp2 | (tmp1 << 8) | (tmp0 << 16);  /* rgb */
+#endif
+
+
+            Y	=	Y & 0xFF;	//  Second Pixel in reverse order
+
+            tmp0	=	(Y << 16) + Cr;
+            tmp1	=	(Y << 16) - Cg;
+            tmp2	=	(Y << 16) + Cb;
+
+            tmp0	=	clip[tmp0>>16];
+            tmp1	=	clip[tmp1>>16];
+            tmp2	=	clip[tmp2>>16];
+
+
+#if RGB_FORMAT
+            *((uint32 *)(pDst + dst_pitch4 + 4))	=	tmp0 | (tmp1 << 8) | (tmp2 << 16)  ; /* bgr */
+#else
+            *((uint32 *)(pDst + dst_pitch4 + 4))	=	tmp2 | (tmp1 << 8) | (tmp0 << 16);  /* rgb */
+#endif
+
+            //load the top two pixels
+            Y = *pY--;
+            tmp0   = (Y >> 8) & 0xFF; // First Pixel in reverse order ;
+
+            tmp1	=	(tmp0 << 16) - Cg;
+            tmp2	=	(tmp0 << 16) + Cb;
+            tmp0	=	(tmp0 << 16) + Cr;
+
+            tmp0	=	clip[tmp0>>16];
+            tmp1	=	clip[tmp1>>16];
+            tmp2	=	clip[tmp2>>16];
+
+#if RGB_FORMAT
+            *((uint32 *)(pDst + 0))	=	tmp0 | (tmp1 << 8) | (tmp2 << 16)  ; /* bgr */
+#else
+            *((uint32 *)(pDst + 0))	=	tmp2 | (tmp1 << 8) | (tmp0 << 16);  /* rgb */
+#endif
+
+            Y	=	Y & 0xFF;	//  Second Pixel in reverse order
+
+            tmp1	=	(Y << 16) - Cg;
+            tmp2	=	(Y << 16) + Cb;
+            tmp0	=	(Y << 16) + Cr;
+
+            tmp0	=	clip[tmp0>>16];
+            tmp1	=	clip[tmp1>>16];
+            tmp2	=	clip[tmp2>>16];
+
+
+#if RGB_FORMAT
+            *((uint32 *)(pDst + 4))	=	tmp0 | (tmp1 << 8) | (tmp2 << 16)  ; /* bgr */
+#else
+            *((uint32 *)(pDst + 4))	=	tmp2 | (tmp1 << 8) | (tmp0 << 16);  /* rgb */
+#endif
+            pDst += 8;
+
+        }//end of COL
+
+        pY	+=	(deltaY >> 1);
+        pCb	+=	deltaCbCr;
+        pCr	+=	deltaCbCr;
+        pDst +=	(deltaDst);
+    }
+    return 1;
+}
+
+int32 ColorConvert32::cc32Rotate(uint8 **src, uint8 *dst, DisplayProperties *disp, uint8 *clip)
+{
+    uint8 *pCb, *pCr;
+    uint8 *pY;
+    uint8 *pDst;
+    int32 src_pitch, dst_pitch, src_width, dst_pitch4;
+    int32 Y, Cb, Cr, Cg;
+    int32 deltaY, deltaDst, deltaCbCr;
+    int32 row, col;
+    int32 tmp0, tmp1, tmp2;
+    int32 half_src_pitch, read_idx, tmp_src_pitch;
+    int32 disp_prop[8];
+
+    disp_prop[0] = disp->src_pitch;
+    disp_prop[1] = disp->dst_pitch;
+    disp_prop[2] = disp->src_width;
+    disp_prop[3] = disp->src_height;
+    disp_prop[4] = disp->dst_width;
+    disp_prop[5] = disp->dst_height;
+    disp_prop[6] = _mRotation;
+    disp_prop[7] = _mIsFlip;
+
+    src_pitch	=	disp_prop[0];
+    dst_pitch	=	disp_prop[1];
+    src_width	=	disp_prop[2];
+
+    deltaDst	=	4 * ((dst_pitch << 1) -  disp_prop[4]);
+
+    if (_mRotation == CCROTATE_CLKWISE)
+    {
+
+        // go from top-left to bottom-left
+        deltaY		=  src_pitch * disp_prop[3] + 2;
+        deltaCbCr	= ((src_pitch * disp_prop[3]) >> 2) + 1;
+
+
+        // map origin of the destination to the source
+        // goto bottom-left
+        pY = src[0] + src_pitch * (disp_prop[3] - 1);
+        pCb = src[1] + ((src_pitch >> 1) * ((disp_prop[3] >> 1) - 1));
+        pCr = src[2] + ((src_pitch >> 1) * ((disp_prop[3] >> 1) - 1));
+
+        half_src_pitch = -(src_pitch >> 1);
+        read_idx = 1;
+        tmp_src_pitch = -src_pitch;
+    }
+    else  // rotate counterclockwise
+    {   // go from bottom-right back to top-right
+        deltaY		=  -(src_pitch *  disp_prop[3] + 2);
+        deltaCbCr	=  -(((src_pitch *  disp_prop[3]) >> 2) + 1);
+
+        // map origin of the destination to the source
+        // goto top-right
+        pY = src[0] + src_width - 1;
+        pCb = src[1] + (src_width >> 1) - 1;
+        pCr = src[2] + (src_width >> 1) - 1;
+
+        half_src_pitch = (src_pitch >> 1);
+        read_idx = -1;
+        tmp_src_pitch = src_pitch;
+
+    }
+
+
+    pDst =	dst;
+    dst_pitch4	=	4 * dst_pitch;
+
+    for (row = src_width; row > 0; row -= 2)
+    {
+        for (col = disp_prop[3]; col > 0; col -= 2)
+        {
+
+
+            Cb = *pCb;
+            pCb += half_src_pitch;
+            Cr = *pCr;
+            pCr += half_src_pitch;
+
+
+            //process the bottom two pixels in RGB plane
+
+            Cb -= 128;
+            Cr -= 128;
+
+            Cg	=	Cr * (*((int32*)(clip - 400)));
+            Cg	+=	Cb * (*((int32*)(clip - 392)));
+
+            Cr	*=	(*((int32*)(clip - 396)));
+            Cb	*=	(*((int32*)(clip - 388)));
+
+
+            tmp0	=	pY[read_idx]; /* top-left pixel */
+
+            tmp1	=	(tmp0 << 16) - Cg;
+            tmp2	=	(tmp0 << 16) + Cb;
+            tmp0	=	(tmp0 << 16) + Cr;
+
+            tmp0	=	clip[tmp0>>16];
+            tmp1	=	clip[tmp1>>16];
+            tmp2	=	clip[tmp2>>16];
+#if RGB_FORMAT
+            *((uint32 *)(pDst + dst_pitch4))	=	tmp0 | (tmp1 << 8) | (tmp2 << 16)  ; /* bgr */
+#else
+            *((uint32 *)(pDst + dst_pitch4))	=	tmp2 | (tmp1 << 8) | (tmp0 << 16);  /* rgb */
+#endif
+
+            Y		=	pY[read_idx+tmp_src_pitch];  /* bottom-left pixel */
+            tmp0	=	(Y << 16) + Cr;
+            tmp1	=	(Y << 16) - Cg;
+            tmp2	=	(Y << 16) + Cb;
+
+            tmp0	=	clip[tmp0>>16];
+            tmp1	=	clip[tmp1>>16];
+            tmp2	=	clip[tmp2>>16];
+
+
+#if RGB_FORMAT
+            *((uint32 *)(pDst + dst_pitch4 + 4))	=	tmp0 | (tmp1 << 8) | (tmp2 << 16)  ; /* bgr */
+#else
+            *((uint32 *)(pDst + dst_pitch4 + 4))	=	tmp2 | (tmp1 << 8) | (tmp0 << 16);  /* rgb */
+#endif
+
+            tmp0	=	*pY; /*upper-right pixel */
+            tmp1	=	(tmp0 << 16) - Cg;
+            tmp2	=	(tmp0 << 16) + Cb;
+            tmp0	=	(tmp0 << 16) + Cr;
+
+            tmp0	=	clip[tmp0>>16];
+            tmp1	=	clip[tmp1>>16];
+            tmp2	=	clip[tmp2>>16];
+
+#if RGB_FORMAT
+            *((uint32 *)(pDst))	=	tmp0 | (tmp1 << 8) | (tmp2 << 16)  ; /* bgr */
+#else
+            *((uint32 *)(pDst))	=	tmp2 | (tmp1 << 8) | (tmp0 << 16);  /* rgb */
+#endif
+            Y		=	pY[tmp_src_pitch]; /* bottom-right pixel */
+            pY += (tmp_src_pitch << 1);
+
+            tmp1	=	(Y << 16) - Cg;
+            tmp2	=	(Y << 16) + Cb;
+            tmp0	=	(Y << 16) + Cr;
+
+            tmp0	=	clip[tmp0>>16];
+            tmp1	=	clip[tmp1>>16];
+            tmp2	=	clip[tmp2>>16];
+
+
+#if RGB_FORMAT
+            *((uint32 *)(pDst + 4))	=	tmp0 | (tmp1 << 8) | (tmp2 << 16)  ; /* bgr */
+#else
+            *((uint32 *)(pDst + 4))	=	tmp2 | (tmp1 << 8) | (tmp0 << 16);  /* rgb */
+#endif
+            pDst += 8;
+        }//end of COL
+
+        pY	+=	deltaY;
+        pCb	+=	deltaCbCr;
+        pCr	+=	deltaCbCr;
+        pDst +=	(deltaDst);
+
+    }
+
+    return 1;
+}
+
+
 // platform specific C function
 int32 cc32scaledown(uint8 **src, uint8 *dst, int32 *disp,
                     uint8 *coff_tbl, uint8 *_mRowPix, uint8 *_mColPix);
@@ -397,7 +718,6 @@
     }
 }
 
-
 int32 cc32scaledown(uint8 **src, uint8 *dst, int *disp,
                     uint8 *clip,
                     uint8 *_mRowPix, uint8 *_mColPix)
@@ -427,7 +747,6 @@
     pCr = src[2];
 
     pDst = dst;
-
     dst_pitch4 = 4 * dst_pitch;
 
     for (row = disp[3] - 1; row >= 0; row -= 2)
@@ -831,3 +1150,392 @@
 #endif
 }
 
+
+// platform specfic function in C
+int32 cc32sc_rotate(uint8 **src, uint8 *dst, int *disp,
+                    uint8 *clip, uint8 *_mRowPix,
+                    uint8 *_mColPix, bool _mIsRotateClkwise);
+
+/////////////////////////////////////////////////////////////////////////////
+// Note:: This zoom algorithm needs an extra line of RGB buffer. So, users
+// have to use GetRGBBufferSize API to get the size it needs. See GetRGBBufferSize().
+
+
+
+int32 ColorConvert32::cc32ZoomRotate(uint8 **src, uint8 *dst,
+                                     DisplayProperties *disp, uint8 *clip)
+{
+    int32 disp_prop[6];
+
+    disp_prop[0] = disp->src_pitch;
+    disp_prop[1] = disp->dst_pitch;
+    disp_prop[2] = disp->src_width;
+    disp_prop[3] = disp->src_height;
+    disp_prop[4] = disp->dst_width;
+    disp_prop[5] = disp->dst_height;
+
+    return cc32sc_rotate(src, dst, disp_prop, clip, _mRowPix, _mColPix, (_mRotation == CCROTATE_CLKWISE));
+}
+
+
+int32 cc32sc_rotate(uint8 **src, uint8 *dst, int *disp,
+                    uint8 *clip, uint8 *_mRowPix,
+                    uint8 *_mColPix, bool _mIsRotateClkwise)
+{
+#if (CCROTATE && CCSCALING)
+    uint8 *pCb, *pCr;
+    uint8 *pY;
+    uint8 *pDst;
+    int32 src_pitch, dst_pitch, dst_pitch4, src_width;
+    int32 Y, Cb, Cr, Cg;
+    int32 deltaY, dst_width4, deltaCbCr;
+    int32 row, col;
+    int32 tmp0, tmp1, tmp2;
+    uint32 rgb;
+    int32 half_src_pitch, read_idx, tmp_src_pitch;
+    int32 offset;
+
+    src_pitch = disp[0];
+    dst_pitch = disp[1];
+    src_width = disp[2];
+
+    dst_width4 = disp[4] * 4;
+
+    if (_mIsRotateClkwise)
+    {
+        deltaY = src_pitch * disp[3] + 2;
+        deltaCbCr = ((src_pitch * disp[3]) >> 2) + 1;
+
+        pY = src[0] + src_pitch * (disp[3] - 1);
+        pCb = src[1] + ((src_pitch >> 1) * ((disp[3] >> 1) - 1));
+        pCr = src[2] + ((src_pitch >> 1) * ((disp[3] >> 1) - 1));
+
+        half_src_pitch = -(src_pitch >> 1);
+        read_idx = 1;
+        tmp_src_pitch = -src_pitch;
+    }
+    else    // rotate counterclockwise
+    {
+        deltaY = -(src_pitch * disp[3] + 2);
+        deltaCbCr = -(((src_pitch * disp[3]) >> 2) + 1);
+
+        pY = src[0] + src_width - 1;
+        pCb = src[1] + (src_width >> 1) - 1;
+        pCr = src[2] + (src_width >> 1) - 1;
+
+        half_src_pitch = (src_pitch >> 1);
+        read_idx = -1;
+        tmp_src_pitch = src_pitch;
+
+    }
+
+    pDst =	dst;
+    dst_pitch4	=	4 * dst_pitch;
+
+    for (row = src_width - 1; row > 0; row -= 2)
+    { /* decrement index, _mColPix[.] is symmetric to increment index */
+        if ((_mColPix[row-1] == 0) && (_mColPix[row] == 0))
+        {
+            pCb += read_idx;
+            pCr += read_idx;
+            pY += (read_idx * 2);
+            continue;
+        }
+
+        if (_mColPix[row-1] + _mColPix[row] == 1) // do only one row, scale down
+        {
+            for (col = disp[3] - 2; col >= 0; col -= 2)
+            {/* decrement index, _mRowPix[.] is symmetric to increment index */
+
+                Cb = *pCb;
+                pCb += half_src_pitch;
+                Cr = *pCr;
+                pCr += half_src_pitch;
+
+                //load the bottom two pixels
+                Cb -= 128;
+                Cr -= 128;
+                Cg	=	Cr * (*((int32*)(clip - 400)));
+                Cg	+=	Cb * (*((int32*)(clip - 392)));
+
+                Cr	*=	(*((int32*)(clip - 396)));
+                Cb	*=	(*((int32*)(clip - 388)));
+
+                if (_mRowPix[col]) 	/* compute this pixel */
+                {
+
+
+                    Y	=	*pY;
+                    pY += tmp_src_pitch;	// upper right
+
+                    tmp1	=	(Y << 16) - Cg;
+                    tmp2	=	(Y << 16) + Cb;
+                    tmp0	=	(Y << 16) + Cr;
+
+                    tmp0	=	clip[tmp0>>16];
+                    tmp1	=	clip[tmp1>>16];
+                    tmp2	=	clip[tmp2>>16];
+#if RGB_FORMAT
+                    tmp2 = ((tmp2 << 16) | (tmp1 << 8) | tmp0);
+#else
+                    tmp2 |= ((tmp0 << 16) | (tmp1 << 8));
+#endif
+
+
+                    *((uint32*)pDst) = tmp2;
+
+
+                }
+                else  /* if(_mRowPix[col]) */
+                {
+                    pY += tmp_src_pitch;	// upper right
+                }
+
+
+                pDst += _mRowPix[col] + _mRowPix[col] + _mRowPix[col] + _mRowPix[col];
+
+
+
+                if (_mRowPix[col+1]) 	/* compute this pixel */
+                {
+
+                    Y	=	*pY;
+                    pY += tmp_src_pitch;					//upper right
+
+                    tmp1	=	(Y << 16) - Cg;
+                    tmp2	=	(Y << 16) + Cb;
+                    tmp0	=	(Y << 16) + Cr;
+
+                    tmp0	=	clip[tmp0>>16];
+                    tmp1	=	clip[tmp1>>16];
+                    tmp2	=	clip[tmp2>>16];
+#if RGB_FORMAT
+                    tmp2 = ((tmp2 << 16) | (tmp1 << 8) | tmp0);
+#else
+                    tmp2 |= ((tmp0 << 16) | (tmp1 << 8));
+#endif
+
+
+
+                    *((uint32*)pDst) = tmp2;
+
+
+                }
+                else  /* if(_mRowPix[col]) */
+                {
+                    pY += tmp_src_pitch;	// upper right
+                }
+
+                pDst	+= (_mRowPix[col+1] + _mRowPix[col+1] + _mRowPix[col+1] + _mRowPix[col+1]);
+
+
+            }
+
+            pY	+=	deltaY;
+            pCb +=	deltaCbCr;
+            pCr +=	deltaCbCr;
+            pDst += dst_pitch4;
+            pDst -=	(dst_width4);	//goes back to the beginning of the line;
+
+        }//end of COL
+
+        else   // do two rows at least, scale up or down
+        {
+            for (col = disp[3] - 2; col >= 0; col -= 2)
+            {/* decrement index, _mRowPix[.] is  symmetric to increment index */
+
+                Cb = *pCb;
+                pCb += half_src_pitch;
+                Cr = *pCr;
+                pCr += half_src_pitch;
+
+                //load the bottom two pixels
+                Cb -= 128;
+                Cr -= 128;
+                Cg	=	Cr * (*((int32*)(clip - 400)));
+                Cg	+=	Cb * (*((int32*)(clip - 392)));
+
+                Cr	*=	(*((int32*)(clip - 396)));
+                Cb	*=	(*((int32*)(clip - 388)));
+
+                if (_mRowPix[col]) 	/* compute this pixel */
+                {
+
+                    tmp0	=	pY[read_idx];		// bottom left
+
+                    tmp1	=	(tmp0 << 16) - Cg;
+                    tmp2	=	(tmp0 << 16) + Cb;
+                    tmp0	=	(tmp0 << 16) + Cr;
+
+                    tmp0	=	clip[tmp0>>16];
+                    tmp1	=	clip[tmp1>>16];
+                    tmp2	=	clip[tmp2>>16];
+#if RGB_FORMAT
+                    rgb = tmp0 | (tmp1 << 8) | (tmp2 << 16);
+#else
+                    rgb = tmp2 | (tmp1 << 8) | (tmp0 << 16);
+#endif
+                    Y	=	*pY;
+                    pY += tmp_src_pitch;	// upper right
+
+                    tmp1	=	(Y << 16) - Cg;
+                    tmp2	=	(Y << 16) + Cb;
+                    tmp0	=	(Y << 16) + Cr;
+
+                    tmp0	=	clip[tmp0>>16];
+                    tmp1	=	clip[tmp1>>16];
+                    tmp2	=	clip[tmp2>>16];
+#if RGB_FORMAT
+                    tmp2 = ((tmp2 << 16) | (tmp1 << 8) | tmp0);
+#else
+                    tmp2 |= ((tmp0 << 16) | (tmp1 << 8));
+#endif
+                    if (_mRowPix[col] == 2)
+                    {
+
+                        *((uint32 *)(pDst + dst_pitch4))	=	rgb;
+                        *((uint32*)pDst) = tmp2;
+                        *((uint32*)(pDst + dst_pitch4 + 4))	=	rgb;
+                        *((uint32*)(pDst + 4)) = tmp2 ;
+                    }
+                    else if (_mRowPix[col] == 3)
+                    {
+
+                        *((uint32*)(pDst + dst_pitch4 + 4))	=	rgb;
+                        *((uint32*)(pDst + dst_pitch4 + 8))	=	rgb;
+                        *((uint32*)(pDst + 4)) = tmp2 ;
+                        *((uint32*)(pDst + 8)) = tmp2 ;
+
+                    }
+                    else
+                    {
+
+                        *((uint32 *)(pDst + dst_pitch4))	=	rgb;
+                        *((uint32*)pDst) = tmp2;
+                    }
+
+                }
+                else  /* if(_mRowPix[col]) */
+                {
+                    pY += tmp_src_pitch;	// upper right
+                }
+
+
+                pDst += (_mRowPix[col] + _mRowPix[col] + _mRowPix[col] + _mRowPix[col]);
+
+
+
+                if (_mRowPix[col+1]) 	/* compute this pixel */
+                {
+                    //load the top two pixels
+                    tmp0	=	pY[read_idx];	//bottom right
+
+                    tmp1	=	(tmp0 << 16) - Cg;
+                    tmp2	=	(tmp0 << 16) + Cb;
+                    tmp0	=	(tmp0 << 16) + Cr;
+
+                    tmp0	=	clip[tmp0>>16];
+                    tmp1	=	clip[tmp1>>16];
+                    tmp2	=	clip[tmp2>>16];
+#if RGB_FORMAT
+                    rgb = tmp0 | (tmp1 << 8) | (tmp2 << 16);
+#else
+                    rgb = tmp2 | (tmp1 << 8) | (tmp0 << 16);
+#endif
+                    Y	=	*pY;
+                    pY += tmp_src_pitch;					//upper right
+
+                    tmp1	=	(Y << 16) - Cg;
+                    tmp2	=	(Y << 16) + Cb;
+                    tmp0	=	(Y << 16) + Cr;
+
+                    tmp0	=	clip[tmp0>>16];
+                    tmp1	=	clip[tmp1>>16];
+                    tmp2	=	clip[tmp2>>16];
+#if RGB_FORMAT
+                    tmp2 = ((tmp2 << 16) | (tmp1 << 8) | tmp0);
+#else
+                    tmp2 |= ((tmp0 << 16) | (tmp1 << 8));
+#endif
+
+                    if (_mRowPix[col+1] == 2)
+                    {
+
+                        *((uint32 *)(pDst + dst_pitch4))	=	rgb;
+                        *((uint32*)pDst) = tmp2;
+                        *((uint32*)(pDst + dst_pitch4 + 4))	=	rgb;
+                        *((uint32*)(pDst + 4)) = tmp2 ;
+                    }
+                    else if (_mRowPix[col+1] == 3)
+                    {
+
+                        *((uint32*)(pDst + dst_pitch4 + 4))	=	rgb;
+                        *((uint32*)(pDst + dst_pitch4 + 8))	=	rgb;
+                        *((uint32*)(pDst + 4)) = tmp2 ;
+                        *((uint32*)(pDst + 8)) = tmp2 ;
+                    }
+                    else
+                    {
+                        *((uint32 *)(pDst + dst_pitch4))	=	rgb;
+                        *((uint32*)pDst) = tmp2;
+                    }
+
+                }
+                else  /* if(_mRowPix[col]) */
+                {
+                    pY += tmp_src_pitch;	// upper right
+                }
+
+                pDst	+= (_mRowPix[col+1] + _mRowPix[col+1] + _mRowPix[col+1] + _mRowPix[col+1]);
+
+            }//end of COL
+
+            pY	+=	deltaY;
+            pCb +=	deltaCbCr;
+            pCr +=	deltaCbCr;
+            pDst -=	(dst_width4);	//goes back to the beginning of the line;
+
+            //copy down
+            offset = (_mColPix[row] * dst_pitch4);
+
+            if (_mColPix[row-1] && _mColPix[row] != 1)
+            {
+                oscl_memcpy(pDst + offset, pDst + dst_pitch4, dst_width4);
+            }
+            if (_mColPix[row-1] == 2)
+            {
+                oscl_memcpy(pDst + offset + dst_pitch4, pDst + dst_pitch4, dst_width4);
+            }
+            else if (_mColPix[row-1] == 3)
+            {
+                oscl_memcpy(pDst + offset + dst_pitch4, pDst + dst_pitch4, dst_width4);
+                oscl_memcpy(pDst + offset + dst_pitch4*2, pDst + dst_pitch4, dst_width4);
+            }
+
+            //copy up
+            if (_mColPix[row] == 2)
+            {
+                oscl_memcpy(pDst + dst_pitch4, pDst, dst_width4);
+            }
+            else if (_mColPix[row] == 3)
+            {
+                oscl_memcpy(pDst + dst_pitch4, pDst, dst_width4);
+                oscl_memcpy(pDst + dst_pitch4*2, pDst, dst_width4);
+            }
+
+            pDst += dst_pitch4 * (_mColPix[row-1] + _mColPix[row]);
+
+        }
+
+
+    } // end of row
+
+    return 1;
+#else
+    return 0;
+#endif // defined(CCROTATE) && defined(CCSCALING)
+}
+
+
+
+
diff --git a/codecs_v2/utilities/pv_config_parser/src/pv_audio_config_parser.cpp b/codecs_v2/utilities/pv_config_parser/src/pv_audio_config_parser.cpp
index 7c51374..75ff66c 100644
--- a/codecs_v2/utilities/pv_config_parser/src/pv_audio_config_parser.cpp
+++ b/codecs_v2/utilities/pv_config_parser/src/pv_audio_config_parser.cpp
@@ -357,6 +357,7 @@
         }
     }
     else if (aInputs->iMimeType == PVMF_MIME_MPEG4_AUDIO || // AAC
+             aInputs->iMimeType == PVMF_MIME_3640 ||
              aInputs->iMimeType == PVMF_MIME_LATM ||
              aInputs->iMimeType == PVMF_MIME_ADIF ||
              aInputs->iMimeType == PVMF_MIME_ASF_MPEG4_AUDIO ||
diff --git a/codecs_v2/video/avc_h264/dec/src/header.cpp b/codecs_v2/video/avc_h264/dec/src/header.cpp
index 28f678c..b082f30 100644
--- a/codecs_v2/video/avc_h264/dec/src/header.cpp
+++ b/codecs_v2/video/avc_h264/dec/src/header.cpp
@@ -541,7 +541,7 @@
 
     if (sliceHdr->first_mb_in_slice != 0)
     {
-        if ((int)sliceHdr->slice_type >= 5 && slice_type != (int)sliceHdr->slice_type)
+        if ((int)sliceHdr->slice_type >= 5 && slice_type != (int)sliceHdr->slice_type - 5)
         {
             return AVCDEC_FAIL; /* slice type doesn't follow the first slice in the picture */
         }
diff --git a/codecs_v2/video/avc_h264/enc/src/init.cpp b/codecs_v2/video/avc_h264/enc/src/init.cpp
index e3bf7d6..96185c5 100644
--- a/codecs_v2/video/avc_h264/enc/src/init.cpp
+++ b/codecs_v2/video/avc_h264/enc/src/init.cpp
@@ -151,7 +151,7 @@
         seqParam->frame_crop_top_offset = 0;
         seqParam->vui_parameters_present_flag = FALSE; /* default */
     }
-    else // use external SPS and PPS
+    else if (extS) // use external SPS and PPS
     {
         seqParam->seq_parameter_set_id = extS->seq_parameter_set_id;
         seqParam->log2_max_frame_num_minus4 = extS->log2_max_frame_num_minus4;
@@ -224,6 +224,10 @@
             oscl_memcpy(&(seqParam->vui_parameters), &(extS->vui_parameters), sizeof(AVCVUIParams));
         }
     }
+    else
+    {
+        return AVCENC_NOT_SUPPORTED;
+    }
 
     /***************** now PPS ******************************/
     if (!extP && !extS)
@@ -330,7 +334,7 @@
         picParam->constrained_intra_pred_flag = (encParam->constrained_intra_pred == AVC_ON) ? TRUE : FALSE;
         picParam->redundant_pic_cnt_present_flag = 0; /* default */
     }
-    else // external PPS
+    else if (extP)// external PPS
     {
         picParam->pic_parameter_set_id = extP->pic_parameter_set_id - 1; /* to be increased by one */
         picParam->seq_parameter_set_id = extP->seq_parameter_set_id;
@@ -455,6 +459,10 @@
         }
         picParam->redundant_pic_cnt_present_flag = extP->redundant_pic_cnt_present_flag; /* default */
     }
+    else
+    {
+        return AVCENC_NOT_SUPPORTED;
+    }
 
     /****************** now set up some SliceHeader parameters ***********/
     if (picParam->deblocking_filter_control_present_flag == TRUE)
diff --git a/codecs_v2/video/avc_h264/enc/src/slice.cpp b/codecs_v2/video/avc_h264/enc/src/slice.cpp
index ca67084..bbf9654 100644
--- a/codecs_v2/video/avc_h264/enc/src/slice.cpp
+++ b/codecs_v2/video/avc_h264/enc/src/slice.cpp
@@ -116,7 +116,7 @@
             {
                 /* find first_mb_num for the next slice */
                 CurrMbAddr = 0;
-                while (video->mblock[CurrMbAddr].slice_id != encvid->currSliceGroup &&
+                while (video->MbToSliceGroupMap[CurrMbAddr] != encvid->currSliceGroup &&
                         (uint)CurrMbAddr < video->PicSizeInMbs)
                 {
                     CurrMbAddr++;
diff --git a/codecs_v2/video/m4v_h263/dec/src/vlc_dequant.cpp b/codecs_v2/video/m4v_h263/dec/src/vlc_dequant.cpp
index 26ac8ae..9faa957 100644
--- a/codecs_v2/video/m4v_h263/dec/src/vlc_dequant.cpp
+++ b/codecs_v2/video/m4v_h263/dec/src/vlc_dequant.cpp
@@ -51,6 +51,7 @@
                              uint8 *bitmapcol, uint8 *bitmaprow)
 {
     VideoDecData *video = (VideoDecData*) vid;
+    Vol *currVol = video->vol[video->currLayer];
     BitstreamDecVideo *stream = video->bitstream;
     int16 *datablock = video->mblock->block[comp]; /* 10/20/2000, assume it has been reset of all-zero !!!*/
     int mbnum = video->mbnum;
@@ -384,10 +385,10 @@
 {
     VideoDecData *video = (VideoDecData*) vid;
     BitstreamDecVideo *stream = video->bitstream;
+    Vol *currVol = video->vol[video->currLayer];
     int16 *datablock = video->mblock->block[comp]; /* 10/20/2000, assume it has been reset of all-zero !!!*/
     int mbnum = video->mbnum;
     int QP = video->QPMB[mbnum];
-    uint8 *pbyte;
     /*** VLC *****/
     int i, k;
     Tcoef run_level;
diff --git a/codecs_v2/video/m4v_h263/enc/src/mp4enc_api.cpp b/codecs_v2/video/m4v_h263/enc/src/mp4enc_api.cpp
index ac4fff7..16d8c74 100644
--- a/codecs_v2/video/m4v_h263/enc/src/mp4enc_api.cpp
+++ b/codecs_v2/video/m4v_h263/enc/src/mp4enc_api.cpp
@@ -1396,6 +1396,8 @@
 
     encodeVop = DetermineCodingLayer(video, nLayer, modTime);
     currLayer = *nLayer;
+    if ((currLayer < 0) || (currLayer > encParams->nLayers - 1))
+        return PV_FALSE;
 
     /******************************************/
     /* If post-skipping still effective --- return */
diff --git a/codecs_v2/video/m4v_h263/enc/src/pvm4vencoder.cpp b/codecs_v2/video/m4v_h263/enc/src/pvm4vencoder.cpp
index 6d1209d..0511077 100644
--- a/codecs_v2/video/m4v_h263/enc/src/pvm4vencoder.cpp
+++ b/codecs_v2/video/m4v_h263/enc/src/pvm4vencoder.cpp
@@ -255,6 +255,8 @@
     uint32 codeword;
     mp4StreamType *psBits;
     psBits = (mp4StreamType *) oscl_malloc(sizeof(mp4StreamType));
+    if (psBits == NULL)
+        return ECVEI_FAIL;
     psBits->data = aFSIBuff;
     psBits->numBytes = FSILength;
     psBits->bitBuf = 0;
@@ -306,31 +308,31 @@
             }
             default:
             {
-                return ECVEI_FAIL;
+                goto FREE_PS_BITS_AND_FAIL;
             }
         }
 
         ShowBits(psBits, 32, &codeword);
         if (codeword == USER_DATA_START_CODE)
         {
-            return ECVEI_FAIL;
+            goto FREE_PS_BITS_AND_FAIL;
         }
 
         //visual_object_start_code
         ReadBits(psBits, 32, &codeword);
-        if (codeword != VISUAL_OBJECT_START_CODE) return ECVEI_FAIL;
+        if (codeword != VISUAL_OBJECT_START_CODE) goto FREE_PS_BITS_AND_FAIL;
 
         /*  is_visual_object_identifier            */
         ReadBits(psBits, 1, &codeword);
-        if (codeword) return ECVEI_FAIL;
+        if (codeword) goto FREE_PS_BITS_AND_FAIL;
 
         /* visual_object_type                                 */
         ReadBits(psBits, 4, &codeword);
-        if (codeword != 1) return ECVEI_FAIL;
+        if (codeword != 1) goto FREE_PS_BITS_AND_FAIL;
 
         /* video_signal_type */
         ReadBits(psBits, 1, &codeword);
-        if (codeword) return ECVEI_FAIL;
+        if (codeword) goto FREE_PS_BITS_AND_FAIL;
 
         /* next_start_code() */
         ByteAlign(psBits);
@@ -338,7 +340,7 @@
         ShowBits(psBits, 32, &codeword);
         if (codeword == USER_DATA_START_CODE)
         {
-            return ECVEI_FAIL;
+            goto FREE_PS_BITS_AND_FAIL;
         }
     }
 
@@ -361,7 +363,7 @@
             }
             else
             {
-                return ECVEI_FAIL;
+                goto FREE_PS_BITS_AND_FAIL;
 
             }
         }
@@ -378,28 +380,28 @@
         ReadBits(psBits, 8, &codeword);
         if (codeword > 2)
         {
-            return ECVEI_FAIL;
+            goto FREE_PS_BITS_AND_FAIL;
         }
 
         // is_object_layer_identifier
         ReadBits(psBits, 1, &codeword);
-        if (codeword) return ECVEI_FAIL;
+        if (codeword) goto FREE_PS_BITS_AND_FAIL;
 
         // aspect ratio
         ReadBits(psBits, 4, &codeword);
-        if (codeword != 1) return ECVEI_FAIL;
+        if (codeword != 1) goto FREE_PS_BITS_AND_FAIL;
 
         //vol_control_parameters
         ReadBits(psBits, 1, &codeword);
-        if (codeword != 0) return ECVEI_FAIL;
+        if (codeword != 0) goto FREE_PS_BITS_AND_FAIL;
 
         //		video_object_layer_shape
         ReadBits(psBits, 2, &codeword);
-        if (codeword != 0) return ECVEI_FAIL;
+        if (codeword != 0) goto FREE_PS_BITS_AND_FAIL;
 
         //Marker bit
         ReadBits(psBits, 1, &codeword);
-        if (codeword != 1) return ECVEI_FAIL;
+        if (codeword != 1) goto FREE_PS_BITS_AND_FAIL;
 
         //	vop_time_increment_resolution
         ReadBits(psBits, 16, &codeword);
@@ -408,16 +410,16 @@
         //Marker bit
         ReadBits(psBits, 1, &codeword);
         if (codeword != 1)
-            return ECVEI_FAIL;
+            goto FREE_PS_BITS_AND_FAIL;
 
         //		fixed_vop_rate
         ReadBits(psBits, 1, &codeword);
-        if (codeword != 0) return ECVEI_FAIL;
+        if (codeword != 0) goto FREE_PS_BITS_AND_FAIL;
 
         /* video_object_layer_shape is RECTANGULAR */
         //Marker bit
         ReadBits(psBits, 1, &codeword);
-        if (codeword != 1) return ECVEI_FAIL;
+        if (codeword != 1) goto FREE_PS_BITS_AND_FAIL;
 
         /* this should be 176 for QCIF */
         ReadBits(psBits, 13, &codeword);
@@ -425,7 +427,7 @@
 
         //Marker bit
         ReadBits(psBits, 1, &codeword);
-        if (codeword != 1) return ECVEI_FAIL;
+        if (codeword != 1) goto FREE_PS_BITS_AND_FAIL;
 
         /* this should be 144 for QCIF */
         ReadBits(psBits, 13, &codeword);
@@ -433,23 +435,23 @@
 
         //Marker bit
         ReadBits(psBits, 1, &codeword);
-        if (codeword != 1) return ECVEI_FAIL;
+        if (codeword != 1) goto FREE_PS_BITS_AND_FAIL;
 
         //Interlaced
         ReadBits(psBits, 1, &codeword);
-        if (codeword != 0) return ECVEI_FAIL;
+        if (codeword != 0) goto FREE_PS_BITS_AND_FAIL;
 
         //obmc_disable
         ReadBits(psBits, 1, &codeword);
-        if (codeword != 1) return ECVEI_FAIL;
+        if (codeword != 1) goto FREE_PS_BITS_AND_FAIL;
 
         //sprite_enable
         ReadBits(psBits, 1, &codeword);
-        if (codeword != 0) return ECVEI_FAIL;
+        if (codeword != 0) goto FREE_PS_BITS_AND_FAIL;
 
         //not_8_bit
         ReadBits(psBits, 1, &codeword);
-        if (codeword != 0) return ECVEI_FAIL;
+        if (codeword != 0) goto FREE_PS_BITS_AND_FAIL;
 
         /* video_object_layer_shape is not GRAY_SCALE  */
         //quant_type
@@ -458,10 +460,10 @@
         if (codeword != 0) //quant_type = 1
         {
             ReadBits(psBits, 1, &codeword); //load_intra_quant_mat
-            if (codeword) return ECVEI_FAIL; // No support for user defined matrix.
+            if (codeword) goto FREE_PS_BITS_AND_FAIL; // No support for user defined matrix.
 
             ReadBits(psBits, 1, &codeword); //load_nonintra_quant_mat
-            if (codeword) return ECVEI_FAIL; // No support for user defined matrix.
+            if (codeword) goto FREE_PS_BITS_AND_FAIL; // No support for user defined matrix.
 
         }
 
@@ -469,7 +471,7 @@
         ReadBits(psBits, 1, &codeword);
         if (!codeword)
         {
-            return ECVEI_FAIL;
+            goto FREE_PS_BITS_AND_FAIL;
         }
 
         //resync_marker_disable
@@ -504,7 +506,7 @@
 
         //scalability
         ReadBits(psBits, 1, &codeword);
-        if (codeword) return ECVEI_FAIL;
+        if (codeword) goto FREE_PS_BITS_AND_FAIL;
 
     }
     else
@@ -517,11 +519,17 @@
         }
         else
         {
-            return ECVEI_FAIL;
+            goto FREE_PS_BITS_AND_FAIL;
 
         }
     }
     return ECVEI_SUCCESS;
+
+FREE_PS_BITS_AND_FAIL:
+
+    oscl_free(psBits);
+
+    return ECVEI_FAIL;
 }
 
 int16 CPVM4VEncoder::iDecodeShortHeader(mp4StreamType *psBits, VideoEncOptions *aEncOption)
diff --git a/doc/omx_core_integration_guide.pdf b/doc/omx_core_integration_guide.pdf
index e6c76b8..ac441d4 100755
--- a/doc/omx_core_integration_guide.pdf
+++ b/doc/omx_core_integration_guide.pdf
Binary files differ
diff --git a/doc/openmax_call_sequences.pdf b/doc/openmax_call_sequences.pdf
index 6ff57c2..8b1d1f8 100644
--- a/doc/openmax_call_sequences.pdf
+++ b/doc/openmax_call_sequences.pdf
Binary files differ
diff --git a/doc/oscl_api.pdf b/doc/oscl_api.pdf
index 737a296..3588c43 100644
--- a/doc/oscl_api.pdf
+++ b/doc/oscl_api.pdf
Binary files differ
diff --git a/doc/oscl_html/annotated.html b/doc/oscl_html/annotated.html
index edf03e0..488424a 100644
--- a/doc/oscl_html/annotated.html
+++ b/doc/oscl_html/annotated.html
@@ -276,7 +276,7 @@
   <tr><td class="indexkey"><a class="el" href="structWStrPtrLen.html">WStrPtrLen</a></td><td class="indexvalue">This data structure encapsulates a set of functions used to perform</td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classAcceptParam.html b/doc/oscl_html/classAcceptParam.html
index 9e8fd67..2ac503a 100644
--- a/doc/oscl_html/classAcceptParam.html
+++ b/doc/oscl_html/classAcceptParam.html
@@ -76,7 +76,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__request_8h-source.html">oscl_socket_request.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classAllPassFilter.html b/doc/oscl_html/classAllPassFilter.html
index c90907f..794a3d7 100644
--- a/doc/oscl_html/classAllPassFilter.html
+++ b/doc/oscl_html/classAllPassFilter.html
@@ -254,7 +254,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pvlogger__accessories_8h-source.html">pvlogger_accessories.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classBindParam.html b/doc/oscl_html/classBindParam.html
index b8673ba..4ed3cfa 100644
--- a/doc/oscl_html/classBindParam.html
+++ b/doc/oscl_html/classBindParam.html
@@ -76,7 +76,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__request_8h-source.html">oscl_socket_request.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classBufFragGroup.html b/doc/oscl_html/classBufFragGroup.html
index 2e1d415..5099179 100644
--- a/doc/oscl_html/classBufFragGroup.html
+++ b/doc/oscl_html/classBufFragGroup.html
@@ -484,7 +484,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__media__data_8h-source.html">oscl_media_data.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classBufFragStatusClass.html b/doc/oscl_html/classBufFragStatusClass.html
index 30fe51f..d6aac87 100644
--- a/doc/oscl_html/classBufFragStatusClass.html
+++ b/doc/oscl_html/classBufFragStatusClass.html
@@ -78,7 +78,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__media__status_8h-source.html">oscl_media_status.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classBufferFragment.html b/doc/oscl_html/classBufferFragment.html
index 3e72661..0ffd806 100644
--- a/doc/oscl_html/classBufferFragment.html
+++ b/doc/oscl_html/classBufferFragment.html
@@ -22,7 +22,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__media__data_8h-source.html">oscl_media_data.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classBufferMgr.html b/doc/oscl_html/classBufferMgr.html
index 02daee3..8f95a13 100644
--- a/doc/oscl_html/classBufferMgr.html
+++ b/doc/oscl_html/classBufferMgr.html
@@ -88,7 +88,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__media__data_8h-source.html">oscl_media_data.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classBufferState.html b/doc/oscl_html/classBufferState.html
index 1a6dd4a..a2f6252 100644
--- a/doc/oscl_html/classBufferState.html
+++ b/doc/oscl_html/classBufferState.html
@@ -379,7 +379,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__media__data_8h-source.html">oscl_media_data.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classCFastRep.html b/doc/oscl_html/classCFastRep.html
index 751a903..20265be 100644
--- a/doc/oscl_html/classCFastRep.html
+++ b/doc/oscl_html/classCFastRep.html
@@ -392,7 +392,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__string__rep_8h-source.html">oscl_string_rep.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classCHeapRep.html b/doc/oscl_html/classCHeapRep.html
index 866fd67..a8ee45a 100644
--- a/doc/oscl_html/classCHeapRep.html
+++ b/doc/oscl_html/classCHeapRep.html
@@ -659,7 +659,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__string__rep_8h-source.html">oscl_string_rep.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classCStackRep.html b/doc/oscl_html/classCStackRep.html
index 09b1843..3a07cd0 100644
--- a/doc/oscl_html/classCStackRep.html
+++ b/doc/oscl_html/classCStackRep.html
@@ -279,7 +279,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__string__rep_8h-source.html">oscl_string_rep.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classCallbackTimer.html b/doc/oscl_html/classCallbackTimer.html
index 61b3173..2bb0d9f 100644
--- a/doc/oscl_html/classCallbackTimer.html
+++ b/doc/oscl_html/classCallbackTimer.html
@@ -159,7 +159,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__timer_8h-source.html">oscl_timer.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classCallbackTimerObserver.html b/doc/oscl_html/classCallbackTimerObserver.html
index 5a273d8..7597393 100644
--- a/doc/oscl_html/classCallbackTimerObserver.html
+++ b/doc/oscl_html/classCallbackTimerObserver.html
@@ -82,7 +82,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__timer_8h-source.html">oscl_timer.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classConnectParam.html b/doc/oscl_html/classConnectParam.html
index e7b9cfb..608c116 100644
--- a/doc/oscl_html/classConnectParam.html
+++ b/doc/oscl_html/classConnectParam.html
@@ -76,7 +76,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__request_8h-source.html">oscl_socket_request.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classDNSRequestParam.html b/doc/oscl_html/classDNSRequestParam.html
index 112ce5d..c3cb0bb 100644
--- a/doc/oscl_html/classDNSRequestParam.html
+++ b/doc/oscl_html/classDNSRequestParam.html
@@ -21,10 +21,10 @@
 <tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classDNSRequestParam.html#a2">InThread</a> ()</td></tr>
 <tr><td nowrap align=right valign=top>virtual void&nbsp;</td><td valign=bottom><a class="el" href="classDNSRequestParam.html#a3">Destroy</a> ()=0</td></tr>
 <tr><td colspan=2><br><h2>Data Fields</h2></td></tr>
-<tr><td nowrap align=right valign=top><a class="el" href="group__osclio.html#a23">TPVDNSFxn</a>&nbsp;</td><td valign=bottom><a class="el" href="classDNSRequestParam.html#m0">iFxn</a></td></tr>
+<tr><td nowrap align=right valign=top><a class="el" href="group__osclio.html#a24">TPVDNSFxn</a>&nbsp;</td><td valign=bottom><a class="el" href="classDNSRequestParam.html#m0">iFxn</a></td></tr>
 <tr><td nowrap align=right valign=top><a class="el" href="classOsclDNSRequest.html">OsclDNSRequest</a> *&nbsp;</td><td valign=bottom><a class="el" href="classDNSRequestParam.html#m1">iDNSRequest</a></td></tr>
 <tr><td colspan=2><br><h2>Protected Methods</h2></td></tr>
-<tr><td nowrap align=right valign=top>&nbsp;</td><td valign=bottom><a class="el" href="classDNSRequestParam.html#b0">DNSRequestParam</a> (<a class="el" href="group__osclio.html#a23">TPVDNSFxn</a> aFxn)</td></tr>
+<tr><td nowrap align=right valign=top>&nbsp;</td><td valign=bottom><a class="el" href="classDNSRequestParam.html#b0">DNSRequestParam</a> (<a class="el" href="group__osclio.html#a24">TPVDNSFxn</a> aFxn)</td></tr>
 <tr><td colspan=2><br><h2>Protected Attributes</h2></td></tr>
 <tr><td nowrap align=right valign=top>uint32&nbsp;</td><td valign=bottom><a class="el" href="classDNSRequestParam.html#n0">iRefCount</a></td></tr>
 </table>
@@ -65,7 +65,7 @@
         <tr>
           <td class="md" nowrap valign="top"> DNSRequestParam::DNSRequestParam </td>
           <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="group__osclio.html#a23">TPVDNSFxn</a>&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="group__osclio.html#a24">TPVDNSFxn</a>&nbsp;</td>
           <td class="mdname1" valign="top" nowrap>&nbsp; <em>aFxn</em>          </td>
           <td class="md" valign="top">)&nbsp;</td>
           <td class="md" nowrap><code> [protected]</code></td>
@@ -202,7 +202,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> <a class="el" href="group__osclio.html#a23">TPVDNSFxn</a> DNSRequestParam::iFxn
+          <td class="md" nowrap valign="top"> <a class="el" href="group__osclio.html#a24">TPVDNSFxn</a> DNSRequestParam::iFxn
       </table>
     </td>
   </tr>
@@ -243,7 +243,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__dns__param_8h-source.html">oscl_dns_param.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classGetHostByNameParam.html b/doc/oscl_html/classGetHostByNameParam.html
index 74815c0..1ffe0d9 100644
--- a/doc/oscl_html/classGetHostByNameParam.html
+++ b/doc/oscl_html/classGetHostByNameParam.html
@@ -170,7 +170,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__dns__param_8h-source.html">oscl_dns_param.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classHeapBase.html b/doc/oscl_html/classHeapBase.html
index daaeeb4..779cb70 100644
--- a/doc/oscl_html/classHeapBase.html
+++ b/doc/oscl_html/classHeapBase.html
@@ -106,7 +106,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__mem_8h-source.html">oscl_mem.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classLinkedListElement.html b/doc/oscl_html/classLinkedListElement.html
index 7c64395..9a454fa 100644
--- a/doc/oscl_html/classLinkedListElement.html
+++ b/doc/oscl_html/classLinkedListElement.html
@@ -115,7 +115,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__linked__list_8h-source.html">oscl_linked_list.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classListenParam.html b/doc/oscl_html/classListenParam.html
index 295fcad..95b95bd 100644
--- a/doc/oscl_html/classListenParam.html
+++ b/doc/oscl_html/classListenParam.html
@@ -76,7 +76,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__request_8h-source.html">oscl_socket_request.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classMM__Audit__Imp.html b/doc/oscl_html/classMM__Audit__Imp.html
index a622c83..6a3b938 100644
--- a/doc/oscl_html/classMM__Audit__Imp.html
+++ b/doc/oscl_html/classMM__Audit__Imp.html
@@ -1607,7 +1607,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__mem__audit_8h-source.html">oscl_mem_audit.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classMediaData.html b/doc/oscl_html/classMediaData.html
index 22ead3a..fe6ce66 100644
--- a/doc/oscl_html/classMediaData.html
+++ b/doc/oscl_html/classMediaData.html
@@ -585,7 +585,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__media__data_8h-source.html">oscl_media_data.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classMediaStatusClass.html b/doc/oscl_html/classMediaStatusClass.html
index 3fe17bd..e4853c1 100644
--- a/doc/oscl_html/classMediaStatusClass.html
+++ b/doc/oscl_html/classMediaStatusClass.html
@@ -22,7 +22,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__media__status_8h-source.html">oscl_media_status.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classMemAllocator.html b/doc/oscl_html/classMemAllocator.html
index 3629e5e..3b8e303 100644
--- a/doc/oscl_html/classMemAllocator.html
+++ b/doc/oscl_html/classMemAllocator.html
@@ -162,7 +162,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__media__data_8h-source.html">oscl_media_data.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classNTPTime.html b/doc/oscl_html/classNTPTime.html
index 10677dc..0dae600 100644
--- a/doc/oscl_html/classNTPTime.html
+++ b/doc/oscl_html/classNTPTime.html
@@ -627,7 +627,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__time_8h-source.html">oscl_time.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOSCLMemAutoPtr.html b/doc/oscl_html/classOSCLMemAutoPtr.html
index 3c99e60..f35ea64 100644
--- a/doc/oscl_html/classOSCLMemAutoPtr.html
+++ b/doc/oscl_html/classOSCLMemAutoPtr.html
@@ -501,7 +501,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__mem__auto__ptr_8h-source.html">oscl_mem_auto_ptr.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOSCL__FastString.html b/doc/oscl_html/classOSCL__FastString.html
index 37baa8e..9013004 100644
--- a/doc/oscl_html/classOSCL__FastString.html
+++ b/doc/oscl_html/classOSCL__FastString.html
@@ -516,7 +516,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__string__containers_8h-source.html">oscl_string_containers.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOSCL__HeapString.html b/doc/oscl_html/classOSCL__HeapString.html
index 36d2b49..8c27a94 100644
--- a/doc/oscl_html/classOSCL__HeapString.html
+++ b/doc/oscl_html/classOSCL__HeapString.html
@@ -114,7 +114,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__string__containers_8h-source.html">oscl_string_containers.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOSCL__HeapStringA.html b/doc/oscl_html/classOSCL__HeapStringA.html
index d79513e..4297189 100644
--- a/doc/oscl_html/classOSCL__HeapStringA.html
+++ b/doc/oscl_html/classOSCL__HeapStringA.html
@@ -689,7 +689,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__string__containers_8h-source.html">oscl_string_containers.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOSCL__StackString.html b/doc/oscl_html/classOSCL__StackString.html
index e115b46..fca2d0a 100644
--- a/doc/oscl_html/classOSCL__StackString.html
+++ b/doc/oscl_html/classOSCL__StackString.html
@@ -114,7 +114,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__string__containers_8h-source.html">oscl_string_containers.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOSCL__String.html b/doc/oscl_html/classOSCL__String.html
index f045efc..15de476 100644
--- a/doc/oscl_html/classOSCL__String.html
+++ b/doc/oscl_html/classOSCL__String.html
@@ -971,7 +971,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__string_8h-source.html">oscl_string.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOSCL__wFastString.html b/doc/oscl_html/classOSCL__wFastString.html
index 71bab0f..b51c4b7 100644
--- a/doc/oscl_html/classOSCL__wFastString.html
+++ b/doc/oscl_html/classOSCL__wFastString.html
@@ -491,7 +491,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__string__containers_8h-source.html">oscl_string_containers.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOSCL__wHeapString.html b/doc/oscl_html/classOSCL__wHeapString.html
index e148553..113510b 100644
--- a/doc/oscl_html/classOSCL__wHeapString.html
+++ b/doc/oscl_html/classOSCL__wHeapString.html
@@ -103,7 +103,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__string__containers_8h-source.html">oscl_string_containers.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOSCL__wHeapStringA.html b/doc/oscl_html/classOSCL__wHeapStringA.html
index 242ea8b..aefb68d 100644
--- a/doc/oscl_html/classOSCL__wHeapStringA.html
+++ b/doc/oscl_html/classOSCL__wHeapStringA.html
@@ -650,7 +650,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__string__containers_8h-source.html">oscl_string_containers.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOSCL__wStackString.html b/doc/oscl_html/classOSCL__wStackString.html
index 4303995..1802011 100644
--- a/doc/oscl_html/classOSCL__wStackString.html
+++ b/doc/oscl_html/classOSCL__wStackString.html
@@ -103,7 +103,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__string__containers_8h-source.html">oscl_string_containers.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOSCL__wString.html b/doc/oscl_html/classOSCL__wString.html
index 0aacc08..f122520 100644
--- a/doc/oscl_html/classOSCL__wString.html
+++ b/doc/oscl_html/classOSCL__wString.html
@@ -957,7 +957,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__string_8h-source.html">oscl_string.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclAOStatus.html b/doc/oscl_html/classOsclAOStatus.html
index 21e4e45..26fd8cb 100644
--- a/doc/oscl_html/classOsclAOStatus.html
+++ b/doc/oscl_html/classOsclAOStatus.html
@@ -318,7 +318,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__aostatus_8h-source.html">oscl_aostatus.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclAcceptMethod.html b/doc/oscl_html/classOsclAcceptMethod.html
index ae90d2c..d9311f2 100644
--- a/doc/oscl_html/classOsclAcceptMethod.html
+++ b/doc/oscl_html/classOsclAcceptMethod.html
@@ -203,7 +203,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__accept_8h-source.html">oscl_socket_accept.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclAcceptRequest.html b/doc/oscl_html/classOsclAcceptRequest.html
index 51da2b0..7237b4c 100644
--- a/doc/oscl_html/classOsclAcceptRequest.html
+++ b/doc/oscl_html/classOsclAcceptRequest.html
@@ -86,7 +86,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__accept_8h-source.html">oscl_socket_accept.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclActiveObject.html b/doc/oscl_html/classOsclActiveObject.html
index d96c701..f496454 100644
--- a/doc/oscl_html/classOsclActiveObject.html
+++ b/doc/oscl_html/classOsclActiveObject.html
@@ -598,7 +598,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__scheduler__ao_8h-source.html">oscl_scheduler_ao.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclAllocDestructDealloc.html b/doc/oscl_html/classOsclAllocDestructDealloc.html
index 61cec3d..ea5a8c3 100644
--- a/doc/oscl_html/classOsclAllocDestructDealloc.html
+++ b/doc/oscl_html/classOsclAllocDestructDealloc.html
@@ -58,7 +58,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__defalloc_8h-source.html">oscl_defalloc.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclAsyncFile.html b/doc/oscl_html/classOsclAsyncFile.html
index 4b20412..c003c91 100644
--- a/doc/oscl_html/classOsclAsyncFile.html
+++ b/doc/oscl_html/classOsclAsyncFile.html
@@ -22,11 +22,11 @@
 <tr><td nowrap align=right valign=top>&nbsp;</td><td valign=bottom><a class="el" href="classOsclAsyncFile.html#a0">~OsclAsyncFile</a> ()</td></tr>
 <tr><td nowrap align=right valign=top>int32&nbsp;</td><td valign=bottom><a class="el" href="classOsclAsyncFile.html#a1">Open</a> (const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *filename, uint32 mode, const <a class="el" href="classOsclNativeFileParams.html">OsclNativeFileParams</a> &amp;params, <a class="el" href="classOscl__FileServer.html">Oscl_FileServer</a> &amp;fileserv)</td></tr>
 <tr><td nowrap align=right valign=top>int32&nbsp;</td><td valign=bottom><a class="el" href="classOsclAsyncFile.html#a2">Open</a> (const char *filename, uint32 mode, const <a class="el" href="classOsclNativeFileParams.html">OsclNativeFileParams</a> &amp;params, <a class="el" href="classOscl__FileServer.html">Oscl_FileServer</a> &amp;fileserv)</td></tr>
-<tr><td nowrap align=right valign=top>int32&nbsp;</td><td valign=bottom><a class="el" href="classOsclAsyncFile.html#a3">Seek</a> (int32 offset, <a class="el" href="classOscl__File.html#s11">Oscl_File::seek_type</a> origin)</td></tr>
-<tr><td nowrap align=right valign=top>int32&nbsp;</td><td valign=bottom><a class="el" href="classOsclAsyncFile.html#a4">Tell</a> ()</td></tr>
+<tr><td nowrap align=right valign=top>int32&nbsp;</td><td valign=bottom><a class="el" href="classOsclAsyncFile.html#a3">Seek</a> (<a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> offset, <a class="el" href="classOscl__File.html#s11">Oscl_File::seek_type</a> origin)</td></tr>
+<tr><td nowrap align=right valign=top><a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a>&nbsp;</td><td valign=bottom><a class="el" href="classOsclAsyncFile.html#a4">Tell</a> ()</td></tr>
 <tr><td nowrap align=right valign=top>uint32&nbsp;</td><td valign=bottom><a class="el" href="classOsclAsyncFile.html#a5">Read</a> (<a class="el" href="group__osclbase.html#a25">OsclAny</a> *aBuffer1, uint32 aDataSize, uint32 aNumElements)</td></tr>
 <tr><td nowrap align=right valign=top>int32&nbsp;</td><td valign=bottom><a class="el" href="classOsclAsyncFile.html#a6">EndOfFile</a> ()</td></tr>
-<tr><td nowrap align=right valign=top>int32&nbsp;</td><td valign=bottom><a class="el" href="classOsclAsyncFile.html#a7">Size</a> ()</td></tr>
+<tr><td nowrap align=right valign=top><a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a>&nbsp;</td><td valign=bottom><a class="el" href="classOsclAsyncFile.html#a7">Size</a> ()</td></tr>
 <tr><td nowrap align=right valign=top>int32&nbsp;</td><td valign=bottom><a class="el" href="classOsclAsyncFile.html#a8">Close</a> ()</td></tr>
 <tr><td nowrap align=right valign=top>uint32&nbsp;</td><td valign=bottom><a class="el" href="classOsclAsyncFile.html#a9">Write</a> (const <a class="el" href="group__osclbase.html#a25">OsclAny</a> *aBuffer1, uint32 aDataSize, uint32 aNumElements)</td></tr>
 <tr><td nowrap align=right valign=top>uint32&nbsp;</td><td valign=bottom><a class="el" href="classOsclAsyncFile.html#a10">Flush</a> ()</td></tr>
@@ -390,7 +390,7 @@
         <tr>
           <td class="md" nowrap valign="top"> int32 OsclAsyncFile::Seek </td>
           <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int32&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a>&nbsp;</td>
           <td class="mdname" nowrap>&nbsp; <em>offset</em>, </td>
         </tr>
         <tr>
@@ -426,7 +426,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> int32 OsclAsyncFile::Size </td>
+          <td class="md" nowrap valign="top"> <a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> OsclAsyncFile::Size </td>
           <td class="md" valign="top">(&nbsp;</td>
           <td class="mdname1" valign="top" nowrap>&nbsp;          </td>
           <td class="md" valign="top">)&nbsp;</td>
@@ -454,7 +454,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> int32 OsclAsyncFile::Tell </td>
+          <td class="md" nowrap valign="top"> <a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> OsclAsyncFile::Tell </td>
           <td class="md" valign="top">(&nbsp;</td>
           <td class="mdname1" valign="top" nowrap>&nbsp;          </td>
           <td class="md" valign="top">)&nbsp;</td>
@@ -568,7 +568,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__file__async__read_8h-source.html">oscl_file_async_read.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclAsyncFileBuffer.html b/doc/oscl_html/classOsclAsyncFileBuffer.html
index 722c7b7..68b1e73 100644
--- a/doc/oscl_html/classOsclAsyncFileBuffer.html
+++ b/doc/oscl_html/classOsclAsyncFileBuffer.html
@@ -22,10 +22,10 @@
 <tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classOsclAsyncFileBuffer.html#a2">SetInUse</a> ()</td></tr>
 <tr><td nowrap align=right valign=top>bool&nbsp;</td><td valign=bottom><a class="el" href="classOsclAsyncFileBuffer.html#a3">IsInUse</a> ()</td></tr>
 <tr><td nowrap align=right valign=top>bool&nbsp;</td><td valign=bottom><a class="el" href="classOsclAsyncFileBuffer.html#a4">IsValid</a> ()</td></tr>
-<tr><td nowrap align=right valign=top>int32&nbsp;</td><td valign=bottom><a class="el" href="classOsclAsyncFileBuffer.html#a5">Offset</a> ()</td></tr>
-<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classOsclAsyncFileBuffer.html#a6">SetOffset</a> (int32 aOffset)</td></tr>
+<tr><td nowrap align=right valign=top><a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a>&nbsp;</td><td valign=bottom><a class="el" href="classOsclAsyncFileBuffer.html#a5">Offset</a> ()</td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classOsclAsyncFileBuffer.html#a6">SetOffset</a> (<a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> aOffset)</td></tr>
 <tr><td nowrap align=right valign=top>int32&nbsp;</td><td valign=bottom><a class="el" href="classOsclAsyncFileBuffer.html#a7">Length</a> ()</td></tr>
-<tr><td nowrap align=right valign=top>bool&nbsp;</td><td valign=bottom><a class="el" href="classOsclAsyncFileBuffer.html#a8">HasThisOffset</a> (int32 aOffset)</td></tr>
+<tr><td nowrap align=right valign=top>bool&nbsp;</td><td valign=bottom><a class="el" href="classOsclAsyncFileBuffer.html#a8">HasThisOffset</a> (<a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> aOffset)</td></tr>
 <tr><td nowrap align=right valign=top>int32&nbsp;</td><td valign=bottom><a class="el" href="classOsclAsyncFileBuffer.html#a9">Id</a> ()</td></tr>
 <tr><td nowrap align=right valign=top><a class="el" href="classOsclBuf.html">OsclBuf</a> *&nbsp;</td><td valign=bottom><a class="el" href="classOsclAsyncFileBuffer.html#a10">Buffer</a> ()</td></tr>
 <tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classOsclAsyncFileBuffer.html#a11">UpdateData</a> ()</td></tr>
@@ -130,7 +130,7 @@
         <tr>
           <td class="md" nowrap valign="top"> bool OsclAsyncFileBuffer::HasThisOffset </td>
           <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int32&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a>&nbsp;</td>
           <td class="mdname1" valign="top" nowrap>&nbsp; <em>aOffset</em>          </td>
           <td class="md" valign="top">)&nbsp;</td>
           <td class="md" nowrap></td>
@@ -307,7 +307,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> int32 OsclAsyncFileBuffer::Offset </td>
+          <td class="md" nowrap valign="top"> <a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> OsclAsyncFileBuffer::Offset </td>
           <td class="md" valign="top">(&nbsp;</td>
           <td class="mdname1" valign="top" nowrap>&nbsp;          </td>
           <td class="md" valign="top">)&nbsp;</td>
@@ -365,7 +365,7 @@
         <tr>
           <td class="md" nowrap valign="top"> void OsclAsyncFileBuffer::SetOffset </td>
           <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int32&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a>&nbsp;</td>
           <td class="mdname1" valign="top" nowrap>&nbsp; <em>aOffset</em>          </td>
           <td class="md" valign="top">)&nbsp;</td>
           <td class="md" nowrap><code> [inline]</code></td>
@@ -446,7 +446,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__file__async__read_8h-source.html">oscl_file_async_read.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclAuditCB.html b/doc/oscl_html/classOsclAuditCB.html
index dfc0366..163ffef 100644
--- a/doc/oscl_html/classOsclAuditCB.html
+++ b/doc/oscl_html/classOsclAuditCB.html
@@ -135,7 +135,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__mem_8h-source.html">oscl_mem.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclBinIStream.html b/doc/oscl_html/classOsclBinIStream.html
index a29accd..4e271d6 100644
--- a/doc/oscl_html/classOsclBinIStream.html
+++ b/doc/oscl_html/classOsclBinIStream.html
@@ -167,7 +167,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__bin__stream_8h-source.html">oscl_bin_stream.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclBinIStreamBigEndian.html b/doc/oscl_html/classOsclBinIStreamBigEndian.html
index 852dbfa..6ba8cf3 100644
--- a/doc/oscl_html/classOsclBinIStreamBigEndian.html
+++ b/doc/oscl_html/classOsclBinIStreamBigEndian.html
@@ -499,7 +499,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__bin__stream_8h-source.html">oscl_bin_stream.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclBinIStreamLittleEndian.html b/doc/oscl_html/classOsclBinIStreamLittleEndian.html
index e3e1664..ff1fb99 100644
--- a/doc/oscl_html/classOsclBinIStreamLittleEndian.html
+++ b/doc/oscl_html/classOsclBinIStreamLittleEndian.html
@@ -312,7 +312,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__bin__stream_8h-source.html">oscl_bin_stream.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclBinOStream.html b/doc/oscl_html/classOsclBinOStream.html
index 351a0d4..38fa82d 100644
--- a/doc/oscl_html/classOsclBinOStream.html
+++ b/doc/oscl_html/classOsclBinOStream.html
@@ -133,7 +133,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__bin__stream_8h-source.html">oscl_bin_stream.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclBinOStreamBigEndian.html b/doc/oscl_html/classOsclBinOStreamBigEndian.html
index f81bb9f..73d3ea4 100644
--- a/doc/oscl_html/classOsclBinOStreamBigEndian.html
+++ b/doc/oscl_html/classOsclBinOStreamBigEndian.html
@@ -320,7 +320,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__bin__stream_8h-source.html">oscl_bin_stream.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclBinOStreamLittleEndian.html b/doc/oscl_html/classOsclBinOStreamLittleEndian.html
index fad636d..e40cb66 100644
--- a/doc/oscl_html/classOsclBinOStreamLittleEndian.html
+++ b/doc/oscl_html/classOsclBinOStreamLittleEndian.html
@@ -326,7 +326,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__bin__stream_8h-source.html">oscl_bin_stream.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclBinStream.html b/doc/oscl_html/classOsclBinStream.html
index 9bf22ad..1f5f651 100644
--- a/doc/oscl_html/classOsclBinStream.html
+++ b/doc/oscl_html/classOsclBinStream.html
@@ -702,7 +702,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__bin__stream_8h-source.html">oscl_bin_stream.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclBindMethod.html b/doc/oscl_html/classOsclBindMethod.html
index c46526c..b7a6eab 100644
--- a/doc/oscl_html/classOsclBindMethod.html
+++ b/doc/oscl_html/classOsclBindMethod.html
@@ -154,7 +154,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__bind_8h-source.html">oscl_socket_bind.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclBindRequest.html b/doc/oscl_html/classOsclBindRequest.html
index 3559054..293e289 100644
--- a/doc/oscl_html/classOsclBindRequest.html
+++ b/doc/oscl_html/classOsclBindRequest.html
@@ -89,7 +89,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__bind_8h-source.html">oscl_socket_bind.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclBuf.html b/doc/oscl_html/classOsclBuf.html
index 31326ea..60bc115 100644
--- a/doc/oscl_html/classOsclBuf.html
+++ b/doc/oscl_html/classOsclBuf.html
@@ -272,7 +272,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__file__async__read_8h-source.html">oscl_file_async_read.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclCompareLess.html b/doc/oscl_html/classOsclCompareLess.html
index e045482..a7fe245 100644
--- a/doc/oscl_html/classOsclCompareLess.html
+++ b/doc/oscl_html/classOsclCompareLess.html
@@ -65,7 +65,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__priqueue_8h-source.html">oscl_priqueue.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclComponentRegistry.html b/doc/oscl_html/classOsclComponentRegistry.html
index c4a1273..18bd6c7 100644
--- a/doc/oscl_html/classOsclComponentRegistry.html
+++ b/doc/oscl_html/classOsclComponentRegistry.html
@@ -407,7 +407,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__registry__serv__impl_8h-source.html">oscl_registry_serv_impl.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclComponentRegistryData.html b/doc/oscl_html/classOsclComponentRegistryData.html
index f034eca..99010e8 100644
--- a/doc/oscl_html/classOsclComponentRegistryData.html
+++ b/doc/oscl_html/classOsclComponentRegistryData.html
@@ -87,7 +87,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__registry__serv__impl_8h-source.html">oscl_registry_serv_impl.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclComponentRegistryElement.html b/doc/oscl_html/classOsclComponentRegistryElement.html
index b0019d4..1ec2a5e 100644
--- a/doc/oscl_html/classOsclComponentRegistryElement.html
+++ b/doc/oscl_html/classOsclComponentRegistryElement.html
@@ -261,7 +261,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__registry__serv__impl_8h-source.html">oscl_registry_serv_impl.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclConnectMethod.html b/doc/oscl_html/classOsclConnectMethod.html
index 6780c54..1ecebdf 100644
--- a/doc/oscl_html/classOsclConnectMethod.html
+++ b/doc/oscl_html/classOsclConnectMethod.html
@@ -154,7 +154,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__connect_8h-source.html">oscl_socket_connect.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclConnectRequest.html b/doc/oscl_html/classOsclConnectRequest.html
index eff9299..1ebc4bf 100644
--- a/doc/oscl_html/classOsclConnectRequest.html
+++ b/doc/oscl_html/classOsclConnectRequest.html
@@ -89,7 +89,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__connect_8h-source.html">oscl_socket_connect.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclDNS.html b/doc/oscl_html/classOsclDNS.html
index f539b83..a462b43 100644
--- a/doc/oscl_html/classOsclDNS.html
+++ b/doc/oscl_html/classOsclDNS.html
@@ -21,7 +21,7 @@
 <tr><td></td></tr>
 <tr><td colspan=2><br><h2>Public Methods</h2></td></tr>
 <tr><td nowrap align=right valign=top>OSCL_IMPORT_REF&nbsp;</td><td valign=bottom><a class="el" href="classOsclDNS.html#a0">~OsclDNS</a> ()</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a24">TPVDNSEvent</a>&nbsp;</td><td valign=bottom><a class="el" href="classOsclDNS.html#a1">GetHostByName</a> (char *name, <a class="el" href="classOsclNetworkAddress.html">OsclNetworkAddress</a> &amp;addr, int32 aTimeoutMsec=-1)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a25">TPVDNSEvent</a>&nbsp;</td><td valign=bottom><a class="el" href="classOsclDNS.html#a1">GetHostByName</a> (char *name, <a class="el" href="classOsclNetworkAddress.html">OsclNetworkAddress</a> &amp;addr, int32 aTimeoutMsec=-1)</td></tr>
 <tr><td nowrap align=right valign=top>OSCL_IMPORT_REF void&nbsp;</td><td valign=bottom><a class="el" href="classOsclDNS.html#a2">CancelGetHostByName</a> ()</td></tr>
 <tr><td colspan=2><br><h2>Static Public Methods</h2></td></tr>
 <tr><td nowrap align=right valign=top>OSCL_IMPORT_REF OsclDNS *&nbsp;</td><td valign=bottom><a class="el" href="classOsclDNS.html#d0">NewL</a> (<a class="el" href="classOscl__DefAlloc.html">Oscl_DefAlloc</a> &amp;alloc, <a class="el" href="classOsclSocketServ.html">OsclSocketServ</a> &amp;aServ, <a class="el" href="classOsclDNSObserver.html">OsclDNSObserver</a> &amp;aObserver, uint32 aId)</td></tr>
@@ -99,7 +99,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a24">TPVDNSEvent</a> OsclDNS::GetHostByName </td>
+          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a25">TPVDNSEvent</a> OsclDNS::GetHostByName </td>
           <td class="md" valign="top">(&nbsp;</td>
           <td class="md" nowrap valign="top">char *&nbsp;</td>
           <td class="mdname" nowrap>&nbsp; <em>name</em>, </td>
@@ -233,7 +233,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__dns_8h-source.html">oscl_dns.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclDNSI.html b/doc/oscl_html/classOsclDNSI.html
index 6cb5835..07a236e 100644
--- a/doc/oscl_html/classOsclDNSI.html
+++ b/doc/oscl_html/classOsclDNSI.html
@@ -271,7 +271,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__dns__imp__pv_8h-source.html">oscl_dns_imp_pv.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclDNSIBase.html b/doc/oscl_html/classOsclDNSIBase.html
index fa9b064..d64fc64 100644
--- a/doc/oscl_html/classOsclDNSIBase.html
+++ b/doc/oscl_html/classOsclDNSIBase.html
@@ -21,7 +21,7 @@
 <tr><td nowrap align=right valign=top>virtual int32&nbsp;</td><td valign=bottom><a class="el" href="classOsclDNSIBase.html#a2">Close</a> ()=0</td></tr>
 <tr><td nowrap align=right valign=top>virtual void&nbsp;</td><td valign=bottom><a class="el" href="classOsclDNSIBase.html#a3">GetHostByName</a> (<a class="el" href="classGetHostByNameParam.html">GetHostByNameParam</a> &amp;, <a class="el" href="classOsclDNSRequestAO.html">OsclDNSRequestAO</a> &amp;)=0</td></tr>
 <tr><td nowrap align=right valign=top>virtual void&nbsp;</td><td valign=bottom><a class="el" href="classOsclDNSIBase.html#a4">GetHostByNameSuccess</a> (<a class="el" href="classGetHostByNameParam.html">GetHostByNameParam</a> &amp;)=0</td></tr>
-<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classOsclDNSIBase.html#a5">CancelFxn</a> (<a class="el" href="group__osclio.html#a23">TPVDNSFxn</a>)</td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classOsclDNSIBase.html#a5">CancelFxn</a> (<a class="el" href="group__osclio.html#a24">TPVDNSFxn</a>)</td></tr>
 <tr><td colspan=2><br><h2>Protected Methods</h2></td></tr>
 <tr><td nowrap align=right valign=top>&nbsp;</td><td valign=bottom><a class="el" href="classOsclDNSIBase.html#b0">OsclDNSIBase</a> (<a class="el" href="classOscl__DefAlloc.html">Oscl_DefAlloc</a> &amp;a)</td></tr>
 <tr><td nowrap align=right valign=top>virtual bool&nbsp;</td><td valign=bottom><a class="el" href="classOsclDNSIBase.html#b1">IsReady</a> (<a class="el" href="classOsclDNSRequestAO.html">OsclDNSRequestAO</a> &amp;aObject)=0</td></tr>
@@ -103,7 +103,7 @@
         <tr>
           <td class="md" nowrap valign="top"> void OsclDNSIBase::CancelFxn </td>
           <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="group__osclio.html#a23">TPVDNSFxn</a>&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="group__osclio.html#a24">TPVDNSFxn</a>&nbsp;</td>
           <td class="mdname1" valign="top" nowrap>&nbsp;          </td>
           <td class="md" valign="top">)&nbsp;</td>
           <td class="md" nowrap></td>
@@ -408,7 +408,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__dns__imp__base_8h-source.html">oscl_dns_imp_base.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclDNSMethod.html b/doc/oscl_html/classOsclDNSMethod.html
index 173411e..908f48a 100644
--- a/doc/oscl_html/classOsclDNSMethod.html
+++ b/doc/oscl_html/classOsclDNSMethod.html
@@ -20,7 +20,7 @@
 <table border=0 cellpadding=0 cellspacing=0>
 <tr><td></td></tr>
 <tr><td colspan=2><br><h2>Public Methods</h2></td></tr>
-<tr><td nowrap align=right valign=top>&nbsp;</td><td valign=bottom><a class="el" href="classOsclDNSMethod.html#a0">OsclDNSMethod</a> (<a class="el" href="classOscl__DefAlloc.html">Oscl_DefAlloc</a> &amp;a, const char *name, <a class="el" href="group__osclio.html#a23">TPVDNSFxn</a> fxn)</td></tr>
+<tr><td nowrap align=right valign=top>&nbsp;</td><td valign=bottom><a class="el" href="classOsclDNSMethod.html#a0">OsclDNSMethod</a> (<a class="el" href="classOscl__DefAlloc.html">Oscl_DefAlloc</a> &amp;a, const char *name, <a class="el" href="group__osclio.html#a24">TPVDNSFxn</a> fxn)</td></tr>
 <tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classOsclDNSMethod.html#a1">Abort</a> ()</td></tr>
 <tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classOsclDNSMethod.html#a2">AbortAll</a> ()</td></tr>
 <tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classOsclDNSMethod.html#a3">CancelMethod</a> ()</td></tr>
@@ -29,7 +29,7 @@
 <tr><td nowrap align=right valign=top><a class="el" href="classOsclDNSObserver.html">OsclDNSObserver</a> *&nbsp;</td><td valign=bottom><a class="el" href="classOsclDNSMethod.html#m0">iDNSObserver</a></td></tr>
 <tr><td nowrap align=right valign=top>uint32&nbsp;</td><td valign=bottom><a class="el" href="classOsclDNSMethod.html#m1">iId</a></td></tr>
 <tr><td nowrap align=right valign=top><a class="el" href="classOscl__DefAlloc.html">Oscl_DefAlloc</a> &amp;&nbsp;</td><td valign=bottom><a class="el" href="classOsclDNSMethod.html#m2">iAlloc</a></td></tr>
-<tr><td nowrap align=right valign=top><a class="el" href="group__osclio.html#a23">TPVDNSFxn</a>&nbsp;</td><td valign=bottom><a class="el" href="classOsclDNSMethod.html#m3">iDNSFxn</a></td></tr>
+<tr><td nowrap align=right valign=top><a class="el" href="group__osclio.html#a24">TPVDNSFxn</a>&nbsp;</td><td valign=bottom><a class="el" href="classOsclDNSMethod.html#m3">iDNSFxn</a></td></tr>
 <tr><td nowrap align=right valign=top><a class="el" href="classPVLogger.html">PVLogger</a> *&nbsp;</td><td valign=bottom><a class="el" href="classOsclDNSMethod.html#m4">iLogger</a></td></tr>
 <tr><td colspan=2><br><h2>Protected Methods</h2></td></tr>
 <tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classOsclDNSMethod.html#b0">ConstructL</a> (<a class="el" href="classOsclDNSObserver.html">OsclDNSObserver</a> *aObserver, <a class="el" href="classOsclDNSRequestAO.html">OsclDNSRequestAO</a> *aAO, uint32 aId)</td></tr>
@@ -62,7 +62,7 @@
         <tr>
           <td></td>
           <td></td>
-          <td class="md" nowrap><a class="el" href="group__osclio.html#a23">TPVDNSFxn</a>&nbsp;</td>
+          <td class="md" nowrap><a class="el" href="group__osclio.html#a24">TPVDNSFxn</a>&nbsp;</td>
           <td class="mdname" nowrap>&nbsp; <em>fxn</em></td>
         </tr>
         <tr>
@@ -345,7 +345,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> <a class="el" href="group__osclio.html#a23">TPVDNSFxn</a> OsclDNSMethod::iDNSFxn
+          <td class="md" nowrap valign="top"> <a class="el" href="group__osclio.html#a24">TPVDNSFxn</a> OsclDNSMethod::iDNSFxn
       </table>
     </td>
   </tr>
@@ -452,7 +452,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__dns__method_8h-source.html">oscl_dns_method.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclDNSObserver.html b/doc/oscl_html/classOsclDNSObserver.html
index 8030c64..3485c72 100644
--- a/doc/oscl_html/classOsclDNSObserver.html
+++ b/doc/oscl_html/classOsclDNSObserver.html
@@ -14,7 +14,7 @@
 <table border=0 cellpadding=0 cellspacing=0>
 <tr><td></td></tr>
 <tr><td colspan=2><br><h2>Public Methods</h2></td></tr>
-<tr><td nowrap align=right valign=top>virtual OSCL_IMPORT_REF void&nbsp;</td><td valign=bottom><a class="el" href="classOsclDNSObserver.html#a0">HandleDNSEvent</a> (int32 aId, <a class="el" href="group__osclio.html#a23">TPVDNSFxn</a> aFxn, <a class="el" href="group__osclio.html#a24">TPVDNSEvent</a> aEvent, int32 aError)=0</td></tr>
+<tr><td nowrap align=right valign=top>virtual OSCL_IMPORT_REF void&nbsp;</td><td valign=bottom><a class="el" href="classOsclDNSObserver.html#a0">HandleDNSEvent</a> (int32 aId, <a class="el" href="group__osclio.html#a24">TPVDNSFxn</a> aFxn, <a class="el" href="group__osclio.html#a25">TPVDNSEvent</a> aEvent, int32 aError)=0</td></tr>
 <tr><td nowrap align=right valign=top>virtual&nbsp;</td><td valign=bottom><a class="el" href="classOsclDNSObserver.html#a1">~OsclDNSObserver</a> ()</td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
@@ -64,13 +64,13 @@
         <tr>
           <td></td>
           <td></td>
-          <td class="md" nowrap><a class="el" href="group__osclio.html#a23">TPVDNSFxn</a>&nbsp;</td>
+          <td class="md" nowrap><a class="el" href="group__osclio.html#a24">TPVDNSFxn</a>&nbsp;</td>
           <td class="mdname" nowrap>&nbsp; <em>aFxn</em>, </td>
         </tr>
         <tr>
           <td></td>
           <td></td>
-          <td class="md" nowrap><a class="el" href="group__osclio.html#a24">TPVDNSEvent</a>&nbsp;</td>
+          <td class="md" nowrap><a class="el" href="group__osclio.html#a25">TPVDNSEvent</a>&nbsp;</td>
           <td class="mdname" nowrap>&nbsp; <em>aEvent</em>, </td>
         </tr>
         <tr>
@@ -112,7 +112,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__dns_8h-source.html">oscl_dns.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclDNSRequest.html b/doc/oscl_html/classOsclDNSRequest.html
index 707bf27..49852e2 100644
--- a/doc/oscl_html/classOsclDNSRequest.html
+++ b/doc/oscl_html/classOsclDNSRequest.html
@@ -262,7 +262,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__dns__request_8h-source.html">oscl_dns_request.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclDNSRequestAO.html b/doc/oscl_html/classOsclDNSRequestAO.html
index 5833361..3b3e1fd 100644
--- a/doc/oscl_html/classOsclDNSRequestAO.html
+++ b/doc/oscl_html/classOsclDNSRequestAO.html
@@ -536,7 +536,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__dns__method_8h-source.html">oscl_dns_method.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclDestructDealloc.html b/doc/oscl_html/classOsclDestructDealloc.html
index f1771c0..769f77f 100644
--- a/doc/oscl_html/classOsclDestructDealloc.html
+++ b/doc/oscl_html/classOsclDestructDealloc.html
@@ -59,7 +59,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__defalloc_8h-source.html">oscl_defalloc.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclDoubleLink.html b/doc/oscl_html/classOsclDoubleLink.html
index da845e0..0a580a9 100644
--- a/doc/oscl_html/classOsclDoubleLink.html
+++ b/doc/oscl_html/classOsclDoubleLink.html
@@ -191,7 +191,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__double__list_8h-source.html">oscl_double_list.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclDoubleList.html b/doc/oscl_html/classOsclDoubleList.html
index 1e8fcdd..90aad40 100644
--- a/doc/oscl_html/classOsclDoubleList.html
+++ b/doc/oscl_html/classOsclDoubleList.html
@@ -297,7 +297,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__double__list_8h-source.html">oscl_double_list.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclDoubleListBase.html b/doc/oscl_html/classOsclDoubleListBase.html
index 75c34bb..624c722 100644
--- a/doc/oscl_html/classOsclDoubleListBase.html
+++ b/doc/oscl_html/classOsclDoubleListBase.html
@@ -370,7 +370,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__double__list_8h-source.html">oscl_double_list.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclDoubleRunner.html b/doc/oscl_html/classOsclDoubleRunner.html
index c382e08..25ea88c 100644
--- a/doc/oscl_html/classOsclDoubleRunner.html
+++ b/doc/oscl_html/classOsclDoubleRunner.html
@@ -341,7 +341,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__double__list_8h-source.html">oscl_double_list.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclError.html b/doc/oscl_html/classOsclError.html
index 292bf9f..9c5d252 100644
--- a/doc/oscl_html/classOsclError.html
+++ b/doc/oscl_html/classOsclError.html
@@ -320,7 +320,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__error_8h-source.html">oscl_error.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclErrorAllocator.html b/doc/oscl_html/classOsclErrorAllocator.html
index 4d92980..a744a38 100644
--- a/doc/oscl_html/classOsclErrorAllocator.html
+++ b/doc/oscl_html/classOsclErrorAllocator.html
@@ -227,7 +227,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__error__allocator_8h-source.html">oscl_error_allocator.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclErrorTrap.html b/doc/oscl_html/classOsclErrorTrap.html
index 8d730cb..26373d1 100644
--- a/doc/oscl_html/classOsclErrorTrap.html
+++ b/doc/oscl_html/classOsclErrorTrap.html
@@ -114,7 +114,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__error_8h-source.html">oscl_error.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclErrorTrapImp.html b/doc/oscl_html/classOsclErrorTrapImp.html
index 4255f21..b4528ad 100644
--- a/doc/oscl_html/classOsclErrorTrapImp.html
+++ b/doc/oscl_html/classOsclErrorTrapImp.html
@@ -391,7 +391,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__error__trapcleanup_8h-source.html">oscl_error_trapcleanup.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclException.html b/doc/oscl_html/classOsclException.html
index 9605671..eae69d7 100644
--- a/doc/oscl_html/classOsclException.html
+++ b/doc/oscl_html/classOsclException.html
@@ -98,7 +98,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__exception_8h-source.html">oscl_exception.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclExclusiveArrayPtr.html b/doc/oscl_html/classOsclExclusiveArrayPtr.html
index 9d48185..908a33a 100644
--- a/doc/oscl_html/classOsclExclusiveArrayPtr.html
+++ b/doc/oscl_html/classOsclExclusiveArrayPtr.html
@@ -395,7 +395,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__exclusive__ptr_8h-source.html">oscl_exclusive_ptr.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclExclusivePtr.html b/doc/oscl_html/classOsclExclusivePtr.html
index 2938cd2..4363ca0 100644
--- a/doc/oscl_html/classOsclExclusivePtr.html
+++ b/doc/oscl_html/classOsclExclusivePtr.html
@@ -395,7 +395,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__exclusive__ptr_8h-source.html">oscl_exclusive_ptr.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclExclusivePtrA.html b/doc/oscl_html/classOsclExclusivePtrA.html
index 19ecfb5..e62b211 100644
--- a/doc/oscl_html/classOsclExclusivePtrA.html
+++ b/doc/oscl_html/classOsclExclusivePtrA.html
@@ -395,7 +395,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__exclusive__ptr_8h-source.html">oscl_exclusive_ptr.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclExecScheduler.html b/doc/oscl_html/classOsclExecScheduler.html
index c8b9142..34b3231 100644
--- a/doc/oscl_html/classOsclExecScheduler.html
+++ b/doc/oscl_html/classOsclExecScheduler.html
@@ -178,7 +178,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__scheduler_8h-source.html">oscl_scheduler.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclExecSchedulerBase.html b/doc/oscl_html/classOsclExecSchedulerBase.html
index 93fb9cd..55399ba 100644
--- a/doc/oscl_html/classOsclExecSchedulerBase.html
+++ b/doc/oscl_html/classOsclExecSchedulerBase.html
@@ -97,7 +97,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__scheduler__types_8h-source.html">oscl_scheduler_types.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclExecSchedulerCommonBase.html b/doc/oscl_html/classOsclExecSchedulerCommonBase.html
index 6d0d99d..4d0433e 100644
--- a/doc/oscl_html/classOsclExecSchedulerCommonBase.html
+++ b/doc/oscl_html/classOsclExecSchedulerCommonBase.html
@@ -2251,7 +2251,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__scheduler_8h-source.html">oscl_scheduler.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclFileCache.html b/doc/oscl_html/classOsclFileCache.html
index 9f5324d..ecef32f 100644
--- a/doc/oscl_html/classOsclFileCache.html
+++ b/doc/oscl_html/classOsclFileCache.html
@@ -25,10 +25,10 @@
 <tr><td nowrap align=right valign=top>int32&nbsp;</td><td valign=bottom><a class="el" href="classOsclFileCache.html#a2">Open</a> (uint32 mode, uint32 cache_size)</td></tr>
 <tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classOsclFileCache.html#a3">Close</a> ()</td></tr>
 <tr><td nowrap align=right valign=top>uint32&nbsp;</td><td valign=bottom><a class="el" href="classOsclFileCache.html#a4">Read</a> (void *outputBuffer, uint32 size, uint32 numelements)</td></tr>
-<tr><td nowrap align=right valign=top>int32&nbsp;</td><td valign=bottom><a class="el" href="classOsclFileCache.html#a5">Write</a> (const void *inputBuffer, uint32 size, uint32 numelements)</td></tr>
-<tr><td nowrap align=right valign=top>int32&nbsp;</td><td valign=bottom><a class="el" href="classOsclFileCache.html#a6">FileSize</a> ()</td></tr>
-<tr><td nowrap align=right valign=top>int32&nbsp;</td><td valign=bottom><a class="el" href="classOsclFileCache.html#a7">Seek</a> (int32 offset, <a class="el" href="classOscl__File.html#s11">Oscl_File::seek_type</a> origin)</td></tr>
-<tr><td nowrap align=right valign=top>int32&nbsp;</td><td valign=bottom><a class="el" href="classOsclFileCache.html#a8">Tell</a> ()</td></tr>
+<tr><td nowrap align=right valign=top>uint32&nbsp;</td><td valign=bottom><a class="el" href="classOsclFileCache.html#a5">Write</a> (const void *inputBuffer, uint32 size, uint32 numelements)</td></tr>
+<tr><td nowrap align=right valign=top><a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a>&nbsp;</td><td valign=bottom><a class="el" href="classOsclFileCache.html#a6">FileSize</a> ()</td></tr>
+<tr><td nowrap align=right valign=top>int32&nbsp;</td><td valign=bottom><a class="el" href="classOsclFileCache.html#a7">Seek</a> (<a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> offset, <a class="el" href="classOscl__File.html#s11">Oscl_File::seek_type</a> origin)</td></tr>
+<tr><td nowrap align=right valign=top><a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a>&nbsp;</td><td valign=bottom><a class="el" href="classOsclFileCache.html#a8">Tell</a> ()</td></tr>
 <tr><td nowrap align=right valign=top>int32&nbsp;</td><td valign=bottom><a class="el" href="classOsclFileCache.html#a9">Flush</a> ()</td></tr>
 <tr><td nowrap align=right valign=top>int32&nbsp;</td><td valign=bottom><a class="el" href="classOsclFileCache.html#a10">EndOfFile</a> ()</td></tr>
 </table>
@@ -153,7 +153,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> int32 OsclFileCache::FileSize </td>
+          <td class="md" nowrap valign="top"> <a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> OsclFileCache::FileSize </td>
           <td class="md" valign="top">(&nbsp;</td>
           <td class="mdname1" valign="top" nowrap>&nbsp;          </td>
           <td class="md" valign="top">)&nbsp;</td>
@@ -293,7 +293,7 @@
         <tr>
           <td class="md" nowrap valign="top"> int32 OsclFileCache::Seek </td>
           <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int32&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a>&nbsp;</td>
           <td class="mdname" nowrap>&nbsp; <em>offset</em>, </td>
         </tr>
         <tr>
@@ -329,7 +329,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> int32 OsclFileCache::Tell </td>
+          <td class="md" nowrap valign="top"> <a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> OsclFileCache::Tell </td>
           <td class="md" valign="top">(&nbsp;</td>
           <td class="mdname1" valign="top" nowrap>&nbsp;          </td>
           <td class="md" valign="top">)&nbsp;</td>
@@ -357,7 +357,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> int32 OsclFileCache::Write </td>
+          <td class="md" nowrap valign="top"> uint32 OsclFileCache::Write </td>
           <td class="md" valign="top">(&nbsp;</td>
           <td class="md" nowrap valign="top">const void *&nbsp;</td>
           <td class="mdname" nowrap>&nbsp; <em>inputBuffer</em>, </td>
@@ -398,7 +398,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__file__cache_8h-source.html">oscl_file_cache.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclFileHandle.html b/doc/oscl_html/classOsclFileHandle.html
index d36c6f6..b8c3435 100644
--- a/doc/oscl_html/classOsclFileHandle.html
+++ b/doc/oscl_html/classOsclFileHandle.html
@@ -137,7 +137,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__file__handle_8h-source.html">oscl_file_handle.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclFileStats.html b/doc/oscl_html/classOsclFileStats.html
index 38b9b4e..06c7536 100644
--- a/doc/oscl_html/classOsclFileStats.html
+++ b/doc/oscl_html/classOsclFileStats.html
@@ -16,8 +16,8 @@
 <tr><td colspan=2><br><h2>Public Methods</h2></td></tr>
 <tr><td nowrap align=right valign=top>&nbsp;</td><td valign=bottom><a class="el" href="classOsclFileStats.html#a0">OsclFileStats</a> (<a class="el" href="classOscl__File.html">Oscl_File</a> *c)</td></tr>
 <tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classOsclFileStats.html#a1">Start</a> (uint32 &amp;aTicks)</td></tr>
-<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classOsclFileStats.html#a2">End</a> (<a class="el" href="group__osclio.html#a28">TOsclFileOp</a> aOp, uint32 aStart, uint32 aParam=0, uint32 aParam2=0)</td></tr>
-<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classOsclFileStats.html#a3">Log</a> (<a class="el" href="group__osclio.html#a28">TOsclFileOp</a>, <a class="el" href="classPVLogger.html">PVLogger</a> *, uint32)</td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classOsclFileStats.html#a2">End</a> (<a class="el" href="group__osclio.html#a29">TOsclFileOp</a> aOp, uint32 aStart, uint32 aParam=0, <a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> aParam2=0)</td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classOsclFileStats.html#a3">Log</a> (<a class="el" href="group__osclio.html#a29">TOsclFileOp</a>, <a class="el" href="classPVLogger.html">PVLogger</a> *, uint32)</td></tr>
 <tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classOsclFileStats.html#a4">LogAll</a> (<a class="el" href="classPVLogger.html">PVLogger</a> *, uint32)</td></tr>
 </table>
 <hr><h2>Constructor &amp; Destructor Documentation</h2>
@@ -59,7 +59,7 @@
         <tr>
           <td class="md" nowrap valign="top"> void OsclFileStats::End </td>
           <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="group__osclio.html#a28">TOsclFileOp</a>&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="group__osclio.html#a29">TOsclFileOp</a>&nbsp;</td>
           <td class="mdname" nowrap>&nbsp; <em>aOp</em>, </td>
         </tr>
         <tr>
@@ -77,7 +77,7 @@
         <tr>
           <td></td>
           <td></td>
-          <td class="md" nowrap>uint32&nbsp;</td>
+          <td class="md" nowrap><a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a>&nbsp;</td>
           <td class="mdname" nowrap>&nbsp; <em>aParam2</em> = 0</td>
         </tr>
         <tr>
@@ -109,7 +109,7 @@
         <tr>
           <td class="md" nowrap valign="top"> void OsclFileStats::Log </td>
           <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="group__osclio.html#a28">TOsclFileOp</a>&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="group__osclio.html#a29">TOsclFileOp</a>&nbsp;</td>
           <td class="mdname" nowrap>&nbsp;, </td>
         </tr>
         <tr>
@@ -215,7 +215,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__file__stats_8h-source.html">oscl_file_stats.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclFileStatsItem.html b/doc/oscl_html/classOsclFileStatsItem.html
index a5648e4..7279831 100644
--- a/doc/oscl_html/classOsclFileStatsItem.html
+++ b/doc/oscl_html/classOsclFileStatsItem.html
@@ -16,7 +16,7 @@
 <tr><td colspan=2><br><h2>Data Fields</h2></td></tr>
 <tr><td nowrap align=right valign=top>uint32&nbsp;</td><td valign=bottom><a class="el" href="classOsclFileStatsItem.html#m0">iOpCount</a></td></tr>
 <tr><td nowrap align=right valign=top>uint32&nbsp;</td><td valign=bottom><a class="el" href="classOsclFileStatsItem.html#m1">iParam</a></td></tr>
-<tr><td nowrap align=right valign=top>uint32&nbsp;</td><td valign=bottom><a class="el" href="classOsclFileStatsItem.html#m2">iParam2</a></td></tr>
+<tr><td nowrap align=right valign=top><a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a>&nbsp;</td><td valign=bottom><a class="el" href="classOsclFileStatsItem.html#m2">iParam2</a></td></tr>
 <tr><td nowrap align=right valign=top>uint32&nbsp;</td><td valign=bottom><a class="el" href="classOsclFileStatsItem.html#m3">iStartTick</a></td></tr>
 <tr><td nowrap align=right valign=top>uint32&nbsp;</td><td valign=bottom><a class="el" href="classOsclFileStatsItem.html#m4">iTotalTicks</a></td></tr>
 </table>
@@ -71,7 +71,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> uint32 OsclFileStatsItem::iParam2
+          <td class="md" nowrap valign="top"> <a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> OsclFileStatsItem::iParam2
       </table>
     </td>
   </tr>
@@ -134,7 +134,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__file__stats_8h-source.html">oscl_file_stats.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclGetHostByNameMethod.html b/doc/oscl_html/classOsclGetHostByNameMethod.html
index eab5e70..09f1796 100644
--- a/doc/oscl_html/classOsclGetHostByNameMethod.html
+++ b/doc/oscl_html/classOsclGetHostByNameMethod.html
@@ -21,7 +21,7 @@
 <tr><td></td></tr>
 <tr><td colspan=2><br><h2>Public Methods</h2></td></tr>
 <tr><td nowrap align=right valign=top>&nbsp;</td><td valign=bottom><a class="el" href="classOsclGetHostByNameMethod.html#a0">~OsclGetHostByNameMethod</a> ()</td></tr>
-<tr><td nowrap align=right valign=top><a class="el" href="group__osclio.html#a24">TPVDNSEvent</a>&nbsp;</td><td valign=bottom><a class="el" href="classOsclGetHostByNameMethod.html#a1">GetHostByName</a> (char *name, <a class="el" href="classOsclNetworkAddress.html">OsclNetworkAddress</a> *addr, int32 aTimeout)</td></tr>
+<tr><td nowrap align=right valign=top><a class="el" href="group__osclio.html#a25">TPVDNSEvent</a>&nbsp;</td><td valign=bottom><a class="el" href="classOsclGetHostByNameMethod.html#a1">GetHostByName</a> (char *name, <a class="el" href="classOsclNetworkAddress.html">OsclNetworkAddress</a> *addr, int32 aTimeout)</td></tr>
 <tr><td colspan=2><br><h2>Static Public Methods</h2></td></tr>
 <tr><td nowrap align=right valign=top>OsclGetHostByNameMethod *&nbsp;</td><td valign=bottom><a class="el" href="classOsclGetHostByNameMethod.html#d0">NewL</a> (<a class="el" href="classOscl__DefAlloc.html">Oscl_DefAlloc</a> &amp;a, <a class="el" href="classOsclDNSI.html">OsclDNSI</a> *aDNS, <a class="el" href="classOsclDNSObserver.html">OsclDNSObserver</a> *aObserver, uint32 aId)</td></tr>
 </table>
@@ -61,7 +61,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> <a class="el" href="group__osclio.html#a24">TPVDNSEvent</a> OsclGetHostByNameMethod::GetHostByName </td>
+          <td class="md" nowrap valign="top"> <a class="el" href="group__osclio.html#a25">TPVDNSEvent</a> OsclGetHostByNameMethod::GetHostByName </td>
           <td class="md" valign="top">(&nbsp;</td>
           <td class="md" nowrap valign="top">char *&nbsp;</td>
           <td class="mdname" nowrap>&nbsp; <em>name</em>, </td>
@@ -152,7 +152,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__dns__gethostbyname_8h-source.html">oscl_dns_gethostbyname.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclGetHostByNameRequest.html b/doc/oscl_html/classOsclGetHostByNameRequest.html
index 8ce3231..d4cc4fe 100644
--- a/doc/oscl_html/classOsclGetHostByNameRequest.html
+++ b/doc/oscl_html/classOsclGetHostByNameRequest.html
@@ -48,7 +48,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__dns__gethostbyname_8h-source.html">oscl_dns_gethostbyname.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclIPSocketI.html b/doc/oscl_html/classOsclIPSocketI.html
index ec862e2..3ecf9f5 100644
--- a/doc/oscl_html/classOsclIPSocketI.html
+++ b/doc/oscl_html/classOsclIPSocketI.html
@@ -588,7 +588,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__ip__socket_8h-source.html">oscl_ip_socket.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclInit.html b/doc/oscl_html/classOsclInit.html
index 9042181..b8fcef4 100644
--- a/doc/oscl_html/classOsclInit.html
+++ b/doc/oscl_html/classOsclInit.html
@@ -114,7 +114,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__init_8h-source.html">oscl_init.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclJump.html b/doc/oscl_html/classOsclJump.html
index f710968..7456348 100644
--- a/doc/oscl_html/classOsclJump.html
+++ b/doc/oscl_html/classOsclJump.html
@@ -164,7 +164,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__error__imp__jumps_8h-source.html">oscl_error_imp_jumps.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclListenMethod.html b/doc/oscl_html/classOsclListenMethod.html
index 3b9fe8c..f25a1b1 100644
--- a/doc/oscl_html/classOsclListenMethod.html
+++ b/doc/oscl_html/classOsclListenMethod.html
@@ -154,7 +154,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__listen_8h-source.html">oscl_socket_listen.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclListenRequest.html b/doc/oscl_html/classOsclListenRequest.html
index e0367f9..d813e38 100644
--- a/doc/oscl_html/classOsclListenRequest.html
+++ b/doc/oscl_html/classOsclListenRequest.html
@@ -89,7 +89,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__listen_8h-source.html">oscl_socket_listen.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclLockBase.html b/doc/oscl_html/classOsclLockBase.html
index db88519..232cee7 100644
--- a/doc/oscl_html/classOsclLockBase.html
+++ b/doc/oscl_html/classOsclLockBase.html
@@ -118,7 +118,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__lock__base_8h-source.html">oscl_lock_base.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclMem.html b/doc/oscl_html/classOsclMem.html
index 0a0e21f..703cf80 100644
--- a/doc/oscl_html/classOsclMem.html
+++ b/doc/oscl_html/classOsclMem.html
@@ -82,7 +82,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__mem_8h-source.html">oscl_mem.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclMemAllocDestructDealloc.html b/doc/oscl_html/classOsclMemAllocDestructDealloc.html
index 2b85880..9deaee0 100644
--- a/doc/oscl_html/classOsclMemAllocDestructDealloc.html
+++ b/doc/oscl_html/classOsclMemAllocDestructDealloc.html
@@ -193,7 +193,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__mem_8h-source.html">oscl_mem.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclMemAllocator.html b/doc/oscl_html/classOsclMemAllocator.html
index 845c23b..aa9f0f9 100644
--- a/doc/oscl_html/classOsclMemAllocator.html
+++ b/doc/oscl_html/classOsclMemAllocator.html
@@ -143,7 +143,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__mem_8h-source.html">oscl_mem.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclMemAudit.html b/doc/oscl_html/classOsclMemAudit.html
index d33def2..040660e 100644
--- a/doc/oscl_html/classOsclMemAudit.html
+++ b/doc/oscl_html/classOsclMemAudit.html
@@ -1038,7 +1038,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__mem__audit_8h-source.html">oscl_mem_audit.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclMemBasicAllocDestructDealloc.html b/doc/oscl_html/classOsclMemBasicAllocDestructDealloc.html
index ebf9fe5..f17b51b 100644
--- a/doc/oscl_html/classOsclMemBasicAllocDestructDealloc.html
+++ b/doc/oscl_html/classOsclMemBasicAllocDestructDealloc.html
@@ -142,7 +142,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__mem_8h-source.html">oscl_mem.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclMemBasicAllocator.html b/doc/oscl_html/classOsclMemBasicAllocator.html
index c390dcc..32d9502 100644
--- a/doc/oscl_html/classOsclMemBasicAllocator.html
+++ b/doc/oscl_html/classOsclMemBasicAllocator.html
@@ -98,7 +98,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__mem_8h-source.html">oscl_mem.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclMemGlobalAuditObject.html b/doc/oscl_html/classOsclMemGlobalAuditObject.html
index 16794c4..9ce4ffb 100644
--- a/doc/oscl_html/classOsclMemGlobalAuditObject.html
+++ b/doc/oscl_html/classOsclMemGlobalAuditObject.html
@@ -98,7 +98,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__mem_8h-source.html">oscl_mem.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclMemPoolAllocator.html b/doc/oscl_html/classOsclMemPoolAllocator.html
index 08ddd17..ac2b9cd 100644
--- a/doc/oscl_html/classOsclMemPoolAllocator.html
+++ b/doc/oscl_html/classOsclMemPoolAllocator.html
@@ -177,7 +177,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__mempool__allocator_8h-source.html">oscl_mempool_allocator.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclMemPoolFixedChunkAllocator.html b/doc/oscl_html/classOsclMemPoolFixedChunkAllocator.html
index 316292c..092801d 100644
--- a/doc/oscl_html/classOsclMemPoolFixedChunkAllocator.html
+++ b/doc/oscl_html/classOsclMemPoolFixedChunkAllocator.html
@@ -658,7 +658,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__mem__mempool_8h-source.html">oscl_mem_mempool.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclMemPoolFixedChunkAllocatorObserver.html b/doc/oscl_html/classOsclMemPoolFixedChunkAllocatorObserver.html
index ba9e42b..ecde4a4 100644
--- a/doc/oscl_html/classOsclMemPoolFixedChunkAllocatorObserver.html
+++ b/doc/oscl_html/classOsclMemPoolFixedChunkAllocatorObserver.html
@@ -79,7 +79,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__mem__mempool_8h-source.html">oscl_mem_mempool.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclMemPoolResizableAllocator.html b/doc/oscl_html/classOsclMemPoolResizableAllocator.html
index d927d8e..8bfeaa9 100644
--- a/doc/oscl_html/classOsclMemPoolResizableAllocator.html
+++ b/doc/oscl_html/classOsclMemPoolResizableAllocator.html
@@ -1313,7 +1313,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__mem__mempool_8h-source.html">oscl_mem_mempool.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclMemPoolResizableAllocatorMemoryObserver.html b/doc/oscl_html/classOsclMemPoolResizableAllocatorMemoryObserver.html
index 6521a29..09885da 100644
--- a/doc/oscl_html/classOsclMemPoolResizableAllocatorMemoryObserver.html
+++ b/doc/oscl_html/classOsclMemPoolResizableAllocatorMemoryObserver.html
@@ -79,7 +79,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__mem__mempool_8h-source.html">oscl_mem_mempool.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclMemPoolResizableAllocatorObserver.html b/doc/oscl_html/classOsclMemPoolResizableAllocatorObserver.html
index 1e29657..826ec84 100644
--- a/doc/oscl_html/classOsclMemPoolResizableAllocatorObserver.html
+++ b/doc/oscl_html/classOsclMemPoolResizableAllocatorObserver.html
@@ -79,7 +79,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__mem__mempool_8h-source.html">oscl_mem_mempool.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclMemStatsNode.html b/doc/oscl_html/classOsclMemStatsNode.html
index 2755209..ee5430f 100644
--- a/doc/oscl_html/classOsclMemStatsNode.html
+++ b/doc/oscl_html/classOsclMemStatsNode.html
@@ -277,7 +277,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__mem__audit_8h-source.html">oscl_mem_audit.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclMutex.html b/doc/oscl_html/classOsclMutex.html
index ca6d9f5..565c7f8 100644
--- a/doc/oscl_html/classOsclMutex.html
+++ b/doc/oscl_html/classOsclMutex.html
@@ -264,7 +264,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__mutex_8h-source.html">oscl_mutex.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclNameString.html b/doc/oscl_html/classOsclNameString.html
index b79dd01..c77877e 100644
--- a/doc/oscl_html/classOsclNameString.html
+++ b/doc/oscl_html/classOsclNameString.html
@@ -266,7 +266,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__namestring_8h-source.html">oscl_namestring.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclNativeFile.html b/doc/oscl_html/classOsclNativeFile.html
index f83fcd7..c1f7bb8 100644
--- a/doc/oscl_html/classOsclNativeFile.html
+++ b/doc/oscl_html/classOsclNativeFile.html
@@ -27,11 +27,11 @@
 <tr><td nowrap align=right valign=top>int32&nbsp;</td><td valign=bottom><a class="el" href="classOsclNativeFile.html#a4">Open</a> (const char *filename, uint32 mode, const <a class="el" href="classOsclNativeFileParams.html">OsclNativeFileParams</a> &amp;params, <a class="el" href="classOscl__FileServer.html">Oscl_FileServer</a> &amp;fileserv)</td></tr>
 <tr><td nowrap align=right valign=top>uint32&nbsp;</td><td valign=bottom><a class="el" href="classOsclNativeFile.html#a5">Read</a> (<a class="el" href="group__osclbase.html#a25">OsclAny</a> *buffer, uint32 size, uint32 numelements)</td></tr>
 <tr><td nowrap align=right valign=top>uint32&nbsp;</td><td valign=bottom><a class="el" href="classOsclNativeFile.html#a6">Write</a> (const <a class="el" href="group__osclbase.html#a25">OsclAny</a> *buffer, uint32 size, uint32 numelements)</td></tr>
-<tr><td nowrap align=right valign=top>int32&nbsp;</td><td valign=bottom><a class="el" href="classOsclNativeFile.html#a7">Seek</a> (int32 offset, <a class="el" href="classOscl__File.html#s11">Oscl_File::seek_type</a> origin)</td></tr>
-<tr><td nowrap align=right valign=top>int32&nbsp;</td><td valign=bottom><a class="el" href="classOsclNativeFile.html#a8">Tell</a> ()</td></tr>
+<tr><td nowrap align=right valign=top>int32&nbsp;</td><td valign=bottom><a class="el" href="classOsclNativeFile.html#a7">Seek</a> (<a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> offset, <a class="el" href="classOscl__File.html#s11">Oscl_File::seek_type</a> origin)</td></tr>
+<tr><td nowrap align=right valign=top><a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a>&nbsp;</td><td valign=bottom><a class="el" href="classOsclNativeFile.html#a8">Tell</a> ()</td></tr>
 <tr><td nowrap align=right valign=top>int32&nbsp;</td><td valign=bottom><a class="el" href="classOsclNativeFile.html#a9">Flush</a> ()</td></tr>
 <tr><td nowrap align=right valign=top>int32&nbsp;</td><td valign=bottom><a class="el" href="classOsclNativeFile.html#a10">EndOfFile</a> ()</td></tr>
-<tr><td nowrap align=right valign=top>int32&nbsp;</td><td valign=bottom><a class="el" href="classOsclNativeFile.html#a11">Size</a> ()</td></tr>
+<tr><td nowrap align=right valign=top><a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a>&nbsp;</td><td valign=bottom><a class="el" href="classOsclNativeFile.html#a11">Size</a> ()</td></tr>
 <tr><td nowrap align=right valign=top>int32&nbsp;</td><td valign=bottom><a class="el" href="classOsclNativeFile.html#a12">Close</a> ()</td></tr>
 <tr><td nowrap align=right valign=top>uint32&nbsp;</td><td valign=bottom><a class="el" href="classOsclNativeFile.html#a13">Mode</a> ()</td></tr>
 <tr><td nowrap align=right valign=top>int32&nbsp;</td><td valign=bottom><a class="el" href="classOsclNativeFile.html#a14">GetError</a> ()</td></tr>
@@ -585,7 +585,7 @@
         <tr>
           <td class="md" nowrap valign="top"> int32 OsclNativeFile::Seek </td>
           <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int32&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a>&nbsp;</td>
           <td class="mdname" nowrap>&nbsp; <em>offset</em>, </td>
         </tr>
         <tr>
@@ -621,7 +621,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> int32 OsclNativeFile::Size </td>
+          <td class="md" nowrap valign="top"> <a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> OsclNativeFile::Size </td>
           <td class="md" valign="top">(&nbsp;</td>
           <td class="mdname1" valign="top" nowrap>&nbsp;          </td>
           <td class="md" valign="top">)&nbsp;</td>
@@ -649,7 +649,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> int32 OsclNativeFile::Tell </td>
+          <td class="md" nowrap valign="top"> <a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> OsclNativeFile::Tell </td>
           <td class="md" valign="top">(&nbsp;</td>
           <td class="mdname1" valign="top" nowrap>&nbsp;          </td>
           <td class="md" valign="top">)&nbsp;</td>
@@ -718,7 +718,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__file__native_8h-source.html">oscl_file_native.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclNativeFileParams.html b/doc/oscl_html/classOsclNativeFileParams.html
index 5c807ae..e8d82a3 100644
--- a/doc/oscl_html/classOsclNativeFileParams.html
+++ b/doc/oscl_html/classOsclNativeFileParams.html
@@ -135,7 +135,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__file__types_8h-source.html">oscl_file_types.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclNetworkAddress.html b/doc/oscl_html/classOsclNetworkAddress.html
index bce289b..051087b 100644
--- a/doc/oscl_html/classOsclNetworkAddress.html
+++ b/doc/oscl_html/classOsclNetworkAddress.html
@@ -163,7 +163,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__types_8h-source.html">oscl_socket_types.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclNullLock.html b/doc/oscl_html/classOsclNullLock.html
index 5b56b32..c088199 100644
--- a/doc/oscl_html/classOsclNullLock.html
+++ b/doc/oscl_html/classOsclNullLock.html
@@ -116,7 +116,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__lock__base_8h-source.html">oscl_lock_base.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclPriorityLink.html b/doc/oscl_html/classOsclPriorityLink.html
index 3b2fd90..fcd4e0f 100644
--- a/doc/oscl_html/classOsclPriorityLink.html
+++ b/doc/oscl_html/classOsclPriorityLink.html
@@ -47,7 +47,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__double__list_8h-source.html">oscl_double_list.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclPriorityList.html b/doc/oscl_html/classOsclPriorityList.html
index 4be2cab..9486c1b 100644
--- a/doc/oscl_html/classOsclPriorityList.html
+++ b/doc/oscl_html/classOsclPriorityList.html
@@ -263,7 +263,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__double__list_8h-source.html">oscl_double_list.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclPriorityQueue.html b/doc/oscl_html/classOsclPriorityQueue.html
index a5cdb9d..909ca55 100644
--- a/doc/oscl_html/classOsclPriorityQueue.html
+++ b/doc/oscl_html/classOsclPriorityQueue.html
@@ -861,7 +861,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__priqueue_8h-source.html">oscl_priqueue.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclPriorityQueueBase.html b/doc/oscl_html/classOsclPriorityQueueBase.html
index 7dd0702..7edbcbe 100644
--- a/doc/oscl_html/classOsclPriorityQueueBase.html
+++ b/doc/oscl_html/classOsclPriorityQueueBase.html
@@ -253,7 +253,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__priqueue_8h-source.html">oscl_priqueue.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclProcStatus.html b/doc/oscl_html/classOsclProcStatus.html
index 3b5e750..21f3dd9 100644
--- a/doc/oscl_html/classOsclProcStatus.html
+++ b/doc/oscl_html/classOsclProcStatus.html
@@ -161,7 +161,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__procstatus_8h-source.html">oscl_procstatus.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclPtr.html b/doc/oscl_html/classOsclPtr.html
index 146d1e6..5bdb5d4 100644
--- a/doc/oscl_html/classOsclPtr.html
+++ b/doc/oscl_html/classOsclPtr.html
@@ -320,7 +320,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__file__async__read_8h-source.html">oscl_file_async_read.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclPtrC.html b/doc/oscl_html/classOsclPtrC.html
index 15f7549..24c4aae 100644
--- a/doc/oscl_html/classOsclPtrC.html
+++ b/doc/oscl_html/classOsclPtrC.html
@@ -350,7 +350,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__file__async__read_8h-source.html">oscl_file_async_read.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclRand.html b/doc/oscl_html/classOsclRand.html
index c4d714c..f389460 100644
--- a/doc/oscl_html/classOsclRand.html
+++ b/doc/oscl_html/classOsclRand.html
@@ -78,7 +78,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__rand_8h-source.html">oscl_rand.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclReadyAlloc.html b/doc/oscl_html/classOsclReadyAlloc.html
index ae788a1..1dbc322 100644
--- a/doc/oscl_html/classOsclReadyAlloc.html
+++ b/doc/oscl_html/classOsclReadyAlloc.html
@@ -137,7 +137,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__scheduler__readyq_8h-source.html">oscl_scheduler_readyq.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclReadyCompare.html b/doc/oscl_html/classOsclReadyCompare.html
index 2ba5392..3257a95 100644
--- a/doc/oscl_html/classOsclReadyCompare.html
+++ b/doc/oscl_html/classOsclReadyCompare.html
@@ -58,7 +58,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__scheduler__readyq_8h-source.html">oscl_scheduler_readyq.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclReadyQ.html b/doc/oscl_html/classOsclReadyQ.html
index 59bb87d..f004abc 100644
--- a/doc/oscl_html/classOsclReadyQ.html
+++ b/doc/oscl_html/classOsclReadyQ.html
@@ -487,7 +487,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__scheduler__readyq_8h-source.html">oscl_scheduler_readyq.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclRecvFromMethod.html b/doc/oscl_html/classOsclRecvFromMethod.html
index 8786a53..7a31950 100644
--- a/doc/oscl_html/classOsclRecvFromMethod.html
+++ b/doc/oscl_html/classOsclRecvFromMethod.html
@@ -214,7 +214,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__recv__from_8h-source.html">oscl_socket_recv_from.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclRecvFromRequest.html b/doc/oscl_html/classOsclRecvFromRequest.html
index 4a71c4e..0c89a62 100644
--- a/doc/oscl_html/classOsclRecvFromRequest.html
+++ b/doc/oscl_html/classOsclRecvFromRequest.html
@@ -183,7 +183,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__recv__from_8h-source.html">oscl_socket_recv_from.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclRecvMethod.html b/doc/oscl_html/classOsclRecvMethod.html
index 1e69dc5..02d82da 100644
--- a/doc/oscl_html/classOsclRecvMethod.html
+++ b/doc/oscl_html/classOsclRecvMethod.html
@@ -190,7 +190,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__recv_8h-source.html">oscl_socket_recv.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclRecvRequest.html b/doc/oscl_html/classOsclRecvRequest.html
index db7c5f3..86959c6 100644
--- a/doc/oscl_html/classOsclRecvRequest.html
+++ b/doc/oscl_html/classOsclRecvRequest.html
@@ -159,7 +159,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__recv_8h-source.html">oscl_socket_recv.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclRefCounter.html b/doc/oscl_html/classOsclRefCounter.html
index daa83c3..3b05a03 100644
--- a/doc/oscl_html/classOsclRefCounter.html
+++ b/doc/oscl_html/classOsclRefCounter.html
@@ -154,7 +154,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__refcounter_8h-source.html">oscl_refcounter.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclRefCounterDA.html b/doc/oscl_html/classOsclRefCounterDA.html
index d20b3ce..c335b25 100644
--- a/doc/oscl_html/classOsclRefCounterDA.html
+++ b/doc/oscl_html/classOsclRefCounterDA.html
@@ -198,7 +198,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__refcounter_8h-source.html">oscl_refcounter.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclRefCounterMTDA.html b/doc/oscl_html/classOsclRefCounterMTDA.html
index a909ca9..403f38d 100644
--- a/doc/oscl_html/classOsclRefCounterMTDA.html
+++ b/doc/oscl_html/classOsclRefCounterMTDA.html
@@ -221,7 +221,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__refcounter_8h-source.html">oscl_refcounter.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclRefCounterMTSA.html b/doc/oscl_html/classOsclRefCounterMTSA.html
index 8673164..37e74d1 100644
--- a/doc/oscl_html/classOsclRefCounterMTSA.html
+++ b/doc/oscl_html/classOsclRefCounterMTSA.html
@@ -210,7 +210,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__refcounter_8h-source.html">oscl_refcounter.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclRefCounterMemFrag.html b/doc/oscl_html/classOsclRefCounterMemFrag.html
index fdc467d..4550202 100644
--- a/doc/oscl_html/classOsclRefCounterMemFrag.html
+++ b/doc/oscl_html/classOsclRefCounterMemFrag.html
@@ -373,7 +373,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__refcounter__memfrag_8h-source.html">oscl_refcounter_memfrag.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclRefCounterSA.html b/doc/oscl_html/classOsclRefCounterSA.html
index e9a0023..c7e053e 100644
--- a/doc/oscl_html/classOsclRefCounterSA.html
+++ b/doc/oscl_html/classOsclRefCounterSA.html
@@ -210,7 +210,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__refcounter_8h-source.html">oscl_refcounter.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclRegistryAccessClient.html b/doc/oscl_html/classOsclRegistryAccessClient.html
index 9041bf0..271874c 100644
--- a/doc/oscl_html/classOsclRegistryAccessClient.html
+++ b/doc/oscl_html/classOsclRegistryAccessClient.html
@@ -219,7 +219,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__registry__access__client_8h-source.html">oscl_registry_access_client.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclRegistryAccessClientImpl.html b/doc/oscl_html/classOsclRegistryAccessClientImpl.html
index b28a47c..fcf82b3 100644
--- a/doc/oscl_html/classOsclRegistryAccessClientImpl.html
+++ b/doc/oscl_html/classOsclRegistryAccessClientImpl.html
@@ -22,7 +22,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__registry__client__impl_8h-source.html">oscl_registry_client_impl.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclRegistryAccessClientTlsImpl.html b/doc/oscl_html/classOsclRegistryAccessClientTlsImpl.html
index c364d35..4e056e5 100644
--- a/doc/oscl_html/classOsclRegistryAccessClientTlsImpl.html
+++ b/doc/oscl_html/classOsclRegistryAccessClientTlsImpl.html
@@ -22,7 +22,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__registry__client__impl_8h-source.html">oscl_registry_client_impl.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclRegistryAccessElement.html b/doc/oscl_html/classOsclRegistryAccessElement.html
index 3fa469c..6bf5f5a 100644
--- a/doc/oscl_html/classOsclRegistryAccessElement.html
+++ b/doc/oscl_html/classOsclRegistryAccessElement.html
@@ -68,7 +68,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__registry__types_8h-source.html">oscl_registry_types.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclRegistryClient.html b/doc/oscl_html/classOsclRegistryClient.html
index 73908f7..8c1c29f 100644
--- a/doc/oscl_html/classOsclRegistryClient.html
+++ b/doc/oscl_html/classOsclRegistryClient.html
@@ -229,7 +229,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__registry__client_8h-source.html">oscl_registry_client.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclRegistryClientImpl.html b/doc/oscl_html/classOsclRegistryClientImpl.html
index ae7edf8..a436dc3 100644
--- a/doc/oscl_html/classOsclRegistryClientImpl.html
+++ b/doc/oscl_html/classOsclRegistryClientImpl.html
@@ -269,7 +269,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__registry__client__impl_8h-source.html">oscl_registry_client_impl.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclRegistryClientTlsImpl.html b/doc/oscl_html/classOsclRegistryClientTlsImpl.html
index e2a5638..7d8af66 100644
--- a/doc/oscl_html/classOsclRegistryClientTlsImpl.html
+++ b/doc/oscl_html/classOsclRegistryClientTlsImpl.html
@@ -22,7 +22,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__registry__client__impl_8h-source.html">oscl_registry_client_impl.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclRegistryServTlsImpl.html b/doc/oscl_html/classOsclRegistryServTlsImpl.html
index e38e472..ed7b91d 100644
--- a/doc/oscl_html/classOsclRegistryServTlsImpl.html
+++ b/doc/oscl_html/classOsclRegistryServTlsImpl.html
@@ -328,7 +328,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__registry__serv__impl__tls_8h-source.html">oscl_registry_serv_impl_tls.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclScheduler.html b/doc/oscl_html/classOsclScheduler.html
index dbeb390..7ed9345 100644
--- a/doc/oscl_html/classOsclScheduler.html
+++ b/doc/oscl_html/classOsclScheduler.html
@@ -105,7 +105,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__scheduler_8h-source.html">oscl_scheduler.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclSchedulerObserver.html b/doc/oscl_html/classOsclSchedulerObserver.html
index d3765cd..763a21a 100644
--- a/doc/oscl_html/classOsclSchedulerObserver.html
+++ b/doc/oscl_html/classOsclSchedulerObserver.html
@@ -125,7 +125,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__scheduler_8h-source.html">oscl_scheduler.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclScopedLock.html b/doc/oscl_html/classOsclScopedLock.html
index b02399e..2d16505 100644
--- a/doc/oscl_html/classOsclScopedLock.html
+++ b/doc/oscl_html/classOsclScopedLock.html
@@ -103,7 +103,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__lock__base_8h-source.html">oscl_lock_base.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclSelect.html b/doc/oscl_html/classOsclSelect.html
index 31ac605..fa6f015 100644
--- a/doc/oscl_html/classOsclSelect.html
+++ b/doc/oscl_html/classOsclSelect.html
@@ -369,7 +369,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__init_8h-source.html">oscl_init.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclSemaphore.html b/doc/oscl_html/classOsclSemaphore.html
index ca248a3..bfea664 100644
--- a/doc/oscl_html/classOsclSemaphore.html
+++ b/doc/oscl_html/classOsclSemaphore.html
@@ -290,7 +290,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__semaphore_8h-source.html">oscl_semaphore.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclSendMethod.html b/doc/oscl_html/classOsclSendMethod.html
index 2ef2c7b..1ac59c6 100644
--- a/doc/oscl_html/classOsclSendMethod.html
+++ b/doc/oscl_html/classOsclSendMethod.html
@@ -190,7 +190,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__send_8h-source.html">oscl_socket_send.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclSendRequest.html b/doc/oscl_html/classOsclSendRequest.html
index fc58770..54bcbd3 100644
--- a/doc/oscl_html/classOsclSendRequest.html
+++ b/doc/oscl_html/classOsclSendRequest.html
@@ -156,7 +156,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__send_8h-source.html">oscl_socket_send.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclSendToMethod.html b/doc/oscl_html/classOsclSendToMethod.html
index b84b828..41638cd 100644
--- a/doc/oscl_html/classOsclSendToMethod.html
+++ b/doc/oscl_html/classOsclSendToMethod.html
@@ -196,7 +196,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__send__to_8h-source.html">oscl_socket_send_to.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclSendToRequest.html b/doc/oscl_html/classOsclSendToRequest.html
index f807d0b..bafa052 100644
--- a/doc/oscl_html/classOsclSendToRequest.html
+++ b/doc/oscl_html/classOsclSendToRequest.html
@@ -165,7 +165,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__send__to_8h-source.html">oscl_socket_send_to.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclSharedPtr.html b/doc/oscl_html/classOsclSharedPtr.html
index 60eee02..4ad7f23 100644
--- a/doc/oscl_html/classOsclSharedPtr.html
+++ b/doc/oscl_html/classOsclSharedPtr.html
@@ -481,7 +481,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__shared__ptr_8h-source.html">oscl_shared_ptr.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclShutdownMethod.html b/doc/oscl_html/classOsclShutdownMethod.html
index c963a4e..1e3d987 100644
--- a/doc/oscl_html/classOsclShutdownMethod.html
+++ b/doc/oscl_html/classOsclShutdownMethod.html
@@ -154,7 +154,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__shutdown_8h-source.html">oscl_socket_shutdown.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclShutdownRequest.html b/doc/oscl_html/classOsclShutdownRequest.html
index cb71a78..bd3e732 100644
--- a/doc/oscl_html/classOsclShutdownRequest.html
+++ b/doc/oscl_html/classOsclShutdownRequest.html
@@ -89,7 +89,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__shutdown_8h-source.html">oscl_socket_shutdown.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclSingleton.html b/doc/oscl_html/classOsclSingleton.html
index 18ec505..c36edbb 100644
--- a/doc/oscl_html/classOsclSingleton.html
+++ b/doc/oscl_html/classOsclSingleton.html
@@ -223,7 +223,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__singleton_8h-source.html">oscl_singleton.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclSingletonRegistry.html b/doc/oscl_html/classOsclSingletonRegistry.html
index cec4116..1b34ba3 100644
--- a/doc/oscl_html/classOsclSingletonRegistry.html
+++ b/doc/oscl_html/classOsclSingletonRegistry.html
@@ -209,7 +209,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__singleton_8h-source.html">oscl_singleton.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclSocketI.html b/doc/oscl_html/classOsclSocketI.html
index 47e3313..70597b3 100644
--- a/doc/oscl_html/classOsclSocketI.html
+++ b/doc/oscl_html/classOsclSocketI.html
@@ -35,7 +35,7 @@
 <tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classOsclSocketI.html#a16">RecvSuccess</a> (<a class="el" href="classRecvParam.html">RecvParam</a> &amp;)</td></tr>
 <tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classOsclSocketI.html#a17">RecvFrom</a> (<a class="el" href="classRecvFromParam.html">RecvFromParam</a> &amp;, <a class="el" href="classOsclSocketRequestAO.html">OsclSocketRequestAO</a> &amp;)</td></tr>
 <tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classOsclSocketI.html#a18">RecvFromSuccess</a> (<a class="el" href="classRecvFromParam.html">RecvFromParam</a> &amp;)</td></tr>
-<tr><td nowrap align=right valign=top><a class="el" href="osclconfig__io_8h.html#a42">TOsclSocket</a>&nbsp;</td><td valign=bottom><a class="el" href="classOsclSocketI.html#a19">Socket</a> ()</td></tr>
+<tr><td nowrap align=right valign=top><a class="el" href="osclconfig__io_8h.html#a44">TOsclSocket</a>&nbsp;</td><td valign=bottom><a class="el" href="classOsclSocketI.html#a19">Socket</a> ()</td></tr>
 <tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classOsclSocketI.html#a20">ProcessConnect</a> (<a class="el" href="classOsclSocketServRequestQElem.html">OsclSocketServRequestQElem</a> *)</td></tr>
 <tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classOsclSocketI.html#a21">ProcessShutdown</a> (<a class="el" href="classOsclSocketServRequestQElem.html">OsclSocketServRequestQElem</a> *)</td></tr>
 <tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classOsclSocketI.html#a22">ProcessAccept</a> (<a class="el" href="classOsclSocketServRequestQElem.html">OsclSocketServRequestQElem</a> *)</td></tr>
@@ -46,8 +46,8 @@
 <tr><td nowrap align=right valign=top><a class="el" href="classPVLogger.html">PVLogger</a> *&nbsp;</td><td valign=bottom><a class="el" href="classOsclSocketI.html#a27">Logger</a> ()</td></tr>
 <tr><td colspan=2><br><h2>Static Public Methods</h2></td></tr>
 <tr><td nowrap align=right valign=top>OsclSocketI *&nbsp;</td><td valign=bottom><a class="el" href="classOsclSocketI.html#d0">NewL</a> (<a class="el" href="classOscl__DefAlloc.html">Oscl_DefAlloc</a> &amp;a)</td></tr>
-<tr><td nowrap align=right valign=top>bool&nbsp;</td><td valign=bottom><a class="el" href="classOsclSocketI.html#d1">MakeAddr</a> (<a class="el" href="classOsclNetworkAddress.html">OsclNetworkAddress</a> &amp;in, <a class="el" href="osclconfig__io_8h.html#a43">TOsclSockAddr</a> &amp;addr)</td></tr>
-<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classOsclSocketI.html#d2">MakeAddr</a> (<a class="el" href="osclconfig__io_8h.html#a43">TOsclSockAddr</a> &amp;in, <a class="el" href="classOsclNetworkAddress.html">OsclNetworkAddress</a> &amp;addr)</td></tr>
+<tr><td nowrap align=right valign=top>bool&nbsp;</td><td valign=bottom><a class="el" href="classOsclSocketI.html#d1">MakeAddr</a> (<a class="el" href="classOsclNetworkAddress.html">OsclNetworkAddress</a> &amp;in, <a class="el" href="osclconfig__io_8h.html#a45">TOsclSockAddr</a> &amp;addr)</td></tr>
+<tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="classOsclSocketI.html#d2">MakeAddr</a> (<a class="el" href="osclconfig__io_8h.html#a45">TOsclSockAddr</a> &amp;in, <a class="el" href="classOsclNetworkAddress.html">OsclNetworkAddress</a> &amp;addr)</td></tr>
 <tr><td colspan=2><br><h2>Friends</h2></td></tr>
 <tr><td nowrap align=right valign=top>class&nbsp;</td><td valign=bottom><a class="el" href="classOsclSocketI.html#l0">OsclAcceptRequest</a></td></tr>
 <tr><td nowrap align=right valign=top>class&nbsp;</td><td valign=bottom><a class="el" href="classOsclSocketI.html#l1">OsclConnectRequest</a></td></tr>
@@ -331,7 +331,7 @@
         <tr>
           <td class="md" nowrap valign="top"> void OsclSocketI::MakeAddr </td>
           <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="osclconfig__io_8h.html#a43">TOsclSockAddr</a> &amp;&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="osclconfig__io_8h.html#a45">TOsclSockAddr</a> &amp;&nbsp;</td>
           <td class="mdname" nowrap>&nbsp; <em>in</em>, </td>
         </tr>
         <tr>
@@ -375,7 +375,7 @@
         <tr>
           <td></td>
           <td></td>
-          <td class="md" nowrap><a class="el" href="osclconfig__io_8h.html#a43">TOsclSockAddr</a> &amp;&nbsp;</td>
+          <td class="md" nowrap><a class="el" href="osclconfig__io_8h.html#a45">TOsclSockAddr</a> &amp;&nbsp;</td>
           <td class="mdname" nowrap>&nbsp; <em>addr</em></td>
         </tr>
         <tr>
@@ -1073,7 +1073,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> <a class="el" href="osclconfig__io_8h.html#a42">TOsclSocket</a> OsclSocketI::Socket </td>
+          <td class="md" nowrap valign="top"> <a class="el" href="osclconfig__io_8h.html#a44">TOsclSocket</a> OsclSocketI::Socket </td>
           <td class="md" valign="top">(&nbsp;</td>
           <td class="mdname1" valign="top" nowrap>&nbsp;          </td>
           <td class="md" valign="top">)&nbsp;</td>
@@ -1301,7 +1301,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__imp__pv_8h-source.html">oscl_socket_imp_pv.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclSocketIBase.html b/doc/oscl_html/classOsclSocketIBase.html
index d6e98a0..065fccf 100644
--- a/doc/oscl_html/classOsclSocketIBase.html
+++ b/doc/oscl_html/classOsclSocketIBase.html
@@ -1369,7 +1369,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__imp__base_8h-source.html">oscl_socket_imp_base.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclSocketMethod.html b/doc/oscl_html/classOsclSocketMethod.html
index ae5ead2..a5d5eac 100644
--- a/doc/oscl_html/classOsclSocketMethod.html
+++ b/doc/oscl_html/classOsclSocketMethod.html
@@ -434,7 +434,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__method_8h-source.html">oscl_socket_method.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclSocketObserver.html b/doc/oscl_html/classOsclSocketObserver.html
index 1b1ad61..74e557b 100644
--- a/doc/oscl_html/classOsclSocketObserver.html
+++ b/doc/oscl_html/classOsclSocketObserver.html
@@ -111,7 +111,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__types_8h-source.html">oscl_socket_types.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclSocketRequest.html b/doc/oscl_html/classOsclSocketRequest.html
index 22ac6cd..734fca0 100644
--- a/doc/oscl_html/classOsclSocketRequest.html
+++ b/doc/oscl_html/classOsclSocketRequest.html
@@ -262,7 +262,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__request_8h-source.html">oscl_socket_request.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclSocketRequestAO.html b/doc/oscl_html/classOsclSocketRequestAO.html
index 95a545d..3209d79 100644
--- a/doc/oscl_html/classOsclSocketRequestAO.html
+++ b/doc/oscl_html/classOsclSocketRequestAO.html
@@ -670,7 +670,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__method_8h-source.html">oscl_socket_method.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclSocketServ.html b/doc/oscl_html/classOsclSocketServ.html
index 9407c27..aefc50f 100644
--- a/doc/oscl_html/classOsclSocketServ.html
+++ b/doc/oscl_html/classOsclSocketServ.html
@@ -234,7 +234,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket_8h-source.html">oscl_socket.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclSocketServI.html b/doc/oscl_html/classOsclSocketServI.html
index 312b39e..cdb058e 100644
--- a/doc/oscl_html/classOsclSocketServI.html
+++ b/doc/oscl_html/classOsclSocketServI.html
@@ -338,7 +338,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__serv__imp__pv_8h-source.html">oscl_socket_serv_imp_pv.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclSocketServIBase.html b/doc/oscl_html/classOsclSocketServIBase.html
index 9d88c77..6a5b9be 100644
--- a/doc/oscl_html/classOsclSocketServIBase.html
+++ b/doc/oscl_html/classOsclSocketServIBase.html
@@ -340,7 +340,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__serv__imp__base_8h-source.html">oscl_socket_serv_imp_base.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclSocketServRequestList.html b/doc/oscl_html/classOsclSocketServRequestList.html
index 5388222..3c9440d 100644
--- a/doc/oscl_html/classOsclSocketServRequestList.html
+++ b/doc/oscl_html/classOsclSocketServRequestList.html
@@ -281,7 +281,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__serv__imp__reqlist_8h-source.html">oscl_socket_serv_imp_reqlist.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclSocketServRequestQElem.html b/doc/oscl_html/classOsclSocketServRequestQElem.html
index 5318d2e..5ce32d1 100644
--- a/doc/oscl_html/classOsclSocketServRequestQElem.html
+++ b/doc/oscl_html/classOsclSocketServRequestQElem.html
@@ -117,7 +117,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__serv__imp__reqlist_8h-source.html">oscl_socket_serv_imp_reqlist.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclTCPSocket.html b/doc/oscl_html/classOsclTCPSocket.html
index abe7be4..948c3d9 100644
--- a/doc/oscl_html/classOsclTCPSocket.html
+++ b/doc/oscl_html/classOsclTCPSocket.html
@@ -885,7 +885,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket_8h-source.html">oscl_socket.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclTCPSocketI.html b/doc/oscl_html/classOsclTCPSocketI.html
index 79d3175..7eeb3a3 100644
--- a/doc/oscl_html/classOsclTCPSocketI.html
+++ b/doc/oscl_html/classOsclTCPSocketI.html
@@ -740,7 +740,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__tcp__socket_8h-source.html">oscl_tcp_socket.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclTLS.html b/doc/oscl_html/classOsclTLS.html
index f04cda3..dde75aa 100644
--- a/doc/oscl_html/classOsclTLS.html
+++ b/doc/oscl_html/classOsclTLS.html
@@ -226,7 +226,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__tls_8h-source.html">oscl_tls.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclTLSEx.html b/doc/oscl_html/classOsclTLSEx.html
index 1746032..e36f09e 100644
--- a/doc/oscl_html/classOsclTLSEx.html
+++ b/doc/oscl_html/classOsclTLSEx.html
@@ -226,7 +226,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__error_8h-source.html">oscl_error.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclTLSRegistry.html b/doc/oscl_html/classOsclTLSRegistry.html
index c545e51..49b391c 100644
--- a/doc/oscl_html/classOsclTLSRegistry.html
+++ b/doc/oscl_html/classOsclTLSRegistry.html
@@ -128,7 +128,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__tls_8h-source.html">oscl_tls.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclTLSRegistryEx.html b/doc/oscl_html/classOsclTLSRegistryEx.html
index 628d7fe..b2ec627 100644
--- a/doc/oscl_html/classOsclTLSRegistryEx.html
+++ b/doc/oscl_html/classOsclTLSRegistryEx.html
@@ -88,7 +88,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__error_8h-source.html">oscl_error.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclThread.html b/doc/oscl_html/classOsclThread.html
index a9d07f3..36178f5 100644
--- a/doc/oscl_html/classOsclThread.html
+++ b/doc/oscl_html/classOsclThread.html
@@ -13,7 +13,7 @@
 <tr><td colspan=2><br><h2>Public Methods</h2></td></tr>
 <tr><td nowrap align=right valign=top>OSCL_IMPORT_REF&nbsp;</td><td valign=bottom><a class="el" href="classOsclThread.html#a0">OsclThread</a> ()</td></tr>
 <tr><td nowrap align=right valign=top>OSCL_IMPORT_REF&nbsp;</td><td valign=bottom><a class="el" href="classOsclThread.html#a1">~OsclThread</a> ()</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="classOsclProcStatus.html#s35">OsclProcStatus::eOsclProcError</a>&nbsp;</td><td valign=bottom><a class="el" href="classOsclThread.html#a2">Create</a> (<a class="el" href="oscl__thread_8h.html#a0">TOsclThreadFuncPtr</a> func, int32 stack_size, <a class="el" href="osclconfig__proc__unix__nj_8h.html#a7">TOsclThreadFuncArg</a> argument, <a class="el" href="oscl__thread_8h.html#a10">OsclThread_State</a> state=Start_on_creation)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="classOsclProcStatus.html#s35">OsclProcStatus::eOsclProcError</a>&nbsp;</td><td valign=bottom><a class="el" href="classOsclThread.html#a2">Create</a> (<a class="el" href="oscl__thread_8h.html#a0">TOsclThreadFuncPtr</a> func, int32 stack_size, <a class="el" href="osclconfig__proc__unix__android_8h.html#a7">TOsclThreadFuncArg</a> argument, <a class="el" href="oscl__thread_8h.html#a10">OsclThread_State</a> state=Start_on_creation)</td></tr>
 <tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="classOsclProcStatus.html#s35">OsclProcStatus::eOsclProcError</a>&nbsp;</td><td valign=bottom><a class="el" href="classOsclThread.html#a3">GetPriority</a> (<a class="el" href="oscl__thread_8h.html#a11">OsclThreadPriority</a> &amp;refThreadPriority)</td></tr>
 <tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="classOsclProcStatus.html#s35">OsclProcStatus::eOsclProcError</a>&nbsp;</td><td valign=bottom><a class="el" href="classOsclThread.html#a4">SetPriority</a> (<a class="el" href="oscl__thread_8h.html#a11">OsclThreadPriority</a> ePriority)</td></tr>
 <tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="classOsclProcStatus.html#s35">OsclProcStatus::eOsclProcError</a>&nbsp;</td><td valign=bottom><a class="el" href="classOsclThread.html#a5">Suspend</a> ()</td></tr>
@@ -22,8 +22,8 @@
 <tr><td colspan=2><br><h2>Static Public Methods</h2></td></tr>
 <tr><td nowrap align=right valign=top>OSCL_IMPORT_REF void&nbsp;</td><td valign=bottom><a class="el" href="classOsclThread.html#d0">Exit</a> (<a class="el" href="group__osclbase.html#a25">OsclAny</a> *exitcode)</td></tr>
 <tr><td nowrap align=right valign=top>OSCL_IMPORT_REF void&nbsp;</td><td valign=bottom><a class="el" href="classOsclThread.html#d1">EnableKill</a> ()</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="classOsclProcStatus.html#s35">OsclProcStatus::eOsclProcError</a>&nbsp;</td><td valign=bottom><a class="el" href="classOsclThread.html#d2">GetId</a> (<a class="el" href="osclconfig__proc__unix__nj_8h.html#a6">TOsclThreadId</a> &amp;refThreadId)</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF bool&nbsp;</td><td valign=bottom><a class="el" href="classOsclThread.html#d3">CompareId</a> (<a class="el" href="osclconfig__proc__unix__nj_8h.html#a6">TOsclThreadId</a> &amp;t1, <a class="el" href="osclconfig__proc__unix__nj_8h.html#a6">TOsclThreadId</a> &amp;t2)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="classOsclProcStatus.html#s35">OsclProcStatus::eOsclProcError</a>&nbsp;</td><td valign=bottom><a class="el" href="classOsclThread.html#d2">GetId</a> (<a class="el" href="osclconfig__proc__unix__android_8h.html#a6">TOsclThreadId</a> &amp;refThreadId)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF bool&nbsp;</td><td valign=bottom><a class="el" href="classOsclThread.html#d3">CompareId</a> (<a class="el" href="osclconfig__proc__unix__android_8h.html#a6">TOsclThreadId</a> &amp;t1, <a class="el" href="osclconfig__proc__unix__android_8h.html#a6">TOsclThreadId</a> &amp;t2)</td></tr>
 <tr><td nowrap align=right valign=top>OSCL_IMPORT_REF void&nbsp;</td><td valign=bottom><a class="el" href="classOsclThread.html#d4">SleepMillisec</a> (const int32 msec)</td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
@@ -95,13 +95,13 @@
         <tr>
           <td class="md" nowrap valign="top"> OSCL_IMPORT_REF bool OsclThread::CompareId </td>
           <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="osclconfig__proc__unix__nj_8h.html#a6">TOsclThreadId</a> &amp;&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="osclconfig__proc__unix__android_8h.html#a6">TOsclThreadId</a> &amp;&nbsp;</td>
           <td class="mdname" nowrap>&nbsp; <em>t1</em>, </td>
         </tr>
         <tr>
           <td></td>
           <td></td>
-          <td class="md" nowrap><a class="el" href="osclconfig__proc__unix__nj_8h.html#a6">TOsclThreadId</a> &amp;&nbsp;</td>
+          <td class="md" nowrap><a class="el" href="osclconfig__proc__unix__android_8h.html#a6">TOsclThreadId</a> &amp;&nbsp;</td>
           <td class="mdname" nowrap>&nbsp; <em>t2</em></td>
         </tr>
         <tr>
@@ -151,7 +151,7 @@
         <tr>
           <td></td>
           <td></td>
-          <td class="md" nowrap><a class="el" href="osclconfig__proc__unix__nj_8h.html#a7">TOsclThreadFuncArg</a>&nbsp;</td>
+          <td class="md" nowrap><a class="el" href="osclconfig__proc__unix__android_8h.html#a7">TOsclThreadFuncArg</a>&nbsp;</td>
           <td class="mdname" nowrap>&nbsp; <em>argument</em>, </td>
         </tr>
         <tr>
@@ -261,7 +261,7 @@
         <tr>
           <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="classOsclProcStatus.html#s35">OsclProcStatus::eOsclProcError</a> OsclThread::GetId </td>
           <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top"><a class="el" href="osclconfig__proc__unix__nj_8h.html#a6">TOsclThreadId</a> &amp;&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="osclconfig__proc__unix__android_8h.html#a6">TOsclThreadId</a> &amp;&nbsp;</td>
           <td class="mdname1" valign="top" nowrap>&nbsp; <em>refThreadId</em>          </td>
           <td class="md" valign="top">)&nbsp;</td>
           <td class="md" nowrap><code> [static]</code></td>
@@ -500,7 +500,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__thread_8h-source.html">oscl_thread.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclThreadLock.html b/doc/oscl_html/classOsclThreadLock.html
index b062b96..9b8b0a1 100644
--- a/doc/oscl_html/classOsclThreadLock.html
+++ b/doc/oscl_html/classOsclThreadLock.html
@@ -145,7 +145,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__mutex_8h-source.html">oscl_mutex.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclTickCount.html b/doc/oscl_html/classOsclTickCount.html
index 86a6af7..70dbe64 100644
--- a/doc/oscl_html/classOsclTickCount.html
+++ b/doc/oscl_html/classOsclTickCount.html
@@ -186,7 +186,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__tickcount_8h-source.html">oscl_tickcount.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclTimer.html b/doc/oscl_html/classOsclTimer.html
index 94b96ae..b30968e 100644
--- a/doc/oscl_html/classOsclTimer.html
+++ b/doc/oscl_html/classOsclTimer.html
@@ -478,7 +478,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__timer_8h-source.html">oscl_timer.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclTimerCompare.html b/doc/oscl_html/classOsclTimerCompare.html
index 662d0f4..a8810c8 100644
--- a/doc/oscl_html/classOsclTimerCompare.html
+++ b/doc/oscl_html/classOsclTimerCompare.html
@@ -58,7 +58,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__scheduler__readyq_8h-source.html">oscl_scheduler_readyq.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclTimerObject.html b/doc/oscl_html/classOsclTimerObject.html
index c499bc0..d842b03 100644
--- a/doc/oscl_html/classOsclTimerObject.html
+++ b/doc/oscl_html/classOsclTimerObject.html
@@ -526,7 +526,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__scheduler__ao_8h-source.html">oscl_scheduler_ao.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclTimerObserver.html b/doc/oscl_html/classOsclTimerObserver.html
index a4dce9a..f91e43b 100644
--- a/doc/oscl_html/classOsclTimerObserver.html
+++ b/doc/oscl_html/classOsclTimerObserver.html
@@ -95,7 +95,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__timer_8h-source.html">oscl_timer.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclTimerQ.html b/doc/oscl_html/classOsclTimerQ.html
index daeb744..3e06343 100644
--- a/doc/oscl_html/classOsclTimerQ.html
+++ b/doc/oscl_html/classOsclTimerQ.html
@@ -234,7 +234,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__scheduler__readyq_8h-source.html">oscl_scheduler_readyq.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclTrapItem.html b/doc/oscl_html/classOsclTrapItem.html
index 39410bd..b1c8d27 100644
--- a/doc/oscl_html/classOsclTrapItem.html
+++ b/doc/oscl_html/classOsclTrapItem.html
@@ -136,7 +136,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__heapbase_8h-source.html">oscl_heapbase.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclTrapStack.html b/doc/oscl_html/classOsclTrapStack.html
index 62ce219..9f891fa 100644
--- a/doc/oscl_html/classOsclTrapStack.html
+++ b/doc/oscl_html/classOsclTrapStack.html
@@ -91,7 +91,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__error__trapcleanup_8h-source.html">oscl_error_trapcleanup.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclTrapStackItem.html b/doc/oscl_html/classOsclTrapStackItem.html
index f6e567f..25e41a7 100644
--- a/doc/oscl_html/classOsclTrapStackItem.html
+++ b/doc/oscl_html/classOsclTrapStackItem.html
@@ -235,7 +235,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__error__trapcleanup_8h-source.html">oscl_error_trapcleanup.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclUDPSocket.html b/doc/oscl_html/classOsclUDPSocket.html
index 714bc6b..343b03c 100644
--- a/doc/oscl_html/classOsclUDPSocket.html
+++ b/doc/oscl_html/classOsclUDPSocket.html
@@ -624,7 +624,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket_8h-source.html">oscl_socket.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOsclUDPSocketI.html b/doc/oscl_html/classOsclUDPSocketI.html
index ee9a525..9286b29 100644
--- a/doc/oscl_html/classOsclUDPSocketI.html
+++ b/doc/oscl_html/classOsclUDPSocketI.html
@@ -447,7 +447,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__udp__socket_8h-source.html">oscl_udp_socket.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOscl__Alloc.html b/doc/oscl_html/classOscl__Alloc.html
index c66e5c1..232b88f 100644
--- a/doc/oscl_html/classOscl__Alloc.html
+++ b/doc/oscl_html/classOscl__Alloc.html
@@ -112,7 +112,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__defalloc_8h-source.html">oscl_defalloc.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOscl__Dealloc.html b/doc/oscl_html/classOscl__Dealloc.html
index 87d2a91..6061d5b 100644
--- a/doc/oscl_html/classOscl__Dealloc.html
+++ b/doc/oscl_html/classOscl__Dealloc.html
@@ -65,7 +65,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__defalloc_8h-source.html">oscl_defalloc.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOscl__DefAlloc.html b/doc/oscl_html/classOscl__DefAlloc.html
index 22dfc1c..25d5810 100644
--- a/doc/oscl_html/classOscl__DefAlloc.html
+++ b/doc/oscl_html/classOscl__DefAlloc.html
@@ -151,7 +151,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__defalloc_8h-source.html">oscl_defalloc.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOscl__DefAllocWithRefCounter.html b/doc/oscl_html/classOscl__DefAllocWithRefCounter.html
index 9e26028..1dc1b80 100644
--- a/doc/oscl_html/classOscl__DefAllocWithRefCounter.html
+++ b/doc/oscl_html/classOscl__DefAllocWithRefCounter.html
@@ -202,7 +202,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__refcounter_8h-source.html">oscl_refcounter.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOscl__File.html b/doc/oscl_html/classOscl__File.html
index 7aa975a..ce20d71 100644
--- a/doc/oscl_html/classOscl__File.html
+++ b/doc/oscl_html/classOscl__File.html
@@ -51,20 +51,21 @@
 <tr><td nowrap align=right valign=top>OSCL_IMPORT_REF int32&nbsp;</td><td valign=bottom><a class="el" href="classOscl__File.html#a10">Open</a> (const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *filename, uint32 mode, <a class="el" href="classOscl__FileServer.html">Oscl_FileServer</a> &amp;fileserv)</td></tr>
 <tr><td nowrap align=right valign=top>OSCL_IMPORT_REF uint32&nbsp;</td><td valign=bottom><a class="el" href="classOscl__File.html#a11">Read</a> (<a class="el" href="group__osclbase.html#a25">OsclAny</a> *buffer, uint32 size, uint32 numelements)</td></tr>
 <tr><td nowrap align=right valign=top>OSCL_IMPORT_REF uint32&nbsp;</td><td valign=bottom><a class="el" href="classOscl__File.html#a12">Write</a> (const <a class="el" href="group__osclbase.html#a25">OsclAny</a> *buffer, uint32 size, uint32 numelements)</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF int32&nbsp;</td><td valign=bottom><a class="el" href="classOscl__File.html#a13">Seek</a> (int32 offset, <a class="el" href="classOscl__File.html#s11">seek_type</a> origin)</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF int32&nbsp;</td><td valign=bottom><a class="el" href="classOscl__File.html#a14">Tell</a> ()</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF int32&nbsp;</td><td valign=bottom><a class="el" href="classOscl__File.html#a13">Seek</a> (<a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> offset, <a class="el" href="classOscl__File.html#s11">seek_type</a> origin)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a>&nbsp;</td><td valign=bottom><a class="el" href="classOscl__File.html#a14">Tell</a> ()</td></tr>
 <tr><td nowrap align=right valign=top>OSCL_IMPORT_REF int32&nbsp;</td><td valign=bottom><a class="el" href="classOscl__File.html#a15">Close</a> ()</td></tr>
 <tr><td nowrap align=right valign=top>OSCL_IMPORT_REF int32&nbsp;</td><td valign=bottom><a class="el" href="classOscl__File.html#a16">Flush</a> ()</td></tr>
 <tr><td nowrap align=right valign=top>OSCL_IMPORT_REF int32&nbsp;</td><td valign=bottom><a class="el" href="classOscl__File.html#a17">EndOfFile</a> ()</td></tr>
 <tr><td nowrap align=right valign=top>OSCL_IMPORT_REF int32&nbsp;</td><td valign=bottom><a class="el" href="classOscl__File.html#a18">GetError</a> ()</td></tr>
 <tr><td nowrap align=right valign=top><a class="el" href="classOsclFileHandle.html">OsclFileHandle</a> *&nbsp;</td><td valign=bottom><a class="el" href="classOscl__File.html#a19">Handle</a> ()</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF int32&nbsp;</td><td valign=bottom><a class="el" href="classOscl__File.html#a20">Size</a> ()</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a>&nbsp;</td><td valign=bottom><a class="el" href="classOscl__File.html#a20">Size</a> ()</td></tr>
 <tr><td nowrap align=right valign=top>OSCL_IMPORT_REF void&nbsp;</td><td valign=bottom><a class="el" href="classOscl__File.html#a21">SetLoggingEnable</a> (bool aEnable)</td></tr>
 <tr><td nowrap align=right valign=top>OSCL_IMPORT_REF void&nbsp;</td><td valign=bottom><a class="el" href="classOscl__File.html#a22">SetSummaryStatsLoggingEnable</a> (bool aEnable)</td></tr>
 <tr><td colspan=2><br><h2>Friends</h2></td></tr>
 <tr><td nowrap align=right valign=top>class&nbsp;</td><td valign=bottom><a class="el" href="classOscl__File.html#l0">OsclFileCache</a></td></tr>
 <tr><td nowrap align=right valign=top>class&nbsp;</td><td valign=bottom><a class="el" href="classOscl__File.html#l1">asyncfilereadwrite_test</a></td></tr>
-<tr><td nowrap align=right valign=top>class&nbsp;</td><td valign=bottom><a class="el" href="classOscl__File.html#l2">asyncfilereadcancel_test</a></td></tr>
+<tr><td nowrap align=right valign=top>class&nbsp;</td><td valign=bottom><a class="el" href="classOscl__File.html#l2">largeasyncfilereadwrite_test</a></td></tr>
+<tr><td nowrap align=right valign=top>class&nbsp;</td><td valign=bottom><a class="el" href="classOscl__File.html#l3">asyncfilereadcancel_test</a></td></tr>
 </table>
 <hr><h2>Member Enumeration Documentation</h2>
 <a name="s12" doxytag="Oscl_File::mode_type"></a><p>
@@ -635,7 +636,7 @@
         <tr>
           <td class="md" nowrap valign="top"> OSCL_IMPORT_REF int32 Oscl_File::Seek </td>
           <td class="md" valign="top">(&nbsp;</td>
-          <td class="md" nowrap valign="top">int32&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a>&nbsp;</td>
           <td class="mdname" nowrap>&nbsp; <em>offset</em>, </td>
         </tr>
         <tr>
@@ -934,7 +935,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF int32 Oscl_File::Size </td>
+          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> Oscl_File::Size </td>
           <td class="md" valign="top">(&nbsp;</td>
           <td class="mdname1" valign="top" nowrap>&nbsp;          </td>
           <td class="md" valign="top">)&nbsp;</td>
@@ -965,7 +966,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF int32 Oscl_File::Tell </td>
+          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> Oscl_File::Tell </td>
           <td class="md" valign="top">(&nbsp;</td>
           <td class="mdname1" valign="top" nowrap>&nbsp;          </td>
           <td class="md" valign="top">)&nbsp;</td>
@@ -1042,7 +1043,7 @@
   </tr>
 </table>
 <hr><h2>Friends And Related Function Documentation</h2>
-<a name="l2" doxytag="Oscl_File::asyncfilereadcancel_test"></a><p>
+<a name="l3" doxytag="Oscl_File::asyncfilereadcancel_test"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -1086,6 +1087,28 @@
     </td>
   </tr>
 </table>
+<a name="l2" doxytag="Oscl_File::largeasyncfilereadwrite_test"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"> friend class largeasyncfilereadwrite_test<code> [friend]</code>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
 <a name="l0" doxytag="Oscl_File::OsclFileCache"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
@@ -1111,7 +1134,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__file__io_8h-source.html">oscl_file_io.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOscl__FileFind.html b/doc/oscl_html/classOscl__FileFind.html
index 765268a..2eb1932 100644
--- a/doc/oscl_html/classOscl__FileFind.html
+++ b/doc/oscl_html/classOscl__FileFind.html
@@ -491,7 +491,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__file__find_8h-source.html">oscl_file_find.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOscl__FileServer.html b/doc/oscl_html/classOscl__FileServer.html
index 2258b11..dc89261 100644
--- a/doc/oscl_html/classOscl__FileServer.html
+++ b/doc/oscl_html/classOscl__FileServer.html
@@ -262,7 +262,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__file__server_8h-source.html">oscl_file_server.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOscl__Int64__Utils.html b/doc/oscl_html/classOscl__Int64__Utils.html
index d6ee988..23b1429 100644
--- a/doc/oscl_html/classOscl__Int64__Utils.html
+++ b/doc/oscl_html/classOscl__Int64__Utils.html
@@ -296,7 +296,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__int64__utils_8h-source.html">oscl_int64_utils.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOscl__Linked__List.html b/doc/oscl_html/classOscl__Linked__List.html
index 1ab87cf..8bbaac5 100644
--- a/doc/oscl_html/classOscl__Linked__List.html
+++ b/doc/oscl_html/classOscl__Linked__List.html
@@ -613,7 +613,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__linked__list_8h-source.html">oscl_linked_list.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOscl__Linked__List__Base.html b/doc/oscl_html/classOscl__Linked__List__Base.html
index 67a7af5..0193762 100644
--- a/doc/oscl_html/classOscl__Linked__List__Base.html
+++ b/doc/oscl_html/classOscl__Linked__List__Base.html
@@ -636,7 +636,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__linked__list_8h-source.html">oscl_linked_list.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOscl__MTLinked__List.html b/doc/oscl_html/classOscl__MTLinked__List.html
index 9734221..af3aea2 100644
--- a/doc/oscl_html/classOscl__MTLinked__List.html
+++ b/doc/oscl_html/classOscl__MTLinked__List.html
@@ -485,7 +485,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__linked__list_8h-source.html">oscl_linked_list.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOscl__Map.html b/doc/oscl_html/classOscl__Map.html
index 5932b3f..7e2d396 100644
--- a/doc/oscl_html/classOscl__Map.html
+++ b/doc/oscl_html/classOscl__Map.html
@@ -1387,7 +1387,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__map_8h-source.html">oscl_map.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOscl__Map_1_1value__compare.html b/doc/oscl_html/classOscl__Map_1_1value__compare.html
index 3d0a5f4..f2b9b71 100644
--- a/doc/oscl_html/classOscl__Map_1_1value__compare.html
+++ b/doc/oscl_html/classOscl__Map_1_1value__compare.html
@@ -156,7 +156,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__map_8h-source.html">oscl_map.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOscl__Opaque__Type__Alloc.html b/doc/oscl_html/classOscl__Opaque__Type__Alloc.html
index 1e9f9f7..f457a9c 100644
--- a/doc/oscl_html/classOscl__Opaque__Type__Alloc.html
+++ b/doc/oscl_html/classOscl__Opaque__Type__Alloc.html
@@ -158,7 +158,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__opaque__type_8h-source.html">oscl_opaque_type.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOscl__Opaque__Type__Alloc__LL.html b/doc/oscl_html/classOscl__Opaque__Type__Alloc__LL.html
index ab62485..3f18528 100644
--- a/doc/oscl_html/classOscl__Opaque__Type__Alloc__LL.html
+++ b/doc/oscl_html/classOscl__Opaque__Type__Alloc__LL.html
@@ -303,7 +303,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__opaque__type_8h-source.html">oscl_opaque_type.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOscl__Opaque__Type__Compare.html b/doc/oscl_html/classOscl__Opaque__Type__Compare.html
index 3cb414d..7a7dbbd 100644
--- a/doc/oscl_html/classOscl__Opaque__Type__Compare.html
+++ b/doc/oscl_html/classOscl__Opaque__Type__Compare.html
@@ -154,7 +154,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__opaque__type_8h-source.html">oscl_opaque_type.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOscl__Queue.html b/doc/oscl_html/classOscl__Queue.html
index e521ec2..bd353c3 100644
--- a/doc/oscl_html/classOscl__Queue.html
+++ b/doc/oscl_html/classOscl__Queue.html
@@ -517,7 +517,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__queue_8h-source.html">oscl_queue.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOscl__Queue__Base.html b/doc/oscl_html/classOscl__Queue__Base.html
index ba0177c..abdc8c9 100644
--- a/doc/oscl_html/classOscl__Queue__Base.html
+++ b/doc/oscl_html/classOscl__Queue__Base.html
@@ -515,7 +515,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__queue_8h-source.html">oscl_queue.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOscl__Rb__Tree.html b/doc/oscl_html/classOscl__Rb__Tree.html
index c2e3f48..19cf725 100644
--- a/doc/oscl_html/classOscl__Rb__Tree.html
+++ b/doc/oscl_html/classOscl__Rb__Tree.html
@@ -1354,7 +1354,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__tree_8h-source.html">oscl_tree.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOscl__Rb__Tree__Base.html b/doc/oscl_html/classOscl__Rb__Tree__Base.html
index 5ccea93..a16da2d 100644
--- a/doc/oscl_html/classOscl__Rb__Tree__Base.html
+++ b/doc/oscl_html/classOscl__Rb__Tree__Base.html
@@ -217,7 +217,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__tree_8h-source.html">oscl_tree.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOscl__TAlloc.html b/doc/oscl_html/classOscl__TAlloc.html
index 7330784..515aa1f 100644
--- a/doc/oscl_html/classOscl__TAlloc.html
+++ b/doc/oscl_html/classOscl__TAlloc.html
@@ -649,7 +649,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__defalloc_8h-source.html">oscl_defalloc.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOscl__TagTree.html b/doc/oscl_html/classOscl__TagTree.html
index dd8e633..a745bb0 100644
--- a/doc/oscl_html/classOscl__TagTree.html
+++ b/doc/oscl_html/classOscl__TagTree.html
@@ -875,7 +875,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__tagtree_8h-source.html">oscl_tagtree.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOscl__Vector.html b/doc/oscl_html/classOscl__Vector.html
index 8236ccc..e61f545 100644
--- a/doc/oscl_html/classOscl__Vector.html
+++ b/doc/oscl_html/classOscl__Vector.html
@@ -974,7 +974,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__vector_8h-source.html">oscl_vector.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classOscl__Vector__Base.html b/doc/oscl_html/classOscl__Vector__Base.html
index db0b0fe..f1939af 100644
--- a/doc/oscl_html/classOscl__Vector__Base.html
+++ b/doc/oscl_html/classOscl__Vector__Base.html
@@ -697,7 +697,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__vector_8h-source.html">oscl_vector.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classPVActiveBase.html b/doc/oscl_html/classPVActiveBase.html
index f2c7471..d415908 100644
--- a/doc/oscl_html/classPVActiveBase.html
+++ b/doc/oscl_html/classPVActiveBase.html
@@ -791,7 +791,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__scheduler__aobase_8h-source.html">oscl_scheduler_aobase.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classPVActiveStats.html b/doc/oscl_html/classPVActiveStats.html
index f7a5ced..720ee4d 100644
--- a/doc/oscl_html/classPVActiveStats.html
+++ b/doc/oscl_html/classPVActiveStats.html
@@ -160,7 +160,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__scheduler__aobase_8h-source.html">oscl_scheduler_aobase.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classPVLogger.html b/doc/oscl_html/classPVLogger.html
index d315708..468d50d 100644
--- a/doc/oscl_html/classPVLogger.html
+++ b/doc/oscl_html/classPVLogger.html
@@ -927,7 +927,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pvlogger_8h-source.html">pvlogger.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classPVLoggerAppender.html b/doc/oscl_html/classPVLoggerAppender.html
index c75a736..b3279b2 100644
--- a/doc/oscl_html/classPVLoggerAppender.html
+++ b/doc/oscl_html/classPVLoggerAppender.html
@@ -164,7 +164,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pvlogger__accessories_8h-source.html">pvlogger_accessories.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classPVLoggerFilter.html b/doc/oscl_html/classPVLoggerFilter.html
index e8cfd7b..a13e45c 100644
--- a/doc/oscl_html/classPVLoggerFilter.html
+++ b/doc/oscl_html/classPVLoggerFilter.html
@@ -225,7 +225,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pvlogger__accessories_8h-source.html">pvlogger_accessories.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classPVLoggerLayout.html b/doc/oscl_html/classPVLoggerLayout.html
index 0ab2fce..e76cfe6 100644
--- a/doc/oscl_html/classPVLoggerLayout.html
+++ b/doc/oscl_html/classPVLoggerLayout.html
@@ -194,7 +194,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pvlogger__accessories_8h-source.html">pvlogger_accessories.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classPVLoggerRegistry.html b/doc/oscl_html/classPVLoggerRegistry.html
index af186a5..3b683d0 100644
--- a/doc/oscl_html/classPVLoggerRegistry.html
+++ b/doc/oscl_html/classPVLoggerRegistry.html
@@ -349,7 +349,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pvlogger__registry_8h-source.html">pvlogger_registry.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classPVSchedulerStopper.html b/doc/oscl_html/classPVSchedulerStopper.html
index c5991bb..7b9d5c7 100644
--- a/doc/oscl_html/classPVSchedulerStopper.html
+++ b/doc/oscl_html/classPVSchedulerStopper.html
@@ -88,7 +88,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__scheduler_8h-source.html">oscl_scheduler.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classPVSockBufRecv.html b/doc/oscl_html/classPVSockBufRecv.html
index ad7fcb3..eda4bb9 100644
--- a/doc/oscl_html/classPVSockBufRecv.html
+++ b/doc/oscl_html/classPVSockBufRecv.html
@@ -191,7 +191,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__request_8h-source.html">oscl_socket_request.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classPVSockBufSend.html b/doc/oscl_html/classPVSockBufSend.html
index 9ad4f4d..4a1f515 100644
--- a/doc/oscl_html/classPVSockBufSend.html
+++ b/doc/oscl_html/classPVSockBufSend.html
@@ -162,7 +162,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__request_8h-source.html">oscl_socket_request.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classPVThreadContext.html b/doc/oscl_html/classPVThreadContext.html
index d538f56..ff7781d 100644
--- a/doc/oscl_html/classPVThreadContext.html
+++ b/doc/oscl_html/classPVThreadContext.html
@@ -410,7 +410,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__scheduler__threadcontext_8h-source.html">oscl_scheduler_threadcontext.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classRecvFromParam.html b/doc/oscl_html/classRecvFromParam.html
index 274b0f9..299e7a0 100644
--- a/doc/oscl_html/classRecvFromParam.html
+++ b/doc/oscl_html/classRecvFromParam.html
@@ -231,7 +231,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__request_8h-source.html">oscl_socket_request.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classRecvParam.html b/doc/oscl_html/classRecvParam.html
index 640b7bc..86d2d53 100644
--- a/doc/oscl_html/classRecvParam.html
+++ b/doc/oscl_html/classRecvParam.html
@@ -114,7 +114,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__request_8h-source.html">oscl_socket_request.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classSendParam.html b/doc/oscl_html/classSendParam.html
index 93bd820..6f2208b 100644
--- a/doc/oscl_html/classSendParam.html
+++ b/doc/oscl_html/classSendParam.html
@@ -140,7 +140,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__request_8h-source.html">oscl_socket_request.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classSendToParam.html b/doc/oscl_html/classSendToParam.html
index 742e3fc..3ae71f9 100644
--- a/doc/oscl_html/classSendToParam.html
+++ b/doc/oscl_html/classSendToParam.html
@@ -195,7 +195,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__request_8h-source.html">oscl_socket_request.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classShutdownParam.html b/doc/oscl_html/classShutdownParam.html
index 72c98b7..d3b95fb 100644
--- a/doc/oscl_html/classShutdownParam.html
+++ b/doc/oscl_html/classShutdownParam.html
@@ -76,7 +76,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__request_8h-source.html">oscl_socket_request.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classSocketRequestParam.html b/doc/oscl_html/classSocketRequestParam.html
index 40db609..70d89e9 100644
--- a/doc/oscl_html/classSocketRequestParam.html
+++ b/doc/oscl_html/classSocketRequestParam.html
@@ -87,7 +87,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__socket__request_8h-source.html">oscl_socket_request.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classTLSStorageOps.html b/doc/oscl_html/classTLSStorageOps.html
index 1fa7008..8ba1bc2 100644
--- a/doc/oscl_html/classTLSStorageOps.html
+++ b/doc/oscl_html/classTLSStorageOps.html
@@ -94,7 +94,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__tls_8h-source.html">oscl_tls.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classTReadyQueLink.html b/doc/oscl_html/classTReadyQueLink.html
index cb2a653..0b783f7 100644
--- a/doc/oscl_html/classTReadyQueLink.html
+++ b/doc/oscl_html/classTReadyQueLink.html
@@ -168,7 +168,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__scheduler__readyq_8h-source.html">oscl_scheduler_readyq.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classTimeValue.html b/doc/oscl_html/classTimeValue.html
index 621b168..c865908 100644
--- a/doc/oscl_html/classTimeValue.html
+++ b/doc/oscl_html/classTimeValue.html
@@ -1032,7 +1032,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__time_8h-source.html">oscl_time.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/class__OsclBasicAllocator.html b/doc/oscl_html/class__OsclBasicAllocator.html
index 327f59e..8a5310e 100644
--- a/doc/oscl_html/class__OsclBasicAllocator.html
+++ b/doc/oscl_html/class__OsclBasicAllocator.html
@@ -125,7 +125,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__base__alloc_8h-source.html">oscl_base_alloc.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/class__OsclHeapBase.html b/doc/oscl_html/class__OsclHeapBase.html
index ecaea6c..e8ee117 100644
--- a/doc/oscl_html/class__OsclHeapBase.html
+++ b/doc/oscl_html/class__OsclHeapBase.html
@@ -158,7 +158,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__heapbase_8h-source.html">oscl_heapbase.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classallocator.html b/doc/oscl_html/classallocator.html
index 9d4a983..47b1b2f 100644
--- a/doc/oscl_html/classallocator.html
+++ b/doc/oscl_html/classallocator.html
@@ -20,7 +20,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__mem__mempool_8h-source.html">oscl_mem_mempool.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/classinternalLeave.html b/doc/oscl_html/classinternalLeave.html
index 948dca2..acbf039 100644
--- a/doc/oscl_html/classinternalLeave.html
+++ b/doc/oscl_html/classinternalLeave.html
@@ -42,7 +42,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="oscl__error__imp__cppexceptions_8h-source.html">oscl_error_imp_cppexceptions.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/files.html b/doc/oscl_html/files.html
index 741200d..4a51b89 100644
--- a/doc/oscl_html/files.html
+++ b/doc/oscl_html/files.html
@@ -156,12 +156,12 @@
   <tr><td class="indexkey"><a class="el" href="osclconfig__no__os_8h.html">osclconfig_no_os.h</a> <a href="osclconfig__no__os_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
   <tr><td class="indexkey"><a class="el" href="osclconfig__proc_8h.html">osclconfig_proc.h</a> <a href="osclconfig__proc_8h-source.html">[code]</a></td><td class="indexvalue">This file contains configuration information for the linux platform</td></tr>
   <tr><td class="indexkey"><a class="el" href="osclconfig__proc__check_8h.html">osclconfig_proc_check.h</a> <a href="osclconfig__proc__check_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="osclconfig__proc__unix__android_8h.html">osclconfig_proc_unix_android.h</a> <a href="osclconfig__proc__unix__android_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
   <tr><td class="indexkey"><a class="el" href="osclconfig__proc__unix__common_8h.html">osclconfig_proc_unix_common.h</a> <a href="osclconfig__proc__unix__common_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="osclconfig__proc__unix__nj_8h.html">osclconfig_proc_unix_nj.h</a> <a href="osclconfig__proc__unix__nj_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
   <tr><td class="indexkey"><a class="el" href="osclconfig__time_8h.html">osclconfig_time.h</a> <a href="osclconfig__time_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
   <tr><td class="indexkey"><a class="el" href="osclconfig__time__check_8h.html">osclconfig_time_check.h</a> <a href="osclconfig__time__check_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="osclconfig__unix__android_8h.html">osclconfig_unix_android.h</a> <a href="osclconfig__unix__android_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
   <tr><td class="indexkey"><a class="el" href="osclconfig__unix__common_8h.html">osclconfig_unix_common.h</a> <a href="osclconfig__unix__common_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><a class="el" href="osclconfig__unix__nj_8h.html">osclconfig_unix_nj.h</a> <a href="osclconfig__unix__nj_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
   <tr><td class="indexkey"><a class="el" href="osclconfig__util_8h.html">osclconfig_util.h</a> <a href="osclconfig__util_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
   <tr><td class="indexkey"><a class="el" href="osclconfig__util__check_8h.html">osclconfig_util_check.h</a> <a href="osclconfig__util__check_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
   <tr><td class="indexkey"><a class="el" href="pvlogger_8h.html">pvlogger.h</a> <a href="pvlogger_8h-source.html">[code]</a></td><td class="indexvalue">This file contains basic logger interfaces for common use across platforms</td></tr>
@@ -170,7 +170,7 @@
   <tr><td class="indexkey"><a class="el" href="pvlogger__registry_8h.html">pvlogger_registry.h</a> <a href="pvlogger__registry_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/functions.html b/doc/oscl_html/functions.html
index 72a163c..d8d6103 100644
--- a/doc/oscl_html/functions.html
+++ b/doc/oscl_html/functions.html
@@ -60,7 +60,7 @@
 : <a class="el" href="classPVLoggerAppender.html#a1">PVLoggerAppender</a><li>assign()
 : <a class="el" href="classCHeapRep.html#d4">CHeapRep</a><li>assign_vector()
 : <a class="el" href="classOscl__Vector__Base.html#b10">Oscl_Vector_Base</a><li>asyncfilereadcancel_test
-: <a class="el" href="classOscl__File.html#l2">Oscl_File</a><li>asyncfilereadwrite_test
+: <a class="el" href="classOscl__File.html#l3">Oscl_File</a><li>asyncfilereadwrite_test
 : <a class="el" href="classOscl__File.html#l1">Oscl_File</a><li>Attach()
 : <a class="el" href="classOsclBinStream.html#a5">OsclBinStream</a><li>audit_type
 : <a class="el" href="classOsclMemGlobalAuditObject.html#s0">OsclMemGlobalAuditObject</a><li>available_localbuf
@@ -628,12 +628,13 @@
 : <a class="el" href="classOscl__Rb__Tree.html#s0">Oscl_Rb_Tree&lt; Key, Value, KeyOfValue, Compare, Alloc &gt;</a>, <a class="el" href="classOscl__Map.html#s0">Oscl_Map&lt; Key, T, Alloc, Compare &gt;</a></ul>
 <h3><a name="index_l">- l -</a>
 </h3><ul>
-<li>Leave()
+<li>largeasyncfilereadwrite_test
+: <a class="el" href="classOscl__File.html#l2">Oscl_File</a><li>Leave()
 : <a class="el" href="classOsclError.html#d7">OsclError</a><li>LeaveIfError()
 : <a class="el" href="classOsclError.html#d9">OsclError</a><li>LeaveIfNull()
-: <a class="el" href="classOsclError.html#d8">OsclError</a><li>left
-: <a class="el" href="structOscl__Rb__Tree__Node__Base.html#m2">Oscl_Rb_Tree_Node_Base</a><li>Left()
-: <a class="el" href="classOsclPtrC.html#a9">OsclPtrC</a><li>len
+: <a class="el" href="classOsclError.html#d8">OsclError</a><li>Left()
+: <a class="el" href="classOsclPtrC.html#a9">OsclPtrC</a><li>left
+: <a class="el" href="structOscl__Rb__Tree__Node__Base.html#m2">Oscl_Rb_Tree_Node_Base</a><li>len
 : <a class="el" href="structWStrPtrLen.html#n1">WStrPtrLen</a>, <a class="el" href="structStrPtrLen.html#n1">StrPtrLen</a>, <a class="el" href="structOsclMemoryFragment.html#m0">OsclMemoryFragment</a><li>length
 : <a class="el" href="structWStrPtrLen.html#a5">WStrPtrLen</a>, <a class="el" href="structStrPtrLen.html#a5">StrPtrLen</a>, <a class="el" href="classBufFragGroup.html#n4">BufFragGroup&lt; ChainClass, max_frags &gt;</a>, <a class="el" href="classOsclBinStream.html#n3">OsclBinStream</a><li>Length()
 : <a class="el" href="classOsclAsyncFileBuffer.html#a7">OsclAsyncFileBuffer</a>, <a class="el" href="classOsclBuf.html#a1">OsclBuf</a>, <a class="el" href="classOsclPtr.html#a4">OsclPtr</a>, <a class="el" href="classOsclPtrC.html#a4">OsclPtrC</a><li>lineNo
@@ -981,9 +982,9 @@
 : <a class="el" href="classOsclProcStatus.html#s35s33">OsclProcStatus</a><li>PSHARED_NOT_ZERO_ERROR
 : <a class="el" href="classOsclProcStatus.html#s35s16">OsclProcStatus</a><li>pStats
 : <a class="el" href="structMM__Stats__CB.html#m1">MM_Stats_CB</a><li>pStatsNode
-: <a class="el" href="structMM__AllocInfo.html#m5">MM_AllocInfo</a>, <a class="el" href="classOsclAuditCB.html#m0">OsclAuditCB</a><li>Ptr()
-: <a class="el" href="classOsclPtr.html#a2">OsclPtr</a>, <a class="el" href="classOsclPtrC.html#a2">OsclPtrC</a><li>ptr
-: <a class="el" href="structWStrPtrLen.html#n0">WStrPtrLen</a>, <a class="el" href="structStrPtrLen.html#n0">StrPtrLen</a>, <a class="el" href="structOsclMemoryFragment.html#m1">OsclMemoryFragment</a><li>push()
+: <a class="el" href="structMM__AllocInfo.html#m5">MM_AllocInfo</a>, <a class="el" href="classOsclAuditCB.html#m0">OsclAuditCB</a><li>ptr
+: <a class="el" href="structWStrPtrLen.html#n0">WStrPtrLen</a>, <a class="el" href="structStrPtrLen.html#n0">StrPtrLen</a>, <a class="el" href="structOsclMemoryFragment.html#m1">OsclMemoryFragment</a><li>Ptr()
+: <a class="el" href="classOsclPtr.html#a2">OsclPtr</a>, <a class="el" href="classOsclPtrC.html#a2">OsclPtrC</a><li>push()
 : <a class="el" href="classOsclPriorityQueue.html#a5">OsclPriorityQueue&lt; Qelem, Alloc, Container, Compare &gt;</a>, <a class="el" href="classOscl__Queue.html#a3">Oscl_Queue&lt; T, Alloc &gt;</a>, <a class="el" href="classOscl__Queue__Base.html#b4">Oscl_Queue_Base</a><li>push_back()
 : <a class="el" href="classOscl__Vector.html#a5">Oscl_Vector&lt; T, Alloc &gt;</a>, <a class="el" href="classOscl__Vector__Base.html#b4">Oscl_Vector_Base</a><li>push_front()
 : <a class="el" href="classOscl__Vector.html#a6">Oscl_Vector&lt; T, Alloc &gt;</a>, <a class="el" href="classOscl__Vector__Base.html#b6">Oscl_Vector_Base</a><li>push_heap()
@@ -1206,9 +1207,9 @@
 : <a class="el" href="classTimeValue.html#a10">TimeValue</a><li>to_system_time()
 : <a class="el" href="classNTPTime.html#a14">NTPTime</a><li>TOO_MANY_FRAGS
 : <a class="el" href="classBufFragStatusClass.html#s8s1">BufFragStatusClass</a><li>TOO_MANY_THREADS_ERROR
-: <a class="el" href="classOsclProcStatus.html#s35s2">OsclProcStatus</a><li>Top()
-: <a class="el" href="classOsclTimerQ.html#a4">OsclTimerQ</a>, <a class="el" href="classOsclReadyQ.html#a7">OsclReadyQ</a>, <a class="el" href="classOsclJump.html#a1">OsclJump</a><li>top()
-: <a class="el" href="classOsclPriorityQueue.html#a3">OsclPriorityQueue&lt; Qelem, Alloc, Container, Compare &gt;</a><li>totalbytes
+: <a class="el" href="classOsclProcStatus.html#s35s2">OsclProcStatus</a><li>top()
+: <a class="el" href="classOsclPriorityQueue.html#a3">OsclPriorityQueue&lt; Qelem, Alloc, Container, Compare &gt;</a><li>Top()
+: <a class="el" href="classOsclTimerQ.html#a4">OsclTimerQ</a>, <a class="el" href="classOsclReadyQ.html#a7">OsclReadyQ</a>, <a class="el" href="classOsclJump.html#a1">OsclJump</a><li>totalbytes
 : <a class="el" href="structoscl__fsstat.html#m1">oscl_fsstat</a><li>totalNumAllocs
 : <a class="el" href="structMM__Stats__t.html#m5">MM_Stats_t</a><li>totalNumBytes
 : <a class="el" href="structMM__Stats__t.html#m6">MM_Stats_t</a><li>TOtherExecStats
@@ -1260,9 +1261,9 @@
 : <a class="el" href="classOsclReadyQ.html#a11">OsclReadyQ</a><li>WaitOnRequests()
 : <a class="el" href="classOsclSocketServRequestList.html#a6">OsclSocketServRequestList</a><li>Wakeup()
 : <a class="el" href="classOsclSocketServRequestList.html#a5">OsclSocketServRequestList</a><li>writable
-: <a class="el" href="classCFastRep.html#m3">CFastRep</a><li>Write()
-: <a class="el" href="classOsclNativeFile.html#a6">OsclNativeFile</a>, <a class="el" href="classOscl__File.html#a12">Oscl_File</a>, <a class="el" href="classOsclFileCache.html#a5">OsclFileCache</a>, <a class="el" href="classOsclAsyncFile.html#a9">OsclAsyncFile</a><li>write()
-: <a class="el" href="classOSCL__wString.html#a21">OSCL_wString</a>, <a class="el" href="classOSCL__String.html#a21">OSCL_String</a>, <a class="el" href="classOsclBinOStream.html#a2">OsclBinOStream</a><li>WriteUnsignedLong()
+: <a class="el" href="classCFastRep.html#m3">CFastRep</a><li>write()
+: <a class="el" href="classOSCL__wString.html#a21">OSCL_wString</a>, <a class="el" href="classOSCL__String.html#a21">OSCL_String</a>, <a class="el" href="classOsclBinOStream.html#a2">OsclBinOStream</a><li>Write()
+: <a class="el" href="classOsclNativeFile.html#a6">OsclNativeFile</a>, <a class="el" href="classOscl__File.html#a12">Oscl_File</a>, <a class="el" href="classOsclFileCache.html#a5">OsclFileCache</a>, <a class="el" href="classOsclAsyncFile.html#a9">OsclAsyncFile</a><li>WriteUnsignedLong()
 : <a class="el" href="classOsclBinOStreamBigEndian.html#b1">OsclBinOStreamBigEndian</a>, <a class="el" href="classOsclBinOStreamLittleEndian.html#b1">OsclBinOStreamLittleEndian</a><li>WriteUnsignedShort()
 : <a class="el" href="classOsclBinOStreamBigEndian.html#b0">OsclBinOStreamBigEndian</a>, <a class="el" href="classOsclBinOStreamLittleEndian.html#b0">OsclBinOStreamLittleEndian</a><li>WStrPtrLen()
 : <a class="el" href="structWStrPtrLen.html#a3">WStrPtrLen</a></ul>
@@ -1403,7 +1404,7 @@
 : <a class="el" href="classPVThreadContext.html#a1">PVThreadContext</a><li>~SendToParam()
 : <a class="el" href="classSendToParam.html#a1">SendToParam</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/globals.html b/doc/oscl_html/globals.html
index 39ccaf1..6e2d0d1 100644
--- a/doc/oscl_html/globals.html
+++ b/doc/oscl_html/globals.html
@@ -22,13 +22,15 @@
 : <a class="el" href="osclconfig__check_8h.html#a1">osclconfig_check.h</a><li>__Validate__BasicTimeDateStruct__
 : <a class="el" href="osclconfig__time__check_8h.html#a1">osclconfig_time_check.h</a><li>__Validate__BasicTimeStruct__
 : <a class="el" href="osclconfig__time__check_8h.html#a0">osclconfig_time_check.h</a><li>__verify__TOsclConditionObject__defined__
-: <a class="el" href="osclconfig__proc__check_8h.html#a6">osclconfig_proc_check.h</a><li>__verify__TOsclMutexObject__defined__
+: <a class="el" href="osclconfig__proc__check_8h.html#a6">osclconfig_proc_check.h</a><li>__verify__TOsclFileOffset__defined__
+: <a class="el" href="osclconfig__io__check_8h.html#a0">osclconfig_io_check.h</a><li>__verify__TOsclMutexObject__defined__
 : <a class="el" href="osclconfig__proc__check_8h.html#a4">osclconfig_proc_check.h</a><li>__verify__TOsclSemaphoreObject__defined__
 : <a class="el" href="osclconfig__proc__check_8h.html#a5">osclconfig_proc_check.h</a><li>__verify__TOsclThreadFuncArg__defined__
 : <a class="el" href="osclconfig__proc__check_8h.html#a2">osclconfig_proc_check.h</a><li>__verify__TOsclThreadFuncRet__defined__
 : <a class="el" href="osclconfig__proc__check_8h.html#a1">osclconfig_proc_check.h</a><li>__verify__TOsclThreadId__defined__
 : <a class="el" href="osclconfig__proc__check_8h.html#a0">osclconfig_proc_check.h</a><li>__verify__TOsclThreadObject__defined__
-: <a class="el" href="osclconfig__proc__check_8h.html#a3">osclconfig_proc_check.h</a><li>_OSCL_Abort()
+: <a class="el" href="osclconfig__proc__check_8h.html#a3">osclconfig_proc_check.h</a><li>_FILE_OFFSET_BITS
+: <a class="el" href="osclconfig__io_8h.html#a43">osclconfig_io.h</a><li>_OSCL_Abort()
 : <a class="el" href="oscl__assert_8h.html#a34">oscl_assert.h</a><li>_oscl_audit_calloc()
 : <a class="el" href="oscl__mem_8h.html#a19">oscl_mem.h</a><li>_oscl_audit_free()
 : <a class="el" href="oscl__mem_8h.html#a26">oscl_mem.h</a><li>_oscl_audit_malloc()
@@ -52,9 +54,9 @@
 : <a class="el" href="pvlogger_8h.html#a9">pvlogger.h</a><li>_PVLOGGER_LOGMSG
 : <a class="el" href="pvlogger_8h.html#a6">pvlogger.h</a><li>_PVLOGGER_LOGMSG_V
 : <a class="el" href="pvlogger_8h.html#a7">pvlogger.h</a><li>_STRLIT
-: <a class="el" href="osclconfig__unix__nj_8h.html#a21">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a21">osclconfig_unix_common.h</a><li>_STRLIT_CHAR
-: <a class="el" href="osclconfig__unix__nj_8h.html#a22">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a22">osclconfig_unix_common.h</a><li>_STRLIT_WCHAR
-: <a class="el" href="osclconfig__unix__nj_8h.html#a23">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a23">osclconfig_unix_common.h</a></ul>
+: <a class="el" href="osclconfig__unix__android_8h.html#a21">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a21">osclconfig_unix_common.h</a><li>_STRLIT_CHAR
+: <a class="el" href="osclconfig__unix__android_8h.html#a22">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a22">osclconfig_unix_common.h</a><li>_STRLIT_WCHAR
+: <a class="el" href="osclconfig__unix__android_8h.html#a23">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a23">osclconfig_unix_common.h</a></ul>
 <h3><a name="index_a">- a -</a>
 </h3><ul>
 <li>ALLOC_AND_CONSTRUCT
@@ -83,25 +85,25 @@
 <h3><a name="index_e">- e -</a>
 </h3><ul>
 <li>EOsclFileOp_Close
-: <a class="el" href="oscl__file__stats_8h.html#a28a3">oscl_file_stats.h</a><li>EOsclFileOp_EndOfFile
-: <a class="el" href="oscl__file__stats_8h.html#a28a10">oscl_file_stats.h</a><li>EOsclFileOp_Flush
-: <a class="el" href="oscl__file__stats_8h.html#a28a9">oscl_file_stats.h</a><li>EOsclFileOp_Last
-: <a class="el" href="oscl__file__stats_8h.html#a28a20">oscl_file_stats.h</a><li>EOsclFileOp_NativeClose
-: <a class="el" href="oscl__file__stats_8h.html#a28a12">oscl_file_stats.h</a><li>EOsclFileOp_NativeEndOfFile
-: <a class="el" href="oscl__file__stats_8h.html#a28a19">oscl_file_stats.h</a><li>EOsclFileOp_NativeFlush
-: <a class="el" href="oscl__file__stats_8h.html#a28a18">oscl_file_stats.h</a><li>EOsclFileOp_NativeOpen
-: <a class="el" href="oscl__file__stats_8h.html#a28a11">oscl_file_stats.h</a><li>EOsclFileOp_NativeRead
-: <a class="el" href="oscl__file__stats_8h.html#a28a13">oscl_file_stats.h</a><li>EOsclFileOp_NativeSeek
-: <a class="el" href="oscl__file__stats_8h.html#a28a15">oscl_file_stats.h</a><li>EOsclFileOp_NativeSize
-: <a class="el" href="oscl__file__stats_8h.html#a28a17">oscl_file_stats.h</a><li>EOsclFileOp_NativeTell
-: <a class="el" href="oscl__file__stats_8h.html#a28a16">oscl_file_stats.h</a><li>EOsclFileOp_NativeWrite
-: <a class="el" href="oscl__file__stats_8h.html#a28a14">oscl_file_stats.h</a><li>EOsclFileOp_Open
-: <a class="el" href="oscl__file__stats_8h.html#a28a2">oscl_file_stats.h</a><li>EOsclFileOp_Read
-: <a class="el" href="oscl__file__stats_8h.html#a28a4">oscl_file_stats.h</a><li>EOsclFileOp_Seek
-: <a class="el" href="oscl__file__stats_8h.html#a28a6">oscl_file_stats.h</a><li>EOsclFileOp_Size
-: <a class="el" href="oscl__file__stats_8h.html#a28a8">oscl_file_stats.h</a><li>EOsclFileOp_Tell
-: <a class="el" href="oscl__file__stats_8h.html#a28a7">oscl_file_stats.h</a><li>EOsclFileOp_Write
-: <a class="el" href="oscl__file__stats_8h.html#a28a5">oscl_file_stats.h</a><li>EOsclSocket_DataRecv
+: <a class="el" href="oscl__file__stats_8h.html#a29a3">oscl_file_stats.h</a><li>EOsclFileOp_EndOfFile
+: <a class="el" href="oscl__file__stats_8h.html#a29a10">oscl_file_stats.h</a><li>EOsclFileOp_Flush
+: <a class="el" href="oscl__file__stats_8h.html#a29a9">oscl_file_stats.h</a><li>EOsclFileOp_Last
+: <a class="el" href="oscl__file__stats_8h.html#a29a20">oscl_file_stats.h</a><li>EOsclFileOp_NativeClose
+: <a class="el" href="oscl__file__stats_8h.html#a29a12">oscl_file_stats.h</a><li>EOsclFileOp_NativeEndOfFile
+: <a class="el" href="oscl__file__stats_8h.html#a29a19">oscl_file_stats.h</a><li>EOsclFileOp_NativeFlush
+: <a class="el" href="oscl__file__stats_8h.html#a29a18">oscl_file_stats.h</a><li>EOsclFileOp_NativeOpen
+: <a class="el" href="oscl__file__stats_8h.html#a29a11">oscl_file_stats.h</a><li>EOsclFileOp_NativeRead
+: <a class="el" href="oscl__file__stats_8h.html#a29a13">oscl_file_stats.h</a><li>EOsclFileOp_NativeSeek
+: <a class="el" href="oscl__file__stats_8h.html#a29a15">oscl_file_stats.h</a><li>EOsclFileOp_NativeSize
+: <a class="el" href="oscl__file__stats_8h.html#a29a17">oscl_file_stats.h</a><li>EOsclFileOp_NativeTell
+: <a class="el" href="oscl__file__stats_8h.html#a29a16">oscl_file_stats.h</a><li>EOsclFileOp_NativeWrite
+: <a class="el" href="oscl__file__stats_8h.html#a29a14">oscl_file_stats.h</a><li>EOsclFileOp_Open
+: <a class="el" href="oscl__file__stats_8h.html#a29a2">oscl_file_stats.h</a><li>EOsclFileOp_Read
+: <a class="el" href="oscl__file__stats_8h.html#a29a4">oscl_file_stats.h</a><li>EOsclFileOp_Seek
+: <a class="el" href="oscl__file__stats_8h.html#a29a6">oscl_file_stats.h</a><li>EOsclFileOp_Size
+: <a class="el" href="oscl__file__stats_8h.html#a29a8">oscl_file_stats.h</a><li>EOsclFileOp_Tell
+: <a class="el" href="oscl__file__stats_8h.html#a29a7">oscl_file_stats.h</a><li>EOsclFileOp_Write
+: <a class="el" href="oscl__file__stats_8h.html#a29a5">oscl_file_stats.h</a><li>EOsclSocket_DataRecv
 : <a class="el" href="oscl__socket__stats_8h.html#a23a12">oscl_socket_stats.h</a><li>EOsclSocket_DataSent
 : <a class="el" href="oscl__socket__stats_8h.html#a23a13">oscl_socket_stats.h</a><li>EOsclSocket_Except
 : <a class="el" href="oscl__socket__stats_8h.html#a23a11">oscl_socket_stats.h</a><li>EOsclSocket_OS
@@ -123,12 +125,12 @@
 : <a class="el" href="oscl__socket__stats_8h.html#a24a18">oscl_socket_stats.h</a><li>EOsclSocketServ_SelectRescheduleAsap
 : <a class="el" href="oscl__socket__stats_8h.html#a24a20">oscl_socket_stats.h</a><li>EOsclSocketServ_SelectReschedulePoll
 : <a class="el" href="oscl__socket__stats_8h.html#a24a21">oscl_socket_stats.h</a><li>EPVDNSCancel
-: <a class="el" href="oscl__dns_8h.html#a24a5">oscl_dns.h</a><li>EPVDNSFailure
-: <a class="el" href="oscl__dns_8h.html#a24a4">oscl_dns.h</a><li>EPVDNSGetHostByName
-: <a class="el" href="oscl__dns_8h.html#a23a0">oscl_dns.h</a><li>EPVDNSPending
-: <a class="el" href="oscl__dns_8h.html#a24a2">oscl_dns.h</a><li>EPVDNSSuccess
-: <a class="el" href="oscl__dns_8h.html#a24a1">oscl_dns.h</a><li>EPVDNSTimeout
-: <a class="el" href="oscl__dns_8h.html#a24a3">oscl_dns.h</a><li>EPVSocket_Last
+: <a class="el" href="oscl__dns_8h.html#a25a5">oscl_dns.h</a><li>EPVDNSFailure
+: <a class="el" href="oscl__dns_8h.html#a25a4">oscl_dns.h</a><li>EPVDNSGetHostByName
+: <a class="el" href="oscl__dns_8h.html#a24a0">oscl_dns.h</a><li>EPVDNSPending
+: <a class="el" href="oscl__dns_8h.html#a25a2">oscl_dns.h</a><li>EPVDNSSuccess
+: <a class="el" href="oscl__dns_8h.html#a25a1">oscl_dns.h</a><li>EPVDNSTimeout
+: <a class="el" href="oscl__dns_8h.html#a25a3">oscl_dns.h</a><li>EPVSocket_Last
 : <a class="el" href="oscl__socket__types_8h.html#a19a10">oscl_socket_types.h</a><li>EPVSocketAccept
 : <a class="el" href="oscl__socket__types_8h.html#a19a6">oscl_socket_types.h</a><li>EPVSocketBind
 : <a class="el" href="oscl__socket__types_8h.html#a19a8">oscl_socket_types.h</a><li>EPVSocketBothShutdown
@@ -164,9 +166,9 @@
 <h3><a name="index_i">- i -</a>
 </h3><ul>
 <li>INT64
-: <a class="el" href="osclconfig__unix__nj_8h.html#a15">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a15">osclconfig_unix_common.h</a><li>int64
+: <a class="el" href="osclconfig__unix__android_8h.html#a15">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a15">osclconfig_unix_common.h</a><li>int64
 : <a class="el" href="oscl__types_8h.html#a30">oscl_types.h</a><li>INT64_HILO
-: <a class="el" href="osclconfig__unix__nj_8h.html#a17">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a17">osclconfig_unix_common.h</a><li>internalLeave
+: <a class="el" href="osclconfig__unix__android_8h.html#a17">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a17">osclconfig_unix_common.h</a><li>internalLeave
 : <a class="el" href="oscl__error__imp__jumps_8h.html#a42">oscl_error_imp_jumps.h</a></ul>
 <h3><a name="index_l">- l -</a>
 </h3><ul>
@@ -217,7 +219,7 @@
 : <a class="el" href="oscl__time_8h.html#a77">oscl_time.h</a><li>OSCL_ABS
 : <a class="el" href="oscl__base__macros_8h.html#a93">oscl_base_macros.h</a><li>oscl_abs()
 : <a class="el" href="oscl__string__utils_8h.html#a22">oscl_string_utils.h</a><li>OSCL_AF_INET
-: <a class="el" href="osclconfig__io_8h.html#a37">osclconfig_io.h</a><li>OSCL_ALLOC_DELETE
+: <a class="el" href="osclconfig__io_8h.html#a38">osclconfig_io.h</a><li>OSCL_ALLOC_DELETE
 : <a class="el" href="oscl__mem_8h.html#a38">oscl_mem.h</a><li>OSCL_ALLOC_NEW
 : <a class="el" href="oscl__mem_8h.html#a36">oscl_mem.h</a><li>OSCL_ARRAY_DELETE
 : <a class="el" href="oscl__mem_8h.html#a60">oscl_mem.h</a><li>OSCL_ARRAY_NEW
@@ -237,9 +239,9 @@
 : <a class="el" href="oscl__base__macros_8h.html#a97">oscl_base_macros.h</a>, <a class="el" href="osclconfig_8h.html#a7">osclconfig.h</a><li>OSCL_BYPASS_MEMMGT
 : <a class="el" href="osclconfig__memory_8h.html#a0">osclconfig_memory.h</a><li>OSCL_BYTE_ORDER_BIG_ENDIAN
 : <a class="el" href="osclconfig__ix86_8h.html#a8">osclconfig_ix86.h</a><li>OSCL_BYTE_ORDER_LITTLE_ENDIAN
-: <a class="el" href="osclconfig__ix86_8h.html#a9">osclconfig_ix86.h</a><li>oscl_calloc
-: <a class="el" href="oscl__mem_8h.html#a44">oscl_mem.h</a><li>OSCL_CALLOC
-: <a class="el" href="oscl__mem_8h.html#a43">oscl_mem.h</a><li>OSCL_CATCH
+: <a class="el" href="osclconfig__ix86_8h.html#a9">osclconfig_ix86.h</a><li>OSCL_CALLOC
+: <a class="el" href="oscl__mem_8h.html#a43">oscl_mem.h</a><li>oscl_calloc
+: <a class="el" href="oscl__mem_8h.html#a44">oscl_mem.h</a><li>OSCL_CATCH
 : <a class="el" href="oscl__exception_8h.html#a51">oscl_exception.h</a><li>OSCL_CATCH_ANY
 : <a class="el" href="oscl__exception_8h.html#a52">oscl_exception.h</a><li>OSCL_CHAR_IS_SIGNED
 : <a class="el" href="osclconfig__limits__typedefs_8h.html#a1">osclconfig_limits_typedefs.h</a><li>OSCL_CHAR_IS_UNSIGNED
@@ -256,7 +258,7 @@
 : <a class="el" href="oscl__mem_8h.html#a51">oscl_mem.h</a><li>OSCL_DEFAULT_MALLOC
 : <a class="el" href="oscl__mem_8h.html#a41">oscl_mem.h</a><li>OSCL_DELETE
 : <a class="el" href="oscl__mem_8h.html#a57">oscl_mem.h</a><li>OSCL_DISABLE_INLINES
-: <a class="el" href="osclconfig__unix__nj_8h.html#a0">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a0">osclconfig_unix_common.h</a><li>OSCL_DISABLE_WARNING_RETURN_TYPE_NOT_UDT
+: <a class="el" href="osclconfig__unix__android_8h.html#a0">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a0">osclconfig_unix_common.h</a><li>OSCL_DISABLE_WARNING_RETURN_TYPE_NOT_UDT
 : <a class="el" href="oscl__mem__auto__ptr_8h.html#a84">oscl_mem_auto_ptr.h</a>, <a class="el" href="oscl__shared__ptr_8h.html#a105">oscl_shared_ptr.h</a><li>OSCL_DISABLE_WARNING_TRUNCATE_DEBUG_MESSAGE
 : <a class="el" href="oscl__mem__auto__ptr_8h.html#a0">oscl_mem_auto_ptr.h</a>, <a class="el" href="oscl__mem__audit__internals_8h.html#a0">oscl_mem_audit_internals.h</a>, <a class="el" href="oscl__mem__audit_8h.html#a0">oscl_mem_audit.h</a>, <a class="el" href="oscl__mem_8h.html#a28">oscl_mem.h</a>, <a class="el" href="oscl__tree_8h.html#a0">oscl_tree.h</a>, <a class="el" href="oscl__tagtree_8h.html#a0">oscl_tagtree.h</a>, <a class="el" href="oscl__map_8h.html#a0">oscl_map.h</a>, <a class="el" href="oscl__defalloc_8h.html#a99">oscl_defalloc.h</a><li>OSCL_DLL_ENTRY_POINT
 : <a class="el" href="oscl__dll_8h.html#a102">oscl_dll.h</a><li>OSCL_DLL_ENTRY_POINT_DEFAULT
@@ -267,26 +269,26 @@
 : <a class="el" href="oscl__socket__serv__imp__pv_8h.html#a2">oscl_socket_serv_imp_pv.h</a><li>oscl_exp()
 : <a class="el" href="oscl__math_8h.html#a27">oscl_math.h</a><li>OSCL_FILE_BUFFER_MAX_SIZE
 : <a class="el" href="osclconfig__io_8h.html#a4">osclconfig_io.h</a><li>OSCL_FILE_CHAR_PATH_DELIMITER
-: <a class="el" href="oscl__file__types_8h.html#a22">oscl_file_types.h</a><li>OSCL_FILE_STATS_LOGGER_NODE
-: <a class="el" href="oscl__file__stats_8h.html#a18">oscl_file_stats.h</a><li>OSCL_FILE_WCHAR_PATH_DELIMITER
-: <a class="el" href="oscl__file__types_8h.html#a21">oscl_file_types.h</a><li>OSCL_FILEMGMT_E_ALREADY_EXISTS
-: <a class="el" href="oscl__file__dir__utils_8h.html#a27a9">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_E_NO_MATCH
-: <a class="el" href="oscl__file__dir__utils_8h.html#a27a12">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_E_NOT_EMPTY
-: <a class="el" href="oscl__file__dir__utils_8h.html#a27a10">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_E_NOT_IMPLEMENTED
-: <a class="el" href="oscl__file__dir__utils_8h.html#a27a15">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_E_OK
-: <a class="el" href="oscl__file__dir__utils_8h.html#a27a6">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_E_PATH_NOT_FOUND
-: <a class="el" href="oscl__file__dir__utils_8h.html#a27a8">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_E_PATH_TOO_LONG
-: <a class="el" href="oscl__file__dir__utils_8h.html#a27a7">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_E_PERMISSION_DENIED
-: <a class="el" href="oscl__file__dir__utils_8h.html#a27a11">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_E_SYS_SPECIFIC
-: <a class="el" href="oscl__file__dir__utils_8h.html#a27a14">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_E_UNKNOWN
-: <a class="el" href="oscl__file__dir__utils_8h.html#a27a13">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_ERR_TYPE
-: <a class="el" href="oscl__file__dir__utils_8h.html#a27">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_MODE_DIR
-: <a class="el" href="oscl__file__dir__utils_8h.html#a26a5">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_MODES
-: <a class="el" href="oscl__file__dir__utils_8h.html#a26">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_PERMS
-: <a class="el" href="oscl__file__dir__utils_8h.html#a25">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_PERMS_EXECUTE
-: <a class="el" href="oscl__file__dir__utils_8h.html#a25a4">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_PERMS_READ
-: <a class="el" href="oscl__file__dir__utils_8h.html#a25a2">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_PERMS_WRITE
-: <a class="el" href="oscl__file__dir__utils_8h.html#a25a3">oscl_file_dir_utils.h</a><li>OSCL_FIRST_CATCH
+: <a class="el" href="oscl__file__types_8h.html#a23">oscl_file_types.h</a><li>OSCL_FILE_STATS_LOGGER_NODE
+: <a class="el" href="oscl__file__stats_8h.html#a19">oscl_file_stats.h</a><li>OSCL_FILE_WCHAR_PATH_DELIMITER
+: <a class="el" href="oscl__file__types_8h.html#a22">oscl_file_types.h</a><li>OSCL_FILEMGMT_E_ALREADY_EXISTS
+: <a class="el" href="oscl__file__dir__utils_8h.html#a28a9">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_E_NO_MATCH
+: <a class="el" href="oscl__file__dir__utils_8h.html#a28a12">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_E_NOT_EMPTY
+: <a class="el" href="oscl__file__dir__utils_8h.html#a28a10">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_E_NOT_IMPLEMENTED
+: <a class="el" href="oscl__file__dir__utils_8h.html#a28a15">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_E_OK
+: <a class="el" href="oscl__file__dir__utils_8h.html#a28a6">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_E_PATH_NOT_FOUND
+: <a class="el" href="oscl__file__dir__utils_8h.html#a28a8">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_E_PATH_TOO_LONG
+: <a class="el" href="oscl__file__dir__utils_8h.html#a28a7">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_E_PERMISSION_DENIED
+: <a class="el" href="oscl__file__dir__utils_8h.html#a28a11">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_E_SYS_SPECIFIC
+: <a class="el" href="oscl__file__dir__utils_8h.html#a28a14">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_E_UNKNOWN
+: <a class="el" href="oscl__file__dir__utils_8h.html#a28a13">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_ERR_TYPE
+: <a class="el" href="oscl__file__dir__utils_8h.html#a28">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_MODE_DIR
+: <a class="el" href="oscl__file__dir__utils_8h.html#a27a5">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_MODES
+: <a class="el" href="oscl__file__dir__utils_8h.html#a27">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_PERMS
+: <a class="el" href="oscl__file__dir__utils_8h.html#a26">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_PERMS_EXECUTE
+: <a class="el" href="oscl__file__dir__utils_8h.html#a26a4">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_PERMS_READ
+: <a class="el" href="oscl__file__dir__utils_8h.html#a26a2">oscl_file_dir_utils.h</a><li>OSCL_FILEMGMT_PERMS_WRITE
+: <a class="el" href="oscl__file__dir__utils_8h.html#a26a3">oscl_file_dir_utils.h</a><li>OSCL_FIRST_CATCH
 : <a class="el" href="oscl__exception_8h.html#a50">oscl_exception.h</a><li>OSCL_FIRST_CATCH_ANY
 : <a class="el" href="oscl__exception_8h.html#a49">oscl_exception.h</a><li>oscl_floor()
 : <a class="el" href="oscl__math_8h.html#a33">oscl_math.h</a><li>OSCL_FREE
@@ -295,31 +297,32 @@
 : <a class="el" href="oscl__file__dir__utils_8h.html#a0">oscl_file_dir_utils.h</a><li>OSCL_FUNCTION_PTR
 : <a class="el" href="osclconfig__compiler__warnings_8h.html#a0">osclconfig_compiler_warnings.h</a><li>oscl_getcwd()
 : <a class="el" href="oscl__file__dir__utils_8h.html#a5">oscl_file_dir_utils.h</a><li>OSCL_GetLastError()
-: <a class="el" href="oscl__errno_8h.html#a5">oscl_errno.h</a><li>OSCL_HAS_ANSI_FILE_IO_SUPPORT
+: <a class="el" href="oscl__errno_8h.html#a5">oscl_errno.h</a><li>OSCL_HAS_ANDROID_FILE_IO_SUPPORT
+: <a class="el" href="osclconfig_8h.html#a1">osclconfig.h</a><li>OSCL_HAS_ANDROID_SUPPORT
+: <a class="el" href="osclconfig_8h.html#a0">osclconfig.h</a><li>OSCL_HAS_ANSI_FILE_IO_SUPPORT
 : <a class="el" href="osclconfig__io_8h.html#a1">osclconfig_io.h</a><li>OSCL_HAS_ANSI_MATH_SUPPORT
-: <a class="el" href="osclconfig__unix__nj_8h.html#a2">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a2">osclconfig_unix_common.h</a><li>OSCL_HAS_ANSI_MEMORY_FUNCS
+: <a class="el" href="osclconfig__unix__android_8h.html#a2">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a2">osclconfig_unix_common.h</a><li>OSCL_HAS_ANSI_MEMORY_FUNCS
 : <a class="el" href="osclconfig__ansi__memory_8h.html#a0">osclconfig_ansi_memory.h</a><li>OSCL_HAS_ANSI_STDIO_SUPPORT
-: <a class="el" href="osclconfig__unix__nj_8h.html#a6">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a6">osclconfig_unix_common.h</a><li>OSCL_HAS_ANSI_STDLIB_SUPPORT
-: <a class="el" href="osclconfig__unix__nj_8h.html#a1">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a1">osclconfig_unix_common.h</a><li>OSCL_HAS_ANSI_STRING_SUPPORT
-: <a class="el" href="osclconfig__unix__nj_8h.html#a4">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a4">osclconfig_unix_common.h</a><li>OSCL_HAS_ANSI_WIDE_STRING_SUPPORT
-: <a class="el" href="osclconfig__unix__nj_8h.html#a5">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a5">osclconfig_unix_common.h</a><li>OSCL_HAS_BASIC_LOCK
-: <a class="el" href="osclconfig__unix__nj_8h.html#a30">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a30">osclconfig_unix_common.h</a><li>OSCL_HAS_BERKELEY_SOCKETS
-: <a class="el" href="osclconfig__io_8h.html#a8">osclconfig_io.h</a>, <a class="el" href="osclconfig__no__os_8h.html#a30">osclconfig_no_os.h</a><li>OSCL_HAS_ERRNO_H
+: <a class="el" href="osclconfig__unix__android_8h.html#a6">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a6">osclconfig_unix_common.h</a><li>OSCL_HAS_ANSI_STDLIB_SUPPORT
+: <a class="el" href="osclconfig__unix__android_8h.html#a1">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a1">osclconfig_unix_common.h</a><li>OSCL_HAS_ANSI_STRING_SUPPORT
+: <a class="el" href="osclconfig__unix__android_8h.html#a4">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a4">osclconfig_unix_common.h</a><li>OSCL_HAS_ANSI_WIDE_STRING_SUPPORT
+: <a class="el" href="osclconfig__unix__android_8h.html#a5">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a5">osclconfig_unix_common.h</a><li>OSCL_HAS_BASIC_LOCK
+: <a class="el" href="osclconfig__unix__android_8h.html#a30">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a30">osclconfig_unix_common.h</a><li>OSCL_HAS_BERKELEY_SOCKETS
+: <a class="el" href="osclconfig__io_8h.html#a9">osclconfig_io.h</a>, <a class="el" href="osclconfig__no__os_8h.html#a30">osclconfig_no_os.h</a><li>OSCL_HAS_ERRNO_H
 : <a class="el" href="osclconfig__error_8h.html#a1">osclconfig_error.h</a><li>OSCL_HAS_EXCEPTIONS
 : <a class="el" href="osclconfig__error_8h.html#a0">osclconfig_error.h</a><li>OSCL_HAS_GLOB
 : <a class="el" href="osclconfig__io_8h.html#a0">osclconfig_io.h</a><li>OSCL_HAS_GLOBAL_NEW_DELETE
 : <a class="el" href="oscl__mem_8h.html#a34">oscl_mem.h</a>, <a class="el" href="osclconfig__memory_8h.html#a1">osclconfig_memory.h</a><li>OSCL_HAS_GLOBAL_VARIABLE_SUPPORT
-: <a class="el" href="osclconfig__unix__nj_8h.html#a3">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a3">osclconfig_unix_common.h</a><li>OSCL_HAS_HEAP_BASE_SUPPORT
-: <a class="el" href="osclconfig__memory_8h.html#a3">osclconfig_memory.h</a><li>OSCL_HAS_MSWIN_PARTIAL_SUPPORT
+: <a class="el" href="osclconfig__unix__android_8h.html#a3">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a3">osclconfig_unix_common.h</a><li>OSCL_HAS_HEAP_BASE_SUPPORT
+: <a class="el" href="osclconfig__memory_8h.html#a3">osclconfig_memory.h</a><li>OSCL_HAS_LARGE_FILE_SUPPORT
+: <a class="el" href="osclconfig__io_8h.html#a6">osclconfig_io.h</a><li>OSCL_HAS_MSWIN_PARTIAL_SUPPORT
 : <a class="el" href="osclconfig__no__os_8h.html#a12">osclconfig_no_os.h</a><li>OSCL_HAS_MSWIN_SUPPORT
-: <a class="el" href="osclconfig__unix__nj_8h.html#a9">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a9">osclconfig_unix_common.h</a>, <a class="el" href="osclconfig__no__os_8h.html#a11">osclconfig_no_os.h</a><li>OSCL_HAS_NATIVE_FILE_CACHE_ENABLE
+: <a class="el" href="osclconfig__unix__android_8h.html#a9">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a9">osclconfig_unix_common.h</a>, <a class="el" href="osclconfig__no__os_8h.html#a11">osclconfig_no_os.h</a><li>OSCL_HAS_NATIVE_FILE_CACHE_ENABLE
 : <a class="el" href="osclconfig__io_8h.html#a3">osclconfig_io.h</a><li>OSCL_HAS_NATIVE_INT64_TYPE
-: <a class="el" href="osclconfig__unix__nj_8h.html#a11">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a11">osclconfig_unix_common.h</a><li>OSCL_HAS_NATIVE_UINT64_TYPE
-: <a class="el" href="osclconfig__unix__nj_8h.html#a12">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a12">osclconfig_unix_common.h</a><li>OSCL_HAS_NJ_FILE_IO_SUPPORT
-: <a class="el" href="osclconfig_8h.html#a1">osclconfig.h</a><li>OSCL_HAS_NJ_SUPPORT
-: <a class="el" href="osclconfig_8h.html#a0">osclconfig.h</a><li>OSCL_HAS_NON_PREEMPTIVE_THREAD_SUPPORT
-: <a class="el" href="osclconfig__proc__unix__nj_8h.html#a2">osclconfig_proc_unix_nj.h</a>, <a class="el" href="osclconfig__proc__unix__common_8h.html#a2">osclconfig_proc_unix_common.h</a><li>OSCL_HAS_PTHREAD_SUPPORT
-: <a class="el" href="osclconfig__proc__unix__nj_8h.html#a4">osclconfig_proc_unix_nj.h</a>, <a class="el" href="osclconfig__proc__unix__common_8h.html#a4">osclconfig_proc_unix_common.h</a>, <a class="el" href="osclconfig__no__os_8h.html#a25">osclconfig_no_os.h</a><li>OSCL_HAS_PV_C_OS_API_MEMORY_FUNCS
+: <a class="el" href="osclconfig__unix__android_8h.html#a11">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a11">osclconfig_unix_common.h</a><li>OSCL_HAS_NATIVE_UINT64_TYPE
+: <a class="el" href="osclconfig__unix__android_8h.html#a12">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a12">osclconfig_unix_common.h</a><li>OSCL_HAS_NON_PREEMPTIVE_THREAD_SUPPORT
+: <a class="el" href="osclconfig__proc__unix__android_8h.html#a2">osclconfig_proc_unix_android.h</a>, <a class="el" href="osclconfig__proc__unix__common_8h.html#a2">osclconfig_proc_unix_common.h</a><li>OSCL_HAS_PTHREAD_SUPPORT
+: <a class="el" href="osclconfig__proc__unix__android_8h.html#a4">osclconfig_proc_unix_android.h</a>, <a class="el" href="osclconfig__proc__unix__common_8h.html#a4">osclconfig_proc_unix_common.h</a>, <a class="el" href="osclconfig__no__os_8h.html#a25">osclconfig_no_os.h</a><li>OSCL_HAS_PV_C_OS_API_MEMORY_FUNCS
 : <a class="el" href="osclconfig__no__os_8h.html#a18">osclconfig_no_os.h</a><li>OSCL_HAS_PV_C_OS_SUPPORT
 : <a class="el" href="osclconfig__no__os_8h.html#a15">osclconfig_no_os.h</a><li>OSCL_HAS_PV_C_OS_TIME_FUNCS
 : <a class="el" href="osclconfig__no__os_8h.html#a19">osclconfig_no_os.h</a><li>OSCL_HAS_PV_FILE_CACHE
@@ -327,30 +330,30 @@
 : <a class="el" href="osclconfig__lib_8h.html#a0">osclconfig_lib.h</a><li>OSCL_HAS_SAVAJE_IO_SUPPORT
 : <a class="el" href="osclconfig__no__os_8h.html#a27">osclconfig_no_os.h</a><li>OSCL_HAS_SAVAJE_SUPPORT
 : <a class="el" href="osclconfig__no__os_8h.html#a14">osclconfig_no_os.h</a><li>OSCL_HAS_SEM_TIMEDWAIT_SUPPORT
-: <a class="el" href="osclconfig__proc__unix__nj_8h.html#a3">osclconfig_proc_unix_nj.h</a>, <a class="el" href="osclconfig__proc__unix__common_8h.html#a3">osclconfig_proc_unix_common.h</a>, <a class="el" href="osclconfig__no__os_8h.html#a24">osclconfig_no_os.h</a><li>OSCL_HAS_SETJMP_H
+: <a class="el" href="osclconfig__proc__unix__android_8h.html#a3">osclconfig_proc_unix_android.h</a>, <a class="el" href="osclconfig__proc__unix__common_8h.html#a3">osclconfig_proc_unix_common.h</a>, <a class="el" href="osclconfig__no__os_8h.html#a24">osclconfig_no_os.h</a><li>OSCL_HAS_SETJMP_H
 : <a class="el" href="osclconfig__error_8h.html#a3">osclconfig_error.h</a><li>OSCL_HAS_SINGLETON_SUPPORT
 : <a class="el" href="oscl__base_8h.html#a79">oscl_base.h</a><li>OSCL_HAS_SOCKET_SUPPORT
-: <a class="el" href="osclconfig__io_8h.html#a9">osclconfig_io.h</a><li>OSCL_HAS_SYMBIAN_COMPATIBLE_IO_FUNCTION
+: <a class="el" href="osclconfig__io_8h.html#a10">osclconfig_io.h</a><li>OSCL_HAS_SYMBIAN_COMPATIBLE_IO_FUNCTION
 : <a class="el" href="osclconfig__io_8h.html#a2">osclconfig_io.h</a>, <a class="el" href="osclconfig__no__os_8h.html#a26">osclconfig_no_os.h</a><li>OSCL_HAS_SYMBIAN_DNS_SERVER
-: <a class="el" href="osclconfig__io_8h.html#a7">osclconfig_io.h</a>, <a class="el" href="osclconfig__no__os_8h.html#a29">osclconfig_no_os.h</a><li>OSCL_HAS_SYMBIAN_ERRORTRAP
+: <a class="el" href="osclconfig__io_8h.html#a8">osclconfig_io.h</a>, <a class="el" href="osclconfig__no__os_8h.html#a29">osclconfig_no_os.h</a><li>OSCL_HAS_SYMBIAN_ERRORTRAP
 : <a class="el" href="osclconfig__error_8h.html#a2">osclconfig_error.h</a>, <a class="el" href="osclconfig__no__os_8h.html#a16">osclconfig_no_os.h</a><li>OSCL_HAS_SYMBIAN_MATH
 : <a class="el" href="osclconfig__util_8h.html#a2">osclconfig_util.h</a>, <a class="el" href="osclconfig__no__os_8h.html#a22">osclconfig_no_os.h</a><li>OSCL_HAS_SYMBIAN_MEMORY_FUNCS
 : <a class="el" href="osclconfig__memory_8h.html#a4">osclconfig_memory.h</a>, <a class="el" href="osclconfig__no__os_8h.html#a17">osclconfig_no_os.h</a><li>OSCL_HAS_SYMBIAN_SCHEDULER
-: <a class="el" href="osclconfig__proc__unix__nj_8h.html#a0">osclconfig_proc_unix_nj.h</a>, <a class="el" href="osclconfig__proc__unix__common_8h.html#a0">osclconfig_proc_unix_common.h</a>, <a class="el" href="osclconfig__no__os_8h.html#a23">osclconfig_no_os.h</a><li>OSCL_HAS_SYMBIAN_SOCKET_SERVER
-: <a class="el" href="osclconfig__io_8h.html#a6">osclconfig_io.h</a>, <a class="el" href="osclconfig__no__os_8h.html#a28">osclconfig_no_os.h</a><li>OSCL_HAS_SYMBIAN_SUPPORT
-: <a class="el" href="osclconfig__unix__nj_8h.html#a10">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a10">osclconfig_unix_common.h</a>, <a class="el" href="osclconfig__no__os_8h.html#a13">osclconfig_no_os.h</a><li>OSCL_HAS_SYMBIAN_TIMERS
+: <a class="el" href="osclconfig__proc__unix__android_8h.html#a0">osclconfig_proc_unix_android.h</a>, <a class="el" href="osclconfig__proc__unix__common_8h.html#a0">osclconfig_proc_unix_common.h</a>, <a class="el" href="osclconfig__no__os_8h.html#a23">osclconfig_no_os.h</a><li>OSCL_HAS_SYMBIAN_SOCKET_SERVER
+: <a class="el" href="osclconfig__io_8h.html#a7">osclconfig_io.h</a>, <a class="el" href="osclconfig__no__os_8h.html#a28">osclconfig_no_os.h</a><li>OSCL_HAS_SYMBIAN_SUPPORT
+: <a class="el" href="osclconfig__unix__android_8h.html#a10">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a10">osclconfig_unix_common.h</a>, <a class="el" href="osclconfig__no__os_8h.html#a13">osclconfig_no_os.h</a><li>OSCL_HAS_SYMBIAN_TIMERS
 : <a class="el" href="osclconfig__util_8h.html#a1">osclconfig_util.h</a>, <a class="el" href="osclconfig__no__os_8h.html#a21">osclconfig_no_os.h</a><li>OSCL_HAS_THREAD_SUPPORT
-: <a class="el" href="osclconfig__proc__unix__nj_8h.html#a1">osclconfig_proc_unix_nj.h</a>, <a class="el" href="osclconfig__proc__unix__common_8h.html#a1">osclconfig_proc_unix_common.h</a><li>OSCL_HAS_TLS_SUPPORT
-: <a class="el" href="osclconfig__unix__nj_8h.html#a24">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a24">osclconfig_unix_common.h</a><li>OSCL_HAS_UNICODE_SUPPORT
-: <a class="el" href="osclconfig__unix__nj_8h.html#a19">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a19">osclconfig_unix_common.h</a><li>OSCL_HAS_UNIX_SUPPORT
-: <a class="el" href="osclconfig__unix__nj_8h.html#a8">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a8">osclconfig_unix_common.h</a>, <a class="el" href="osclconfig__no__os_8h.html#a10">osclconfig_no_os.h</a><li>OSCL_HAS_UNIX_TIME_FUNCS
+: <a class="el" href="osclconfig__proc__unix__android_8h.html#a1">osclconfig_proc_unix_android.h</a>, <a class="el" href="osclconfig__proc__unix__common_8h.html#a1">osclconfig_proc_unix_common.h</a><li>OSCL_HAS_TLS_SUPPORT
+: <a class="el" href="osclconfig__unix__android_8h.html#a24">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a24">osclconfig_unix_common.h</a><li>OSCL_HAS_UNICODE_SUPPORT
+: <a class="el" href="osclconfig__unix__android_8h.html#a19">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a19">osclconfig_unix_common.h</a><li>OSCL_HAS_UNIX_SUPPORT
+: <a class="el" href="osclconfig__unix__android_8h.html#a8">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a8">osclconfig_unix_common.h</a>, <a class="el" href="osclconfig__no__os_8h.html#a10">osclconfig_no_os.h</a><li>OSCL_HAS_UNIX_TIME_FUNCS
 : <a class="el" href="osclconfig__time_8h.html#a0">osclconfig_time.h</a>, <a class="el" href="osclconfig__no__os_8h.html#a20">osclconfig_no_os.h</a><li>OSCL_INLINE
 : <a class="el" href="oscl__base__macros_8h.html#a82">oscl_base_macros.h</a><li>OSCL_INTEGERS_WORD_ALIGNED
 : <a class="el" href="osclconfig__ix86_8h.html#a7">osclconfig_ix86.h</a><li>OSCL_IO_EXTENSION_MAXLEN
-: <a class="el" href="oscl__file__types_8h.html#a20">oscl_file_types.h</a><li>OSCL_IO_FILENAME_MAXLEN
-: <a class="el" href="oscl__file__types_8h.html#a19">oscl_file_types.h</a><li>OSCL_IPPROTO_TCP
-: <a class="el" href="osclconfig__io_8h.html#a40">osclconfig_io.h</a><li>OSCL_IPPROTO_UDP
-: <a class="el" href="osclconfig__io_8h.html#a41">osclconfig_io.h</a><li>oscl_isdigit
+: <a class="el" href="oscl__file__types_8h.html#a21">oscl_file_types.h</a><li>OSCL_IO_FILENAME_MAXLEN
+: <a class="el" href="oscl__file__types_8h.html#a20">oscl_file_types.h</a><li>OSCL_IPPROTO_TCP
+: <a class="el" href="osclconfig__io_8h.html#a41">osclconfig_io.h</a><li>OSCL_IPPROTO_UDP
+: <a class="el" href="osclconfig__io_8h.html#a42">osclconfig_io.h</a><li>oscl_isdigit
 : <a class="el" href="oscl__string__utils_8h.html#a46">oscl_string_utils.h</a><li>OSCL_IsErrnoSupported()
 : <a class="el" href="oscl__errno_8h.html#a4">oscl_errno.h</a><li>oscl_isLetter()
 : <a class="el" href="oscl__stdstring_8h.html#a68">oscl_stdstring.h</a><li>OSCL_JUMP_MAX_JUMP_MARKS
@@ -367,16 +370,16 @@
 : <a class="el" href="oscl__mem_8h.html#a16">oscl_mem.h</a><li>oscl_memcmp()
 : <a class="el" href="oscl__mem__basic__functions_8h.html#a15">oscl_mem_basic_functions.h</a><li>oscl_memcpy()
 : <a class="el" href="oscl__mem__basic__functions_8h.html#a11">oscl_mem_basic_functions.h</a><li>OSCL_MEMFRAG_PTR_BEFORE_LEN
-: <a class="el" href="osclconfig__unix__nj_8h.html#a7">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a7">osclconfig_unix_common.h</a><li>oscl_memmove()
+: <a class="el" href="osclconfig__unix__android_8h.html#a7">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a7">osclconfig_unix_common.h</a><li>oscl_memmove()
 : <a class="el" href="oscl__mem__basic__functions_8h.html#a12">oscl_mem_basic_functions.h</a><li>oscl_memmove32()
 : <a class="el" href="oscl__mem__basic__functions_8h.html#a13">oscl_mem_basic_functions.h</a><li>oscl_memset()
 : <a class="el" href="oscl__mem__basic__functions_8h.html#a14">oscl_mem_basic_functions.h</a><li>oscl_memsize_t
 : <a class="el" href="osclconfig__ansi__memory_8h.html#a1">osclconfig_ansi_memory.h</a><li>OSCL_MIN
 : <a class="el" href="oscl__base__macros_8h.html#a91">oscl_base_macros.h</a><li>oscl_mkdir()
 : <a class="el" href="oscl__file__dir__utils_8h.html#a9">oscl_file_dir_utils.h</a><li>OSCL_NATIVE_INT64_TYPE
-: <a class="el" href="osclconfig__unix__nj_8h.html#a13">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a13">osclconfig_unix_common.h</a><li>OSCL_NATIVE_UINT64_TYPE
-: <a class="el" href="osclconfig__unix__nj_8h.html#a14">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig_8h.html#a4">osclconfig.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a14">osclconfig_unix_common.h</a><li>OSCL_NATIVE_WCHAR_TYPE
-: <a class="el" href="osclconfig__unix__nj_8h.html#a20">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a20">osclconfig_unix_common.h</a><li>OSCL_NEW
+: <a class="el" href="osclconfig__unix__android_8h.html#a13">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a13">osclconfig_unix_common.h</a><li>OSCL_NATIVE_UINT64_TYPE
+: <a class="el" href="osclconfig__unix__android_8h.html#a14">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig_8h.html#a4">osclconfig.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a14">osclconfig_unix_common.h</a><li>OSCL_NATIVE_WCHAR_TYPE
+: <a class="el" href="osclconfig__unix__android_8h.html#a20">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a20">osclconfig_unix_common.h</a><li>OSCL_NEW
 : <a class="el" href="oscl__mem_8h.html#a52">oscl_mem.h</a><li>OSCL_PACKED_STRUCT_BEGIN
 : <a class="el" href="osclconfig_8h.html#a9">osclconfig.h</a><li>OSCL_PACKED_STRUCT_END
 : <a class="el" href="osclconfig_8h.html#a10">osclconfig.h</a><li>OSCL_PACKED_VAR
@@ -385,9 +388,9 @@
 : <a class="el" href="oscl__mem_8h.html#a53">oscl_mem.h</a><li>oscl_pow()
 : <a class="el" href="oscl__math_8h.html#a26">oscl_math.h</a><li>OSCL_RAND_MAX
 : <a class="el" href="osclconfig__util_8h.html#a3">osclconfig_util.h</a><li>OSCL_READSET_FLAG
-: <a class="el" href="oscl__socket__serv__imp__pv_8h.html#a0">oscl_socket_serv_imp_pv.h</a><li>OSCL_REALLOC
-: <a class="el" href="oscl__mem_8h.html#a46">oscl_mem.h</a><li>oscl_realloc
-: <a class="el" href="oscl__mem_8h.html#a47">oscl_mem.h</a><li>OSCL_REINTERPRET_CAST
+: <a class="el" href="oscl__socket__serv__imp__pv_8h.html#a0">oscl_socket_serv_imp_pv.h</a><li>oscl_realloc
+: <a class="el" href="oscl__mem_8h.html#a47">oscl_mem.h</a><li>OSCL_REALLOC
+: <a class="el" href="oscl__mem_8h.html#a46">oscl_mem.h</a><li>OSCL_REINTERPRET_CAST
 : <a class="el" href="oscl__base__macros_8h.html#a87">oscl_base_macros.h</a><li>OSCL_RELEASE_BUILD
 : <a class="el" href="osclconfig_8h.html#a2">osclconfig.h</a><li>oscl_rename()
 : <a class="el" href="oscl__file__dir__utils_8h.html#a15">oscl_file_dir_utils.h</a><li>OSCL_REQUEST_ERR_CANCEL
@@ -396,9 +399,9 @@
 : <a class="el" href="oscl__aostatus_8h.html#a0">oscl_aostatus.h</a><li>OSCL_REQUEST_PENDING
 : <a class="el" href="oscl__aostatus_8h.html#a1">oscl_aostatus.h</a><li>oscl_rmdir()
 : <a class="el" href="oscl__file__dir__utils_8h.html#a11">oscl_file_dir_utils.h</a><li>OSCL_SD_BOTH
-: <a class="el" href="osclconfig__io_8h.html#a36">osclconfig_io.h</a><li>OSCL_SD_RECEIVE
-: <a class="el" href="osclconfig__io_8h.html#a34">osclconfig_io.h</a><li>OSCL_SD_SEND
-: <a class="el" href="osclconfig__io_8h.html#a35">osclconfig_io.h</a><li>OSCL_SetLastError()
+: <a class="el" href="osclconfig__io_8h.html#a37">osclconfig_io.h</a><li>OSCL_SD_RECEIVE
+: <a class="el" href="osclconfig__io_8h.html#a35">osclconfig_io.h</a><li>OSCL_SD_SEND
+: <a class="el" href="osclconfig__io_8h.html#a36">osclconfig_io.h</a><li>OSCL_SetLastError()
 : <a class="el" href="oscl__errno_8h.html#a6">oscl_errno.h</a><li>oscl_sin()
 : <a class="el" href="oscl__math_8h.html#a28">oscl_math.h</a><li>OSCL_SINGLETON_ID_CPM_PLUGIN
 : <a class="el" href="oscl__singleton_8h.html#a7">oscl_singleton.h</a><li>OSCL_SINGLETON_ID_LAST
@@ -416,8 +419,8 @@
 : <a class="el" href="oscl__singleton_8h.html#a0">oscl_singleton.h</a><li>OSCL_SINGLETON_ID_TICKCOUNT
 : <a class="el" href="oscl__singleton_8h.html#a12">oscl_singleton.h</a><li>oscl_snprintf()
 : <a class="el" href="oscl__snprintf_8h.html#a35">oscl_snprintf.h</a><li>OSCL_SOCK_DATAGRAM
-: <a class="el" href="osclconfig__io_8h.html#a39">osclconfig_io.h</a><li>OSCL_SOCK_STREAM
-: <a class="el" href="osclconfig__io_8h.html#a38">osclconfig_io.h</a><li>OSCL_SOCKET_LISTEN_H_INCLUDEDd
+: <a class="el" href="osclconfig__io_8h.html#a40">osclconfig_io.h</a><li>OSCL_SOCK_STREAM
+: <a class="el" href="osclconfig__io_8h.html#a39">osclconfig_io.h</a><li>OSCL_SOCKET_LISTEN_H_INCLUDEDd
 : <a class="el" href="oscl__socket__listen_8h.html#a0">oscl_socket_listen.h</a><li>oscl_sqrt()
 : <a class="el" href="oscl__math_8h.html#a25">oscl_math.h</a><li>oscl_stat()
 : <a class="el" href="oscl__file__dir__utils_8h.html#a7">oscl_file_dir_utils.h</a><li>OSCL_STAT_BUF
@@ -443,10 +446,10 @@
 : <a class="el" href="oscl__math_8h.html#a30">oscl_math.h</a><li>OSCL_TCHAR
 : <a class="el" href="oscl__types_8h.html#a33">oscl_types.h</a><li>OSCL_TEMPLATED_DESTRUCTOR_CALL
 : <a class="el" href="oscl__base__macros_8h.html#a94">oscl_base_macros.h</a>, <a class="el" href="osclconfig_8h.html#a5">osclconfig.h</a><li>OSCL_THREAD_DECL
-: <a class="el" href="osclconfig__proc__unix__nj_8h.html#a5">osclconfig_proc_unix_nj.h</a>, <a class="el" href="osclconfig__proc__unix__common_8h.html#a5">osclconfig_proc_unix_common.h</a><li>OSCL_TLS_BASE_SLOTS
+: <a class="el" href="osclconfig__proc__unix__android_8h.html#a5">osclconfig_proc_unix_android.h</a>, <a class="el" href="osclconfig__proc__unix__common_8h.html#a5">osclconfig_proc_unix_common.h</a><li>OSCL_TLS_BASE_SLOTS
 : <a class="el" href="oscl__tls_8h.html#a106">oscl_tls.h</a><li>OSCL_TLS_EXTERNAL_SLOTS
 : <a class="el" href="oscl__tls_8h.html#a107">oscl_tls.h</a><li>OSCL_TLS_GET_FUNC
-: <a class="el" href="osclconfig__unix__nj_8h.html#a29">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a29">osclconfig_unix_common.h</a><li>OSCL_TLS_ID_BASE_LAST
+: <a class="el" href="osclconfig__unix__android_8h.html#a29">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a29">osclconfig_unix_common.h</a><li>OSCL_TLS_ID_BASE_LAST
 : <a class="el" href="oscl__tls_8h.html#a23">oscl_tls.h</a><li>OSCL_TLS_ID_ERRORHOOK
 : <a class="el" href="oscl__tls_8h.html#a12">oscl_tls.h</a><li>OSCL_TLS_ID_MAGICNUM
 : <a class="el" href="oscl__tls_8h.html#a11">oscl_tls.h</a><li>OSCL_TLS_ID_OSCLREGISTRY
@@ -460,11 +463,11 @@
 : <a class="el" href="oscl__tls_8h.html#a22">oscl_tls.h</a><li>OSCL_TLS_ID_TEST
 : <a class="el" href="oscl__tls_8h.html#a14">oscl_tls.h</a><li>OSCL_TLS_ID_WMDRM
 : <a class="el" href="oscl__tls_8h.html#a20">oscl_tls.h</a><li>OSCL_TLS_IS_KEYED
-: <a class="el" href="osclconfig__unix__nj_8h.html#a25">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a25">osclconfig_unix_common.h</a><li>OSCL_TLS_KEY_CREATE_FUNC
-: <a class="el" href="osclconfig__unix__nj_8h.html#a26">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a26">osclconfig_unix_common.h</a><li>OSCL_TLS_KEY_DELETE_FUNC
-: <a class="el" href="osclconfig__unix__nj_8h.html#a27">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a27">osclconfig_unix_common.h</a><li>OSCL_TLS_MAX_SLOTS
+: <a class="el" href="osclconfig__unix__android_8h.html#a25">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a25">osclconfig_unix_common.h</a><li>OSCL_TLS_KEY_CREATE_FUNC
+: <a class="el" href="osclconfig__unix__android_8h.html#a26">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a26">osclconfig_unix_common.h</a><li>OSCL_TLS_KEY_DELETE_FUNC
+: <a class="el" href="osclconfig__unix__android_8h.html#a27">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a27">osclconfig_unix_common.h</a><li>OSCL_TLS_MAX_SLOTS
 : <a class="el" href="oscl__tls_8h.html#a108">oscl_tls.h</a><li>OSCL_TLS_STORE_FUNC
-: <a class="el" href="osclconfig__unix__nj_8h.html#a28">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a28">osclconfig_unix_common.h</a><li>oscl_tolower()
+: <a class="el" href="osclconfig__unix__android_8h.html#a28">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a28">osclconfig_unix_common.h</a><li>oscl_tolower()
 : <a class="el" href="oscl__stdstring_8h.html#a67">oscl_stdstring.h</a><li>OSCL_TRAP_ALLOC_NEW
 : <a class="el" href="oscl__mem_8h.html#a37">oscl_mem.h</a><li>OSCL_TRAP_AUDIT_NEW
 : <a class="el" href="oscl__mem_8h.html#a56">oscl_mem.h</a><li>OSCL_TRAP_NEW
@@ -484,15 +487,15 @@
 : <a class="el" href="oscl__types_8h.html#a32">oscl_types.h</a><li>OSCL_WRITESET_FLAG
 : <a class="el" href="oscl__socket__serv__imp__pv_8h.html#a1">oscl_socket_serv_imp_pv.h</a><li>OSCL_ZEROIZE
 : <a class="el" href="oscl__scheduler__aobase_8h.html#a10">oscl_scheduler_aobase.h</a><li>OsclAccept
-: <a class="el" href="osclconfig__io_8h.html#a17">osclconfig_io.h</a><li>OsclAny
+: <a class="el" href="osclconfig__io_8h.html#a18">osclconfig_io.h</a><li>OsclAny
 : <a class="el" href="oscl__types_8h.html#a25">oscl_types.h</a><li>OsclBasicDateTimeStruct
 : <a class="el" href="osclconfig__time_8h.html#a2">osclconfig_time.h</a><li>OsclBasicTimeStruct
 : <a class="el" href="osclconfig__time_8h.html#a1">osclconfig_time.h</a><li>OsclBind
-: <a class="el" href="osclconfig__io_8h.html#a14">osclconfig_io.h</a><li>OsclCloseSocket
-: <a class="el" href="osclconfig__io_8h.html#a23">osclconfig_io.h</a><li>OsclComponentFactory
+: <a class="el" href="osclconfig__io_8h.html#a15">osclconfig_io.h</a><li>OsclCloseSocket
+: <a class="el" href="osclconfig__io_8h.html#a24">osclconfig_io.h</a><li>OsclComponentFactory
 : <a class="el" href="oscl__registry__types_8h.html#a0">oscl_registry_types.h</a><li>OsclConnect
-: <a class="el" href="osclconfig__io_8h.html#a24">osclconfig_io.h</a><li>OsclConnectComplete
-: <a class="el" href="osclconfig__io_8h.html#a26">osclconfig_io.h</a><li>OsclErrAlreadyExists
+: <a class="el" href="osclconfig__io_8h.html#a25">osclconfig_io.h</a><li>OsclConnectComplete
+: <a class="el" href="osclconfig__io_8h.html#a27">osclconfig_io.h</a><li>OsclErrAlreadyExists
 : <a class="el" href="oscl__error__codes_8h.html#a18">oscl_error_codes.h</a><li>OsclErrAlreadyInstalled
 : <a class="el" href="oscl__error__codes_8h.html#a28">oscl_error_codes.h</a><li>OsclErrArgument
 : <a class="el" href="oscl__error__codes_8h.html#a16">oscl_error_codes.h</a><li>OsclErrBadHandle
@@ -516,31 +519,31 @@
 : <a class="el" href="oscl__error__codes_8h.html#a24">oscl_error_codes.h</a><li>OsclFailure
 : <a class="el" href="oscl__error__codes_8h.html#a36">oscl_error_codes.h</a><li>OsclFloat
 : <a class="el" href="oscl__types_8h.html#a29">oscl_types.h</a><li>OsclGetAsyncSockErr
-: <a class="el" href="osclconfig__io_8h.html#a25">osclconfig_io.h</a><li>OsclGetDottedAddr
-: <a class="el" href="osclconfig__io_8h.html#a33">osclconfig_io.h</a><li>OsclGethostbyname
-: <a class="el" href="osclconfig__io_8h.html#a32">osclconfig_io.h</a><li>OsclJoin
-: <a class="el" href="osclconfig__io_8h.html#a15">osclconfig_io.h</a><li>OsclLeaveCode
+: <a class="el" href="osclconfig__io_8h.html#a26">osclconfig_io.h</a><li>OsclGetDottedAddr
+: <a class="el" href="osclconfig__io_8h.html#a34">osclconfig_io.h</a><li>OsclGethostbyname
+: <a class="el" href="osclconfig__io_8h.html#a33">osclconfig_io.h</a><li>OsclJoin
+: <a class="el" href="osclconfig__io_8h.html#a16">osclconfig_io.h</a><li>OsclLeaveCode
 : <a class="el" href="oscl__error__codes_8h.html#a1">oscl_error_codes.h</a><li>OsclListen
-: <a class="el" href="osclconfig__io_8h.html#a16">osclconfig_io.h</a><li>OsclMakeSockAddr
-: <a class="el" href="osclconfig__io_8h.html#a11">osclconfig_io.h</a><li>OsclMemInit()
+: <a class="el" href="osclconfig__io_8h.html#a17">osclconfig_io.h</a><li>OsclMakeSockAddr
+: <a class="el" href="osclconfig__io_8h.html#a12">osclconfig_io.h</a><li>OsclMemInit()
 : <a class="el" href="oscl__mem_8h.html#a17">oscl_mem.h</a><li>OsclMemStatsNodeAutoPtr
 : <a class="el" href="oscl__mem__audit_8h.html#a4">oscl_mem_audit.h</a><li>OsclNoYieldMutex
 : <a class="el" href="oscl__mutex_8h.html#a0">oscl_mutex.h</a><li>OsclPending
 : <a class="el" href="oscl__error__codes_8h.html#a35">oscl_error_codes.h</a><li>OsclPtrAdd()
 : <a class="el" href="oscl__double__list_8h.html#a5">oscl_double_list.h</a><li>OsclPtrSub()
 : <a class="el" href="oscl__double__list_8h.html#a6">oscl_double_list.h</a><li>OsclRecv
-: <a class="el" href="osclconfig__io_8h.html#a27">osclconfig_io.h</a><li>OsclRecvFrom
-: <a class="el" href="osclconfig__io_8h.html#a28">osclconfig_io.h</a><li>OsclReturnCode
+: <a class="el" href="osclconfig__io_8h.html#a28">osclconfig_io.h</a><li>OsclRecvFrom
+: <a class="el" href="osclconfig__io_8h.html#a29">osclconfig_io.h</a><li>OsclReturnCode
 : <a class="el" href="oscl__error__codes_8h.html#a2">oscl_error_codes.h</a><li>OsclSend
-: <a class="el" href="osclconfig__io_8h.html#a22">osclconfig_io.h</a><li>OsclSendTo
-: <a class="el" href="osclconfig__io_8h.html#a21">osclconfig_io.h</a><li>OsclSetNonBlocking
-: <a class="el" href="osclconfig__io_8h.html#a18">osclconfig_io.h</a><li>OsclSetRecvBufferSize
-: <a class="el" href="osclconfig__io_8h.html#a13">osclconfig_io.h</a><li>OsclShutdown
-: <a class="el" href="osclconfig__io_8h.html#a19">osclconfig_io.h</a><li>OsclSocket
-: <a class="el" href="osclconfig__io_8h.html#a20">osclconfig_io.h</a><li>OsclSocketCleanup
-: <a class="el" href="osclconfig__io_8h.html#a31">osclconfig_io.h</a><li>OsclSocketSelect
-: <a class="el" href="osclconfig__io_8h.html#a29">osclconfig_io.h</a><li>OsclSocketStartup
-: <a class="el" href="osclconfig__io_8h.html#a30">osclconfig_io.h</a><li>OsclSuccess
+: <a class="el" href="osclconfig__io_8h.html#a23">osclconfig_io.h</a><li>OsclSendTo
+: <a class="el" href="osclconfig__io_8h.html#a22">osclconfig_io.h</a><li>OsclSetNonBlocking
+: <a class="el" href="osclconfig__io_8h.html#a19">osclconfig_io.h</a><li>OsclSetRecvBufferSize
+: <a class="el" href="osclconfig__io_8h.html#a14">osclconfig_io.h</a><li>OsclShutdown
+: <a class="el" href="osclconfig__io_8h.html#a20">osclconfig_io.h</a><li>OsclSocket
+: <a class="el" href="osclconfig__io_8h.html#a21">osclconfig_io.h</a><li>OsclSocketCleanup
+: <a class="el" href="osclconfig__io_8h.html#a32">osclconfig_io.h</a><li>OsclSocketSelect
+: <a class="el" href="osclconfig__io_8h.html#a30">osclconfig_io.h</a><li>OsclSocketStartup
+: <a class="el" href="osclconfig__io_8h.html#a31">osclconfig_io.h</a><li>OsclSuccess
 : <a class="el" href="oscl__error__codes_8h.html#a34">oscl_error_codes.h</a><li>OsclTagTreeType
 : <a class="el" href="oscl__mem__audit_8h.html#a6">oscl_mem_audit.h</a><li>OsclThread_State
 : <a class="el" href="oscl__thread_8h.html#a10">oscl_thread.h</a><li>OsclThreadPriority
@@ -548,8 +551,8 @@
 : <a class="el" href="oscl__tickcount_8h.html#a47">oscl_tickcount.h</a><li>OsclTrapOperation
 : <a class="el" href="oscl__heapbase_8h.html#a3">oscl_heapbase.h</a><li>OsclUid32
 : <a class="el" href="oscl__uuid_8h.html#a1">oscl_uuid.h</a><li>OsclUnMakeSockAddr
-: <a class="el" href="osclconfig__io_8h.html#a12">osclconfig_io.h</a><li>OsclValidInetAddr
-: <a class="el" href="osclconfig__io_8h.html#a10">osclconfig_io.h</a></ul>
+: <a class="el" href="osclconfig__io_8h.html#a13">osclconfig_io.h</a><li>OsclValidInetAddr
+: <a class="el" href="osclconfig__io_8h.html#a11">osclconfig_io.h</a></ul>
 <h3><a name="index_p">- p -</a>
 </h3><ul>
 <li>PV8601TIME_BUFFER_SIZE
@@ -703,27 +706,29 @@
 : <a class="el" href="oscl__thread_8h.html#a11a6">oscl_thread.h</a><li>ThreadPriorityTimeCritical
 : <a class="el" href="oscl__thread_8h.html#a11a9">oscl_thread.h</a><li>TimeUnits
 : <a class="el" href="oscl__time_8h.html#a109">oscl_time.h</a><li>TOsclBasicLockObject
-: <a class="el" href="osclconfig__unix__nj_8h.html#a32">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a32">osclconfig_unix_common.h</a><li>TOsclConditionObject
-: <a class="el" href="osclconfig__proc__unix__nj_8h.html#a12">osclconfig_proc_unix_nj.h</a>, <a class="el" href="osclconfig__proc__unix__common_8h.html#a12">osclconfig_proc_unix_common.h</a><li>TOsclFileHandle
-: <a class="el" href="oscl__file__handle_8h.html#a2">oscl_file_handle.h</a><li>TOsclFileOp
-: <a class="el" href="oscl__file__stats_8h.html#a28">oscl_file_stats.h</a><li>TOsclHostent
-: <a class="el" href="osclconfig__io_8h.html#a45">osclconfig_io.h</a><li>TOsclMutexObject
-: <a class="el" href="osclconfig__proc__unix__nj_8h.html#a10">osclconfig_proc_unix_nj.h</a>, <a class="el" href="osclconfig__proc__unix__common_8h.html#a10">osclconfig_proc_unix_common.h</a><li>TOsclReady
+: <a class="el" href="osclconfig__unix__android_8h.html#a32">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a32">osclconfig_unix_common.h</a><li>TOsclConditionObject
+: <a class="el" href="osclconfig__proc__unix__android_8h.html#a12">osclconfig_proc_unix_android.h</a>, <a class="el" href="osclconfig__proc__unix__common_8h.html#a12">osclconfig_proc_unix_common.h</a><li>TOsclFileHandle
+: <a class="el" href="oscl__file__handle_8h.html#a2">oscl_file_handle.h</a><li>TOsclFileOffset
+: <a class="el" href="osclconfig__io_8h.html#a48">osclconfig_io.h</a><li>TOsclFileOffsetInt32
+: <a class="el" href="oscl__file__io_8h.html#a18">oscl_file_io.h</a><li>TOsclFileOp
+: <a class="el" href="oscl__file__stats_8h.html#a29">oscl_file_stats.h</a><li>TOsclHostent
+: <a class="el" href="osclconfig__io_8h.html#a47">osclconfig_io.h</a><li>TOsclMutexObject
+: <a class="el" href="osclconfig__proc__unix__android_8h.html#a10">osclconfig_proc_unix_android.h</a>, <a class="el" href="osclconfig__proc__unix__common_8h.html#a10">osclconfig_proc_unix_common.h</a><li>TOsclReady
 : <a class="el" href="oscl__scheduler__readyq_8h.html#a4">oscl_scheduler_readyq.h</a><li>TOsclSemaphoreObject
-: <a class="el" href="osclconfig__proc__unix__nj_8h.html#a11">osclconfig_proc_unix_nj.h</a>, <a class="el" href="osclconfig__proc__unix__common_8h.html#a11">osclconfig_proc_unix_common.h</a><li>TOsclSockAddr
-: <a class="el" href="osclconfig__io_8h.html#a43">osclconfig_io.h</a><li>TOsclSockAddrLen
-: <a class="el" href="osclconfig__io_8h.html#a44">osclconfig_io.h</a><li>TOsclSocket
-: <a class="el" href="osclconfig__io_8h.html#a42">osclconfig_io.h</a><li>TOsclSocketServStatEvent
+: <a class="el" href="osclconfig__proc__unix__android_8h.html#a11">osclconfig_proc_unix_android.h</a>, <a class="el" href="osclconfig__proc__unix__common_8h.html#a11">osclconfig_proc_unix_common.h</a><li>TOsclSockAddr
+: <a class="el" href="osclconfig__io_8h.html#a45">osclconfig_io.h</a><li>TOsclSockAddrLen
+: <a class="el" href="osclconfig__io_8h.html#a46">osclconfig_io.h</a><li>TOsclSocket
+: <a class="el" href="osclconfig__io_8h.html#a44">osclconfig_io.h</a><li>TOsclSocketServStatEvent
 : <a class="el" href="oscl__socket__stats_8h.html#a24">oscl_socket_stats.h</a><li>TOsclSocketStatEvent
 : <a class="el" href="oscl__socket__stats_8h.html#a23">oscl_socket_stats.h</a><li>TOsclThreadFuncArg
-: <a class="el" href="osclconfig__proc__unix__nj_8h.html#a7">osclconfig_proc_unix_nj.h</a>, <a class="el" href="osclconfig__proc__unix__common_8h.html#a7">osclconfig_proc_unix_common.h</a><li>TOsclThreadFuncPtr
+: <a class="el" href="osclconfig__proc__unix__android_8h.html#a7">osclconfig_proc_unix_android.h</a>, <a class="el" href="osclconfig__proc__unix__common_8h.html#a7">osclconfig_proc_unix_common.h</a><li>TOsclThreadFuncPtr
 : <a class="el" href="oscl__thread_8h.html#a0">oscl_thread.h</a><li>TOsclThreadFuncRet
-: <a class="el" href="osclconfig__proc__unix__nj_8h.html#a8">osclconfig_proc_unix_nj.h</a>, <a class="el" href="osclconfig__proc__unix__common_8h.html#a8">osclconfig_proc_unix_common.h</a><li>TOsclThreadId
-: <a class="el" href="osclconfig__proc__unix__nj_8h.html#a6">osclconfig_proc_unix_nj.h</a>, <a class="el" href="osclconfig__proc__unix__common_8h.html#a6">osclconfig_proc_unix_common.h</a><li>TOsclThreadObject
-: <a class="el" href="osclconfig__proc__unix__nj_8h.html#a9">osclconfig_proc_unix_nj.h</a>, <a class="el" href="osclconfig__proc__unix__common_8h.html#a9">osclconfig_proc_unix_common.h</a><li>TOsclTlsKey
-: <a class="el" href="oscl__tls_8h.html#a10">oscl_tls.h</a>, <a class="el" href="osclconfig__unix__nj_8h.html#a31">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a31">osclconfig_unix_common.h</a><li>TPVDNSEvent
-: <a class="el" href="oscl__dns_8h.html#a24">oscl_dns.h</a><li>TPVDNSFxn
-: <a class="el" href="oscl__dns_8h.html#a23">oscl_dns.h</a><li>TPVSocketEvent
+: <a class="el" href="osclconfig__proc__unix__android_8h.html#a8">osclconfig_proc_unix_android.h</a>, <a class="el" href="osclconfig__proc__unix__common_8h.html#a8">osclconfig_proc_unix_common.h</a><li>TOsclThreadId
+: <a class="el" href="osclconfig__proc__unix__android_8h.html#a6">osclconfig_proc_unix_android.h</a>, <a class="el" href="osclconfig__proc__unix__common_8h.html#a6">osclconfig_proc_unix_common.h</a><li>TOsclThreadObject
+: <a class="el" href="osclconfig__proc__unix__android_8h.html#a9">osclconfig_proc_unix_android.h</a>, <a class="el" href="osclconfig__proc__unix__common_8h.html#a9">osclconfig_proc_unix_common.h</a><li>TOsclTlsKey
+: <a class="el" href="oscl__tls_8h.html#a10">oscl_tls.h</a>, <a class="el" href="osclconfig__unix__android_8h.html#a31">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a31">osclconfig_unix_common.h</a><li>TPVDNSEvent
+: <a class="el" href="oscl__dns_8h.html#a25">oscl_dns.h</a><li>TPVDNSFxn
+: <a class="el" href="oscl__dns_8h.html#a24">oscl_dns.h</a><li>TPVSocketEvent
 : <a class="el" href="oscl__socket__types_8h.html#a20">oscl_socket_types.h</a><li>TPVSocketFxn
 : <a class="el" href="oscl__socket__types_8h.html#a19">oscl_socket_types.h</a><li>TPVSocketShutdown
 : <a class="el" href="oscl__socket__types_8h.html#a21">oscl_socket_types.h</a><li>TPVThreadContext
@@ -732,9 +737,9 @@
 </h3><ul>
 <li>uint
 : <a class="el" href="oscl__types_8h.html#a27">oscl_types.h</a><li>UINT64
-: <a class="el" href="osclconfig__unix__nj_8h.html#a16">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a16">osclconfig_unix_common.h</a><li>uint64
+: <a class="el" href="osclconfig__unix__android_8h.html#a16">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a16">osclconfig_unix_common.h</a><li>uint64
 : <a class="el" href="oscl__types_8h.html#a31">oscl_types.h</a><li>UINT64_HILO
-: <a class="el" href="osclconfig__unix__nj_8h.html#a18">osclconfig_unix_nj.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a18">osclconfig_unix_common.h</a><li>unix_ntp_offset
+: <a class="el" href="osclconfig__unix__android_8h.html#a18">osclconfig_unix_android.h</a>, <a class="el" href="osclconfig__unix__common_8h.html#a18">osclconfig_unix_common.h</a><li>unix_ntp_offset
 : <a class="el" href="oscl__time_8h.html#a9">oscl_time.h</a><li>USEC_PER_SEC
 : <a class="el" href="oscl__time_8h.html#a4">oscl_time.h</a></ul>
 <h3><a name="index_w">- w -</a>
@@ -742,7 +747,7 @@
 <li>WStrPtrLen
 : <a class="el" href="oscl__str__ptr__len_8h.html#a6">oscl_str_ptr_len.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/group__osclbase.html b/doc/oscl_html/group__osclbase.html
index 952afb9..c9110b8 100644
--- a/doc/oscl_html/group__osclbase.html
+++ b/doc/oscl_html/group__osclbase.html
@@ -3913,7 +3913,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/group__osclconfig.html b/doc/oscl_html/group__osclconfig.html
index 6f0cf0e..a2ed0df 100644
--- a/doc/oscl_html/group__osclconfig.html
+++ b/doc/oscl_html/group__osclconfig.html
@@ -727,7 +727,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/group__osclerror.html b/doc/oscl_html/group__osclerror.html
index 0847773..c1dbd9d 100644
--- a/doc/oscl_html/group__osclerror.html
+++ b/doc/oscl_html/group__osclerror.html
@@ -1545,7 +1545,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/group__osclinit.html b/doc/oscl_html/group__osclinit.html
index 61c85a5..e7a5908 100644
--- a/doc/oscl_html/group__osclinit.html
+++ b/doc/oscl_html/group__osclinit.html
@@ -18,7 +18,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclSelect.html">OsclSelect</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/group__osclio.html b/doc/oscl_html/group__osclio.html
index e34606b..053abf4 100644
--- a/doc/oscl_html/group__osclio.html
+++ b/doc/oscl_html/group__osclio.html
@@ -71,92 +71,93 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclTCPSocket.html">OsclTCPSocket</a></td></tr>
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclUDPSocket.html">OsclUDPSocket</a></td></tr>
 <tr><td colspan=2><br><h2>Defines</h2></td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a18">OSCL_FILE_STATS_LOGGER_NODE</a>&nbsp;&nbsp;&nbsp;"<a class="el" href="classOsclFileStats.html">OsclFileStats</a>"</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a19">OSCL_IO_FILENAME_MAXLEN</a>&nbsp;&nbsp;&nbsp;512</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a20">OSCL_IO_EXTENSION_MAXLEN</a>&nbsp;&nbsp;&nbsp;512</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a21">OSCL_FILE_WCHAR_PATH_DELIMITER</a>&nbsp;&nbsp;&nbsp;_STRLIT("/")</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a22">OSCL_FILE_CHAR_PATH_DELIMITER</a>&nbsp;&nbsp;&nbsp;_STRLIT_CHAR("/")</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a18">TOsclFileOffsetInt32</a>&nbsp;&nbsp;&nbsp;int32</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a19">OSCL_FILE_STATS_LOGGER_NODE</a>&nbsp;&nbsp;&nbsp;"<a class="el" href="classOsclFileStats.html">OsclFileStats</a>"</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a20">OSCL_IO_FILENAME_MAXLEN</a>&nbsp;&nbsp;&nbsp;512</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a21">OSCL_IO_EXTENSION_MAXLEN</a>&nbsp;&nbsp;&nbsp;512</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a22">OSCL_FILE_WCHAR_PATH_DELIMITER</a>&nbsp;&nbsp;&nbsp;_STRLIT("/")</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a23">OSCL_FILE_CHAR_PATH_DELIMITER</a>&nbsp;&nbsp;&nbsp;_STRLIT_CHAR("/")</td></tr>
 <tr><td colspan=2><br><h2>Typedefs</h2></td></tr>
 <tr><td nowrap align=right valign=top>typedef <a class="el" href="structoscl__fsstat.html">oscl_fsstat</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a0">OSCL_FSSTAT</a></td></tr>
 <tr><td nowrap align=right valign=top>typedef <a class="el" href="structoscl__stat__buf.html">oscl_stat_buf</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a1">OSCL_STAT_BUF</a></td></tr>
 <tr><td nowrap align=right valign=top>typedef FILE *&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a2">TOsclFileHandle</a></td></tr>
 <tr><td colspan=2><br><h2>Enumerations</h2></td></tr>
-<tr><td nowrap align=right valign=top>enum &nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a23">TPVDNSFxn</a> { <a class="el" href="group__osclio.html#a23a0">EPVDNSGetHostByName</a>
+<tr><td nowrap align=right valign=top>enum &nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a24">TPVDNSFxn</a> { <a class="el" href="group__osclio.html#a24a0">EPVDNSGetHostByName</a>
  }</td></tr>
-<tr><td nowrap align=right valign=top>enum &nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a24">TPVDNSEvent</a> { <br>
-&nbsp;&nbsp;<a class="el" href="group__osclio.html#a24a1">EPVDNSSuccess</a>, 
-<a class="el" href="group__osclio.html#a24a2">EPVDNSPending</a>, 
-<a class="el" href="group__osclio.html#a24a3">EPVDNSTimeout</a>, 
-<a class="el" href="group__osclio.html#a24a4">EPVDNSFailure</a>, 
+<tr><td nowrap align=right valign=top>enum &nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a25">TPVDNSEvent</a> { <br>
+&nbsp;&nbsp;<a class="el" href="group__osclio.html#a25a1">EPVDNSSuccess</a>, 
+<a class="el" href="group__osclio.html#a25a2">EPVDNSPending</a>, 
+<a class="el" href="group__osclio.html#a25a3">EPVDNSTimeout</a>, 
+<a class="el" href="group__osclio.html#a25a4">EPVDNSFailure</a>, 
 <br>
-&nbsp;&nbsp;<a class="el" href="group__osclio.html#a24a5">EPVDNSCancel</a>
+&nbsp;&nbsp;<a class="el" href="group__osclio.html#a25a5">EPVDNSCancel</a>
 <br>
  }</td></tr>
-<tr><td nowrap align=right valign=top>enum &nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a25">OSCL_FILEMGMT_PERMS</a> { <a class="el" href="group__osclio.html#a25a2">OSCL_FILEMGMT_PERMS_READ</a> =  0x1, 
-<a class="el" href="group__osclio.html#a25a3">OSCL_FILEMGMT_PERMS_WRITE</a> =  0x2, 
-<a class="el" href="group__osclio.html#a25a4">OSCL_FILEMGMT_PERMS_EXECUTE</a> =  0x4
+<tr><td nowrap align=right valign=top>enum &nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a26">OSCL_FILEMGMT_PERMS</a> { <a class="el" href="group__osclio.html#a26a2">OSCL_FILEMGMT_PERMS_READ</a> =  0x1, 
+<a class="el" href="group__osclio.html#a26a3">OSCL_FILEMGMT_PERMS_WRITE</a> =  0x2, 
+<a class="el" href="group__osclio.html#a26a4">OSCL_FILEMGMT_PERMS_EXECUTE</a> =  0x4
  }</td></tr>
-<tr><td nowrap align=right valign=top>enum &nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a26">OSCL_FILEMGMT_MODES</a> { <a class="el" href="group__osclio.html#a26a5">OSCL_FILEMGMT_MODE_DIR</a> =  0x1
+<tr><td nowrap align=right valign=top>enum &nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_MODES</a> { <a class="el" href="group__osclio.html#a27a5">OSCL_FILEMGMT_MODE_DIR</a> =  0x1
  }</td></tr>
-<tr><td nowrap align=right valign=top>enum &nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a> { <br>
-&nbsp;&nbsp;<a class="el" href="group__osclio.html#a27a6">OSCL_FILEMGMT_E_OK</a> =  0, 
-<a class="el" href="group__osclio.html#a27a7">OSCL_FILEMGMT_E_PATH_TOO_LONG</a>, 
-<a class="el" href="group__osclio.html#a27a8">OSCL_FILEMGMT_E_PATH_NOT_FOUND</a>, 
-<a class="el" href="group__osclio.html#a27a9">OSCL_FILEMGMT_E_ALREADY_EXISTS</a>, 
+<tr><td nowrap align=right valign=top>enum &nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a> { <br>
+&nbsp;&nbsp;<a class="el" href="group__osclio.html#a28a6">OSCL_FILEMGMT_E_OK</a> =  0, 
+<a class="el" href="group__osclio.html#a28a7">OSCL_FILEMGMT_E_PATH_TOO_LONG</a>, 
+<a class="el" href="group__osclio.html#a28a8">OSCL_FILEMGMT_E_PATH_NOT_FOUND</a>, 
+<a class="el" href="group__osclio.html#a28a9">OSCL_FILEMGMT_E_ALREADY_EXISTS</a>, 
 <br>
-&nbsp;&nbsp;<a class="el" href="group__osclio.html#a27a10">OSCL_FILEMGMT_E_NOT_EMPTY</a>, 
-<a class="el" href="group__osclio.html#a27a11">OSCL_FILEMGMT_E_PERMISSION_DENIED</a>, 
-<a class="el" href="group__osclio.html#a27a12">OSCL_FILEMGMT_E_NO_MATCH</a>, 
-<a class="el" href="group__osclio.html#a27a13">OSCL_FILEMGMT_E_UNKNOWN</a>, 
+&nbsp;&nbsp;<a class="el" href="group__osclio.html#a28a10">OSCL_FILEMGMT_E_NOT_EMPTY</a>, 
+<a class="el" href="group__osclio.html#a28a11">OSCL_FILEMGMT_E_PERMISSION_DENIED</a>, 
+<a class="el" href="group__osclio.html#a28a12">OSCL_FILEMGMT_E_NO_MATCH</a>, 
+<a class="el" href="group__osclio.html#a28a13">OSCL_FILEMGMT_E_UNKNOWN</a>, 
 <br>
-&nbsp;&nbsp;<a class="el" href="group__osclio.html#a27a14">OSCL_FILEMGMT_E_SYS_SPECIFIC</a>, 
-<a class="el" href="group__osclio.html#a27a15">OSCL_FILEMGMT_E_NOT_IMPLEMENTED</a>
+&nbsp;&nbsp;<a class="el" href="group__osclio.html#a28a14">OSCL_FILEMGMT_E_SYS_SPECIFIC</a>, 
+<a class="el" href="group__osclio.html#a28a15">OSCL_FILEMGMT_E_NOT_IMPLEMENTED</a>
 <br>
  }</td></tr>
-<tr><td nowrap align=right valign=top>enum &nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a28">TOsclFileOp</a> { <br>
-&nbsp;&nbsp;<a class="el" href="group__osclio.html#a28a2">EOsclFileOp_Open</a>, 
-<a class="el" href="group__osclio.html#a28a3">EOsclFileOp_Close</a>, 
-<a class="el" href="group__osclio.html#a28a4">EOsclFileOp_Read</a>, 
-<a class="el" href="group__osclio.html#a28a5">EOsclFileOp_Write</a>, 
+<tr><td nowrap align=right valign=top>enum &nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a29">TOsclFileOp</a> { <br>
+&nbsp;&nbsp;<a class="el" href="group__osclio.html#a29a2">EOsclFileOp_Open</a>, 
+<a class="el" href="group__osclio.html#a29a3">EOsclFileOp_Close</a>, 
+<a class="el" href="group__osclio.html#a29a4">EOsclFileOp_Read</a>, 
+<a class="el" href="group__osclio.html#a29a5">EOsclFileOp_Write</a>, 
 <br>
-&nbsp;&nbsp;<a class="el" href="group__osclio.html#a28a6">EOsclFileOp_Seek</a>, 
-<a class="el" href="group__osclio.html#a28a7">EOsclFileOp_Tell</a>, 
-<a class="el" href="group__osclio.html#a28a8">EOsclFileOp_Size</a>, 
-<a class="el" href="group__osclio.html#a28a9">EOsclFileOp_Flush</a>, 
+&nbsp;&nbsp;<a class="el" href="group__osclio.html#a29a6">EOsclFileOp_Seek</a>, 
+<a class="el" href="group__osclio.html#a29a7">EOsclFileOp_Tell</a>, 
+<a class="el" href="group__osclio.html#a29a8">EOsclFileOp_Size</a>, 
+<a class="el" href="group__osclio.html#a29a9">EOsclFileOp_Flush</a>, 
 <br>
-&nbsp;&nbsp;<a class="el" href="group__osclio.html#a28a10">EOsclFileOp_EndOfFile</a>, 
-<a class="el" href="group__osclio.html#a28a11">EOsclFileOp_NativeOpen</a>, 
-<a class="el" href="group__osclio.html#a28a12">EOsclFileOp_NativeClose</a>, 
-<a class="el" href="group__osclio.html#a28a13">EOsclFileOp_NativeRead</a>, 
+&nbsp;&nbsp;<a class="el" href="group__osclio.html#a29a10">EOsclFileOp_EndOfFile</a>, 
+<a class="el" href="group__osclio.html#a29a11">EOsclFileOp_NativeOpen</a>, 
+<a class="el" href="group__osclio.html#a29a12">EOsclFileOp_NativeClose</a>, 
+<a class="el" href="group__osclio.html#a29a13">EOsclFileOp_NativeRead</a>, 
 <br>
-&nbsp;&nbsp;<a class="el" href="group__osclio.html#a28a14">EOsclFileOp_NativeWrite</a>, 
-<a class="el" href="group__osclio.html#a28a15">EOsclFileOp_NativeSeek</a>, 
-<a class="el" href="group__osclio.html#a28a16">EOsclFileOp_NativeTell</a>, 
-<a class="el" href="group__osclio.html#a28a17">EOsclFileOp_NativeSize</a>, 
+&nbsp;&nbsp;<a class="el" href="group__osclio.html#a29a14">EOsclFileOp_NativeWrite</a>, 
+<a class="el" href="group__osclio.html#a29a15">EOsclFileOp_NativeSeek</a>, 
+<a class="el" href="group__osclio.html#a29a16">EOsclFileOp_NativeTell</a>, 
+<a class="el" href="group__osclio.html#a29a17">EOsclFileOp_NativeSize</a>, 
 <br>
-&nbsp;&nbsp;<a class="el" href="group__osclio.html#a28a18">EOsclFileOp_NativeFlush</a>, 
-<a class="el" href="group__osclio.html#a28a19">EOsclFileOp_NativeEndOfFile</a>, 
-<a class="el" href="group__osclio.html#a28a20">EOsclFileOp_Last</a>
+&nbsp;&nbsp;<a class="el" href="group__osclio.html#a29a18">EOsclFileOp_NativeFlush</a>, 
+<a class="el" href="group__osclio.html#a29a19">EOsclFileOp_NativeEndOfFile</a>, 
+<a class="el" href="group__osclio.html#a29a20">EOsclFileOp_Last</a>
 <br>
  }</td></tr>
 <tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a4">oscl_getcwd</a> (<a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *path, uint32 size)</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a5">oscl_getcwd</a> (char *path, uint32 size)</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a6">oscl_stat</a> (const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *path, <a class="el" href="group__osclio.html#a1">OSCL_STAT_BUF</a> *statbuf)</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a7">oscl_stat</a> (const char *path, <a class="el" href="group__osclio.html#a1">OSCL_STAT_BUF</a> *statbuf)</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a8">oscl_mkdir</a> (const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *path)</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a9">oscl_mkdir</a> (const char *path)</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a10">oscl_rmdir</a> (const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *path)</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a11">oscl_rmdir</a> (const char *path)</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a12">oscl_chdir</a> (const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *path)</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a13">oscl_chdir</a> (const char *path)</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a14">oscl_rename</a> (const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *oldpath, const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *newpath)</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a15">oscl_rename</a> (const char *oldpath, const char *newpath)</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a16">oscl_statfs</a> (<a class="el" href="group__osclio.html#a0">OSCL_FSSTAT</a> *stats, const char *path)</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a17">oscl_statfs</a> (<a class="el" href="group__osclio.html#a0">OSCL_FSSTAT</a> *stats, const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *path)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a4">oscl_getcwd</a> (<a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *path, uint32 size)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a5">oscl_getcwd</a> (char *path, uint32 size)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a6">oscl_stat</a> (const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *path, <a class="el" href="group__osclio.html#a1">OSCL_STAT_BUF</a> *statbuf)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a7">oscl_stat</a> (const char *path, <a class="el" href="group__osclio.html#a1">OSCL_STAT_BUF</a> *statbuf)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a8">oscl_mkdir</a> (const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *path)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a9">oscl_mkdir</a> (const char *path)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a10">oscl_rmdir</a> (const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *path)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a11">oscl_rmdir</a> (const char *path)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a12">oscl_chdir</a> (const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *path)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a13">oscl_chdir</a> (const char *path)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a14">oscl_rename</a> (const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *oldpath, const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *newpath)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a15">oscl_rename</a> (const char *oldpath, const char *newpath)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a16">oscl_statfs</a> (<a class="el" href="group__osclio.html#a0">OSCL_FSSTAT</a> *stats, const char *path)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a17">oscl_statfs</a> (<a class="el" href="group__osclio.html#a0">OSCL_FSSTAT</a> *stats, const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *path)</td></tr>
 </table>
 <hr><h2>Define Documentation</h2>
-<a name="a22" doxytag="oscl_file_types.h::OSCL_FILE_CHAR_PATH_DELIMITER"></a><p>
+<a name="a23" doxytag="oscl_file_types.h::OSCL_FILE_CHAR_PATH_DELIMITER"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -178,7 +179,7 @@
     </td>
   </tr>
 </table>
-<a name="a18" doxytag="oscl_file_stats.h::OSCL_FILE_STATS_LOGGER_NODE"></a><p>
+<a name="a19" doxytag="oscl_file_stats.h::OSCL_FILE_STATS_LOGGER_NODE"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -200,7 +201,7 @@
     </td>
   </tr>
 </table>
-<a name="a21" doxytag="oscl_file_types.h::OSCL_FILE_WCHAR_PATH_DELIMITER"></a><p>
+<a name="a22" doxytag="oscl_file_types.h::OSCL_FILE_WCHAR_PATH_DELIMITER"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -222,7 +223,7 @@
     </td>
   </tr>
 </table>
-<a name="a20" doxytag="oscl_file_types.h::OSCL_IO_EXTENSION_MAXLEN"></a><p>
+<a name="a21" doxytag="oscl_file_types.h::OSCL_IO_EXTENSION_MAXLEN"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -244,7 +245,7 @@
     </td>
   </tr>
 </table>
-<a name="a19" doxytag="oscl_file_types.h::OSCL_IO_FILENAME_MAXLEN"></a><p>
+<a name="a20" doxytag="oscl_file_types.h::OSCL_IO_FILENAME_MAXLEN"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -266,6 +267,28 @@
     </td>
   </tr>
 </table>
+<a name="a18" doxytag="oscl_file_io.h::TOsclFileOffsetInt32"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"> #define TOsclFileOffsetInt32&nbsp;&nbsp;&nbsp;int32
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
 <hr><h2>Typedef Documentation</h2>
 <a name="a0" doxytag="oscl_file_dir_utils.h::OSCL_FSSTAT"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
@@ -334,7 +357,7 @@
   </tr>
 </table>
 <hr><h2>Enumeration Type Documentation</h2>
-<a name="a27" doxytag="oscl_file_dir_utils.h::OSCL_FILEMGMT_ERR_TYPE"></a><p>
+<a name="a28" doxytag="oscl_file_dir_utils.h::OSCL_FILEMGMT_ERR_TYPE"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -355,32 +378,32 @@
 <p>
 <dl compact><dt><b>Enumeration values: </b></dt><dd>
 <table border=0 cellspacing=2 cellpadding=0>
-<tr><td valign=top><em><a name="a27a6" doxytag="OSCL_FILEMGMT_E_OK"></a><em>OSCL_FILEMGMT_E_OK</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a28a6" doxytag="OSCL_FILEMGMT_E_OK"></a><em>OSCL_FILEMGMT_E_OK</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a27a7" doxytag="OSCL_FILEMGMT_E_PATH_TOO_LONG"></a><em>OSCL_FILEMGMT_E_PATH_TOO_LONG</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a28a7" doxytag="OSCL_FILEMGMT_E_PATH_TOO_LONG"></a><em>OSCL_FILEMGMT_E_PATH_TOO_LONG</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a27a8" doxytag="OSCL_FILEMGMT_E_PATH_NOT_FOUND"></a><em>OSCL_FILEMGMT_E_PATH_NOT_FOUND</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a28a8" doxytag="OSCL_FILEMGMT_E_PATH_NOT_FOUND"></a><em>OSCL_FILEMGMT_E_PATH_NOT_FOUND</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a27a9" doxytag="OSCL_FILEMGMT_E_ALREADY_EXISTS"></a><em>OSCL_FILEMGMT_E_ALREADY_EXISTS</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a28a9" doxytag="OSCL_FILEMGMT_E_ALREADY_EXISTS"></a><em>OSCL_FILEMGMT_E_ALREADY_EXISTS</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a27a10" doxytag="OSCL_FILEMGMT_E_NOT_EMPTY"></a><em>OSCL_FILEMGMT_E_NOT_EMPTY</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a28a10" doxytag="OSCL_FILEMGMT_E_NOT_EMPTY"></a><em>OSCL_FILEMGMT_E_NOT_EMPTY</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a27a11" doxytag="OSCL_FILEMGMT_E_PERMISSION_DENIED"></a><em>OSCL_FILEMGMT_E_PERMISSION_DENIED</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a28a11" doxytag="OSCL_FILEMGMT_E_PERMISSION_DENIED"></a><em>OSCL_FILEMGMT_E_PERMISSION_DENIED</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a27a12" doxytag="OSCL_FILEMGMT_E_NO_MATCH"></a><em>OSCL_FILEMGMT_E_NO_MATCH</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a28a12" doxytag="OSCL_FILEMGMT_E_NO_MATCH"></a><em>OSCL_FILEMGMT_E_NO_MATCH</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a27a13" doxytag="OSCL_FILEMGMT_E_UNKNOWN"></a><em>OSCL_FILEMGMT_E_UNKNOWN</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a28a13" doxytag="OSCL_FILEMGMT_E_UNKNOWN"></a><em>OSCL_FILEMGMT_E_UNKNOWN</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a27a14" doxytag="OSCL_FILEMGMT_E_SYS_SPECIFIC"></a><em>OSCL_FILEMGMT_E_SYS_SPECIFIC</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a28a14" doxytag="OSCL_FILEMGMT_E_SYS_SPECIFIC"></a><em>OSCL_FILEMGMT_E_SYS_SPECIFIC</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a27a15" doxytag="OSCL_FILEMGMT_E_NOT_IMPLEMENTED"></a><em>OSCL_FILEMGMT_E_NOT_IMPLEMENTED</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a28a15" doxytag="OSCL_FILEMGMT_E_NOT_IMPLEMENTED"></a><em>OSCL_FILEMGMT_E_NOT_IMPLEMENTED</em></em>&nbsp;</td><td>
 </td></tr>
 </table>
 </dl>
     </td>
   </tr>
 </table>
-<a name="a26" doxytag="oscl_file_dir_utils.h::OSCL_FILEMGMT_MODES"></a><p>
+<a name="a27" doxytag="oscl_file_dir_utils.h::OSCL_FILEMGMT_MODES"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -401,14 +424,14 @@
 <p>
 <dl compact><dt><b>Enumeration values: </b></dt><dd>
 <table border=0 cellspacing=2 cellpadding=0>
-<tr><td valign=top><em><a name="a26a5" doxytag="OSCL_FILEMGMT_MODE_DIR"></a><em>OSCL_FILEMGMT_MODE_DIR</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a27a5" doxytag="OSCL_FILEMGMT_MODE_DIR"></a><em>OSCL_FILEMGMT_MODE_DIR</em></em>&nbsp;</td><td>
 </td></tr>
 </table>
 </dl>
     </td>
   </tr>
 </table>
-<a name="a25" doxytag="oscl_file_dir_utils.h::OSCL_FILEMGMT_PERMS"></a><p>
+<a name="a26" doxytag="oscl_file_dir_utils.h::OSCL_FILEMGMT_PERMS"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -429,18 +452,18 @@
 <p>
 <dl compact><dt><b>Enumeration values: </b></dt><dd>
 <table border=0 cellspacing=2 cellpadding=0>
-<tr><td valign=top><em><a name="a25a2" doxytag="OSCL_FILEMGMT_PERMS_READ"></a><em>OSCL_FILEMGMT_PERMS_READ</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a26a2" doxytag="OSCL_FILEMGMT_PERMS_READ"></a><em>OSCL_FILEMGMT_PERMS_READ</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a25a3" doxytag="OSCL_FILEMGMT_PERMS_WRITE"></a><em>OSCL_FILEMGMT_PERMS_WRITE</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a26a3" doxytag="OSCL_FILEMGMT_PERMS_WRITE"></a><em>OSCL_FILEMGMT_PERMS_WRITE</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a25a4" doxytag="OSCL_FILEMGMT_PERMS_EXECUTE"></a><em>OSCL_FILEMGMT_PERMS_EXECUTE</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a26a4" doxytag="OSCL_FILEMGMT_PERMS_EXECUTE"></a><em>OSCL_FILEMGMT_PERMS_EXECUTE</em></em>&nbsp;</td><td>
 </td></tr>
 </table>
 </dl>
     </td>
   </tr>
 </table>
-<a name="a28" doxytag="oscl_file_stats.h::TOsclFileOp"></a><p>
+<a name="a29" doxytag="oscl_file_stats.h::TOsclFileOp"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -461,50 +484,50 @@
 <p>
 <dl compact><dt><b>Enumeration values: </b></dt><dd>
 <table border=0 cellspacing=2 cellpadding=0>
-<tr><td valign=top><em><a name="a28a2" doxytag="EOsclFileOp_Open"></a><em>EOsclFileOp_Open</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a29a2" doxytag="EOsclFileOp_Open"></a><em>EOsclFileOp_Open</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a28a3" doxytag="EOsclFileOp_Close"></a><em>EOsclFileOp_Close</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a29a3" doxytag="EOsclFileOp_Close"></a><em>EOsclFileOp_Close</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a28a4" doxytag="EOsclFileOp_Read"></a><em>EOsclFileOp_Read</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a29a4" doxytag="EOsclFileOp_Read"></a><em>EOsclFileOp_Read</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a28a5" doxytag="EOsclFileOp_Write"></a><em>EOsclFileOp_Write</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a29a5" doxytag="EOsclFileOp_Write"></a><em>EOsclFileOp_Write</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a28a6" doxytag="EOsclFileOp_Seek"></a><em>EOsclFileOp_Seek</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a29a6" doxytag="EOsclFileOp_Seek"></a><em>EOsclFileOp_Seek</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a28a7" doxytag="EOsclFileOp_Tell"></a><em>EOsclFileOp_Tell</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a29a7" doxytag="EOsclFileOp_Tell"></a><em>EOsclFileOp_Tell</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a28a8" doxytag="EOsclFileOp_Size"></a><em>EOsclFileOp_Size</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a29a8" doxytag="EOsclFileOp_Size"></a><em>EOsclFileOp_Size</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a28a9" doxytag="EOsclFileOp_Flush"></a><em>EOsclFileOp_Flush</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a29a9" doxytag="EOsclFileOp_Flush"></a><em>EOsclFileOp_Flush</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a28a10" doxytag="EOsclFileOp_EndOfFile"></a><em>EOsclFileOp_EndOfFile</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a29a10" doxytag="EOsclFileOp_EndOfFile"></a><em>EOsclFileOp_EndOfFile</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a28a11" doxytag="EOsclFileOp_NativeOpen"></a><em>EOsclFileOp_NativeOpen</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a29a11" doxytag="EOsclFileOp_NativeOpen"></a><em>EOsclFileOp_NativeOpen</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a28a12" doxytag="EOsclFileOp_NativeClose"></a><em>EOsclFileOp_NativeClose</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a29a12" doxytag="EOsclFileOp_NativeClose"></a><em>EOsclFileOp_NativeClose</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a28a13" doxytag="EOsclFileOp_NativeRead"></a><em>EOsclFileOp_NativeRead</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a29a13" doxytag="EOsclFileOp_NativeRead"></a><em>EOsclFileOp_NativeRead</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a28a14" doxytag="EOsclFileOp_NativeWrite"></a><em>EOsclFileOp_NativeWrite</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a29a14" doxytag="EOsclFileOp_NativeWrite"></a><em>EOsclFileOp_NativeWrite</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a28a15" doxytag="EOsclFileOp_NativeSeek"></a><em>EOsclFileOp_NativeSeek</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a29a15" doxytag="EOsclFileOp_NativeSeek"></a><em>EOsclFileOp_NativeSeek</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a28a16" doxytag="EOsclFileOp_NativeTell"></a><em>EOsclFileOp_NativeTell</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a29a16" doxytag="EOsclFileOp_NativeTell"></a><em>EOsclFileOp_NativeTell</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a28a17" doxytag="EOsclFileOp_NativeSize"></a><em>EOsclFileOp_NativeSize</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a29a17" doxytag="EOsclFileOp_NativeSize"></a><em>EOsclFileOp_NativeSize</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a28a18" doxytag="EOsclFileOp_NativeFlush"></a><em>EOsclFileOp_NativeFlush</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a29a18" doxytag="EOsclFileOp_NativeFlush"></a><em>EOsclFileOp_NativeFlush</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a28a19" doxytag="EOsclFileOp_NativeEndOfFile"></a><em>EOsclFileOp_NativeEndOfFile</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a29a19" doxytag="EOsclFileOp_NativeEndOfFile"></a><em>EOsclFileOp_NativeEndOfFile</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a28a20" doxytag="EOsclFileOp_Last"></a><em>EOsclFileOp_Last</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a29a20" doxytag="EOsclFileOp_Last"></a><em>EOsclFileOp_Last</em></em>&nbsp;</td><td>
 </td></tr>
 </table>
 </dl>
     </td>
   </tr>
 </table>
-<a name="a24" doxytag="oscl_dns.h::TPVDNSEvent"></a><p>
+<a name="a25" doxytag="oscl_dns.h::TPVDNSEvent"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -525,22 +548,22 @@
 <p>
 <dl compact><dt><b>Enumeration values: </b></dt><dd>
 <table border=0 cellspacing=2 cellpadding=0>
-<tr><td valign=top><em><a name="a24a1" doxytag="EPVDNSSuccess"></a><em>EPVDNSSuccess</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a25a1" doxytag="EPVDNSSuccess"></a><em>EPVDNSSuccess</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a24a2" doxytag="EPVDNSPending"></a><em>EPVDNSPending</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a25a2" doxytag="EPVDNSPending"></a><em>EPVDNSPending</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a24a3" doxytag="EPVDNSTimeout"></a><em>EPVDNSTimeout</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a25a3" doxytag="EPVDNSTimeout"></a><em>EPVDNSTimeout</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a24a4" doxytag="EPVDNSFailure"></a><em>EPVDNSFailure</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a25a4" doxytag="EPVDNSFailure"></a><em>EPVDNSFailure</em></em>&nbsp;</td><td>
 </td></tr>
-<tr><td valign=top><em><a name="a24a5" doxytag="EPVDNSCancel"></a><em>EPVDNSCancel</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a25a5" doxytag="EPVDNSCancel"></a><em>EPVDNSCancel</em></em>&nbsp;</td><td>
 </td></tr>
 </table>
 </dl>
     </td>
   </tr>
 </table>
-<a name="a23" doxytag="oscl_dns.h::TPVDNSFxn"></a><p>
+<a name="a24" doxytag="oscl_dns.h::TPVDNSFxn"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -561,7 +584,7 @@
 <p>
 <dl compact><dt><b>Enumeration values: </b></dt><dd>
 <table border=0 cellspacing=2 cellpadding=0>
-<tr><td valign=top><em><a name="a23a0" doxytag="EPVDNSGetHostByName"></a><em>EPVDNSGetHostByName</em></em>&nbsp;</td><td>
+<tr><td valign=top><em><a name="a24a0" doxytag="EPVDNSGetHostByName"></a><em>EPVDNSGetHostByName</em></em>&nbsp;</td><td>
 </td></tr>
 </table>
 </dl>
@@ -575,7 +598,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a> oscl_chdir </td>
+          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a> oscl_chdir </td>
           <td class="md" valign="top">(&nbsp;</td>
           <td class="md" nowrap valign="top">const char *&nbsp;</td>
           <td class="mdname1" valign="top" nowrap>&nbsp; <em>path</em>          </td>
@@ -610,7 +633,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a> oscl_chdir </td>
+          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a> oscl_chdir </td>
           <td class="md" valign="top">(&nbsp;</td>
           <td class="md" nowrap valign="top">const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *&nbsp;</td>
           <td class="mdname1" valign="top" nowrap>&nbsp; <em>path</em>          </td>
@@ -645,7 +668,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a> oscl_getcwd </td>
+          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a> oscl_getcwd </td>
           <td class="md" valign="top">(&nbsp;</td>
           <td class="md" nowrap valign="top">char *&nbsp;</td>
           <td class="mdname" nowrap>&nbsp; <em>path</em>, </td>
@@ -691,7 +714,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a> oscl_getcwd </td>
+          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a> oscl_getcwd </td>
           <td class="md" valign="top">(&nbsp;</td>
           <td class="md" nowrap valign="top"><a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *&nbsp;</td>
           <td class="mdname" nowrap>&nbsp; <em>path</em>, </td>
@@ -737,7 +760,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a> oscl_mkdir </td>
+          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a> oscl_mkdir </td>
           <td class="md" valign="top">(&nbsp;</td>
           <td class="md" nowrap valign="top">const char *&nbsp;</td>
           <td class="mdname1" valign="top" nowrap>&nbsp; <em>path</em>          </td>
@@ -772,7 +795,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a> oscl_mkdir </td>
+          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a> oscl_mkdir </td>
           <td class="md" valign="top">(&nbsp;</td>
           <td class="md" nowrap valign="top">const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *&nbsp;</td>
           <td class="mdname1" valign="top" nowrap>&nbsp; <em>path</em>          </td>
@@ -807,7 +830,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a> oscl_rename </td>
+          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a> oscl_rename </td>
           <td class="md" valign="top">(&nbsp;</td>
           <td class="md" nowrap valign="top">const char *&nbsp;</td>
           <td class="mdname" nowrap>&nbsp; <em>oldpath</em>, </td>
@@ -851,7 +874,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a> oscl_rename </td>
+          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a> oscl_rename </td>
           <td class="md" valign="top">(&nbsp;</td>
           <td class="md" nowrap valign="top">const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *&nbsp;</td>
           <td class="mdname" nowrap>&nbsp; <em>oldpath</em>, </td>
@@ -897,7 +920,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a> oscl_rmdir </td>
+          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a> oscl_rmdir </td>
           <td class="md" valign="top">(&nbsp;</td>
           <td class="md" nowrap valign="top">const char *&nbsp;</td>
           <td class="mdname1" valign="top" nowrap>&nbsp; <em>path</em>          </td>
@@ -932,7 +955,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a> oscl_rmdir </td>
+          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a> oscl_rmdir </td>
           <td class="md" valign="top">(&nbsp;</td>
           <td class="md" nowrap valign="top">const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *&nbsp;</td>
           <td class="mdname1" valign="top" nowrap>&nbsp; <em>path</em>          </td>
@@ -967,7 +990,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a> oscl_stat </td>
+          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a> oscl_stat </td>
           <td class="md" valign="top">(&nbsp;</td>
           <td class="md" nowrap valign="top">const char *&nbsp;</td>
           <td class="mdname" nowrap>&nbsp; <em>path</em>, </td>
@@ -1011,7 +1034,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a> oscl_stat </td>
+          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a> oscl_stat </td>
           <td class="md" valign="top">(&nbsp;</td>
           <td class="md" nowrap valign="top">const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *&nbsp;</td>
           <td class="mdname" nowrap>&nbsp; <em>path</em>, </td>
@@ -1055,7 +1078,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a> oscl_statfs </td>
+          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a> oscl_statfs </td>
           <td class="md" valign="top">(&nbsp;</td>
           <td class="md" nowrap valign="top"><a class="el" href="group__osclio.html#a0">OSCL_FSSTAT</a> *&nbsp;</td>
           <td class="mdname" nowrap>&nbsp; <em>stats</em>, </td>
@@ -1101,7 +1124,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a> oscl_statfs </td>
+          <td class="md" nowrap valign="top"> OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a> oscl_statfs </td>
           <td class="md" valign="top">(&nbsp;</td>
           <td class="md" nowrap valign="top"><a class="el" href="group__osclio.html#a0">OSCL_FSSTAT</a> *&nbsp;</td>
           <td class="mdname" nowrap>&nbsp; <em>stats</em>, </td>
@@ -1142,7 +1165,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/group__osclmemory.html b/doc/oscl_html/group__osclmemory.html
index ca8f6b6..a9eaa0c 100644
--- a/doc/oscl_html/group__osclmemory.html
+++ b/doc/oscl_html/group__osclmemory.html
@@ -3114,7 +3114,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/group__osclproc.html b/doc/oscl_html/group__osclproc.html
index 2dfc8db..ab19230 100644
--- a/doc/oscl_html/group__osclproc.html
+++ b/doc/oscl_html/group__osclproc.html
@@ -647,7 +647,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/group__osclutil.html b/doc/oscl_html/group__osclutil.html
index c93f700..5e2fab1 100644
--- a/doc/oscl_html/group__osclutil.html
+++ b/doc/oscl_html/group__osclutil.html
@@ -4247,7 +4247,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/hierarchy.html b/doc/oscl_html/hierarchy.html
index 8bfe1d7..e9aa31c 100644
--- a/doc/oscl_html/hierarchy.html
+++ b/doc/oscl_html/hierarchy.html
@@ -394,7 +394,7 @@
 <li><a class="el" href="structWStrPtrLen.html">WStrPtrLen</a>
 </ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/index.html b/doc/oscl_html/index.html
index 24d6dbd..dafd7a3 100644
--- a/doc/oscl_html/index.html
+++ b/doc/oscl_html/index.html
@@ -9,7 +9,7 @@
 <hr><h1>oscl Documentation</h1>
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/modules.html b/doc/oscl_html/modules.html
index b598f92..b6000b7 100644
--- a/doc/oscl_html/modules.html
+++ b/doc/oscl_html/modules.html
@@ -17,7 +17,7 @@
 <li><a class="el" href="group__osclinit.html">OSCL Init</a>
 </ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__aostatus_8h-source.html b/doc/oscl_html/oscl__aostatus_8h-source.html
index 2a44f55..24d8478 100644
--- a/doc/oscl_html/oscl__aostatus_8h-source.html
+++ b/doc/oscl_html/oscl__aostatus_8h-source.html
@@ -54,7 +54,7 @@
 00054 <span class="preprocessor">#endif</span>
 00055 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__aostatus_8h.html b/doc/oscl_html/oscl__aostatus_8h.html
index 7184eb1..2828edc 100644
--- a/doc/oscl_html/oscl__aostatus_8h.html
+++ b/doc/oscl_html/oscl__aostatus_8h.html
@@ -30,7 +30,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__assert_8h-source.html b/doc/oscl_html/oscl__assert_8h-source.html
index db163c3..fa9382f 100644
--- a/doc/oscl_html/oscl__assert_8h-source.html
+++ b/doc/oscl_html/oscl__assert_8h-source.html
@@ -41,7 +41,7 @@
 00051 <span class="preprocessor"></span>
 00054 <span class="preprocessor">#endif // OSCL_ASSERT_H_INCLUDED</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__assert_8h.html b/doc/oscl_html/oscl__assert_8h.html
index ac78b7c..55aabb6 100644
--- a/doc/oscl_html/oscl__assert_8h.html
+++ b/doc/oscl_html/oscl__assert_8h.html
@@ -29,7 +29,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__base_8h-source.html b/doc/oscl_html/oscl__base_8h-source.html
index 502985f..d5d40cc 100644
--- a/doc/oscl_html/oscl__base_8h-source.html
+++ b/doc/oscl_html/oscl__base_8h-source.html
@@ -85,7 +85,7 @@
 00146 <span class="preprocessor"></span>
 00149 <span class="preprocessor">#endif  // OSCL_BASE_H_INCLUDED</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__base_8h.html b/doc/oscl_html/oscl__base_8h.html
index c564f19..7fa87df 100644
--- a/doc/oscl_html/oscl__base_8h.html
+++ b/doc/oscl_html/oscl__base_8h.html
@@ -29,7 +29,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__base__alloc_8h-source.html b/doc/oscl_html/oscl__base__alloc_8h-source.html
index d4ceffe..c5d12e8 100644
--- a/doc/oscl_html/oscl__base__alloc_8h-source.html
+++ b/doc/oscl_html/oscl__base__alloc_8h-source.html
@@ -38,7 +38,7 @@
 00048 
 00051 <span class="preprocessor">#endif  // OSCL_BASE_H_INCLUDED</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__base__alloc_8h.html b/doc/oscl_html/oscl__base__alloc_8h.html
index ff62464..b05512d 100644
--- a/doc/oscl_html/oscl__base__alloc_8h.html
+++ b/doc/oscl_html/oscl__base__alloc_8h.html
@@ -25,7 +25,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__base__macros_8h-source.html b/doc/oscl_html/oscl__base__macros_8h-source.html
index 82e54e9..85a3c6a 100644
--- a/doc/oscl_html/oscl__base__macros_8h-source.html
+++ b/doc/oscl_html/oscl__base__macros_8h-source.html
@@ -111,7 +111,7 @@
 00134 <span class="preprocessor"></span>
 00137 <span class="preprocessor">#endif  // OSCL_BASE_MACROS_H_INCLUDED</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__base__macros_8h.html b/doc/oscl_html/oscl__base__macros_8h.html
index b7f1b35..4dbc8de 100644
--- a/doc/oscl_html/oscl__base__macros_8h.html
+++ b/doc/oscl_html/oscl__base__macros_8h.html
@@ -44,7 +44,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__bin__stream_8h-source.html b/doc/oscl_html/oscl__bin__stream_8h-source.html
index b5086f5..e8c5238 100644
--- a/doc/oscl_html/oscl__bin__stream_8h-source.html
+++ b/doc/oscl_html/oscl__bin__stream_8h-source.html
@@ -361,7 +361,7 @@
 00440 <span class="preprocessor">#endif</span>
 00441 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__bin__stream_8h.html b/doc/oscl_html/oscl__bin__stream_8h.html
index 5d0db68..234c2ca 100644
--- a/doc/oscl_html/oscl__bin__stream_8h.html
+++ b/doc/oscl_html/oscl__bin__stream_8h.html
@@ -33,7 +33,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__byte__order_8h-source.html b/doc/oscl_html/oscl__byte__order_8h-source.html
index ed9aa95..f2ee6a8 100644
--- a/doc/oscl_html/oscl__byte__order_8h-source.html
+++ b/doc/oscl_html/oscl__byte__order_8h-source.html
@@ -39,7 +39,7 @@
 00068 <span class="preprocessor"></span>
 00071 <span class="preprocessor">#endif</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__byte__order_8h.html b/doc/oscl_html/oscl__byte__order_8h.html
index d9c8413..7704f55 100644
--- a/doc/oscl_html/oscl__byte__order_8h.html
+++ b/doc/oscl_html/oscl__byte__order_8h.html
@@ -31,7 +31,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__defalloc_8h-source.html b/doc/oscl_html/oscl__defalloc_8h-source.html
index f652b8b..d8d1e7d 100644
--- a/doc/oscl_html/oscl__defalloc_8h-source.html
+++ b/doc/oscl_html/oscl__defalloc_8h-source.html
@@ -209,7 +209,7 @@
 00211 
 00214 <span class="preprocessor">#endif</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__defalloc_8h.html b/doc/oscl_html/oscl__defalloc_8h.html
index 9dfec5f..afe4790 100644
--- a/doc/oscl_html/oscl__defalloc_8h.html
+++ b/doc/oscl_html/oscl__defalloc_8h.html
@@ -35,7 +35,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__dll_8h-source.html b/doc/oscl_html/oscl__dll_8h-source.html
index a41eedf..4f90254 100644
--- a/doc/oscl_html/oscl__dll_8h-source.html
+++ b/doc/oscl_html/oscl__dll_8h-source.html
@@ -29,7 +29,7 @@
 00072 
 00076 <span class="preprocessor">#endif</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__dll_8h.html b/doc/oscl_html/oscl__dll_8h.html
index 55f9ea5..7bdf1b6 100644
--- a/doc/oscl_html/oscl__dll_8h.html
+++ b/doc/oscl_html/oscl__dll_8h.html
@@ -24,7 +24,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__dns_8h-source.html b/doc/oscl_html/oscl__dns_8h-source.html
index 7ace632..34780c8 100644
--- a/doc/oscl_html/oscl__dns_8h-source.html
+++ b/doc/oscl_html/oscl__dns_8h-source.html
@@ -32,24 +32,24 @@
 00034 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__socket_8h.html">oscl_socket.h</a>"</span>
 00035 <span class="preprocessor">#endif</span>
 00036 <span class="preprocessor"></span>
-<a name="l00037"></a><a class="code" href="group__osclio.html#a23">00037</a> <span class="keyword">enum</span> <a class="code" href="group__osclio.html#a23">TPVDNSFxn</a>
+<a name="l00037"></a><a class="code" href="group__osclio.html#a24">00037</a> <span class="keyword">enum</span> <a class="code" href="group__osclio.html#a24">TPVDNSFxn</a>
 00038 {
-00039     <a class="code" href="group__osclio.html#a23a0">EPVDNSGetHostByName</a>
+00039     <a class="code" href="group__osclio.html#a24a0">EPVDNSGetHostByName</a>
 00040 } ;
 00041 
-<a name="l00042"></a><a class="code" href="group__osclio.html#a24">00042</a> <span class="keyword">enum</span> <a class="code" href="group__osclio.html#a24">TPVDNSEvent</a>
+<a name="l00042"></a><a class="code" href="group__osclio.html#a25">00042</a> <span class="keyword">enum</span> <a class="code" href="group__osclio.html#a25">TPVDNSEvent</a>
 00043 {
-00044     <a class="code" href="group__osclio.html#a24a1">EPVDNSSuccess</a>
-00045     , <a class="code" href="group__osclio.html#a24a2">EPVDNSPending</a>
-00046     , <a class="code" href="group__osclio.html#a24a3">EPVDNSTimeout</a>
-00047     , <a class="code" href="group__osclio.html#a24a4">EPVDNSFailure</a>
-00048     , <a class="code" href="group__osclio.html#a24a5">EPVDNSCancel</a>
+00044     <a class="code" href="group__osclio.html#a25a1">EPVDNSSuccess</a>
+00045     , <a class="code" href="group__osclio.html#a25a2">EPVDNSPending</a>
+00046     , <a class="code" href="group__osclio.html#a25a3">EPVDNSTimeout</a>
+00047     , <a class="code" href="group__osclio.html#a25a4">EPVDNSFailure</a>
+00048     , <a class="code" href="group__osclio.html#a25a5">EPVDNSCancel</a>
 00049 } ;
 00050 
 <a name="l00055"></a><a class="code" href="classOsclDNSObserver.html">00055</a> <span class="keyword">class </span><a class="code" href="classOsclDNSObserver.html">OsclDNSObserver</a>
 00056 {
 00057     <span class="keyword">public</span>:
-00069         OSCL_IMPORT_REF <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classOsclDNSObserver.html#a0">HandleDNSEvent</a>(int32 aId, <a class="code" href="group__osclio.html#a23">TPVDNSFxn</a> aFxn, <a class="code" href="group__osclio.html#a24">TPVDNSEvent</a> aEvent, int32 aError) = 0;
+00069         OSCL_IMPORT_REF <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classOsclDNSObserver.html#a0">HandleDNSEvent</a>(int32 aId, <a class="code" href="group__osclio.html#a24">TPVDNSFxn</a> aFxn, <a class="code" href="group__osclio.html#a25">TPVDNSEvent</a> aEvent, int32 aError) = 0;
 00070 
 <a name="l00071"></a><a class="code" href="classOsclDNSObserver.html#a1">00071</a>         <span class="keyword">virtual</span> <a class="code" href="classOsclDNSObserver.html#a1">~OsclDNSObserver</a>() {}
 00072 };
@@ -68,7 +68,7 @@
 00098 
 00106         OSCL_IMPORT_REF <a class="code" href="classOsclDNS.html#a0">~OsclDNS</a>();
 00107 
-00121         OSCL_IMPORT_REF <a class="code" href="group__osclio.html#a24">TPVDNSEvent</a> <a class="code" href="classOsclDNS.html#a1">GetHostByName</a>(<span class="keywordtype">char</span> *name, <a class="code" href="classOsclNetworkAddress.html">OsclNetworkAddress</a>&amp; addr,
+00121         OSCL_IMPORT_REF <a class="code" href="group__osclio.html#a25">TPVDNSEvent</a> <a class="code" href="classOsclDNS.html#a1">GetHostByName</a>(<span class="keywordtype">char</span> *name, <a class="code" href="classOsclNetworkAddress.html">OsclNetworkAddress</a>&amp; addr,
 00122                 int32 aTimeoutMsec = -1);
 00123 
 00132         OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOsclDNS.html#a2">CancelGetHostByName</a>();
@@ -94,7 +94,7 @@
 00152 <span class="preprocessor">#endif</span>
 00153 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__dns_8h.html b/doc/oscl_html/oscl__dns_8h.html
index 983a533..4fa8bfa 100644
--- a/doc/oscl_html/oscl__dns_8h.html
+++ b/doc/oscl_html/oscl__dns_8h.html
@@ -21,15 +21,15 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclDNS.html">OsclDNS</a></td></tr>
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclDNSObserver.html">OsclDNSObserver</a></td></tr>
 <tr><td colspan=2><br><h2>Enumerations</h2></td></tr>
-<tr><td nowrap align=right valign=top>enum &nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a23">TPVDNSFxn</a> { <a class="el" href="group__osclio.html#a23a0">EPVDNSGetHostByName</a>
+<tr><td nowrap align=right valign=top>enum &nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a24">TPVDNSFxn</a> { <a class="el" href="group__osclio.html#a24a0">EPVDNSGetHostByName</a>
  }</td></tr>
-<tr><td nowrap align=right valign=top>enum &nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a24">TPVDNSEvent</a> { <br>
-&nbsp;&nbsp;<a class="el" href="group__osclio.html#a24a1">EPVDNSSuccess</a>, 
-<a class="el" href="group__osclio.html#a24a2">EPVDNSPending</a>, 
-<a class="el" href="group__osclio.html#a24a3">EPVDNSTimeout</a>, 
-<a class="el" href="group__osclio.html#a24a4">EPVDNSFailure</a>, 
+<tr><td nowrap align=right valign=top>enum &nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a25">TPVDNSEvent</a> { <br>
+&nbsp;&nbsp;<a class="el" href="group__osclio.html#a25a1">EPVDNSSuccess</a>, 
+<a class="el" href="group__osclio.html#a25a2">EPVDNSPending</a>, 
+<a class="el" href="group__osclio.html#a25a3">EPVDNSTimeout</a>, 
+<a class="el" href="group__osclio.html#a25a4">EPVDNSFailure</a>, 
 <br>
-&nbsp;&nbsp;<a class="el" href="group__osclio.html#a24a5">EPVDNSCancel</a>
+&nbsp;&nbsp;<a class="el" href="group__osclio.html#a25a5">EPVDNSCancel</a>
 <br>
  }</td></tr>
 </table>
@@ -39,7 +39,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__dns__gethostbyname_8h-source.html b/doc/oscl_html/oscl__dns__gethostbyname_8h-source.html
index 0bf9784..7177f2b 100644
--- a/doc/oscl_html/oscl__dns__gethostbyname_8h-source.html
+++ b/doc/oscl_html/oscl__dns__gethostbyname_8h-source.html
@@ -28,13 +28,13 @@
 00020 
 00021         <a class="code" href="classOsclGetHostByNameMethod.html#a0">~OsclGetHostByNameMethod</a>();
 00022 
-00023         <a class="code" href="group__osclio.html#a24">TPVDNSEvent</a> <a class="code" href="classOsclGetHostByNameMethod.html#a1">GetHostByName</a>(<span class="keywordtype">char</span> *name, <a class="code" href="classOsclNetworkAddress.html">OsclNetworkAddress</a> *addr,
+00023         <a class="code" href="group__osclio.html#a25">TPVDNSEvent</a> <a class="code" href="classOsclGetHostByNameMethod.html#a1">GetHostByName</a>(<span class="keywordtype">char</span> *name, <a class="code" href="classOsclNetworkAddress.html">OsclNetworkAddress</a> *addr,
 00024                                   int32 aTimeout);
 00025 
 00026 
 00027     <span class="keyword">private</span>:
 00028         <a class="code" href="classOsclGetHostByNameMethod.html">OsclGetHostByNameMethod</a>(<a class="code" href="classOscl__DefAlloc.html">Oscl_DefAlloc</a> &amp;a)
-00029                 : <a class="code" href="classOsclDNSMethod.html#a0">OsclDNSMethod</a>(a, <span class="stringliteral">"osclghbnmethod"</span>, <a class="code" href="group__osclio.html#a23a0">EPVDNSGetHostByName</a>)
+00029                 : <a class="code" href="classOsclDNSMethod.html#a0">OsclDNSMethod</a>(a, <span class="stringliteral">"osclghbnmethod"</span>, <a class="code" href="group__osclio.html#a24a0">EPVDNSGetHostByName</a>)
 00030                 , iGetHostByNameRequest(<a class="code" href="group__osclbase.html#a81">NULL</a>)
 00031         {}
 00032 
@@ -82,7 +82,7 @@
 00074 <span class="preprocessor">#endif</span>
 00075 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__dns__gethostbyname_8h.html b/doc/oscl_html/oscl__dns__gethostbyname_8h.html
index 410bfe4..4b1d84e 100644
--- a/doc/oscl_html/oscl__dns__gethostbyname_8h.html
+++ b/doc/oscl_html/oscl__dns__gethostbyname_8h.html
@@ -18,7 +18,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclGetHostByNameRequest.html">OsclGetHostByNameRequest</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__dns__imp_8h-source.html b/doc/oscl_html/oscl__dns__imp_8h-source.html
index 3645b52..660b180 100644
--- a/doc/oscl_html/oscl__dns__imp_8h-source.html
+++ b/doc/oscl_html/oscl__dns__imp_8h-source.html
@@ -24,7 +24,7 @@
 00019 
 00020 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__dns__imp_8h.html b/doc/oscl_html/oscl__dns__imp_8h.html
index c5ea491..721c313 100644
--- a/doc/oscl_html/oscl__dns__imp_8h.html
+++ b/doc/oscl_html/oscl__dns__imp_8h.html
@@ -14,7 +14,7 @@
 <tr><td></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__dns__imp__base_8h-source.html b/doc/oscl_html/oscl__dns__imp__base_8h-source.html
index 9563bbb..cd1a19c 100644
--- a/doc/oscl_html/oscl__dns__imp__base_8h-source.html
+++ b/doc/oscl_html/oscl__dns__imp__base_8h-source.html
@@ -33,7 +33,7 @@
 00029         <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classOsclDNSIBase.html#a3">GetHostByName</a>(<a class="code" href="classGetHostByNameParam.html">GetHostByNameParam</a>&amp; , <a class="code" href="classOsclDNSRequestAO.html">OsclDNSRequestAO</a>&amp;) = 0;
 00030         <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classOsclDNSIBase.html#a4">GetHostByNameSuccess</a>(<a class="code" href="classGetHostByNameParam.html">GetHostByNameParam</a>&amp;) = 0;
 00031 
-00032         <span class="keywordtype">void</span> <a class="code" href="classOsclDNSIBase.html#a5">CancelFxn</a>(<a class="code" href="group__osclio.html#a23">TPVDNSFxn</a>);
+00032         <span class="keywordtype">void</span> <a class="code" href="classOsclDNSIBase.html#a5">CancelFxn</a>(<a class="code" href="group__osclio.html#a24">TPVDNSFxn</a>);
 00033 
 00034     <span class="keyword">protected</span>:
 00035         <a class="code" href="classOsclDNSIBase.html#b0">OsclDNSIBase</a>(<a class="code" href="classOscl__DefAlloc.html">Oscl_DefAlloc</a> &amp;a);
@@ -56,7 +56,7 @@
 00052 
 00053 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__dns__imp__base_8h.html b/doc/oscl_html/oscl__dns__imp__base_8h.html
index b07a70b..a8eb7c7 100644
--- a/doc/oscl_html/oscl__dns__imp__base_8h.html
+++ b/doc/oscl_html/oscl__dns__imp__base_8h.html
@@ -17,7 +17,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclDNSIBase.html">OsclDNSIBase</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__dns__imp__pv_8h-source.html b/doc/oscl_html/oscl__dns__imp__pv_8h-source.html
index 1ab82eb..2f69a0d 100644
--- a/doc/oscl_html/oscl__dns__imp__pv_8h-source.html
+++ b/doc/oscl_html/oscl__dns__imp__pv_8h-source.html
@@ -54,7 +54,7 @@
 00049 
 00050 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__dns__imp__pv_8h.html b/doc/oscl_html/oscl__dns__imp__pv_8h.html
index 5c9b741..305ae61 100644
--- a/doc/oscl_html/oscl__dns__imp__pv_8h.html
+++ b/doc/oscl_html/oscl__dns__imp__pv_8h.html
@@ -17,7 +17,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclDNSI.html">OsclDNSI</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__dns__method_8h-source.html b/doc/oscl_html/oscl__dns__method_8h-source.html
index e7b9e27..fcacf40 100644
--- a/doc/oscl_html/oscl__dns__method_8h-source.html
+++ b/doc/oscl_html/oscl__dns__method_8h-source.html
@@ -25,7 +25,7 @@
 <a name="l00020"></a><a class="code" href="classOsclDNSMethod.html">00020</a> <span class="keyword">class </span><a class="code" href="classOsclDNSMethod.html">OsclDNSMethod</a> : <span class="keyword">public</span> <a class="code" href="classOsclTimerObject.html">OsclTimerObject</a>
 00021 {
 00022     <span class="keyword">public</span>:
-<a name="l00023"></a><a class="code" href="classOsclDNSMethod.html#a0">00023</a>         <a class="code" href="classOsclDNSMethod.html#a0">OsclDNSMethod</a>(<a class="code" href="classOscl__DefAlloc.html">Oscl_DefAlloc</a> &amp;a, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <a class="code" href="group__osclio.html#a23">TPVDNSFxn</a> fxn)
+<a name="l00023"></a><a class="code" href="classOsclDNSMethod.html#a0">00023</a>         <a class="code" href="classOsclDNSMethod.html#a0">OsclDNSMethod</a>(<a class="code" href="classOscl__DefAlloc.html">Oscl_DefAlloc</a> &amp;a, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <a class="code" href="group__osclio.html#a24">TPVDNSFxn</a> fxn)
 00024                 : <a class="code" href="classOsclTimerObject.html">OsclTimerObject</a>(<a class="code" href="classOsclActiveObject.html">OsclActiveObject</a>::EPriorityNominal, name)
 00025                 , <a class="code" href="classOsclDNSMethod.html#m0">iDNSObserver</a>(<a class="code" href="group__osclbase.html#a81">NULL</a>)
 00026                 , <a class="code" href="classOsclDNSMethod.html#m1">iId</a>(0)
@@ -44,7 +44,7 @@
 <a name="l00039"></a><a class="code" href="classOsclDNSMethod.html#m0">00039</a>         <a class="code" href="classOsclDNSObserver.html">OsclDNSObserver</a> *<a class="code" href="classOsclDNSMethod.html#m0">iDNSObserver</a>;
 <a name="l00040"></a><a class="code" href="classOsclDNSMethod.html#m1">00040</a>         uint32 <a class="code" href="classOsclDNSMethod.html#m1">iId</a>;
 <a name="l00041"></a><a class="code" href="classOsclDNSMethod.html#m2">00041</a>         <a class="code" href="classOscl__DefAlloc.html">Oscl_DefAlloc</a> &amp;<a class="code" href="classOsclDNSMethod.html#m2">iAlloc</a>;
-<a name="l00042"></a><a class="code" href="classOsclDNSMethod.html#m3">00042</a>         <a class="code" href="group__osclio.html#a23">TPVDNSFxn</a> <a class="code" href="classOsclDNSMethod.html#m3">iDNSFxn</a>;
+<a name="l00042"></a><a class="code" href="classOsclDNSMethod.html#m3">00042</a>         <a class="code" href="group__osclio.html#a24">TPVDNSFxn</a> <a class="code" href="classOsclDNSMethod.html#m3">iDNSFxn</a>;
 <a name="l00043"></a><a class="code" href="classOsclDNSMethod.html#m4">00043</a>         <a class="code" href="classPVLogger.html">PVLogger</a>* <a class="code" href="classOsclDNSMethod.html#m4">iLogger</a>;
 00044 
 00045     <span class="keyword">protected</span>:
@@ -113,7 +113,7 @@
 00111 <span class="preprocessor">#endif</span>
 00112 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__dns__method_8h.html b/doc/oscl_html/oscl__dns__method_8h.html
index 416106a..b2b02f2 100644
--- a/doc/oscl_html/oscl__dns__method_8h.html
+++ b/doc/oscl_html/oscl__dns__method_8h.html
@@ -20,7 +20,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclDNSRequestAO.html">OsclDNSRequestAO</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__dns__param_8h-source.html b/doc/oscl_html/oscl__dns__param_8h-source.html
index 83e0462..47c1b2b 100644
--- a/doc/oscl_html/oscl__dns__param_8h-source.html
+++ b/doc/oscl_html/oscl__dns__param_8h-source.html
@@ -57,7 +57,7 @@
 00049 <span class="preprocessor"></span>
 00050         <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classDNSRequestParam.html#a3">Destroy</a>() = 0;
 00051 
-<a name="l00052"></a><a class="code" href="classDNSRequestParam.html#m0">00052</a>         <a class="code" href="group__osclio.html#a23">TPVDNSFxn</a> <a class="code" href="classDNSRequestParam.html#m0">iFxn</a>;
+<a name="l00052"></a><a class="code" href="classDNSRequestParam.html#m0">00052</a>         <a class="code" href="group__osclio.html#a24">TPVDNSFxn</a> <a class="code" href="classDNSRequestParam.html#m0">iFxn</a>;
 <a name="l00053"></a><a class="code" href="classDNSRequestParam.html#m1">00053</a>         <a class="code" href="classOsclDNSRequest.html">OsclDNSRequest</a> *<a class="code" href="classDNSRequestParam.html#m1">iDNSRequest</a>;
 00054 
 00055 <span class="preprocessor">#if(PV_DNS_IS_THREAD)</span>
@@ -69,7 +69,7 @@
 00061 
 00062     <span class="keyword">protected</span>:
 00063 
-00064         <a class="code" href="classDNSRequestParam.html#b0">DNSRequestParam</a>(<a class="code" href="group__osclio.html#a23">TPVDNSFxn</a> aFxn);
+00064         <a class="code" href="classDNSRequestParam.html#b0">DNSRequestParam</a>(<a class="code" href="group__osclio.html#a24">TPVDNSFxn</a> aFxn);
 00065 
 <a name="l00066"></a><a class="code" href="classDNSRequestParam.html#n0">00066</a>         uint32 <a class="code" href="classDNSRequestParam.html#n0">iRefCount</a>;
 00067 };
@@ -105,7 +105,7 @@
 00097 <span class="preprocessor">#endif</span>
 00098 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__dns__param_8h.html b/doc/oscl_html/oscl__dns__param_8h.html
index 9ac52dd..9bfbdb7 100644
--- a/doc/oscl_html/oscl__dns__param_8h.html
+++ b/doc/oscl_html/oscl__dns__param_8h.html
@@ -46,7 +46,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__dns__request_8h-source.html b/doc/oscl_html/oscl__dns__request_8h-source.html
index 7732159..1628e85 100644
--- a/doc/oscl_html/oscl__dns__request_8h-source.html
+++ b/doc/oscl_html/oscl__dns__request_8h-source.html
@@ -58,7 +58,7 @@
 00053 <span class="preprocessor">#endif</span>
 00054 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__dns__request_8h.html b/doc/oscl_html/oscl__dns__request_8h.html
index 79ed543..4d81f56 100644
--- a/doc/oscl_html/oscl__dns__request_8h.html
+++ b/doc/oscl_html/oscl__dns__request_8h.html
@@ -18,7 +18,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclDNSRequest.html">OsclDNSRequest</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__dns__tuneables_8h-source.html b/doc/oscl_html/oscl__dns__tuneables_8h-source.html
index 683fcaa..9493080 100644
--- a/doc/oscl_html/oscl__dns__tuneables_8h-source.html
+++ b/doc/oscl_html/oscl__dns__tuneables_8h-source.html
@@ -33,7 +33,7 @@
 00043 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
 00044 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__dns__tuneables_8h.html b/doc/oscl_html/oscl__dns__tuneables_8h.html
index fb20d43..b52c099 100644
--- a/doc/oscl_html/oscl__dns__tuneables_8h.html
+++ b/doc/oscl_html/oscl__dns__tuneables_8h.html
@@ -62,7 +62,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__double__list_8h-source.html b/doc/oscl_html/oscl__double__list_8h-source.html
index 7138bb3..673417f 100644
--- a/doc/oscl_html/oscl__double__list_8h-source.html
+++ b/doc/oscl_html/oscl__double__list_8h-source.html
@@ -204,7 +204,7 @@
 00204 <span class="preprocessor">#endif</span>
 00205 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__double__list_8h.html b/doc/oscl_html/oscl__double__list_8h.html
index 4137b1e..c2ac5c9 100644
--- a/doc/oscl_html/oscl__double__list_8h.html
+++ b/doc/oscl_html/oscl__double__list_8h.html
@@ -37,7 +37,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__errno_8h-source.html b/doc/oscl_html/oscl__errno_8h-source.html
index 46f9e66..3b6ce90 100644
--- a/doc/oscl_html/oscl__errno_8h-source.html
+++ b/doc/oscl_html/oscl__errno_8h-source.html
@@ -50,7 +50,7 @@
 00081 <span class="preprocessor">#endif // INCLUDED_OSCL_ERRNO_H</span>
 00082 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__errno_8h.html b/doc/oscl_html/oscl__errno_8h.html
index 769c4ce..e0aed19 100644
--- a/doc/oscl_html/oscl__errno_8h.html
+++ b/doc/oscl_html/oscl__errno_8h.html
@@ -32,7 +32,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__error_8h-source.html b/doc/oscl_html/oscl__error_8h-source.html
index c184dc9..3ef80db 100644
--- a/doc/oscl_html/oscl__error_8h-source.html
+++ b/doc/oscl_html/oscl__error_8h-source.html
@@ -281,7 +281,7 @@
 00382 <span class="preprocessor">#endif</span>
 00383 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__error_8h.html b/doc/oscl_html/oscl__error_8h.html
index 41f2056..606a87a 100644
--- a/doc/oscl_html/oscl__error_8h.html
+++ b/doc/oscl_html/oscl__error_8h.html
@@ -35,7 +35,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__error__allocator_8h-source.html b/doc/oscl_html/oscl__error__allocator_8h-source.html
index 1531b87..7f63d6f 100644
--- a/doc/oscl_html/oscl__error__allocator_8h-source.html
+++ b/doc/oscl_html/oscl__error__allocator_8h-source.html
@@ -83,7 +83,7 @@
 00100 <span class="preprocessor">#endif  //OSCL_ERROR_ALLOCATOR_H_INCLUDED</span>
 00101 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__error__allocator_8h.html b/doc/oscl_html/oscl__error__allocator_8h.html
index d4216d8..1660222 100644
--- a/doc/oscl_html/oscl__error__allocator_8h.html
+++ b/doc/oscl_html/oscl__error__allocator_8h.html
@@ -28,7 +28,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__error__codes_8h-source.html b/doc/oscl_html/oscl__error__codes_8h-source.html
index 8d4fa3d..f68c864 100644
--- a/doc/oscl_html/oscl__error__codes_8h-source.html
+++ b/doc/oscl_html/oscl__error__codes_8h-source.html
@@ -53,7 +53,7 @@
 00061 <span class="preprocessor">#endif</span>
 00062 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__error__codes_8h.html b/doc/oscl_html/oscl__error__codes_8h.html
index e37c447..c5e6c73 100644
--- a/doc/oscl_html/oscl__error__codes_8h.html
+++ b/doc/oscl_html/oscl__error__codes_8h.html
@@ -50,7 +50,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__error__imp_8h-source.html b/doc/oscl_html/oscl__error__imp_8h-source.html
index 79eedff..8f013cf 100644
--- a/doc/oscl_html/oscl__error__imp_8h-source.html
+++ b/doc/oscl_html/oscl__error__imp_8h-source.html
@@ -47,7 +47,7 @@
 00055 <span class="preprocessor">#endif</span>
 00056 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__error__imp_8h.html b/doc/oscl_html/oscl__error__imp_8h.html
index edb79fa..de2d1f6 100644
--- a/doc/oscl_html/oscl__error__imp_8h.html
+++ b/doc/oscl_html/oscl__error__imp_8h.html
@@ -24,7 +24,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__error__imp__cppexceptions_8h-source.html b/doc/oscl_html/oscl__error__imp__cppexceptions_8h-source.html
index 1a3e8ef..bb0c8b0 100644
--- a/doc/oscl_html/oscl__error__imp__cppexceptions_8h-source.html
+++ b/doc/oscl_html/oscl__error__imp__cppexceptions_8h-source.html
@@ -64,7 +64,7 @@
 00066 <span class="preprocessor">#endif // OSCL_ERROR_IMP_CPPEXCEPTIONS_H_INCLUDED</span>
 00067 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__error__imp__cppexceptions_8h.html b/doc/oscl_html/oscl__error__imp__cppexceptions_8h.html
index a8430a5..191d7de 100644
--- a/doc/oscl_html/oscl__error__imp__cppexceptions_8h.html
+++ b/doc/oscl_html/oscl__error__imp__cppexceptions_8h.html
@@ -27,7 +27,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__error__imp__fatalerror_8h-source.html b/doc/oscl_html/oscl__error__imp__fatalerror_8h-source.html
index faf9e6d..1a43de0 100644
--- a/doc/oscl_html/oscl__error__imp__fatalerror_8h-source.html
+++ b/doc/oscl_html/oscl__error__imp__fatalerror_8h-source.html
@@ -52,7 +52,7 @@
 00054 <span class="preprocessor">#endif // OSCL_ERROR_IMP_FATALERROR_H_INCLUDED</span>
 00055 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__error__imp__fatalerror_8h.html b/doc/oscl_html/oscl__error__imp__fatalerror_8h.html
index 16abba9..c2214de 100644
--- a/doc/oscl_html/oscl__error__imp__fatalerror_8h.html
+++ b/doc/oscl_html/oscl__error__imp__fatalerror_8h.html
@@ -118,7 +118,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__error__imp__jumps_8h-source.html b/doc/oscl_html/oscl__error__imp__jumps_8h-source.html
index 408293e..f48e5b6 100644
--- a/doc/oscl_html/oscl__error__imp__jumps_8h-source.html
+++ b/doc/oscl_html/oscl__error__imp__jumps_8h-source.html
@@ -146,7 +146,7 @@
 00148 <span class="preprocessor">#endif // OSCL_ERROR_IMP_JUMPS_H_INCLUDED</span>
 00149 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__error__imp__jumps_8h.html b/doc/oscl_html/oscl__error__imp__jumps_8h.html
index 54f500f..fab2939 100644
--- a/doc/oscl_html/oscl__error__imp__jumps_8h.html
+++ b/doc/oscl_html/oscl__error__imp__jumps_8h.html
@@ -144,7 +144,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__error__trapcleanup_8h-source.html b/doc/oscl_html/oscl__error__trapcleanup_8h-source.html
index 681cee2..0a561b2 100644
--- a/doc/oscl_html/oscl__error__trapcleanup_8h-source.html
+++ b/doc/oscl_html/oscl__error__trapcleanup_8h-source.html
@@ -240,7 +240,7 @@
 00259 <span class="preprocessor">#endif</span>
 00260 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__error__trapcleanup_8h.html b/doc/oscl_html/oscl__error__trapcleanup_8h.html
index 0676a41..fc01abd 100644
--- a/doc/oscl_html/oscl__error__trapcleanup_8h.html
+++ b/doc/oscl_html/oscl__error__trapcleanup_8h.html
@@ -37,7 +37,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__exception_8h-source.html b/doc/oscl_html/oscl__exception_8h-source.html
index 04d016f..4206207 100644
--- a/doc/oscl_html/oscl__exception_8h-source.html
+++ b/doc/oscl_html/oscl__exception_8h-source.html
@@ -80,7 +80,7 @@
 00136 
 00137 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__exception_8h.html b/doc/oscl_html/oscl__exception_8h.html
index ab2c60e..8bdaea9 100644
--- a/doc/oscl_html/oscl__exception_8h.html
+++ b/doc/oscl_html/oscl__exception_8h.html
@@ -41,7 +41,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__exclusive__ptr_8h-source.html b/doc/oscl_html/oscl__exclusive__ptr_8h-source.html
index 2457f87..17d4eae 100644
--- a/doc/oscl_html/oscl__exclusive__ptr_8h-source.html
+++ b/doc/oscl_html/oscl__exclusive__ptr_8h-source.html
@@ -224,7 +224,7 @@
 00457 <span class="preprocessor">#endif //OSCL_EXCLUSIVE_PTR_H_INCLUDED</span>
 00458 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__exclusive__ptr_8h.html b/doc/oscl_html/oscl__exclusive__ptr_8h.html
index 119667c..25493a1 100644
--- a/doc/oscl_html/oscl__exclusive__ptr_8h.html
+++ b/doc/oscl_html/oscl__exclusive__ptr_8h.html
@@ -28,7 +28,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__file__async__read_8h-source.html b/doc/oscl_html/oscl__file__async__read_8h-source.html
index 0bcd4a0..7b15dae 100644
--- a/doc/oscl_html/oscl__file__async__read_8h-source.html
+++ b/doc/oscl_html/oscl__file__async__read_8h-source.html
@@ -213,11 +213,11 @@
 00210         {
 00211             <span class="keywordflow">return</span> iValid;
 00212         }
-<a name="l00213"></a><a class="code" href="classOsclAsyncFileBuffer.html#a5">00213</a>         int32 <a class="code" href="classOsclAsyncFileBuffer.html#a5">Offset</a>()
+<a name="l00213"></a><a class="code" href="classOsclAsyncFileBuffer.html#a5">00213</a>         <a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> <a class="code" href="classOsclAsyncFileBuffer.html#a5">Offset</a>()
 00214         {
 00215             <span class="keywordflow">return</span> iOffset;
 00216         }
-<a name="l00217"></a><a class="code" href="classOsclAsyncFileBuffer.html#a6">00217</a>         <span class="keywordtype">void</span> <a class="code" href="classOsclAsyncFileBuffer.html#a6">SetOffset</a>(int32 aOffset)
+<a name="l00217"></a><a class="code" href="classOsclAsyncFileBuffer.html#a6">00217</a>         <span class="keywordtype">void</span> <a class="code" href="classOsclAsyncFileBuffer.html#a6">SetOffset</a>(<a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> aOffset)
 00218         {
 00219             iOffset = aOffset;
 00220         }
@@ -225,7 +225,7 @@
 00222         {
 00223             <span class="keywordflow">return</span> iLength;
 00224         }
-00225         <span class="keywordtype">bool</span> <a class="code" href="classOsclAsyncFileBuffer.html#a8">HasThisOffset</a>(int32 aOffset);
+00225         <span class="keywordtype">bool</span> <a class="code" href="classOsclAsyncFileBuffer.html#a8">HasThisOffset</a>(<a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> aOffset);
 <a name="l00226"></a><a class="code" href="classOsclAsyncFileBuffer.html#a9">00226</a>         int32 <a class="code" href="classOsclAsyncFileBuffer.html#a9">Id</a>()
 00227         {
 00228             <span class="keywordflow">return</span> iId;
@@ -240,7 +240,7 @@
 00237 
 00238     <span class="keyword">private</span>:
 00239         <a class="code" href="classOsclBuf.html">OsclBuf</a>* iBuffer;
-00240         int32 iOffset;
+00240         <a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> iOffset;
 00241         <span class="keywordtype">bool</span> iInUse;
 00242         int32 iLength;
 00243         <span class="keywordtype">bool</span> iValid;
@@ -272,11 +272,11 @@
 00294                     , <span class="keyword">const</span> <a class="code" href="classOsclNativeFileParams.html">OsclNativeFileParams</a>&amp; params
 00295                     , <a class="code" href="classOscl__FileServer.html">Oscl_FileServer</a>&amp; fileserv);
 00296 
-00297         int32 <a class="code" href="classOsclAsyncFile.html#a3">Seek</a>(int32 offset, <a class="code" href="classOscl__File.html#s11">Oscl_File::seek_type</a> origin);
-00298         int32 <a class="code" href="classOsclAsyncFile.html#a4">Tell</a>();
+00297         int32 <a class="code" href="classOsclAsyncFile.html#a3">Seek</a>(<a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> offset, <a class="code" href="classOscl__File.html#s11">Oscl_File::seek_type</a> origin);
+00298         <a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> <a class="code" href="classOsclAsyncFile.html#a4">Tell</a>();
 00299         uint32 <a class="code" href="classOsclAsyncFile.html#a5">Read</a>(<a class="code" href="group__osclbase.html#a25">OsclAny</a>* aBuffer1, uint32 aDataSize, uint32 aNumElements);
 00300         int32 <a class="code" href="classOsclAsyncFile.html#a6">EndOfFile</a>();
-00301         int32 <a class="code" href="classOsclAsyncFile.html#a7">Size</a>();
+00301         <a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> <a class="code" href="classOsclAsyncFile.html#a7">Size</a>();
 00302         int32 <a class="code" href="classOsclAsyncFile.html#a8">Close</a>();
 00303 
 <a name="l00304"></a><a class="code" href="classOsclAsyncFile.html#a9">00304</a>         uint32 <a class="code" href="classOsclAsyncFile.html#a9">Write</a>(<span class="keyword">const</span> <a class="code" href="group__osclbase.html#a25">OsclAny</a>* aBuffer1, uint32 aDataSize, uint32 aNumElements)
@@ -298,25 +298,25 @@
 00323     <span class="keyword">private</span>:
 00324         <span class="comment">// private utility methods</span>
 00325         <span class="keywordtype">void</span> StartAsyncRead(<span class="keywordtype">bool</span> aStartAsyncRead);
-00326         <span class="keywordtype">bool</span> FindDataBuffer(<a class="code" href="classOsclAsyncFileBuffer.html">OsclAsyncFileBuffer</a>*&amp; aDataBuffer, int32&amp; aBufferId, int32 aOffset, int32 aSize);
+00326         <span class="keywordtype">bool</span> FindDataBuffer(<a class="code" href="classOsclAsyncFileBuffer.html">OsclAsyncFileBuffer</a>*&amp; aDataBuffer, int32&amp; aBufferId, <a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> aOffset, int32 aSize);
 00327         <span class="keywordtype">void</span> UpdateReading();
-00328         int32 BytesReadAhead(int32 aOffset);
+00328         int32 BytesReadAhead();
 00329         int32 SortDataBuffers();
-00330         <span class="keywordtype">bool</span> GetNextDataBuffer(<a class="code" href="classOsclAsyncFileBuffer.html">OsclAsyncFileBuffer</a>*&amp; aDataBuffer, int32 aFilePointerToReadFrom);
-00331         <span class="keywordtype">void</span> StartNextRead(int32 aPosToReadFrom);
-00332         <span class="keywordtype">void</span> ReOrderBuffersQueue(int32 aOffset, int32 aFirstBufferId);
+00330         <span class="keywordtype">bool</span> GetNextDataBuffer(<a class="code" href="classOsclAsyncFileBuffer.html">OsclAsyncFileBuffer</a>*&amp; aDataBuffer, <a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> aFilePointerToReadFrom);
+00331         <span class="keywordtype">void</span> StartNextRead(<a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> aPosToReadFrom);
+00332         <span class="keywordtype">void</span> ReOrderBuffersQueue(int32 aFirstBufferId);
 00333         <span class="keywordtype">bool</span> IsLinkedDataBuffer(<a class="code" href="classOsclAsyncFileBuffer.html">OsclAsyncFileBuffer</a>* aDataBuffer);
 00334         <span class="keywordtype">bool</span> CanBeLinked(<a class="code" href="classOsclAsyncFileBuffer.html">OsclAsyncFileBuffer</a>* aDataBuffer);
-00335         uint32 doRead(uint8*&amp; aBuffer1, uint32 aDataSize, uint32 aNumElements, int32 aOffset);
+00335         uint32 doRead(uint8*&amp; aBuffer1, uint32 aDataSize, uint32 aNumElements, <a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> aOffset);
 00336 
 00337     <span class="keyword">private</span>:
-00338         int32 iFileSize;
+00338         <a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> iFileSize;
 00339 
 00340         <span class="comment">// File object to do async read from</span>
 00341         <a class="code" href="classOsclNativeFile.html">OsclNativeFile</a>&amp; iNativeFile;
 00342 
 00343         <span class="comment">// File position for async reads.</span>
-00344         int32 iAsyncFilePosition;
+00344         <a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> iAsyncFilePosition;
 00345 
 00346         <span class="comment">// For verification</span>
 00347         <a class="code" href="classOsclNativeFile.html">OsclNativeFile</a>* iNativeFileVerify;
@@ -326,7 +326,7 @@
 00351         <a class="code" href="classOsclNativeFile.html">OsclNativeFile</a>* iNativeFileDuplicate;
 00352 
 00353         <span class="comment">// File position for sync reads.</span>
-00354         int32 iSyncFilePosition;
+00354         <a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> iSyncFilePosition;
 00355 
 00356         <span class="comment">// Arrays of data buffers</span>
 00357         <a class="code" href="classOscl__Vector.html">Oscl_Vector&lt;OsclAsyncFileBuffer*, OsclMemAllocator&gt;</a> iDataBufferArray;
@@ -344,10 +344,10 @@
 00369         uint32 iTotalCacheSize;
 00370 
 00371         <span class="comment">// Logical File Position (as seen by the client of this class)</span>
-00372         int32 iFilePosition;
+00372         <a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> iFilePosition;
 00373 
 00374         <span class="comment">// Last offset after a user read operation</span>
-00375         int32 iLastUserFileRead;
+00375         <a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> iLastUserFileRead;
 00376 
 00377         <span class="comment">// Start async read enable flag</span>
 00378         <span class="keywordtype">bool</span> iStartAsyncRead;
@@ -412,7 +412,7 @@
 00441 <span class="preprocessor">#endif</span>
 00442 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__file__async__read_8h.html b/doc/oscl_html/oscl__file__async__read_8h.html
index 14a503a..90cc7ed 100644
--- a/doc/oscl_html/oscl__file__async__read_8h.html
+++ b/doc/oscl_html/oscl__file__async__read_8h.html
@@ -25,7 +25,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclPtrC.html">OsclPtrC</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__file__cache_8h-source.html b/doc/oscl_html/oscl__file__cache_8h-source.html
index e5087e5..ef7ba2d 100644
--- a/doc/oscl_html/oscl__file__cache_8h-source.html
+++ b/doc/oscl_html/oscl__file__cache_8h-source.html
@@ -40,16 +40,16 @@
 00043 
 00044         uint32 <a class="code" href="classOsclFileCache.html#a4">Read</a>(<span class="keywordtype">void</span>* outputBuffer, uint32 size, uint32 numelements);
 00045 
-00046         int32 <a class="code" href="classOsclFileCache.html#a5">Write</a>(<span class="keyword">const</span> <span class="keywordtype">void</span>* inputBuffer, uint32 size, uint32 numelements);
+00046         uint32 <a class="code" href="classOsclFileCache.html#a5">Write</a>(<span class="keyword">const</span> <span class="keywordtype">void</span>* inputBuffer, uint32 size, uint32 numelements);
 00047 
-<a name="l00048"></a><a class="code" href="classOsclFileCache.html#a6">00048</a>         int32 <a class="code" href="classOsclFileCache.html#a6">FileSize</a>()
+<a name="l00048"></a><a class="code" href="classOsclFileCache.html#a6">00048</a>         <a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a>  <a class="code" href="classOsclFileCache.html#a6">FileSize</a>()
 00049         {
 00050             <span class="keywordflow">return</span> _fileSize;
 00051         }
 00052 
-00053         int32 <a class="code" href="classOsclFileCache.html#a7">Seek</a>(int32 offset, <a class="code" href="classOscl__File.html#s11">Oscl_File::seek_type</a> origin);
+00053         int32 <a class="code" href="classOsclFileCache.html#a7">Seek</a>(<a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a>  offset, <a class="code" href="classOscl__File.html#s11">Oscl_File::seek_type</a> origin);
 00054 
-<a name="l00055"></a><a class="code" href="classOsclFileCache.html#a8">00055</a>         int32 <a class="code" href="classOsclFileCache.html#a8">Tell</a>()
+<a name="l00055"></a><a class="code" href="classOsclFileCache.html#a8">00055</a>         <a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a>  <a class="code" href="classOsclFileCache.html#a8">Tell</a>()
 00056         {
 00057             <span class="keywordflow">return</span> (_cacheFilePosition + _currentCachePos);
 00058         }
@@ -75,7 +75,7 @@
 00078 
 00079         <span class="comment">//the native file position corresponding to the start of the</span>
 00080         <span class="comment">//cache</span>
-00081         uint32 _cacheFilePosition;
+00081         <a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a>  _cacheFilePosition;
 00082 
 00083         <span class="comment">//current working position (virtual file pointer) in the cache.</span>
 00084         <span class="comment">//units: 0-based byte offset from beginning of cache</span>
@@ -95,12 +95,12 @@
 00098         <span class="comment">//Current file size.  This is a virtual file size and</span>
 00099         <span class="comment">//may not match the native file size when there is</span>
 00100         <span class="comment">//cached data.</span>
-00101         uint32  _fileSize;
+00101         <a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a>         _fileSize;
 00102 
 00103         <span class="comment">//Current true native file position.</span>
-00104         uint32 _nativePosition;
+00104         <a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a>  _nativePosition;
 00105 
-00106         int32 SetCachePosition(uint32 pos);
+00106         int32 SetCachePosition(<a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a>  pos);
 00107         int32 FillCacheFromFile();
 00108         int32 WriteCacheToFile();
 00109 
@@ -111,7 +111,7 @@
 00114 <span class="preprocessor">#endif // OSCL_FILE_CACHE_H_INCLUDED</span>
 00115 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__file__cache_8h.html b/doc/oscl_html/oscl__file__cache_8h.html
index e9d07fd..7b46f53 100644
--- a/doc/oscl_html/oscl__file__cache_8h.html
+++ b/doc/oscl_html/oscl__file__cache_8h.html
@@ -25,7 +25,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__file__dir__utils_8h-source.html b/doc/oscl_html/oscl__file__dir__utils_8h-source.html
index fbd45d3..9912d99 100644
--- a/doc/oscl_html/oscl__file__dir__utils_8h-source.html
+++ b/doc/oscl_html/oscl__file__dir__utils_8h-source.html
@@ -32,17 +32,17 @@
 <a name="l00035"></a><a class="code" href="structoscl__fsstat.html#m1">00035</a>     <a class="code" href="group__osclbase.html#a31">uint64</a> <a class="code" href="structoscl__fsstat.html#m1">totalbytes</a>;
 00036 } <a class="code" href="structoscl__fsstat.html">OSCL_FSSTAT</a>;
 00037 
-<a name="l00038"></a><a class="code" href="group__osclio.html#a25">00038</a> <span class="keyword">typedef</span> <span class="keyword">enum</span>
+<a name="l00038"></a><a class="code" href="group__osclio.html#a26">00038</a> <span class="keyword">typedef</span> <span class="keyword">enum</span>
 00039 {
-00040     <a class="code" href="group__osclio.html#a25a2">OSCL_FILEMGMT_PERMS_READ</a> = 0x1,
-00041     <a class="code" href="group__osclio.html#a25a3">OSCL_FILEMGMT_PERMS_WRITE</a> = 0x2,
-00042     <a class="code" href="group__osclio.html#a25a4">OSCL_FILEMGMT_PERMS_EXECUTE</a> = 0x4,
-00043 } <a class="code" href="group__osclio.html#a25">OSCL_FILEMGMT_PERMS</a>;
+00040     <a class="code" href="group__osclio.html#a26a2">OSCL_FILEMGMT_PERMS_READ</a> = 0x1,
+00041     <a class="code" href="group__osclio.html#a26a3">OSCL_FILEMGMT_PERMS_WRITE</a> = 0x2,
+00042     <a class="code" href="group__osclio.html#a26a4">OSCL_FILEMGMT_PERMS_EXECUTE</a> = 0x4,
+00043 } <a class="code" href="group__osclio.html#a26">OSCL_FILEMGMT_PERMS</a>;
 00044 
-<a name="l00045"></a><a class="code" href="group__osclio.html#a26">00045</a> <span class="keyword">typedef</span> <span class="keyword">enum</span>
+<a name="l00045"></a><a class="code" href="group__osclio.html#a27">00045</a> <span class="keyword">typedef</span> <span class="keyword">enum</span>
 00046 {
-00047     <a class="code" href="group__osclio.html#a26a5">OSCL_FILEMGMT_MODE_DIR</a> = 0x1
-00048 } <a class="code" href="group__osclio.html#a26">OSCL_FILEMGMT_MODES</a>;
+00047     <a class="code" href="group__osclio.html#a27a5">OSCL_FILEMGMT_MODE_DIR</a> = 0x1
+00048 } <a class="code" href="group__osclio.html#a27">OSCL_FILEMGMT_MODES</a>;
 00049 
 <a name="l00050"></a><a class="code" href="structoscl__stat__buf.html">00050</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structoscl__stat__buf.html">oscl_stat_buf</a>
 00051 {
@@ -50,57 +50,57 @@
 <a name="l00053"></a><a class="code" href="structoscl__stat__buf.html#m1">00053</a>     uint32 <a class="code" href="structoscl__stat__buf.html#m1">perms</a>;
 00054 } <a class="code" href="structoscl__stat__buf.html">OSCL_STAT_BUF</a>;
 00055 
-<a name="l00056"></a><a class="code" href="group__osclio.html#a27">00056</a> <span class="keyword">typedef</span> <span class="keyword">enum</span>
+<a name="l00056"></a><a class="code" href="group__osclio.html#a28">00056</a> <span class="keyword">typedef</span> <span class="keyword">enum</span>
 00057 {
-00058     <a class="code" href="group__osclio.html#a27a6">OSCL_FILEMGMT_E_OK</a> = 0,
-00059     <a class="code" href="group__osclio.html#a27a7">OSCL_FILEMGMT_E_PATH_TOO_LONG</a>,
-00060     <a class="code" href="group__osclio.html#a27a8">OSCL_FILEMGMT_E_PATH_NOT_FOUND</a>,
-00061     <a class="code" href="group__osclio.html#a27a9">OSCL_FILEMGMT_E_ALREADY_EXISTS</a>,
-00062     <a class="code" href="group__osclio.html#a27a10">OSCL_FILEMGMT_E_NOT_EMPTY</a>,
-00063     <a class="code" href="group__osclio.html#a27a11">OSCL_FILEMGMT_E_PERMISSION_DENIED</a>,
-00064     <a class="code" href="group__osclio.html#a27a12">OSCL_FILEMGMT_E_NO_MATCH</a>,
-00065     <a class="code" href="group__osclio.html#a27a13">OSCL_FILEMGMT_E_UNKNOWN</a>,
-00066     <a class="code" href="group__osclio.html#a27a14">OSCL_FILEMGMT_E_SYS_SPECIFIC</a>,
-00067     <a class="code" href="group__osclio.html#a27a15">OSCL_FILEMGMT_E_NOT_IMPLEMENTED</a>
-00068 } <a class="code" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a>;
+00058     <a class="code" href="group__osclio.html#a28a6">OSCL_FILEMGMT_E_OK</a> = 0,
+00059     <a class="code" href="group__osclio.html#a28a7">OSCL_FILEMGMT_E_PATH_TOO_LONG</a>,
+00060     <a class="code" href="group__osclio.html#a28a8">OSCL_FILEMGMT_E_PATH_NOT_FOUND</a>,
+00061     <a class="code" href="group__osclio.html#a28a9">OSCL_FILEMGMT_E_ALREADY_EXISTS</a>,
+00062     <a class="code" href="group__osclio.html#a28a10">OSCL_FILEMGMT_E_NOT_EMPTY</a>,
+00063     <a class="code" href="group__osclio.html#a28a11">OSCL_FILEMGMT_E_PERMISSION_DENIED</a>,
+00064     <a class="code" href="group__osclio.html#a28a12">OSCL_FILEMGMT_E_NO_MATCH</a>,
+00065     <a class="code" href="group__osclio.html#a28a13">OSCL_FILEMGMT_E_UNKNOWN</a>,
+00066     <a class="code" href="group__osclio.html#a28a14">OSCL_FILEMGMT_E_SYS_SPECIFIC</a>,
+00067     <a class="code" href="group__osclio.html#a28a15">OSCL_FILEMGMT_E_NOT_IMPLEMENTED</a>
+00068 } <a class="code" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a>;
 00069 
-00077 OSCL_IMPORT_REF <a class="code" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a> <a class="code" href="group__osclio.html#a5">oscl_getcwd</a>(<a class="code" href="group__osclbase.html#a32">oscl_wchar</a> *path, uint32 size);
+00077 OSCL_IMPORT_REF <a class="code" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a> <a class="code" href="group__osclio.html#a5">oscl_getcwd</a>(<a class="code" href="group__osclbase.html#a32">oscl_wchar</a> *path, uint32 size);
 00078 
 00079 
-00087 OSCL_IMPORT_REF <a class="code" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a> <a class="code" href="group__osclio.html#a5">oscl_getcwd</a>(<span class="keywordtype">char</span> *path, uint32 size);
+00087 OSCL_IMPORT_REF <a class="code" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a> <a class="code" href="group__osclio.html#a5">oscl_getcwd</a>(<span class="keywordtype">char</span> *path, uint32 size);
 00088 
 00089 
 00090 
-00097 OSCL_IMPORT_REF <a class="code" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a> <a class="code" href="group__osclio.html#a7">oscl_stat</a>(<span class="keyword">const</span> <a class="code" href="group__osclbase.html#a32">oscl_wchar</a> *path, <a class="code" href="structoscl__stat__buf.html">OSCL_STAT_BUF</a> *statbuf);
+00097 OSCL_IMPORT_REF <a class="code" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a> <a class="code" href="group__osclio.html#a7">oscl_stat</a>(<span class="keyword">const</span> <a class="code" href="group__osclbase.html#a32">oscl_wchar</a> *path, <a class="code" href="structoscl__stat__buf.html">OSCL_STAT_BUF</a> *statbuf);
 00098 
 00099 
-00106 OSCL_IMPORT_REF <a class="code" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a> <a class="code" href="group__osclio.html#a7">oscl_stat</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *path, <a class="code" href="structoscl__stat__buf.html">OSCL_STAT_BUF</a> *statbuf);
+00106 OSCL_IMPORT_REF <a class="code" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a> <a class="code" href="group__osclio.html#a7">oscl_stat</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *path, <a class="code" href="structoscl__stat__buf.html">OSCL_STAT_BUF</a> *statbuf);
 00107 
 00108 
-00115 OSCL_IMPORT_REF <a class="code" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a> <a class="code" href="group__osclio.html#a9">oscl_mkdir</a>(<span class="keyword">const</span> <a class="code" href="group__osclbase.html#a32">oscl_wchar</a> *path);
+00115 OSCL_IMPORT_REF <a class="code" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a> <a class="code" href="group__osclio.html#a9">oscl_mkdir</a>(<span class="keyword">const</span> <a class="code" href="group__osclbase.html#a32">oscl_wchar</a> *path);
 00116 
-00123 OSCL_IMPORT_REF <a class="code" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a> <a class="code" href="group__osclio.html#a9">oscl_mkdir</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *path);
+00123 OSCL_IMPORT_REF <a class="code" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a> <a class="code" href="group__osclio.html#a9">oscl_mkdir</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *path);
 00124 
-00130 OSCL_IMPORT_REF <a class="code" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a> <a class="code" href="group__osclio.html#a11">oscl_rmdir</a>(<span class="keyword">const</span> <a class="code" href="group__osclbase.html#a32">oscl_wchar</a> *path);
+00130 OSCL_IMPORT_REF <a class="code" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a> <a class="code" href="group__osclio.html#a11">oscl_rmdir</a>(<span class="keyword">const</span> <a class="code" href="group__osclbase.html#a32">oscl_wchar</a> *path);
 00131 
-00137 OSCL_IMPORT_REF <a class="code" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a> <a class="code" href="group__osclio.html#a11">oscl_rmdir</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *path);
+00137 OSCL_IMPORT_REF <a class="code" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a> <a class="code" href="group__osclio.html#a11">oscl_rmdir</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *path);
 00138 
-00144 OSCL_IMPORT_REF <a class="code" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a> <a class="code" href="group__osclio.html#a13">oscl_chdir</a>(<span class="keyword">const</span> <a class="code" href="group__osclbase.html#a32">oscl_wchar</a> *path);
+00144 OSCL_IMPORT_REF <a class="code" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a> <a class="code" href="group__osclio.html#a13">oscl_chdir</a>(<span class="keyword">const</span> <a class="code" href="group__osclbase.html#a32">oscl_wchar</a> *path);
 00145 
-00151 OSCL_IMPORT_REF <a class="code" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a> <a class="code" href="group__osclio.html#a13">oscl_chdir</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *path);
+00151 OSCL_IMPORT_REF <a class="code" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a> <a class="code" href="group__osclio.html#a13">oscl_chdir</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *path);
 00152 
-00162 OSCL_IMPORT_REF <a class="code" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a> <a class="code" href="group__osclio.html#a15">oscl_rename</a>(<span class="keyword">const</span> <a class="code" href="group__osclbase.html#a32">oscl_wchar</a> *oldpath, <span class="keyword">const</span> <a class="code" href="group__osclbase.html#a32">oscl_wchar</a> *newpath);
+00162 OSCL_IMPORT_REF <a class="code" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a> <a class="code" href="group__osclio.html#a15">oscl_rename</a>(<span class="keyword">const</span> <a class="code" href="group__osclbase.html#a32">oscl_wchar</a> *oldpath, <span class="keyword">const</span> <a class="code" href="group__osclbase.html#a32">oscl_wchar</a> *newpath);
 00163 
-00170 OSCL_IMPORT_REF <a class="code" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a> <a class="code" href="group__osclio.html#a15">oscl_rename</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *oldpath, <span class="keyword">const</span> <span class="keywordtype">char</span> *newpath);
+00170 OSCL_IMPORT_REF <a class="code" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a> <a class="code" href="group__osclio.html#a15">oscl_rename</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *oldpath, <span class="keyword">const</span> <span class="keywordtype">char</span> *newpath);
 00171 
-00179 OSCL_IMPORT_REF <a class="code" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a> <a class="code" href="group__osclio.html#a17">oscl_statfs</a>(<a class="code" href="structoscl__fsstat.html">OSCL_FSSTAT</a> *stats, <span class="keyword">const</span> <span class="keywordtype">char</span> *path);
-00187 OSCL_IMPORT_REF <a class="code" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a> <a class="code" href="group__osclio.html#a17">oscl_statfs</a>(<a class="code" href="structoscl__fsstat.html">OSCL_FSSTAT</a> *stats, <span class="keyword">const</span> <a class="code" href="group__osclbase.html#a32">oscl_wchar</a> *path);
+00179 OSCL_IMPORT_REF <a class="code" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a> <a class="code" href="group__osclio.html#a17">oscl_statfs</a>(<a class="code" href="structoscl__fsstat.html">OSCL_FSSTAT</a> *stats, <span class="keyword">const</span> <span class="keywordtype">char</span> *path);
+00187 OSCL_IMPORT_REF <a class="code" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a> <a class="code" href="group__osclio.html#a17">oscl_statfs</a>(<a class="code" href="structoscl__fsstat.html">OSCL_FSSTAT</a> *stats, <span class="keyword">const</span> <a class="code" href="group__osclbase.html#a32">oscl_wchar</a> *path);
 00188 
 00189 
 00190 <span class="preprocessor">#endif // OSCL_FILE_DIR_UTILS_H_INCLUDED</span>
 00191 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__file__dir__utils_8h.html b/doc/oscl_html/oscl__file__dir__utils_8h.html
index e852f62..c8f8a97 100644
--- a/doc/oscl_html/oscl__file__dir__utils_8h.html
+++ b/doc/oscl_html/oscl__file__dir__utils_8h.html
@@ -22,42 +22,42 @@
 <tr><td nowrap align=right valign=top>typedef <a class="el" href="structoscl__fsstat.html">oscl_fsstat</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a0">OSCL_FSSTAT</a></td></tr>
 <tr><td nowrap align=right valign=top>typedef <a class="el" href="structoscl__stat__buf.html">oscl_stat_buf</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a1">OSCL_STAT_BUF</a></td></tr>
 <tr><td colspan=2><br><h2>Enumerations</h2></td></tr>
-<tr><td nowrap align=right valign=top>enum &nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a25">OSCL_FILEMGMT_PERMS</a> { <a class="el" href="group__osclio.html#a25a2">OSCL_FILEMGMT_PERMS_READ</a> =  0x1, 
-<a class="el" href="group__osclio.html#a25a3">OSCL_FILEMGMT_PERMS_WRITE</a> =  0x2, 
-<a class="el" href="group__osclio.html#a25a4">OSCL_FILEMGMT_PERMS_EXECUTE</a> =  0x4
+<tr><td nowrap align=right valign=top>enum &nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a26">OSCL_FILEMGMT_PERMS</a> { <a class="el" href="group__osclio.html#a26a2">OSCL_FILEMGMT_PERMS_READ</a> =  0x1, 
+<a class="el" href="group__osclio.html#a26a3">OSCL_FILEMGMT_PERMS_WRITE</a> =  0x2, 
+<a class="el" href="group__osclio.html#a26a4">OSCL_FILEMGMT_PERMS_EXECUTE</a> =  0x4
  }</td></tr>
-<tr><td nowrap align=right valign=top>enum &nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a26">OSCL_FILEMGMT_MODES</a> { <a class="el" href="group__osclio.html#a26a5">OSCL_FILEMGMT_MODE_DIR</a> =  0x1
+<tr><td nowrap align=right valign=top>enum &nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_MODES</a> { <a class="el" href="group__osclio.html#a27a5">OSCL_FILEMGMT_MODE_DIR</a> =  0x1
  }</td></tr>
-<tr><td nowrap align=right valign=top>enum &nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a> { <br>
-&nbsp;&nbsp;<a class="el" href="group__osclio.html#a27a6">OSCL_FILEMGMT_E_OK</a> =  0, 
-<a class="el" href="group__osclio.html#a27a7">OSCL_FILEMGMT_E_PATH_TOO_LONG</a>, 
-<a class="el" href="group__osclio.html#a27a8">OSCL_FILEMGMT_E_PATH_NOT_FOUND</a>, 
-<a class="el" href="group__osclio.html#a27a9">OSCL_FILEMGMT_E_ALREADY_EXISTS</a>, 
+<tr><td nowrap align=right valign=top>enum &nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a> { <br>
+&nbsp;&nbsp;<a class="el" href="group__osclio.html#a28a6">OSCL_FILEMGMT_E_OK</a> =  0, 
+<a class="el" href="group__osclio.html#a28a7">OSCL_FILEMGMT_E_PATH_TOO_LONG</a>, 
+<a class="el" href="group__osclio.html#a28a8">OSCL_FILEMGMT_E_PATH_NOT_FOUND</a>, 
+<a class="el" href="group__osclio.html#a28a9">OSCL_FILEMGMT_E_ALREADY_EXISTS</a>, 
 <br>
-&nbsp;&nbsp;<a class="el" href="group__osclio.html#a27a10">OSCL_FILEMGMT_E_NOT_EMPTY</a>, 
-<a class="el" href="group__osclio.html#a27a11">OSCL_FILEMGMT_E_PERMISSION_DENIED</a>, 
-<a class="el" href="group__osclio.html#a27a12">OSCL_FILEMGMT_E_NO_MATCH</a>, 
-<a class="el" href="group__osclio.html#a27a13">OSCL_FILEMGMT_E_UNKNOWN</a>, 
+&nbsp;&nbsp;<a class="el" href="group__osclio.html#a28a10">OSCL_FILEMGMT_E_NOT_EMPTY</a>, 
+<a class="el" href="group__osclio.html#a28a11">OSCL_FILEMGMT_E_PERMISSION_DENIED</a>, 
+<a class="el" href="group__osclio.html#a28a12">OSCL_FILEMGMT_E_NO_MATCH</a>, 
+<a class="el" href="group__osclio.html#a28a13">OSCL_FILEMGMT_E_UNKNOWN</a>, 
 <br>
-&nbsp;&nbsp;<a class="el" href="group__osclio.html#a27a14">OSCL_FILEMGMT_E_SYS_SPECIFIC</a>, 
-<a class="el" href="group__osclio.html#a27a15">OSCL_FILEMGMT_E_NOT_IMPLEMENTED</a>
+&nbsp;&nbsp;<a class="el" href="group__osclio.html#a28a14">OSCL_FILEMGMT_E_SYS_SPECIFIC</a>, 
+<a class="el" href="group__osclio.html#a28a15">OSCL_FILEMGMT_E_NOT_IMPLEMENTED</a>
 <br>
  }</td></tr>
 <tr><td colspan=2><br><h2>Functions</h2></td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a4">oscl_getcwd</a> (<a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *path, uint32 size)</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a5">oscl_getcwd</a> (char *path, uint32 size)</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a6">oscl_stat</a> (const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *path, <a class="el" href="group__osclio.html#a1">OSCL_STAT_BUF</a> *statbuf)</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a7">oscl_stat</a> (const char *path, <a class="el" href="group__osclio.html#a1">OSCL_STAT_BUF</a> *statbuf)</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a8">oscl_mkdir</a> (const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *path)</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a9">oscl_mkdir</a> (const char *path)</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a10">oscl_rmdir</a> (const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *path)</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a11">oscl_rmdir</a> (const char *path)</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a12">oscl_chdir</a> (const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *path)</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a13">oscl_chdir</a> (const char *path)</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a14">oscl_rename</a> (const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *oldpath, const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *newpath)</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a15">oscl_rename</a> (const char *oldpath, const char *newpath)</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a16">oscl_statfs</a> (<a class="el" href="group__osclio.html#a0">OSCL_FSSTAT</a> *stats, const char *path)</td></tr>
-<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a27">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a17">oscl_statfs</a> (<a class="el" href="group__osclio.html#a0">OSCL_FSSTAT</a> *stats, const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *path)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a4">oscl_getcwd</a> (<a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *path, uint32 size)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a5">oscl_getcwd</a> (char *path, uint32 size)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a6">oscl_stat</a> (const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *path, <a class="el" href="group__osclio.html#a1">OSCL_STAT_BUF</a> *statbuf)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a7">oscl_stat</a> (const char *path, <a class="el" href="group__osclio.html#a1">OSCL_STAT_BUF</a> *statbuf)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a8">oscl_mkdir</a> (const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *path)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a9">oscl_mkdir</a> (const char *path)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a10">oscl_rmdir</a> (const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *path)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a11">oscl_rmdir</a> (const char *path)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a12">oscl_chdir</a> (const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *path)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a13">oscl_chdir</a> (const char *path)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a14">oscl_rename</a> (const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *oldpath, const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *newpath)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a15">oscl_rename</a> (const char *oldpath, const char *newpath)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a16">oscl_statfs</a> (<a class="el" href="group__osclio.html#a0">OSCL_FSSTAT</a> *stats, const char *path)</td></tr>
+<tr><td nowrap align=right valign=top>OSCL_IMPORT_REF <a class="el" href="group__osclio.html#a28">OSCL_FILEMGMT_ERR_TYPE</a>&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a17">oscl_statfs</a> (<a class="el" href="group__osclio.html#a0">OSCL_FSSTAT</a> *stats, const <a class="el" href="group__osclbase.html#a32">oscl_wchar</a> *path)</td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
 The file <a class="el" href="oscl__file__dir__utils_8h.html">oscl_file_dir_utils.h</a> defines some unix-style directory ops.
@@ -65,7 +65,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__file__find_8h-source.html b/doc/oscl_html/oscl__file__find_8h-source.html
index e998ef7..26043e6 100644
--- a/doc/oscl_html/oscl__file__find_8h-source.html
+++ b/doc/oscl_html/oscl__file__find_8h-source.html
@@ -94,7 +94,7 @@
 00157 <span class="preprocessor">#endif // OSCL_FILE_FIND_H_INCLUDED</span>
 00158 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__file__find_8h.html b/doc/oscl_html/oscl__file__find_8h.html
index b34920b..492dba1 100644
--- a/doc/oscl_html/oscl__file__find_8h.html
+++ b/doc/oscl_html/oscl__file__find_8h.html
@@ -27,7 +27,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__file__handle_8h-source.html b/doc/oscl_html/oscl__file__handle_8h-source.html
index b4a2ac1..74497fd 100644
--- a/doc/oscl_html/oscl__file__handle_8h-source.html
+++ b/doc/oscl_html/oscl__file__handle_8h-source.html
@@ -49,7 +49,7 @@
 00062 <span class="preprocessor">#endif // OSCL_FILE_HANDLE_H_INCLUDED</span>
 00063 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__file__handle_8h.html b/doc/oscl_html/oscl__file__handle_8h.html
index f4e0ebf..945b95c 100644
--- a/doc/oscl_html/oscl__file__handle_8h.html
+++ b/doc/oscl_html/oscl__file__handle_8h.html
@@ -26,7 +26,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__file__io_8h-source.html b/doc/oscl_html/oscl__file__io_8h-source.html
index 028976b..d2a60ed 100644
--- a/doc/oscl_html/oscl__file__io_8h-source.html
+++ b/doc/oscl_html/oscl__file__io_8h-source.html
@@ -36,174 +36,176 @@
 00048 <span class="keyword">class </span><a class="code" href="classOsclFileStats.html">OsclFileStats</a>;
 00049 <span class="keyword">class </span><a class="code" href="classOsclNativeFileParams.html">OsclNativeFileParams</a>;
 00050 <span class="keyword">class </span><a class="code" href="classOsclAsyncFile.html">OsclAsyncFile</a>;
-00051 
-<a name="l00052"></a><a class="code" href="classOscl__File.html">00052</a> <span class="keyword">class </span><a class="code" href="classOscl__File.html">Oscl_File</a> : <span class="keyword">public</span> <a class="code" href="classHeapBase.html">HeapBase</a>
-00053 {
-00054     <span class="keyword">public</span>:
-00055 
-<a name="l00056"></a><a class="code" href="classOscl__File.html#s11">00056</a>         <span class="keyword">typedef</span> <span class="keyword">enum</span>
-00057         {
-00061             <a class="code" href="classOscl__File.html#s11s0">SEEKSET</a>,
-00065             <a class="code" href="classOscl__File.html#s11s1">SEEKCUR</a>,
-00069             <a class="code" href="classOscl__File.html#s11s2">SEEKEND</a>
-00070         } <a class="code" href="classOscl__File.html#s11">seek_type</a>;
-00071 
-<a name="l00072"></a><a class="code" href="classOscl__File.html#s12">00072</a>         <span class="keyword">typedef</span> <span class="keyword">enum</span>
-00073         {
-00077             <a class="code" href="classOscl__File.html#s12s3">MODE_READ</a> =      0x0001,
-00083             <a class="code" href="classOscl__File.html#s12s4">MODE_READWRITE</a> = 0x0002,
-00090             <a class="code" href="classOscl__File.html#s12s5">MODE_APPEND</a> =    0x0004,
-00094             <a class="code" href="classOscl__File.html#s12s6">MODE_BINARY</a> =    0x0008,
-00098             <a class="code" href="classOscl__File.html#s12s7">MODE_TEXT</a> =      0x0010,
-00103             <a class="code" href="classOscl__File.html#s12s8">MODE_READ_PLUS</a> =  0x0020
-00104 
-00105         } <a class="code" href="classOscl__File.html#s12">mode_type</a>;
-00106 
-00110         OSCL_IMPORT_REF <a class="code" href="classOscl__File.html#a0">Oscl_File</a>();
-00111 
-00117         OSCL_IMPORT_REF <a class="code" href="classOscl__File.html#a0">Oscl_File</a>(uint32 aCacheSize);
-00124         OSCL_IMPORT_REF <a class="code" href="classOscl__File.html#a0">Oscl_File</a>(uint32 aCacheSize, <a class="code" href="classOsclFileHandle.html">OsclFileHandle</a>* aFileHandle);
-00125 
-00129         OSCL_IMPORT_REF <a class="code" href="classOscl__File.html#a3">~Oscl_File</a>();
-00130 
-00140         OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOscl__File.html#a4">SetPVCacheSize</a>(uint32 aSize);
-00141 
-00152         OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOscl__File.html#a5">SetNativeAccessMode</a>(uint32 aMode);
-00153 
-<a name="l00157"></a><a class="code" href="classOscl__File.html#s13">00157</a>         <span class="keyword">enum</span> <a class="code" href="classOscl__File.html#s13">TSymbianAccessMode</a>
-00158         {
-00159             <a class="code" href="classOscl__File.html#s13s9">ESymbianAccessMode_Rfile</a> = 0
-00160             , <a class="code" href="classOscl__File.html#s13s10">ESymbianAccessMode_RfileBuf</a> = 1
-00161         };
-00162 
-00177         OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOscl__File.html#a6">SetNativeBufferSize</a>(int32 aSize);
-00178 
-00192         OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOscl__File.html#a7">SetAsyncReadBufferSize</a>(uint32 aSize);
-00193 
-00210         OSCL_IMPORT_REF int32 <a class="code" href="classOscl__File.html#a8">SetFileHandle</a>(<a class="code" href="classOsclFileHandle.html">OsclFileHandle</a>* aHandle);
-00211 
-00225         OSCL_IMPORT_REF int32 <a class="code" href="classOscl__File.html#a9">Open</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *filename, uint32 mode, <a class="code" href="classOscl__FileServer.html">Oscl_FileServer</a>&amp; fileserv);
-00226 
-00239         OSCL_IMPORT_REF int32 <a class="code" href="classOscl__File.html#a9">Open</a>(<span class="keyword">const</span> <a class="code" href="group__osclbase.html#a32">oscl_wchar</a> *filename, uint32 mode, <a class="code" href="classOscl__FileServer.html">Oscl_FileServer</a>&amp; fileserv);
-00240 
-00257         OSCL_IMPORT_REF uint32 <a class="code" href="classOscl__File.html#a11">Read</a>(<a class="code" href="group__osclbase.html#a25">OsclAny</a> *buffer,
-00258                                     uint32 size,
-00259                                     uint32 numelements);
-00260 
-00272         OSCL_IMPORT_REF uint32 <a class="code" href="classOscl__File.html#a12">Write</a>(<span class="keyword">const</span> <a class="code" href="group__osclbase.html#a25">OsclAny</a> *buffer,
-00273                                      uint32 size,
-00274                                      uint32 numelements);
-00275 
+<a name="l00051"></a><a class="code" href="group__osclio.html#a18">00051</a> <span class="preprocessor">#define TOsclFileOffsetInt32 int32</span>
+00052 <span class="preprocessor"></span>
+<a name="l00053"></a><a class="code" href="classOscl__File.html">00053</a> <span class="keyword">class </span><a class="code" href="classOscl__File.html">Oscl_File</a> : <span class="keyword">public</span> <a class="code" href="classHeapBase.html">HeapBase</a>
+00054 {
+00055     <span class="keyword">public</span>:
+00056 
+<a name="l00057"></a><a class="code" href="classOscl__File.html#s11">00057</a>         <span class="keyword">typedef</span> <span class="keyword">enum</span>
+00058         {
+00062             <a class="code" href="classOscl__File.html#s11s0">SEEKSET</a>,
+00066             <a class="code" href="classOscl__File.html#s11s1">SEEKCUR</a>,
+00070             <a class="code" href="classOscl__File.html#s11s2">SEEKEND</a>
+00071         } <a class="code" href="classOscl__File.html#s11">seek_type</a>;
+00072 
+<a name="l00073"></a><a class="code" href="classOscl__File.html#s12">00073</a>         <span class="keyword">typedef</span> <span class="keyword">enum</span>
+00074         {
+00078             <a class="code" href="classOscl__File.html#s12s3">MODE_READ</a> =      0x0001,
+00084             <a class="code" href="classOscl__File.html#s12s4">MODE_READWRITE</a> = 0x0002,
+00091             <a class="code" href="classOscl__File.html#s12s5">MODE_APPEND</a> =    0x0004,
+00095             <a class="code" href="classOscl__File.html#s12s6">MODE_BINARY</a> =    0x0008,
+00099             <a class="code" href="classOscl__File.html#s12s7">MODE_TEXT</a> =      0x0010,
+00104             <a class="code" href="classOscl__File.html#s12s8">MODE_READ_PLUS</a> =  0x0020
+00105 
+00106         } <a class="code" href="classOscl__File.html#s12">mode_type</a>;
+00107 
+00111         OSCL_IMPORT_REF <a class="code" href="classOscl__File.html#a0">Oscl_File</a>();
+00112 
+00118         OSCL_IMPORT_REF <a class="code" href="classOscl__File.html#a0">Oscl_File</a>(uint32 aCacheSize);
+00125         OSCL_IMPORT_REF <a class="code" href="classOscl__File.html#a0">Oscl_File</a>(uint32 aCacheSize, <a class="code" href="classOsclFileHandle.html">OsclFileHandle</a>* aFileHandle);
+00126 
+00130         OSCL_IMPORT_REF <a class="code" href="classOscl__File.html#a3">~Oscl_File</a>();
+00131 
+00141         OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOscl__File.html#a4">SetPVCacheSize</a>(uint32 aSize);
+00142 
+00153         OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOscl__File.html#a5">SetNativeAccessMode</a>(uint32 aMode);
+00154 
+<a name="l00158"></a><a class="code" href="classOscl__File.html#s13">00158</a>         <span class="keyword">enum</span> <a class="code" href="classOscl__File.html#s13">TSymbianAccessMode</a>
+00159         {
+00160             <a class="code" href="classOscl__File.html#s13s9">ESymbianAccessMode_Rfile</a> = 0
+00161             , <a class="code" href="classOscl__File.html#s13s10">ESymbianAccessMode_RfileBuf</a> = 1
+00162         };
+00163 
+00178         OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOscl__File.html#a6">SetNativeBufferSize</a>(int32 aSize);
+00179 
+00193         OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOscl__File.html#a7">SetAsyncReadBufferSize</a>(uint32 aSize);
+00194 
+00211         OSCL_IMPORT_REF int32 <a class="code" href="classOscl__File.html#a8">SetFileHandle</a>(<a class="code" href="classOsclFileHandle.html">OsclFileHandle</a>* aHandle);
+00212 
+00226         OSCL_IMPORT_REF int32 <a class="code" href="classOscl__File.html#a9">Open</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *filename, uint32 mode, <a class="code" href="classOscl__FileServer.html">Oscl_FileServer</a>&amp; fileserv);
+00227 
+00240         OSCL_IMPORT_REF int32 <a class="code" href="classOscl__File.html#a9">Open</a>(<span class="keyword">const</span> <a class="code" href="group__osclbase.html#a32">oscl_wchar</a> *filename, uint32 mode, <a class="code" href="classOscl__FileServer.html">Oscl_FileServer</a>&amp; fileserv);
+00241 
+00258         OSCL_IMPORT_REF uint32 <a class="code" href="classOscl__File.html#a11">Read</a>(<a class="code" href="group__osclbase.html#a25">OsclAny</a> *buffer,
+00259                                     uint32 size,
+00260                                     uint32 numelements);
+00261 
+00273         OSCL_IMPORT_REF uint32 <a class="code" href="classOscl__File.html#a12">Write</a>(<span class="keyword">const</span> <a class="code" href="group__osclbase.html#a25">OsclAny</a> *buffer,
+00274                                      uint32 size,
+00275                                      uint32 numelements);
 00276 
-00286         OSCL_IMPORT_REF int32 <a class="code" href="classOscl__File.html#a13">Seek</a>(int32 offset,
-00287                                    <a class="code" href="classOscl__File.html#s11">seek_type</a> origin);
-00288 
-00293         OSCL_IMPORT_REF int32 <a class="code" href="classOscl__File.html#a14">Tell</a>();
-00294 
+00277 
+00287         OSCL_IMPORT_REF int32 <a class="code" href="classOscl__File.html#a13">Seek</a>(<a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> offset,
+00288                                    <a class="code" href="classOscl__File.html#s11">seek_type</a> origin);
+00289 
+00294         OSCL_IMPORT_REF <a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> <a class="code" href="classOscl__File.html#a14">Tell</a>();
 00295 
-00306         OSCL_IMPORT_REF int32 <a class="code" href="classOscl__File.html#a15">Close</a>();
-00307 
+00296 
+00307         OSCL_IMPORT_REF int32 <a class="code" href="classOscl__File.html#a15">Close</a>();
 00308 
-00316         OSCL_IMPORT_REF int32 <a class="code" href="classOscl__File.html#a16">Flush</a>();
-00317 
+00309 
+00317         OSCL_IMPORT_REF int32 <a class="code" href="classOscl__File.html#a16">Flush</a>();
 00318 
-00326         OSCL_IMPORT_REF int32 <a class="code" href="classOscl__File.html#a17">EndOfFile</a>();
-00327 
+00319 
+00327         OSCL_IMPORT_REF int32 <a class="code" href="classOscl__File.html#a17">EndOfFile</a>();
 00328 
-00336         OSCL_IMPORT_REF int32 <a class="code" href="classOscl__File.html#a18">GetError</a>();
-00337 
-<a name="l00343"></a><a class="code" href="classOscl__File.html#a19">00343</a>         <a class="code" href="classOsclFileHandle.html">OsclFileHandle</a>* <a class="code" href="classOscl__File.html#a19">Handle</a>()
-00344         {
-00345             <span class="keywordflow">return</span> iOpenFileHandle;
-00346         }
-00347 
-00353         OSCL_IMPORT_REF int32 <a class="code" href="classOscl__File.html#a20">Size</a>();
-00354 
-00363         OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOscl__File.html#a21">SetLoggingEnable</a>(<span class="keywordtype">bool</span> aEnable);
-00364 
-00372         OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOscl__File.html#a22">SetSummaryStatsLoggingEnable</a>(<span class="keywordtype">bool</span> aEnable);
-00373 
+00329 
+00337         OSCL_IMPORT_REF int32 <a class="code" href="classOscl__File.html#a18">GetError</a>();
+00338 
+<a name="l00344"></a><a class="code" href="classOscl__File.html#a19">00344</a>         <a class="code" href="classOsclFileHandle.html">OsclFileHandle</a>* <a class="code" href="classOscl__File.html#a19">Handle</a>()
+00345         {
+00346             <span class="keywordflow">return</span> iOpenFileHandle;
+00347         }
+00348 
+00354         OSCL_IMPORT_REF <a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> <a class="code" href="classOscl__File.html#a20">Size</a>();
+00355 
+00364         OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOscl__File.html#a21">SetLoggingEnable</a>(<span class="keywordtype">bool</span> aEnable);
+00365 
+00373         OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOscl__File.html#a22">SetSummaryStatsLoggingEnable</a>(<span class="keywordtype">bool</span> aEnable);
 00374 
-00375     <span class="keyword">private</span>:
-<a name="l00376"></a><a class="code" href="classOscl__File.html#l0">00376</a>         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classOsclFileCache.html">OsclFileCache</a>;
-<a name="l00377"></a><a class="code" href="classOscl__File.html#l1">00377</a>         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classOscl__File.html#l1">asyncfilereadwrite_test</a>;
-<a name="l00378"></a><a class="code" href="classOscl__File.html#l2">00378</a>         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classOscl__File.html#l2">asyncfilereadcancel_test</a>;
-00379 
-00380         <span class="keywordtype">void</span> Construct();
-00381         <span class="keywordtype">void</span> OldCacheDefaults();
-00382         <span class="keywordtype">void</span> OldCacheSelect(uint32);
-00383 
-00384         <span class="comment">//state info</span>
-00385         <span class="keywordtype">bool</span> iIsOpen;
-00386 
-00387         <span class="comment">//For Logging</span>
-00388         <a class="code" href="classPVLogger.html">PVLogger</a>* iLogger;
-00389         <a class="code" href="classPVLogger.html">PVLogger</a>* iStatsLogger;
-00390         <a class="code" href="classPVLogger.html">PVLogger</a>* iNativeLogger;
-00391         <a class="code" href="classPVLogger.html">PVLogger</a>* iAsyncLogger;
-00392         <a class="code" href="classOsclFileStats.html">OsclFileStats</a>* iFileStats;
-00393         <span class="keywordtype">void</span> CreateFileStats();
-00394 
-00395         <span class="comment">//External file handle.</span>
-00396         <a class="code" href="classOsclFileHandle.html">OsclFileHandle</a>* iOpenFileHandle;
-00397 
-00398         <span class="comment">//For PV File Cache</span>
-00399         uint32 iPVCacheSize;
-00400         <a class="code" href="classOsclFileCache.html">OsclFileCache</a>* iFileCache;
-00401 
-00402         int32 OpenFileCacheOrAsyncBuffer(<span class="keyword">const</span> <span class="keywordtype">char</span> *filename
-00403                                          , <span class="keyword">const</span> <a class="code" href="group__osclbase.html#a32">oscl_wchar</a>* wfilename
-00404                                          , uint32 mode
-00405                                          , <span class="keyword">const</span> <a class="code" href="classOsclNativeFileParams.html">OsclNativeFileParams</a>&amp; params
-00406                                          , <a class="code" href="classOscl__FileServer.html">Oscl_FileServer</a>&amp; fileserv) ;
-00407 
-00408         <span class="comment">//For native file I/O.</span>
-00409         <a class="code" href="classOsclNativeFile.html">OsclNativeFile</a>* iNativeFile;
-00410         int32 iNativeBufferSize;
-00411         uint32 iNativeAccessMode;
-00412 
-00413         <span class="comment">//For async read feature</span>
-00414         uint32 iAsyncReadBufferSize;
-00415         <a class="code" href="classOsclAsyncFile.html">OsclAsyncFile</a>* iAsyncFile;
-00416 
-00417         <span class="comment">// These are wrappers to call the Native OS File IO calls with</span>
-00418         <span class="comment">// stats and logging.</span>
-00419 
-00420         int32  CallNativeOpen(<span class="keyword">const</span> <a class="code" href="classOsclFileHandle.html">OsclFileHandle</a>&amp;, uint32 mode
-00421                               , <span class="keyword">const</span> <a class="code" href="classOsclNativeFileParams.html">OsclNativeFileParams</a>&amp; params
-00422                               , <a class="code" href="classOscl__FileServer.html">Oscl_FileServer</a>&amp; fileserv);
-00423         int32  CallNativeOpen(<span class="keyword">const</span> <a class="code" href="group__osclbase.html#a32">oscl_wchar</a> *filename, uint32 mode
-00424                               , <span class="keyword">const</span> <a class="code" href="classOsclNativeFileParams.html">OsclNativeFileParams</a>&amp; params
-00425                               , <a class="code" href="classOscl__FileServer.html">Oscl_FileServer</a>&amp; fileserv);
-00426         int32  CallNativeOpen(<span class="keyword">const</span> <span class="keywordtype">char</span> *filename, uint32 mode
-00427                               , <span class="keyword">const</span> <a class="code" href="classOsclNativeFileParams.html">OsclNativeFileParams</a>&amp; params
-00428                               , <a class="code" href="classOscl__FileServer.html">Oscl_FileServer</a>&amp; fileserv);
-00429         uint32 CallNativeRead(<a class="code" href="group__osclbase.html#a25">OsclAny</a> *buffer, uint32 size, uint32 numelements);
-00430         uint32 CallNativeWrite(<span class="keyword">const</span> <a class="code" href="group__osclbase.html#a25">OsclAny</a> *buffer, uint32 size, uint32 numelements);
-00431         int32  CallNativeSeek(int32 offset, <a class="code" href="classOscl__File.html#s11">Oscl_File::seek_type</a> origin);
-00432         int32  CallNativeTell();
-00433         int32  CallNativeFlush();
-00434         int32  CallNativeEndOfFile();
-00435         int32 CallNativeSize();
-00436         int32 CallNativeClose();
-00437         uint32 CallNativeMode();
-00438         int32 CallNativeGetError();
-00439         OSCL_IMPORT_REF uint32 GetAsyncFileNumOfRun();
-00440         OSCL_IMPORT_REF uint32 GetAsyncFileNumOfRunError();
-00441 
-00442 };
+00375 
+00376     <span class="keyword">private</span>:
+<a name="l00377"></a><a class="code" href="classOscl__File.html#l0">00377</a>         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classOsclFileCache.html">OsclFileCache</a>;
+<a name="l00378"></a><a class="code" href="classOscl__File.html#l1">00378</a>         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classOscl__File.html#l1">asyncfilereadwrite_test</a>;
+<a name="l00379"></a><a class="code" href="classOscl__File.html#l2">00379</a>         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classOscl__File.html#l2">largeasyncfilereadwrite_test</a>;
+<a name="l00380"></a><a class="code" href="classOscl__File.html#l3">00380</a>         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classOscl__File.html#l3">asyncfilereadcancel_test</a>;
+00381 
+00382         <span class="keywordtype">void</span> Construct();
+00383         <span class="keywordtype">void</span> OldCacheDefaults();
+00384         <span class="keywordtype">void</span> OldCacheSelect(uint32);
+00385 
+00386         <span class="comment">//state info</span>
+00387         <span class="keywordtype">bool</span> iIsOpen;
+00388 
+00389         <span class="comment">//For Logging</span>
+00390         <a class="code" href="classPVLogger.html">PVLogger</a>* iLogger;
+00391         <a class="code" href="classPVLogger.html">PVLogger</a>* iStatsLogger;
+00392         <a class="code" href="classPVLogger.html">PVLogger</a>* iNativeLogger;
+00393         <a class="code" href="classPVLogger.html">PVLogger</a>* iAsyncLogger;
+00394         <a class="code" href="classOsclFileStats.html">OsclFileStats</a>* iFileStats;
+00395         <span class="keywordtype">void</span> CreateFileStats();
+00396 
+00397         <span class="comment">//External file handle.</span>
+00398         <a class="code" href="classOsclFileHandle.html">OsclFileHandle</a>* iOpenFileHandle;
+00399 
+00400         <span class="comment">//For PV File Cache</span>
+00401         uint32 iPVCacheSize;
+00402         <a class="code" href="classOsclFileCache.html">OsclFileCache</a>* iFileCache;
+00403 
+00404         int32 OpenFileCacheOrAsyncBuffer(<span class="keyword">const</span> <span class="keywordtype">char</span> *filename
+00405                                          , <span class="keyword">const</span> <a class="code" href="group__osclbase.html#a32">oscl_wchar</a>* wfilename
+00406                                          , uint32 mode
+00407                                          , <span class="keyword">const</span> <a class="code" href="classOsclNativeFileParams.html">OsclNativeFileParams</a>&amp; params
+00408                                          , <a class="code" href="classOscl__FileServer.html">Oscl_FileServer</a>&amp; fileserv) ;
+00409 
+00410         <span class="comment">//For native file I/O.</span>
+00411         <a class="code" href="classOsclNativeFile.html">OsclNativeFile</a>* iNativeFile;
+00412         int32 iNativeBufferSize;
+00413         uint32 iNativeAccessMode;
+00414 
+00415         <span class="comment">//For async read feature</span>
+00416         uint32 iAsyncReadBufferSize;
+00417         <a class="code" href="classOsclAsyncFile.html">OsclAsyncFile</a>* iAsyncFile;
+00418 
+00419         <span class="comment">// These are wrappers to call the Native OS File IO calls with</span>
+00420         <span class="comment">// stats and logging.</span>
+00421 
+00422         int32  CallNativeOpen(<span class="keyword">const</span> <a class="code" href="classOsclFileHandle.html">OsclFileHandle</a>&amp;, uint32 mode
+00423                               , <span class="keyword">const</span> <a class="code" href="classOsclNativeFileParams.html">OsclNativeFileParams</a>&amp; params
+00424                               , <a class="code" href="classOscl__FileServer.html">Oscl_FileServer</a>&amp; fileserv);
+00425         int32  CallNativeOpen(<span class="keyword">const</span> <a class="code" href="group__osclbase.html#a32">oscl_wchar</a> *filename, uint32 mode
+00426                               , <span class="keyword">const</span> <a class="code" href="classOsclNativeFileParams.html">OsclNativeFileParams</a>&amp; params
+00427                               , <a class="code" href="classOscl__FileServer.html">Oscl_FileServer</a>&amp; fileserv);
+00428         int32  CallNativeOpen(<span class="keyword">const</span> <span class="keywordtype">char</span> *filename, uint32 mode
+00429                               , <span class="keyword">const</span> <a class="code" href="classOsclNativeFileParams.html">OsclNativeFileParams</a>&amp; params
+00430                               , <a class="code" href="classOscl__FileServer.html">Oscl_FileServer</a>&amp; fileserv);
+00431         uint32 CallNativeRead(<a class="code" href="group__osclbase.html#a25">OsclAny</a> *buffer, uint32 size, uint32 numelements);
+00432         uint32 CallNativeWrite(<span class="keyword">const</span> <a class="code" href="group__osclbase.html#a25">OsclAny</a> *buffer, uint32 size, uint32 numelements);
+00433         int32  CallNativeSeek(<a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> offset, <a class="code" href="classOscl__File.html#s11">Oscl_File::seek_type</a> origin);
+00434         <a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a>  CallNativeTell();
+00435         int32  CallNativeFlush();
+00436         int32  CallNativeEndOfFile();
+00437         <a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> CallNativeSize();
+00438         int32 CallNativeClose();
+00439         uint32 CallNativeMode();
+00440         int32 CallNativeGetError();
+00441         OSCL_IMPORT_REF uint32 GetAsyncFileNumOfRun();
+00442         OSCL_IMPORT_REF uint32 GetAsyncFileNumOfRunError();
 00443 
-00444 
-00445 <span class="comment">//Include all public file apis for convenience here.</span>
-00446 <span class="preprocessor">#include "<a class="code" href="oscl__file__server_8h.html">oscl_file_server.h</a>"</span>
-00447 <span class="preprocessor">#include "<a class="code" href="oscl__file__find_8h.html">oscl_file_find.h</a>"</span>
-00448 <span class="preprocessor">#include "<a class="code" href="oscl__file__dir__utils_8h.html">oscl_file_dir_utils.h</a>"</span>
-00449 <span class="preprocessor">#include "<a class="code" href="oscl__file__handle_8h.html">oscl_file_handle.h</a>"</span>
-00450 
-00451 <span class="preprocessor">#endif // OSCL_FILE_IO_H_INCLUDED</span>
-00452 <span class="preprocessor"></span>
+00444 };
+00445 
+00446 
+00447 <span class="comment">//Include all public file apis for convenience here.</span>
+00448 <span class="preprocessor">#include "<a class="code" href="oscl__file__server_8h.html">oscl_file_server.h</a>"</span>
+00449 <span class="preprocessor">#include "<a class="code" href="oscl__file__find_8h.html">oscl_file_find.h</a>"</span>
+00450 <span class="preprocessor">#include "<a class="code" href="oscl__file__dir__utils_8h.html">oscl_file_dir_utils.h</a>"</span>
+00451 <span class="preprocessor">#include "<a class="code" href="oscl__file__handle_8h.html">oscl_file_handle.h</a>"</span>
+00452 
+00453 <span class="preprocessor">#endif // OSCL_FILE_IO_H_INCLUDED</span>
+00454 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__file__io_8h.html b/doc/oscl_html/oscl__file__io_8h.html
index 644f6aa..79caf66 100644
--- a/doc/oscl_html/oscl__file__io_8h.html
+++ b/doc/oscl_html/oscl__file__io_8h.html
@@ -22,6 +22,8 @@
 <tr><td></td></tr>
 <tr><td colspan=2><br><h2>Data Structures</h2></td></tr>
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOscl__File.html">Oscl_File</a></td></tr>
+<tr><td colspan=2><br><h2>Defines</h2></td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a18">TOsclFileOffsetInt32</a>&nbsp;&nbsp;&nbsp;int32</td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
 The file <a class="el" href="oscl__file__io_8h.html">oscl_file_io.h</a> defines the class <a class="el" href="classOscl__File.html">Oscl_File</a>. This is the public API to the basic file I/O operations.
@@ -29,7 +31,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__file__native_8h-source.html b/doc/oscl_html/oscl__file__native_8h-source.html
index d4ed77c..f5b17d4 100644
--- a/doc/oscl_html/oscl__file__native_8h-source.html
+++ b/doc/oscl_html/oscl__file__native_8h-source.html
@@ -56,11 +56,11 @@
 00064                     , <a class="code" href="classOscl__FileServer.html">Oscl_FileServer</a>&amp; fileserv);
 00065         uint32 <a class="code" href="classOsclNativeFile.html#a5">Read</a>(<a class="code" href="group__osclbase.html#a25">OsclAny</a> *buffer, uint32 size, uint32 numelements);
 00066         uint32 <a class="code" href="classOsclNativeFile.html#a6">Write</a>(<span class="keyword">const</span> <a class="code" href="group__osclbase.html#a25">OsclAny</a> *buffer, uint32 size, uint32 numelements);
-00067         int32  <a class="code" href="classOsclNativeFile.html#a7">Seek</a>(int32 offset, <a class="code" href="classOscl__File.html#s11">Oscl_File::seek_type</a> origin);
-00068         int32  <a class="code" href="classOsclNativeFile.html#a8">Tell</a>();
+00067         int32  <a class="code" href="classOsclNativeFile.html#a7">Seek</a>(<a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> offset, <a class="code" href="classOscl__File.html#s11">Oscl_File::seek_type</a> origin);
+00068         <a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a>  <a class="code" href="classOsclNativeFile.html#a8">Tell</a>();
 00069         int32  <a class="code" href="classOsclNativeFile.html#a9">Flush</a>();
 00070         int32  <a class="code" href="classOsclNativeFile.html#a10">EndOfFile</a>();
-00071         int32 <a class="code" href="classOsclNativeFile.html#a11">Size</a>();
+00071         <a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> <a class="code" href="classOsclNativeFile.html#a11">Size</a>();
 00072         int32 <a class="code" href="classOsclNativeFile.html#a12">Close</a>();
 00073 
 00074         <span class="comment">//query for current open mode.</span>
@@ -104,7 +104,7 @@
 00131 <span class="preprocessor">#endif // OSCL_FILE_NATIVE_H_INCLUDED</span>
 00132 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__file__native_8h.html b/doc/oscl_html/oscl__file__native_8h.html
index 70313a5..c650552 100644
--- a/doc/oscl_html/oscl__file__native_8h.html
+++ b/doc/oscl_html/oscl__file__native_8h.html
@@ -27,7 +27,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__file__server_8h-source.html b/doc/oscl_html/oscl__file__server_8h-source.html
index b8e0967..3356e44 100644
--- a/doc/oscl_html/oscl__file__server_8h-source.html
+++ b/doc/oscl_html/oscl__file__server_8h-source.html
@@ -54,7 +54,7 @@
 00087 <span class="preprocessor">#endif // OSCL_FILE_SERVER_H_INCLUDED</span>
 00088 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__file__server_8h.html b/doc/oscl_html/oscl__file__server_8h.html
index 84dcc28..af98dca 100644
--- a/doc/oscl_html/oscl__file__server_8h.html
+++ b/doc/oscl_html/oscl__file__server_8h.html
@@ -24,7 +24,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__file__stats_8h-source.html b/doc/oscl_html/oscl__file__stats_8h-source.html
index 0f9fa5d..b082a07 100644
--- a/doc/oscl_html/oscl__file__stats_8h-source.html
+++ b/doc/oscl_html/oscl__file__stats_8h-source.html
@@ -17,88 +17,89 @@
 00020 <span class="preprocessor"></span><span class="preprocessor">#define OSCL_FILE_STATS_H_INCLUDED</span>
 00021 <span class="preprocessor"></span>
 00022 <span class="preprocessor">#include "<a class="code" href="oscl__base_8h.html">oscl_base.h</a>"</span>
-00023 
-<a name="l00024"></a><a class="code" href="group__osclio.html#a18">00024</a> <span class="preprocessor">#define OSCL_FILE_STATS_LOGGER_NODE "OsclFileStats"</span>
-00025 <span class="preprocessor"></span>
-<a name="l00026"></a><a class="code" href="classOsclFileStatsItem.html">00026</a> <span class="keyword">class </span><a class="code" href="classOsclFileStatsItem.html">OsclFileStatsItem</a>
-00027 {
-00028     <span class="keyword">public</span>:
-<a name="l00029"></a><a class="code" href="classOsclFileStatsItem.html#m0">00029</a>         uint32 <a class="code" href="classOsclFileStatsItem.html#m0">iOpCount</a>;
-<a name="l00030"></a><a class="code" href="classOsclFileStatsItem.html#m1">00030</a>         uint32 <a class="code" href="classOsclFileStatsItem.html#m1">iParam</a>;
-<a name="l00031"></a><a class="code" href="classOsclFileStatsItem.html#m2">00031</a>         uint32 <a class="code" href="classOsclFileStatsItem.html#m2">iParam2</a>;
-<a name="l00032"></a><a class="code" href="classOsclFileStatsItem.html#m3">00032</a>         uint32 <a class="code" href="classOsclFileStatsItem.html#m3">iStartTick</a>;
-<a name="l00033"></a><a class="code" href="classOsclFileStatsItem.html#m4">00033</a>         uint32 <a class="code" href="classOsclFileStatsItem.html#m4">iTotalTicks</a>;
-00034 };
-00035 
-<a name="l00036"></a><a class="code" href="group__osclio.html#a28">00036</a> <span class="keyword">enum</span> <a class="code" href="group__osclio.html#a28">TOsclFileOp</a>
-00037 {
-00038     <a class="code" href="group__osclio.html#a28a2">EOsclFileOp_Open</a>
-00039     , <a class="code" href="group__osclio.html#a28a3">EOsclFileOp_Close</a>
-00040     , <a class="code" href="group__osclio.html#a28a4">EOsclFileOp_Read</a>
-00041     , <a class="code" href="group__osclio.html#a28a5">EOsclFileOp_Write</a>
-00042     , <a class="code" href="group__osclio.html#a28a6">EOsclFileOp_Seek</a>
-00043     , <a class="code" href="group__osclio.html#a28a7">EOsclFileOp_Tell</a>
-00044     , <a class="code" href="group__osclio.html#a28a8">EOsclFileOp_Size</a>
-00045     , <a class="code" href="group__osclio.html#a28a9">EOsclFileOp_Flush</a>
-00046     , <a class="code" href="group__osclio.html#a28a10">EOsclFileOp_EndOfFile</a>
-00047     , <a class="code" href="group__osclio.html#a28a11">EOsclFileOp_NativeOpen</a>
-00048     , <a class="code" href="group__osclio.html#a28a12">EOsclFileOp_NativeClose</a>
-00049     , <a class="code" href="group__osclio.html#a28a13">EOsclFileOp_NativeRead</a>
-00050     , <a class="code" href="group__osclio.html#a28a14">EOsclFileOp_NativeWrite</a>
-00051     , <a class="code" href="group__osclio.html#a28a15">EOsclFileOp_NativeSeek</a>
-00052     , <a class="code" href="group__osclio.html#a28a16">EOsclFileOp_NativeTell</a>
-00053     , <a class="code" href="group__osclio.html#a28a17">EOsclFileOp_NativeSize</a>
-00054     , <a class="code" href="group__osclio.html#a28a18">EOsclFileOp_NativeFlush</a>
-00055     , <a class="code" href="group__osclio.html#a28a19">EOsclFileOp_NativeEndOfFile</a>
-00056     , <a class="code" href="group__osclio.html#a28a20">EOsclFileOp_Last</a>
-00057 };
-00058 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span> TOsclFileOpStr[] =
-00059 {
-00060     <span class="stringliteral">"Open"</span>
-00061     , <span class="stringliteral">"Close"</span>
-00062     , <span class="stringliteral">"Read"</span>
-00063     , <span class="stringliteral">"Write"</span>
-00064     , <span class="stringliteral">"Seek"</span>
-00065     , <span class="stringliteral">"Tell"</span>
-00066     , <span class="stringliteral">"Size"</span>
-00067     , <span class="stringliteral">"Flush"</span>
-00068     , <span class="stringliteral">"EndOfFile"</span>
-00069     , <span class="stringliteral">"NativeOpen"</span>
-00070     , <span class="stringliteral">"NativeClose"</span>
-00071     , <span class="stringliteral">"NativeRead"</span>
-00072     , <span class="stringliteral">"NativeWrite"</span>
-00073     , <span class="stringliteral">"NativeSeek"</span>
-00074     , <span class="stringliteral">"NativeTell"</span>
-00075     , <span class="stringliteral">"NativeSize"</span>
-00076     , <span class="stringliteral">"NativeFlush"</span>
-00077     , <span class="stringliteral">"NativeEndOfFile"</span>
-00078     , <span class="stringliteral">"???"</span>
-00079 };
-00080 
-00081 <span class="keyword">class </span><a class="code" href="classPVLogger.html">PVLogger</a>;
-00082 <span class="keyword">class </span><a class="code" href="classOscl__File.html">Oscl_File</a>;
-00083 
-<a name="l00084"></a><a class="code" href="classOsclFileStats.html">00084</a> <span class="keyword">class </span><a class="code" href="classOsclFileStats.html">OsclFileStats</a>
-00085 {
-00086     <span class="keyword">public</span>:
-00087         <a class="code" href="classOsclFileStats.html#a0">OsclFileStats</a>(<a class="code" href="classOscl__File.html">Oscl_File</a>* c);
-00088         <span class="keywordtype">void</span> <a class="code" href="classOsclFileStats.html#a1">Start</a>(uint32&amp; aTicks);
-00089         <span class="keywordtype">void</span> <a class="code" href="classOsclFileStats.html#a2">End</a>(<a class="code" href="group__osclio.html#a28">TOsclFileOp</a> aOp, uint32 aStart, uint32 aParam = 0, uint32 aParam2 = 0);
-00090         <span class="keywordtype">void</span> <a class="code" href="classOsclFileStats.html#a3">Log</a>(<a class="code" href="group__osclio.html#a28">TOsclFileOp</a>, <a class="code" href="classPVLogger.html">PVLogger</a>*, uint32);
-00091         <span class="keywordtype">void</span> <a class="code" href="classOsclFileStats.html#a4">LogAll</a>(<a class="code" href="classPVLogger.html">PVLogger</a>*, uint32);
-00092 
-00093     <span class="keyword">private</span>:
-00094         <a class="code" href="classOscl__File.html">Oscl_File</a>* iContainer;
-00095         <span class="comment">//fixed array of the max time per item.</span>
-00096         <a class="code" href="classOsclFileStatsItem.html">OsclFileStatsItem</a> iStats[<a class="code" href="group__osclio.html#a28a20">EOsclFileOp_Last</a>];
-00097 };
-00098 
+00023 <span class="preprocessor">#include "<a class="code" href="osclconfig__io_8h.html">osclconfig_io.h</a>"</span>
+00024 
+<a name="l00025"></a><a class="code" href="group__osclio.html#a19">00025</a> <span class="preprocessor">#define OSCL_FILE_STATS_LOGGER_NODE "OsclFileStats"</span>
+00026 <span class="preprocessor"></span>
+<a name="l00027"></a><a class="code" href="classOsclFileStatsItem.html">00027</a> <span class="keyword">class </span><a class="code" href="classOsclFileStatsItem.html">OsclFileStatsItem</a>
+00028 {
+00029     <span class="keyword">public</span>:
+<a name="l00030"></a><a class="code" href="classOsclFileStatsItem.html#m0">00030</a>         uint32 <a class="code" href="classOsclFileStatsItem.html#m0">iOpCount</a>;
+<a name="l00031"></a><a class="code" href="classOsclFileStatsItem.html#m1">00031</a>         uint32 <a class="code" href="classOsclFileStatsItem.html#m1">iParam</a>;
+<a name="l00032"></a><a class="code" href="classOsclFileStatsItem.html#m2">00032</a>         <a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> <a class="code" href="classOsclFileStatsItem.html#m2">iParam2</a>;
+<a name="l00033"></a><a class="code" href="classOsclFileStatsItem.html#m3">00033</a>         uint32 <a class="code" href="classOsclFileStatsItem.html#m3">iStartTick</a>;
+<a name="l00034"></a><a class="code" href="classOsclFileStatsItem.html#m4">00034</a>         uint32 <a class="code" href="classOsclFileStatsItem.html#m4">iTotalTicks</a>;
+00035 };
+00036 
+<a name="l00037"></a><a class="code" href="group__osclio.html#a29">00037</a> <span class="keyword">enum</span> <a class="code" href="group__osclio.html#a29">TOsclFileOp</a>
+00038 {
+00039     <a class="code" href="group__osclio.html#a29a2">EOsclFileOp_Open</a>
+00040     , <a class="code" href="group__osclio.html#a29a3">EOsclFileOp_Close</a>
+00041     , <a class="code" href="group__osclio.html#a29a4">EOsclFileOp_Read</a>
+00042     , <a class="code" href="group__osclio.html#a29a5">EOsclFileOp_Write</a>
+00043     , <a class="code" href="group__osclio.html#a29a6">EOsclFileOp_Seek</a>
+00044     , <a class="code" href="group__osclio.html#a29a7">EOsclFileOp_Tell</a>
+00045     , <a class="code" href="group__osclio.html#a29a8">EOsclFileOp_Size</a>
+00046     , <a class="code" href="group__osclio.html#a29a9">EOsclFileOp_Flush</a>
+00047     , <a class="code" href="group__osclio.html#a29a10">EOsclFileOp_EndOfFile</a>
+00048     , <a class="code" href="group__osclio.html#a29a11">EOsclFileOp_NativeOpen</a>
+00049     , <a class="code" href="group__osclio.html#a29a12">EOsclFileOp_NativeClose</a>
+00050     , <a class="code" href="group__osclio.html#a29a13">EOsclFileOp_NativeRead</a>
+00051     , <a class="code" href="group__osclio.html#a29a14">EOsclFileOp_NativeWrite</a>
+00052     , <a class="code" href="group__osclio.html#a29a15">EOsclFileOp_NativeSeek</a>
+00053     , <a class="code" href="group__osclio.html#a29a16">EOsclFileOp_NativeTell</a>
+00054     , <a class="code" href="group__osclio.html#a29a17">EOsclFileOp_NativeSize</a>
+00055     , <a class="code" href="group__osclio.html#a29a18">EOsclFileOp_NativeFlush</a>
+00056     , <a class="code" href="group__osclio.html#a29a19">EOsclFileOp_NativeEndOfFile</a>
+00057     , <a class="code" href="group__osclio.html#a29a20">EOsclFileOp_Last</a>
+00058 };
+00059 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span> TOsclFileOpStr[] =
+00060 {
+00061     <span class="stringliteral">"Open"</span>
+00062     , <span class="stringliteral">"Close"</span>
+00063     , <span class="stringliteral">"Read"</span>
+00064     , <span class="stringliteral">"Write"</span>
+00065     , <span class="stringliteral">"Seek"</span>
+00066     , <span class="stringliteral">"Tell"</span>
+00067     , <span class="stringliteral">"Size"</span>
+00068     , <span class="stringliteral">"Flush"</span>
+00069     , <span class="stringliteral">"EndOfFile"</span>
+00070     , <span class="stringliteral">"NativeOpen"</span>
+00071     , <span class="stringliteral">"NativeClose"</span>
+00072     , <span class="stringliteral">"NativeRead"</span>
+00073     , <span class="stringliteral">"NativeWrite"</span>
+00074     , <span class="stringliteral">"NativeSeek"</span>
+00075     , <span class="stringliteral">"NativeTell"</span>
+00076     , <span class="stringliteral">"NativeSize"</span>
+00077     , <span class="stringliteral">"NativeFlush"</span>
+00078     , <span class="stringliteral">"NativeEndOfFile"</span>
+00079     , <span class="stringliteral">"???"</span>
+00080 };
+00081 
+00082 <span class="keyword">class </span><a class="code" href="classPVLogger.html">PVLogger</a>;
+00083 <span class="keyword">class </span><a class="code" href="classOscl__File.html">Oscl_File</a>;
+00084 
+<a name="l00085"></a><a class="code" href="classOsclFileStats.html">00085</a> <span class="keyword">class </span><a class="code" href="classOsclFileStats.html">OsclFileStats</a>
+00086 {
+00087     <span class="keyword">public</span>:
+00088         <a class="code" href="classOsclFileStats.html#a0">OsclFileStats</a>(<a class="code" href="classOscl__File.html">Oscl_File</a>* c);
+00089         <span class="keywordtype">void</span> <a class="code" href="classOsclFileStats.html#a1">Start</a>(uint32&amp; aTicks);
+00090         <span class="keywordtype">void</span> <a class="code" href="classOsclFileStats.html#a2">End</a>(<a class="code" href="group__osclio.html#a29">TOsclFileOp</a> aOp, uint32 aStart, uint32 aParam = 0, <a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> aParam2 = 0);
+00091         <span class="keywordtype">void</span> <a class="code" href="classOsclFileStats.html#a3">Log</a>(<a class="code" href="group__osclio.html#a29">TOsclFileOp</a>, <a class="code" href="classPVLogger.html">PVLogger</a>*, uint32);
+00092         <span class="keywordtype">void</span> <a class="code" href="classOsclFileStats.html#a4">LogAll</a>(<a class="code" href="classPVLogger.html">PVLogger</a>*, uint32);
+00093 
+00094     <span class="keyword">private</span>:
+00095         <a class="code" href="classOscl__File.html">Oscl_File</a>* iContainer;
+00096         <span class="comment">//fixed array of the max time per item.</span>
+00097         <a class="code" href="classOsclFileStatsItem.html">OsclFileStatsItem</a> iStats[<a class="code" href="group__osclio.html#a29a20">EOsclFileOp_Last</a>];
+00098 };
 00099 
 00100 
-00101 <span class="preprocessor">#endif</span>
-00102 <span class="preprocessor"></span>
+00101 
+00102 <span class="preprocessor">#endif</span>
+00103 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__file__stats_8h.html b/doc/oscl_html/oscl__file__stats_8h.html
index f1e0dba..6d9b3ac 100644
--- a/doc/oscl_html/oscl__file__stats_8h.html
+++ b/doc/oscl_html/oscl__file__stats_8h.html
@@ -10,6 +10,7 @@
 <a href="#_details">More...</a>
 <p>
 <code>#include "<a class="el" href="oscl__base_8h-source.html">oscl_base.h</a>"</code><br>
+<code>#include "<a class="el" href="osclconfig__io_8h-source.html">osclconfig_io.h</a>"</code><br>
 
 <p>
 <a href="oscl__file__stats_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
@@ -18,32 +19,32 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclFileStats.html">OsclFileStats</a></td></tr>
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclFileStatsItem.html">OsclFileStatsItem</a></td></tr>
 <tr><td colspan=2><br><h2>Defines</h2></td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a18">OSCL_FILE_STATS_LOGGER_NODE</a>&nbsp;&nbsp;&nbsp;"<a class="el" href="classOsclFileStats.html">OsclFileStats</a>"</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a19">OSCL_FILE_STATS_LOGGER_NODE</a>&nbsp;&nbsp;&nbsp;"<a class="el" href="classOsclFileStats.html">OsclFileStats</a>"</td></tr>
 <tr><td colspan=2><br><h2>Enumerations</h2></td></tr>
-<tr><td nowrap align=right valign=top>enum &nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a28">TOsclFileOp</a> { <br>
-&nbsp;&nbsp;<a class="el" href="group__osclio.html#a28a2">EOsclFileOp_Open</a>, 
-<a class="el" href="group__osclio.html#a28a3">EOsclFileOp_Close</a>, 
-<a class="el" href="group__osclio.html#a28a4">EOsclFileOp_Read</a>, 
-<a class="el" href="group__osclio.html#a28a5">EOsclFileOp_Write</a>, 
+<tr><td nowrap align=right valign=top>enum &nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a29">TOsclFileOp</a> { <br>
+&nbsp;&nbsp;<a class="el" href="group__osclio.html#a29a2">EOsclFileOp_Open</a>, 
+<a class="el" href="group__osclio.html#a29a3">EOsclFileOp_Close</a>, 
+<a class="el" href="group__osclio.html#a29a4">EOsclFileOp_Read</a>, 
+<a class="el" href="group__osclio.html#a29a5">EOsclFileOp_Write</a>, 
 <br>
-&nbsp;&nbsp;<a class="el" href="group__osclio.html#a28a6">EOsclFileOp_Seek</a>, 
-<a class="el" href="group__osclio.html#a28a7">EOsclFileOp_Tell</a>, 
-<a class="el" href="group__osclio.html#a28a8">EOsclFileOp_Size</a>, 
-<a class="el" href="group__osclio.html#a28a9">EOsclFileOp_Flush</a>, 
+&nbsp;&nbsp;<a class="el" href="group__osclio.html#a29a6">EOsclFileOp_Seek</a>, 
+<a class="el" href="group__osclio.html#a29a7">EOsclFileOp_Tell</a>, 
+<a class="el" href="group__osclio.html#a29a8">EOsclFileOp_Size</a>, 
+<a class="el" href="group__osclio.html#a29a9">EOsclFileOp_Flush</a>, 
 <br>
-&nbsp;&nbsp;<a class="el" href="group__osclio.html#a28a10">EOsclFileOp_EndOfFile</a>, 
-<a class="el" href="group__osclio.html#a28a11">EOsclFileOp_NativeOpen</a>, 
-<a class="el" href="group__osclio.html#a28a12">EOsclFileOp_NativeClose</a>, 
-<a class="el" href="group__osclio.html#a28a13">EOsclFileOp_NativeRead</a>, 
+&nbsp;&nbsp;<a class="el" href="group__osclio.html#a29a10">EOsclFileOp_EndOfFile</a>, 
+<a class="el" href="group__osclio.html#a29a11">EOsclFileOp_NativeOpen</a>, 
+<a class="el" href="group__osclio.html#a29a12">EOsclFileOp_NativeClose</a>, 
+<a class="el" href="group__osclio.html#a29a13">EOsclFileOp_NativeRead</a>, 
 <br>
-&nbsp;&nbsp;<a class="el" href="group__osclio.html#a28a14">EOsclFileOp_NativeWrite</a>, 
-<a class="el" href="group__osclio.html#a28a15">EOsclFileOp_NativeSeek</a>, 
-<a class="el" href="group__osclio.html#a28a16">EOsclFileOp_NativeTell</a>, 
-<a class="el" href="group__osclio.html#a28a17">EOsclFileOp_NativeSize</a>, 
+&nbsp;&nbsp;<a class="el" href="group__osclio.html#a29a14">EOsclFileOp_NativeWrite</a>, 
+<a class="el" href="group__osclio.html#a29a15">EOsclFileOp_NativeSeek</a>, 
+<a class="el" href="group__osclio.html#a29a16">EOsclFileOp_NativeTell</a>, 
+<a class="el" href="group__osclio.html#a29a17">EOsclFileOp_NativeSize</a>, 
 <br>
-&nbsp;&nbsp;<a class="el" href="group__osclio.html#a28a18">EOsclFileOp_NativeFlush</a>, 
-<a class="el" href="group__osclio.html#a28a19">EOsclFileOp_NativeEndOfFile</a>, 
-<a class="el" href="group__osclio.html#a28a20">EOsclFileOp_Last</a>
+&nbsp;&nbsp;<a class="el" href="group__osclio.html#a29a18">EOsclFileOp_NativeFlush</a>, 
+<a class="el" href="group__osclio.html#a29a19">EOsclFileOp_NativeEndOfFile</a>, 
+<a class="el" href="group__osclio.html#a29a20">EOsclFileOp_Last</a>
 <br>
  }</td></tr>
 </table>
@@ -53,7 +54,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__file__types_8h-source.html b/doc/oscl_html/oscl__file__types_8h-source.html
index b2d71d7..fcc37f4 100644
--- a/doc/oscl_html/oscl__file__types_8h-source.html
+++ b/doc/oscl_html/oscl__file__types_8h-source.html
@@ -17,11 +17,11 @@
 00022 <span class="preprocessor"></span><span class="preprocessor">#define OSCL_FILE_TYPES_H_INCLUDED</span>
 00023 <span class="preprocessor"></span>
 00024 
-<a name="l00025"></a><a class="code" href="group__osclio.html#a19">00025</a> <span class="preprocessor">#define OSCL_IO_FILENAME_MAXLEN 512</span>
-<a name="l00026"></a><a class="code" href="group__osclio.html#a20">00026</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_IO_EXTENSION_MAXLEN 512</span>
+<a name="l00025"></a><a class="code" href="group__osclio.html#a20">00025</a> <span class="preprocessor">#define OSCL_IO_FILENAME_MAXLEN 512</span>
+<a name="l00026"></a><a class="code" href="group__osclio.html#a21">00026</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_IO_EXTENSION_MAXLEN 512</span>
 00027 <span class="preprocessor"></span>
-<a name="l00028"></a><a class="code" href="group__osclio.html#a21">00028</a> <span class="preprocessor">#define OSCL_FILE_WCHAR_PATH_DELIMITER _STRLIT("/")</span>
-<a name="l00029"></a><a class="code" href="group__osclio.html#a22">00029</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_FILE_CHAR_PATH_DELIMITER _STRLIT_CHAR("/")</span>
+<a name="l00028"></a><a class="code" href="group__osclio.html#a22">00028</a> <span class="preprocessor">#define OSCL_FILE_WCHAR_PATH_DELIMITER _STRLIT("/")</span>
+<a name="l00029"></a><a class="code" href="group__osclio.html#a23">00029</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_FILE_CHAR_PATH_DELIMITER _STRLIT_CHAR("/")</span>
 00030 <span class="preprocessor"></span>
 00031 <span class="comment">//a class for passing configuration options from Oscl_File to OsclNativeFile</span>
 <a name="l00032"></a><a class="code" href="classOsclNativeFileParams.html">00032</a> <span class="keyword">class </span><a class="code" href="classOsclNativeFileParams.html">OsclNativeFileParams</a>
@@ -41,7 +41,7 @@
 00046 <span class="preprocessor">#endif // OSCL_FILE_TYPES_H_INCLUDED</span>
 00047 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__file__types_8h.html b/doc/oscl_html/oscl__file__types_8h.html
index 44b830a..d003dfb 100644
--- a/doc/oscl_html/oscl__file__types_8h.html
+++ b/doc/oscl_html/oscl__file__types_8h.html
@@ -16,10 +16,10 @@
 <tr><td colspan=2><br><h2>Data Structures</h2></td></tr>
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclNativeFileParams.html">OsclNativeFileParams</a></td></tr>
 <tr><td colspan=2><br><h2>Defines</h2></td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a19">OSCL_IO_FILENAME_MAXLEN</a>&nbsp;&nbsp;&nbsp;512</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a20">OSCL_IO_EXTENSION_MAXLEN</a>&nbsp;&nbsp;&nbsp;512</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a21">OSCL_FILE_WCHAR_PATH_DELIMITER</a>&nbsp;&nbsp;&nbsp;_STRLIT("/")</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a22">OSCL_FILE_CHAR_PATH_DELIMITER</a>&nbsp;&nbsp;&nbsp;_STRLIT_CHAR("/")</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a20">OSCL_IO_FILENAME_MAXLEN</a>&nbsp;&nbsp;&nbsp;512</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a21">OSCL_IO_EXTENSION_MAXLEN</a>&nbsp;&nbsp;&nbsp;512</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a22">OSCL_FILE_WCHAR_PATH_DELIMITER</a>&nbsp;&nbsp;&nbsp;_STRLIT("/")</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="group__osclio.html#a23">OSCL_FILE_CHAR_PATH_DELIMITER</a>&nbsp;&nbsp;&nbsp;_STRLIT_CHAR("/")</td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
 The file <a class="el" href="oscl__file__types_8h.html">oscl_file_types.h</a> defines some constants and types for file I/O implementations. Anything that needs to be shared across implementation modules can go here.
@@ -27,7 +27,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__heapbase_8h-source.html b/doc/oscl_html/oscl__heapbase_8h-source.html
index b8aa667..181ee2f 100644
--- a/doc/oscl_html/oscl__heapbase_8h-source.html
+++ b/doc/oscl_html/oscl__heapbase_8h-source.html
@@ -61,7 +61,7 @@
 00073 <span class="preprocessor"></span>
 00074 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__heapbase_8h.html b/doc/oscl_html/oscl__heapbase_8h.html
index 4824de7..9bfce5e 100644
--- a/doc/oscl_html/oscl__heapbase_8h.html
+++ b/doc/oscl_html/oscl__heapbase_8h.html
@@ -28,7 +28,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__init_8h-source.html b/doc/oscl_html/oscl__init_8h-source.html
index 5a66499..6bf7939 100644
--- a/doc/oscl_html/oscl__init_8h-source.html
+++ b/doc/oscl_html/oscl__init_8h-source.html
@@ -91,7 +91,7 @@
 00121 <span class="preprocessor"></span>
 00122 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__init_8h.html b/doc/oscl_html/oscl__init_8h.html
index 73b8e44..1ddf8a9 100644
--- a/doc/oscl_html/oscl__init_8h.html
+++ b/doc/oscl_html/oscl__init_8h.html
@@ -25,7 +25,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__int64__utils_8h-source.html b/doc/oscl_html/oscl__int64__utils_8h-source.html
index 7fb36c9..8352a95 100644
--- a/doc/oscl_html/oscl__int64__utils_8h-source.html
+++ b/doc/oscl_html/oscl__int64__utils_8h-source.html
@@ -44,7 +44,7 @@
 00049 <span class="preprocessor">#endif</span>
 00050 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__int64__utils_8h.html b/doc/oscl_html/oscl__int64__utils_8h.html
index dac9e9e..3e45292 100644
--- a/doc/oscl_html/oscl__int64__utils_8h.html
+++ b/doc/oscl_html/oscl__int64__utils_8h.html
@@ -44,7 +44,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__ip__socket_8h-source.html b/doc/oscl_html/oscl__ip__socket_8h-source.html
index 01a3931..801b4ba 100644
--- a/doc/oscl_html/oscl__ip__socket_8h-source.html
+++ b/doc/oscl_html/oscl__ip__socket_8h-source.html
@@ -70,7 +70,7 @@
 00064 <span class="preprocessor"></span>
 00065 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__ip__socket_8h.html b/doc/oscl_html/oscl__ip__socket_8h.html
index 783559a..d83cbdc 100644
--- a/doc/oscl_html/oscl__ip__socket_8h.html
+++ b/doc/oscl_html/oscl__ip__socket_8h.html
@@ -17,7 +17,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclIPSocketI.html">OsclIPSocketI</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__linked__list_8h-source.html b/doc/oscl_html/oscl__linked__list_8h-source.html
index 8dbe9a1..d9dadb3 100644
--- a/doc/oscl_html/oscl__linked__list_8h-source.html
+++ b/doc/oscl_html/oscl__linked__list_8h-source.html
@@ -350,7 +350,7 @@
 00562 <span class="preprocessor">#endif  // __LINKED_LIST_H</span>
 00563 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__linked__list_8h.html b/doc/oscl_html/oscl__linked__list_8h.html
index 175ebe6..baff3ba 100644
--- a/doc/oscl_html/oscl__linked__list_8h.html
+++ b/doc/oscl_html/oscl__linked__list_8h.html
@@ -29,7 +29,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__lock__base_8h-source.html b/doc/oscl_html/oscl__lock__base_8h-source.html
index 59ebb7d..5546f40 100644
--- a/doc/oscl_html/oscl__lock__base_8h-source.html
+++ b/doc/oscl_html/oscl__lock__base_8h-source.html
@@ -86,7 +86,7 @@
 00129 
 00133 <span class="preprocessor">#endif</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__lock__base_8h.html b/doc/oscl_html/oscl__lock__base_8h.html
index 5af4e25..0fe9da8 100644
--- a/doc/oscl_html/oscl__lock__base_8h.html
+++ b/doc/oscl_html/oscl__lock__base_8h.html
@@ -25,7 +25,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__map_8h-source.html b/doc/oscl_html/oscl__map_8h-source.html
index 52a7676..d232b37 100644
--- a/doc/oscl_html/oscl__map_8h-source.html
+++ b/doc/oscl_html/oscl__map_8h-source.html
@@ -224,7 +224,7 @@
 00324 
 00328 <span class="preprocessor">#endif</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__map_8h.html b/doc/oscl_html/oscl__map_8h.html
index 23e6c32..3539591 100644
--- a/doc/oscl_html/oscl__map_8h.html
+++ b/doc/oscl_html/oscl__map_8h.html
@@ -53,7 +53,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__math_8h-source.html b/doc/oscl_html/oscl__math_8h-source.html
index f91d21e..a352044 100644
--- a/doc/oscl_html/oscl__math_8h-source.html
+++ b/doc/oscl_html/oscl__math_8h-source.html
@@ -49,7 +49,7 @@
 00109 <span class="preprocessor">#endif</span>
 00110 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__math_8h.html b/doc/oscl_html/oscl__math_8h.html
index 3df1cd9..4f1e5e6 100644
--- a/doc/oscl_html/oscl__math_8h.html
+++ b/doc/oscl_html/oscl__math_8h.html
@@ -35,7 +35,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__media__data_8h-source.html b/doc/oscl_html/oscl__media__data_8h-source.html
index 54423d3..29c1a42 100644
--- a/doc/oscl_html/oscl__media__data_8h-source.html
+++ b/doc/oscl_html/oscl__media__data_8h-source.html
@@ -436,7 +436,7 @@
 00438 <span class="preprocessor">#endif</span>
 00439 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__media__data_8h.html b/doc/oscl_html/oscl__media__data_8h.html
index b324b28..ca55a35 100644
--- a/doc/oscl_html/oscl__media__data_8h.html
+++ b/doc/oscl_html/oscl__media__data_8h.html
@@ -33,7 +33,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__media__status_8h-source.html b/doc/oscl_html/oscl__media__status_8h-source.html
index 64ab3b8..8f286b3 100644
--- a/doc/oscl_html/oscl__media__status_8h-source.html
+++ b/doc/oscl_html/oscl__media__status_8h-source.html
@@ -40,7 +40,7 @@
 00042 <span class="preprocessor">#endif</span>
 00043 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__media__status_8h.html b/doc/oscl_html/oscl__media__status_8h.html
index 7bc2a84..8893558 100644
--- a/doc/oscl_html/oscl__media__status_8h.html
+++ b/doc/oscl_html/oscl__media__status_8h.html
@@ -25,7 +25,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__mem_8h-source.html b/doc/oscl_html/oscl__mem_8h-source.html
index 33bb72b..01c729c 100644
--- a/doc/oscl_html/oscl__mem_8h-source.html
+++ b/doc/oscl_html/oscl__mem_8h-source.html
@@ -672,7 +672,7 @@
 01050 
 01051 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__mem_8h.html b/doc/oscl_html/oscl__mem_8h.html
index 4573a04..b657fad 100644
--- a/doc/oscl_html/oscl__mem_8h.html
+++ b/doc/oscl_html/oscl__mem_8h.html
@@ -175,7 +175,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__mem__align_8h-source.html b/doc/oscl_html/oscl__mem__align_8h-source.html
index af1d827..1ee69dd 100644
--- a/doc/oscl_html/oscl__mem__align_8h-source.html
+++ b/doc/oscl_html/oscl__mem__align_8h-source.html
@@ -7,7 +7,7 @@
 <center>
 <a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="modules.html">Modules</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Data Structures</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Data Fields</a> &nbsp; <a class="qindex" href="globals.html">Globals</a> &nbsp; </center>
 <hr><h1>oscl_mem_align.h</h1><a href="oscl__mem__align_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre></pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__mem__align_8h.html b/doc/oscl_html/oscl__mem__align_8h.html
index 40c9550..60cf846 100644
--- a/doc/oscl_html/oscl__mem__align_8h.html
+++ b/doc/oscl_html/oscl__mem__align_8h.html
@@ -12,7 +12,7 @@
 <tr><td></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__mem__audit_8h-source.html b/doc/oscl_html/oscl__mem__audit_8h-source.html
index 7872351..08ba8c7 100644
--- a/doc/oscl_html/oscl__mem__audit_8h-source.html
+++ b/doc/oscl_html/oscl__mem__audit_8h-source.html
@@ -944,7 +944,7 @@
 01267 <span class="preprocessor">#endif //OSCL_MEM_AUDIT_H_INCLUDED</span>
 01268 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__mem__audit_8h.html b/doc/oscl_html/oscl__mem__audit_8h.html
index aecbbc2..2298997 100644
--- a/doc/oscl_html/oscl__mem__audit_8h.html
+++ b/doc/oscl_html/oscl__mem__audit_8h.html
@@ -90,7 +90,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__mem__audit__internals_8h-source.html b/doc/oscl_html/oscl__mem__audit__internals_8h-source.html
index c7b8f8e..f3b9eb4 100644
--- a/doc/oscl_html/oscl__mem__audit__internals_8h-source.html
+++ b/doc/oscl_html/oscl__mem__audit__internals_8h-source.html
@@ -123,7 +123,7 @@
 00126 <span class="preprocessor">#endif</span>
 00127 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__mem__audit__internals_8h.html b/doc/oscl_html/oscl__mem__audit__internals_8h.html
index ea0a683..08313bf 100644
--- a/doc/oscl_html/oscl__mem__audit__internals_8h.html
+++ b/doc/oscl_html/oscl__mem__audit__internals_8h.html
@@ -63,7 +63,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__mem__auto__ptr_8h-source.html b/doc/oscl_html/oscl__mem__auto__ptr_8h-source.html
index 1a071d4..c3d171f 100644
--- a/doc/oscl_html/oscl__mem__auto__ptr_8h-source.html
+++ b/doc/oscl_html/oscl__mem__auto__ptr_8h-source.html
@@ -157,7 +157,7 @@
 00242 <span class="preprocessor">#endif //OSCL_MEM_AUTO_PTR_H</span>
 00243 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__mem__auto__ptr_8h.html b/doc/oscl_html/oscl__mem__auto__ptr_8h.html
index 2dd8558..36c8d35 100644
--- a/doc/oscl_html/oscl__mem__auto__ptr_8h.html
+++ b/doc/oscl_html/oscl__mem__auto__ptr_8h.html
@@ -52,7 +52,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__mem__basic__functions_8h-source.html b/doc/oscl_html/oscl__mem__basic__functions_8h-source.html
index d27e72c..3f13408 100644
--- a/doc/oscl_html/oscl__mem__basic__functions_8h-source.html
+++ b/doc/oscl_html/oscl__mem__basic__functions_8h-source.html
@@ -106,7 +106,7 @@
 00164 <span class="preprocessor">#endif</span>
 00165 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__mem__basic__functions_8h.html b/doc/oscl_html/oscl__mem__basic__functions_8h.html
index e1c60a1..7764edb 100644
--- a/doc/oscl_html/oscl__mem__basic__functions_8h.html
+++ b/doc/oscl_html/oscl__mem__basic__functions_8h.html
@@ -32,7 +32,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__mem__inst_8h-source.html b/doc/oscl_html/oscl__mem__inst_8h-source.html
index e3e2149..c8e7bd0 100644
--- a/doc/oscl_html/oscl__mem__inst_8h-source.html
+++ b/doc/oscl_html/oscl__mem__inst_8h-source.html
@@ -59,7 +59,7 @@
 00061 
 00064 <span class="preprocessor">#endif</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__mem__inst_8h.html b/doc/oscl_html/oscl__mem__inst_8h.html
index 4ab1dfd..f714691 100644
--- a/doc/oscl_html/oscl__mem__inst_8h.html
+++ b/doc/oscl_html/oscl__mem__inst_8h.html
@@ -23,7 +23,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__mem__mempool_8h-source.html b/doc/oscl_html/oscl__mem__mempool_8h-source.html
index e3167c0..0b53ac2 100644
--- a/doc/oscl_html/oscl__mem__mempool_8h-source.html
+++ b/doc/oscl_html/oscl__mem__mempool_8h-source.html
@@ -197,7 +197,7 @@
 00350 <span class="preprocessor">#endif</span>
 00351 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__mem__mempool_8h.html b/doc/oscl_html/oscl__mem__mempool_8h.html
index 25a7cc6..d8a0843 100644
--- a/doc/oscl_html/oscl__mem__mempool_8h.html
+++ b/doc/oscl_html/oscl__mem__mempool_8h.html
@@ -31,7 +31,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__mempool__allocator_8h-source.html b/doc/oscl_html/oscl__mempool__allocator_8h-source.html
index 77a7744..d2f2808 100644
--- a/doc/oscl_html/oscl__mempool__allocator_8h-source.html
+++ b/doc/oscl_html/oscl__mempool__allocator_8h-source.html
@@ -57,7 +57,7 @@
 00059 
 00060 <span class="preprocessor">#endif</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__mempool__allocator_8h.html b/doc/oscl_html/oscl__mempool__allocator_8h.html
index 7f16040..91e324b 100644
--- a/doc/oscl_html/oscl__mempool__allocator_8h.html
+++ b/doc/oscl_html/oscl__mempool__allocator_8h.html
@@ -23,7 +23,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__mutex_8h-source.html b/doc/oscl_html/oscl__mutex_8h-source.html
index 8dde31e..a928f32 100644
--- a/doc/oscl_html/oscl__mutex_8h-source.html
+++ b/doc/oscl_html/oscl__mutex_8h-source.html
@@ -165,7 +165,7 @@
 00284 
 00285 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__mutex_8h.html b/doc/oscl_html/oscl__mutex_8h.html
index 163686d..80d52f3 100644
--- a/doc/oscl_html/oscl__mutex_8h.html
+++ b/doc/oscl_html/oscl__mutex_8h.html
@@ -59,7 +59,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__namestring_8h-source.html b/doc/oscl_html/oscl__namestring_8h-source.html
index dbc2c7a..43d21db 100644
--- a/doc/oscl_html/oscl__namestring_8h-source.html
+++ b/doc/oscl_html/oscl__namestring_8h-source.html
@@ -75,7 +75,7 @@
 00091 <span class="preprocessor">#endif</span>
 00092 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__namestring_8h.html b/doc/oscl_html/oscl__namestring_8h.html
index c93342c..8a3a9d1 100644
--- a/doc/oscl_html/oscl__namestring_8h.html
+++ b/doc/oscl_html/oscl__namestring_8h.html
@@ -23,7 +23,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__opaque__type_8h-source.html b/doc/oscl_html/oscl__opaque__type_8h-source.html
index 1c4376a..6835b92 100644
--- a/doc/oscl_html/oscl__opaque__type_8h-source.html
+++ b/doc/oscl_html/oscl__opaque__type_8h-source.html
@@ -72,7 +72,7 @@
 00135 
 00136 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__opaque__type_8h.html b/doc/oscl_html/oscl__opaque__type_8h.html
index 5afe74f..189fa63 100644
--- a/doc/oscl_html/oscl__opaque__type_8h.html
+++ b/doc/oscl_html/oscl__opaque__type_8h.html
@@ -25,7 +25,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__priqueue_8h-source.html b/doc/oscl_html/oscl__priqueue_8h-source.html
index 0586d0f..81b7d43 100644
--- a/doc/oscl_html/oscl__priqueue_8h-source.html
+++ b/doc/oscl_html/oscl__priqueue_8h-source.html
@@ -214,7 +214,7 @@
 00230 <span class="preprocessor">#endif</span>
 00231 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__priqueue_8h.html b/doc/oscl_html/oscl__priqueue_8h.html
index f2e55f0..6de0879 100644
--- a/doc/oscl_html/oscl__priqueue_8h.html
+++ b/doc/oscl_html/oscl__priqueue_8h.html
@@ -28,7 +28,7 @@
 Implements a priority queue data structure similar to the STL class. The properties of the class include O(Log_2(N)) insertion and deletion complexity and O(1) complexity to access the top priority item.
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__procstatus_8h-source.html b/doc/oscl_html/oscl__procstatus_8h-source.html
index 1d6e45f..14669d7 100644
--- a/doc/oscl_html/oscl__procstatus_8h-source.html
+++ b/doc/oscl_html/oscl__procstatus_8h-source.html
@@ -89,7 +89,7 @@
 00103 <span class="preprocessor">#endif</span>
 00104 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__procstatus_8h.html b/doc/oscl_html/oscl__procstatus_8h.html
index 336aba3..54519a5 100644
--- a/doc/oscl_html/oscl__procstatus_8h.html
+++ b/doc/oscl_html/oscl__procstatus_8h.html
@@ -14,7 +14,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclProcStatus.html">OsclProcStatus</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__queue_8h-source.html b/doc/oscl_html/oscl__queue_8h-source.html
index 0af777a..86e97f7 100644
--- a/doc/oscl_html/oscl__queue_8h-source.html
+++ b/doc/oscl_html/oscl__queue_8h-source.html
@@ -227,7 +227,7 @@
 00353 <span class="preprocessor"></span>
 00354 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__queue_8h.html b/doc/oscl_html/oscl__queue_8h.html
index c5e799c..e1d8dee 100644
--- a/doc/oscl_html/oscl__queue_8h.html
+++ b/doc/oscl_html/oscl__queue_8h.html
@@ -27,7 +27,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__rand_8h-source.html b/doc/oscl_html/oscl__rand_8h-source.html
index 763c124..828d1a6 100644
--- a/doc/oscl_html/oscl__rand_8h-source.html
+++ b/doc/oscl_html/oscl__rand_8h-source.html
@@ -44,7 +44,7 @@
 00048 <span class="preprocessor">#endif</span>
 00049 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__rand_8h.html b/doc/oscl_html/oscl__rand_8h.html
index 12db970..bfd7cb6 100644
--- a/doc/oscl_html/oscl__rand_8h.html
+++ b/doc/oscl_html/oscl__rand_8h.html
@@ -26,7 +26,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__refcounter_8h-source.html b/doc/oscl_html/oscl__refcounter_8h-source.html
index 00f0065..a1c5ec4 100644
--- a/doc/oscl_html/oscl__refcounter_8h-source.html
+++ b/doc/oscl_html/oscl__refcounter_8h-source.html
@@ -303,7 +303,7 @@
 00468 
 00472 <span class="preprocessor">#endif</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__refcounter_8h.html b/doc/oscl_html/oscl__refcounter_8h.html
index 6277ee6..1e092ff 100644
--- a/doc/oscl_html/oscl__refcounter_8h.html
+++ b/doc/oscl_html/oscl__refcounter_8h.html
@@ -29,7 +29,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__refcounter__memfrag_8h-source.html b/doc/oscl_html/oscl__refcounter__memfrag_8h-source.html
index 7d55379..abf6076 100644
--- a/doc/oscl_html/oscl__refcounter__memfrag_8h-source.html
+++ b/doc/oscl_html/oscl__refcounter__memfrag_8h-source.html
@@ -131,7 +131,7 @@
 00193 
 00197 <span class="preprocessor">#endif // OSCL_REFCOUNTER_MEMFRAG_H</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__refcounter__memfrag_8h.html b/doc/oscl_html/oscl__refcounter__memfrag_8h.html
index adc1d91..b3f7e9a 100644
--- a/doc/oscl_html/oscl__refcounter__memfrag_8h.html
+++ b/doc/oscl_html/oscl__refcounter__memfrag_8h.html
@@ -24,7 +24,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__registry__access__client_8h-source.html b/doc/oscl_html/oscl__registry__access__client_8h-source.html
index beec642..4ae0ffb 100644
--- a/doc/oscl_html/oscl__registry__access__client_8h-source.html
+++ b/doc/oscl_html/oscl__registry__access__client_8h-source.html
@@ -57,7 +57,7 @@
 00079 <span class="preprocessor">#endif   // OSCL_STRING_H_INCLUDED</span>
 00080 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__registry__access__client_8h.html b/doc/oscl_html/oscl__registry__access__client_8h.html
index 6b51b88..fa8a274 100644
--- a/doc/oscl_html/oscl__registry__access__client_8h.html
+++ b/doc/oscl_html/oscl__registry__access__client_8h.html
@@ -26,7 +26,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__registry__client_8h-source.html b/doc/oscl_html/oscl__registry__client_8h-source.html
index a855ff5..8377035 100644
--- a/doc/oscl_html/oscl__registry__client_8h-source.html
+++ b/doc/oscl_html/oscl__registry__client_8h-source.html
@@ -55,7 +55,7 @@
 00079 <span class="preprocessor">#endif //OSCL_REGISTRY_CLIENT_H_INCLUDED</span>
 00080 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__registry__client_8h.html b/doc/oscl_html/oscl__registry__client_8h.html
index f5542a2..92daff3 100644
--- a/doc/oscl_html/oscl__registry__client_8h.html
+++ b/doc/oscl_html/oscl__registry__client_8h.html
@@ -25,7 +25,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__registry__client__impl_8h-source.html b/doc/oscl_html/oscl__registry__client__impl_8h-source.html
index d8beda8..1c41d69 100644
--- a/doc/oscl_html/oscl__registry__client__impl_8h-source.html
+++ b/doc/oscl_html/oscl__registry__client__impl_8h-source.html
@@ -93,7 +93,7 @@
 00096 <span class="preprocessor">#endif //OSCL_REGISTRY_IMPL_H_INCLUDED</span>
 00097 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__registry__client__impl_8h.html b/doc/oscl_html/oscl__registry__client__impl_8h.html
index caca68a..c84ee12 100644
--- a/doc/oscl_html/oscl__registry__client__impl_8h.html
+++ b/doc/oscl_html/oscl__registry__client__impl_8h.html
@@ -31,7 +31,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__registry__serv__impl_8h-source.html b/doc/oscl_html/oscl__registry__serv__impl_8h-source.html
index 98c917c..ba0c99d 100644
--- a/doc/oscl_html/oscl__registry__serv__impl_8h-source.html
+++ b/doc/oscl_html/oscl__registry__serv__impl_8h-source.html
@@ -75,7 +75,7 @@
 00091 <span class="preprocessor">#endif //OSCL_REGISTRY_IMPL_H_INCLUDED</span>
 00092 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__registry__serv__impl_8h.html b/doc/oscl_html/oscl__registry__serv__impl_8h.html
index 282f82d..deb8697 100644
--- a/doc/oscl_html/oscl__registry__serv__impl_8h.html
+++ b/doc/oscl_html/oscl__registry__serv__impl_8h.html
@@ -31,7 +31,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__registry__serv__impl__global_8h-source.html b/doc/oscl_html/oscl__registry__serv__impl__global_8h-source.html
index 0a199ee..1c5a659 100644
--- a/doc/oscl_html/oscl__registry__serv__impl__global_8h-source.html
+++ b/doc/oscl_html/oscl__registry__serv__impl__global_8h-source.html
@@ -65,7 +65,7 @@
 00068 <span class="preprocessor">#endif //OSCL_REGISTRY_IMPL_GLOBAL_H_INCLUDED</span>
 00069 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__registry__serv__impl__global_8h.html b/doc/oscl_html/oscl__registry__serv__impl__global_8h.html
index 50a4cd5..9228498 100644
--- a/doc/oscl_html/oscl__registry__serv__impl__global_8h.html
+++ b/doc/oscl_html/oscl__registry__serv__impl__global_8h.html
@@ -14,7 +14,7 @@
 <tr><td></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__registry__serv__impl__tls_8h-source.html b/doc/oscl_html/oscl__registry__serv__impl__tls_8h-source.html
index 0710261..7d3a689 100644
--- a/doc/oscl_html/oscl__registry__serv__impl__tls_8h-source.html
+++ b/doc/oscl_html/oscl__registry__serv__impl__tls_8h-source.html
@@ -61,7 +61,7 @@
 00064 <span class="preprocessor">#endif //OSCL_REGISTRY_IMPL_TLS_H_INCLUDED</span>
 00065 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__registry__serv__impl__tls_8h.html b/doc/oscl_html/oscl__registry__serv__impl__tls_8h.html
index 75bfcd6..0aa89fa 100644
--- a/doc/oscl_html/oscl__registry__serv__impl__tls_8h.html
+++ b/doc/oscl_html/oscl__registry__serv__impl__tls_8h.html
@@ -19,7 +19,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclRegistryServTlsImpl.html">OsclRegistryServTlsImpl</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__registry__types_8h-source.html b/doc/oscl_html/oscl__registry__types_8h-source.html
index 119fed8..9cb390b 100644
--- a/doc/oscl_html/oscl__registry__types_8h-source.html
+++ b/doc/oscl_html/oscl__registry__types_8h-source.html
@@ -38,7 +38,7 @@
 00049 <span class="preprocessor">#endif   // OSCL_REGISTRY_TYPES_H_INCLUDED</span>
 00050 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__registry__types_8h.html b/doc/oscl_html/oscl__registry__types_8h.html
index e149c54..70706a8 100644
--- a/doc/oscl_html/oscl__registry__types_8h.html
+++ b/doc/oscl_html/oscl__registry__types_8h.html
@@ -26,7 +26,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__scheduler_8h-source.html b/doc/oscl_html/oscl__scheduler_8h-source.html
index e41bfb9..c9a426c 100644
--- a/doc/oscl_html/oscl__scheduler_8h-source.html
+++ b/doc/oscl_html/oscl__scheduler_8h-source.html
@@ -269,7 +269,7 @@
 00386 <span class="preprocessor"></span>
 00387 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__scheduler_8h.html b/doc/oscl_html/oscl__scheduler_8h.html
index 38f1ee2..2aed2f3 100644
--- a/doc/oscl_html/oscl__scheduler_8h.html
+++ b/doc/oscl_html/oscl__scheduler_8h.html
@@ -25,7 +25,7 @@
 <tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="group__osclproc.html#a9">PVSCHEDNAMELEN</a>&nbsp;&nbsp;&nbsp;30</td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__scheduler__ao_8h-source.html b/doc/oscl_html/oscl__scheduler__ao_8h-source.html
index df66542..d24d49c 100644
--- a/doc/oscl_html/oscl__scheduler__ao_8h-source.html
+++ b/doc/oscl_html/oscl__scheduler__ao_8h-source.html
@@ -111,7 +111,7 @@
 00307 <span class="preprocessor">#endif</span>
 00308 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__scheduler__ao_8h.html b/doc/oscl_html/oscl__scheduler__ao_8h.html
index b41893a..abc1c14 100644
--- a/doc/oscl_html/oscl__scheduler__ao_8h.html
+++ b/doc/oscl_html/oscl__scheduler__ao_8h.html
@@ -26,7 +26,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__scheduler__aobase_8h-source.html b/doc/oscl_html/oscl__scheduler__aobase_8h-source.html
index 48484cd..bdd539a 100644
--- a/doc/oscl_html/oscl__scheduler__aobase_8h-source.html
+++ b/doc/oscl_html/oscl__scheduler__aobase_8h-source.html
@@ -184,7 +184,7 @@
 00259 
 00260 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__scheduler__aobase_8h.html b/doc/oscl_html/oscl__scheduler__aobase_8h.html
index f3c567a..aa03d8f 100644
--- a/doc/oscl_html/oscl__scheduler__aobase_8h.html
+++ b/doc/oscl_html/oscl__scheduler__aobase_8h.html
@@ -31,7 +31,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__scheduler__readyq_8h-source.html b/doc/oscl_html/oscl__scheduler__readyq_8h-source.html
index 838a6b6..37a403e 100644
--- a/doc/oscl_html/oscl__scheduler__readyq_8h-source.html
+++ b/doc/oscl_html/oscl__scheduler__readyq_8h-source.html
@@ -158,7 +158,7 @@
 00169 <span class="preprocessor"></span>
 00170 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__scheduler__readyq_8h.html b/doc/oscl_html/oscl__scheduler__readyq_8h.html
index 0fad25d..f78a1e2 100644
--- a/doc/oscl_html/oscl__scheduler__readyq_8h.html
+++ b/doc/oscl_html/oscl__scheduler__readyq_8h.html
@@ -37,7 +37,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__scheduler__threadcontext_8h-source.html b/doc/oscl_html/oscl__scheduler__threadcontext_8h-source.html
index 1247010..e694c87 100644
--- a/doc/oscl_html/oscl__scheduler__threadcontext_8h-source.html
+++ b/doc/oscl_html/oscl__scheduler__threadcontext_8h-source.html
@@ -79,7 +79,7 @@
 00114 <span class="preprocessor"></span>
 00115 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__scheduler__threadcontext_8h.html b/doc/oscl_html/oscl__scheduler__threadcontext_8h.html
index cb3e21c..a68c0ea 100644
--- a/doc/oscl_html/oscl__scheduler__threadcontext_8h.html
+++ b/doc/oscl_html/oscl__scheduler__threadcontext_8h.html
@@ -31,7 +31,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__scheduler__tuneables_8h-source.html b/doc/oscl_html/oscl__scheduler__tuneables_8h-source.html
index fb9ae54..6d7956d 100644
--- a/doc/oscl_html/oscl__scheduler__tuneables_8h-source.html
+++ b/doc/oscl_html/oscl__scheduler__tuneables_8h-source.html
@@ -127,7 +127,7 @@
 00130 <span class="preprocessor"></span>
 00131 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__scheduler__tuneables_8h.html b/doc/oscl_html/oscl__scheduler__tuneables_8h.html
index c724e6b..19a2c0f 100644
--- a/doc/oscl_html/oscl__scheduler__tuneables_8h.html
+++ b/doc/oscl_html/oscl__scheduler__tuneables_8h.html
@@ -30,7 +30,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__scheduler__types_8h-source.html b/doc/oscl_html/oscl__scheduler__types_8h-source.html
index 38b5a10..832c811 100644
--- a/doc/oscl_html/oscl__scheduler__types_8h-source.html
+++ b/doc/oscl_html/oscl__scheduler__types_8h-source.html
@@ -46,7 +46,7 @@
 00060 <span class="preprocessor"></span>
 00061 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__scheduler__types_8h.html b/doc/oscl_html/oscl__scheduler__types_8h.html
index 627b927..7bb5951 100644
--- a/doc/oscl_html/oscl__scheduler__types_8h.html
+++ b/doc/oscl_html/oscl__scheduler__types_8h.html
@@ -25,7 +25,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__semaphore_8h-source.html b/doc/oscl_html/oscl__semaphore_8h-source.html
index c870e6f..799783b 100644
--- a/doc/oscl_html/oscl__semaphore_8h-source.html
+++ b/doc/oscl_html/oscl__semaphore_8h-source.html
@@ -66,7 +66,7 @@
 00128 <span class="preprocessor">#endif  //      END OF File</span>
 00129 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__semaphore_8h.html b/doc/oscl_html/oscl__semaphore_8h.html
index a1c360d..67677ec 100644
--- a/doc/oscl_html/oscl__semaphore_8h.html
+++ b/doc/oscl_html/oscl__semaphore_8h.html
@@ -24,7 +24,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__shared__ptr_8h-source.html b/doc/oscl_html/oscl__shared__ptr_8h-source.html
index 8aa555a..3f5b414 100644
--- a/doc/oscl_html/oscl__shared__ptr_8h-source.html
+++ b/doc/oscl_html/oscl__shared__ptr_8h-source.html
@@ -158,7 +158,7 @@
 00180 
 00181 <span class="preprocessor">#endif  // OSCL_SHARED_PTR_H_INCLUDED</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__shared__ptr_8h.html b/doc/oscl_html/oscl__shared__ptr_8h.html
index 6363257..f31af85 100644
--- a/doc/oscl_html/oscl__shared__ptr_8h.html
+++ b/doc/oscl_html/oscl__shared__ptr_8h.html
@@ -28,7 +28,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__singleton_8h-source.html b/doc/oscl_html/oscl__singleton_8h-source.html
index e429de1..e418b0e 100644
--- a/doc/oscl_html/oscl__singleton_8h-source.html
+++ b/doc/oscl_html/oscl__singleton_8h-source.html
@@ -161,7 +161,7 @@
 00185 <span class="preprocessor">#endif</span>
 00186 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__singleton_8h.html b/doc/oscl_html/oscl__singleton_8h.html
index 8baba3d..5b83830 100644
--- a/doc/oscl_html/oscl__singleton_8h.html
+++ b/doc/oscl_html/oscl__singleton_8h.html
@@ -352,7 +352,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__snprintf_8h-source.html b/doc/oscl_html/oscl__snprintf_8h-source.html
index 387e13d..9555bc1 100644
--- a/doc/oscl_html/oscl__snprintf_8h-source.html
+++ b/doc/oscl_html/oscl__snprintf_8h-source.html
@@ -36,7 +36,7 @@
 00041 <span class="preprocessor">#endif</span>
 00042 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__snprintf_8h.html b/doc/oscl_html/oscl__snprintf_8h.html
index 5b49a82..e106cc5 100644
--- a/doc/oscl_html/oscl__snprintf_8h.html
+++ b/doc/oscl_html/oscl__snprintf_8h.html
@@ -27,7 +27,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket_8h-source.html b/doc/oscl_html/oscl__socket_8h-source.html
index fef29c4..84b67de 100644
--- a/doc/oscl_html/oscl__socket_8h-source.html
+++ b/doc/oscl_html/oscl__socket_8h-source.html
@@ -185,7 +185,7 @@
 00601 <span class="preprocessor"></span>
 00602 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket_8h.html b/doc/oscl_html/oscl__socket_8h.html
index 12756e9..efaa8b8 100644
--- a/doc/oscl_html/oscl__socket_8h.html
+++ b/doc/oscl_html/oscl__socket_8h.html
@@ -30,7 +30,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__accept_8h-source.html b/doc/oscl_html/oscl__socket__accept_8h-source.html
index 15f85ce..7c0b24f 100644
--- a/doc/oscl_html/oscl__socket__accept_8h-source.html
+++ b/doc/oscl_html/oscl__socket__accept_8h-source.html
@@ -79,7 +79,7 @@
 00077 <span class="preprocessor">#endif</span>
 00078 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__accept_8h.html b/doc/oscl_html/oscl__socket__accept_8h.html
index 8d34237..cf9bb50 100644
--- a/doc/oscl_html/oscl__socket__accept_8h.html
+++ b/doc/oscl_html/oscl__socket__accept_8h.html
@@ -18,7 +18,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclAcceptRequest.html">OsclAcceptRequest</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__bind_8h-source.html b/doc/oscl_html/oscl__socket__bind_8h-source.html
index 76ca708..2f57999 100644
--- a/doc/oscl_html/oscl__socket__bind_8h-source.html
+++ b/doc/oscl_html/oscl__socket__bind_8h-source.html
@@ -65,7 +65,7 @@
 00063 
 00064 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__bind_8h.html b/doc/oscl_html/oscl__socket__bind_8h.html
index dc8d4ac..a4e2ae8 100644
--- a/doc/oscl_html/oscl__socket__bind_8h.html
+++ b/doc/oscl_html/oscl__socket__bind_8h.html
@@ -19,7 +19,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclBindRequest.html">OsclBindRequest</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__connect_8h-source.html b/doc/oscl_html/oscl__socket__connect_8h-source.html
index 9ef4fee..65ed569 100644
--- a/doc/oscl_html/oscl__socket__connect_8h-source.html
+++ b/doc/oscl_html/oscl__socket__connect_8h-source.html
@@ -65,7 +65,7 @@
 00063 
 00064 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__connect_8h.html b/doc/oscl_html/oscl__socket__connect_8h.html
index 37b469c..b864c69 100644
--- a/doc/oscl_html/oscl__socket__connect_8h.html
+++ b/doc/oscl_html/oscl__socket__connect_8h.html
@@ -19,7 +19,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclConnectRequest.html">OsclConnectRequest</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__imp_8h-source.html b/doc/oscl_html/oscl__socket__imp_8h-source.html
index 9ba4ff7..f1f1f7d 100644
--- a/doc/oscl_html/oscl__socket__imp_8h-source.html
+++ b/doc/oscl_html/oscl__socket__imp_8h-source.html
@@ -25,7 +25,7 @@
 00020 
 00021 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__imp_8h.html b/doc/oscl_html/oscl__socket__imp_8h.html
index 9d72823..7135aca 100644
--- a/doc/oscl_html/oscl__socket__imp_8h.html
+++ b/doc/oscl_html/oscl__socket__imp_8h.html
@@ -14,7 +14,7 @@
 <tr><td></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__imp__base_8h-source.html b/doc/oscl_html/oscl__socket__imp__base_8h-source.html
index d167131..a9d84ce 100644
--- a/doc/oscl_html/oscl__socket__imp__base_8h-source.html
+++ b/doc/oscl_html/oscl__socket__imp__base_8h-source.html
@@ -104,7 +104,7 @@
 00098 
 00099 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__imp__base_8h.html b/doc/oscl_html/oscl__socket__imp__base_8h.html
index c5a0044..d513585 100644
--- a/doc/oscl_html/oscl__socket__imp__base_8h.html
+++ b/doc/oscl_html/oscl__socket__imp__base_8h.html
@@ -20,7 +20,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclSocketIBase.html">OsclSocketIBase</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__imp__pv_8h-source.html b/doc/oscl_html/oscl__socket__imp__pv_8h-source.html
index f3efe8f..df3497a 100644
--- a/doc/oscl_html/oscl__socket__imp__pv_8h-source.html
+++ b/doc/oscl_html/oscl__socket__imp__pv_8h-source.html
@@ -79,15 +79,15 @@
 00080         <span class="comment">//PV socket server</span>
 00081 
 00082         <span class="comment">//the OS-level socket</span>
-00083         <a class="code" href="osclconfig__io_8h.html#a42">TOsclSocket</a> iSocket;
+00083         <a class="code" href="osclconfig__io_8h.html#a44">TOsclSocket</a> iSocket;
 00084 
 00085     <span class="keyword">public</span>:
-<a name="l00086"></a><a class="code" href="classOsclSocketI.html#a19">00086</a>         <a class="code" href="osclconfig__io_8h.html#a42">TOsclSocket</a> <a class="code" href="classOsclSocketI.html#a19">Socket</a>()
+<a name="l00086"></a><a class="code" href="classOsclSocketI.html#a19">00086</a>         <a class="code" href="osclconfig__io_8h.html#a44">TOsclSocket</a> <a class="code" href="classOsclSocketI.html#a19">Socket</a>()
 00087         {
 00088             <span class="keywordflow">return</span> iSocket;
 00089         }
-00090         <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="classOsclSocketI.html#d1">MakeAddr</a>(<a class="code" href="classOsclNetworkAddress.html">OsclNetworkAddress</a>&amp; in, <a class="code" href="osclconfig__io_8h.html#a43">TOsclSockAddr</a>&amp; addr);
-00091         <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classOsclSocketI.html#d1">MakeAddr</a>(<a class="code" href="osclconfig__io_8h.html#a43">TOsclSockAddr</a>&amp; in, <a class="code" href="classOsclNetworkAddress.html">OsclNetworkAddress</a>&amp; addr);
+00090         <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="classOsclSocketI.html#d1">MakeAddr</a>(<a class="code" href="classOsclNetworkAddress.html">OsclNetworkAddress</a>&amp; in, <a class="code" href="osclconfig__io_8h.html#a45">TOsclSockAddr</a>&amp; addr);
+00091         <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classOsclSocketI.html#d1">MakeAddr</a>(<a class="code" href="osclconfig__io_8h.html#a45">TOsclSockAddr</a>&amp; in, <a class="code" href="classOsclNetworkAddress.html">OsclNetworkAddress</a>&amp; addr);
 00092 
 00093         <span class="comment">//routines to handle each type of socket request under the</span>
 00094         <span class="comment">//server thread.</span>
@@ -143,7 +143,7 @@
 00144 
 00145 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__imp__pv_8h.html b/doc/oscl_html/oscl__socket__imp__pv_8h.html
index 22b4c05..eadd52d 100644
--- a/doc/oscl_html/oscl__socket__imp__pv_8h.html
+++ b/doc/oscl_html/oscl__socket__imp__pv_8h.html
@@ -155,7 +155,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__listen_8h-source.html b/doc/oscl_html/oscl__socket__listen_8h-source.html
index f258578..a54f1e2 100644
--- a/doc/oscl_html/oscl__socket__listen_8h-source.html
+++ b/doc/oscl_html/oscl__socket__listen_8h-source.html
@@ -65,7 +65,7 @@
 00063 
 00064 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__listen_8h.html b/doc/oscl_html/oscl__socket__listen_8h.html
index bb1e496..4246657 100644
--- a/doc/oscl_html/oscl__socket__listen_8h.html
+++ b/doc/oscl_html/oscl__socket__listen_8h.html
@@ -44,7 +44,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__method_8h-source.html b/doc/oscl_html/oscl__socket__method_8h-source.html
index 6593e8b..61e0fb2 100644
--- a/doc/oscl_html/oscl__socket__method_8h-source.html
+++ b/doc/oscl_html/oscl__socket__method_8h-source.html
@@ -177,7 +177,7 @@
 00178 <span class="preprocessor">#endif</span>
 00179 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__method_8h.html b/doc/oscl_html/oscl__socket__method_8h.html
index 3a840b4..4e0f5da 100644
--- a/doc/oscl_html/oscl__socket__method_8h.html
+++ b/doc/oscl_html/oscl__socket__method_8h.html
@@ -48,7 +48,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__recv_8h-source.html b/doc/oscl_html/oscl__socket__recv_8h-source.html
index 83d1f0e..6959348 100644
--- a/doc/oscl_html/oscl__socket__recv_8h-source.html
+++ b/doc/oscl_html/oscl__socket__recv_8h-source.html
@@ -69,7 +69,7 @@
 00067 <span class="preprocessor">#endif</span>
 00068 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__recv_8h.html b/doc/oscl_html/oscl__socket__recv_8h.html
index c36b80b..0049231 100644
--- a/doc/oscl_html/oscl__socket__recv_8h.html
+++ b/doc/oscl_html/oscl__socket__recv_8h.html
@@ -18,7 +18,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclRecvRequest.html">OsclRecvRequest</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__recv__from_8h-source.html b/doc/oscl_html/oscl__socket__recv__from_8h-source.html
index b73ad2e..05c9504 100644
--- a/doc/oscl_html/oscl__socket__recv__from_8h-source.html
+++ b/doc/oscl_html/oscl__socket__recv__from_8h-source.html
@@ -72,7 +72,7 @@
 00070 <span class="preprocessor">#endif</span>
 00071 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__recv__from_8h.html b/doc/oscl_html/oscl__socket__recv__from_8h.html
index e139abe..4bb509f 100644
--- a/doc/oscl_html/oscl__socket__recv__from_8h.html
+++ b/doc/oscl_html/oscl__socket__recv__from_8h.html
@@ -18,7 +18,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclRecvFromRequest.html">OsclRecvFromRequest</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__request_8h-source.html b/doc/oscl_html/oscl__socket__request_8h-source.html
index 36a9e7b..1595957 100644
--- a/doc/oscl_html/oscl__socket__request_8h-source.html
+++ b/doc/oscl_html/oscl__socket__request_8h-source.html
@@ -222,7 +222,7 @@
 00222 <span class="preprocessor">#endif</span>
 00223 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__request_8h.html b/doc/oscl_html/oscl__socket__request_8h.html
index 376a578..750c04d 100644
--- a/doc/oscl_html/oscl__socket__request_8h.html
+++ b/doc/oscl_html/oscl__socket__request_8h.html
@@ -30,7 +30,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classSocketRequestParam.html">SocketRequestParam</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__send_8h-source.html b/doc/oscl_html/oscl__socket__send_8h-source.html
index 5b695cb..48ff356 100644
--- a/doc/oscl_html/oscl__socket__send_8h-source.html
+++ b/doc/oscl_html/oscl__socket__send_8h-source.html
@@ -69,7 +69,7 @@
 00067 <span class="preprocessor">#endif</span>
 00068 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__send_8h.html b/doc/oscl_html/oscl__socket__send_8h.html
index 56ab9e9..b045e11 100644
--- a/doc/oscl_html/oscl__socket__send_8h.html
+++ b/doc/oscl_html/oscl__socket__send_8h.html
@@ -17,7 +17,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclSendRequest.html">OsclSendRequest</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__send__to_8h-source.html b/doc/oscl_html/oscl__socket__send__to_8h-source.html
index 96952ff..ec34cde 100644
--- a/doc/oscl_html/oscl__socket__send__to_8h-source.html
+++ b/doc/oscl_html/oscl__socket__send__to_8h-source.html
@@ -69,7 +69,7 @@
 00067 <span class="preprocessor">#endif</span>
 00068 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__send__to_8h.html b/doc/oscl_html/oscl__socket__send__to_8h.html
index 8a89c73..eec3538 100644
--- a/doc/oscl_html/oscl__socket__send__to_8h.html
+++ b/doc/oscl_html/oscl__socket__send__to_8h.html
@@ -18,7 +18,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclSendToRequest.html">OsclSendToRequest</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__serv__imp_8h-source.html b/doc/oscl_html/oscl__socket__serv__imp_8h-source.html
index 07882cb..101d0d4 100644
--- a/doc/oscl_html/oscl__socket__serv__imp_8h-source.html
+++ b/doc/oscl_html/oscl__socket__serv__imp_8h-source.html
@@ -24,7 +24,7 @@
 00019 
 00020 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__serv__imp_8h.html b/doc/oscl_html/oscl__socket__serv__imp_8h.html
index 276655a..873affc 100644
--- a/doc/oscl_html/oscl__socket__serv__imp_8h.html
+++ b/doc/oscl_html/oscl__socket__serv__imp_8h.html
@@ -15,7 +15,7 @@
 <tr><td></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__serv__imp__base_8h-source.html b/doc/oscl_html/oscl__socket__serv__imp__base_8h-source.html
index 3cd026c..4e709e0 100644
--- a/doc/oscl_html/oscl__socket__serv__imp__base_8h-source.html
+++ b/doc/oscl_html/oscl__socket__serv__imp__base_8h-source.html
@@ -71,7 +71,7 @@
 00068 
 00069 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__serv__imp__base_8h.html b/doc/oscl_html/oscl__socket__serv__imp__base_8h.html
index 3062941..952bf85 100644
--- a/doc/oscl_html/oscl__socket__serv__imp__base_8h.html
+++ b/doc/oscl_html/oscl__socket__serv__imp__base_8h.html
@@ -16,7 +16,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclSocketServIBase.html">OsclSocketServIBase</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__serv__imp__pv_8h-source.html b/doc/oscl_html/oscl__socket__serv__imp__pv_8h-source.html
index 9991939..dc1ac2d 100644
--- a/doc/oscl_html/oscl__socket__serv__imp__pv_8h-source.html
+++ b/doc/oscl_html/oscl__socket__serv__imp__pv_8h-source.html
@@ -59,7 +59,7 @@
 00056                 }
 00057                 <span class="keywordtype">bool</span> iEnable;
 00058                 <span class="keywordtype">void</span> Read();
-00059                 <span class="keywordtype">void</span> ProcessSelect(<a class="code" href="osclconfig__io_8h.html#a42">TOsclSocket</a>&amp;);
+00059                 <span class="keywordtype">void</span> ProcessSelect(<a class="code" href="osclconfig__io_8h.html#a44">TOsclSocket</a>&amp;);
 00060                 <span class="keywordtype">void</span> Init(<a class="code" href="classOsclSocketServI.html">OsclSocketServI</a>* aContainer);
 00061                 <span class="keywordtype">void</span> Cleanup();
 00062                 <span class="keywordtype">void</span> Write();
@@ -67,8 +67,8 @@
 00064 <span class="preprocessor"></span>                OsclSocketStats iStats;
 00065 <span class="preprocessor">#endif</span>
 00066 <span class="preprocessor"></span>            <span class="keyword">private</span>:
-00067                 <a class="code" href="osclconfig__io_8h.html#a43">TOsclSockAddr</a> iAddr;
-00068                 <a class="code" href="osclconfig__io_8h.html#a42">TOsclSocket</a> iSocket;
+00067                 <a class="code" href="osclconfig__io_8h.html#a45">TOsclSockAddr</a> iAddr;
+00068                 <a class="code" href="osclconfig__io_8h.html#a44">TOsclSocket</a> iSocket;
 00069                 <a class="code" href="classOsclSocketServI.html">OsclSocketServI</a>* iContainer;
 00070         };
 00071         <a class="code" href="classOsclSocketServI.html#l1">LoopbackSocket</a> iLoopbackSocket;
@@ -142,7 +142,7 @@
 00141 
 00142 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__serv__imp__pv_8h.html b/doc/oscl_html/oscl__socket__serv__imp__pv_8h.html
index 73ba850..e506882 100644
--- a/doc/oscl_html/oscl__socket__serv__imp__pv_8h.html
+++ b/doc/oscl_html/oscl__socket__serv__imp__pv_8h.html
@@ -89,7 +89,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__serv__imp__reqlist_8h-source.html b/doc/oscl_html/oscl__socket__serv__imp__reqlist_8h-source.html
index 651f863..fbad6e2 100644
--- a/doc/oscl_html/oscl__socket__serv__imp__reqlist_8h-source.html
+++ b/doc/oscl_html/oscl__socket__serv__imp__reqlist_8h-source.html
@@ -84,7 +84,7 @@
 00078 
 00079 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__serv__imp__reqlist_8h.html b/doc/oscl_html/oscl__socket__serv__imp__reqlist_8h.html
index 2ea6381..76464e8 100644
--- a/doc/oscl_html/oscl__socket__serv__imp__reqlist_8h.html
+++ b/doc/oscl_html/oscl__socket__serv__imp__reqlist_8h.html
@@ -19,7 +19,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclSocketServRequestQElem.html">OsclSocketServRequestQElem</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__shutdown_8h-source.html b/doc/oscl_html/oscl__socket__shutdown_8h-source.html
index 3d7681b..bb0cada 100644
--- a/doc/oscl_html/oscl__socket__shutdown_8h-source.html
+++ b/doc/oscl_html/oscl__socket__shutdown_8h-source.html
@@ -58,7 +58,7 @@
 00056 <span class="preprocessor">#endif</span>
 00057 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__shutdown_8h.html b/doc/oscl_html/oscl__socket__shutdown_8h.html
index f168374..859faed 100644
--- a/doc/oscl_html/oscl__socket__shutdown_8h.html
+++ b/doc/oscl_html/oscl__socket__shutdown_8h.html
@@ -17,7 +17,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclShutdownRequest.html">OsclShutdownRequest</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__stats_8h-source.html b/doc/oscl_html/oscl__socket__stats_8h-source.html
index 611a953..456d7bd 100644
--- a/doc/oscl_html/oscl__socket__stats_8h-source.html
+++ b/doc/oscl_html/oscl__socket__stats_8h-source.html
@@ -150,7 +150,7 @@
 00145 
 00146 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__stats_8h.html b/doc/oscl_html/oscl__socket__stats_8h.html
index 5e8083c..8dc95f1 100644
--- a/doc/oscl_html/oscl__socket__stats_8h.html
+++ b/doc/oscl_html/oscl__socket__stats_8h.html
@@ -144,7 +144,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__tuneables_8h-source.html b/doc/oscl_html/oscl__socket__tuneables_8h-source.html
index 35417bc..3d58825 100644
--- a/doc/oscl_html/oscl__socket__tuneables_8h-source.html
+++ b/doc/oscl_html/oscl__socket__tuneables_8h-source.html
@@ -90,7 +90,7 @@
 00163 
 00164 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__tuneables_8h.html b/doc/oscl_html/oscl__socket__tuneables_8h.html
index c32a0cf..dc325cf 100644
--- a/doc/oscl_html/oscl__socket__tuneables_8h.html
+++ b/doc/oscl_html/oscl__socket__tuneables_8h.html
@@ -319,7 +319,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__types_8h-source.html b/doc/oscl_html/oscl__socket__types_8h-source.html
index 7233c4d..9ee087c 100644
--- a/doc/oscl_html/oscl__socket__types_8h-source.html
+++ b/doc/oscl_html/oscl__socket__types_8h-source.html
@@ -89,7 +89,7 @@
 00099 
 00100 <span class="preprocessor">#endif</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__socket__types_8h.html b/doc/oscl_html/oscl__socket__types_8h.html
index fc22387..014cdb9 100644
--- a/doc/oscl_html/oscl__socket__types_8h.html
+++ b/doc/oscl_html/oscl__socket__types_8h.html
@@ -189,7 +189,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__stdstring_8h-source.html b/doc/oscl_html/oscl__stdstring_8h-source.html
index 8e97e04..ccf4e08 100644
--- a/doc/oscl_html/oscl__stdstring_8h-source.html
+++ b/doc/oscl_html/oscl__stdstring_8h-source.html
@@ -91,7 +91,7 @@
 00394 
 00398 <span class="preprocessor">#endif</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__stdstring_8h.html b/doc/oscl_html/oscl__stdstring_8h.html
index 4ec2ea9..272903f 100644
--- a/doc/oscl_html/oscl__stdstring_8h.html
+++ b/doc/oscl_html/oscl__stdstring_8h.html
@@ -55,7 +55,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__str__ptr__len_8h-source.html b/doc/oscl_html/oscl__str__ptr__len_8h-source.html
index 3f7897c..90eee0b 100644
--- a/doc/oscl_html/oscl__str__ptr__len_8h-source.html
+++ b/doc/oscl_html/oscl__str__ptr__len_8h-source.html
@@ -355,7 +355,7 @@
 00365 <span class="preprocessor">#endif // OSCL_STR_PTR_LEN_H_INCLUDED</span>
 00366 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__str__ptr__len_8h.html b/doc/oscl_html/oscl__str__ptr__len_8h.html
index 62fe6d3..33149c9 100644
--- a/doc/oscl_html/oscl__str__ptr__len_8h.html
+++ b/doc/oscl_html/oscl__str__ptr__len_8h.html
@@ -39,7 +39,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__string_8h-source.html b/doc/oscl_html/oscl__string_8h-source.html
index cb97335..8b74212 100644
--- a/doc/oscl_html/oscl__string_8h-source.html
+++ b/doc/oscl_html/oscl__string_8h-source.html
@@ -157,7 +157,7 @@
 00264 <span class="preprocessor">#endif   // OSCL_STRING_H_INCLUDED</span>
 00265 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__string_8h.html b/doc/oscl_html/oscl__string_8h.html
index d5fd65e..21388e6 100644
--- a/doc/oscl_html/oscl__string_8h.html
+++ b/doc/oscl_html/oscl__string_8h.html
@@ -25,7 +25,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__string__containers_8h-source.html b/doc/oscl_html/oscl__string__containers_8h-source.html
index 201d005..410919c 100644
--- a/doc/oscl_html/oscl__string__containers_8h-source.html
+++ b/doc/oscl_html/oscl__string__containers_8h-source.html
@@ -1026,7 +1026,7 @@
 01260 <span class="preprocessor">#endif   // OSCL_STRING_H_INCLUDED</span>
 01261 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__string__containers_8h.html b/doc/oscl_html/oscl__string__containers_8h.html
index 0b1a6ca..f735b23 100644
--- a/doc/oscl_html/oscl__string__containers_8h.html
+++ b/doc/oscl_html/oscl__string__containers_8h.html
@@ -36,7 +36,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__string__rep_8h-source.html b/doc/oscl_html/oscl__string__rep_8h-source.html
index 9a77a75..82cf707 100644
--- a/doc/oscl_html/oscl__string__rep_8h-source.html
+++ b/doc/oscl_html/oscl__string__rep_8h-source.html
@@ -100,7 +100,7 @@
 00111 <span class="preprocessor">#endif   // OSCL_STRING_REP_H_INCLUDED</span>
 00112 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__string__rep_8h.html b/doc/oscl_html/oscl__string__rep_8h.html
index f9be345..9645daf 100644
--- a/doc/oscl_html/oscl__string__rep_8h.html
+++ b/doc/oscl_html/oscl__string__rep_8h.html
@@ -25,7 +25,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__string__uri_8h-source.html b/doc/oscl_html/oscl__string__uri_8h-source.html
index 29e7f25..2e118a5 100644
--- a/doc/oscl_html/oscl__string__uri_8h-source.html
+++ b/doc/oscl_html/oscl__string__uri_8h-source.html
@@ -34,7 +34,7 @@
 00073 <span class="preprocessor">#endif</span>
 00074 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__string__uri_8h.html b/doc/oscl_html/oscl__string__uri_8h.html
index 4efc7d6..4c089b9 100644
--- a/doc/oscl_html/oscl__string__uri_8h.html
+++ b/doc/oscl_html/oscl__string__uri_8h.html
@@ -27,7 +27,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__string__utf8_8h-source.html b/doc/oscl_html/oscl__string__utf8_8h-source.html
index 86c03f2..5af2aaf 100644
--- a/doc/oscl_html/oscl__string__utf8_8h-source.html
+++ b/doc/oscl_html/oscl__string__utf8_8h-source.html
@@ -30,7 +30,7 @@
 00067 <span class="preprocessor">#endif</span>
 00068 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__string__utf8_8h.html b/doc/oscl_html/oscl__string__utf8_8h.html
index 2921bf7..83a4066 100644
--- a/doc/oscl_html/oscl__string__utf8_8h.html
+++ b/doc/oscl_html/oscl__string__utf8_8h.html
@@ -26,7 +26,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__string__utils_8h-source.html b/doc/oscl_html/oscl__string__utils_8h-source.html
index 2f8a128..925098c 100644
--- a/doc/oscl_html/oscl__string__utils_8h-source.html
+++ b/doc/oscl_html/oscl__string__utils_8h-source.html
@@ -48,7 +48,7 @@
 00050 <span class="preprocessor">#endif // OSCL_STRING_UTILS_H_INCLUDED</span>
 00051 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__string__utils_8h.html b/doc/oscl_html/oscl__string__utils_8h.html
index 36f74e3..1bd620b 100644
--- a/doc/oscl_html/oscl__string__utils_8h.html
+++ b/doc/oscl_html/oscl__string__utils_8h.html
@@ -38,7 +38,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__string__xml_8h-source.html b/doc/oscl_html/oscl__string__xml_8h-source.html
index 8f39138..91004bd 100644
--- a/doc/oscl_html/oscl__string__xml_8h-source.html
+++ b/doc/oscl_html/oscl__string__xml_8h-source.html
@@ -30,7 +30,7 @@
 00073 <span class="preprocessor"></span>
 00074 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__string__xml_8h.html b/doc/oscl_html/oscl__string__xml_8h.html
index 86b0d50..be45fbd 100644
--- a/doc/oscl_html/oscl__string__xml_8h.html
+++ b/doc/oscl_html/oscl__string__xml_8h.html
@@ -26,7 +26,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__tagtree_8h-source.html b/doc/oscl_html/oscl__tagtree_8h-source.html
index 1551bd4..8500b2e 100644
--- a/doc/oscl_html/oscl__tagtree_8h-source.html
+++ b/doc/oscl_html/oscl__tagtree_8h-source.html
@@ -489,7 +489,7 @@
 00578 <span class="preprocessor">#endif</span>
 00579 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__tagtree_8h.html b/doc/oscl_html/oscl__tagtree_8h.html
index f611505..eef59b3 100644
--- a/doc/oscl_html/oscl__tagtree_8h.html
+++ b/doc/oscl_html/oscl__tagtree_8h.html
@@ -57,7 +57,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__tcp__socket_8h-source.html b/doc/oscl_html/oscl__tcp__socket_8h-source.html
index 20f9a83..070ab4d 100644
--- a/doc/oscl_html/oscl__tcp__socket_8h-source.html
+++ b/doc/oscl_html/oscl__tcp__socket_8h-source.html
@@ -225,7 +225,7 @@
 00229 <span class="preprocessor">#endif</span>
 00230 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__tcp__socket_8h.html b/doc/oscl_html/oscl__tcp__socket_8h.html
index f36bb67..80179b0 100644
--- a/doc/oscl_html/oscl__tcp__socket_8h.html
+++ b/doc/oscl_html/oscl__tcp__socket_8h.html
@@ -25,7 +25,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclTCPSocketI.html">OsclTCPSocketI</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__thread_8h-source.html b/doc/oscl_html/oscl__thread_8h-source.html
index 481ac63..eb58367 100644
--- a/doc/oscl_html/oscl__thread_8h-source.html
+++ b/doc/oscl_html/oscl__thread_8h-source.html
@@ -50,7 +50,7 @@
 00047 };
 00048 
 00049 <span class="comment">//thread function pointer type.</span>
-<a name="l00050"></a><a class="code" href="oscl__thread_8h.html#a0">00050</a> <span class="keyword">typedef</span> <a class="code" href="osclconfig__proc__unix__nj_8h.html#a8">TOsclThreadFuncRet</a>(OSCL_THREAD_DECL *<a class="code" href="oscl__thread_8h.html#a0">TOsclThreadFuncPtr</a>)(TOsclThreadFuncArg);
+<a name="l00050"></a><a class="code" href="oscl__thread_8h.html#a0">00050</a> <span class="keyword">typedef</span> <a class="code" href="osclconfig__proc__unix__android_8h.html#a8">TOsclThreadFuncRet</a>(OSCL_THREAD_DECL *<a class="code" href="oscl__thread_8h.html#a0">TOsclThreadFuncPtr</a>)(TOsclThreadFuncArg);
 00051 
 <a name="l00058"></a><a class="code" href="classOsclThread.html">00058</a> <span class="keyword">class </span><a class="code" href="classOsclThread.html">OsclThread</a>
 00059 {
@@ -106,7 +106,7 @@
 00214 <span class="preprocessor">#endif</span>
 00215 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__thread_8h.html b/doc/oscl_html/oscl__thread_8h.html
index 940d404..c16883c 100644
--- a/doc/oscl_html/oscl__thread_8h.html
+++ b/doc/oscl_html/oscl__thread_8h.html
@@ -16,7 +16,7 @@
 <tr><td colspan=2><br><h2>Data Structures</h2></td></tr>
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclThread.html">OsclThread</a></td></tr>
 <tr><td colspan=2><br><h2>Typedefs</h2></td></tr>
-<tr><td nowrap align=right valign=top>typedef <a class="el" href="osclconfig__proc__unix__nj_8h.html#a8">TOsclThreadFuncRet</a>(OSCL_THREAD_DECL *&nbsp;</td><td valign=bottom><a class="el" href="oscl__thread_8h.html#a0">TOsclThreadFuncPtr</a> )(<a class="el" href="osclconfig__proc__unix__nj_8h.html#a7">TOsclThreadFuncArg</a>)</td></tr>
+<tr><td nowrap align=right valign=top>typedef <a class="el" href="osclconfig__proc__unix__android_8h.html#a8">TOsclThreadFuncRet</a>(OSCL_THREAD_DECL *&nbsp;</td><td valign=bottom><a class="el" href="oscl__thread_8h.html#a0">TOsclThreadFuncPtr</a> )(<a class="el" href="osclconfig__proc__unix__android_8h.html#a7">TOsclThreadFuncArg</a>)</td></tr>
 <tr><td colspan=2><br><h2>Enumerations</h2></td></tr>
 <tr><td nowrap align=right valign=top>enum &nbsp;</td><td valign=bottom><a class="el" href="oscl__thread_8h.html#a10">OsclThread_State</a> { <a class="el" href="oscl__thread_8h.html#a10a1">Start_on_creation</a>, 
 <a class="el" href="oscl__thread_8h.html#a10a2">Suspend_on_creation</a>
@@ -45,7 +45,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> typedef <a class="el" href="osclconfig__proc__unix__nj_8h.html#a8">TOsclThreadFuncRet</a>(OSCL_THREAD_DECL * TOsclThreadFuncPtr)(<a class="el" href="osclconfig__proc__unix__nj_8h.html#a7">TOsclThreadFuncArg</a>)
+          <td class="md" nowrap valign="top"> typedef <a class="el" href="osclconfig__proc__unix__android_8h.html#a8">TOsclThreadFuncRet</a>(OSCL_THREAD_DECL * TOsclThreadFuncPtr)(<a class="el" href="osclconfig__proc__unix__android_8h.html#a7">TOsclThreadFuncArg</a>)
       </table>
     </td>
   </tr>
@@ -133,7 +133,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__tickcount_8h-source.html b/doc/oscl_html/oscl__tickcount_8h-source.html
index 2b5904e..60f18e9 100644
--- a/doc/oscl_html/oscl__tickcount_8h-source.html
+++ b/doc/oscl_html/oscl__tickcount_8h-source.html
@@ -43,7 +43,7 @@
 00079 <span class="preprocessor">#endif // OSCL_TICK_UTILS_H_INCLUDED</span>
 00080 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__tickcount_8h.html b/doc/oscl_html/oscl__tickcount_8h.html
index d1af447..f4ff440 100644
--- a/doc/oscl_html/oscl__tickcount_8h.html
+++ b/doc/oscl_html/oscl__tickcount_8h.html
@@ -26,7 +26,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__time_8h-source.html b/doc/oscl_html/oscl__time_8h-source.html
index 4264ebf..c174e97 100644
--- a/doc/oscl_html/oscl__time_8h-source.html
+++ b/doc/oscl_html/oscl__time_8h-source.html
@@ -202,7 +202,7 @@
 00311 
 00315 <span class="preprocessor">#endif // OSCL_TIME_H_INCLUDED</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__time_8h.html b/doc/oscl_html/oscl__time_8h.html
index 2392b94..d7275e9 100644
--- a/doc/oscl_html/oscl__time_8h.html
+++ b/doc/oscl_html/oscl__time_8h.html
@@ -48,7 +48,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__timer_8h-source.html b/doc/oscl_html/oscl__timer_8h-source.html
index e3a5f81..917232b 100644
--- a/doc/oscl_html/oscl__timer_8h-source.html
+++ b/doc/oscl_html/oscl__timer_8h-source.html
@@ -364,7 +364,7 @@
 00420 
 00421 <span class="preprocessor">#endif</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__timer_8h.html b/doc/oscl_html/oscl__timer_8h.html
index bf27ea0..00237e3 100644
--- a/doc/oscl_html/oscl__timer_8h.html
+++ b/doc/oscl_html/oscl__timer_8h.html
@@ -24,7 +24,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclTimerObserver.html">OsclTimerObserver</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__tls_8h-source.html b/doc/oscl_html/oscl__tls_8h-source.html
index 1ba6834..85253ac 100644
--- a/doc/oscl_html/oscl__tls_8h-source.html
+++ b/doc/oscl_html/oscl__tls_8h-source.html
@@ -157,7 +157,7 @@
 00187 <span class="preprocessor">#endif</span>
 00188 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__tls_8h.html b/doc/oscl_html/oscl__tls_8h.html
index 0c152f0..4faad40 100644
--- a/doc/oscl_html/oscl__tls_8h.html
+++ b/doc/oscl_html/oscl__tls_8h.html
@@ -38,7 +38,7 @@
 <tr><td nowrap align=right valign=top>const uint32&nbsp;</td><td valign=bottom><a class="el" href="group__osclbase.html#a23">OSCL_TLS_ID_BASE_LAST</a> = 11</td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__tree_8h-source.html b/doc/oscl_html/oscl__tree_8h-source.html
index 52094c9..42ca6c9 100644
--- a/doc/oscl_html/oscl__tree_8h-source.html
+++ b/doc/oscl_html/oscl__tree_8h-source.html
@@ -862,7 +862,7 @@
 00867 <span class="preprocessor">#endif</span>
 00868 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__tree_8h.html b/doc/oscl_html/oscl__tree_8h.html
index 89fb32e..ddf1873 100644
--- a/doc/oscl_html/oscl__tree_8h.html
+++ b/doc/oscl_html/oscl__tree_8h.html
@@ -55,7 +55,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__types_8h-source.html b/doc/oscl_html/oscl__types_8h-source.html
index 64cdcbb..935a538 100644
--- a/doc/oscl_html/oscl__types_8h-source.html
+++ b/doc/oscl_html/oscl__types_8h-source.html
@@ -74,7 +74,7 @@
 00084 
 00088 <span class="preprocessor">#endif  // OSCL_TYPES_H_INCLUDED</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__types_8h.html b/doc/oscl_html/oscl__types_8h.html
index ffb1a38..ade8593 100644
--- a/doc/oscl_html/oscl__types_8h.html
+++ b/doc/oscl_html/oscl__types_8h.html
@@ -41,7 +41,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__udp__socket_8h-source.html b/doc/oscl_html/oscl__udp__socket_8h-source.html
index bbb2dc3..6e576c7 100644
--- a/doc/oscl_html/oscl__udp__socket_8h-source.html
+++ b/doc/oscl_html/oscl__udp__socket_8h-source.html
@@ -123,7 +123,7 @@
 00122 <span class="preprocessor">#endif</span>
 00123 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__udp__socket_8h.html b/doc/oscl_html/oscl__udp__socket_8h.html
index 57fda1a..f70b2b6 100644
--- a/doc/oscl_html/oscl__udp__socket_8h.html
+++ b/doc/oscl_html/oscl__udp__socket_8h.html
@@ -19,7 +19,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classOsclUDPSocketI.html">OsclUDPSocketI</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__utf8conv_8h-source.html b/doc/oscl_html/oscl__utf8conv_8h-source.html
index 5c16b07..2c4269d 100644
--- a/doc/oscl_html/oscl__utf8conv_8h-source.html
+++ b/doc/oscl_html/oscl__utf8conv_8h-source.html
@@ -48,7 +48,7 @@
 00093 <span class="preprocessor">#endif </span><span class="comment">/* OSCL_UTF8CONV_H */</span>
 00094 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__utf8conv_8h.html b/doc/oscl_html/oscl__utf8conv_8h.html
index 07c591f..51af1fa 100644
--- a/doc/oscl_html/oscl__utf8conv_8h.html
+++ b/doc/oscl_html/oscl__utf8conv_8h.html
@@ -26,7 +26,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__uuid_8h-source.html b/doc/oscl_html/oscl__uuid_8h-source.html
index 2bd2b57..0985f70 100644
--- a/doc/oscl_html/oscl__uuid_8h-source.html
+++ b/doc/oscl_html/oscl__uuid_8h-source.html
@@ -220,7 +220,7 @@
 00220 <span class="preprocessor">#endif</span>
 00221 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__uuid_8h.html b/doc/oscl_html/oscl__uuid_8h.html
index ca8dbb4..a079be4 100644
--- a/doc/oscl_html/oscl__uuid_8h.html
+++ b/doc/oscl_html/oscl__uuid_8h.html
@@ -124,7 +124,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__vector_8h-source.html b/doc/oscl_html/oscl__vector_8h-source.html
index e06cdfe..626a2bd 100644
--- a/doc/oscl_html/oscl__vector_8h-source.html
+++ b/doc/oscl_html/oscl__vector_8h-source.html
@@ -292,7 +292,7 @@
 00459 
 00460 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/oscl__vector_8h.html b/doc/oscl_html/oscl__vector_8h.html
index 4bd95c1..d25c634 100644
--- a/doc/oscl_html/oscl__vector_8h.html
+++ b/doc/oscl_html/oscl__vector_8h.html
@@ -28,7 +28,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig_8h-source.html b/doc/oscl_html/osclconfig_8h-source.html
index afe5ced..d302225 100644
--- a/doc/oscl_html/osclconfig_8h-source.html
+++ b/doc/oscl_html/osclconfig_8h-source.html
@@ -21,8 +21,8 @@
 00018 <span class="preprocessor">#include &lt;dirent.h&gt;</span>
 00019 <span class="preprocessor">#include &lt;dlfcn.h&gt;</span>
 00020 
-<a name="l00021"></a><a class="code" href="osclconfig_8h.html#a0">00021</a> <span class="preprocessor">#define OSCL_HAS_NJ_SUPPORT 1</span>
-<a name="l00022"></a><a class="code" href="osclconfig_8h.html#a1">00022</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_NJ_FILE_IO_SUPPORT 1</span>
+<a name="l00021"></a><a class="code" href="osclconfig_8h.html#a0">00021</a> <span class="preprocessor">#define OSCL_HAS_ANDROID_SUPPORT 1</span>
+<a name="l00022"></a><a class="code" href="osclconfig_8h.html#a1">00022</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_ANDROID_FILE_IO_SUPPORT 1</span>
 00023 <span class="preprocessor"></span>
 00024 <span class="comment">// include common include for determining sizes from limits.h</span>
 00025 <span class="preprocessor">#include "<a class="code" href="osclconfig__limits__typedefs_8h.html">osclconfig_limits_typedefs.h</a>"</span>
@@ -35,7 +35,7 @@
 00032 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
 00033 <span class="preprocessor"></span>
 00034 <span class="comment">// include common unix definitions</span>
-00035 <span class="preprocessor">#include "<a class="code" href="osclconfig__unix__nj_8h.html">osclconfig_unix_nj.h</a>"</span>
+00035 <span class="preprocessor">#include "<a class="code" href="osclconfig__unix__android_8h.html">osclconfig_unix_android.h</a>"</span>
 00036 
 00037 <span class="comment">// define the suffix for unsigned constants</span>
 <a name="l00038"></a><a class="code" href="osclconfig_8h.html#a3">00038</a> <span class="preprocessor">#define OSCL_UNSIGNED_CONST(x) x##u</span>
@@ -75,7 +75,7 @@
 00072 
 00073 <span class="preprocessor">#endif</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig_8h.html b/doc/oscl_html/osclconfig_8h.html
index 840e348..cf730be 100644
--- a/doc/oscl_html/osclconfig_8h.html
+++ b/doc/oscl_html/osclconfig_8h.html
@@ -12,7 +12,7 @@
 <code>#include &lt;dirent.h&gt;</code><br>
 <code>#include &lt;dlfcn.h&gt;</code><br>
 <code>#include "<a class="el" href="osclconfig__limits__typedefs_8h-source.html">osclconfig_limits_typedefs.h</a>"</code><br>
-<code>#include "<a class="el" href="osclconfig__unix__nj_8h-source.html">osclconfig_unix_nj.h</a>"</code><br>
+<code>#include "<a class="el" href="osclconfig__unix__android_8h-source.html">osclconfig_unix_android.h</a>"</code><br>
 <code>#include "<a class="el" href="osclconfig__ix86_8h-source.html">osclconfig_ix86.h</a>"</code><br>
 <code>#include "<a class="el" href="osclconfig__check_8h-source.html">osclconfig_check.h</a>"</code><br>
 
@@ -20,8 +20,8 @@
 <a href="osclconfig_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
 <tr><td></td></tr>
 <tr><td colspan=2><br><h2>Defines</h2></td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig_8h.html#a0">OSCL_HAS_NJ_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig_8h.html#a1">OSCL_HAS_NJ_FILE_IO_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig_8h.html#a0">OSCL_HAS_ANDROID_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig_8h.html#a1">OSCL_HAS_ANDROID_FILE_IO_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
 <tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig_8h.html#a2">OSCL_RELEASE_BUILD</a>&nbsp;&nbsp;&nbsp;0</td></tr>
 <tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig_8h.html#a3">OSCL_UNSIGNED_CONST</a>(x)&nbsp;&nbsp;&nbsp;x##u</td></tr>
 <tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig_8h.html#a4">OSCL_NATIVE_UINT64_TYPE</a>&nbsp;&nbsp;&nbsp;u_int64_t</td></tr>
@@ -106,13 +106,13 @@
     </td>
   </tr>
 </table>
-<a name="a1" doxytag="osclconfig.h::OSCL_HAS_NJ_FILE_IO_SUPPORT"></a><p>
+<a name="a1" doxytag="osclconfig.h::OSCL_HAS_ANDROID_FILE_IO_SUPPORT"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> #define OSCL_HAS_NJ_FILE_IO_SUPPORT&nbsp;&nbsp;&nbsp;1
+          <td class="md" nowrap valign="top"> #define OSCL_HAS_ANDROID_FILE_IO_SUPPORT&nbsp;&nbsp;&nbsp;1
       </table>
     </td>
   </tr>
@@ -128,13 +128,13 @@
     </td>
   </tr>
 </table>
-<a name="a0" doxytag="osclconfig.h::OSCL_HAS_NJ_SUPPORT"></a><p>
+<a name="a0" doxytag="osclconfig.h::OSCL_HAS_ANDROID_SUPPORT"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> #define OSCL_HAS_NJ_SUPPORT&nbsp;&nbsp;&nbsp;1
+          <td class="md" nowrap valign="top"> #define OSCL_HAS_ANDROID_SUPPORT&nbsp;&nbsp;&nbsp;1
       </table>
     </td>
   </tr>
@@ -323,7 +323,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__ansi__memory_8h-source.html b/doc/oscl_html/osclconfig__ansi__memory_8h-source.html
index 2650b60..e578706 100644
--- a/doc/oscl_html/osclconfig__ansi__memory_8h-source.html
+++ b/doc/oscl_html/osclconfig__ansi__memory_8h-source.html
@@ -24,7 +24,7 @@
 00024 
 00025 <span class="preprocessor">#endif</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__ansi__memory_8h.html b/doc/oscl_html/osclconfig__ansi__memory_8h.html
index aac9868..b3a5eaf 100644
--- a/doc/oscl_html/osclconfig__ansi__memory_8h.html
+++ b/doc/oscl_html/osclconfig__ansi__memory_8h.html
@@ -71,7 +71,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__check_8h-source.html b/doc/oscl_html/osclconfig__check_8h-source.html
index d56cd9d..94ff407 100644
--- a/doc/oscl_html/osclconfig__check_8h-source.html
+++ b/doc/oscl_html/osclconfig__check_8h-source.html
@@ -202,7 +202,7 @@
 00414 <span class="preprocessor"></span>
 00415 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__check_8h.html b/doc/oscl_html/osclconfig__check_8h.html
index 619e35d..e0a3eaf 100644
--- a/doc/oscl_html/osclconfig__check_8h.html
+++ b/doc/oscl_html/osclconfig__check_8h.html
@@ -19,7 +19,7 @@
 <tr><td nowrap align=right valign=top>typedef uint32&nbsp;</td><td valign=bottom><a class="el" href="group__osclconfig.html#a5">__uint32__check__</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__compiler__warnings_8h-source.html b/doc/oscl_html/osclconfig__compiler__warnings_8h-source.html
index 02810bb..fc9871a 100644
--- a/doc/oscl_html/osclconfig__compiler__warnings_8h-source.html
+++ b/doc/oscl_html/osclconfig__compiler__warnings_8h-source.html
@@ -32,7 +32,7 @@
 <a name="l00029"></a><a class="code" href="osclconfig__compiler__warnings_8h.html#a0">00029</a> <span class="preprocessor">#define OSCL_FUNCTION_PTR(x) (&amp;x)</span>
 00030 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__compiler__warnings_8h.html b/doc/oscl_html/osclconfig__compiler__warnings_8h.html
index 888ee61..5b7d725 100644
--- a/doc/oscl_html/osclconfig__compiler__warnings_8h.html
+++ b/doc/oscl_html/osclconfig__compiler__warnings_8h.html
@@ -50,7 +50,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__error_8h-source.html b/doc/oscl_html/osclconfig__error_8h-source.html
index c36b7fc..92174ea 100644
--- a/doc/oscl_html/osclconfig__error_8h-source.html
+++ b/doc/oscl_html/osclconfig__error_8h-source.html
@@ -37,7 +37,7 @@
 00035 <span class="preprocessor">#endif // OSCLCONFIG_ERROR_H_INCLUDED</span>
 00036 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__error_8h.html b/doc/oscl_html/osclconfig__error_8h.html
index 92cab2a..80eec62 100644
--- a/doc/oscl_html/osclconfig__error_8h.html
+++ b/doc/oscl_html/osclconfig__error_8h.html
@@ -118,7 +118,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__error__check_8h-source.html b/doc/oscl_html/osclconfig__error__check_8h-source.html
index 9505f94..2fd65a5 100644
--- a/doc/oscl_html/osclconfig__error__check_8h-source.html
+++ b/doc/oscl_html/osclconfig__error__check_8h-source.html
@@ -32,7 +32,7 @@
 00045 <span class="preprocessor"></span>
 00046 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__error__check_8h.html b/doc/oscl_html/osclconfig__error__check_8h.html
index a1bc695..41f9e36 100644
--- a/doc/oscl_html/osclconfig__error__check_8h.html
+++ b/doc/oscl_html/osclconfig__error__check_8h.html
@@ -12,7 +12,7 @@
 <tr><td></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__global__new__delete_8h-source.html b/doc/oscl_html/osclconfig__global__new__delete_8h-source.html
index f2ca42d..93eaaf3 100644
--- a/doc/oscl_html/osclconfig__global__new__delete_8h-source.html
+++ b/doc/oscl_html/osclconfig__global__new__delete_8h-source.html
@@ -20,7 +20,7 @@
 00012 
 00013 <span class="preprocessor">#endif</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__global__new__delete_8h.html b/doc/oscl_html/osclconfig__global__new__delete_8h.html
index 9ac4c63..e740abb 100644
--- a/doc/oscl_html/osclconfig__global__new__delete_8h.html
+++ b/doc/oscl_html/osclconfig__global__new__delete_8h.html
@@ -15,7 +15,7 @@
 <tr><td nowrap align=right valign=top>void&nbsp;</td><td valign=bottom><a class="el" href="group__osclmemory.html#a29">operator delete</a> (void *)</td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__global__placement__new_8h-source.html b/doc/oscl_html/osclconfig__global__placement__new_8h-source.html
index f5bdcef..9fe2e15 100644
--- a/doc/oscl_html/osclconfig__global__placement__new_8h-source.html
+++ b/doc/oscl_html/osclconfig__global__placement__new_8h-source.html
@@ -21,7 +21,7 @@
 00013 
 00014 <span class="preprocessor">#endif</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__global__placement__new_8h.html b/doc/oscl_html/osclconfig__global__placement__new_8h.html
index 7b0496f..78333d0 100644
--- a/doc/oscl_html/osclconfig__global__placement__new_8h.html
+++ b/doc/oscl_html/osclconfig__global__placement__new_8h.html
@@ -53,7 +53,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__io_8h-source.html b/doc/oscl_html/osclconfig__io_8h-source.html
index 8d3e39f..f360413 100644
--- a/doc/oscl_html/osclconfig__io_8h-source.html
+++ b/doc/oscl_html/osclconfig__io_8h-source.html
@@ -21,7 +21,7 @@
 00021 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="osclconfig_8h.html">osclconfig.h</a>"</span>
 00022 <span class="preprocessor">#endif</span>
 00023 <span class="preprocessor"></span>
-00024 <span class="preprocessor">#if (OSCL_HAS_NJ_SUPPORT) &amp;&amp; (ENABLE_MEMORY_PLAYBACK)</span>
+00024 <span class="preprocessor">#if (OSCL_HAS_ANDROID_SUPPORT) &amp;&amp; (ENABLE_MEMORY_PLAYBACK)</span>
 00025 <span class="preprocessor"></span><span class="preprocessor">#include &lt;media/MediaPlayerInterface.h&gt;</span>
 00026 <span class="preprocessor">#endif</span>
 00027 <span class="preprocessor"></span>
@@ -53,184 +53,192 @@
 <a name="l00053"></a><a class="code" href="osclconfig__io_8h.html#a3">00053</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_NATIVE_FILE_CACHE_ENABLE 1</span>
 <a name="l00054"></a><a class="code" href="osclconfig__io_8h.html#a4">00054</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_FILE_BUFFER_MAX_SIZE       32768</span>
 <a name="l00055"></a><a class="code" href="osclconfig__io_8h.html#a5">00055</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_PV_FILE_CACHE  0</span>
-00056 <span class="preprocessor"></span>
-00057 <span class="comment">//For Sockets</span>
-<a name="l00058"></a><a class="code" href="osclconfig__io_8h.html#a6">00058</a> <span class="preprocessor">#define OSCL_HAS_SYMBIAN_SOCKET_SERVER 0</span>
-<a name="l00059"></a><a class="code" href="osclconfig__io_8h.html#a7">00059</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_SYMBIAN_DNS_SERVER 0</span>
-<a name="l00060"></a><a class="code" href="osclconfig__io_8h.html#a8">00060</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_BERKELEY_SOCKETS 1</span>
-<a name="l00061"></a><a class="code" href="osclconfig__io_8h.html#a9">00061</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_SOCKET_SUPPORT 1</span>
-00062 <span class="preprocessor"></span>
-00063 <span class="comment">//basic socket types</span>
-<a name="l00064"></a><a class="code" href="osclconfig__io_8h.html#a42">00064</a> <span class="keyword">typedef</span> <span class="keywordtype">int</span> <a class="code" href="osclconfig__io_8h.html#a42">TOsclSocket</a>;
-<a name="l00065"></a><a class="code" href="osclconfig__io_8h.html#a43">00065</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>sockaddr_in <a class="code" href="osclconfig__io_8h.html#a43">TOsclSockAddr</a>;
-<a name="l00066"></a><a class="code" href="osclconfig__io_8h.html#a44">00066</a> <span class="keyword">typedef</span> socklen_t <a class="code" href="osclconfig__io_8h.html#a44">TOsclSockAddrLen</a>;
-00067 
-00068 <span class="comment">//Init addr macro, inet_addr returns an uint32</span>
-<a name="l00069"></a><a class="code" href="osclconfig__io_8h.html#a10">00069</a> <span class="preprocessor">#define OsclValidInetAddr(addr) (inet_addr(addr)!=INADDR_NONE)</span>
-00070 <span class="preprocessor"></span>
-00071 <span class="comment">//address conversion macro-- from string to network address.</span>
-<a name="l00072"></a><a class="code" href="osclconfig__io_8h.html#a11">00072</a> <span class="preprocessor">#define OsclMakeSockAddr(sockaddr,port,addrstr,ok)\</span>
-00073 <span class="preprocessor">        sockaddr.sin_family=OSCL_AF_INET;\</span>
-00074 <span class="preprocessor">        sockaddr.sin_port=htons(port);\</span>
-00075 <span class="preprocessor">        int32 result=inet_aton((const char*)addrstr,&amp;sockaddr.sin_addr);\</span>
-00076 <span class="preprocessor">        ok=(result!=0);</span>
-00077 <span class="preprocessor"></span>
-00078 <span class="comment">//address conversion macro-- from network address to string</span>
-<a name="l00079"></a><a class="code" href="osclconfig__io_8h.html#a12">00079</a> <span class="preprocessor">#define OsclUnMakeSockAddr(sockaddr,addrstr)\</span>
-00080 <span class="preprocessor">        addrstr=inet_ntoa(sockaddr.sin_addr);</span>
-00081 <span class="preprocessor"></span>
-00082 <span class="comment">//wrappers for berkeley socket calls</span>
-<a name="l00083"></a><a class="code" href="osclconfig__io_8h.html#a13">00083</a> <span class="preprocessor">#define OsclSetRecvBufferSize(s,val,ok,err) \</span>
-00084 <span class="preprocessor">        ok=(setsockopt(s,SOL_SOCKET,SO_RCVBUF,(char*)&amp;val, sizeof(int)) !=-1);\</span>
-00085 <span class="preprocessor">        if (!ok)err=errno</span>
-00086 <span class="preprocessor"></span>
-<a name="l00087"></a><a class="code" href="osclconfig__io_8h.html#a14">00087</a> <span class="preprocessor">#define OsclBind(s,addr,ok,err)\</span>
-00088 <span class="preprocessor">    TOsclSockAddr* tmpadr = &amp;addr;\</span>
-00089 <span class="preprocessor">    sockaddr* sadr = OSCL_STATIC_CAST(sockaddr*, tmpadr);\</span>
-00090 <span class="preprocessor">        ok=(bind(s,sadr,sizeof(addr))!=(-1));\</span>
-00091 <span class="preprocessor">        if (!ok)err=errno</span>
-00092 <span class="preprocessor"></span>
-<a name="l00093"></a><a class="code" href="osclconfig__io_8h.html#a15">00093</a> <span class="preprocessor">#define OsclJoin(s,addr,ok,err)\</span>
-00094 <span class="preprocessor">{\</span>
-00095 <span class="preprocessor">                struct ip_mreq mreq; \</span>
-00096 <span class="preprocessor">            void* p = &amp;addr; \</span>
-00097 <span class="preprocessor">            ok=(bind(s,(sockaddr*)p,sizeof(addr))!=(-1));\</span>
-00098 <span class="preprocessor">        mreq.imr_multiaddr.s_addr = addr.sin_addr.s_addr ; \</span>
-00099 <span class="preprocessor">        mreq.imr_interface.s_addr = htonl(INADDR_ANY); \</span>
-00100 <span class="preprocessor">        ok=(setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, &amp;mreq, sizeof(struct ip_mreq))!=(-1)); \</span>
-00101 <span class="preprocessor">        if (!ok)err=errno;\</span>
-00102 <span class="preprocessor">}</span>
-00103 <span class="preprocessor"></span>
-00104 
-<a name="l00105"></a><a class="code" href="osclconfig__io_8h.html#a16">00105</a> <span class="preprocessor">#define OsclListen(s,size,ok,err)\</span>
-00106 <span class="preprocessor">        ok=(listen(iSocket,qSize)!=(-1));\</span>
-00107 <span class="preprocessor">        if (!ok)err=errno</span>
-00108 <span class="preprocessor"></span>
-<a name="l00109"></a><a class="code" href="osclconfig__io_8h.html#a17">00109</a> <span class="preprocessor">#define OsclAccept(s,accept_s,ok,err,wouldblock)\</span>
-00110 <span class="preprocessor">        accept_s=accept(s,NULL,NULL);\</span>
-00111 <span class="preprocessor">        ok=(accept_s!=(-1));\</span>
-00112 <span class="preprocessor">        if (!ok){err=errno;wouldblock=(err==EAGAIN||err==EWOULDBLOCK);}</span>
-00113 <span class="preprocessor"></span>
-<a name="l00114"></a><a class="code" href="osclconfig__io_8h.html#a18">00114</a> <span class="preprocessor">#define OsclSetNonBlocking(s,ok,err)\</span>
-00115 <span class="preprocessor">        ok=(fcntl(s,F_SETFL,O_NONBLOCK)!=(-1));\</span>
-00116 <span class="preprocessor">        if (!ok)err=errno</span>
-00117 <span class="preprocessor"></span>
-<a name="l00118"></a><a class="code" href="osclconfig__io_8h.html#a19">00118</a> <span class="preprocessor">#define OsclShutdown(s,how,ok,err)\</span>
-00119 <span class="preprocessor">        ok=(shutdown(iSocket,how)!=(-1));\</span>
-00120 <span class="preprocessor">        if (!ok)err=errno</span>
-00121 <span class="preprocessor"></span>
-<a name="l00122"></a><a class="code" href="osclconfig__io_8h.html#a20">00122</a> <span class="preprocessor">#define OsclSocket(s,fam,type,prot,ok,err)\</span>
-00123 <span class="preprocessor">        s=socket(fam,type,prot);\</span>
-00124 <span class="preprocessor">        ok=(s!=(-1));\</span>
-00125 <span class="preprocessor">        if (!ok)err=errno</span>
-00126 <span class="preprocessor"></span>
-<a name="l00127"></a><a class="code" href="osclconfig__io_8h.html#a21">00127</a> <span class="preprocessor">#define OsclSendTo(s,buf,len,addr,ok,err,nbytes,wouldblock)\</span>
-00128 <span class="preprocessor">    TOsclSockAddr* tmpadr = &amp;addr;\</span>
-00129 <span class="preprocessor">    sockaddr* sadr = OSCL_STATIC_CAST(sockaddr*, tmpadr);\</span>
-00130 <span class="preprocessor">        nbytes=sendto(s,(const void*)(buf),(size_t)(len),0,sadr,(socklen_t)sizeof(addr));\</span>
-00131 <span class="preprocessor">        ok=(nbytes!=(-1));\</span>
-00132 <span class="preprocessor">        if (!ok){err=errno;wouldblock=(err==EAGAIN||err==EWOULDBLOCK);}</span>
-00133 <span class="preprocessor"></span>
-<a name="l00134"></a><a class="code" href="osclconfig__io_8h.html#a22">00134</a> <span class="preprocessor">#define OsclSend(s,buf,len,ok,err,nbytes,wouldblock)\</span>
-00135 <span class="preprocessor">        nbytes=send(s,(const void*)(buf),(size_t)(len),0);\</span>
-00136 <span class="preprocessor">        ok=(nbytes!=(-1));\</span>
-00137 <span class="preprocessor">        if (!ok){err=errno;wouldblock=(err==EAGAIN||err==EWOULDBLOCK);}</span>
-00138 <span class="preprocessor"></span>
-<a name="l00139"></a><a class="code" href="osclconfig__io_8h.html#a23">00139</a> <span class="preprocessor">#define OsclCloseSocket(s,ok,err)\</span>
-00140 <span class="preprocessor">        ok=(close(s)!=(-1));\</span>
-00141 <span class="preprocessor">        if (!ok)err=errno</span>
-00142 <span class="preprocessor"></span>
-<a name="l00143"></a><a class="code" href="osclconfig__io_8h.html#a24">00143</a> <span class="preprocessor">#define OsclConnect(s,addr,ok,err,wouldblock)\</span>
-00144 <span class="preprocessor">    TOsclSockAddr* tmpadr = &amp;addr;\</span>
-00145 <span class="preprocessor">    sockaddr* sadr = OSCL_STATIC_CAST(sockaddr*, tmpadr);\</span>
-00146 <span class="preprocessor">        ok=(connect(s,sadr,sizeof(addr))!=(-1));\</span>
-00147 <span class="preprocessor">        if (!ok){err=errno;wouldblock=(err==EINPROGRESS);}</span>
-00148 <span class="preprocessor"></span>
-<a name="l00149"></a><a class="code" href="osclconfig__io_8h.html#a25">00149</a> <span class="preprocessor">#define OsclGetAsyncSockErr(s,ok,err)\</span>
-00150 <span class="preprocessor">        int opterr;socklen_t optlen=sizeof(opterr);\</span>
-00151 <span class="preprocessor">        ok=(getsockopt(s,SOL_SOCKET,SO_ERROR,(void *)&amp;opterr,&amp;optlen)!=(-1));\</span>
-00152 <span class="preprocessor">        if(ok)err=opterr;else err=errno;</span>
-00153 <span class="preprocessor"></span>
-00154 <span class="comment">//unix reports connect completion in write set in the getsockopt</span>
-00155 <span class="comment">//error.</span>
-<a name="l00156"></a><a class="code" href="osclconfig__io_8h.html#a26">00156</a> <span class="preprocessor">#define OsclConnectComplete(s,wset,eset,success,fail,ok,err)\</span>
-00157 <span class="preprocessor">        success=fail=false;\</span>
-00158 <span class="preprocessor">        if (FD_ISSET(s,&amp;eset))\</span>
-00159 <span class="preprocessor">        {fail=true;OsclGetAsyncSockErr(s,ok,err);}\</span>
-00160 <span class="preprocessor">        else if (FD_ISSET(s,&amp;wset))\</span>
-00161 <span class="preprocessor">        {OsclGetAsyncSockErr(s,ok,err);if (ok &amp;&amp; err==0)success=true;else fail=true;}</span>
-00162 <span class="preprocessor"></span>
-<a name="l00163"></a><a class="code" href="osclconfig__io_8h.html#a27">00163</a> <span class="preprocessor">#define OsclRecv(s,buf,len,ok,err,nbytes,wouldblock)\</span>
-00164 <span class="preprocessor">        nbytes=recv(s,(void *)(buf),(size_t)(len),0);\</span>
-00165 <span class="preprocessor">        ok=(nbytes!=(-1));\</span>
-00166 <span class="preprocessor">        if (!ok){err=errno;wouldblock=(err==EAGAIN);}</span>
-00167 <span class="preprocessor"></span>
-<a name="l00168"></a><a class="code" href="osclconfig__io_8h.html#a28">00168</a> <span class="preprocessor">#define OsclRecvFrom(s,buf,len,paddr,paddrlen,ok,err,nbytes,wouldblock)\</span>
-00169 <span class="preprocessor">{\</span>
-00170 <span class="preprocessor">void* p=paddr;\</span>
-00171 <span class="preprocessor">nbytes=recvfrom(s,(void*)(buf),(size_t)(len),0,(struct sockaddr*)p,paddrlen);\</span>
-00172 <span class="preprocessor">        ok=(nbytes!=(-1));\</span>
-00173 <span class="preprocessor">        if (!ok){err=errno;wouldblock=(err==EAGAIN);}\</span>
-00174 <span class="preprocessor">}</span>
-00175 <span class="preprocessor"></span>
-00176 
-<a name="l00177"></a><a class="code" href="osclconfig__io_8h.html#a29">00177</a> <span class="preprocessor">#define OsclSocketSelect(nfds,rd,wr,ex,timeout,ok,err,nhandles)\</span>
-00178 <span class="preprocessor">        nhandles=select(nfds,&amp;rd,&amp;wr,&amp;ex,&amp;timeout);\</span>
-00179 <span class="preprocessor">        ok=(nhandles!=(-1));\</span>
-00180 <span class="preprocessor">        if (!ok)err=errno</span>
-00181 <span class="preprocessor"></span>
-00182 <span class="comment">//there's not really any socket startup needed on unix, but</span>
-00183 <span class="comment">//you need to define a signal handler for SIGPIPE to avoid</span>
-00184 <span class="comment">//broken pipe crashes.</span>
-<a name="l00185"></a><a class="code" href="osclconfig__io_8h.html#a30">00185</a> <span class="preprocessor">#define OsclSocketStartup(ok)\</span>
-00186 <span class="preprocessor">        signal(SIGPIPE,SIG_IGN);\</span>
-00187 <span class="preprocessor">        ok=true</span>
-00188 <span class="preprocessor"></span>
-<a name="l00189"></a><a class="code" href="osclconfig__io_8h.html#a31">00189</a> <span class="preprocessor">#define OsclSocketCleanup(ok)\</span>
-00190 <span class="preprocessor">        signal(SIGPIPE,SIG_DFL);\</span>
-00191 <span class="preprocessor">        ok=true</span>
-00192 <span class="preprocessor"></span>
-00193 <span class="comment">//hostent type</span>
-<a name="l00194"></a><a class="code" href="osclconfig__io_8h.html#a45">00194</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>hostent <a class="code" href="osclconfig__io_8h.html#a45">TOsclHostent</a>;
-00195 
-00196 <span class="comment">//wrapper for gethostbyname</span>
-<a name="l00197"></a><a class="code" href="osclconfig__io_8h.html#a32">00197</a> <span class="preprocessor">#define OsclGethostbyname(name,hostent,ok,err)\</span>
-00198 <span class="preprocessor">        hostent=gethostbyname((const char*)name);\</span>
-00199 <span class="preprocessor">        ok=(hostent!=NULL);\</span>
-00200 <span class="preprocessor">        if (!ok)err=errno;</span>
-00201 <span class="preprocessor"></span>
-00202 <span class="comment">//extract dotted address from a hostent</span>
-<a name="l00203"></a><a class="code" href="osclconfig__io_8h.html#a33">00203</a> <span class="preprocessor">#define OsclGetDottedAddr(hostent,dottedaddr,ok)\</span>
-00204 <span class="preprocessor">        long *_hostaddr=(long*)hostent-&gt;h_addr_list[0];\</span>
-00205 <span class="preprocessor">        struct in_addr _inaddr;\</span>
-00206 <span class="preprocessor">        _inaddr.s_addr=*_hostaddr;\</span>
-00207 <span class="preprocessor">        dottedaddr=inet_ntoa(_inaddr);\</span>
-00208 <span class="preprocessor">        ok=(dottedaddr!=NULL);</span>
-00209 <span class="preprocessor"></span>
-00210 <span class="comment">//socket shutdown codes</span>
-<a name="l00211"></a><a class="code" href="osclconfig__io_8h.html#a34">00211</a> <span class="preprocessor">#define OSCL_SD_RECEIVE SHUT_RD</span>
-<a name="l00212"></a><a class="code" href="osclconfig__io_8h.html#a35">00212</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_SD_SEND SHUT_WR</span>
-<a name="l00213"></a><a class="code" href="osclconfig__io_8h.html#a36">00213</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_SD_BOTH SHUT_RDWR</span>
-00214 <span class="preprocessor"></span>
-00215 <span class="comment">//address family codes</span>
-<a name="l00216"></a><a class="code" href="osclconfig__io_8h.html#a37">00216</a> <span class="preprocessor">#define OSCL_AF_INET AF_INET</span>
-00217 <span class="preprocessor"></span>
-00218 <span class="comment">//socket type codes</span>
-<a name="l00219"></a><a class="code" href="osclconfig__io_8h.html#a38">00219</a> <span class="preprocessor">#define OSCL_SOCK_STREAM SOCK_STREAM</span>
-<a name="l00220"></a><a class="code" href="osclconfig__io_8h.html#a39">00220</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_SOCK_DATAGRAM SOCK_DGRAM</span>
-00221 <span class="preprocessor"></span>
-00222 <span class="comment">//IP protocol codes</span>
-<a name="l00223"></a><a class="code" href="osclconfig__io_8h.html#a40">00223</a> <span class="preprocessor">#define OSCL_IPPROTO_TCP IPPROTO_TCP</span>
-<a name="l00224"></a><a class="code" href="osclconfig__io_8h.html#a41">00224</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_IPPROTO_UDP IPPROTO_UDP</span>
-00225 <span class="preprocessor"></span>
-00226 <span class="comment">//End sockets</span>
-00227 
-00228 <span class="preprocessor">#include "<a class="code" href="osclconfig__io__check_8h.html">osclconfig_io_check.h</a>"</span>
-00229 
-00230 <span class="preprocessor">#endif</span>
-00231 <span class="preprocessor"></span>
+<a name="l00056"></a><a class="code" href="osclconfig__io_8h.html#a6">00056</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_LARGE_FILE_SUPPORT 1</span>
+00057 <span class="preprocessor"></span>
+00058 <span class="comment">//For Sockets</span>
+<a name="l00059"></a><a class="code" href="osclconfig__io_8h.html#a7">00059</a> <span class="preprocessor">#define OSCL_HAS_SYMBIAN_SOCKET_SERVER 0</span>
+<a name="l00060"></a><a class="code" href="osclconfig__io_8h.html#a8">00060</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_SYMBIAN_DNS_SERVER 0</span>
+<a name="l00061"></a><a class="code" href="osclconfig__io_8h.html#a9">00061</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_BERKELEY_SOCKETS 1</span>
+<a name="l00062"></a><a class="code" href="osclconfig__io_8h.html#a10">00062</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_SOCKET_SUPPORT 1</span>
+00063 <span class="preprocessor"></span>
+00064 <span class="comment">//basic socket types</span>
+<a name="l00065"></a><a class="code" href="osclconfig__io_8h.html#a44">00065</a> <span class="keyword">typedef</span> <span class="keywordtype">int</span> <a class="code" href="osclconfig__io_8h.html#a44">TOsclSocket</a>;
+<a name="l00066"></a><a class="code" href="osclconfig__io_8h.html#a45">00066</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>sockaddr_in <a class="code" href="osclconfig__io_8h.html#a45">TOsclSockAddr</a>;
+<a name="l00067"></a><a class="code" href="osclconfig__io_8h.html#a46">00067</a> <span class="keyword">typedef</span> socklen_t <a class="code" href="osclconfig__io_8h.html#a46">TOsclSockAddrLen</a>;
+00068 
+00069 <span class="comment">//Init addr macro, inet_addr returns an uint32</span>
+<a name="l00070"></a><a class="code" href="osclconfig__io_8h.html#a11">00070</a> <span class="preprocessor">#define OsclValidInetAddr(addr) (inet_addr(addr)!=INADDR_NONE)</span>
+00071 <span class="preprocessor"></span>
+00072 <span class="comment">//address conversion macro-- from string to network address.</span>
+<a name="l00073"></a><a class="code" href="osclconfig__io_8h.html#a12">00073</a> <span class="preprocessor">#define OsclMakeSockAddr(sockaddr,port,addrstr,ok)\</span>
+00074 <span class="preprocessor">        sockaddr.sin_family=OSCL_AF_INET;\</span>
+00075 <span class="preprocessor">        sockaddr.sin_port=htons(port);\</span>
+00076 <span class="preprocessor">        int32 result=inet_aton((const char*)addrstr,&amp;sockaddr.sin_addr);\</span>
+00077 <span class="preprocessor">        ok=(result!=0);</span>
+00078 <span class="preprocessor"></span>
+00079 <span class="comment">//address conversion macro-- from network address to string</span>
+<a name="l00080"></a><a class="code" href="osclconfig__io_8h.html#a13">00080</a> <span class="preprocessor">#define OsclUnMakeSockAddr(sockaddr,addrstr)\</span>
+00081 <span class="preprocessor">        addrstr=inet_ntoa(sockaddr.sin_addr);</span>
+00082 <span class="preprocessor"></span>
+00083 <span class="comment">//wrappers for berkeley socket calls</span>
+<a name="l00084"></a><a class="code" href="osclconfig__io_8h.html#a14">00084</a> <span class="preprocessor">#define OsclSetRecvBufferSize(s,val,ok,err) \</span>
+00085 <span class="preprocessor">        ok=(setsockopt(s,SOL_SOCKET,SO_RCVBUF,(char*)&amp;val, sizeof(int)) !=-1);\</span>
+00086 <span class="preprocessor">        if (!ok)err=errno</span>
+00087 <span class="preprocessor"></span>
+<a name="l00088"></a><a class="code" href="osclconfig__io_8h.html#a15">00088</a> <span class="preprocessor">#define OsclBind(s,addr,ok,err)\</span>
+00089 <span class="preprocessor">    TOsclSockAddr* tmpadr = &amp;addr;\</span>
+00090 <span class="preprocessor">    sockaddr* sadr = OSCL_STATIC_CAST(sockaddr*, tmpadr);\</span>
+00091 <span class="preprocessor">        ok=(bind(s,sadr,sizeof(addr))!=(-1));\</span>
+00092 <span class="preprocessor">        if (!ok)err=errno</span>
+00093 <span class="preprocessor"></span>
+<a name="l00094"></a><a class="code" href="osclconfig__io_8h.html#a16">00094</a> <span class="preprocessor">#define OsclJoin(s,addr,ok,err)\</span>
+00095 <span class="preprocessor">{\</span>
+00096 <span class="preprocessor">                struct ip_mreq mreq; \</span>
+00097 <span class="preprocessor">            void* p = &amp;addr; \</span>
+00098 <span class="preprocessor">            ok=(bind(s,(sockaddr*)p,sizeof(addr))!=(-1));\</span>
+00099 <span class="preprocessor">        mreq.imr_multiaddr.s_addr = addr.sin_addr.s_addr ; \</span>
+00100 <span class="preprocessor">        mreq.imr_interface.s_addr = htonl(INADDR_ANY); \</span>
+00101 <span class="preprocessor">        ok=(setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, &amp;mreq, sizeof(struct ip_mreq))!=(-1)); \</span>
+00102 <span class="preprocessor">        if (!ok)err=errno;\</span>
+00103 <span class="preprocessor">}</span>
+00104 <span class="preprocessor"></span>
+00105 
+<a name="l00106"></a><a class="code" href="osclconfig__io_8h.html#a17">00106</a> <span class="preprocessor">#define OsclListen(s,size,ok,err)\</span>
+00107 <span class="preprocessor">        ok=(listen(iSocket,qSize)!=(-1));\</span>
+00108 <span class="preprocessor">        if (!ok)err=errno</span>
+00109 <span class="preprocessor"></span>
+<a name="l00110"></a><a class="code" href="osclconfig__io_8h.html#a18">00110</a> <span class="preprocessor">#define OsclAccept(s,accept_s,ok,err,wouldblock)\</span>
+00111 <span class="preprocessor">        accept_s=accept(s,NULL,NULL);\</span>
+00112 <span class="preprocessor">        ok=(accept_s!=(-1));\</span>
+00113 <span class="preprocessor">        if (!ok){err=errno;wouldblock=(err==EAGAIN||err==EWOULDBLOCK);}</span>
+00114 <span class="preprocessor"></span>
+<a name="l00115"></a><a class="code" href="osclconfig__io_8h.html#a19">00115</a> <span class="preprocessor">#define OsclSetNonBlocking(s,ok,err)\</span>
+00116 <span class="preprocessor">        ok=(fcntl(s,F_SETFL,O_NONBLOCK)!=(-1));\</span>
+00117 <span class="preprocessor">        if (!ok)err=errno</span>
+00118 <span class="preprocessor"></span>
+<a name="l00119"></a><a class="code" href="osclconfig__io_8h.html#a20">00119</a> <span class="preprocessor">#define OsclShutdown(s,how,ok,err)\</span>
+00120 <span class="preprocessor">        ok=(shutdown(iSocket,how)!=(-1));\</span>
+00121 <span class="preprocessor">        if (!ok)err=errno</span>
+00122 <span class="preprocessor"></span>
+<a name="l00123"></a><a class="code" href="osclconfig__io_8h.html#a21">00123</a> <span class="preprocessor">#define OsclSocket(s,fam,type,prot,ok,err)\</span>
+00124 <span class="preprocessor">        s=socket(fam,type,prot);\</span>
+00125 <span class="preprocessor">        ok=(s!=(-1));\</span>
+00126 <span class="preprocessor">        if (!ok)err=errno</span>
+00127 <span class="preprocessor"></span>
+<a name="l00128"></a><a class="code" href="osclconfig__io_8h.html#a22">00128</a> <span class="preprocessor">#define OsclSendTo(s,buf,len,addr,ok,err,nbytes,wouldblock)\</span>
+00129 <span class="preprocessor">    TOsclSockAddr* tmpadr = &amp;addr;\</span>
+00130 <span class="preprocessor">    sockaddr* sadr = OSCL_STATIC_CAST(sockaddr*, tmpadr);\</span>
+00131 <span class="preprocessor">        nbytes=sendto(s,(const void*)(buf),(size_t)(len),0,sadr,(socklen_t)sizeof(addr));\</span>
+00132 <span class="preprocessor">        ok=(nbytes!=(-1));\</span>
+00133 <span class="preprocessor">        if (!ok){err=errno;wouldblock=(err==EAGAIN||err==EWOULDBLOCK);}</span>
+00134 <span class="preprocessor"></span>
+<a name="l00135"></a><a class="code" href="osclconfig__io_8h.html#a23">00135</a> <span class="preprocessor">#define OsclSend(s,buf,len,ok,err,nbytes,wouldblock)\</span>
+00136 <span class="preprocessor">        nbytes=send(s,(const void*)(buf),(size_t)(len),0);\</span>
+00137 <span class="preprocessor">        ok=(nbytes!=(-1));\</span>
+00138 <span class="preprocessor">        if (!ok){err=errno;wouldblock=(err==EAGAIN||err==EWOULDBLOCK);}</span>
+00139 <span class="preprocessor"></span>
+<a name="l00140"></a><a class="code" href="osclconfig__io_8h.html#a24">00140</a> <span class="preprocessor">#define OsclCloseSocket(s,ok,err)\</span>
+00141 <span class="preprocessor">        ok=(close(s)!=(-1));\</span>
+00142 <span class="preprocessor">        if (!ok)err=errno</span>
+00143 <span class="preprocessor"></span>
+<a name="l00144"></a><a class="code" href="osclconfig__io_8h.html#a25">00144</a> <span class="preprocessor">#define OsclConnect(s,addr,ok,err,wouldblock)\</span>
+00145 <span class="preprocessor">    TOsclSockAddr* tmpadr = &amp;addr;\</span>
+00146 <span class="preprocessor">    sockaddr* sadr = OSCL_STATIC_CAST(sockaddr*, tmpadr);\</span>
+00147 <span class="preprocessor">        ok=(connect(s,sadr,sizeof(addr))!=(-1));\</span>
+00148 <span class="preprocessor">        if (!ok){err=errno;wouldblock=(err==EINPROGRESS);}</span>
+00149 <span class="preprocessor"></span>
+<a name="l00150"></a><a class="code" href="osclconfig__io_8h.html#a26">00150</a> <span class="preprocessor">#define OsclGetAsyncSockErr(s,ok,err)\</span>
+00151 <span class="preprocessor">        int opterr;socklen_t optlen=sizeof(opterr);\</span>
+00152 <span class="preprocessor">        ok=(getsockopt(s,SOL_SOCKET,SO_ERROR,(void *)&amp;opterr,&amp;optlen)!=(-1));\</span>
+00153 <span class="preprocessor">        if(ok)err=opterr;else err=errno;</span>
+00154 <span class="preprocessor"></span>
+00155 <span class="comment">//unix reports connect completion in write set in the getsockopt</span>
+00156 <span class="comment">//error.</span>
+<a name="l00157"></a><a class="code" href="osclconfig__io_8h.html#a27">00157</a> <span class="preprocessor">#define OsclConnectComplete(s,wset,eset,success,fail,ok,err)\</span>
+00158 <span class="preprocessor">        success=fail=false;\</span>
+00159 <span class="preprocessor">        if (FD_ISSET(s,&amp;eset))\</span>
+00160 <span class="preprocessor">        {fail=true;OsclGetAsyncSockErr(s,ok,err);}\</span>
+00161 <span class="preprocessor">        else if (FD_ISSET(s,&amp;wset))\</span>
+00162 <span class="preprocessor">        {OsclGetAsyncSockErr(s,ok,err);if (ok &amp;&amp; err==0)success=true;else fail=true;}</span>
+00163 <span class="preprocessor"></span>
+<a name="l00164"></a><a class="code" href="osclconfig__io_8h.html#a28">00164</a> <span class="preprocessor">#define OsclRecv(s,buf,len,ok,err,nbytes,wouldblock)\</span>
+00165 <span class="preprocessor">        nbytes=recv(s,(void *)(buf),(size_t)(len),0);\</span>
+00166 <span class="preprocessor">        ok=(nbytes!=(-1));\</span>
+00167 <span class="preprocessor">        if (!ok){err=errno;wouldblock=(err==EAGAIN);}</span>
+00168 <span class="preprocessor"></span>
+<a name="l00169"></a><a class="code" href="osclconfig__io_8h.html#a29">00169</a> <span class="preprocessor">#define OsclRecvFrom(s,buf,len,paddr,paddrlen,ok,err,nbytes,wouldblock)\</span>
+00170 <span class="preprocessor">{\</span>
+00171 <span class="preprocessor">void* p=paddr;\</span>
+00172 <span class="preprocessor">nbytes=recvfrom(s,(void*)(buf),(size_t)(len),0,(struct sockaddr*)p,paddrlen);\</span>
+00173 <span class="preprocessor">        ok=(nbytes!=(-1));\</span>
+00174 <span class="preprocessor">        if (!ok){err=errno;wouldblock=(err==EAGAIN);}\</span>
+00175 <span class="preprocessor">}</span>
+00176 <span class="preprocessor"></span>
+00177 
+<a name="l00178"></a><a class="code" href="osclconfig__io_8h.html#a30">00178</a> <span class="preprocessor">#define OsclSocketSelect(nfds,rd,wr,ex,timeout,ok,err,nhandles)\</span>
+00179 <span class="preprocessor">        nhandles=select(nfds,&amp;rd,&amp;wr,&amp;ex,&amp;timeout);\</span>
+00180 <span class="preprocessor">        ok=(nhandles!=(-1));\</span>
+00181 <span class="preprocessor">        if (!ok)err=errno</span>
+00182 <span class="preprocessor"></span>
+00183 <span class="comment">//there's not really any socket startup needed on unix, but</span>
+00184 <span class="comment">//you need to define a signal handler for SIGPIPE to avoid</span>
+00185 <span class="comment">//broken pipe crashes.</span>
+<a name="l00186"></a><a class="code" href="osclconfig__io_8h.html#a31">00186</a> <span class="preprocessor">#define OsclSocketStartup(ok)\</span>
+00187 <span class="preprocessor">        signal(SIGPIPE,SIG_IGN);\</span>
+00188 <span class="preprocessor">        ok=true</span>
+00189 <span class="preprocessor"></span>
+<a name="l00190"></a><a class="code" href="osclconfig__io_8h.html#a32">00190</a> <span class="preprocessor">#define OsclSocketCleanup(ok)\</span>
+00191 <span class="preprocessor">        signal(SIGPIPE,SIG_DFL);\</span>
+00192 <span class="preprocessor">        ok=true</span>
+00193 <span class="preprocessor"></span>
+00194 <span class="comment">//hostent type</span>
+<a name="l00195"></a><a class="code" href="osclconfig__io_8h.html#a47">00195</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>hostent <a class="code" href="osclconfig__io_8h.html#a47">TOsclHostent</a>;
+00196 
+00197 <span class="comment">//wrapper for gethostbyname</span>
+<a name="l00198"></a><a class="code" href="osclconfig__io_8h.html#a33">00198</a> <span class="preprocessor">#define OsclGethostbyname(name,hostent,ok,err)\</span>
+00199 <span class="preprocessor">        hostent=gethostbyname((const char*)name);\</span>
+00200 <span class="preprocessor">        ok=(hostent!=NULL);\</span>
+00201 <span class="preprocessor">        if (!ok)err=errno;</span>
+00202 <span class="preprocessor"></span>
+00203 <span class="comment">//extract dotted address from a hostent</span>
+<a name="l00204"></a><a class="code" href="osclconfig__io_8h.html#a34">00204</a> <span class="preprocessor">#define OsclGetDottedAddr(hostent,dottedaddr,ok)\</span>
+00205 <span class="preprocessor">        long *_hostaddr=(long*)hostent-&gt;h_addr_list[0];\</span>
+00206 <span class="preprocessor">        struct in_addr _inaddr;\</span>
+00207 <span class="preprocessor">        _inaddr.s_addr=*_hostaddr;\</span>
+00208 <span class="preprocessor">        dottedaddr=inet_ntoa(_inaddr);\</span>
+00209 <span class="preprocessor">        ok=(dottedaddr!=NULL);</span>
+00210 <span class="preprocessor"></span>
+00211 <span class="comment">//socket shutdown codes</span>
+<a name="l00212"></a><a class="code" href="osclconfig__io_8h.html#a35">00212</a> <span class="preprocessor">#define OSCL_SD_RECEIVE SHUT_RD</span>
+<a name="l00213"></a><a class="code" href="osclconfig__io_8h.html#a36">00213</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_SD_SEND SHUT_WR</span>
+<a name="l00214"></a><a class="code" href="osclconfig__io_8h.html#a37">00214</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_SD_BOTH SHUT_RDWR</span>
+00215 <span class="preprocessor"></span>
+00216 <span class="comment">//address family codes</span>
+<a name="l00217"></a><a class="code" href="osclconfig__io_8h.html#a38">00217</a> <span class="preprocessor">#define OSCL_AF_INET AF_INET</span>
+00218 <span class="preprocessor"></span>
+00219 <span class="comment">//socket type codes</span>
+<a name="l00220"></a><a class="code" href="osclconfig__io_8h.html#a39">00220</a> <span class="preprocessor">#define OSCL_SOCK_STREAM SOCK_STREAM</span>
+<a name="l00221"></a><a class="code" href="osclconfig__io_8h.html#a40">00221</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_SOCK_DATAGRAM SOCK_DGRAM</span>
+00222 <span class="preprocessor"></span>
+00223 <span class="comment">//IP protocol codes</span>
+<a name="l00224"></a><a class="code" href="osclconfig__io_8h.html#a41">00224</a> <span class="preprocessor">#define OSCL_IPPROTO_TCP IPPROTO_TCP</span>
+<a name="l00225"></a><a class="code" href="osclconfig__io_8h.html#a42">00225</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_IPPROTO_UDP IPPROTO_UDP</span>
+00226 <span class="preprocessor"></span>
+00227 <span class="comment">//End sockets</span>
+00228 <span class="comment">// file IO support</span>
+00229 <span class="preprocessor">#if (OSCL_HAS_LARGE_FILE_SUPPORT)</span>
+<a name="l00230"></a><a class="code" href="osclconfig__io_8h.html#a43">00230</a> <span class="preprocessor"></span><span class="preprocessor">#define _FILE_OFFSET_BITS 64</span>
+<a name="l00231"></a><a class="code" href="osclconfig__io_8h.html#a48">00231</a> <span class="preprocessor"></span><span class="keyword">typedef</span> off_t <a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a>;
+00232 <span class="preprocessor">#else</span>
+00233 <span class="preprocessor"></span><span class="keyword">typedef</span> int32 <a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a>;
+00234 <span class="preprocessor">#endif</span>
+00235 <span class="preprocessor"></span>
+00236 <span class="preprocessor">#include "<a class="code" href="osclconfig__io__check_8h.html">osclconfig_io_check.h</a>"</span>
+00237 
+00238 <span class="preprocessor">#endif</span>
+00239 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__io_8h.html b/doc/oscl_html/osclconfig__io_8h.html
index 10b7ab6..42ae6c5 100644
--- a/doc/oscl_html/osclconfig__io_8h.html
+++ b/doc/oscl_html/osclconfig__io_8h.html
@@ -37,47 +37,50 @@
 <tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a3">OSCL_HAS_NATIVE_FILE_CACHE_ENABLE</a>&nbsp;&nbsp;&nbsp;1</td></tr>
 <tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a4">OSCL_FILE_BUFFER_MAX_SIZE</a>&nbsp;&nbsp;&nbsp;32768</td></tr>
 <tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a5">OSCL_HAS_PV_FILE_CACHE</a>&nbsp;&nbsp;&nbsp;0</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a6">OSCL_HAS_SYMBIAN_SOCKET_SERVER</a>&nbsp;&nbsp;&nbsp;0</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a7">OSCL_HAS_SYMBIAN_DNS_SERVER</a>&nbsp;&nbsp;&nbsp;0</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a8">OSCL_HAS_BERKELEY_SOCKETS</a>&nbsp;&nbsp;&nbsp;1</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a9">OSCL_HAS_SOCKET_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a10">OsclValidInetAddr</a>(addr)&nbsp;&nbsp;&nbsp;(inet_addr(addr)!=INADDR_NONE)</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a11">OsclMakeSockAddr</a>(sockaddr, port, addrstr, ok)</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a12">OsclUnMakeSockAddr</a>(sockaddr, addrstr)&nbsp;&nbsp;&nbsp;addrstr=inet_ntoa(sockaddr.sin_addr);</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a13">OsclSetRecvBufferSize</a>(s, val, ok, err)</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a14">OsclBind</a>(s, addr, ok, err)</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a15">OsclJoin</a>(s, addr, ok, err)</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a16">OsclListen</a>(s, size, ok, err)</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a17">OsclAccept</a>(s, accept_s, ok, err, wouldblock)</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a18">OsclSetNonBlocking</a>(s, ok, err)</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a19">OsclShutdown</a>(s, how, ok, err)</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a20">OsclSocket</a>(s, fam, type, prot, ok, err)</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a21">OsclSendTo</a>(s, buf, len, addr, ok, err, nbytes, wouldblock)</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a22">OsclSend</a>(s, buf, len, ok, err, nbytes, wouldblock)</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a23">OsclCloseSocket</a>(s, ok, err)</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a24">OsclConnect</a>(s, addr, ok, err, wouldblock)</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a25">OsclGetAsyncSockErr</a>(s, ok, err)</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a26">OsclConnectComplete</a>(s, wset, eset, success, fail, ok, err)</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a27">OsclRecv</a>(s, buf, len, ok, err, nbytes, wouldblock)</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a28">OsclRecvFrom</a>(s, buf, len, paddr, paddrlen, ok, err, nbytes, wouldblock)</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a29">OsclSocketSelect</a>(nfds, rd, wr, ex, timeout, ok, err, nhandles)</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a30">OsclSocketStartup</a>(ok)</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a31">OsclSocketCleanup</a>(ok)</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a32">OsclGethostbyname</a>(name, hostent, ok, err)</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a33">OsclGetDottedAddr</a>(hostent, dottedaddr, ok)</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a34">OSCL_SD_RECEIVE</a>&nbsp;&nbsp;&nbsp;SHUT_RD</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a35">OSCL_SD_SEND</a>&nbsp;&nbsp;&nbsp;SHUT_WR</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a36">OSCL_SD_BOTH</a>&nbsp;&nbsp;&nbsp;SHUT_RDWR</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a37">OSCL_AF_INET</a>&nbsp;&nbsp;&nbsp;AF_INET</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a38">OSCL_SOCK_STREAM</a>&nbsp;&nbsp;&nbsp;SOCK_STREAM</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a39">OSCL_SOCK_DATAGRAM</a>&nbsp;&nbsp;&nbsp;SOCK_DGRAM</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a40">OSCL_IPPROTO_TCP</a>&nbsp;&nbsp;&nbsp;IPPROTO_TCP</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a41">OSCL_IPPROTO_UDP</a>&nbsp;&nbsp;&nbsp;IPPROTO_UDP</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a6">OSCL_HAS_LARGE_FILE_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a7">OSCL_HAS_SYMBIAN_SOCKET_SERVER</a>&nbsp;&nbsp;&nbsp;0</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a8">OSCL_HAS_SYMBIAN_DNS_SERVER</a>&nbsp;&nbsp;&nbsp;0</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a9">OSCL_HAS_BERKELEY_SOCKETS</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a10">OSCL_HAS_SOCKET_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a11">OsclValidInetAddr</a>(addr)&nbsp;&nbsp;&nbsp;(inet_addr(addr)!=INADDR_NONE)</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a12">OsclMakeSockAddr</a>(sockaddr, port, addrstr, ok)</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a13">OsclUnMakeSockAddr</a>(sockaddr, addrstr)&nbsp;&nbsp;&nbsp;addrstr=inet_ntoa(sockaddr.sin_addr);</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a14">OsclSetRecvBufferSize</a>(s, val, ok, err)</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a15">OsclBind</a>(s, addr, ok, err)</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a16">OsclJoin</a>(s, addr, ok, err)</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a17">OsclListen</a>(s, size, ok, err)</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a18">OsclAccept</a>(s, accept_s, ok, err, wouldblock)</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a19">OsclSetNonBlocking</a>(s, ok, err)</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a20">OsclShutdown</a>(s, how, ok, err)</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a21">OsclSocket</a>(s, fam, type, prot, ok, err)</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a22">OsclSendTo</a>(s, buf, len, addr, ok, err, nbytes, wouldblock)</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a23">OsclSend</a>(s, buf, len, ok, err, nbytes, wouldblock)</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a24">OsclCloseSocket</a>(s, ok, err)</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a25">OsclConnect</a>(s, addr, ok, err, wouldblock)</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a26">OsclGetAsyncSockErr</a>(s, ok, err)</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a27">OsclConnectComplete</a>(s, wset, eset, success, fail, ok, err)</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a28">OsclRecv</a>(s, buf, len, ok, err, nbytes, wouldblock)</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a29">OsclRecvFrom</a>(s, buf, len, paddr, paddrlen, ok, err, nbytes, wouldblock)</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a30">OsclSocketSelect</a>(nfds, rd, wr, ex, timeout, ok, err, nhandles)</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a31">OsclSocketStartup</a>(ok)</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a32">OsclSocketCleanup</a>(ok)</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a33">OsclGethostbyname</a>(name, hostent, ok, err)</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a34">OsclGetDottedAddr</a>(hostent, dottedaddr, ok)</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a35">OSCL_SD_RECEIVE</a>&nbsp;&nbsp;&nbsp;SHUT_RD</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a36">OSCL_SD_SEND</a>&nbsp;&nbsp;&nbsp;SHUT_WR</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a37">OSCL_SD_BOTH</a>&nbsp;&nbsp;&nbsp;SHUT_RDWR</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a38">OSCL_AF_INET</a>&nbsp;&nbsp;&nbsp;AF_INET</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a39">OSCL_SOCK_STREAM</a>&nbsp;&nbsp;&nbsp;SOCK_STREAM</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a40">OSCL_SOCK_DATAGRAM</a>&nbsp;&nbsp;&nbsp;SOCK_DGRAM</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a41">OSCL_IPPROTO_TCP</a>&nbsp;&nbsp;&nbsp;IPPROTO_TCP</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a42">OSCL_IPPROTO_UDP</a>&nbsp;&nbsp;&nbsp;IPPROTO_UDP</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a43">_FILE_OFFSET_BITS</a>&nbsp;&nbsp;&nbsp;64</td></tr>
 <tr><td colspan=2><br><h2>Typedefs</h2></td></tr>
-<tr><td nowrap align=right valign=top>typedef int&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a42">TOsclSocket</a></td></tr>
-<tr><td nowrap align=right valign=top>typedef sockaddr_in&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a43">TOsclSockAddr</a></td></tr>
-<tr><td nowrap align=right valign=top>typedef socklen_t&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a44">TOsclSockAddrLen</a></td></tr>
-<tr><td nowrap align=right valign=top>typedef hostent&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a45">TOsclHostent</a></td></tr>
+<tr><td nowrap align=right valign=top>typedef int&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a44">TOsclSocket</a></td></tr>
+<tr><td nowrap align=right valign=top>typedef sockaddr_in&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a45">TOsclSockAddr</a></td></tr>
+<tr><td nowrap align=right valign=top>typedef socklen_t&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a46">TOsclSockAddrLen</a></td></tr>
+<tr><td nowrap align=right valign=top>typedef hostent&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a47">TOsclHostent</a></td></tr>
+<tr><td nowrap align=right valign=top>typedef off_t&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
 This file contains common typedefs based on the ANSI C limits.h header.
@@ -85,7 +88,29 @@
  This header file should work for any ANSI C compiler to determine the proper native C types to use for OSCL integer types.
 <p>
 <hr><h2>Define Documentation</h2>
-<a name="a37" doxytag="osclconfig_io.h::OSCL_AF_INET"></a><p>
+<a name="a43" doxytag="osclconfig_io.h::_FILE_OFFSET_BITS"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"> #define _FILE_OFFSET_BITS&nbsp;&nbsp;&nbsp;64
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a name="a38" doxytag="osclconfig_io.h::OSCL_AF_INET"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -151,7 +176,7 @@
     </td>
   </tr>
 </table>
-<a name="a8" doxytag="osclconfig_io.h::OSCL_HAS_BERKELEY_SOCKETS"></a><p>
+<a name="a9" doxytag="osclconfig_io.h::OSCL_HAS_BERKELEY_SOCKETS"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -195,6 +220,28 @@
     </td>
   </tr>
 </table>
+<a name="a6" doxytag="osclconfig_io.h::OSCL_HAS_LARGE_FILE_SUPPORT"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"> #define OSCL_HAS_LARGE_FILE_SUPPORT&nbsp;&nbsp;&nbsp;1
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
 <a name="a3" doxytag="osclconfig_io.h::OSCL_HAS_NATIVE_FILE_CACHE_ENABLE"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
@@ -239,7 +286,7 @@
     </td>
   </tr>
 </table>
-<a name="a9" doxytag="osclconfig_io.h::OSCL_HAS_SOCKET_SUPPORT"></a><p>
+<a name="a10" doxytag="osclconfig_io.h::OSCL_HAS_SOCKET_SUPPORT"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -283,7 +330,7 @@
     </td>
   </tr>
 </table>
-<a name="a7" doxytag="osclconfig_io.h::OSCL_HAS_SYMBIAN_DNS_SERVER"></a><p>
+<a name="a8" doxytag="osclconfig_io.h::OSCL_HAS_SYMBIAN_DNS_SERVER"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -305,7 +352,7 @@
     </td>
   </tr>
 </table>
-<a name="a6" doxytag="osclconfig_io.h::OSCL_HAS_SYMBIAN_SOCKET_SERVER"></a><p>
+<a name="a7" doxytag="osclconfig_io.h::OSCL_HAS_SYMBIAN_SOCKET_SERVER"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -327,7 +374,7 @@
     </td>
   </tr>
 </table>
-<a name="a40" doxytag="osclconfig_io.h::OSCL_IPPROTO_TCP"></a><p>
+<a name="a41" doxytag="osclconfig_io.h::OSCL_IPPROTO_TCP"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -349,7 +396,7 @@
     </td>
   </tr>
 </table>
-<a name="a41" doxytag="osclconfig_io.h::OSCL_IPPROTO_UDP"></a><p>
+<a name="a42" doxytag="osclconfig_io.h::OSCL_IPPROTO_UDP"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -371,7 +418,7 @@
     </td>
   </tr>
 </table>
-<a name="a36" doxytag="osclconfig_io.h::OSCL_SD_BOTH"></a><p>
+<a name="a37" doxytag="osclconfig_io.h::OSCL_SD_BOTH"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -393,7 +440,7 @@
     </td>
   </tr>
 </table>
-<a name="a34" doxytag="osclconfig_io.h::OSCL_SD_RECEIVE"></a><p>
+<a name="a35" doxytag="osclconfig_io.h::OSCL_SD_RECEIVE"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -415,7 +462,7 @@
     </td>
   </tr>
 </table>
-<a name="a35" doxytag="osclconfig_io.h::OSCL_SD_SEND"></a><p>
+<a name="a36" doxytag="osclconfig_io.h::OSCL_SD_SEND"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -437,7 +484,7 @@
     </td>
   </tr>
 </table>
-<a name="a39" doxytag="osclconfig_io.h::OSCL_SOCK_DATAGRAM"></a><p>
+<a name="a40" doxytag="osclconfig_io.h::OSCL_SOCK_DATAGRAM"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -459,7 +506,7 @@
     </td>
   </tr>
 </table>
-<a name="a38" doxytag="osclconfig_io.h::OSCL_SOCK_STREAM"></a><p>
+<a name="a39" doxytag="osclconfig_io.h::OSCL_SOCK_STREAM"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -481,7 +528,7 @@
     </td>
   </tr>
 </table>
-<a name="a17" doxytag="osclconfig_io.h::OsclAccept"></a><p>
+<a name="a18" doxytag="osclconfig_io.h::OsclAccept"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -522,7 +569,7 @@
         <span class="keywordflow">if</span> (!ok){err=errno;wouldblock=(err==EAGAIN||err==EWOULDBLOCK);}</pre></div>    </td>
   </tr>
 </table>
-<a name="a14" doxytag="osclconfig_io.h::OsclBind"></a><p>
+<a name="a15" doxytag="osclconfig_io.h::OsclBind"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -555,13 +602,13 @@
     <td>
 
 <p>
-<b>Value:</b><div class="fragment"><pre><a class="code" href="osclconfig__io_8h.html#a43">TOsclSockAddr</a>* tmpadr = &amp;addr;\
+<b>Value:</b><div class="fragment"><pre><a class="code" href="osclconfig__io_8h.html#a45">TOsclSockAddr</a>* tmpadr = &amp;addr;\
     sockaddr* sadr = <a class="code" href="group__osclbase.html#a86">OSCL_STATIC_CAST</a>(sockaddr*, tmpadr);\
         ok=(bind(s,sadr,<span class="keyword">sizeof</span>(addr))!=(-1));\
         <span class="keywordflow">if</span> (!ok)err=errno</pre></div>    </td>
   </tr>
 </table>
-<a name="a23" doxytag="osclconfig_io.h::OsclCloseSocket"></a><p>
+<a name="a24" doxytag="osclconfig_io.h::OsclCloseSocket"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -595,7 +642,7 @@
         <span class="keywordflow">if</span> (!ok)err=errno</pre></div>    </td>
   </tr>
 </table>
-<a name="a24" doxytag="osclconfig_io.h::OsclConnect"></a><p>
+<a name="a25" doxytag="osclconfig_io.h::OsclConnect"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -631,13 +678,13 @@
     <td>
 
 <p>
-<b>Value:</b><div class="fragment"><pre><a class="code" href="osclconfig__io_8h.html#a43">TOsclSockAddr</a>* tmpadr = &amp;addr;\
+<b>Value:</b><div class="fragment"><pre><a class="code" href="osclconfig__io_8h.html#a45">TOsclSockAddr</a>* tmpadr = &amp;addr;\
     sockaddr* sadr = <a class="code" href="group__osclbase.html#a86">OSCL_STATIC_CAST</a>(sockaddr*, tmpadr);\
         ok=(connect(s,sadr,<span class="keyword">sizeof</span>(addr))!=(-1));\
         <span class="keywordflow">if</span> (!ok){err=errno;wouldblock=(err==EINPROGRESS);}</pre></div>    </td>
   </tr>
 </table>
-<a name="a26" doxytag="osclconfig_io.h::OsclConnectComplete"></a><p>
+<a name="a27" doxytag="osclconfig_io.h::OsclConnectComplete"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -681,12 +728,12 @@
 <p>
 <b>Value:</b><div class="fragment"><pre>success=fail=<span class="keyword">false</span>;\
         <span class="keywordflow">if</span> (FD_ISSET(s,&amp;eset))\
-        {fail=<span class="keyword">true</span>;<a class="code" href="osclconfig__io_8h.html#a25">OsclGetAsyncSockErr</a>(s,ok,err);}\
+        {fail=<span class="keyword">true</span>;<a class="code" href="osclconfig__io_8h.html#a26">OsclGetAsyncSockErr</a>(s,ok,err);}\
         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (FD_ISSET(s,&amp;wset))\
-        {<a class="code" href="osclconfig__io_8h.html#a25">OsclGetAsyncSockErr</a>(s,ok,err);<span class="keywordflow">if</span> (ok &amp;&amp; err==0)success=<span class="keyword">true</span>;<span class="keywordflow">else</span> fail=<span class="keyword">true</span>;}</pre></div>    </td>
+        {<a class="code" href="osclconfig__io_8h.html#a26">OsclGetAsyncSockErr</a>(s,ok,err);<span class="keywordflow">if</span> (ok &amp;&amp; err==0)success=<span class="keyword">true</span>;<span class="keywordflow">else</span> fail=<span class="keyword">true</span>;}</pre></div>    </td>
   </tr>
 </table>
-<a name="a25" doxytag="osclconfig_io.h::OsclGetAsyncSockErr"></a><p>
+<a name="a26" doxytag="osclconfig_io.h::OsclGetAsyncSockErr"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -721,7 +768,7 @@
         <span class="keywordflow">if</span>(ok)err=opterr;<span class="keywordflow">else</span> err=errno;</pre></div>    </td>
   </tr>
 </table>
-<a name="a33" doxytag="osclconfig_io.h::OsclGetDottedAddr"></a><p>
+<a name="a34" doxytag="osclconfig_io.h::OsclGetDottedAddr"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -758,7 +805,7 @@
         ok=(dottedaddr!=<a class="code" href="group__osclbase.html#a81">NULL</a>);</pre></div>    </td>
   </tr>
 </table>
-<a name="a32" doxytag="osclconfig_io.h::OsclGethostbyname"></a><p>
+<a name="a33" doxytag="osclconfig_io.h::OsclGethostbyname"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -796,7 +843,7 @@
         <span class="keywordflow">if</span> (!ok)err=errno;</pre></div>    </td>
   </tr>
 </table>
-<a name="a15" doxytag="osclconfig_io.h::OsclJoin"></a><p>
+<a name="a16" doxytag="osclconfig_io.h::OsclJoin"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -840,7 +887,7 @@
 }</pre></div>    </td>
   </tr>
 </table>
-<a name="a16" doxytag="osclconfig_io.h::OsclListen"></a><p>
+<a name="a17" doxytag="osclconfig_io.h::OsclListen"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -877,7 +924,7 @@
         <span class="keywordflow">if</span> (!ok)err=errno</pre></div>    </td>
   </tr>
 </table>
-<a name="a11" doxytag="osclconfig_io.h::OsclMakeSockAddr"></a><p>
+<a name="a12" doxytag="osclconfig_io.h::OsclMakeSockAddr"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -910,13 +957,13 @@
     <td>
 
 <p>
-<b>Value:</b><div class="fragment"><pre>sockaddr.sin_family=<a class="code" href="osclconfig__io_8h.html#a37">OSCL_AF_INET</a>;\
+<b>Value:</b><div class="fragment"><pre>sockaddr.sin_family=<a class="code" href="osclconfig__io_8h.html#a38">OSCL_AF_INET</a>;\
         sockaddr.sin_port=htons(port);\
         int32 result=inet_aton((<span class="keyword">const</span> <span class="keywordtype">char</span>*)addrstr,&amp;sockaddr.sin_addr);\
         ok=(result!=0);</pre></div>    </td>
   </tr>
 </table>
-<a name="a27" doxytag="osclconfig_io.h::OsclRecv"></a><p>
+<a name="a28" doxytag="osclconfig_io.h::OsclRecv"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -963,7 +1010,7 @@
         <span class="keywordflow">if</span> (!ok){err=errno;wouldblock=(err==EAGAIN);}</pre></div>    </td>
   </tr>
 </table>
-<a name="a28" doxytag="osclconfig_io.h::OsclRecvFrom"></a><p>
+<a name="a29" doxytag="osclconfig_io.h::OsclRecvFrom"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -1019,7 +1066,7 @@
 }</pre></div>    </td>
   </tr>
 </table>
-<a name="a22" doxytag="osclconfig_io.h::OsclSend"></a><p>
+<a name="a23" doxytag="osclconfig_io.h::OsclSend"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -1066,7 +1113,7 @@
         <span class="keywordflow">if</span> (!ok){err=errno;wouldblock=(err==EAGAIN||err==EWOULDBLOCK);}</pre></div>    </td>
   </tr>
 </table>
-<a name="a21" doxytag="osclconfig_io.h::OsclSendTo"></a><p>
+<a name="a22" doxytag="osclconfig_io.h::OsclSendTo"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -1111,14 +1158,14 @@
     <td>
 
 <p>
-<b>Value:</b><div class="fragment"><pre><a class="code" href="osclconfig__io_8h.html#a43">TOsclSockAddr</a>* tmpadr = &amp;addr;\
+<b>Value:</b><div class="fragment"><pre><a class="code" href="osclconfig__io_8h.html#a45">TOsclSockAddr</a>* tmpadr = &amp;addr;\
     sockaddr* sadr = <a class="code" href="group__osclbase.html#a86">OSCL_STATIC_CAST</a>(sockaddr*, tmpadr);\
         nbytes=sendto(s,(<span class="keyword">const</span> <span class="keywordtype">void</span>*)(buf),(size_t)(len),0,sadr,(socklen_t)<span class="keyword">sizeof</span>(addr));\
         ok=(nbytes!=(-1));\
         <span class="keywordflow">if</span> (!ok){err=errno;wouldblock=(err==EAGAIN||err==EWOULDBLOCK);}</pre></div>    </td>
   </tr>
 </table>
-<a name="a18" doxytag="osclconfig_io.h::OsclSetNonBlocking"></a><p>
+<a name="a19" doxytag="osclconfig_io.h::OsclSetNonBlocking"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -1152,7 +1199,7 @@
         <span class="keywordflow">if</span> (!ok)err=errno</pre></div>    </td>
   </tr>
 </table>
-<a name="a13" doxytag="osclconfig_io.h::OsclSetRecvBufferSize"></a><p>
+<a name="a14" doxytag="osclconfig_io.h::OsclSetRecvBufferSize"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -1189,7 +1236,7 @@
         <span class="keywordflow">if</span> (!ok)err=errno</pre></div>    </td>
   </tr>
 </table>
-<a name="a19" doxytag="osclconfig_io.h::OsclShutdown"></a><p>
+<a name="a20" doxytag="osclconfig_io.h::OsclShutdown"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -1226,7 +1273,7 @@
         <span class="keywordflow">if</span> (!ok)err=errno</pre></div>    </td>
   </tr>
 </table>
-<a name="a20" doxytag="osclconfig_io.h::OsclSocket"></a><p>
+<a name="a21" doxytag="osclconfig_io.h::OsclSocket"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -1270,7 +1317,7 @@
         <span class="keywordflow">if</span> (!ok)err=errno</pre></div>    </td>
   </tr>
 </table>
-<a name="a31" doxytag="osclconfig_io.h::OsclSocketCleanup"></a><p>
+<a name="a32" doxytag="osclconfig_io.h::OsclSocketCleanup"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -1298,7 +1345,7 @@
         ok=<span class="keyword">true</span></pre></div>    </td>
   </tr>
 </table>
-<a name="a29" doxytag="osclconfig_io.h::OsclSocketSelect"></a><p>
+<a name="a30" doxytag="osclconfig_io.h::OsclSocketSelect"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -1348,7 +1395,7 @@
         <span class="keywordflow">if</span> (!ok)err=errno</pre></div>    </td>
   </tr>
 </table>
-<a name="a30" doxytag="osclconfig_io.h::OsclSocketStartup"></a><p>
+<a name="a31" doxytag="osclconfig_io.h::OsclSocketStartup"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -1376,7 +1423,7 @@
         ok=<span class="keyword">true</span></pre></div>    </td>
   </tr>
 </table>
-<a name="a12" doxytag="osclconfig_io.h::OsclUnMakeSockAddr"></a><p>
+<a name="a13" doxytag="osclconfig_io.h::OsclUnMakeSockAddr"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -1406,7 +1453,7 @@
     </td>
   </tr>
 </table>
-<a name="a10" doxytag="osclconfig_io.h::OsclValidInetAddr"></a><p>
+<a name="a11" doxytag="osclconfig_io.h::OsclValidInetAddr"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -1434,7 +1481,29 @@
   </tr>
 </table>
 <hr><h2>Typedef Documentation</h2>
-<a name="a45" doxytag="osclconfig_io.h::TOsclHostent"></a><p>
+<a name="a48" doxytag="osclconfig_io.h::TOsclFileOffset"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"> typedef off_t TOsclFileOffset
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a name="a47" doxytag="osclconfig_io.h::TOsclHostent"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -1456,7 +1525,7 @@
     </td>
   </tr>
 </table>
-<a name="a43" doxytag="osclconfig_io.h::TOsclSockAddr"></a><p>
+<a name="a45" doxytag="osclconfig_io.h::TOsclSockAddr"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -1478,7 +1547,7 @@
     </td>
   </tr>
 </table>
-<a name="a44" doxytag="osclconfig_io.h::TOsclSockAddrLen"></a><p>
+<a name="a46" doxytag="osclconfig_io.h::TOsclSockAddrLen"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -1500,7 +1569,7 @@
     </td>
   </tr>
 </table>
-<a name="a42" doxytag="osclconfig_io.h::TOsclSocket"></a><p>
+<a name="a44" doxytag="osclconfig_io.h::TOsclSocket"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -1523,7 +1592,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__io__check_8h-source.html b/doc/oscl_html/osclconfig__io__check_8h-source.html
index db3c143..71ac2bc 100644
--- a/doc/oscl_html/osclconfig__io__check_8h-source.html
+++ b/doc/oscl_html/osclconfig__io__check_8h-source.html
@@ -33,228 +33,235 @@
 00051 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OSCL_HAS_PV_FILE_CACHE has to be defined to either 1 or 0"</span>
 00052 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
 00053 <span class="preprocessor"></span>
-00059 <span class="preprocessor">#ifndef OSCL_FILE_BUFFER_MAX_SIZE</span>
-00060 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OSCL_FILE_BUFFER_MAX_SIZE has to be defined to a numeric value"</span>
+00059 <span class="preprocessor">#ifndef OSCL_HAS_LARGE_FILE_SUPPORT</span>
+00060 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OSCL_HAS_LARGE_FILE_SUPPORT has to be defined to either 1 or 0"</span>
 00061 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
 00062 <span class="preprocessor"></span>
-00068 <span class="preprocessor">#ifndef OSCL_HAS_SOCKET_SUPPORT</span>
-00069 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OSCL_HAS_SOCKET_SUPPORT has to be defined to either 1 or 0"</span>
-00070 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00071 <span class="preprocessor"></span>
-00077 <span class="preprocessor">#ifndef OSCL_HAS_SYMBIAN_SOCKET_SERVER</span>
-00078 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OSCL_HAS_SYMBIAN_SOCKET_SERVER has to be defined to either 1 or 0"</span>
+<a name="l00069"></a><a class="code" href="osclconfig__io__check_8h.html#a0">00069</a> <span class="keyword">typedef</span> <a class="code" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> <a class="code" href="osclconfig__io__check_8h.html#a0">__verify__TOsclFileOffset__defined__</a>;
+00070 
+00071 
+00077 <span class="preprocessor">#ifndef OSCL_FILE_BUFFER_MAX_SIZE</span>
+00078 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OSCL_FILE_BUFFER_MAX_SIZE has to be defined to a numeric value"</span>
 00079 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
 00080 <span class="preprocessor"></span>
-00086 <span class="preprocessor">#ifndef OSCL_HAS_SYMBIAN_DNS_SERVER</span>
-00087 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OSCL_HAS_SYMBIAN_DNS_SERVER has to be defined to either 1 or 0"</span>
+00086 <span class="preprocessor">#ifndef OSCL_HAS_SOCKET_SUPPORT</span>
+00087 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OSCL_HAS_SOCKET_SUPPORT has to be defined to either 1 or 0"</span>
 00088 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
 00089 <span class="preprocessor"></span>
-00096 <span class="preprocessor">#ifndef OSCL_HAS_BERKELEY_SOCKETS</span>
-00097 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OSCL_HAS_BERKELEY_SOCKETS has to be defined to either 1 or 0"</span>
-00098 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00099 <span class="preprocessor"></span>
-00104 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
-00105 <span class="preprocessor"></span><span class="keyword">typedef</span> <a class="code" href="osclconfig__io_8h.html#a42">TOsclSocket</a> __TOsclSocketCheck___;
-00106 <span class="preprocessor">#endif</span>
+00095 <span class="preprocessor">#ifndef OSCL_HAS_SYMBIAN_SOCKET_SERVER</span>
+00096 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OSCL_HAS_SYMBIAN_SOCKET_SERVER has to be defined to either 1 or 0"</span>
+00097 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00098 <span class="preprocessor"></span>
+00104 <span class="preprocessor">#ifndef OSCL_HAS_SYMBIAN_DNS_SERVER</span>
+00105 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OSCL_HAS_SYMBIAN_DNS_SERVER has to be defined to either 1 or 0"</span>
+00106 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
 00107 <span class="preprocessor"></span>
-00112 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
-00113 <span class="preprocessor"></span><span class="keyword">typedef</span> <a class="code" href="osclconfig__io_8h.html#a43">TOsclSockAddr</a> __TOsclSockAddrCheck___;
-00114 <span class="preprocessor">#endif</span>
-00115 <span class="preprocessor"></span>
-00121 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
-00122 <span class="preprocessor"></span><span class="keyword">typedef</span> <a class="code" href="osclconfig__io_8h.html#a44">TOsclSockAddrLen</a> __TOsclSockAddrLenCheck___;
-00123 <span class="preprocessor">#endif</span>
-00124 <span class="preprocessor"></span>
-00135 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
-00136 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclBind</span>
-00137 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclBind(s,addr,ok,err) has to be defined"</span>
-00138 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00139 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00140 <span class="preprocessor"></span>
-00152 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
-00153 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclListen</span>
-00154 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclListen(s,size,ok,err) has to be defined"</span>
-00155 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00114 <span class="preprocessor">#ifndef OSCL_HAS_BERKELEY_SOCKETS</span>
+00115 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OSCL_HAS_BERKELEY_SOCKETS has to be defined to either 1 or 0"</span>
+00116 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00117 <span class="preprocessor"></span>
+00122 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
+00123 <span class="preprocessor"></span><span class="keyword">typedef</span> <a class="code" href="osclconfig__io_8h.html#a44">TOsclSocket</a> __TOsclSocketCheck___;
+00124 <span class="preprocessor">#endif</span>
+00125 <span class="preprocessor"></span>
+00130 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
+00131 <span class="preprocessor"></span><span class="keyword">typedef</span> <a class="code" href="osclconfig__io_8h.html#a45">TOsclSockAddr</a> __TOsclSockAddrCheck___;
+00132 <span class="preprocessor">#endif</span>
+00133 <span class="preprocessor"></span>
+00139 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
+00140 <span class="preprocessor"></span><span class="keyword">typedef</span> <a class="code" href="osclconfig__io_8h.html#a46">TOsclSockAddrLen</a> __TOsclSockAddrLenCheck___;
+00141 <span class="preprocessor">#endif</span>
+00142 <span class="preprocessor"></span>
+00153 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
+00154 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclBind</span>
+00155 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclBind(s,addr,ok,err) has to be defined"</span>
 00156 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00157 <span class="preprocessor"></span>
-00171 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
-00172 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclAccept</span>
-00173 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclAccept(s,accept_s,ok,err,wouldblock) has to be defined"</span>
+00157 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00158 <span class="preprocessor"></span>
+00170 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
+00171 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclListen</span>
+00172 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclListen(s,size,ok,err) has to be defined"</span>
+00173 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
 00174 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00175 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00176 <span class="preprocessor"></span>
-00186 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
-00187 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclSetNonBlocking</span>
-00188 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclSetNonBlocking(s,ok,err) has to be defined"</span>
-00189 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00190 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00191 <span class="preprocessor"></span>
-00203 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
-00204 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclShutdown</span>
-00205 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclShutdown(s,how,ok,err) has to be defined"</span>
-00206 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00175 <span class="preprocessor"></span>
+00189 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
+00190 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclAccept</span>
+00191 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclAccept(s,accept_s,ok,err,wouldblock) has to be defined"</span>
+00192 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00193 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00194 <span class="preprocessor"></span>
+00204 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
+00205 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclSetNonBlocking</span>
+00206 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclSetNonBlocking(s,ok,err) has to be defined"</span>
 00207 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00208 <span class="preprocessor"></span>
-00220 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
-00221 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclSocket</span>
-00222 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclSocket(s,fam,type,prot,ok,err) has to be defined"</span>
-00223 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00208 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00209 <span class="preprocessor"></span>
+00221 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
+00222 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclShutdown</span>
+00223 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclShutdown(s,how,ok,err) has to be defined"</span>
 00224 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00225 <span class="preprocessor"></span>
-00240 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
-00241 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclSendTo</span>
-00242 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclSendTo(s,buf,len,flags,addr,ok,err,nbytes,wouldblock) has to be defined"</span>
-00243 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00244 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00245 <span class="preprocessor"></span>
-00259 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
-00260 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclSend</span>
-00261 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclSend(s,buf,len,ok,err,nbytes,wouldblock) has to be defined"</span>
+00225 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00226 <span class="preprocessor"></span>
+00238 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
+00239 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclSocket</span>
+00240 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclSocket(s,fam,type,prot,ok,err) has to be defined"</span>
+00241 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00242 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00243 <span class="preprocessor"></span>
+00258 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
+00259 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclSendTo</span>
+00260 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclSendTo(s,buf,len,flags,addr,ok,err,nbytes,wouldblock) has to be defined"</span>
+00261 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
 00262 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00263 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00264 <span class="preprocessor"></span>
-00274 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
-00275 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclCloseSocket</span>
-00276 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclCloseSocket(s,ok,err) has to be defined"</span>
-00277 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00278 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00279 <span class="preprocessor"></span>
+00263 <span class="preprocessor"></span>
+00277 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
+00278 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclSend</span>
+00279 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclSend(s,buf,len,ok,err,nbytes,wouldblock) has to be defined"</span>
+00280 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00281 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00282 <span class="preprocessor"></span>
 00292 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
-00293 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclConnect</span>
-00294 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclConnect(s,addr,ok,err,wouldblock) has to be defined"</span>
+00293 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclCloseSocket</span>
+00294 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclCloseSocket(s,ok,err) has to be defined"</span>
 00295 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
 00296 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
 00297 <span class="preprocessor"></span>
-00315 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
-00316 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclConnectComplete</span>
-00317 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclConnectComplete(s,wset,eset,success,fail,ok,err) has to be defined"</span>
-00318 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00319 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00320 <span class="preprocessor"></span>
-00334 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
-00335 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclRecv</span>
-00336 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclRecv(s,buf,len,ok,err,nbytes,wouldblock) has to be defined"</span>
+00310 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
+00311 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclConnect</span>
+00312 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclConnect(s,addr,ok,err,wouldblock) has to be defined"</span>
+00313 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00314 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00315 <span class="preprocessor"></span>
+00333 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
+00334 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclConnectComplete</span>
+00335 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclConnectComplete(s,wset,eset,success,fail,ok,err) has to be defined"</span>
+00336 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
 00337 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00338 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00339 <span class="preprocessor"></span>
-00353 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
-00354 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclRecvFrom</span>
-00355 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclRecvFrom(s,buf,len,paddr,paddrlen,ok,err,nbytes,wouldblock) has to be defined"</span>
+00338 <span class="preprocessor"></span>
+00352 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
+00353 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclRecv</span>
+00354 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclRecv(s,buf,len,ok,err,nbytes,wouldblock) has to be defined"</span>
+00355 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
 00356 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00357 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00358 <span class="preprocessor"></span>
+00357 <span class="preprocessor"></span>
 00371 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
-00372 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclSocketSelect</span>
-00373 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclSocketSelect(nfds,rd,wr,ex,timeout,ok,err,nhandles) has to be defined"</span>
+00372 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclRecvFrom</span>
+00373 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclRecvFrom(s,buf,len,paddr,paddrlen,ok,err,nbytes,wouldblock) has to be defined"</span>
 00374 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
 00375 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
 00376 <span class="preprocessor"></span>
-00385 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
-00386 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclSocketStartup</span>
-00387 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclSocketStartup(ok) has to be defined"</span>
-00388 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00389 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00390 <span class="preprocessor"></span>
-00399 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
-00400 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclSocketCleanup</span>
-00401 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclSocketCleanup(ok) has to be defined"</span>
-00402 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00403 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00404 <span class="preprocessor"></span>
-00416 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
-00417 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclGetAsyncSockErr</span>
-00418 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclGetAsyncSockErr(s,ok,err) has to be defined"</span>
-00419 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00389 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
+00390 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclSocketSelect</span>
+00391 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclSocketSelect(nfds,rd,wr,ex,timeout,ok,err,nhandles) has to be defined"</span>
+00392 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00393 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00394 <span class="preprocessor"></span>
+00403 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
+00404 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclSocketStartup</span>
+00405 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclSocketStartup(ok) has to be defined"</span>
+00406 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00407 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00408 <span class="preprocessor"></span>
+00417 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
+00418 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclSocketCleanup</span>
+00419 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclSocketCleanup(ok) has to be defined"</span>
 00420 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00421 <span class="preprocessor"></span>
-00426 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
-00427 <span class="preprocessor"></span><span class="keyword">typedef</span> <a class="code" href="osclconfig__io_8h.html#a45">TOsclHostent</a> __TOsclHostentCheck___;
-00428 <span class="preprocessor">#endif</span>
-00429 <span class="preprocessor"></span>
-00441 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
-00442 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclGethostbyname</span>
-00443 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclGethostbyname(name,hostent,ok,err) has to be defined"</span>
-00444 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00445 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00446 <span class="preprocessor"></span>
-00456 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
-00457 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclGetDottedAddr</span>
-00458 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclGetDottedAddr(hostent,dottedaddr,ok) has to be defined"</span>
-00459 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00460 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00461 <span class="preprocessor"></span>
-00462 
-00468 <span class="preprocessor">#if OSCL_HAS_SELECTABLE_PIPES</span>
-00469 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclPipe</span>
-00470 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclPipe(pipearray) has to be defined"</span>
-00471 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00472 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00473 <span class="preprocessor"></span>
-00474 <span class="preprocessor">#if OSCL_HAS_SELECTABLE_PIPES</span>
-00475 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclReadFD</span>
-00476 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclReadFD(fd,buffer,cnt) has to be defined"</span>
+00421 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00422 <span class="preprocessor"></span>
+00434 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
+00435 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclGetAsyncSockErr</span>
+00436 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclGetAsyncSockErr(s,ok,err) has to be defined"</span>
+00437 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00438 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00439 <span class="preprocessor"></span>
+00444 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
+00445 <span class="preprocessor"></span><span class="keyword">typedef</span> <a class="code" href="osclconfig__io_8h.html#a47">TOsclHostent</a> __TOsclHostentCheck___;
+00446 <span class="preprocessor">#endif</span>
+00447 <span class="preprocessor"></span>
+00459 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
+00460 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclGethostbyname</span>
+00461 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclGethostbyname(name,hostent,ok,err) has to be defined"</span>
+00462 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00463 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00464 <span class="preprocessor"></span>
+00474 <span class="preprocessor">#if OSCL_HAS_BERKELEY_SOCKETS</span>
+00475 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclGetDottedAddr</span>
+00476 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclGetDottedAddr(hostent,dottedaddr,ok) has to be defined"</span>
 00477 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
 00478 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
 00479 <span class="preprocessor"></span>
-00480 <span class="preprocessor">#if OSCL_HAS_SELECTABLE_PIPES</span>
-00481 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclWriteFD</span>
-00482 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclWriteFD(fd,buffer,cnt) has to be defined"</span>
-00483 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00484 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00485 <span class="preprocessor"></span>
-00486 <span class="preprocessor">#if OSCL_HAS_SOCKET_SUPPORT</span>
-00487 <span class="preprocessor"></span>
-00492 <span class="preprocessor">#ifndef OsclValidInetAddr</span>
-00493 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclValidInetAddr(addr) must be defined"</span>
-00494 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00480 
+00486 <span class="preprocessor">#if OSCL_HAS_SELECTABLE_PIPES</span>
+00487 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclPipe</span>
+00488 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclPipe(pipearray) has to be defined"</span>
+00489 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00490 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00491 <span class="preprocessor"></span>
+00492 <span class="preprocessor">#if OSCL_HAS_SELECTABLE_PIPES</span>
+00493 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclReadFD</span>
+00494 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclReadFD(fd,buffer,cnt) has to be defined"</span>
 00495 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00496 <span class="preprocessor"></span>
-00497 <span class="preprocessor">#if OSCL_HAS_SOCKET_SUPPORT</span>
-00498 <span class="preprocessor"></span>
-00502 <span class="preprocessor">#ifndef OSCL_SD_RECEIVE</span>
-00503 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OSCL_SD_RECEIVE has to be defined"</span>
-00504 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00505 <span class="preprocessor"></span><span class="preprocessor">#ifndef OSCL_SD_SEND</span>
-00506 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OSCL_SD_SEND has to be defined"</span>
-00507 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00508 <span class="preprocessor"></span><span class="preprocessor">#ifndef OSCL_SD_BOTH</span>
-00509 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OSCL_SD_BOTH has to be defined"</span>
-00510 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00511 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00512 <span class="preprocessor"></span>
-00513 <span class="preprocessor">#if OSCL_HAS_SOCKET_SUPPORT</span>
+00496 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00497 <span class="preprocessor"></span>
+00498 <span class="preprocessor">#if OSCL_HAS_SELECTABLE_PIPES</span>
+00499 <span class="preprocessor"></span><span class="preprocessor">#ifndef OsclWriteFD</span>
+00500 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclWriteFD(fd,buffer,cnt) has to be defined"</span>
+00501 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00502 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00503 <span class="preprocessor"></span>
+00504 <span class="preprocessor">#if OSCL_HAS_SOCKET_SUPPORT</span>
+00505 <span class="preprocessor"></span>
+00510 <span class="preprocessor">#ifndef OsclValidInetAddr</span>
+00511 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OsclValidInetAddr(addr) must be defined"</span>
+00512 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00513 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
 00514 <span class="preprocessor"></span>
-00518 <span class="preprocessor">#ifndef OSCL_AF_INET</span>
-00519 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OSCL_AF_INET has to be defined"</span>
-00520 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00521 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00522 <span class="preprocessor"></span>
-00523 <span class="preprocessor">#if OSCL_HAS_SOCKET_SUPPORT</span>
-00524 <span class="preprocessor"></span>
-00528 <span class="preprocessor">#ifndef OSCL_SOCK_STREAM</span>
-00529 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OSCL_SOCK_STREAM has to be defined"</span>
-00530 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00531 <span class="preprocessor"></span><span class="preprocessor">#ifndef OSCL_SOCK_DATAGRAM</span>
-00532 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OSCL_SOCK_DATAGRAM has to be defined"</span>
-00533 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00534 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00535 <span class="preprocessor"></span>
-00536 <span class="preprocessor">#if OSCL_HAS_SOCKET_SUPPORT</span>
-00537 <span class="preprocessor"></span>
-00541 <span class="preprocessor">#ifndef OSCL_IPPROTO_TCP</span>
-00542 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OSCL_IPPROTO_TCP has to be defined"</span>
-00543 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00544 <span class="preprocessor"></span><span class="preprocessor">#ifndef OSCL_IPPROTO_UDP</span>
-00545 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OSCL_IPPROTO_UDP has to be defined"</span>
-00546 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00547 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00548 <span class="preprocessor"></span>
-00549 
-00550 <span class="preprocessor">#endif // OSCLCONFIG_IO_CHECK_H_INCLUDED</span>
-00551 <span class="preprocessor"></span>
-00552 
+00515 <span class="preprocessor">#if OSCL_HAS_SOCKET_SUPPORT</span>
+00516 <span class="preprocessor"></span>
+00520 <span class="preprocessor">#ifndef OSCL_SD_RECEIVE</span>
+00521 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OSCL_SD_RECEIVE has to be defined"</span>
+00522 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00523 <span class="preprocessor"></span><span class="preprocessor">#ifndef OSCL_SD_SEND</span>
+00524 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OSCL_SD_SEND has to be defined"</span>
+00525 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00526 <span class="preprocessor"></span><span class="preprocessor">#ifndef OSCL_SD_BOTH</span>
+00527 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OSCL_SD_BOTH has to be defined"</span>
+00528 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00529 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00530 <span class="preprocessor"></span>
+00531 <span class="preprocessor">#if OSCL_HAS_SOCKET_SUPPORT</span>
+00532 <span class="preprocessor"></span>
+00536 <span class="preprocessor">#ifndef OSCL_AF_INET</span>
+00537 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OSCL_AF_INET has to be defined"</span>
+00538 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00539 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00540 <span class="preprocessor"></span>
+00541 <span class="preprocessor">#if OSCL_HAS_SOCKET_SUPPORT</span>
+00542 <span class="preprocessor"></span>
+00546 <span class="preprocessor">#ifndef OSCL_SOCK_STREAM</span>
+00547 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OSCL_SOCK_STREAM has to be defined"</span>
+00548 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00549 <span class="preprocessor"></span><span class="preprocessor">#ifndef OSCL_SOCK_DATAGRAM</span>
+00550 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OSCL_SOCK_DATAGRAM has to be defined"</span>
+00551 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00552 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00553 <span class="preprocessor"></span>
+00554 <span class="preprocessor">#if OSCL_HAS_SOCKET_SUPPORT</span>
+00555 <span class="preprocessor"></span>
+00559 <span class="preprocessor">#ifndef OSCL_IPPROTO_TCP</span>
+00560 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OSCL_IPPROTO_TCP has to be defined"</span>
+00561 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00562 <span class="preprocessor"></span><span class="preprocessor">#ifndef OSCL_IPPROTO_UDP</span>
+00563 <span class="preprocessor"></span><span class="preprocessor">#error "ERROR: OSCL_IPPROTO_UDP has to be defined"</span>
+00564 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00565 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00566 <span class="preprocessor"></span>
+00567 
+00568 <span class="preprocessor">#endif // OSCLCONFIG_IO_CHECK_H_INCLUDED</span>
+00569 <span class="preprocessor"></span>
+00570 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__io__check_8h.html b/doc/oscl_html/osclconfig__io__check_8h.html
index 4f11640..ced8fff 100644
--- a/doc/oscl_html/osclconfig__io__check_8h.html
+++ b/doc/oscl_html/osclconfig__io__check_8h.html
@@ -10,9 +10,34 @@
 <p>
 <a href="osclconfig__io__check_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
 <tr><td></td></tr>
+<tr><td colspan=2><br><h2>Typedefs</h2></td></tr>
+<tr><td nowrap align=right valign=top>typedef <a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a>&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__io__check_8h.html#a0">__verify__TOsclFileOffset__defined__</a></td></tr>
+</table>
+<hr><h2>Typedef Documentation</h2>
+<a name="a0" doxytag="osclconfig_io_check.h::__verify__TOsclFileOffset__defined__"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"> typedef <a class="el" href="osclconfig__io_8h.html#a48">TOsclFileOffset</a> __verify__TOsclFileOffset__defined__
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+type TOsclFileOffset should be defined as the type used for file size and offsets on the target platform. Example: typedef size_t TOsclFileOffset;     </td>
+  </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__ix86_8h-source.html b/doc/oscl_html/osclconfig__ix86_8h-source.html
index d8eeb32..26d7cbb 100644
--- a/doc/oscl_html/osclconfig__ix86_8h-source.html
+++ b/doc/oscl_html/osclconfig__ix86_8h-source.html
@@ -26,7 +26,7 @@
 00023 
 00024 <span class="preprocessor">#endif</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__ix86_8h.html b/doc/oscl_html/osclconfig__ix86_8h.html
index 82f40d2..5dea773 100644
--- a/doc/oscl_html/osclconfig__ix86_8h.html
+++ b/doc/oscl_html/osclconfig__ix86_8h.html
@@ -24,7 +24,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__lib_8h-source.html b/doc/oscl_html/osclconfig__lib_8h-source.html
index 20567ca..4a26795 100644
--- a/doc/oscl_html/osclconfig__lib_8h-source.html
+++ b/doc/oscl_html/osclconfig__lib_8h-source.html
@@ -48,7 +48,7 @@
 00045 <span class="preprocessor">#endif // OSCLCONFIG_LIB_H_INCLUDED</span>
 00046 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__lib_8h.html b/doc/oscl_html/osclconfig__lib_8h.html
index 1b8b026..13bc29f 100644
--- a/doc/oscl_html/osclconfig__lib_8h.html
+++ b/doc/oscl_html/osclconfig__lib_8h.html
@@ -115,7 +115,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__lib__check_8h-source.html b/doc/oscl_html/osclconfig__lib__check_8h-source.html
index d080174..a3f3128 100644
--- a/doc/oscl_html/osclconfig__lib__check_8h-source.html
+++ b/doc/oscl_html/osclconfig__lib__check_8h-source.html
@@ -43,7 +43,7 @@
 00051 <span class="preprocessor"></span>
 00052 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__lib__check_8h.html b/doc/oscl_html/osclconfig__lib__check_8h.html
index 14a7fa5..08872f4 100644
--- a/doc/oscl_html/osclconfig__lib__check_8h.html
+++ b/doc/oscl_html/osclconfig__lib__check_8h.html
@@ -12,7 +12,7 @@
 <tr><td></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__limits__typedefs_8h-source.html b/doc/oscl_html/osclconfig__limits__typedefs_8h-source.html
index 118a39d..c5c4069 100644
--- a/doc/oscl_html/osclconfig__limits__typedefs_8h-source.html
+++ b/doc/oscl_html/osclconfig__limits__typedefs_8h-source.html
@@ -70,7 +70,7 @@
 00070 
 00071 <span class="preprocessor">#endif</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__limits__typedefs_8h.html b/doc/oscl_html/osclconfig__limits__typedefs_8h.html
index 02285e4..4137b10 100644
--- a/doc/oscl_html/osclconfig__limits__typedefs_8h.html
+++ b/doc/oscl_html/osclconfig__limits__typedefs_8h.html
@@ -69,7 +69,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__memory_8h-source.html b/doc/oscl_html/osclconfig__memory_8h-source.html
index f1d4a80..f392821 100644
--- a/doc/oscl_html/osclconfig__memory_8h-source.html
+++ b/doc/oscl_html/osclconfig__memory_8h-source.html
@@ -81,7 +81,7 @@
 00073 
 00074 <span class="preprocessor">#endif</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__memory_8h.html b/doc/oscl_html/osclconfig__memory_8h.html
index d4814de..20a4288 100644
--- a/doc/oscl_html/osclconfig__memory_8h.html
+++ b/doc/oscl_html/osclconfig__memory_8h.html
@@ -132,7 +132,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__memory__check_8h-source.html b/doc/oscl_html/osclconfig__memory__check_8h-source.html
index 247e453..fc23e96 100644
--- a/doc/oscl_html/osclconfig__memory__check_8h-source.html
+++ b/doc/oscl_html/osclconfig__memory__check_8h-source.html
@@ -46,7 +46,7 @@
 00054 <span class="preprocessor"></span>
 00055 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__memory__check_8h.html b/doc/oscl_html/osclconfig__memory__check_8h.html
index a67449e..12b76a9 100644
--- a/doc/oscl_html/osclconfig__memory__check_8h.html
+++ b/doc/oscl_html/osclconfig__memory__check_8h.html
@@ -12,7 +12,7 @@
 <tr><td></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__no__os_8h-source.html b/doc/oscl_html/osclconfig__no__os_8h-source.html
index 25e5aae..9be3abf 100644
--- a/doc/oscl_html/osclconfig__no__os_8h-source.html
+++ b/doc/oscl_html/osclconfig__no__os_8h-source.html
@@ -52,7 +52,7 @@
 00051 <span class="preprocessor"></span>
 00052 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__no__os_8h.html b/doc/oscl_html/osclconfig__no__os_8h.html
index e313d83..79e7dd0 100644
--- a/doc/oscl_html/osclconfig__no__os_8h.html
+++ b/doc/oscl_html/osclconfig__no__os_8h.html
@@ -34,7 +34,7 @@
 <tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="group__osclconfig.html#a30">OSCL_HAS_BERKELEY_SOCKETS</a>&nbsp;&nbsp;&nbsp;0</td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__proc_8h-source.html b/doc/oscl_html/osclconfig__proc_8h-source.html
index 595e9a9..f077c6b 100644
--- a/doc/oscl_html/osclconfig__proc_8h-source.html
+++ b/doc/oscl_html/osclconfig__proc_8h-source.html
@@ -21,14 +21,14 @@
 00018 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="osclconfig_8h.html">osclconfig.h</a>"</span>
 00019 <span class="preprocessor">#endif</span>
 00020 <span class="preprocessor"></span>
-00021 <span class="preprocessor">#include "<a class="code" href="osclconfig__proc__unix__nj_8h.html">osclconfig_proc_unix_nj.h</a>"</span>
+00021 <span class="preprocessor">#include "<a class="code" href="osclconfig__proc__unix__android_8h.html">osclconfig_proc_unix_android.h</a>"</span>
 00022 
 00023 <span class="preprocessor">#include "<a class="code" href="osclconfig__proc__check_8h.html">osclconfig_proc_check.h</a>"</span>
 00024 
 00025 
 00026 <span class="preprocessor">#endif</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__proc_8h.html b/doc/oscl_html/osclconfig__proc_8h.html
index 0d6c26a..19e872e 100644
--- a/doc/oscl_html/osclconfig__proc_8h.html
+++ b/doc/oscl_html/osclconfig__proc_8h.html
@@ -10,7 +10,7 @@
 <a href="#_details">More...</a>
 <p>
 <code>#include "<a class="el" href="osclconfig_8h-source.html">osclconfig.h</a>"</code><br>
-<code>#include "<a class="el" href="osclconfig__proc__unix__nj_8h-source.html">osclconfig_proc_unix_nj.h</a>"</code><br>
+<code>#include "<a class="el" href="osclconfig__proc__unix__android_8h-source.html">osclconfig_proc_unix_android.h</a>"</code><br>
 <code>#include "<a class="el" href="osclconfig__proc__check_8h-source.html">osclconfig_proc_check.h</a>"</code><br>
 
 <p>
@@ -23,7 +23,7 @@
 
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__proc__check_8h-source.html b/doc/oscl_html/osclconfig__proc__check_8h-source.html
index 71fa313..2542e34 100644
--- a/doc/oscl_html/osclconfig__proc__check_8h-source.html
+++ b/doc/oscl_html/osclconfig__proc__check_8h-source.html
@@ -53,7 +53,7 @@
 00139 <span class="preprocessor"></span>
 00140 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__proc__check_8h.html b/doc/oscl_html/osclconfig__proc__check_8h.html
index a920b3b..827dd68 100644
--- a/doc/oscl_html/osclconfig__proc__check_8h.html
+++ b/doc/oscl_html/osclconfig__proc__check_8h.html
@@ -11,13 +11,13 @@
 <a href="osclconfig__proc__check_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
 <tr><td></td></tr>
 <tr><td colspan=2><br><h2>Typedefs</h2></td></tr>
-<tr><td nowrap align=right valign=top>typedef <a class="el" href="osclconfig__proc__unix__nj_8h.html#a6">TOsclThreadId</a>&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__check_8h.html#a0">__verify__TOsclThreadId__defined__</a></td></tr>
-<tr><td nowrap align=right valign=top>typedef <a class="el" href="osclconfig__proc__unix__nj_8h.html#a8">TOsclThreadFuncRet</a>&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__check_8h.html#a1">__verify__TOsclThreadFuncRet__defined__</a></td></tr>
-<tr><td nowrap align=right valign=top>typedef <a class="el" href="osclconfig__proc__unix__nj_8h.html#a7">TOsclThreadFuncArg</a>&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__check_8h.html#a2">__verify__TOsclThreadFuncArg__defined__</a></td></tr>
-<tr><td nowrap align=right valign=top>typedef <a class="el" href="osclconfig__proc__unix__nj_8h.html#a9">TOsclThreadObject</a>&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__check_8h.html#a3">__verify__TOsclThreadObject__defined__</a></td></tr>
-<tr><td nowrap align=right valign=top>typedef <a class="el" href="osclconfig__proc__unix__nj_8h.html#a10">TOsclMutexObject</a>&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__check_8h.html#a4">__verify__TOsclMutexObject__defined__</a></td></tr>
-<tr><td nowrap align=right valign=top>typedef <a class="el" href="osclconfig__proc__unix__nj_8h.html#a11">TOsclSemaphoreObject</a>&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__check_8h.html#a5">__verify__TOsclSemaphoreObject__defined__</a></td></tr>
-<tr><td nowrap align=right valign=top>typedef <a class="el" href="osclconfig__proc__unix__nj_8h.html#a12">TOsclConditionObject</a>&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__check_8h.html#a6">__verify__TOsclConditionObject__defined__</a></td></tr>
+<tr><td nowrap align=right valign=top>typedef <a class="el" href="osclconfig__proc__unix__android_8h.html#a6">TOsclThreadId</a>&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__check_8h.html#a0">__verify__TOsclThreadId__defined__</a></td></tr>
+<tr><td nowrap align=right valign=top>typedef <a class="el" href="osclconfig__proc__unix__android_8h.html#a8">TOsclThreadFuncRet</a>&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__check_8h.html#a1">__verify__TOsclThreadFuncRet__defined__</a></td></tr>
+<tr><td nowrap align=right valign=top>typedef <a class="el" href="osclconfig__proc__unix__android_8h.html#a7">TOsclThreadFuncArg</a>&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__check_8h.html#a2">__verify__TOsclThreadFuncArg__defined__</a></td></tr>
+<tr><td nowrap align=right valign=top>typedef <a class="el" href="osclconfig__proc__unix__android_8h.html#a9">TOsclThreadObject</a>&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__check_8h.html#a3">__verify__TOsclThreadObject__defined__</a></td></tr>
+<tr><td nowrap align=right valign=top>typedef <a class="el" href="osclconfig__proc__unix__android_8h.html#a10">TOsclMutexObject</a>&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__check_8h.html#a4">__verify__TOsclMutexObject__defined__</a></td></tr>
+<tr><td nowrap align=right valign=top>typedef <a class="el" href="osclconfig__proc__unix__android_8h.html#a11">TOsclSemaphoreObject</a>&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__check_8h.html#a5">__verify__TOsclSemaphoreObject__defined__</a></td></tr>
+<tr><td nowrap align=right valign=top>typedef <a class="el" href="osclconfig__proc__unix__android_8h.html#a12">TOsclConditionObject</a>&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__check_8h.html#a6">__verify__TOsclConditionObject__defined__</a></td></tr>
 </table>
 <hr><h2>Typedef Documentation</h2>
 <a name="a6" doxytag="osclconfig_proc_check.h::__verify__TOsclConditionObject__defined__"></a><p>
@@ -26,7 +26,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> typedef <a class="el" href="osclconfig__proc__unix__nj_8h.html#a12">TOsclConditionObject</a> __verify__TOsclConditionObject__defined__
+          <td class="md" nowrap valign="top"> typedef <a class="el" href="osclconfig__proc__unix__android_8h.html#a12">TOsclConditionObject</a> __verify__TOsclConditionObject__defined__
       </table>
     </td>
   </tr>
@@ -50,7 +50,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> typedef <a class="el" href="osclconfig__proc__unix__nj_8h.html#a10">TOsclMutexObject</a> __verify__TOsclMutexObject__defined__
+          <td class="md" nowrap valign="top"> typedef <a class="el" href="osclconfig__proc__unix__android_8h.html#a10">TOsclMutexObject</a> __verify__TOsclMutexObject__defined__
       </table>
     </td>
   </tr>
@@ -72,7 +72,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> typedef <a class="el" href="osclconfig__proc__unix__nj_8h.html#a11">TOsclSemaphoreObject</a> __verify__TOsclSemaphoreObject__defined__
+          <td class="md" nowrap valign="top"> typedef <a class="el" href="osclconfig__proc__unix__android_8h.html#a11">TOsclSemaphoreObject</a> __verify__TOsclSemaphoreObject__defined__
       </table>
     </td>
   </tr>
@@ -94,7 +94,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> typedef <a class="el" href="osclconfig__proc__unix__nj_8h.html#a7">TOsclThreadFuncArg</a> __verify__TOsclThreadFuncArg__defined__
+          <td class="md" nowrap valign="top"> typedef <a class="el" href="osclconfig__proc__unix__android_8h.html#a7">TOsclThreadFuncArg</a> __verify__TOsclThreadFuncArg__defined__
       </table>
     </td>
   </tr>
@@ -116,7 +116,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> typedef <a class="el" href="osclconfig__proc__unix__nj_8h.html#a8">TOsclThreadFuncRet</a> __verify__TOsclThreadFuncRet__defined__
+          <td class="md" nowrap valign="top"> typedef <a class="el" href="osclconfig__proc__unix__android_8h.html#a8">TOsclThreadFuncRet</a> __verify__TOsclThreadFuncRet__defined__
       </table>
     </td>
   </tr>
@@ -138,7 +138,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> typedef <a class="el" href="osclconfig__proc__unix__nj_8h.html#a6">TOsclThreadId</a> __verify__TOsclThreadId__defined__
+          <td class="md" nowrap valign="top"> typedef <a class="el" href="osclconfig__proc__unix__android_8h.html#a6">TOsclThreadId</a> __verify__TOsclThreadId__defined__
       </table>
     </td>
   </tr>
@@ -160,7 +160,7 @@
     <td class="md">
       <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="md" nowrap valign="top"> typedef <a class="el" href="osclconfig__proc__unix__nj_8h.html#a9">TOsclThreadObject</a> __verify__TOsclThreadObject__defined__
+          <td class="md" nowrap valign="top"> typedef <a class="el" href="osclconfig__proc__unix__android_8h.html#a9">TOsclThreadObject</a> __verify__TOsclThreadObject__defined__
       </table>
     </td>
   </tr>
@@ -177,7 +177,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__proc__unix__android_8h-source.html b/doc/oscl_html/osclconfig__proc__unix__android_8h-source.html
new file mode 100644
index 0000000..4f8171e
--- /dev/null
+++ b/doc/oscl_html/osclconfig__proc__unix__android_8h-source.html
@@ -0,0 +1,51 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>osclconfig_proc_unix_android.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.2.18 -->
+<center>
+<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="modules.html">Modules</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Data Structures</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Data Fields</a> &nbsp; <a class="qindex" href="globals.html">Globals</a> &nbsp; </center>
+<hr><h1>osclconfig_proc_unix_android.h</h1><a href="osclconfig__proc__unix__android_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">// -*- c++ -*-</span>
+00002 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span>
+00003 
+00004 <span class="comment">//     O S C L C O N F I G _ P R O C  ( P L A T F O R M   C O N F I G   I N F O )</span>
+00005 
+00006 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span>
+00007 
+00008 
+00014 <span class="preprocessor">#ifndef OSCLCONFIG_PROC_UNIX_ANDROID_H_INCLUDED</span>
+00015 <span class="preprocessor"></span><span class="preprocessor">#define OSCLCONFIG_PROC_UNIX_ANDROID_H_INCLUDED</span>
+00016 <span class="preprocessor"></span>
+<a name="l00017"></a><a class="code" href="osclconfig__proc__unix__android_8h.html#a0">00017</a> <span class="preprocessor">#define OSCL_HAS_SYMBIAN_SCHEDULER 0</span>
+00018 <span class="preprocessor"></span>
+<a name="l00019"></a><a class="code" href="osclconfig__proc__unix__android_8h.html#a1">00019</a> <span class="preprocessor">#define OSCL_HAS_THREAD_SUPPORT 1</span>
+<a name="l00020"></a><a class="code" href="osclconfig__proc__unix__android_8h.html#a2">00020</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_NON_PREEMPTIVE_THREAD_SUPPORT 0</span>
+00021 <span class="preprocessor"></span>
+00022 <span class="comment">//semaphore with advanced realtime features incl. timed wait.</span>
+<a name="l00023"></a><a class="code" href="osclconfig__proc__unix__android_8h.html#a3">00023</a> <span class="preprocessor">#define OSCL_HAS_SEM_TIMEDWAIT_SUPPORT 0</span>
+00024 <span class="preprocessor"></span><span class="comment">//#include &lt;time.h&gt;</span>
+00025 <span class="comment">//#include &lt;semaphore.h&gt;</span>
+00026 
+00027 <span class="comment">//pthreads</span>
+<a name="l00028"></a><a class="code" href="osclconfig__proc__unix__android_8h.html#a4">00028</a> <span class="preprocessor">#define OSCL_HAS_PTHREAD_SUPPORT 1</span>
+00029 <span class="preprocessor"></span><span class="preprocessor">#include &lt;pthread.h&gt;</span>
+00030 <span class="preprocessor">#include &lt;errno.h&gt;</span>
+00031 <span class="preprocessor">#include &lt;signal.h&gt;</span>
+00032 
+00033 <span class="comment">// threads, mutex, semaphores</span>
+<a name="l00034"></a><a class="code" href="osclconfig__proc__unix__android_8h.html#a6">00034</a> <span class="keyword">typedef</span> pthread_t <a class="code" href="osclconfig__proc__unix__android_8h.html#a6">TOsclThreadId</a>;
+<a name="l00035"></a><a class="code" href="osclconfig__proc__unix__android_8h.html#a7">00035</a> <span class="keyword">typedef</span> <span class="keywordtype">void</span>* <a class="code" href="osclconfig__proc__unix__android_8h.html#a7">TOsclThreadFuncArg</a>;
+<a name="l00036"></a><a class="code" href="osclconfig__proc__unix__android_8h.html#a8">00036</a> <span class="keyword">typedef</span> <span class="keywordtype">void</span>* <a class="code" href="osclconfig__proc__unix__android_8h.html#a8">TOsclThreadFuncRet</a>;
+<a name="l00037"></a><a class="code" href="osclconfig__proc__unix__android_8h.html#a5">00037</a> <span class="preprocessor">#define OSCL_THREAD_DECL</span>
+<a name="l00038"></a><a class="code" href="osclconfig__proc__unix__android_8h.html#a9">00038</a> <span class="preprocessor"></span><span class="keyword">typedef</span> pthread_t <a class="code" href="osclconfig__proc__unix__android_8h.html#a9">TOsclThreadObject</a>;
+<a name="l00039"></a><a class="code" href="osclconfig__proc__unix__android_8h.html#a10">00039</a> <span class="keyword">typedef</span> pthread_mutex_t <a class="code" href="osclconfig__proc__unix__android_8h.html#a10">TOsclMutexObject</a>;
+<a name="l00040"></a><a class="code" href="osclconfig__proc__unix__android_8h.html#a11">00040</a> <span class="keyword">typedef</span> <span class="keywordtype">int</span> <a class="code" href="osclconfig__proc__unix__android_8h.html#a11">TOsclSemaphoreObject</a>;
+<a name="l00041"></a><a class="code" href="osclconfig__proc__unix__android_8h.html#a12">00041</a> <span class="keyword">typedef</span> pthread_cond_t <a class="code" href="osclconfig__proc__unix__android_8h.html#a12">TOsclConditionObject</a>;
+00042 
+00043 <span class="preprocessor">#endif</span>
+</pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
+</small></address>
+</body>
+</html>
diff --git a/doc/oscl_html/osclconfig__proc__unix__nj_8h.html b/doc/oscl_html/osclconfig__proc__unix__android_8h.html
similarity index 73%
rename from doc/oscl_html/osclconfig__proc__unix__nj_8h.html
rename to doc/oscl_html/osclconfig__proc__unix__android_8h.html
index 96a6f83..a660d96 100644
--- a/doc/oscl_html/osclconfig__proc__unix__nj_8h.html
+++ b/doc/oscl_html/osclconfig__proc__unix__android_8h.html
@@ -1,36 +1,36 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>osclconfig_proc_unix_nj.h File Reference</title>
+<title>osclconfig_proc_unix_android.h File Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 </head><body>
 <!-- Generated by Doxygen 1.2.18 -->
 <center>
 <a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="modules.html">Modules</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Data Structures</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Data Fields</a> &nbsp; <a class="qindex" href="globals.html">Globals</a> &nbsp; </center>
-<hr><h1>osclconfig_proc_unix_nj.h File Reference</h1><code>#include &lt;pthread.h&gt;</code><br>
+<hr><h1>osclconfig_proc_unix_android.h File Reference</h1><code>#include &lt;pthread.h&gt;</code><br>
 <code>#include &lt;errno.h&gt;</code><br>
 <code>#include &lt;signal.h&gt;</code><br>
 
 <p>
-<a href="osclconfig__proc__unix__nj_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
+<a href="osclconfig__proc__unix__android_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
 <tr><td></td></tr>
 <tr><td colspan=2><br><h2>Defines</h2></td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__unix__nj_8h.html#a0">OSCL_HAS_SYMBIAN_SCHEDULER</a>&nbsp;&nbsp;&nbsp;0</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__unix__nj_8h.html#a1">OSCL_HAS_THREAD_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__unix__nj_8h.html#a2">OSCL_HAS_NON_PREEMPTIVE_THREAD_SUPPORT</a>&nbsp;&nbsp;&nbsp;0</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__unix__nj_8h.html#a3">OSCL_HAS_SEM_TIMEDWAIT_SUPPORT</a>&nbsp;&nbsp;&nbsp;0</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__unix__nj_8h.html#a4">OSCL_HAS_PTHREAD_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__unix__nj_8h.html#a5">OSCL_THREAD_DECL</a></td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__unix__android_8h.html#a0">OSCL_HAS_SYMBIAN_SCHEDULER</a>&nbsp;&nbsp;&nbsp;0</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__unix__android_8h.html#a1">OSCL_HAS_THREAD_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__unix__android_8h.html#a2">OSCL_HAS_NON_PREEMPTIVE_THREAD_SUPPORT</a>&nbsp;&nbsp;&nbsp;0</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__unix__android_8h.html#a3">OSCL_HAS_SEM_TIMEDWAIT_SUPPORT</a>&nbsp;&nbsp;&nbsp;0</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__unix__android_8h.html#a4">OSCL_HAS_PTHREAD_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__unix__android_8h.html#a5">OSCL_THREAD_DECL</a></td></tr>
 <tr><td colspan=2><br><h2>Typedefs</h2></td></tr>
-<tr><td nowrap align=right valign=top>typedef pthread_t&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__unix__nj_8h.html#a6">TOsclThreadId</a></td></tr>
-<tr><td nowrap align=right valign=top>typedef void *&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__unix__nj_8h.html#a7">TOsclThreadFuncArg</a></td></tr>
-<tr><td nowrap align=right valign=top>typedef void *&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__unix__nj_8h.html#a8">TOsclThreadFuncRet</a></td></tr>
-<tr><td nowrap align=right valign=top>typedef pthread_t&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__unix__nj_8h.html#a9">TOsclThreadObject</a></td></tr>
-<tr><td nowrap align=right valign=top>typedef pthread_mutex_t&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__unix__nj_8h.html#a10">TOsclMutexObject</a></td></tr>
-<tr><td nowrap align=right valign=top>typedef int&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__unix__nj_8h.html#a11">TOsclSemaphoreObject</a></td></tr>
-<tr><td nowrap align=right valign=top>typedef pthread_cond_t&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__unix__nj_8h.html#a12">TOsclConditionObject</a></td></tr>
+<tr><td nowrap align=right valign=top>typedef pthread_t&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__unix__android_8h.html#a6">TOsclThreadId</a></td></tr>
+<tr><td nowrap align=right valign=top>typedef void *&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__unix__android_8h.html#a7">TOsclThreadFuncArg</a></td></tr>
+<tr><td nowrap align=right valign=top>typedef void *&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__unix__android_8h.html#a8">TOsclThreadFuncRet</a></td></tr>
+<tr><td nowrap align=right valign=top>typedef pthread_t&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__unix__android_8h.html#a9">TOsclThreadObject</a></td></tr>
+<tr><td nowrap align=right valign=top>typedef pthread_mutex_t&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__unix__android_8h.html#a10">TOsclMutexObject</a></td></tr>
+<tr><td nowrap align=right valign=top>typedef int&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__unix__android_8h.html#a11">TOsclSemaphoreObject</a></td></tr>
+<tr><td nowrap align=right valign=top>typedef pthread_cond_t&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__proc__unix__android_8h.html#a12">TOsclConditionObject</a></td></tr>
 </table>
 <hr><h2>Define Documentation</h2>
-<a name="a2" doxytag="osclconfig_proc_unix_nj.h::OSCL_HAS_NON_PREEMPTIVE_THREAD_SUPPORT"></a><p>
+<a name="a2" doxytag="osclconfig_proc_unix_android.h::OSCL_HAS_NON_PREEMPTIVE_THREAD_SUPPORT"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -52,7 +52,7 @@
     </td>
   </tr>
 </table>
-<a name="a4" doxytag="osclconfig_proc_unix_nj.h::OSCL_HAS_PTHREAD_SUPPORT"></a><p>
+<a name="a4" doxytag="osclconfig_proc_unix_android.h::OSCL_HAS_PTHREAD_SUPPORT"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -74,7 +74,7 @@
     </td>
   </tr>
 </table>
-<a name="a3" doxytag="osclconfig_proc_unix_nj.h::OSCL_HAS_SEM_TIMEDWAIT_SUPPORT"></a><p>
+<a name="a3" doxytag="osclconfig_proc_unix_android.h::OSCL_HAS_SEM_TIMEDWAIT_SUPPORT"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -96,7 +96,7 @@
     </td>
   </tr>
 </table>
-<a name="a0" doxytag="osclconfig_proc_unix_nj.h::OSCL_HAS_SYMBIAN_SCHEDULER"></a><p>
+<a name="a0" doxytag="osclconfig_proc_unix_android.h::OSCL_HAS_SYMBIAN_SCHEDULER"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -118,7 +118,7 @@
     </td>
   </tr>
 </table>
-<a name="a1" doxytag="osclconfig_proc_unix_nj.h::OSCL_HAS_THREAD_SUPPORT"></a><p>
+<a name="a1" doxytag="osclconfig_proc_unix_android.h::OSCL_HAS_THREAD_SUPPORT"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -140,7 +140,7 @@
     </td>
   </tr>
 </table>
-<a name="a5" doxytag="osclconfig_proc_unix_nj.h::OSCL_THREAD_DECL"></a><p>
+<a name="a5" doxytag="osclconfig_proc_unix_android.h::OSCL_THREAD_DECL"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -163,7 +163,7 @@
   </tr>
 </table>
 <hr><h2>Typedef Documentation</h2>
-<a name="a12" doxytag="osclconfig_proc_unix_nj.h::TOsclConditionObject"></a><p>
+<a name="a12" doxytag="osclconfig_proc_unix_android.h::TOsclConditionObject"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -185,7 +185,7 @@
     </td>
   </tr>
 </table>
-<a name="a10" doxytag="osclconfig_proc_unix_nj.h::TOsclMutexObject"></a><p>
+<a name="a10" doxytag="osclconfig_proc_unix_android.h::TOsclMutexObject"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -207,7 +207,7 @@
     </td>
   </tr>
 </table>
-<a name="a11" doxytag="osclconfig_proc_unix_nj.h::TOsclSemaphoreObject"></a><p>
+<a name="a11" doxytag="osclconfig_proc_unix_android.h::TOsclSemaphoreObject"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -229,7 +229,7 @@
     </td>
   </tr>
 </table>
-<a name="a7" doxytag="osclconfig_proc_unix_nj.h::TOsclThreadFuncArg"></a><p>
+<a name="a7" doxytag="osclconfig_proc_unix_android.h::TOsclThreadFuncArg"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -251,7 +251,7 @@
     </td>
   </tr>
 </table>
-<a name="a8" doxytag="osclconfig_proc_unix_nj.h::TOsclThreadFuncRet"></a><p>
+<a name="a8" doxytag="osclconfig_proc_unix_android.h::TOsclThreadFuncRet"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -273,7 +273,7 @@
     </td>
   </tr>
 </table>
-<a name="a6" doxytag="osclconfig_proc_unix_nj.h::TOsclThreadId"></a><p>
+<a name="a6" doxytag="osclconfig_proc_unix_android.h::TOsclThreadId"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -295,7 +295,7 @@
     </td>
   </tr>
 </table>
-<a name="a9" doxytag="osclconfig_proc_unix_nj.h::TOsclThreadObject"></a><p>
+<a name="a9" doxytag="osclconfig_proc_unix_android.h::TOsclThreadObject"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -318,7 +318,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__proc__unix__common_8h-source.html b/doc/oscl_html/osclconfig__proc__unix__common_8h-source.html
index 1a0b6d2..e9139a1 100644
--- a/doc/oscl_html/osclconfig__proc__unix__common_8h-source.html
+++ b/doc/oscl_html/osclconfig__proc__unix__common_8h-source.html
@@ -44,7 +44,7 @@
 00041 
 00042 <span class="preprocessor">#endif</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__proc__unix__common_8h.html b/doc/oscl_html/osclconfig__proc__unix__common_8h.html
index 54a62cf..5128931 100644
--- a/doc/oscl_html/osclconfig__proc__unix__common_8h.html
+++ b/doc/oscl_html/osclconfig__proc__unix__common_8h.html
@@ -319,7 +319,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__proc__unix__nj_8h-source.html b/doc/oscl_html/osclconfig__proc__unix__nj_8h-source.html
deleted file mode 100644
index 3284a9d..0000000
--- a/doc/oscl_html/osclconfig__proc__unix__nj_8h-source.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>osclconfig_proc_unix_nj.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.2.18 -->
-<center>
-<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="modules.html">Modules</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Data Structures</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Data Fields</a> &nbsp; <a class="qindex" href="globals.html">Globals</a> &nbsp; </center>
-<hr><h1>osclconfig_proc_unix_nj.h</h1><a href="osclconfig__proc__unix__nj_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">// -*- c++ -*-</span>
-00002 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span>
-00003 
-00004 <span class="comment">//     O S C L C O N F I G _ P R O C  ( P L A T F O R M   C O N F I G   I N F O )</span>
-00005 
-00006 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span>
-00007 
-00008 
-00014 <span class="preprocessor">#ifndef OSCLCONFIG_PROC_UNIX_NJ_H_INCLUDED</span>
-00015 <span class="preprocessor"></span><span class="preprocessor">#define OSCLCONFIG_PROC_UNIX_NJ_H_INCLUDED</span>
-00016 <span class="preprocessor"></span>
-<a name="l00017"></a><a class="code" href="osclconfig__proc__unix__nj_8h.html#a0">00017</a> <span class="preprocessor">#define OSCL_HAS_SYMBIAN_SCHEDULER 0</span>
-00018 <span class="preprocessor"></span>
-<a name="l00019"></a><a class="code" href="osclconfig__proc__unix__nj_8h.html#a1">00019</a> <span class="preprocessor">#define OSCL_HAS_THREAD_SUPPORT 1</span>
-<a name="l00020"></a><a class="code" href="osclconfig__proc__unix__nj_8h.html#a2">00020</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_NON_PREEMPTIVE_THREAD_SUPPORT 0</span>
-00021 <span class="preprocessor"></span>
-00022 <span class="comment">//semaphore with advanced realtime features incl. timed wait.</span>
-<a name="l00023"></a><a class="code" href="osclconfig__proc__unix__nj_8h.html#a3">00023</a> <span class="preprocessor">#define OSCL_HAS_SEM_TIMEDWAIT_SUPPORT 0</span>
-00024 <span class="preprocessor"></span><span class="comment">//#include &lt;time.h&gt;</span>
-00025 <span class="comment">//#include &lt;semaphore.h&gt;</span>
-00026 
-00027 <span class="comment">//pthreads</span>
-<a name="l00028"></a><a class="code" href="osclconfig__proc__unix__nj_8h.html#a4">00028</a> <span class="preprocessor">#define OSCL_HAS_PTHREAD_SUPPORT 1</span>
-00029 <span class="preprocessor"></span><span class="preprocessor">#include &lt;pthread.h&gt;</span>
-00030 <span class="preprocessor">#include &lt;errno.h&gt;</span>
-00031 <span class="preprocessor">#include &lt;signal.h&gt;</span>
-00032 
-00033 <span class="comment">// threads, mutex, semaphores</span>
-<a name="l00034"></a><a class="code" href="osclconfig__proc__unix__nj_8h.html#a6">00034</a> <span class="keyword">typedef</span> pthread_t <a class="code" href="osclconfig__proc__unix__nj_8h.html#a6">TOsclThreadId</a>;
-<a name="l00035"></a><a class="code" href="osclconfig__proc__unix__nj_8h.html#a7">00035</a> <span class="keyword">typedef</span> <span class="keywordtype">void</span>* <a class="code" href="osclconfig__proc__unix__nj_8h.html#a7">TOsclThreadFuncArg</a>;
-<a name="l00036"></a><a class="code" href="osclconfig__proc__unix__nj_8h.html#a8">00036</a> <span class="keyword">typedef</span> <span class="keywordtype">void</span>* <a class="code" href="osclconfig__proc__unix__nj_8h.html#a8">TOsclThreadFuncRet</a>;
-<a name="l00037"></a><a class="code" href="osclconfig__proc__unix__nj_8h.html#a5">00037</a> <span class="preprocessor">#define OSCL_THREAD_DECL</span>
-<a name="l00038"></a><a class="code" href="osclconfig__proc__unix__nj_8h.html#a9">00038</a> <span class="preprocessor"></span><span class="keyword">typedef</span> pthread_t <a class="code" href="osclconfig__proc__unix__nj_8h.html#a9">TOsclThreadObject</a>;
-<a name="l00039"></a><a class="code" href="osclconfig__proc__unix__nj_8h.html#a10">00039</a> <span class="keyword">typedef</span> pthread_mutex_t <a class="code" href="osclconfig__proc__unix__nj_8h.html#a10">TOsclMutexObject</a>;
-<a name="l00040"></a><a class="code" href="osclconfig__proc__unix__nj_8h.html#a11">00040</a> <span class="keyword">typedef</span> <span class="keywordtype">int</span> <a class="code" href="osclconfig__proc__unix__nj_8h.html#a11">TOsclSemaphoreObject</a>;
-<a name="l00041"></a><a class="code" href="osclconfig__proc__unix__nj_8h.html#a12">00041</a> <span class="keyword">typedef</span> pthread_cond_t <a class="code" href="osclconfig__proc__unix__nj_8h.html#a12">TOsclConditionObject</a>;
-00042 
-00043 <span class="preprocessor">#endif</span>
-</pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
-</small></address>
-</body>
-</html>
diff --git a/doc/oscl_html/osclconfig__time_8h-source.html b/doc/oscl_html/osclconfig__time_8h-source.html
index f0a2e60..39d91dd 100644
--- a/doc/oscl_html/osclconfig__time_8h-source.html
+++ b/doc/oscl_html/osclconfig__time_8h-source.html
@@ -41,7 +41,7 @@
 00033 
 00034 <span class="preprocessor">#endif</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__time_8h.html b/doc/oscl_html/osclconfig__time_8h.html
index 3a1390a..84a4db8 100644
--- a/doc/oscl_html/osclconfig__time_8h.html
+++ b/doc/oscl_html/osclconfig__time_8h.html
@@ -90,7 +90,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__time__check_8h-source.html b/doc/oscl_html/osclconfig__time__check_8h-source.html
index 85dee00..55ca3a4 100644
--- a/doc/oscl_html/osclconfig__time__check_8h-source.html
+++ b/doc/oscl_html/osclconfig__time__check_8h-source.html
@@ -24,7 +24,7 @@
 00029 <span class="preprocessor"></span>
 00030 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__time__check_8h.html b/doc/oscl_html/osclconfig__time__check_8h.html
index 2defa2c..97afa98 100644
--- a/doc/oscl_html/osclconfig__time__check_8h.html
+++ b/doc/oscl_html/osclconfig__time__check_8h.html
@@ -60,7 +60,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__unix__android_8h-source.html b/doc/oscl_html/osclconfig__unix__android_8h-source.html
new file mode 100644
index 0000000..4214b07
--- /dev/null
+++ b/doc/oscl_html/osclconfig__unix__android_8h-source.html
@@ -0,0 +1,92 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>osclconfig_unix_android.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.2.18 -->
+<center>
+<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="modules.html">Modules</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Data Structures</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Data Fields</a> &nbsp; <a class="qindex" href="globals.html">Globals</a> &nbsp; </center>
+<hr><h1>osclconfig_unix_android.h</h1><a href="osclconfig__unix__android_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">// -*- c++ -*-</span>
+00002 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span>
+00003 
+00004 <span class="comment">//         O S C L C O N F I G _ U N I X _ C O M M O N</span>
+00005 
+00006 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span>
+00007 
+00008 
+00017 <span class="preprocessor">#ifndef OSCLCONFIG_UNIX_ANDROID_H_INCLUDED</span>
+00018 <span class="preprocessor"></span><span class="preprocessor">#define OSCLCONFIG_UNIX_ANDROID_H_INCLUDED</span>
+00019 <span class="preprocessor"></span>
+00020 
+00021 <span class="comment">// system header files</span>
+00022 <span class="preprocessor">#include &lt;stdlib.h&gt;</span> <span class="comment">// abort</span>
+00023 <span class="preprocessor">#include &lt;stdarg.h&gt;</span> <span class="comment">// va_list</span>
+00024 <span class="preprocessor">#include &lt;sys/types.h&gt;</span>
+00025 <span class="preprocessor">#include &lt;stdio.h&gt;</span>
+00026 <span class="comment">//#include &lt;wchar.h&gt;</span>
+00027 <span class="preprocessor">#include &lt;string.h&gt;</span>
+00028 <span class="preprocessor">#include &lt;unistd.h&gt;</span> <span class="comment">//for sleep</span>
+00029 <span class="preprocessor">#include &lt;pthread.h&gt;</span>
+00030 <span class="preprocessor">#include &lt;ctype.h&gt;</span> <span class="comment">// for tolower and toupper</span>
+00031 <span class="preprocessor">#ifdef __cplusplus</span>
+00032 <span class="preprocessor"></span><span class="preprocessor">#include &lt;new&gt;</span> <span class="comment">//for placement new</span>
+00033 <span class="preprocessor">#endif</span>
+00034 <span class="preprocessor"></span><span class="preprocessor">#include &lt;math.h&gt;</span>
+00035 
+<a name="l00036"></a><a class="code" href="osclconfig__unix__android_8h.html#a0">00036</a> <span class="preprocessor">#define OSCL_DISABLE_INLINES                0</span>
+00037 <span class="preprocessor"></span>
+<a name="l00038"></a><a class="code" href="osclconfig__unix__android_8h.html#a1">00038</a> <span class="preprocessor">#define OSCL_HAS_ANSI_STDLIB_SUPPORT        1</span>
+<a name="l00039"></a><a class="code" href="osclconfig__unix__android_8h.html#a2">00039</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_ANSI_MATH_SUPPORT          1</span>
+<a name="l00040"></a><a class="code" href="osclconfig__unix__android_8h.html#a3">00040</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_GLOBAL_VARIABLE_SUPPORT    1</span>
+<a name="l00041"></a><a class="code" href="osclconfig__unix__android_8h.html#a4">00041</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_ANSI_STRING_SUPPORT        1</span>
+<a name="l00042"></a><a class="code" href="osclconfig__unix__android_8h.html#a5">00042</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_ANSI_WIDE_STRING_SUPPORT   0</span>
+<a name="l00043"></a><a class="code" href="osclconfig__unix__android_8h.html#a6">00043</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_ANSI_STDIO_SUPPORT         1</span>
+00044 <span class="preprocessor"></span>
+<a name="l00045"></a><a class="code" href="osclconfig__unix__android_8h.html#a7">00045</a> <span class="preprocessor">#define OSCL_MEMFRAG_PTR_BEFORE_LEN         1</span>
+00046 <span class="preprocessor"></span>
+<a name="l00047"></a><a class="code" href="osclconfig__unix__android_8h.html#a8">00047</a> <span class="preprocessor">#define OSCL_HAS_UNIX_SUPPORT               1</span>
+<a name="l00048"></a><a class="code" href="osclconfig__unix__android_8h.html#a9">00048</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_MSWIN_SUPPORT              0</span>
+<a name="l00049"></a><a class="code" href="osclconfig__unix__android_8h.html#a10">00049</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_SYMBIAN_SUPPORT            0</span>
+00050 <span class="preprocessor"></span>
+00051 <span class="comment">// 64-bit int</span>
+<a name="l00052"></a><a class="code" href="osclconfig__unix__android_8h.html#a11">00052</a> <span class="preprocessor">#define OSCL_HAS_NATIVE_INT64_TYPE 1</span>
+<a name="l00053"></a><a class="code" href="osclconfig__unix__android_8h.html#a12">00053</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_NATIVE_UINT64_TYPE 1</span>
+<a name="l00054"></a><a class="code" href="osclconfig__unix__android_8h.html#a13">00054</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_NATIVE_INT64_TYPE     int64_t</span>
+<a name="l00055"></a><a class="code" href="osclconfig__unix__android_8h.html#a14">00055</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_NATIVE_UINT64_TYPE    uint64_t</span>
+<a name="l00056"></a><a class="code" href="osclconfig__unix__android_8h.html#a15">00056</a> <span class="preprocessor"></span><span class="preprocessor">#define INT64(x) x##LL</span>
+<a name="l00057"></a><a class="code" href="osclconfig__unix__android_8h.html#a16">00057</a> <span class="preprocessor"></span><span class="preprocessor">#define UINT64(x) x##ULL</span>
+<a name="l00058"></a><a class="code" href="osclconfig__unix__android_8h.html#a17">00058</a> <span class="preprocessor"></span><span class="preprocessor">#define INT64_HILO(high,low) ((((high##LL))&lt;&lt;32)|low)</span>
+<a name="l00059"></a><a class="code" href="osclconfig__unix__android_8h.html#a18">00059</a> <span class="preprocessor"></span><span class="preprocessor">#define UINT64_HILO(high,low) ((((high##ULL))&lt;&lt;32)|low)</span>
+00060 <span class="preprocessor"></span>
+00061 <span class="comment">// character set.</span>
+<a name="l00062"></a><a class="code" href="osclconfig__unix__android_8h.html#a19">00062</a> <span class="preprocessor">#define OSCL_HAS_UNICODE_SUPPORT            1</span>
+<a name="l00063"></a><a class="code" href="osclconfig__unix__android_8h.html#a20">00063</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_NATIVE_WCHAR_TYPE wchar_t</span>
+00064 <span class="preprocessor"></span><span class="preprocessor">#if (OSCL_HAS_UNICODE_SUPPORT)</span>
+<a name="l00065"></a><a class="code" href="osclconfig__unix__android_8h.html#a21">00065</a> <span class="preprocessor"></span><span class="preprocessor">#define _STRLIT(x) L ## x</span>
+00066 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+00067 <span class="preprocessor"></span><span class="preprocessor">#define _STRLIT(x) x</span>
+00068 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00069"></a><a class="code" href="osclconfig__unix__android_8h.html#a22">00069</a> <span class="preprocessor"></span><span class="preprocessor">#define _STRLIT_CHAR(x) x</span>
+<a name="l00070"></a><a class="code" href="osclconfig__unix__android_8h.html#a23">00070</a> <span class="preprocessor"></span><span class="preprocessor">#define _STRLIT_WCHAR(x) L ## x</span>
+00071 <span class="preprocessor"></span>
+00072 <span class="comment">// Thread-local storage.  Unix has keyed TLS.</span>
+<a name="l00073"></a><a class="code" href="osclconfig__unix__android_8h.html#a24">00073</a> <span class="preprocessor">#define OSCL_HAS_TLS_SUPPORT    1</span>
+<a name="l00074"></a><a class="code" href="osclconfig__unix__android_8h.html#a25">00074</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_TLS_IS_KEYED 1</span>
+<a name="l00075"></a><a class="code" href="osclconfig__unix__android_8h.html#a31">00075</a> <span class="preprocessor"></span><span class="keyword">typedef</span> pthread_key_t <a class="code" href="osclconfig__unix__android_8h.html#a31">TOsclTlsKey</a> ;
+<a name="l00076"></a><a class="code" href="osclconfig__unix__android_8h.html#a26">00076</a> <span class="preprocessor">#define OSCL_TLS_KEY_CREATE_FUNC(key) (pthread_key_create(&amp;key,NULL)==0)</span>
+<a name="l00077"></a><a class="code" href="osclconfig__unix__android_8h.html#a27">00077</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_TLS_KEY_DELETE_FUNC(key) pthread_key_delete(key)</span>
+<a name="l00078"></a><a class="code" href="osclconfig__unix__android_8h.html#a28">00078</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_TLS_STORE_FUNC(key,ptr) (pthread_setspecific(key,(const void*)ptr)==0)</span>
+<a name="l00079"></a><a class="code" href="osclconfig__unix__android_8h.html#a29">00079</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_TLS_GET_FUNC(key) pthread_getspecific(key)</span>
+00080 <span class="preprocessor"></span>
+00081 <span class="comment">//Basic lock</span>
+<a name="l00082"></a><a class="code" href="osclconfig__unix__android_8h.html#a30">00082</a> <span class="preprocessor">#define OSCL_HAS_BASIC_LOCK 1</span>
+00083 <span class="preprocessor"></span><span class="preprocessor">#include &lt;pthread.h&gt;</span>
+<a name="l00084"></a><a class="code" href="osclconfig__unix__android_8h.html#a32">00084</a> <span class="keyword">typedef</span> pthread_mutex_t <a class="code" href="osclconfig__unix__android_8h.html#a32">TOsclBasicLockObject</a>;
+00085 
+00086 <span class="preprocessor">#endif // OSCLCONFIG_UNIX_COMMON_H_INCLUDED</span>
+00087 <span class="preprocessor"></span>
+</pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
+</small></address>
+</body>
+</html>
diff --git a/doc/oscl_html/osclconfig__unix__nj_8h.html b/doc/oscl_html/osclconfig__unix__android_8h.html
similarity index 74%
rename from doc/oscl_html/osclconfig__unix__nj_8h.html
rename to doc/oscl_html/osclconfig__unix__android_8h.html
index 78495f5..555f814 100644
--- a/doc/oscl_html/osclconfig__unix__nj_8h.html
+++ b/doc/oscl_html/osclconfig__unix__android_8h.html
@@ -1,12 +1,12 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>osclconfig_unix_nj.h File Reference</title>
+<title>osclconfig_unix_android.h File Reference</title>
 <link href="doxygen.css" rel="stylesheet" type="text/css">
 </head><body>
 <!-- Generated by Doxygen 1.2.18 -->
 <center>
 <a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="modules.html">Modules</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Data Structures</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Data Fields</a> &nbsp; <a class="qindex" href="globals.html">Globals</a> &nbsp; </center>
-<hr><h1>osclconfig_unix_nj.h File Reference</h1><code>#include &lt;stdlib.h&gt;</code><br>
+<hr><h1>osclconfig_unix_android.h File Reference</h1><code>#include &lt;stdlib.h&gt;</code><br>
 <code>#include &lt;stdarg.h&gt;</code><br>
 <code>#include &lt;sys/types.h&gt;</code><br>
 <code>#include &lt;stdio.h&gt;</code><br>
@@ -17,46 +17,46 @@
 <code>#include &lt;math.h&gt;</code><br>
 
 <p>
-<a href="osclconfig__unix__nj_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
+<a href="osclconfig__unix__android_8h-source.html">Go to the source code of this file.</a><table border=0 cellpadding=0 cellspacing=0>
 <tr><td></td></tr>
 <tr><td colspan=2><br><h2>Defines</h2></td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a0">OSCL_DISABLE_INLINES</a>&nbsp;&nbsp;&nbsp;0</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a1">OSCL_HAS_ANSI_STDLIB_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a2">OSCL_HAS_ANSI_MATH_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a3">OSCL_HAS_GLOBAL_VARIABLE_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a4">OSCL_HAS_ANSI_STRING_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a5">OSCL_HAS_ANSI_WIDE_STRING_SUPPORT</a>&nbsp;&nbsp;&nbsp;0</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a6">OSCL_HAS_ANSI_STDIO_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a7">OSCL_MEMFRAG_PTR_BEFORE_LEN</a>&nbsp;&nbsp;&nbsp;1</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a8">OSCL_HAS_UNIX_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a9">OSCL_HAS_MSWIN_SUPPORT</a>&nbsp;&nbsp;&nbsp;0</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a10">OSCL_HAS_SYMBIAN_SUPPORT</a>&nbsp;&nbsp;&nbsp;0</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a11">OSCL_HAS_NATIVE_INT64_TYPE</a>&nbsp;&nbsp;&nbsp;1</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a12">OSCL_HAS_NATIVE_UINT64_TYPE</a>&nbsp;&nbsp;&nbsp;1</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a13">OSCL_NATIVE_INT64_TYPE</a>&nbsp;&nbsp;&nbsp;int64_t</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a14">OSCL_NATIVE_UINT64_TYPE</a>&nbsp;&nbsp;&nbsp;uint64_t</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a15">INT64</a>(x)&nbsp;&nbsp;&nbsp;x##LL</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a16">UINT64</a>(x)&nbsp;&nbsp;&nbsp;x##ULL</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a17">INT64_HILO</a>(high, low)&nbsp;&nbsp;&nbsp;((((high##LL))&lt;&lt;32)|low)</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a18">UINT64_HILO</a>(high, low)&nbsp;&nbsp;&nbsp;((((high##ULL))&lt;&lt;32)|low)</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a19">OSCL_HAS_UNICODE_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a20">OSCL_NATIVE_WCHAR_TYPE</a>&nbsp;&nbsp;&nbsp;wchar_t</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a21">_STRLIT</a>(x)&nbsp;&nbsp;&nbsp;L ## x</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a22">_STRLIT_CHAR</a>(x)&nbsp;&nbsp;&nbsp;x</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a23">_STRLIT_WCHAR</a>(x)&nbsp;&nbsp;&nbsp;L ## x</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a24">OSCL_HAS_TLS_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a25">OSCL_TLS_IS_KEYED</a>&nbsp;&nbsp;&nbsp;1</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a26">OSCL_TLS_KEY_CREATE_FUNC</a>(key)&nbsp;&nbsp;&nbsp;(pthread_key_create(&amp;key,NULL)==0)</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a27">OSCL_TLS_KEY_DELETE_FUNC</a>(key)&nbsp;&nbsp;&nbsp;pthread_key_delete(key)</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a28">OSCL_TLS_STORE_FUNC</a>(key, ptr)&nbsp;&nbsp;&nbsp;(pthread_setspecific(key,(const void*)ptr)==0)</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a29">OSCL_TLS_GET_FUNC</a>(key)&nbsp;&nbsp;&nbsp;pthread_getspecific(key)</td></tr>
-<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a30">OSCL_HAS_BASIC_LOCK</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a0">OSCL_DISABLE_INLINES</a>&nbsp;&nbsp;&nbsp;0</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a1">OSCL_HAS_ANSI_STDLIB_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a2">OSCL_HAS_ANSI_MATH_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a3">OSCL_HAS_GLOBAL_VARIABLE_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a4">OSCL_HAS_ANSI_STRING_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a5">OSCL_HAS_ANSI_WIDE_STRING_SUPPORT</a>&nbsp;&nbsp;&nbsp;0</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a6">OSCL_HAS_ANSI_STDIO_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a7">OSCL_MEMFRAG_PTR_BEFORE_LEN</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a8">OSCL_HAS_UNIX_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a9">OSCL_HAS_MSWIN_SUPPORT</a>&nbsp;&nbsp;&nbsp;0</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a10">OSCL_HAS_SYMBIAN_SUPPORT</a>&nbsp;&nbsp;&nbsp;0</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a11">OSCL_HAS_NATIVE_INT64_TYPE</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a12">OSCL_HAS_NATIVE_UINT64_TYPE</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a13">OSCL_NATIVE_INT64_TYPE</a>&nbsp;&nbsp;&nbsp;int64_t</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a14">OSCL_NATIVE_UINT64_TYPE</a>&nbsp;&nbsp;&nbsp;uint64_t</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a15">INT64</a>(x)&nbsp;&nbsp;&nbsp;x##LL</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a16">UINT64</a>(x)&nbsp;&nbsp;&nbsp;x##ULL</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a17">INT64_HILO</a>(high, low)&nbsp;&nbsp;&nbsp;((((high##LL))&lt;&lt;32)|low)</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a18">UINT64_HILO</a>(high, low)&nbsp;&nbsp;&nbsp;((((high##ULL))&lt;&lt;32)|low)</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a19">OSCL_HAS_UNICODE_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a20">OSCL_NATIVE_WCHAR_TYPE</a>&nbsp;&nbsp;&nbsp;wchar_t</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a21">_STRLIT</a>(x)&nbsp;&nbsp;&nbsp;L ## x</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a22">_STRLIT_CHAR</a>(x)&nbsp;&nbsp;&nbsp;x</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a23">_STRLIT_WCHAR</a>(x)&nbsp;&nbsp;&nbsp;L ## x</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a24">OSCL_HAS_TLS_SUPPORT</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a25">OSCL_TLS_IS_KEYED</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a26">OSCL_TLS_KEY_CREATE_FUNC</a>(key)&nbsp;&nbsp;&nbsp;(pthread_key_create(&amp;key,NULL)==0)</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a27">OSCL_TLS_KEY_DELETE_FUNC</a>(key)&nbsp;&nbsp;&nbsp;pthread_key_delete(key)</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a28">OSCL_TLS_STORE_FUNC</a>(key, ptr)&nbsp;&nbsp;&nbsp;(pthread_setspecific(key,(const void*)ptr)==0)</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a29">OSCL_TLS_GET_FUNC</a>(key)&nbsp;&nbsp;&nbsp;pthread_getspecific(key)</td></tr>
+<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a30">OSCL_HAS_BASIC_LOCK</a>&nbsp;&nbsp;&nbsp;1</td></tr>
 <tr><td colspan=2><br><h2>Typedefs</h2></td></tr>
-<tr><td nowrap align=right valign=top>typedef pthread_key_t&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a31">TOsclTlsKey</a></td></tr>
-<tr><td nowrap align=right valign=top>typedef pthread_mutex_t&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__nj_8h.html#a32">TOsclBasicLockObject</a></td></tr>
+<tr><td nowrap align=right valign=top>typedef pthread_key_t&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a31">TOsclTlsKey</a></td></tr>
+<tr><td nowrap align=right valign=top>typedef pthread_mutex_t&nbsp;</td><td valign=bottom><a class="el" href="osclconfig__unix__android_8h.html#a32">TOsclBasicLockObject</a></td></tr>
 </table>
 <hr><h2>Define Documentation</h2>
-<a name="a21" doxytag="osclconfig_unix_nj.h::_STRLIT"></a><p>
+<a name="a21" doxytag="osclconfig_unix_android.h::_STRLIT"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -83,7 +83,7 @@
     </td>
   </tr>
 </table>
-<a name="a22" doxytag="osclconfig_unix_nj.h::_STRLIT_CHAR"></a><p>
+<a name="a22" doxytag="osclconfig_unix_android.h::_STRLIT_CHAR"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -110,7 +110,7 @@
     </td>
   </tr>
 </table>
-<a name="a23" doxytag="osclconfig_unix_nj.h::_STRLIT_WCHAR"></a><p>
+<a name="a23" doxytag="osclconfig_unix_android.h::_STRLIT_WCHAR"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -137,7 +137,7 @@
     </td>
   </tr>
 </table>
-<a name="a15" doxytag="osclconfig_unix_nj.h::INT64"></a><p>
+<a name="a15" doxytag="osclconfig_unix_android.h::INT64"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -164,7 +164,7 @@
     </td>
   </tr>
 </table>
-<a name="a17" doxytag="osclconfig_unix_nj.h::INT64_HILO"></a><p>
+<a name="a17" doxytag="osclconfig_unix_android.h::INT64_HILO"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -194,7 +194,7 @@
     </td>
   </tr>
 </table>
-<a name="a0" doxytag="osclconfig_unix_nj.h::OSCL_DISABLE_INLINES"></a><p>
+<a name="a0" doxytag="osclconfig_unix_android.h::OSCL_DISABLE_INLINES"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -216,7 +216,7 @@
     </td>
   </tr>
 </table>
-<a name="a2" doxytag="osclconfig_unix_nj.h::OSCL_HAS_ANSI_MATH_SUPPORT"></a><p>
+<a name="a2" doxytag="osclconfig_unix_android.h::OSCL_HAS_ANSI_MATH_SUPPORT"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -238,7 +238,7 @@
     </td>
   </tr>
 </table>
-<a name="a6" doxytag="osclconfig_unix_nj.h::OSCL_HAS_ANSI_STDIO_SUPPORT"></a><p>
+<a name="a6" doxytag="osclconfig_unix_android.h::OSCL_HAS_ANSI_STDIO_SUPPORT"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -260,7 +260,7 @@
     </td>
   </tr>
 </table>
-<a name="a1" doxytag="osclconfig_unix_nj.h::OSCL_HAS_ANSI_STDLIB_SUPPORT"></a><p>
+<a name="a1" doxytag="osclconfig_unix_android.h::OSCL_HAS_ANSI_STDLIB_SUPPORT"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -282,7 +282,7 @@
     </td>
   </tr>
 </table>
-<a name="a4" doxytag="osclconfig_unix_nj.h::OSCL_HAS_ANSI_STRING_SUPPORT"></a><p>
+<a name="a4" doxytag="osclconfig_unix_android.h::OSCL_HAS_ANSI_STRING_SUPPORT"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -304,7 +304,7 @@
     </td>
   </tr>
 </table>
-<a name="a5" doxytag="osclconfig_unix_nj.h::OSCL_HAS_ANSI_WIDE_STRING_SUPPORT"></a><p>
+<a name="a5" doxytag="osclconfig_unix_android.h::OSCL_HAS_ANSI_WIDE_STRING_SUPPORT"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -326,7 +326,7 @@
     </td>
   </tr>
 </table>
-<a name="a30" doxytag="osclconfig_unix_nj.h::OSCL_HAS_BASIC_LOCK"></a><p>
+<a name="a30" doxytag="osclconfig_unix_android.h::OSCL_HAS_BASIC_LOCK"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -348,7 +348,7 @@
     </td>
   </tr>
 </table>
-<a name="a3" doxytag="osclconfig_unix_nj.h::OSCL_HAS_GLOBAL_VARIABLE_SUPPORT"></a><p>
+<a name="a3" doxytag="osclconfig_unix_android.h::OSCL_HAS_GLOBAL_VARIABLE_SUPPORT"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -370,7 +370,7 @@
     </td>
   </tr>
 </table>
-<a name="a9" doxytag="osclconfig_unix_nj.h::OSCL_HAS_MSWIN_SUPPORT"></a><p>
+<a name="a9" doxytag="osclconfig_unix_android.h::OSCL_HAS_MSWIN_SUPPORT"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -392,7 +392,7 @@
     </td>
   </tr>
 </table>
-<a name="a11" doxytag="osclconfig_unix_nj.h::OSCL_HAS_NATIVE_INT64_TYPE"></a><p>
+<a name="a11" doxytag="osclconfig_unix_android.h::OSCL_HAS_NATIVE_INT64_TYPE"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -414,7 +414,7 @@
     </td>
   </tr>
 </table>
-<a name="a12" doxytag="osclconfig_unix_nj.h::OSCL_HAS_NATIVE_UINT64_TYPE"></a><p>
+<a name="a12" doxytag="osclconfig_unix_android.h::OSCL_HAS_NATIVE_UINT64_TYPE"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -436,7 +436,7 @@
     </td>
   </tr>
 </table>
-<a name="a10" doxytag="osclconfig_unix_nj.h::OSCL_HAS_SYMBIAN_SUPPORT"></a><p>
+<a name="a10" doxytag="osclconfig_unix_android.h::OSCL_HAS_SYMBIAN_SUPPORT"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -458,7 +458,7 @@
     </td>
   </tr>
 </table>
-<a name="a24" doxytag="osclconfig_unix_nj.h::OSCL_HAS_TLS_SUPPORT"></a><p>
+<a name="a24" doxytag="osclconfig_unix_android.h::OSCL_HAS_TLS_SUPPORT"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -480,7 +480,7 @@
     </td>
   </tr>
 </table>
-<a name="a19" doxytag="osclconfig_unix_nj.h::OSCL_HAS_UNICODE_SUPPORT"></a><p>
+<a name="a19" doxytag="osclconfig_unix_android.h::OSCL_HAS_UNICODE_SUPPORT"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -502,7 +502,7 @@
     </td>
   </tr>
 </table>
-<a name="a8" doxytag="osclconfig_unix_nj.h::OSCL_HAS_UNIX_SUPPORT"></a><p>
+<a name="a8" doxytag="osclconfig_unix_android.h::OSCL_HAS_UNIX_SUPPORT"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -524,7 +524,7 @@
     </td>
   </tr>
 </table>
-<a name="a7" doxytag="osclconfig_unix_nj.h::OSCL_MEMFRAG_PTR_BEFORE_LEN"></a><p>
+<a name="a7" doxytag="osclconfig_unix_android.h::OSCL_MEMFRAG_PTR_BEFORE_LEN"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -546,7 +546,7 @@
     </td>
   </tr>
 </table>
-<a name="a13" doxytag="osclconfig_unix_nj.h::OSCL_NATIVE_INT64_TYPE"></a><p>
+<a name="a13" doxytag="osclconfig_unix_android.h::OSCL_NATIVE_INT64_TYPE"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -568,7 +568,7 @@
     </td>
   </tr>
 </table>
-<a name="a14" doxytag="osclconfig_unix_nj.h::OSCL_NATIVE_UINT64_TYPE"></a><p>
+<a name="a14" doxytag="osclconfig_unix_android.h::OSCL_NATIVE_UINT64_TYPE"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -590,7 +590,7 @@
     </td>
   </tr>
 </table>
-<a name="a20" doxytag="osclconfig_unix_nj.h::OSCL_NATIVE_WCHAR_TYPE"></a><p>
+<a name="a20" doxytag="osclconfig_unix_android.h::OSCL_NATIVE_WCHAR_TYPE"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -612,7 +612,7 @@
     </td>
   </tr>
 </table>
-<a name="a29" doxytag="osclconfig_unix_nj.h::OSCL_TLS_GET_FUNC"></a><p>
+<a name="a29" doxytag="osclconfig_unix_android.h::OSCL_TLS_GET_FUNC"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -639,7 +639,7 @@
     </td>
   </tr>
 </table>
-<a name="a25" doxytag="osclconfig_unix_nj.h::OSCL_TLS_IS_KEYED"></a><p>
+<a name="a25" doxytag="osclconfig_unix_android.h::OSCL_TLS_IS_KEYED"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -661,7 +661,7 @@
     </td>
   </tr>
 </table>
-<a name="a26" doxytag="osclconfig_unix_nj.h::OSCL_TLS_KEY_CREATE_FUNC"></a><p>
+<a name="a26" doxytag="osclconfig_unix_android.h::OSCL_TLS_KEY_CREATE_FUNC"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -688,7 +688,7 @@
     </td>
   </tr>
 </table>
-<a name="a27" doxytag="osclconfig_unix_nj.h::OSCL_TLS_KEY_DELETE_FUNC"></a><p>
+<a name="a27" doxytag="osclconfig_unix_android.h::OSCL_TLS_KEY_DELETE_FUNC"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -715,7 +715,7 @@
     </td>
   </tr>
 </table>
-<a name="a28" doxytag="osclconfig_unix_nj.h::OSCL_TLS_STORE_FUNC"></a><p>
+<a name="a28" doxytag="osclconfig_unix_android.h::OSCL_TLS_STORE_FUNC"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -745,7 +745,7 @@
     </td>
   </tr>
 </table>
-<a name="a16" doxytag="osclconfig_unix_nj.h::UINT64"></a><p>
+<a name="a16" doxytag="osclconfig_unix_android.h::UINT64"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -772,7 +772,7 @@
     </td>
   </tr>
 </table>
-<a name="a18" doxytag="osclconfig_unix_nj.h::UINT64_HILO"></a><p>
+<a name="a18" doxytag="osclconfig_unix_android.h::UINT64_HILO"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -803,7 +803,7 @@
   </tr>
 </table>
 <hr><h2>Typedef Documentation</h2>
-<a name="a32" doxytag="osclconfig_unix_nj.h::TOsclBasicLockObject"></a><p>
+<a name="a32" doxytag="osclconfig_unix_android.h::TOsclBasicLockObject"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -825,7 +825,7 @@
     </td>
   </tr>
 </table>
-<a name="a31" doxytag="osclconfig_unix_nj.h::TOsclTlsKey"></a><p>
+<a name="a31" doxytag="osclconfig_unix_android.h::TOsclTlsKey"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -848,7 +848,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__unix__common_8h-source.html b/doc/oscl_html/osclconfig__unix__common_8h-source.html
index 21db0ef..363282c 100644
--- a/doc/oscl_html/osclconfig__unix__common_8h-source.html
+++ b/doc/oscl_html/osclconfig__unix__common_8h-source.html
@@ -86,7 +86,7 @@
 00086 <span class="preprocessor">#endif // OSCLCONFIG_UNIX_COMMON_H_INCLUDED</span>
 00087 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__unix__common_8h.html b/doc/oscl_html/osclconfig__unix__common_8h.html
index cd7f682..4b5c41f 100644
--- a/doc/oscl_html/osclconfig__unix__common_8h.html
+++ b/doc/oscl_html/osclconfig__unix__common_8h.html
@@ -849,7 +849,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__unix__nj_8h-source.html b/doc/oscl_html/osclconfig__unix__nj_8h-source.html
deleted file mode 100644
index 1483613..0000000
--- a/doc/oscl_html/osclconfig__unix__nj_8h-source.html
+++ /dev/null
@@ -1,92 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>osclconfig_unix_nj.h Source File</title>
-<link href="doxygen.css" rel="stylesheet" type="text/css">
-</head><body>
-<!-- Generated by Doxygen 1.2.18 -->
-<center>
-<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="modules.html">Modules</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Data Structures</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Data Fields</a> &nbsp; <a class="qindex" href="globals.html">Globals</a> &nbsp; </center>
-<hr><h1>osclconfig_unix_nj.h</h1><a href="osclconfig__unix__nj_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">// -*- c++ -*-</span>
-00002 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span>
-00003 
-00004 <span class="comment">//         O S C L C O N F I G _ U N I X _ C O M M O N</span>
-00005 
-00006 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span>
-00007 
-00008 
-00017 <span class="preprocessor">#ifndef OSCLCONFIG_UNIX_NJ_H_INCLUDED</span>
-00018 <span class="preprocessor"></span><span class="preprocessor">#define OSCLCONFIG_UNIX_NJ_H_INCLUDED</span>
-00019 <span class="preprocessor"></span>
-00020 
-00021 <span class="comment">// system header files</span>
-00022 <span class="preprocessor">#include &lt;stdlib.h&gt;</span> <span class="comment">// abort</span>
-00023 <span class="preprocessor">#include &lt;stdarg.h&gt;</span> <span class="comment">// va_list</span>
-00024 <span class="preprocessor">#include &lt;sys/types.h&gt;</span>
-00025 <span class="preprocessor">#include &lt;stdio.h&gt;</span>
-00026 <span class="comment">//#include &lt;wchar.h&gt;</span>
-00027 <span class="preprocessor">#include &lt;string.h&gt;</span>
-00028 <span class="preprocessor">#include &lt;unistd.h&gt;</span> <span class="comment">//for sleep</span>
-00029 <span class="preprocessor">#include &lt;pthread.h&gt;</span>
-00030 <span class="preprocessor">#include &lt;ctype.h&gt;</span> <span class="comment">// for tolower and toupper</span>
-00031 <span class="preprocessor">#ifdef __cplusplus</span>
-00032 <span class="preprocessor"></span><span class="preprocessor">#include &lt;new&gt;</span> <span class="comment">//for placement new</span>
-00033 <span class="preprocessor">#endif</span>
-00034 <span class="preprocessor"></span><span class="preprocessor">#include &lt;math.h&gt;</span>
-00035 
-<a name="l00036"></a><a class="code" href="osclconfig__unix__nj_8h.html#a0">00036</a> <span class="preprocessor">#define OSCL_DISABLE_INLINES                0</span>
-00037 <span class="preprocessor"></span>
-<a name="l00038"></a><a class="code" href="osclconfig__unix__nj_8h.html#a1">00038</a> <span class="preprocessor">#define OSCL_HAS_ANSI_STDLIB_SUPPORT        1</span>
-<a name="l00039"></a><a class="code" href="osclconfig__unix__nj_8h.html#a2">00039</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_ANSI_MATH_SUPPORT          1</span>
-<a name="l00040"></a><a class="code" href="osclconfig__unix__nj_8h.html#a3">00040</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_GLOBAL_VARIABLE_SUPPORT    1</span>
-<a name="l00041"></a><a class="code" href="osclconfig__unix__nj_8h.html#a4">00041</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_ANSI_STRING_SUPPORT        1</span>
-<a name="l00042"></a><a class="code" href="osclconfig__unix__nj_8h.html#a5">00042</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_ANSI_WIDE_STRING_SUPPORT   0</span>
-<a name="l00043"></a><a class="code" href="osclconfig__unix__nj_8h.html#a6">00043</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_ANSI_STDIO_SUPPORT         1</span>
-00044 <span class="preprocessor"></span>
-<a name="l00045"></a><a class="code" href="osclconfig__unix__nj_8h.html#a7">00045</a> <span class="preprocessor">#define OSCL_MEMFRAG_PTR_BEFORE_LEN         1</span>
-00046 <span class="preprocessor"></span>
-<a name="l00047"></a><a class="code" href="osclconfig__unix__nj_8h.html#a8">00047</a> <span class="preprocessor">#define OSCL_HAS_UNIX_SUPPORT               1</span>
-<a name="l00048"></a><a class="code" href="osclconfig__unix__nj_8h.html#a9">00048</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_MSWIN_SUPPORT              0</span>
-<a name="l00049"></a><a class="code" href="osclconfig__unix__nj_8h.html#a10">00049</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_SYMBIAN_SUPPORT            0</span>
-00050 <span class="preprocessor"></span>
-00051 <span class="comment">// 64-bit int</span>
-<a name="l00052"></a><a class="code" href="osclconfig__unix__nj_8h.html#a11">00052</a> <span class="preprocessor">#define OSCL_HAS_NATIVE_INT64_TYPE 1</span>
-<a name="l00053"></a><a class="code" href="osclconfig__unix__nj_8h.html#a12">00053</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_NATIVE_UINT64_TYPE 1</span>
-<a name="l00054"></a><a class="code" href="osclconfig__unix__nj_8h.html#a13">00054</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_NATIVE_INT64_TYPE     int64_t</span>
-<a name="l00055"></a><a class="code" href="osclconfig__unix__nj_8h.html#a14">00055</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_NATIVE_UINT64_TYPE    uint64_t</span>
-<a name="l00056"></a><a class="code" href="osclconfig__unix__nj_8h.html#a15">00056</a> <span class="preprocessor"></span><span class="preprocessor">#define INT64(x) x##LL</span>
-<a name="l00057"></a><a class="code" href="osclconfig__unix__nj_8h.html#a16">00057</a> <span class="preprocessor"></span><span class="preprocessor">#define UINT64(x) x##ULL</span>
-<a name="l00058"></a><a class="code" href="osclconfig__unix__nj_8h.html#a17">00058</a> <span class="preprocessor"></span><span class="preprocessor">#define INT64_HILO(high,low) ((((high##LL))&lt;&lt;32)|low)</span>
-<a name="l00059"></a><a class="code" href="osclconfig__unix__nj_8h.html#a18">00059</a> <span class="preprocessor"></span><span class="preprocessor">#define UINT64_HILO(high,low) ((((high##ULL))&lt;&lt;32)|low)</span>
-00060 <span class="preprocessor"></span>
-00061 <span class="comment">// character set.</span>
-<a name="l00062"></a><a class="code" href="osclconfig__unix__nj_8h.html#a19">00062</a> <span class="preprocessor">#define OSCL_HAS_UNICODE_SUPPORT            1</span>
-<a name="l00063"></a><a class="code" href="osclconfig__unix__nj_8h.html#a20">00063</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_NATIVE_WCHAR_TYPE wchar_t</span>
-00064 <span class="preprocessor"></span><span class="preprocessor">#if (OSCL_HAS_UNICODE_SUPPORT)</span>
-<a name="l00065"></a><a class="code" href="osclconfig__unix__nj_8h.html#a21">00065</a> <span class="preprocessor"></span><span class="preprocessor">#define _STRLIT(x) L ## x</span>
-00066 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-00067 <span class="preprocessor"></span><span class="preprocessor">#define _STRLIT(x) x</span>
-00068 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00069"></a><a class="code" href="osclconfig__unix__nj_8h.html#a22">00069</a> <span class="preprocessor"></span><span class="preprocessor">#define _STRLIT_CHAR(x) x</span>
-<a name="l00070"></a><a class="code" href="osclconfig__unix__nj_8h.html#a23">00070</a> <span class="preprocessor"></span><span class="preprocessor">#define _STRLIT_WCHAR(x) L ## x</span>
-00071 <span class="preprocessor"></span>
-00072 <span class="comment">// Thread-local storage.  Unix has keyed TLS.</span>
-<a name="l00073"></a><a class="code" href="osclconfig__unix__nj_8h.html#a24">00073</a> <span class="preprocessor">#define OSCL_HAS_TLS_SUPPORT    1</span>
-<a name="l00074"></a><a class="code" href="osclconfig__unix__nj_8h.html#a25">00074</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_TLS_IS_KEYED 1</span>
-<a name="l00075"></a><a class="code" href="osclconfig__unix__nj_8h.html#a31">00075</a> <span class="preprocessor"></span><span class="keyword">typedef</span> pthread_key_t <a class="code" href="osclconfig__unix__nj_8h.html#a31">TOsclTlsKey</a> ;
-<a name="l00076"></a><a class="code" href="osclconfig__unix__nj_8h.html#a26">00076</a> <span class="preprocessor">#define OSCL_TLS_KEY_CREATE_FUNC(key) (pthread_key_create(&amp;key,NULL)==0)</span>
-<a name="l00077"></a><a class="code" href="osclconfig__unix__nj_8h.html#a27">00077</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_TLS_KEY_DELETE_FUNC(key) pthread_key_delete(key)</span>
-<a name="l00078"></a><a class="code" href="osclconfig__unix__nj_8h.html#a28">00078</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_TLS_STORE_FUNC(key,ptr) (pthread_setspecific(key,(const void*)ptr)==0)</span>
-<a name="l00079"></a><a class="code" href="osclconfig__unix__nj_8h.html#a29">00079</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_TLS_GET_FUNC(key) pthread_getspecific(key)</span>
-00080 <span class="preprocessor"></span>
-00081 <span class="comment">//Basic lock</span>
-<a name="l00082"></a><a class="code" href="osclconfig__unix__nj_8h.html#a30">00082</a> <span class="preprocessor">#define OSCL_HAS_BASIC_LOCK 1</span>
-00083 <span class="preprocessor"></span><span class="preprocessor">#include &lt;pthread.h&gt;</span>
-<a name="l00084"></a><a class="code" href="osclconfig__unix__nj_8h.html#a32">00084</a> <span class="keyword">typedef</span> pthread_mutex_t <a class="code" href="osclconfig__unix__nj_8h.html#a32">TOsclBasicLockObject</a>;
-00085 
-00086 <span class="preprocessor">#endif // OSCLCONFIG_UNIX_COMMON_H_INCLUDED</span>
-00087 <span class="preprocessor"></span>
-</pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
-</small></address>
-</body>
-</html>
diff --git a/doc/oscl_html/osclconfig__util_8h-source.html b/doc/oscl_html/osclconfig__util_8h-source.html
index c0011a4..c2c2cc5 100644
--- a/doc/oscl_html/osclconfig__util_8h-source.html
+++ b/doc/oscl_html/osclconfig__util_8h-source.html
@@ -33,7 +33,7 @@
 00025 <span class="preprocessor">#endif</span>
 00026 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__util_8h.html b/doc/oscl_html/osclconfig__util_8h.html
index ecb008c..480e4d9 100644
--- a/doc/oscl_html/osclconfig__util_8h.html
+++ b/doc/oscl_html/osclconfig__util_8h.html
@@ -135,7 +135,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__util__check_8h-source.html b/doc/oscl_html/osclconfig__util__check_8h-source.html
index 0998d86..a6cdf91 100644
--- a/doc/oscl_html/osclconfig__util__check_8h-source.html
+++ b/doc/oscl_html/osclconfig__util__check_8h-source.html
@@ -29,7 +29,7 @@
 00040 <span class="preprocessor"></span>
 00041 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/osclconfig__util__check_8h.html b/doc/oscl_html/osclconfig__util__check_8h.html
index 504181d..13d094a 100644
--- a/doc/oscl_html/osclconfig__util__check_8h.html
+++ b/doc/oscl_html/osclconfig__util__check_8h.html
@@ -12,7 +12,7 @@
 <tr><td></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/pvlogger_8h-source.html b/doc/oscl_html/pvlogger_8h-source.html
index c23424e..f021ed6 100644
--- a/doc/oscl_html/pvlogger_8h-source.html
+++ b/doc/oscl_html/pvlogger_8h-source.html
@@ -405,7 +405,7 @@
 00706 
 00707 <span class="preprocessor">#endif // PVLOGGER_H_INCLUDED</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/pvlogger_8h.html b/doc/oscl_html/pvlogger_8h.html
index d5f7591..beff798 100644
--- a/doc/oscl_html/pvlogger_8h.html
+++ b/doc/oscl_html/pvlogger_8h.html
@@ -1597,7 +1597,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/pvlogger__accessories_8h-source.html b/doc/oscl_html/pvlogger__accessories_8h-source.html
index 5cd278b..fda9abf 100644
--- a/doc/oscl_html/pvlogger__accessories_8h-source.html
+++ b/doc/oscl_html/pvlogger__accessories_8h-source.html
@@ -91,7 +91,7 @@
 00111 <span class="preprocessor">#endif</span>
 00112 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/pvlogger__accessories_8h.html b/doc/oscl_html/pvlogger__accessories_8h.html
index 44fb712..59005f3 100644
--- a/doc/oscl_html/pvlogger__accessories_8h.html
+++ b/doc/oscl_html/pvlogger__accessories_8h.html
@@ -90,7 +90,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/pvlogger__c_8h-source.html b/doc/oscl_html/pvlogger__c_8h-source.html
index 4dbc98c..3342da4 100644
--- a/doc/oscl_html/pvlogger__c_8h-source.html
+++ b/doc/oscl_html/pvlogger__c_8h-source.html
@@ -75,7 +75,7 @@
 00075 
 00076 <span class="preprocessor">#endif // PVLOGGER_C_H_INCLUDED</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/pvlogger__c_8h.html b/doc/oscl_html/pvlogger__c_8h.html
index c5cc7d3..86887a1 100644
--- a/doc/oscl_html/pvlogger__c_8h.html
+++ b/doc/oscl_html/pvlogger__c_8h.html
@@ -490,7 +490,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/pvlogger__registry_8h-source.html b/doc/oscl_html/pvlogger__registry_8h-source.html
index 9e79bf3..01deadc 100644
--- a/doc/oscl_html/pvlogger__registry_8h-source.html
+++ b/doc/oscl_html/pvlogger__registry_8h-source.html
@@ -48,7 +48,7 @@
 00105 <span class="preprocessor">#endif // PVLOGGER_REGISTRY_H_INCLUDED</span>
 00106 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/pvlogger__registry_8h.html b/doc/oscl_html/pvlogger__registry_8h.html
index da0bcb9..23bfc66 100644
--- a/doc/oscl_html/pvlogger__registry_8h.html
+++ b/doc/oscl_html/pvlogger__registry_8h.html
@@ -16,7 +16,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classPVLoggerRegistry.html">PVLoggerRegistry</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structMM__AllocBlockFence.html b/doc/oscl_html/structMM__AllocBlockFence.html
index db4c96b..5ffa09f 100644
--- a/doc/oscl_html/structMM__AllocBlockFence.html
+++ b/doc/oscl_html/structMM__AllocBlockFence.html
@@ -132,7 +132,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__mem__audit__internals_8h-source.html">oscl_mem_audit_internals.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structMM__AllocBlockHdr.html b/doc/oscl_html/structMM__AllocBlockHdr.html
index 969221e..ba330c4 100644
--- a/doc/oscl_html/structMM__AllocBlockHdr.html
+++ b/doc/oscl_html/structMM__AllocBlockHdr.html
@@ -242,7 +242,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__mem__audit__internals_8h-source.html">oscl_mem_audit_internals.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structMM__AllocInfo.html b/doc/oscl_html/structMM__AllocInfo.html
index 9e57842..b50264a 100644
--- a/doc/oscl_html/structMM__AllocInfo.html
+++ b/doc/oscl_html/structMM__AllocInfo.html
@@ -340,7 +340,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__mem__audit_8h-source.html">oscl_mem_audit.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structMM__AllocNode.html b/doc/oscl_html/structMM__AllocNode.html
index e49192f..644b12d 100644
--- a/doc/oscl_html/structMM__AllocNode.html
+++ b/doc/oscl_html/structMM__AllocNode.html
@@ -248,7 +248,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__mem__audit_8h-source.html">oscl_mem_audit.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structMM__AllocQueryInfo.html b/doc/oscl_html/structMM__AllocQueryInfo.html
index 5853741..9e66d85 100644
--- a/doc/oscl_html/structMM__AllocQueryInfo.html
+++ b/doc/oscl_html/structMM__AllocQueryInfo.html
@@ -157,7 +157,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__mem__audit_8h-source.html">oscl_mem_audit.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structMM__AuditOverheadStats.html b/doc/oscl_html/structMM__AuditOverheadStats.html
index ffe2cc3..b51e753 100644
--- a/doc/oscl_html/structMM__AuditOverheadStats.html
+++ b/doc/oscl_html/structMM__AuditOverheadStats.html
@@ -65,7 +65,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__mem__audit_8h-source.html">oscl_mem_audit.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structMM__FailInsertParam.html b/doc/oscl_html/structMM__FailInsertParam.html
index 2d62d40..ab91aed 100644
--- a/doc/oscl_html/structMM__FailInsertParam.html
+++ b/doc/oscl_html/structMM__FailInsertParam.html
@@ -225,7 +225,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__mem__audit_8h-source.html">oscl_mem_audit.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structMM__Stats__CB.html b/doc/oscl_html/structMM__Stats__CB.html
index 7e97d7b..0e0f3e9 100644
--- a/doc/oscl_html/structMM__Stats__CB.html
+++ b/doc/oscl_html/structMM__Stats__CB.html
@@ -219,7 +219,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__mem__audit_8h-source.html">oscl_mem_audit.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structMM__Stats__t.html b/doc/oscl_html/structMM__Stats__t.html
index 433720f..9027a5a 100644
--- a/doc/oscl_html/structMM__Stats__t.html
+++ b/doc/oscl_html/structMM__Stats__t.html
@@ -409,7 +409,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__mem__audit_8h-source.html">oscl_mem_audit.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structOsclInteger64Transport.html b/doc/oscl_html/structOsclInteger64Transport.html
index f11c9d0..9035a3a 100644
--- a/doc/oscl_html/structOsclInteger64Transport.html
+++ b/doc/oscl_html/structOsclInteger64Transport.html
@@ -67,7 +67,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__int64__utils_8h-source.html">oscl_int64_utils.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structOsclMemPoolResizableAllocator_1_1MemPoolBlockInfo.html b/doc/oscl_html/structOsclMemPoolResizableAllocator_1_1MemPoolBlockInfo.html
index a70e7e5..8f6bc55 100644
--- a/doc/oscl_html/structOsclMemPoolResizableAllocator_1_1MemPoolBlockInfo.html
+++ b/doc/oscl_html/structOsclMemPoolResizableAllocator_1_1MemPoolBlockInfo.html
@@ -177,7 +177,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__mem__mempool_8h-source.html">oscl_mem_mempool.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structOsclMemPoolResizableAllocator_1_1MemPoolBufferInfo.html b/doc/oscl_html/structOsclMemPoolResizableAllocator_1_1MemPoolBufferInfo.html
index ac83abc..72bd1a0 100644
--- a/doc/oscl_html/structOsclMemPoolResizableAllocator_1_1MemPoolBufferInfo.html
+++ b/doc/oscl_html/structOsclMemPoolResizableAllocator_1_1MemPoolBufferInfo.html
@@ -200,7 +200,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__mem__mempool_8h-source.html">oscl_mem_mempool.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structOsclMemoryFragment.html b/doc/oscl_html/structOsclMemoryFragment.html
index 559edcc..a4108b0 100644
--- a/doc/oscl_html/structOsclMemoryFragment.html
+++ b/doc/oscl_html/structOsclMemoryFragment.html
@@ -70,7 +70,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__types_8h-source.html">oscl_types.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structOsclUuid.html b/doc/oscl_html/structOsclUuid.html
index 1f6cf62..88fac10 100644
--- a/doc/oscl_html/structOsclUuid.html
+++ b/doc/oscl_html/structOsclUuid.html
@@ -386,7 +386,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__uuid_8h-source.html">oscl_uuid.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structOscl__Less.html b/doc/oscl_html/structOscl__Less.html
index fcf314e..1e781ae 100644
--- a/doc/oscl_html/structOscl__Less.html
+++ b/doc/oscl_html/structOscl__Less.html
@@ -65,7 +65,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__map_8h-source.html">oscl_map.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structOscl__Pair.html b/doc/oscl_html/structOscl__Pair.html
index c01f671..067fe62 100644
--- a/doc/oscl_html/structOscl__Pair.html
+++ b/doc/oscl_html/structOscl__Pair.html
@@ -154,7 +154,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__tree_8h-source.html">oscl_tree.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structOscl__Rb__Tree__Const__Iterator.html b/doc/oscl_html/structOscl__Rb__Tree__Const__Iterator.html
index 45c8c6f..7f50ce7 100644
--- a/doc/oscl_html/structOscl__Rb__Tree__Const__Iterator.html
+++ b/doc/oscl_html/structOscl__Rb__Tree__Const__Iterator.html
@@ -615,7 +615,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__tree_8h-source.html">oscl_tree.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structOscl__Rb__Tree__Iterator.html b/doc/oscl_html/structOscl__Rb__Tree__Iterator.html
index 6567e58..b17f5d0 100644
--- a/doc/oscl_html/structOscl__Rb__Tree__Iterator.html
+++ b/doc/oscl_html/structOscl__Rb__Tree__Iterator.html
@@ -615,7 +615,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__tree_8h-source.html">oscl_tree.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structOscl__Rb__Tree__Node.html b/doc/oscl_html/structOscl__Rb__Tree__Node.html
index eba708b..727141c 100644
--- a/doc/oscl_html/structOscl__Rb__Tree__Node.html
+++ b/doc/oscl_html/structOscl__Rb__Tree__Node.html
@@ -111,7 +111,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__tree_8h-source.html">oscl_tree.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structOscl__Rb__Tree__Node__Base.html b/doc/oscl_html/structOscl__Rb__Tree__Node__Base.html
index 60cfcea..831aa49 100644
--- a/doc/oscl_html/structOscl__Rb__Tree__Node__Base.html
+++ b/doc/oscl_html/structOscl__Rb__Tree__Node__Base.html
@@ -260,7 +260,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__tree_8h-source.html">oscl_tree.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structOscl__Select1st.html b/doc/oscl_html/structOscl__Select1st.html
index bb14936..ed0737f 100644
--- a/doc/oscl_html/structOscl__Select1st.html
+++ b/doc/oscl_html/structOscl__Select1st.html
@@ -56,7 +56,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__map_8h-source.html">oscl_map.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structOscl__TAlloc_1_1rebind.html b/doc/oscl_html/structOscl__TAlloc_1_1rebind.html
index 31af9ec..56f2f64 100644
--- a/doc/oscl_html/structOscl__TAlloc_1_1rebind.html
+++ b/doc/oscl_html/structOscl__TAlloc_1_1rebind.html
@@ -51,7 +51,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__defalloc_8h-source.html">oscl_defalloc.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structOscl__Tag.html b/doc/oscl_html/structOscl__Tag.html
index 16b58b0..49a57ae 100644
--- a/doc/oscl_html/structOscl__Tag.html
+++ b/doc/oscl_html/structOscl__Tag.html
@@ -220,7 +220,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__tagtree_8h-source.html">oscl_tagtree.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structOscl__TagTree_1_1Node.html b/doc/oscl_html/structOscl__TagTree_1_1Node.html
index d3e5ca5..2eb0243 100644
--- a/doc/oscl_html/structOscl__TagTree_1_1Node.html
+++ b/doc/oscl_html/structOscl__TagTree_1_1Node.html
@@ -259,7 +259,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__tagtree_8h-source.html">oscl_tagtree.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structOscl__TagTree_1_1const__iterator.html b/doc/oscl_html/structOscl__TagTree_1_1const__iterator.html
index 6cfc53d..f32c39b 100644
--- a/doc/oscl_html/structOscl__TagTree_1_1const__iterator.html
+++ b/doc/oscl_html/structOscl__TagTree_1_1const__iterator.html
@@ -528,7 +528,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__tagtree_8h-source.html">oscl_tagtree.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structOscl__TagTree_1_1iterator.html b/doc/oscl_html/structOscl__TagTree_1_1iterator.html
index 2faa22a..d40c8cd 100644
--- a/doc/oscl_html/structOscl__TagTree_1_1iterator.html
+++ b/doc/oscl_html/structOscl__TagTree_1_1iterator.html
@@ -528,7 +528,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__tagtree_8h-source.html">oscl_tagtree.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structOscl__Tag__Base.html b/doc/oscl_html/structOscl__Tag__Base.html
index be08e38..b33c1cb 100644
--- a/doc/oscl_html/structOscl__Tag__Base.html
+++ b/doc/oscl_html/structOscl__Tag__Base.html
@@ -311,7 +311,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__tagtree_8h-source.html">oscl_tagtree.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structStrCSumPtrLen.html b/doc/oscl_html/structStrCSumPtrLen.html
index 536bf6c..ba6c13d 100644
--- a/doc/oscl_html/structStrCSumPtrLen.html
+++ b/doc/oscl_html/structStrCSumPtrLen.html
@@ -522,7 +522,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__str__ptr__len_8h-source.html">oscl_str_ptr_len.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structStrPtrLen.html b/doc/oscl_html/structStrPtrLen.html
index 166ecf0..0e833d5 100644
--- a/doc/oscl_html/structStrPtrLen.html
+++ b/doc/oscl_html/structStrPtrLen.html
@@ -552,7 +552,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__str__ptr__len_8h-source.html">oscl_str_ptr_len.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structWStrPtrLen.html b/doc/oscl_html/structWStrPtrLen.html
index 1a273f6..9497d80 100644
--- a/doc/oscl_html/structWStrPtrLen.html
+++ b/doc/oscl_html/structWStrPtrLen.html
@@ -480,7 +480,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__str__ptr__len_8h-source.html">oscl_str_ptr_len.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structoscl__fsstat.html b/doc/oscl_html/structoscl__fsstat.html
index f4532e8..8c4241f 100644
--- a/doc/oscl_html/structoscl__fsstat.html
+++ b/doc/oscl_html/structoscl__fsstat.html
@@ -65,7 +65,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__file__dir__utils_8h-source.html">oscl_file_dir_utils.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/oscl_html/structoscl__stat__buf.html b/doc/oscl_html/structoscl__stat__buf.html
index c069fa6..b96c00a 100644
--- a/doc/oscl_html/structoscl__stat__buf.html
+++ b/doc/oscl_html/structoscl__stat__buf.html
@@ -65,7 +65,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="oscl__file__dir__utils_8h-source.html">oscl_file_dir_utils.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pv2way_engine_api.pdf b/doc/pv2way_engine_api.pdf
index ab58c9a..9c55e45 100644
--- a/doc/pv2way_engine_api.pdf
+++ b/doc/pv2way_engine_api.pdf
Binary files differ
diff --git a/doc/pv2way_html/annotated.html b/doc/pv2way_html/annotated.html
index e1bbe36..cc8e06c 100644
--- a/doc/pv2way_html/annotated.html
+++ b/doc/pv2way_html/annotated.html
@@ -21,7 +21,7 @@
   <tr><td class="indexkey"><a class="el" href="classPVH223AlConfig.html">PVH223AlConfig</a></td><td class="indexvalue"></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV2Way Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090206 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pv2way_html/classCPV2WayEngineFactory.html b/doc/pv2way_html/classCPV2WayEngineFactory.html
index b88febe..1349dcf 100644
--- a/doc/pv2way_html/classCPV2WayEngineFactory.html
+++ b/doc/pv2way_html/classCPV2WayEngineFactory.html
@@ -172,7 +172,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__2way__engine__factory_8h-source.html">pv_2way_engine_factory.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV2Way Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090206 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pv2way_html/classCPV2WayInterface.html b/doc/pv2way_html/classCPV2WayInterface.html
index 553b816..d164672 100644
--- a/doc/pv2way_html/classCPV2WayInterface.html
+++ b/doc/pv2way_html/classCPV2WayInterface.html
@@ -1101,7 +1101,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__2way__interface_8h-source.html">pv_2way_interface.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV2Way Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090206 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pv2way_html/classCPV2WayProxyFactory.html b/doc/pv2way_html/classCPV2WayProxyFactory.html
index 94c8de7..176cc28 100644
--- a/doc/pv2way_html/classCPV2WayProxyFactory.html
+++ b/doc/pv2way_html/classCPV2WayProxyFactory.html
@@ -172,7 +172,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__2way__proxy__factory_8h-source.html">pv_2way_proxy_factory.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV2Way Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090206 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pv2way_html/classH324MConfigInterface.html b/doc/pv2way_html/classH324MConfigInterface.html
index b131c76..8113f60 100644
--- a/doc/pv2way_html/classH324MConfigInterface.html
+++ b/doc/pv2way_html/classH324MConfigInterface.html
@@ -1225,7 +1225,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__2way__h324m__interface_8h-source.html">pv_2way_h324m_interface.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV2Way Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090206 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pv2way_html/classPV2Way324ConnectOptions.html b/doc/pv2way_html/classPV2Way324ConnectOptions.html
index 7b30340..c39578f 100644
--- a/doc/pv2way_html/classPV2Way324ConnectOptions.html
+++ b/doc/pv2way_html/classPV2Way324ConnectOptions.html
@@ -183,7 +183,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__2way__h324m__types_8h-source.html">pv_2way_h324m_types.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV2Way Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090206 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pv2way_html/classPV2Way324InitInfo.html b/doc/pv2way_html/classPV2Way324InitInfo.html
index 0aeed25..81b44c4 100644
--- a/doc/pv2way_html/classPV2Way324InitInfo.html
+++ b/doc/pv2way_html/classPV2Way324InitInfo.html
@@ -148,7 +148,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__2way__h324m__types_8h-source.html">pv_2way_h324m_types.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV2Way Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090206 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pv2way_html/classPV2WayConnectOptions.html b/doc/pv2way_html/classPV2WayConnectOptions.html
index 5c98501..b0f84e9 100644
--- a/doc/pv2way_html/classPV2WayConnectOptions.html
+++ b/doc/pv2way_html/classPV2WayConnectOptions.html
@@ -278,7 +278,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__2way__basic__types_8h-source.html">pv_2way_basic_types.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV2Way Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090206 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pv2way_html/classPV2WayInitInfo.html b/doc/pv2way_html/classPV2WayInitInfo.html
index 097eb57..fe65bc7 100644
--- a/doc/pv2way_html/classPV2WayInitInfo.html
+++ b/doc/pv2way_html/classPV2WayInitInfo.html
@@ -186,7 +186,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__2way__basic__types_8h-source.html">pv_2way_basic_types.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV2Way Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090206 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pv2way_html/classPVH223Al1Config.html b/doc/pv2way_html/classPVH223Al1Config.html
index f39aef9..511d111 100644
--- a/doc/pv2way_html/classPVH223Al1Config.html
+++ b/doc/pv2way_html/classPVH223Al1Config.html
@@ -82,7 +82,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__2way__h324m__types_8h-source.html">pv_2way_h324m_types.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV2Way Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090206 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pv2way_html/classPVH223Al2Config.html b/doc/pv2way_html/classPVH223Al2Config.html
index 2244d1c..99a3cf0 100644
--- a/doc/pv2way_html/classPVH223Al2Config.html
+++ b/doc/pv2way_html/classPVH223Al2Config.html
@@ -82,7 +82,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__2way__h324m__types_8h-source.html">pv_2way_h324m_types.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV2Way Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090206 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pv2way_html/classPVH223Al3Config.html b/doc/pv2way_html/classPVH223Al3Config.html
index 081ca05..2646f98 100644
--- a/doc/pv2way_html/classPVH223Al3Config.html
+++ b/doc/pv2way_html/classPVH223Al3Config.html
@@ -105,7 +105,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__2way__h324m__types_8h-source.html">pv_2way_h324m_types.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV2Way Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090206 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pv2way_html/classPVH223AlConfig.html b/doc/pv2way_html/classPVH223AlConfig.html
index 1149aa2..a099780 100644
--- a/doc/pv2way_html/classPVH223AlConfig.html
+++ b/doc/pv2way_html/classPVH223AlConfig.html
@@ -97,7 +97,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__2way__h324m__types_8h-source.html">pv_2way_h324m_types.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV2Way Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090206 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pv2way_html/files.html b/doc/pv2way_html/files.html
index ac9a7d9..7d62799 100644
--- a/doc/pv2way_html/files.html
+++ b/doc/pv2way_html/files.html
@@ -15,7 +15,7 @@
   <tr><td class="indexkey"><a class="el" href="pv__2way__proxy__factory_8h.html">pv_2way_proxy_factory.h</a> <a href="pv__2way__proxy__factory_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV2Way Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090206 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pv2way_html/functions.html b/doc/pv2way_html/functions.html
index 1abfc07..847367a 100644
--- a/doc/pv2way_html/functions.html
+++ b/doc/pv2way_html/functions.html
@@ -120,7 +120,7 @@
 : <a class="el" href="classPV2Way324InitInfo.html#a2">PV2Way324InitInfo</a><li>~PV2WayInitInfo()
 : <a class="el" href="classPV2WayInitInfo.html#a1">PV2WayInitInfo</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV2Way Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090206 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pv2way_html/globals.html b/doc/pv2way_html/globals.html
index f64cb53..9f475b7 100644
--- a/doc/pv2way_html/globals.html
+++ b/doc/pv2way_html/globals.html
@@ -97,7 +97,7 @@
 : <a class="el" href="pv__2way__basic__types_8h.html#a49">pv_2way_basic_types.h</a><li>TPVUserInputType
 : <a class="el" href="pv__2way__h324m__types_8h.html#a9">pv_2way_h324m_types.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV2Way Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090206 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pv2way_html/hierarchy.html b/doc/pv2way_html/hierarchy.html
index a4935e5..c05bf62 100644
--- a/doc/pv2way_html/hierarchy.html
+++ b/doc/pv2way_html/hierarchy.html
@@ -27,7 +27,7 @@
 </ul>
 </ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV2Way Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090206 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pv2way_html/index.html b/doc/pv2way_html/index.html
index f7bca7a..425b33e 100644
--- a/doc/pv2way_html/index.html
+++ b/doc/pv2way_html/index.html
@@ -9,7 +9,7 @@
 <hr><h1>pv2way_engine Documentation</h1>
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV2Way Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090206 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pv2way_html/pv__2way__basic__types_8h-source.html b/doc/pv2way_html/pv__2way__basic__types_8h-source.html
index 12f8a11..e8e023d 100644
--- a/doc/pv2way_html/pv__2way__basic__types_8h-source.html
+++ b/doc/pv2way_html/pv__2way__basic__types_8h-source.html
@@ -154,7 +154,7 @@
 00330 };
 00331 <span class="preprocessor">#endif</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV2Way Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090206 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pv2way_html/pv__2way__basic__types_8h.html b/doc/pv2way_html/pv__2way__basic__types_8h.html
index ada77d6..77ad3fd 100644
--- a/doc/pv2way_html/pv__2way__basic__types_8h.html
+++ b/doc/pv2way_html/pv__2way__basic__types_8h.html
@@ -519,7 +519,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV2Way Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090206 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pv2way_html/pv__2way__engine__factory_8h-source.html b/doc/pv2way_html/pv__2way__engine__factory_8h-source.html
index 2eae187..d81da01 100644
--- a/doc/pv2way_html/pv__2way__engine__factory_8h-source.html
+++ b/doc/pv2way_html/pv__2way__engine__factory_8h-source.html
@@ -35,7 +35,7 @@
 00047 
 00048 <span class="preprocessor">#endif // PV_2WAY_ENGINE_FACTORY_H_INCLUDED</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV2Way Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090206 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pv2way_html/pv__2way__engine__factory_8h.html b/doc/pv2way_html/pv__2way__engine__factory_8h.html
index 473a681..62691e0 100644
--- a/doc/pv2way_html/pv__2way__engine__factory_8h.html
+++ b/doc/pv2way_html/pv__2way__engine__factory_8h.html
@@ -15,7 +15,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classCPV2WayEngineFactory.html">CPV2WayEngineFactory</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV2Way Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090206 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pv2way_html/pv__2way__h324m__interface_8h-source.html b/doc/pv2way_html/pv__2way__h324m__interface_8h-source.html
index c029c2e..95ba0f4 100644
--- a/doc/pv2way_html/pv__2way__h324m__interface_8h-source.html
+++ b/doc/pv2way_html/pv__2way__h324m__interface_8h-source.html
@@ -128,7 +128,7 @@
 00428 
 00429 <span class="preprocessor">#endif</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV2Way Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090206 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pv2way_html/pv__2way__h324m__interface_8h.html b/doc/pv2way_html/pv__2way__h324m__interface_8h.html
index 98b07da..0534599 100644
--- a/doc/pv2way_html/pv__2way__h324m__interface_8h.html
+++ b/doc/pv2way_html/pv__2way__h324m__interface_8h.html
@@ -104,7 +104,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV2Way Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090206 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pv2way_html/pv__2way__h324m__types_8h-source.html b/doc/pv2way_html/pv__2way__h324m__types_8h-source.html
index c5c76e2..37d1702 100644
--- a/doc/pv2way_html/pv__2way__h324m__types_8h-source.html
+++ b/doc/pv2way_html/pv__2way__h324m__types_8h-source.html
@@ -110,7 +110,7 @@
 00179 };
 00180 <span class="preprocessor">#endif</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV2Way Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090206 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pv2way_html/pv__2way__h324m__types_8h.html b/doc/pv2way_html/pv__2way__h324m__types_8h.html
index 0ec9291..bc17f85 100644
--- a/doc/pv2way_html/pv__2way__h324m__types_8h.html
+++ b/doc/pv2way_html/pv__2way__h324m__types_8h.html
@@ -188,7 +188,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV2Way Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090206 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pv2way_html/pv__2way__interface_8h-source.html b/doc/pv2way_html/pv__2way__interface_8h-source.html
index 885f37e..917927e 100644
--- a/doc/pv2way_html/pv__2way__interface_8h-source.html
+++ b/doc/pv2way_html/pv__2way__interface_8h-source.html
@@ -148,7 +148,7 @@
 00453 <span class="preprocessor"></span>
 00454 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV2Way Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090206 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pv2way_html/pv__2way__interface_8h.html b/doc/pv2way_html/pv__2way__interface_8h.html
index a9b6987..3223e45 100644
--- a/doc/pv2way_html/pv__2way__interface_8h.html
+++ b/doc/pv2way_html/pv__2way__interface_8h.html
@@ -22,7 +22,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classCPV2WayInterface.html">CPV2WayInterface</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV2Way Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090206 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pv2way_html/pv__2way__proxy__factory_8h-source.html b/doc/pv2way_html/pv__2way__proxy__factory_8h-source.html
index a53c86b..cdaec23 100644
--- a/doc/pv2way_html/pv__2way__proxy__factory_8h-source.html
+++ b/doc/pv2way_html/pv__2way__proxy__factory_8h-source.html
@@ -38,7 +38,7 @@
 00050 
 00051 <span class="preprocessor">#endif // PV_2WAY_PROXY_FACTORY_H_INCLUDED</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV2Way Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090206 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pv2way_html/pv__2way__proxy__factory_8h.html b/doc/pv2way_html/pv__2way__proxy__factory_8h.html
index 1bf4e17..c377ce1 100644
--- a/doc/pv2way_html/pv__2way__proxy__factory_8h.html
+++ b/doc/pv2way_html/pv__2way__proxy__factory_8h.html
@@ -17,7 +17,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classCPV2WayProxyFactory.html">CPV2WayProxyFactory</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV2Way Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090206 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_engine_api.pdf b/doc/pvauthor_engine_api.pdf
index 1073bc9..0fd3dcb 100644
--- a/doc/pvauthor_engine_api.pdf
+++ b/doc/pvauthor_engine_api.pdf
Binary files differ
diff --git a/doc/pvauthor_html/annotated.html b/doc/pvauthor_html/annotated.html
index b0f2b4e..c7a5178 100644
--- a/doc/pvauthor_html/annotated.html
+++ b/doc/pvauthor_html/annotated.html
@@ -44,7 +44,7 @@
   <tr><td class="indexkey"><a class="el" href="structTPVCmnSDKInfo.html">TPVCmnSDKInfo</a></td><td class="indexvalue"></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classCPVCmnAsyncEvent.html b/doc/pvauthor_html/classCPVCmnAsyncEvent.html
index c7a0b83..20de46a 100644
--- a/doc/pvauthor_html/classCPVCmnAsyncEvent.html
+++ b/doc/pvauthor_html/classCPVCmnAsyncEvent.html
@@ -275,7 +275,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__common__types_8h-source.html">pv_common_types.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classCPVCmnCmdResp.html b/doc/pvauthor_html/classCPVCmnCmdResp.html
index ca10b77..3e0ae79 100644
--- a/doc/pvauthor_html/classCPVCmnCmdResp.html
+++ b/doc/pvauthor_html/classCPVCmnCmdResp.html
@@ -410,7 +410,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__common__types_8h-source.html">pv_common_types.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classCPVCmnInterfaceCmdMessage.html b/doc/pvauthor_html/classCPVCmnInterfaceCmdMessage.html
index 5efcf94..9aa315e 100644
--- a/doc/pvauthor_html/classCPVCmnInterfaceCmdMessage.html
+++ b/doc/pvauthor_html/classCPVCmnInterfaceCmdMessage.html
@@ -463,7 +463,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__interface__cmd__message_8h-source.html">pv_interface_cmd_message.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classCPVCmnInterfaceObserverMessage.html b/doc/pvauthor_html/classCPVCmnInterfaceObserverMessage.html
index 786a267..7ee0db1 100644
--- a/doc/pvauthor_html/classCPVCmnInterfaceObserverMessage.html
+++ b/doc/pvauthor_html/classCPVCmnInterfaceObserverMessage.html
@@ -245,7 +245,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__common__types_8h-source.html">pv_common_types.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classCPVCmnInterfaceObserverMessageCompare.html b/doc/pvauthor_html/classCPVCmnInterfaceObserverMessageCompare.html
index e7be035..2d4c5e2 100644
--- a/doc/pvauthor_html/classCPVCmnInterfaceObserverMessageCompare.html
+++ b/doc/pvauthor_html/classCPVCmnInterfaceObserverMessageCompare.html
@@ -55,7 +55,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__common__types_8h-source.html">pv_common_types.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classCPVMMFPointerBuffer.html b/doc/pvauthor_html/classCPVMMFPointerBuffer.html
index aede49d..55445c7 100644
--- a/doc/pvauthor_html/classCPVMMFPointerBuffer.html
+++ b/doc/pvauthor_html/classCPVMMFPointerBuffer.html
@@ -298,7 +298,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__plugin__interfaces_8h-source.html">pv_plugin_interfaces.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classMPVAudioInput.html b/doc/pvauthor_html/classMPVAudioInput.html
index 78a5502..d7b2ef5 100644
--- a/doc/pvauthor_html/classMPVAudioInput.html
+++ b/doc/pvauthor_html/classMPVAudioInput.html
@@ -163,7 +163,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__plugin__interfaces_8h-source.html">pv_plugin_interfaces.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classMPVAudioOutput.html b/doc/pvauthor_html/classMPVAudioOutput.html
index 69b6970..c120831 100644
--- a/doc/pvauthor_html/classMPVAudioOutput.html
+++ b/doc/pvauthor_html/classMPVAudioOutput.html
@@ -148,7 +148,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__plugin__interfaces_8h-source.html">pv_plugin_interfaces.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classMPVCmnCmdStatusObserver.html b/doc/pvauthor_html/classMPVCmnCmdStatusObserver.html
index 3b8b1ba..9373e4e 100644
--- a/doc/pvauthor_html/classMPVCmnCmdStatusObserver.html
+++ b/doc/pvauthor_html/classMPVCmnCmdStatusObserver.html
@@ -76,7 +76,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__common__types_8h-source.html">pv_common_types.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classMPVCmnErrorEventObserver.html b/doc/pvauthor_html/classMPVCmnErrorEventObserver.html
index 3796c55..eef37a0 100644
--- a/doc/pvauthor_html/classMPVCmnErrorEventObserver.html
+++ b/doc/pvauthor_html/classMPVCmnErrorEventObserver.html
@@ -76,7 +76,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__common__types_8h-source.html">pv_common_types.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classMPVCmnInfoEventObserver.html b/doc/pvauthor_html/classMPVCmnInfoEventObserver.html
index fd993b8..36ea32d 100644
--- a/doc/pvauthor_html/classMPVCmnInfoEventObserver.html
+++ b/doc/pvauthor_html/classMPVCmnInfoEventObserver.html
@@ -76,7 +76,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__common__types_8h-source.html">pv_common_types.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classMPVDataSink.html b/doc/pvauthor_html/classMPVDataSink.html
index bf4d8e8..05796a6 100644
--- a/doc/pvauthor_html/classMPVDataSink.html
+++ b/doc/pvauthor_html/classMPVDataSink.html
@@ -86,7 +86,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__plugin__interfaces_8h-source.html">pv_plugin_interfaces.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classMPVDataSinkBase.html b/doc/pvauthor_html/classMPVDataSinkBase.html
index 6b0c5c3..6eff04f 100644
--- a/doc/pvauthor_html/classMPVDataSinkBase.html
+++ b/doc/pvauthor_html/classMPVDataSinkBase.html
@@ -460,7 +460,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__plugin__interfaces_8h-source.html">pv_plugin_interfaces.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classMPVDataSource.html b/doc/pvauthor_html/classMPVDataSource.html
index d3265ad..673f717 100644
--- a/doc/pvauthor_html/classMPVDataSource.html
+++ b/doc/pvauthor_html/classMPVDataSource.html
@@ -86,7 +86,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__plugin__interfaces_8h-source.html">pv_plugin_interfaces.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classMPVDataSourceAndSink.html b/doc/pvauthor_html/classMPVDataSourceAndSink.html
index 7d95730..2fa70de 100644
--- a/doc/pvauthor_html/classMPVDataSourceAndSink.html
+++ b/doc/pvauthor_html/classMPVDataSourceAndSink.html
@@ -94,7 +94,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__plugin__interfaces_8h-source.html">pv_plugin_interfaces.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classMPVDataSourceBase.html b/doc/pvauthor_html/classMPVDataSourceBase.html
index 2342ce9..68c2280 100644
--- a/doc/pvauthor_html/classMPVDataSourceBase.html
+++ b/doc/pvauthor_html/classMPVDataSourceBase.html
@@ -517,7 +517,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__plugin__interfaces_8h-source.html">pv_plugin_interfaces.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classMPVDevSoundAudioInput.html b/doc/pvauthor_html/classMPVDevSoundAudioInput.html
index 37d660c..d063d9e 100644
--- a/doc/pvauthor_html/classMPVDevSoundAudioInput.html
+++ b/doc/pvauthor_html/classMPVDevSoundAudioInput.html
@@ -143,7 +143,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__plugin__interfaces_8h-source.html">pv_plugin_interfaces.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classMPVDevSoundAudioOutput.html b/doc/pvauthor_html/classMPVDevSoundAudioOutput.html
index d151d4b..4fe6d3c 100644
--- a/doc/pvauthor_html/classMPVDevSoundAudioOutput.html
+++ b/doc/pvauthor_html/classMPVDevSoundAudioOutput.html
@@ -184,7 +184,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__plugin__interfaces_8h-source.html">pv_plugin_interfaces.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classMPVPluginBase.html b/doc/pvauthor_html/classMPVPluginBase.html
index 879e57f..f62e53f 100644
--- a/doc/pvauthor_html/classMPVPluginBase.html
+++ b/doc/pvauthor_html/classMPVPluginBase.html
@@ -191,7 +191,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__plugin__interfaces_8h-source.html">pv_plugin_interfaces.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classMPVVideoInput.html b/doc/pvauthor_html/classMPVVideoInput.html
index 8bf9103..fbadc13 100644
--- a/doc/pvauthor_html/classMPVVideoInput.html
+++ b/doc/pvauthor_html/classMPVVideoInput.html
@@ -181,7 +181,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__plugin__interfaces_8h-source.html">pv_plugin_interfaces.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classMPVVideoOutput.html b/doc/pvauthor_html/classMPVVideoOutput.html
index 30d810e..b8e7ab83 100644
--- a/doc/pvauthor_html/classMPVVideoOutput.html
+++ b/doc/pvauthor_html/classMPVVideoOutput.html
@@ -141,7 +141,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__plugin__interfaces_8h-source.html">pv_plugin_interfaces.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classMPVYuvFrameBuffer.html b/doc/pvauthor_html/classMPVYuvFrameBuffer.html
index b696715..bfed837 100644
--- a/doc/pvauthor_html/classMPVYuvFrameBuffer.html
+++ b/doc/pvauthor_html/classMPVYuvFrameBuffer.html
@@ -82,7 +82,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__plugin__interfaces_8h-source.html">pv_plugin_interfaces.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classPVAsyncErrorEvent.html b/doc/pvauthor_html/classPVAsyncErrorEvent.html
index cc62d1a..aad32fb 100644
--- a/doc/pvauthor_html/classPVAsyncErrorEvent.html
+++ b/doc/pvauthor_html/classPVAsyncErrorEvent.html
@@ -256,7 +256,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__engine__observer__message_8h-source.html">pv_engine_observer_message.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classPVAsyncInformationalEvent.html b/doc/pvauthor_html/classPVAsyncInformationalEvent.html
index c8dbf49..9f5fd9b 100644
--- a/doc/pvauthor_html/classPVAsyncInformationalEvent.html
+++ b/doc/pvauthor_html/classPVAsyncInformationalEvent.html
@@ -256,7 +256,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__engine__observer__message_8h-source.html">pv_engine_observer_message.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classPVAuthorEngineFactory.html b/doc/pvauthor_html/classPVAuthorEngineFactory.html
index 681db29..a230402 100644
--- a/doc/pvauthor_html/classPVAuthorEngineFactory.html
+++ b/doc/pvauthor_html/classPVAuthorEngineFactory.html
@@ -114,7 +114,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pvauthorenginefactory_8h-source.html">pvauthorenginefactory.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classPVAuthorEngineInterface.html b/doc/pvauthor_html/classPVAuthorEngineInterface.html
index 6b90d2a..7302dff 100644
--- a/doc/pvauthor_html/classPVAuthorEngineInterface.html
+++ b/doc/pvauthor_html/classPVAuthorEngineInterface.html
@@ -1373,7 +1373,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pvauthorengineinterface_8h-source.html">pvauthorengineinterface.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classPVCmdResponse.html b/doc/pvauthor_html/classPVCmdResponse.html
index ce3313f..39717b3 100644
--- a/doc/pvauthor_html/classPVCmdResponse.html
+++ b/doc/pvauthor_html/classPVCmdResponse.html
@@ -321,7 +321,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__engine__observer__message_8h-source.html">pv_engine_observer_message.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classPVCommandStatusObserver.html b/doc/pvauthor_html/classPVCommandStatusObserver.html
index 9246c59..97289ee 100644
--- a/doc/pvauthor_html/classPVCommandStatusObserver.html
+++ b/doc/pvauthor_html/classPVCommandStatusObserver.html
@@ -86,7 +86,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__engine__observer_8h-source.html">pv_engine_observer.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classPVConfigInterface.html b/doc/pvauthor_html/classPVConfigInterface.html
index f78a62c..ea966c3 100644
--- a/doc/pvauthor_html/classPVConfigInterface.html
+++ b/doc/pvauthor_html/classPVConfigInterface.html
@@ -17,7 +17,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__config__interface_8h-source.html">pv_config_interface.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classPVEngineAsyncEvent.html b/doc/pvauthor_html/classPVEngineAsyncEvent.html
index 62c626c..a3373f2 100644
--- a/doc/pvauthor_html/classPVEngineAsyncEvent.html
+++ b/doc/pvauthor_html/classPVEngineAsyncEvent.html
@@ -155,7 +155,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__engine__types_8h-source.html">pv_engine_types.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classPVEngineCommand.html b/doc/pvauthor_html/classPVEngineCommand.html
index b4a887e..190f4ff 100644
--- a/doc/pvauthor_html/classPVEngineCommand.html
+++ b/doc/pvauthor_html/classPVEngineCommand.html
@@ -633,7 +633,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__engine__types_8h-source.html">pv_engine_types.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classPVErrorEventObserver.html b/doc/pvauthor_html/classPVErrorEventObserver.html
index a762c33..8dc5cda 100644
--- a/doc/pvauthor_html/classPVErrorEventObserver.html
+++ b/doc/pvauthor_html/classPVErrorEventObserver.html
@@ -88,7 +88,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__engine__observer_8h-source.html">pv_engine_observer.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/classPVInformationalEventObserver.html b/doc/pvauthor_html/classPVInformationalEventObserver.html
index 498dfe1..b25df5b 100644
--- a/doc/pvauthor_html/classPVInformationalEventObserver.html
+++ b/doc/pvauthor_html/classPVInformationalEventObserver.html
@@ -88,7 +88,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__engine__observer_8h-source.html">pv_engine_observer.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/files.html b/doc/pvauthor_html/files.html
index 0e66da7..c4e7fcc 100644
--- a/doc/pvauthor_html/files.html
+++ b/doc/pvauthor_html/files.html
@@ -18,7 +18,7 @@
   <tr><td class="indexkey"><a class="el" href="pvauthorengineinterface_8h.html">pvauthorengineinterface.h</a> <a href="pvauthorengineinterface_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/functions.html b/doc/pvauthor_html/functions.html
index 698ea4d..11612a1 100644
--- a/doc/pvauthor_html/functions.html
+++ b/doc/pvauthor_html/functions.html
@@ -223,7 +223,7 @@
 : <a class="el" href="classPVErrorEventObserver.html#a1">PVErrorEventObserver</a><li>~PVInformationalEventObserver()
 : <a class="el" href="classPVInformationalEventObserver.html#a1">PVInformationalEventObserver</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/globals.html b/doc/pvauthor_html/globals.html
index f064921..6d659ef 100644
--- a/doc/pvauthor_html/globals.html
+++ b/doc/pvauthor_html/globals.html
@@ -88,7 +88,7 @@
 : <a class="el" href="pv__common__types_8h.html#a8">pv_common_types.h</a><li>TPVCmnUUID
 : <a class="el" href="pv__common__types_8h.html#a10">pv_common_types.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/hierarchy.html b/doc/pvauthor_html/hierarchy.html
index f0e41c3..67d7d0e 100644
--- a/doc/pvauthor_html/hierarchy.html
+++ b/doc/pvauthor_html/hierarchy.html
@@ -58,7 +58,7 @@
 <li><a class="el" href="structTPVCmnSDKInfo.html">TPVCmnSDKInfo</a>
 </ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/index.html b/doc/pvauthor_html/index.html
index b92b9f0..76ae150 100644
--- a/doc/pvauthor_html/index.html
+++ b/doc/pvauthor_html/index.html
@@ -9,7 +9,7 @@
 <hr><h1>pvauthor_engine Documentation</h1>
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/pv__common__types_8h-source.html b/doc/pvauthor_html/pv__common__types_8h-source.html
index d2908d6..a24cbd4 100644
--- a/doc/pvauthor_html/pv__common__types_8h-source.html
+++ b/doc/pvauthor_html/pv__common__types_8h-source.html
@@ -217,7 +217,7 @@
 00260 <span class="preprocessor"></span>
 00261 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/pv__common__types_8h.html b/doc/pvauthor_html/pv__common__types_8h.html
index 06a58fa..b616e6f 100644
--- a/doc/pvauthor_html/pv__common__types_8h.html
+++ b/doc/pvauthor_html/pv__common__types_8h.html
@@ -419,7 +419,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/pv__config__interface_8h-source.html b/doc/pvauthor_html/pv__config__interface_8h-source.html
index 29f28dc..08d47ea 100644
--- a/doc/pvauthor_html/pv__config__interface_8h-source.html
+++ b/doc/pvauthor_html/pv__config__interface_8h-source.html
@@ -27,7 +27,7 @@
 00041 
 00042 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/pv__config__interface_8h.html b/doc/pvauthor_html/pv__config__interface_8h.html
index c004ba1..a325a77 100644
--- a/doc/pvauthor_html/pv__config__interface_8h.html
+++ b/doc/pvauthor_html/pv__config__interface_8h.html
@@ -16,7 +16,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classPVConfigInterface.html">PVConfigInterface</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/pv__engine__observer_8h-source.html b/doc/pvauthor_html/pv__engine__observer_8h-source.html
index 1f9f556..4a76738 100644
--- a/doc/pvauthor_html/pv__engine__observer_8h-source.html
+++ b/doc/pvauthor_html/pv__engine__observer_8h-source.html
@@ -41,7 +41,7 @@
 00082 
 00083 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/pv__engine__observer_8h.html b/doc/pvauthor_html/pv__engine__observer_8h.html
index b1687f6..f6cfada 100644
--- a/doc/pvauthor_html/pv__engine__observer_8h.html
+++ b/doc/pvauthor_html/pv__engine__observer_8h.html
@@ -17,7 +17,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classPVInformationalEventObserver.html">PVInformationalEventObserver</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/pv__engine__observer__message_8h-source.html b/doc/pvauthor_html/pv__engine__observer__message_8h-source.html
index 1badcdc..7e20b54 100644
--- a/doc/pvauthor_html/pv__engine__observer__message_8h-source.html
+++ b/doc/pvauthor_html/pv__engine__observer__message_8h-source.html
@@ -168,7 +168,7 @@
 00239 
 00240 <span class="preprocessor">#endif // PV_ENGINE_OBSERVER_MESSAGE_H_INCLUDED</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/pv__engine__observer__message_8h.html b/doc/pvauthor_html/pv__engine__observer__message_8h.html
index d654276..e846f7a 100644
--- a/doc/pvauthor_html/pv__engine__observer__message_8h.html
+++ b/doc/pvauthor_html/pv__engine__observer__message_8h.html
@@ -21,7 +21,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classPVCmdResponse.html">PVCmdResponse</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/pv__engine__types_8h-source.html b/doc/pvauthor_html/pv__engine__types_8h-source.html
index f286ec3..3271165 100644
--- a/doc/pvauthor_html/pv__engine__types_8h-source.html
+++ b/doc/pvauthor_html/pv__engine__types_8h-source.html
@@ -165,7 +165,7 @@
 00252 <span class="preprocessor">#endif</span>
 00253 <span class="preprocessor"></span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/pv__engine__types_8h.html b/doc/pvauthor_html/pv__engine__types_8h.html
index c0131e6..59b10a9 100644
--- a/doc/pvauthor_html/pv__engine__types_8h.html
+++ b/doc/pvauthor_html/pv__engine__types_8h.html
@@ -188,7 +188,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/pv__interface__cmd__message_8h-source.html b/doc/pvauthor_html/pv__interface__cmd__message_8h-source.html
index a610434..f7aa496 100644
--- a/doc/pvauthor_html/pv__interface__cmd__message_8h-source.html
+++ b/doc/pvauthor_html/pv__interface__cmd__message_8h-source.html
@@ -94,7 +94,7 @@
 00101 <span class="preprocessor"></span>
 00102 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/pv__interface__cmd__message_8h.html b/doc/pvauthor_html/pv__interface__cmd__message_8h.html
index c515757..40f8ef3 100644
--- a/doc/pvauthor_html/pv__interface__cmd__message_8h.html
+++ b/doc/pvauthor_html/pv__interface__cmd__message_8h.html
@@ -57,7 +57,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/pv__plugin__interfaces_8h-source.html b/doc/pvauthor_html/pv__plugin__interfaces_8h-source.html
index a06c62d..ebbda04 100644
--- a/doc/pvauthor_html/pv__plugin__interfaces_8h-source.html
+++ b/doc/pvauthor_html/pv__plugin__interfaces_8h-source.html
@@ -381,7 +381,7 @@
 00794 <span class="preprocessor"></span>
 00795 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/pv__plugin__interfaces_8h.html b/doc/pvauthor_html/pv__plugin__interfaces_8h.html
index f4519c8..898b10f 100644
--- a/doc/pvauthor_html/pv__plugin__interfaces_8h.html
+++ b/doc/pvauthor_html/pv__plugin__interfaces_8h.html
@@ -500,7 +500,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/pvauthorenginefactory_8h-source.html b/doc/pvauthor_html/pvauthorenginefactory_8h-source.html
index 80a3047..7afec9b 100644
--- a/doc/pvauthor_html/pvauthorenginefactory_8h-source.html
+++ b/doc/pvauthor_html/pvauthorenginefactory_8h-source.html
@@ -27,7 +27,7 @@
 00046 
 00047 <span class="preprocessor">#endif // PVAUTHORENGINEFACTORY_H_INCLUDED</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/pvauthorenginefactory_8h.html b/doc/pvauthor_html/pvauthorenginefactory_8h.html
index 91d6cff..2067dc7 100644
--- a/doc/pvauthor_html/pvauthorenginefactory_8h.html
+++ b/doc/pvauthor_html/pvauthorenginefactory_8h.html
@@ -14,7 +14,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classPVAuthorEngineFactory.html">PVAuthorEngineFactory</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/pvauthorengineinterface_8h-source.html b/doc/pvauthor_html/pvauthorengineinterface_8h-source.html
index 37da948..d02268e 100644
--- a/doc/pvauthor_html/pvauthorengineinterface_8h-source.html
+++ b/doc/pvauthor_html/pvauthorengineinterface_8h-source.html
@@ -129,7 +129,7 @@
 00507 <span class="preprocessor"></span>
 00508 
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/pvauthorengineinterface_8h.html b/doc/pvauthor_html/pvauthorengineinterface_8h.html
index ecd0b10..e980a6b 100644
--- a/doc/pvauthor_html/pvauthorengineinterface_8h.html
+++ b/doc/pvauthor_html/pvauthorengineinterface_8h.html
@@ -127,7 +127,7 @@
   </tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/structPVSDKInfo.html b/doc/pvauthor_html/structPVSDKInfo.html
index d27234b..8acc5ad 100644
--- a/doc/pvauthor_html/structPVSDKInfo.html
+++ b/doc/pvauthor_html/structPVSDKInfo.html
@@ -124,7 +124,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="pv__engine__types_8h-source.html">pv_engine_types.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvauthor_html/structTPVCmnSDKInfo.html b/doc/pvauthor_html/structTPVCmnSDKInfo.html
index 4586821..0f92374 100644
--- a/doc/pvauthor_html/structTPVCmnSDKInfo.html
+++ b/doc/pvauthor_html/structTPVCmnSDKInfo.html
@@ -124,7 +124,7 @@
 <hr>The documentation for this struct was generated from the following file:<ul>
 <li><a class="el" href="pv__common__types_8h-source.html">pv_common_types.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Author Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvplayer_engine_api.pdf b/doc/pvplayer_engine_api.pdf
index a1b5d9b..5cebfbb 100644
--- a/doc/pvplayer_engine_api.pdf
+++ b/doc/pvplayer_engine_api.pdf
Binary files differ
diff --git a/doc/pvplayer_html/annotated.html b/doc/pvplayer_html/annotated.html
index 4e34a99..75b36ed 100644
--- a/doc/pvplayer_html/annotated.html
+++ b/doc/pvplayer_html/annotated.html
@@ -10,7 +10,7 @@
   <tr><td class="indexkey"><a class="el" href="classPVPlayerInterface.html">PVPlayerInterface</a></td><td class="indexvalue"></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Player Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvplayer_html/classPVPlayerInterface.html b/doc/pvplayer_html/classPVPlayerInterface.html
index 0303100..1eea0ad 100644
--- a/doc/pvplayer_html/classPVPlayerInterface.html
+++ b/doc/pvplayer_html/classPVPlayerInterface.html
@@ -19,30 +19,31 @@
 <tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a5">GetLogLevel</a> (const char *aTag, PVLogLevelInfo &amp;aLogInfo, const OsclAny *aContextData=NULL)=0</td></tr>
 <tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a6">QueryUUID</a> (const PvmfMimeString &amp;aMimeType, Oscl_Vector&lt; PVUuid, OsclMemAllocator &gt; &amp;aUuids, bool aExactUuidsOnly=false, const OsclAny *aContextData=NULL)=0</td></tr>
 <tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a7">QueryInterface</a> (const PVUuid &amp;aUuid, PVInterface *&amp;aInterfacePtr, const OsclAny *aContextData=NULL)=0</td></tr>
-<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a8">CancelAllCommands</a> (const OsclAny *aContextData=NULL)=0</td></tr>
-<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a9">GetPVPlayerState</a> (PVPlayerState &amp;aState, const OsclAny *aContextData=NULL)=0</td></tr>
-<tr><td nowrap align=right valign=top>virtual PVMFStatus&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a10">GetPVPlayerStateSync</a> (PVPlayerState &amp;aState)=0</td></tr>
-<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a11">AddDataSource</a> (PVPlayerDataSource &amp;aDataSource, const OsclAny *aContextData=NULL)=0</td></tr>
-<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a12">Init</a> (const OsclAny *aContextData=NULL)=0</td></tr>
-<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a13">GetMetadataKeys</a> (PVPMetadataList &amp;aKeyList, int32 aStartingIndex=0, int32 aMaxEntries=-1, char *aQueryKey=NULL, const OsclAny *aContextData=NULL)=0</td></tr>
-<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a14">GetMetadataValues</a> (PVPMetadataList &amp;aKeyList, int32 aStartingValueIndex, int32 aMaxValueEntries, int32 &amp;aNumAvailableValueEntries, Oscl_Vector&lt; PvmiKvp, OsclMemAllocator &gt; &amp;aValueList, const OsclAny *aContextData=NULL, bool aMetadataValuesCopiedInCallBack=true)=0</td></tr>
-<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a15">ReleaseMetadataValues</a> (Oscl_Vector&lt; PvmiKvp, OsclMemAllocator &gt; &amp;aValueList, const OsclAny *aContextData=NULL)=0</td></tr>
-<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a16">AddDataSink</a> (PVPlayerDataSink &amp;aDataSink, const OsclAny *aContextData=NULL)=0</td></tr>
-<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a17">SetPlaybackRange</a> (PVPPlaybackPosition aBeginPos, PVPPlaybackPosition aEndPos, bool aQueueRange, const OsclAny *aContextData=NULL)=0</td></tr>
-<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a18">GetPlaybackRange</a> (PVPPlaybackPosition &amp;aBeginPos, PVPPlaybackPosition &amp;aEndPos, bool aQueued, const OsclAny *aContextData=NULL)=0</td></tr>
-<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a19">GetCurrentPosition</a> (PVPPlaybackPosition &amp;aPos, const OsclAny *aContextData=NULL)=0</td></tr>
-<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a20">SetPlaybackRate</a> (int32 aRate, PVMFTimebase *aTimebase=NULL, const OsclAny *aContextData=NULL)=0</td></tr>
-<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a21">GetPlaybackRate</a> (int32 &amp;aRate, PVMFTimebase *&amp;aTimebase, const OsclAny *aContextData=NULL)=0</td></tr>
-<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a22">GetPlaybackMinMaxRate</a> (int32 &amp;aMinRate, int32 &amp;aMaxRate, const OsclAny *aContextData=NULL)=0</td></tr>
-<tr><td nowrap align=right valign=top>virtual PVMFStatus&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a23">GetCurrentPositionSync</a> (PVPPlaybackPosition &amp;aPos)=0</td></tr>
-<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a24">Prepare</a> (const OsclAny *aContextData=NULL)=0</td></tr>
-<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a25">Start</a> (const OsclAny *aContextData=NULL)=0</td></tr>
-<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a26">Pause</a> (const OsclAny *aContextData=NULL)=0</td></tr>
-<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a27">Resume</a> (const OsclAny *aContextData=NULL)=0</td></tr>
-<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a28">Stop</a> (const OsclAny *aContextData=NULL)=0</td></tr>
-<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a29">RemoveDataSink</a> (PVPlayerDataSink &amp;aDataSink, const OsclAny *aContextData=NULL)=0</td></tr>
-<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a30">Reset</a> (const OsclAny *aContextData=NULL)=0</td></tr>
-<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a31">RemoveDataSource</a> (PVPlayerDataSource &amp;aDataSource, const OsclAny *aContextData=NULL)=0</td></tr>
+<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a8">CancelCommand</a> (PVCommandId aCancelCmdId, const OsclAny *aContextData=NULL)=0</td></tr>
+<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a9">CancelAllCommands</a> (const OsclAny *aContextData=NULL)=0</td></tr>
+<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a10">GetPVPlayerState</a> (PVPlayerState &amp;aState, const OsclAny *aContextData=NULL)=0</td></tr>
+<tr><td nowrap align=right valign=top>virtual PVMFStatus&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a11">GetPVPlayerStateSync</a> (PVPlayerState &amp;aState)=0</td></tr>
+<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a12">AddDataSource</a> (PVPlayerDataSource &amp;aDataSource, const OsclAny *aContextData=NULL)=0</td></tr>
+<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a13">Init</a> (const OsclAny *aContextData=NULL)=0</td></tr>
+<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a14">GetMetadataKeys</a> (PVPMetadataList &amp;aKeyList, int32 aStartingIndex=0, int32 aMaxEntries=-1, char *aQueryKey=NULL, const OsclAny *aContextData=NULL)=0</td></tr>
+<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a15">GetMetadataValues</a> (PVPMetadataList &amp;aKeyList, int32 aStartingValueIndex, int32 aMaxValueEntries, int32 &amp;aNumAvailableValueEntries, Oscl_Vector&lt; PvmiKvp, OsclMemAllocator &gt; &amp;aValueList, const OsclAny *aContextData=NULL, bool aMetadataValuesCopiedInCallBack=true)=0</td></tr>
+<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a16">ReleaseMetadataValues</a> (Oscl_Vector&lt; PvmiKvp, OsclMemAllocator &gt; &amp;aValueList, const OsclAny *aContextData=NULL)=0</td></tr>
+<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a17">AddDataSink</a> (PVPlayerDataSink &amp;aDataSink, const OsclAny *aContextData=NULL)=0</td></tr>
+<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a18">SetPlaybackRange</a> (PVPPlaybackPosition aBeginPos, PVPPlaybackPosition aEndPos, bool aQueueRange, const OsclAny *aContextData=NULL)=0</td></tr>
+<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a19">GetPlaybackRange</a> (PVPPlaybackPosition &amp;aBeginPos, PVPPlaybackPosition &amp;aEndPos, bool aQueued, const OsclAny *aContextData=NULL)=0</td></tr>
+<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a20">GetCurrentPosition</a> (PVPPlaybackPosition &amp;aPos, const OsclAny *aContextData=NULL)=0</td></tr>
+<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a21">SetPlaybackRate</a> (int32 aRate, PVMFTimebase *aTimebase=NULL, const OsclAny *aContextData=NULL)=0</td></tr>
+<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a22">GetPlaybackRate</a> (int32 &amp;aRate, PVMFTimebase *&amp;aTimebase, const OsclAny *aContextData=NULL)=0</td></tr>
+<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a23">GetPlaybackMinMaxRate</a> (int32 &amp;aMinRate, int32 &amp;aMaxRate, const OsclAny *aContextData=NULL)=0</td></tr>
+<tr><td nowrap align=right valign=top>virtual PVMFStatus&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a24">GetCurrentPositionSync</a> (PVPPlaybackPosition &amp;aPos)=0</td></tr>
+<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a25">Prepare</a> (const OsclAny *aContextData=NULL)=0</td></tr>
+<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a26">Start</a> (const OsclAny *aContextData=NULL)=0</td></tr>
+<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a27">Pause</a> (const OsclAny *aContextData=NULL)=0</td></tr>
+<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a28">Resume</a> (const OsclAny *aContextData=NULL)=0</td></tr>
+<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a29">Stop</a> (const OsclAny *aContextData=NULL)=0</td></tr>
+<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a30">RemoveDataSink</a> (PVPlayerDataSink &amp;aDataSink, const OsclAny *aContextData=NULL)=0</td></tr>
+<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a31">Reset</a> (const OsclAny *aContextData=NULL)=0</td></tr>
+<tr><td nowrap align=right valign=top>virtual PVCommandId&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#a32">RemoveDataSource</a> (PVPlayerDataSource &amp;aDataSource, const OsclAny *aContextData=NULL)=0</td></tr>
 <tr><td colspan=2><br><h2>Static Public Methods</h2></td></tr>
 <tr><td nowrap align=right valign=top>OSCL_IMPORT_REF void&nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html#d0">GetSDKInfo</a> (PVSDKInfo &amp;aSDKInfo)</td></tr>
 </table>
@@ -79,7 +80,7 @@
   </tr>
 </table>
 <hr><h2>Member Function Documentation</h2>
-<a name="a16" doxytag="PVPlayerInterface::AddDataSink"></a><p>
+<a name="a17" doxytag="PVPlayerInterface::AddDataSink"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -125,7 +126,7 @@
 A unique command id for asynchronous completion </dl>    </td>
   </tr>
 </table>
-<a name="a11" doxytag="PVPlayerInterface::AddDataSource"></a><p>
+<a name="a12" doxytag="PVPlayerInterface::AddDataSource"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -171,7 +172,7 @@
 A unique command id for asynchronous completion </dl>    </td>
   </tr>
 </table>
-<a name="a8" doxytag="PVPlayerInterface::CancelAllCommands"></a><p>
+<a name="a9" doxytag="PVPlayerInterface::CancelAllCommands"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -206,7 +207,53 @@
 A unique command id for asynchronous completion </dl>    </td>
   </tr>
 </table>
-<a name="a19" doxytag="PVPlayerInterface::GetCurrentPosition"></a><p>
+<a name="a8" doxytag="PVPlayerInterface::CancelCommand"></a><p>
+<table width="100%" cellpadding="2" cellspacing="0" border="0">
+  <tr>
+    <td class="md">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"> virtual PVCommandId PVPlayerInterface::CancelCommand </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">PVCommandId&nbsp;</td>
+          <td class="mdname" nowrap>&nbsp; <em>aCancelCmdId</em>, </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td></td>
+          <td class="md" nowrap>const OsclAny *&nbsp;</td>
+          <td class="mdname" nowrap>&nbsp; <em>aContextData</em> = NULL</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"><code> [pure virtual]</code></td>
+        </tr>
+
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This API is to allow user of the SDK to cancel any specific command which is pending on pvPlayer. If the request is to cancel a command which still has to be processed pvPlayer will just remove the command from its queue of commands to be processed. If the request is to cancel a command that is ongoing then player will attempt to interrupt the ongoing command. The state of player after a cancel can vary. So the user of pvPlayerSDK must always query for state before issuing any subsequent commands. This command request is asynchronous. PVCommandStatusObserver's CommandCompleted() callback handler will be called when this command request completes.<dl compact><dt><b>Parameters: </b></dt><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em>aCancelCmdId</em>&nbsp;</td><td>
+Command Id to be cancelled. </td></tr>
+<tr><td valign=top><em>aContextData</em>&nbsp;</td><td>
+Optional opaque data that will be passed back to the user with the command response </td></tr>
+</table>
+</dl><dl compact><dt><b>Returns: </b></dt><dd>
+A unique command id for asynchronous completion </dl>    </td>
+  </tr>
+</table>
+<a name="a20" doxytag="PVPlayerInterface::GetCurrentPosition"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -252,7 +299,7 @@
 A unique command id for asynchronous completion </dl>    </td>
   </tr>
 </table>
-<a name="a23" doxytag="PVPlayerInterface::GetCurrentPositionSync"></a><p>
+<a name="a24" doxytag="PVPlayerInterface::GetCurrentPositionSync"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -346,7 +393,7 @@
 A unique command ID for asynchronous completion </dl>    </td>
   </tr>
 </table>
-<a name="a13" doxytag="PVPlayerInterface::GetMetadataKeys"></a><p>
+<a name="a14" doxytag="PVPlayerInterface::GetMetadataKeys"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -416,7 +463,7 @@
 A unique command id for asynchronous completion </dl>    </td>
   </tr>
 </table>
-<a name="a14" doxytag="PVPlayerInterface::GetMetadataValues"></a><p>
+<a name="a15" doxytag="PVPlayerInterface::GetMetadataValues"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -502,7 +549,7 @@
 A unique command id for asynchronous completion </dl>    </td>
   </tr>
 </table>
-<a name="a22" doxytag="PVPlayerInterface::GetPlaybackMinMaxRate"></a><p>
+<a name="a23" doxytag="PVPlayerInterface::GetPlaybackMinMaxRate"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -556,7 +603,7 @@
 A unique command id for asynchronous completion </dl>    </td>
   </tr>
 </table>
-<a name="a18" doxytag="PVPlayerInterface::GetPlaybackRange"></a><p>
+<a name="a19" doxytag="PVPlayerInterface::GetPlaybackRange"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -618,7 +665,7 @@
 A unique command id for asynchronous completion </dl>    </td>
   </tr>
 </table>
-<a name="a21" doxytag="PVPlayerInterface::GetPlaybackRate"></a><p>
+<a name="a22" doxytag="PVPlayerInterface::GetPlaybackRate"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -672,7 +719,7 @@
 A unique command id for asynchronous completion </dl>    </td>
   </tr>
 </table>
-<a name="a9" doxytag="PVPlayerInterface::GetPVPlayerState"></a><p>
+<a name="a10" doxytag="PVPlayerInterface::GetPVPlayerState"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -718,7 +765,7 @@
 A unique command id for asynchronous completion </dl>    </td>
   </tr>
 </table>
-<a name="a10" doxytag="PVPlayerInterface::GetPVPlayerStateSync"></a><p>
+<a name="a11" doxytag="PVPlayerInterface::GetPVPlayerStateSync"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -833,7 +880,7 @@
 A unique command ID for asynchronous completion </dl>    </td>
   </tr>
 </table>
-<a name="a12" doxytag="PVPlayerInterface::Init"></a><p>
+<a name="a13" doxytag="PVPlayerInterface::Init"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -868,7 +915,7 @@
 A unique command id for asynchronous completion </dl>    </td>
   </tr>
 </table>
-<a name="a26" doxytag="PVPlayerInterface::Pause"></a><p>
+<a name="a27" doxytag="PVPlayerInterface::Pause"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -903,7 +950,7 @@
 A unique command id for asynchronous completion </dl>    </td>
   </tr>
 </table>
-<a name="a24" doxytag="PVPlayerInterface::Prepare"></a><p>
+<a name="a25" doxytag="PVPlayerInterface::Prepare"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -1064,7 +1111,7 @@
 A unique command ID for asynchronous completion </dl>    </td>
   </tr>
 </table>
-<a name="a15" doxytag="PVPlayerInterface::ReleaseMetadataValues"></a><p>
+<a name="a16" doxytag="PVPlayerInterface::ReleaseMetadataValues"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -1110,7 +1157,7 @@
 A unique command id for asynchronous completion </dl>    </td>
   </tr>
 </table>
-<a name="a29" doxytag="PVPlayerInterface::RemoveDataSink"></a><p>
+<a name="a30" doxytag="PVPlayerInterface::RemoveDataSink"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -1156,7 +1203,7 @@
 A unique command id for asynchronous completion </dl>    </td>
   </tr>
 </table>
-<a name="a31" doxytag="PVPlayerInterface::RemoveDataSource"></a><p>
+<a name="a32" doxytag="PVPlayerInterface::RemoveDataSource"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -1261,7 +1308,7 @@
 A unique command ID for asynchronous completion </dl>    </td>
   </tr>
 </table>
-<a name="a30" doxytag="PVPlayerInterface::Reset"></a><p>
+<a name="a31" doxytag="PVPlayerInterface::Reset"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -1296,7 +1343,7 @@
 A unique command id for asynchronous completion </dl>    </td>
   </tr>
 </table>
-<a name="a27" doxytag="PVPlayerInterface::Resume"></a><p>
+<a name="a28" doxytag="PVPlayerInterface::Resume"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -1457,7 +1504,7 @@
 A unique command ID for asynchronous completion </dl>    </td>
   </tr>
 </table>
-<a name="a17" doxytag="PVPlayerInterface::SetPlaybackRange"></a><p>
+<a name="a18" doxytag="PVPlayerInterface::SetPlaybackRange"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -1519,7 +1566,7 @@
 A unique command id for asynchronous completion </dl>    </td>
   </tr>
 </table>
-<a name="a20" doxytag="PVPlayerInterface::SetPlaybackRate"></a><p>
+<a name="a21" doxytag="PVPlayerInterface::SetPlaybackRate"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -1563,7 +1610,7 @@
 This function allows the setting of the playback rate. The playback rate can be set as millipercent of "real-time" playback rate. For example, 100000 means 1X "real-time", 400000 means 4X, 25000 means 0.25X, and -100000 means 1X backward. The playback rate can also be modified by specifying the timebase to use for the playback clock. This is accomplished by setting the aRate parameter to 0 and passing in a pointer to an PVMFTimebase. This function can be called when pvPlayer is in PVP_STATE_PREPARED, PVP_STATE_STARTED, or PVP_STATE_PAUSED state. Changing to or from an outside timebase is only allowed in PVP_STATE_PREPARED. Command if called in player state PVP_STATE_PAUSED with a direction change, will complete in one Engine AO run without actually changing the direction. The change in direction will come into affect when Resume is called on Engine by the app. If the request is not honored by the source node during Resume, engine will continue to complete Resume but will send an informational event "PVMFInfoChangePlaybackPositionNotSupported" to the app informing that the SetPlaybackRate request could not be honored. This command request is asynchronous. PVCommandStatusObserver's CommandCompleted() callback handler will be called when this command request completes.<dl compact><dt><b>Parameters: </b></dt><dd>
 <table border=0 cellspacing=2 cellpadding=0>
 <tr><td valign=top><em>aRate</em>&nbsp;</td><td>
-The playback rate specified as millipercent of "real-time". A millipercent is 1/1000 of a percent. So 2X = 200% of realtime is 200,000 millipercent. The motivation is to povide precision with an integer parameter. Negative rates specify backward playback. The valid range of absolute value of playback rates will be limited to the minimum and maximum returned by <a class="el" href="classPVPlayerInterface.html#a22">GetPlaybackMinMaxRate()</a>. </td></tr>
+The playback rate specified as millipercent of "real-time". A millipercent is 1/1000 of a percent. So 2X = 200% of realtime is 200,000 millipercent. The motivation is to povide precision with an integer parameter. Negative rates specify backward playback. The valid range of absolute value of playback rates will be limited to the minimum and maximum returned by <a class="el" href="classPVPlayerInterface.html#a23">GetPlaybackMinMaxRate()</a>. </td></tr>
 <tr><td valign=top><em>aTimebase</em>&nbsp;</td><td>
 Reference to an PVMFTimebase which will be used to drive the playback clock. aRate must be set to 0, 1X, or -1X to use the timebase. </td></tr>
 <tr><td valign=top><em>aContextData</em>&nbsp;</td><td>
@@ -1573,7 +1620,7 @@
 A unique command id for asynchronous completion </dl>    </td>
   </tr>
 </table>
-<a name="a25" doxytag="PVPlayerInterface::Start"></a><p>
+<a name="a26" doxytag="PVPlayerInterface::Start"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -1608,7 +1655,7 @@
 A unique command id for asynchronous completion </dl>    </td>
   </tr>
 </table>
-<a name="a28" doxytag="PVPlayerInterface::Stop"></a><p>
+<a name="a29" doxytag="PVPlayerInterface::Stop"></a><p>
 <table width="100%" cellpadding="2" cellspacing="0" border="0">
   <tr>
     <td class="md">
@@ -1646,7 +1693,7 @@
 <hr>The documentation for this class was generated from the following file:<ul>
 <li><a class="el" href="pv__player__interface_8h-source.html">pv_player_interface.h</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Player Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvplayer_html/files.html b/doc/pvplayer_html/files.html
index 465f787..a8f69fe 100644
--- a/doc/pvplayer_html/files.html
+++ b/doc/pvplayer_html/files.html
@@ -10,7 +10,7 @@
   <tr><td class="indexkey"><a class="el" href="pv__player__interface_8h.html">pv_player_interface.h</a> <a href="pv__player__interface_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Player Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvplayer_html/functions.html b/doc/pvplayer_html/functions.html
index 1f8c399..5a251e2 100644
--- a/doc/pvplayer_html/functions.html
+++ b/doc/pvplayer_html/functions.html
@@ -8,41 +8,42 @@
 <a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="annotated.html">Data Structures</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Data Fields</a> &nbsp; </center>
 <hr><h1>pvplayer_engine Data Fields</h1>Here is a list of all struct and union fields with links to the struct/union documentation for each field:<ul>
 <li>AddDataSink()
-: <a class="el" href="classPVPlayerInterface.html#a16">PVPlayerInterface</a><li>AddDataSource()
-: <a class="el" href="classPVPlayerInterface.html#a11">PVPlayerInterface</a><li>CancelAllCommands()
+: <a class="el" href="classPVPlayerInterface.html#a17">PVPlayerInterface</a><li>AddDataSource()
+: <a class="el" href="classPVPlayerInterface.html#a12">PVPlayerInterface</a><li>CancelAllCommands()
+: <a class="el" href="classPVPlayerInterface.html#a9">PVPlayerInterface</a><li>CancelCommand()
 : <a class="el" href="classPVPlayerInterface.html#a8">PVPlayerInterface</a><li>GetCurrentPosition()
-: <a class="el" href="classPVPlayerInterface.html#a19">PVPlayerInterface</a><li>GetCurrentPositionSync()
-: <a class="el" href="classPVPlayerInterface.html#a23">PVPlayerInterface</a><li>GetLogLevel()
+: <a class="el" href="classPVPlayerInterface.html#a20">PVPlayerInterface</a><li>GetCurrentPositionSync()
+: <a class="el" href="classPVPlayerInterface.html#a24">PVPlayerInterface</a><li>GetLogLevel()
 : <a class="el" href="classPVPlayerInterface.html#a5">PVPlayerInterface</a><li>GetMetadataKeys()
-: <a class="el" href="classPVPlayerInterface.html#a13">PVPlayerInterface</a><li>GetMetadataValues()
-: <a class="el" href="classPVPlayerInterface.html#a14">PVPlayerInterface</a><li>GetPlaybackMinMaxRate()
-: <a class="el" href="classPVPlayerInterface.html#a22">PVPlayerInterface</a><li>GetPlaybackRange()
-: <a class="el" href="classPVPlayerInterface.html#a18">PVPlayerInterface</a><li>GetPlaybackRate()
-: <a class="el" href="classPVPlayerInterface.html#a21">PVPlayerInterface</a><li>GetPVPlayerState()
-: <a class="el" href="classPVPlayerInterface.html#a9">PVPlayerInterface</a><li>GetPVPlayerStateSync()
-: <a class="el" href="classPVPlayerInterface.html#a10">PVPlayerInterface</a><li>GetSDKInfo()
+: <a class="el" href="classPVPlayerInterface.html#a14">PVPlayerInterface</a><li>GetMetadataValues()
+: <a class="el" href="classPVPlayerInterface.html#a15">PVPlayerInterface</a><li>GetPlaybackMinMaxRate()
+: <a class="el" href="classPVPlayerInterface.html#a23">PVPlayerInterface</a><li>GetPlaybackRange()
+: <a class="el" href="classPVPlayerInterface.html#a19">PVPlayerInterface</a><li>GetPlaybackRate()
+: <a class="el" href="classPVPlayerInterface.html#a22">PVPlayerInterface</a><li>GetPVPlayerState()
+: <a class="el" href="classPVPlayerInterface.html#a10">PVPlayerInterface</a><li>GetPVPlayerStateSync()
+: <a class="el" href="classPVPlayerInterface.html#a11">PVPlayerInterface</a><li>GetSDKInfo()
 : <a class="el" href="classPVPlayerInterface.html#d0">PVPlayerInterface</a><li>GetSDKModuleInfo()
 : <a class="el" href="classPVPlayerInterface.html#a1">PVPlayerInterface</a><li>Init()
-: <a class="el" href="classPVPlayerInterface.html#a12">PVPlayerInterface</a><li>Pause()
-: <a class="el" href="classPVPlayerInterface.html#a26">PVPlayerInterface</a><li>Prepare()
-: <a class="el" href="classPVPlayerInterface.html#a24">PVPlayerInterface</a><li>QueryInterface()
+: <a class="el" href="classPVPlayerInterface.html#a13">PVPlayerInterface</a><li>Pause()
+: <a class="el" href="classPVPlayerInterface.html#a27">PVPlayerInterface</a><li>Prepare()
+: <a class="el" href="classPVPlayerInterface.html#a25">PVPlayerInterface</a><li>QueryInterface()
 : <a class="el" href="classPVPlayerInterface.html#a7">PVPlayerInterface</a><li>QueryUUID()
 : <a class="el" href="classPVPlayerInterface.html#a6">PVPlayerInterface</a><li>ReleaseMetadataValues()
-: <a class="el" href="classPVPlayerInterface.html#a15">PVPlayerInterface</a><li>RemoveDataSink()
-: <a class="el" href="classPVPlayerInterface.html#a29">PVPlayerInterface</a><li>RemoveDataSource()
-: <a class="el" href="classPVPlayerInterface.html#a31">PVPlayerInterface</a><li>RemoveLogAppender()
+: <a class="el" href="classPVPlayerInterface.html#a16">PVPlayerInterface</a><li>RemoveDataSink()
+: <a class="el" href="classPVPlayerInterface.html#a30">PVPlayerInterface</a><li>RemoveDataSource()
+: <a class="el" href="classPVPlayerInterface.html#a32">PVPlayerInterface</a><li>RemoveLogAppender()
 : <a class="el" href="classPVPlayerInterface.html#a3">PVPlayerInterface</a><li>Reset()
-: <a class="el" href="classPVPlayerInterface.html#a30">PVPlayerInterface</a><li>Resume()
-: <a class="el" href="classPVPlayerInterface.html#a27">PVPlayerInterface</a><li>SetLogAppender()
+: <a class="el" href="classPVPlayerInterface.html#a31">PVPlayerInterface</a><li>Resume()
+: <a class="el" href="classPVPlayerInterface.html#a28">PVPlayerInterface</a><li>SetLogAppender()
 : <a class="el" href="classPVPlayerInterface.html#a2">PVPlayerInterface</a><li>SetLogLevel()
 : <a class="el" href="classPVPlayerInterface.html#a4">PVPlayerInterface</a><li>SetPlaybackRange()
-: <a class="el" href="classPVPlayerInterface.html#a17">PVPlayerInterface</a><li>SetPlaybackRate()
-: <a class="el" href="classPVPlayerInterface.html#a20">PVPlayerInterface</a><li>Start()
-: <a class="el" href="classPVPlayerInterface.html#a25">PVPlayerInterface</a><li>Stop()
-: <a class="el" href="classPVPlayerInterface.html#a28">PVPlayerInterface</a><li>~PVPlayerInterface()
+: <a class="el" href="classPVPlayerInterface.html#a18">PVPlayerInterface</a><li>SetPlaybackRate()
+: <a class="el" href="classPVPlayerInterface.html#a21">PVPlayerInterface</a><li>Start()
+: <a class="el" href="classPVPlayerInterface.html#a26">PVPlayerInterface</a><li>Stop()
+: <a class="el" href="classPVPlayerInterface.html#a29">PVPlayerInterface</a><li>~PVPlayerInterface()
 : <a class="el" href="classPVPlayerInterface.html#a0">PVPlayerInterface</a></ul>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Player Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvplayer_html/index.html b/doc/pvplayer_html/index.html
index 465b946..43bc588 100644
--- a/doc/pvplayer_html/index.html
+++ b/doc/pvplayer_html/index.html
@@ -9,7 +9,7 @@
 <hr><h1>pvplayer_engine Documentation</h1>
 <p>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Player Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvplayer_html/pv__player__interface_8h-source.html b/doc/pvplayer_html/pv__player__interface_8h-source.html
index 6c9cb25..5c1e3fd 100644
--- a/doc/pvplayer_html/pv__player__interface_8h-source.html
+++ b/doc/pvplayer_html/pv__player__interface_8h-source.html
@@ -96,66 +96,68 @@
 00220                                       <span class="keywordtype">bool</span> aExactUuidsOnly = <span class="keyword">false</span>, <span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
 00241         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a7">QueryInterface</a>(<span class="keyword">const</span> PVUuid&amp; aUuid, PVInterface*&amp; aInterfacePtr, <span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
 00242 
-00254         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a8">CancelAllCommands</a>(<span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
-00255 
-00270         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a9">GetPVPlayerState</a>(PVPlayerState&amp; aState, <span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
-00271 
-00282         <span class="keyword">virtual</span> PVMFStatus <a class="code" href="classPVPlayerInterface.html#a10">GetPVPlayerStateSync</a>(PVPlayerState&amp; aState) = 0;
-00283 
-00301         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a11">AddDataSource</a>(PVPlayerDataSource&amp; aDataSource, <span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
-00302 
-00320         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a12">Init</a>(<span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
-00321 
-00348         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a13">GetMetadataKeys</a>(PVPMetadataList&amp; aKeyList, int32 aStartingIndex = 0, int32 aMaxEntries = -1,
-00349                                             <span class="keywordtype">char</span>* aQueryKey = NULL, <span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
-00350 
-00381         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a14">GetMetadataValues</a>(PVPMetadataList&amp; aKeyList, int32 aStartingValueIndex, int32 aMaxValueEntries, int32&amp; aNumAvailableValueEntries,
-00382                                               Oscl_Vector&lt;PvmiKvp, OsclMemAllocator&gt;&amp; aValueList, <span class="keyword">const</span> OsclAny* aContextData = NULL, <span class="keywordtype">bool</span> aMetadataValuesCopiedInCallBack = <span class="keyword">true</span>) = 0;
-00383 
-00401         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a15">ReleaseMetadataValues</a>(Oscl_Vector&lt;PvmiKvp, OsclMemAllocator&gt;&amp; aValueList, <span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
-00402 
-00420         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a16">AddDataSink</a>(PVPlayerDataSink&amp; aDataSink, <span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
-00421 
-00452         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a17">SetPlaybackRange</a>(PVPPlaybackPosition aBeginPos, PVPPlaybackPosition aEndPos, <span class="keywordtype">bool</span> aQueueRange, <span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
-00453 
-00474         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a18">GetPlaybackRange</a>(PVPPlaybackPosition &amp;aBeginPos, PVPPlaybackPosition &amp;aEndPos, <span class="keywordtype">bool</span> aQueued, <span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
-00475 
-00491         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a19">GetCurrentPosition</a>(PVPPlaybackPosition &amp;aPos, <span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
-00492 
-00525         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a20">SetPlaybackRate</a>(int32 aRate, PVMFTimebase* aTimebase = NULL, <span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
-00526 
-00550         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a21">GetPlaybackRate</a>(int32&amp; aRate, PVMFTimebase*&amp; aTimebase, <span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
-00551 
-00571         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a22">GetPlaybackMinMaxRate</a>(int32&amp; aMinRate, int32&amp; aMaxRate, <span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
-00572 
-00584         <span class="keyword">virtual</span> PVMFStatus <a class="code" href="classPVPlayerInterface.html#a23">GetCurrentPositionSync</a>(PVPPlaybackPosition &amp;aPos) = 0;
-00585 
-00602         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a24">Prepare</a>(<span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
+00259         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a8">CancelCommand</a>(PVCommandId aCancelCmdId, <span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
+00260 
+00272         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a9">CancelAllCommands</a>(<span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
+00273 
+00288         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a10">GetPVPlayerState</a>(PVPlayerState&amp; aState, <span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
+00289 
+00300         <span class="keyword">virtual</span> PVMFStatus <a class="code" href="classPVPlayerInterface.html#a11">GetPVPlayerStateSync</a>(PVPlayerState&amp; aState) = 0;
+00301 
+00319         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a12">AddDataSource</a>(PVPlayerDataSource&amp; aDataSource, <span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
+00320 
+00338         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a13">Init</a>(<span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
+00339 
+00366         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a14">GetMetadataKeys</a>(PVPMetadataList&amp; aKeyList, int32 aStartingIndex = 0, int32 aMaxEntries = -1,
+00367                                             <span class="keywordtype">char</span>* aQueryKey = NULL, <span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
+00368 
+00399         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a15">GetMetadataValues</a>(PVPMetadataList&amp; aKeyList, int32 aStartingValueIndex, int32 aMaxValueEntries, int32&amp; aNumAvailableValueEntries,
+00400                                               Oscl_Vector&lt;PvmiKvp, OsclMemAllocator&gt;&amp; aValueList, <span class="keyword">const</span> OsclAny* aContextData = NULL, <span class="keywordtype">bool</span> aMetadataValuesCopiedInCallBack = <span class="keyword">true</span>) = 0;
+00401 
+00419         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a16">ReleaseMetadataValues</a>(Oscl_Vector&lt;PvmiKvp, OsclMemAllocator&gt;&amp; aValueList, <span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
+00420 
+00438         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a17">AddDataSink</a>(PVPlayerDataSink&amp; aDataSink, <span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
+00439 
+00470         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a18">SetPlaybackRange</a>(PVPPlaybackPosition aBeginPos, PVPPlaybackPosition aEndPos, <span class="keywordtype">bool</span> aQueueRange, <span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
+00471 
+00492         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a19">GetPlaybackRange</a>(PVPPlaybackPosition &amp;aBeginPos, PVPPlaybackPosition &amp;aEndPos, <span class="keywordtype">bool</span> aQueued, <span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
+00493 
+00509         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a20">GetCurrentPosition</a>(PVPPlaybackPosition &amp;aPos, <span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
+00510 
+00543         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a21">SetPlaybackRate</a>(int32 aRate, PVMFTimebase* aTimebase = NULL, <span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
+00544 
+00568         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a22">GetPlaybackRate</a>(int32&amp; aRate, PVMFTimebase*&amp; aTimebase, <span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
+00569 
+00589         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a23">GetPlaybackMinMaxRate</a>(int32&amp; aMinRate, int32&amp; aMaxRate, <span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
+00590 
+00602         <span class="keyword">virtual</span> PVMFStatus <a class="code" href="classPVPlayerInterface.html#a24">GetCurrentPositionSync</a>(PVPPlaybackPosition &amp;aPos) = 0;
 00603 
-00618         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a25">Start</a>(<span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
-00619 
-00633         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a26">Pause</a>(<span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
-00634 
-00649         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a27">Resume</a>(<span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
-00650 
-00666         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a28">Stop</a>(<span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
-00667 
-00685         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a29">RemoveDataSink</a>(PVPlayerDataSink&amp; aDataSink, <span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
-00686 
-00702         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a30">Reset</a>(<span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
-00703 
-00721         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a31">RemoveDataSource</a>(PVPlayerDataSource&amp; aDataSource, <span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
-00722 
-00732         OSCL_IMPORT_REF <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classPVPlayerInterface.html#d0">GetSDKInfo</a>(PVSDKInfo&amp; aSDKInfo);
-00733 
-00734 };
-00735 
-00736 
-00737 
-00738 
-00739 <span class="preprocessor">#endif // PV_PLAYER_INTERFACE_H_INCLUDED</span>
+00620         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a25">Prepare</a>(<span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
+00621 
+00636         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a26">Start</a>(<span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
+00637 
+00651         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a27">Pause</a>(<span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
+00652 
+00667         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a28">Resume</a>(<span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
+00668 
+00684         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a29">Stop</a>(<span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
+00685 
+00703         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a30">RemoveDataSink</a>(PVPlayerDataSink&amp; aDataSink, <span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
+00704 
+00720         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a31">Reset</a>(<span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
+00721 
+00739         <span class="keyword">virtual</span> PVCommandId <a class="code" href="classPVPlayerInterface.html#a32">RemoveDataSource</a>(PVPlayerDataSource&amp; aDataSource, <span class="keyword">const</span> OsclAny* aContextData = NULL) = 0;
+00740 
+00750         OSCL_IMPORT_REF <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classPVPlayerInterface.html#d0">GetSDKInfo</a>(PVSDKInfo&amp; aSDKInfo);
+00751 
+00752 };
+00753 
+00754 
+00755 
+00756 
+00757 <span class="preprocessor">#endif // PV_PLAYER_INTERFACE_H_INCLUDED</span>
 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Player Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/doc/pvplayer_html/pv__player__interface_8h.html b/doc/pvplayer_html/pv__player__interface_8h.html
index e489998..1dd1d22 100644
--- a/doc/pvplayer_html/pv__player__interface_8h.html
+++ b/doc/pvplayer_html/pv__player__interface_8h.html
@@ -27,7 +27,7 @@
 <tr><td nowrap align=right valign=top>class &nbsp;</td><td valign=bottom><a class="el" href="classPVPlayerInterface.html">PVPlayerInterface</a></td></tr>
 </table>
 <hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>PV Player Engine</small>
-<address style="align: left;"><small>Posting Version: OPENCORE_20090120 </small>
+<address style="align: left;"><small>Posting Version: OPENCORE_20090223 </small>
 </small></address>
 </body>
 </html>
diff --git a/engines/2way/build/make/local.mk b/engines/2way/build/make/local.mk
index 757e7bc..49e8635 100644
--- a/engines/2way/build/make/local.mk
+++ b/engines/2way/build/make/local.mk
@@ -74,22 +74,22 @@
 	pv_2way_engine_factory.h \
 	pv_2way_proxy_factory.h 
 
-
+## This file is need by PLATFORM_EXTRAS in library.mk
+sdkinfo_header_name := pv_2way_sdkinfo.h
 
 include $(MK)/library.mk
 
-doc:
-	cp -f $(VOB_BASE_DIR)/protocols/systems/3g-324m_pvterminal/h324/tsc/include/tsc_h324m_config_interface.h $(VOB_BASE_DIR)/engines/2way/include
-	cp -f $(VOB_BASE_DIR)/nodes/common/include/pvmp4h263encextension.h $(VOB_BASE_DIR)/engines/2way/include
-	perl $(VOB_BASE_DIR)/tools_v2/build/document/bin/doc_build.bat --doctype pv2way_engine --title "PV 2Way Engine" --path "$(VOB_BASE_DIR)/engines/2way/include $(VOB_BASE_DIR)/engines/common/include $(VOB_BASE_DIR)/protocols/systems/common/include" -filetype "mainpage *.h readme.txt" --exclude_pattern "*/test/* */obsolete/* */doxydir/* */cpp/* *symbian* *pv_2way_datapath* *pv_2way_engine_* *pv_2way_interface_* *pv_2way_plugin_interfaces* *pv_2way_sdk_types*" -ver $(PV2WAY_ENGINE_VERSION)
-	rm -f $(VOB_BASE_DIR)/engines/2way/include/tsc_h324m_config_interface.h
-	rm -f $(VOB_BASE_DIR)/engines/2way/include/pvmp4h263encextension.h
+doc_target := pv2way_engine
+doc_title := "PV2Way Engine"
+doc_paths := "$(SRC_ROOT)/engines/2way/include $(SRC_ROOT)/protocols/systems/common/include/pv_2way_basic_types.h $(SRC_ROOT)/protocols/systems/3g-324m_pvterminal/common/include/pv_2way_h324m_types.h $(SRC_ROOT)/protocols/systems/3g-324m_pvterminal/common/include/pv_2way_h324m_interface.h"
+doc_version := $(PV2WAY_ENGINE_VERSION)
 
+include $(MK)/doc.mk 
 
 sdkinfo_target := $(LOCAL_SRCDIR)/pv_2way_engine.cpp
-sdkinfo_header_filename := $(LOCAL_SRCDIR)/pv_2way_sdkinfo.h
+sdkinfo_header_filename := $(LOCAL_SRCDIR)/$(sdkinfo_header_name)
 sdkinfo_header_macro := PV_2WAY_SDKINFO
 sdkinfo_label_macro := PV2WAY_ENGINE_SDKINFO_LABEL
 sdkinfo_date_macro := PV2WAY_ENGINE_SDKINFO_DATE
 
-include $(MK)/sdkinfo.mk 
+include $(MK)/sdkinfo_nr.mk 
diff --git a/engines/2way/pvlogger/src/pv_logger_impl.cpp b/engines/2way/pvlogger/src/pv_logger_impl.cpp
index 826c6e4..ecc7e5d 100644
--- a/engines/2way/pvlogger/src/pv_logger_impl.cpp
+++ b/engines/2way/pvlogger/src/pv_logger_impl.cpp
@@ -186,7 +186,7 @@
 
     for (it = iLoggerConfigElements.begin(); it != iLoggerConfigElements.end(); it++)
     {
-        char* loggerString = NULL;
+        char* loggerString = OSCL_STATIC_CAST(char*, "");
         if (0 != oscl_strncmp(it->iLoggerString, ENABLE_ALL_LOGS, oscl_strlen(ENABLE_ALL_LOGS)))
         {
             loggerString = it->iLoggerString;
diff --git a/engines/2way/pvlogger/test/build/make/local.mk b/engines/2way/pvlogger/test/build/make/local.mk
new file mode 100644
index 0000000..c1c0200
--- /dev/null
+++ b/engines/2way/pvlogger/test/build/make/local.mk
@@ -0,0 +1,23 @@
+# Get the current local path as the first operation
+LOCAL_PATH := $(call get_makefile_dir)
+
+# Clear out the variables used in the local makefiles
+include $(MK)/clear.mk
+
+TARGET := pvlogger_test
+
+
+XCXXFLAGS += $(FLAG_COMPILE_WARNINGS_AS_ERRORS)
+
+SRCDIR := ../../../../pvlogger
+INCSRCDIR := ../../../../pvlogger/src
+
+# compose final src list for actual build
+SRCS :=	test/src/test.cpp src/pv_logger_impl.cpp
+
+LIBS :=  osclio osclproc osclutil osclmemory osclerror osclbase 
+
+SYSLIBS += $(SYS_THREAD_LIB)
+
+include $(MK)/prog.mk
+
diff --git a/engines/2way/src/pv_2way_engine.cpp b/engines/2way/src/pv_2way_engine.cpp
index 98a6455..ea01a1a 100644
--- a/engines/2way/src/pv_2way_engine.cpp
+++ b/engines/2way/src/pv_2way_engine.cpp
@@ -87,23 +87,26 @@
 #endif
 
 
-#ifdef PV2WAY_USE_OMX_AMR_DECODER
-#include "pvmf_omx_audiodec_factory.h"
+#ifdef PV2WAY_USE_OMX
+#include "pvmf_audio_encnode_extension.h"
 #else
+#include "pvmfamrencnode_extension.h"
 #include "pvmf_gsmamrdec_factory.h"
-#endif // PV2WAY_USE_OMX_AMR_DECODER
-
-#ifndef PV2WAY_USE_OMX_AMR_ENCODER
-#include "pvmf_amrenc_node_factory.h"
 #endif
 
-#include "pvmfamrencnode_extension.h"
+#ifdef PV2WAY_USE_OMX_AMR_ENCODER
+#else
+#include "pvmf_amrenc_node_factory.h"
+
+#endif
+
 #include "pvmf_nodes_sync_control.h"
 
 #include "pv_2way_track_info_impl.h"
 
 #include "pvmi_config_and_capability.h"
 
+
 #ifdef MEM_TRACK
 #include "oscl_mem.h"
 #include "oscl_mem_audit.h"
@@ -187,6 +190,7 @@
 
 
 #ifdef PV2WAY_USE_OMX_AMR_DECODER
+#include "pvmf_omx_audiodec_factory.h"
 #define CREATE_OMX_AUDIO_DEC_NODE() PVMFOMXAudioDecNodeFactory::CreatePVMFOMXAudioDecNode()
 #define DELETE_OMX_AUDIO_DEC_NODE(n) PVMFOMXAudioDecNodeFactory::DeletePVMFOMXAudioDecNode(n)
 #else
@@ -316,7 +320,11 @@
     iVideoEncPVUuid = PVMp4H263EncExtensionUUID;
     iCapConfigPVUuid = PVMI_CAPABILITY_AND_CONFIG_PVUUID;
 
+#ifdef PV2WAY_USE_OMX
+    iAudioEncPVUuid = PVAudioEncExtensionUUID;
+#else
     iAudioEncPVUuid = PVAMREncExtensionUUID;
+#endif
 
 #if defined(PV_RECORD_TO_FILE_SUPPORT)
     iFFClipConfigPVUuid = KPVMp4FFCNClipConfigUuid;
@@ -1354,6 +1362,22 @@
                 datapathnode.iOutputPort.iPortTag = -cmd->iPvtCmdData;
                 datapath->AddNode(datapathnode);
 
+                //Add video parser node to datapath
+                datapathnode.iNode = iVideoParserNode;
+                datapathnode.iConfigure = NULL;
+                datapathnode.iCanNodePause = false;
+                datapathnode.iIgnoreNodeState = false;
+                datapathnode.iInputPort.iRequestPortState = EPVMFNodeInitialized;
+                datapathnode.iInputPort.iPortSetType = EConnectedPortFormat;
+                datapathnode.iInputPort.iFormatType = PVMF_MIME_FORMAT_UNKNOWN;
+                datapathnode.iInputPort.iPortTag = PV2WAY_IN_PORT;
+                datapathnode.iOutputPort.iRequestPortState = EPVMFNodeInitialized;
+                datapathnode.iOutputPort.iCanCancelPort = false;
+                datapathnode.iOutputPort.iPortSetType = EUseOtherNodePortFormat;
+                datapathnode.iOutputPort.iFormatType = PVMF_MIME_FORMAT_UNKNOWN;
+                datapathnode.iOutputPort.iPortTag = PV2WAY_OUT_PORT;
+                datapath->AddNode(datapathnode);
+
                 //Add sink node to datapath
                 datapathnode.iNode.iNode = sinkNode->iNode;
                 datapathnode.iNode.iSessionId = sinkNode->iSessionId;
@@ -2416,8 +2440,8 @@
                 iAudioEncNodeInterface.iState = PV2WayNodeInterface::HasInterface;
 
 #if 0
-                PVAMREncExtensionInterface *ptr =
-                    (PVAMREncExtensionInterface *) iAudioEncNodeInterface.iInterface;
+                PVAudioEncExtensionInterface *ptr =
+                    (PVAudioEncExtensionInterface *) iAudioEncNodeInterface.iInterface;
                 ptr->SetOutputFormat(PVMF_MIME_AMR_IF2);
                 ptr->SetInputSamplingRate(KSamplingRate);
                 ptr->SetInputBitsPerSample(KBitsPerSample);
@@ -5837,8 +5861,14 @@
         PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_INFO,
                         (0, "CPV324m2Way::ConfigureNode configuring audio enc node\n"));
         //PVMFPortProperty prop;
-        PVAMREncExtensionInterface *ptr =
+#ifdef PV2WAY_USE_OMX
+        PVAudioEncExtensionInterface* ptr =
+            (PVAudioEncExtensionInterface *) iAudioEncNodeInterface.iInterface;
+#else
+        PVAMREncExtensionInterface* ptr;
+        ptr =
             (PVAMREncExtensionInterface *) iAudioEncNodeInterface.iInterface;
+#endif
 
         if (aNode->iOutputPort.iPortPair->iDestPort.GetStatus() != EHasPort)
         {
diff --git a/engines/2way/src/pv_2way_sdkinfo.h b/engines/2way/src/pv_2way_sdkinfo.h
index 1d278e9..2d166e7 100644
--- a/engines/2way/src/pv_2way_sdkinfo.h
+++ b/engines/2way/src/pv_2way_sdkinfo.h
@@ -21,7 +21,7 @@
 // This header file is automatically generated at build-time
 // *** OFFICIAL RELEASE INFO -- Will not auto update
 
-#define PV2WAY_ENGINE_SDKINFO_LABEL "PVDEV_CORE_RELEASE_6.101.1.1"
-#define PV2WAY_ENGINE_SDKINFO_DATE 0x20090121
+#define PV2WAY_ENGINE_SDKINFO_LABEL "PVDEV_CORE_RELEASE_6.504.1.1"
+#define PV2WAY_ENGINE_SDKINFO_DATE 0x20090224
 
 #endif //PV_2WAY_SDKINFO_H_INCLUDED
diff --git a/engines/2way/test/Android.mk b/engines/2way/test/Android.mk
index 7fb226a..57f8c15 100644
--- a/engines/2way/test/Android.mk
+++ b/engines/2way/test/Android.mk
@@ -23,9 +23,9 @@
 
 
 
-LOCAL_STATIC_LIBRARIES :=                   libunit_test 
+LOCAL_STATIC_LIBRARIES :=               libunit_test 
 
-LOCAL_SHARED_LIBRARIES := libopencore_2way                   libopencore_common
+LOCAL_SHARED_LIBRARIES := libopencore_2way               libopencore_common
 
 LOCAL_C_INCLUDES := \
 	$(PV_TOP)/engines/2way/test/src \
diff --git a/engines/2way/test/build/make/local.mk b/engines/2way/test/build/make/local.mk
index cd636c5..9b96130 100644
--- a/engines/2way/test/build/make/local.mk
+++ b/engines/2way/test/build/make/local.mk
@@ -52,46 +52,41 @@
 
 
 
-
-#omx_sharedlibrary \
-#omx_amrdec_sharedlibrary\
-#omx_amrenc_sharedlibrary\
-#omx_m4vdec_sharedlibrary\
-#omx_m4venc_sharedlibrary\
-
 ifeq ($(USING_OMX),1)
+ifeq ($(pv2wayengine_lib),Y)
+FULL_LIBS =  pv2wayengine pv324m \
+pvomxvideodecnode pvomxaudiodecnode pvomxencnode pvomxbasedecnode \
+omx_common_lib omx_m4v_component_lib omx_amr_component_lib \
+omx_amrenc_component_lib omx_m4venc_component_lib \
+omx_baseclass_lib pvomx_proxy_lib omx_queue_lib \
+pvvideoparsernode \
+pvgeneraltools pvcommsionode pvmediaoutputnode pvmediainputnode \
+colorconvert pvmio_comm_loopback pvmiofileinput pvmiofileoutput\
+pvmf pvlatmpayloadparser pvgendatastruct pvmediadatastruct pvthreadmessaging \
+pv_config_parser m4v_config getactualaacconfig \
+pvmimeutils osclregcli osclregserv osclio osclproc osclutil osclmemory \
+osclerror osclbase unit_test threadsafe_callback_ao \
+
+else
 ifeq ($(pv2wayengine_lib),m)
 FULL_LIBS =  opencore_2way \
 pvomxvideodecnode pvomxaudiodecnode pvomxencnode pvomxbasedecnode \
 omx_common_lib omx_m4v_component_lib omx_amr_component_lib \
 omx_amrenc_component_lib omx_m4venc_component_lib \
 omx_baseclass_lib pvomx_proxy_lib omx_queue_lib \
-pvvideoencnode pvvideoparsernode pvmp4decoder pvm4vencoder pvencoder_gsmamr \
+pvvideoparsernode \
 unit_test opencore_common 
-
-else
-FULL_LIBS =  pv2wayengine pv324m \
-pvomxvideodecnode pvomxaudiodecnode pvomxencnode pvomxbasedecnode \
-omx_common_lib omx_m4v_component_lib omx_amr_component_lib \
-omx_amrenc_component_lib omx_m4venc_component_lib \
-omx_baseclass_lib pvomx_proxy_lib omx_queue_lib \
-pvvideoencnode pvvideoparsernode pvmp4decoder pvm4vencoder pvencoder_gsmamr \
-pvdecoder_gsmamr pv_amr_nb_common_lib pvgeneraltools pvcommsionode pvmediaoutputnode pvmediainputnode \
-colorconvert pvfileoutputnode pvmio_comm_loopback pvmiofileinput pvmiofileoutput\
-pvmf pvlatmpayloadparser pvgendatastruct pvmediadatastruct pvthreadmessaging \
-pv_config_parser m4v_config getactualaacconfig pvamrwbdecoder \
-pvmimeutils osclregcli osclregserv osclio osclproc osclutil osclmemory \
-osclerror osclbase unit_test threadsafe_callback_ao \
-
+endif
 endif
 
 else
+# NON-OMX
 FULL_LIBS =  pv2wayengine pv324m \
 pvvideodecnode pvamrencnode gsmamrdecnode \
 pvvideoencnode pvvideoparsernode pvamrwbdecoder pvmp4decoder pvm4vencoder \
 pvencoder_gsmamr pvdecoder_gsmamr pv_amr_nb_common_lib \
 pvgeneraltools pvcommsionode pvmediaoutputnode pvmediainputnode \
-pvfileoutputnode pvmio_comm_loopback pvmiofileinput pvmiofileoutput \
+pvmio_comm_loopback pvmiofileinput pvmiofileoutput \
 pvmf pvlatmpayloadparser pvgendatastruct pvmediadatastruct \
 colorconvert pvthreadmessaging pvmimeutils \
 osclio osclproc osclutil osclmemory osclerror osclbase unit_test 
@@ -106,14 +101,27 @@
 include $(MK)/prog.mk
 
 
+
+TWOWAY_TARGET = ${TARGET}
+
+
+ifeq ($(HOST_ARCH),win32)
+TWOWAY_TARGET = ${TARGET}.exe
+TWOWAYFULL_TARGET = ${TWOWAY_TARGET}
+TWOWAY_TEST_DIR = build\2way_test
+RUNPREF = 
+else
 TWOWAY_TEST_DIR = ${BUILD_ROOT}/2way_test
-TWOWAY_TARGET_DIR = $(TWOWAY_TEST_DIR)/build/bin
-TWOWAY_TARGET = pv2way_omx_engine_test
+TWOWAYFULL_TARGET = ./${TWOWAY_TARGET}
+endif
+ 
 
 run_2way_test:: $(REALTARGET) default
 	$(quiet) ${RM} -r $(TWOWAY_TEST_DIR)
-	$(quiet) ${MKDIR} -p $(TWOWAY_TARGET_DIR)
-	$(quiet) $(CP) $(SRC_ROOT)/tools_v2/build/package/opencore/pvplayer.cfg $(TWOWAY_TARGET_DIR)
-	$(quiet) $(CP) ${BUILD_ROOT}/bin/${HOST_ARCH}/$(TWOWAY_TARGET) $(TWOWAY_TARGET_DIR)
-	$(quiet) $(CP) -r $(SRC_ROOT)/engines/2way/test/test_data/* $(TWOWAY_TARGET_DIR)
-	$(quiet) export LD_LIBRARY_PATH=${BUILD_ROOT}/installed_lib/${HOST_ARCH}; cd $(TWOWAY_TARGET_DIR) && $(TWOWAY_TARGET_DIR)/$(TWOWAY_TARGET) $(TEST_ARGS) $(SOURCE_ARGS)
+	$(quiet) ${MKDIR} -p $(TWOWAY_TEST_DIR)
+	$(quiet) $(CP) $(SRC_ROOT)/tools_v2/build/package/opencore/pvplayer.cfg $(TWOWAY_TEST_DIR)
+	$(quiet) $(CP) $(SRC_ROOT)/engines/2way/pvlogger/config/pvlogger.ini $(TWOWAY_TEST_DIR)
+	$(quiet) $(CP) ${BUILD_ROOT}/bin/${HOST_ARCH}/$(TWOWAY_TARGET) $(TWOWAY_TEST_DIR)
+	$(quiet) $(CP) -r $(SRC_ROOT)/engines/2way/test/test_data/* $(TWOWAY_TEST_DIR)
+	$(quiet) export LD_LIBRARY_PATH=${BUILD_ROOT}/installed_lib/${HOST_ARCH} && \
+	cd $(TWOWAY_TEST_DIR) && $(TWOWAYFULL_TARGET) $(TEST_ARGS) $(SOURCE_ARGS)
diff --git a/engines/2way/test/include/test_engine.h b/engines/2way/test/include/test_engine.h
index 5ed7663..6061b87 100644
--- a/engines/2way/test/include/test_engine.h
+++ b/engines/2way/test/include/test_engine.h
@@ -355,25 +355,25 @@
         PvmiMIOControl* iVideoSourceM4VIOControl;
 
 
-        OSCL_wHeapString<OsclMemAllocator> iAudioSinkFileName;
-        OSCL_wHeapString<OsclMemAllocator> iAudioSinkRawFileName;
-        OSCL_wHeapString<OsclMemAllocator> iAudioSink2FileName;
+        const oscl_wchar* iAudioSinkFileName;
+        const oscl_wchar* iAudioSinkRawFileName;
+        const oscl_wchar* iAudioSink2FileName;
         PVMFNodeInterface* iAudioSink;
         PVMFNodeInterface* iAudioSinkRaw;
         PVMFNodeInterface* iAudioSink2;
-        /*    PVRefFileOutput* iAudioSinkIOControl;
-            PVRefFileOutput* iAudioSinkRawIOControl;
-            PVRefFileOutput* iAudioSink2IOControl;*/
+        PVRefFileOutput* iAudioSinkIOControl;
+        PVRefFileOutput* iAudioSinkRawIOControl;
+        PVRefFileOutput* iAudioSink2IOControl;
 
-        OSCL_wHeapString<OsclMemAllocator> iVideoSinkYUVFileName;
-        OSCL_wHeapString<OsclMemAllocator> iVideoSinkH263FileName;
-        OSCL_wHeapString<OsclMemAllocator> iVideoSinkM4VFileName;
+        const oscl_wchar* iVideoSinkYUVFileName;
+        const oscl_wchar* iVideoSinkH263FileName;
+        const oscl_wchar* iVideoSinkM4VFileName;
         PVMFNodeInterface* iVideoSinkYUV;
         PVMFNodeInterface* iVideoSinkH263;
         PVMFNodeInterface* iVideoSinkM4V;
-        /*   PVRefFileOutput* iVideoSinkYUVIOControl;
-           PVRefFileOutput* iVideoSinkH263IOControl;
-           PVRefFileOutput* iVideoSinkM4VIOControl;*/
+        PVRefFileOutput* iVideoSinkYUVIOControl;
+        PVRefFileOutput* iVideoSinkH263IOControl;
+        PVRefFileOutput* iVideoSinkM4VIOControl;
         bool iDuplicatesStarted;
         OSCL_wHeapString<OsclMemAllocator> iVideoPreviewFileName;
         PVMFNodeInterface* iVideoPreview;
diff --git a/engines/2way/test/src/test_base.cpp b/engines/2way/test/src/test_base.cpp
index 5a59ea5..e1814e7 100644
--- a/engines/2way/test/src/test_base.cpp
+++ b/engines/2way/test/src/test_base.cpp
@@ -25,7 +25,7 @@
 
 
 #if defined(__linux__) || defined(linux)
-#define CONFIG_FILE_PATH _STRLIT("../../../pvlogger/config/")
+#define CONFIG_FILE_PATH _STRLIT("")
 #endif
 
 #define LOG_FILE_NAME _STRLIT("pvlog.txt")
diff --git a/engines/2way/test/src/test_engine.cpp b/engines/2way/test/src/test_engine.cpp
index a78aa5d..f9cfe97 100644
--- a/engines/2way/test/src/test_engine.cpp
+++ b/engines/2way/test/src/test_engine.cpp
@@ -530,7 +530,6 @@
     iAudioSourceFileSettings.iFileName = AUDIO_SOURCE_FILENAME;
     iAudioSourceFileSettings.iSamplingFrequency = 8000;
     iAudioSourceFileSettings.iNumChannels = 1;
-    //iAudioSourceFileSettings.iFrameRateSimulation = true;
     iAudioSourceIOControl = PvmiMIOFileInputFactory::Create(iAudioSourceFileSettings);
     iAudioSource = PvmfMediaInputNodeFactory::Create(iAudioSourceIOControl);
 
@@ -539,7 +538,6 @@
     iAudioSourceRawFileSettings.iFileName = AUDIO_SOURCE_RAW_FILENAME;
     iAudioSourceRawFileSettings.iSamplingFrequency = 8000;
     iAudioSourceRawFileSettings.iNumChannels = 1;
-    //iAudioSourceRawFileSettings.iFrameRateSimulation = true;
     iAudioSourceRawIOControl = PvmiMIOFileInputFactory::Create(iAudioSourceRawFileSettings);
     iAudioSourceRaw = PvmfMediaInputNodeFactory::Create(iAudioSourceRawIOControl);
 
@@ -548,7 +546,6 @@
     iAudioSource2FileSettings.iFileName = AUDIO_SOURCE_FILENAME;
     iAudioSource2FileSettings.iSamplingFrequency = 8000;
     iAudioSource2FileSettings.iNumChannels = 1;
-    //iAudioSource2FileSettings.iFrameRateSimulation = true;
     iAudioSource2IOControl = PvmiMIOFileInputFactory::Create(iAudioSource2FileSettings);
     iAudioSource2 = PvmfMediaInputNodeFactory::Create(iAudioSource2IOControl);
 
@@ -557,7 +554,6 @@
     iAudioSource3FileSettings.iFileName = AUDIO_SOURCE3_FILENAME;
     iAudioSource3FileSettings.iSamplingFrequency = 8000;
     iAudioSource3FileSettings.iNum20msFramesPerChunk = 1;
-    //iAudioSource3FileSettings.iFrameRateSimulation = true;
     iAudioSource3FileSettings.iNumChannels = 1;
     iAudioSource3IOControl = PvmiMIOFileInputFactory::Create(iAudioSource3FileSettings);
     iAudioSource3 = PvmfMediaInputNodeFactory::Create(iAudioSource3IOControl);
@@ -565,19 +561,16 @@
     // create the audio sinks
 
     iAudioSinkFileName = AUDIO_SINK_FILENAME;
-    //iAudioSinkIOControl = new PVRefFileOutput(iAudioSinkFileName, MEDIATYPE_AUDIO, true);
-    //iAudioSink = PVMediaOutputNodeFactory::CreateMediaOutputNode(iAudioSinkIOControl);
-    iAudioSink = PVFileOutputNodeFactory::CreateFileOutput(iAudioSinkFileName, PVMF_MIME_AMR_IF2);
+    iAudioSinkIOControl = new PVRefFileOutput(iAudioSinkFileName, MEDIATYPE_AUDIO, true);
+    iAudioSink = PVMediaOutputNodeFactory::CreateMediaOutputNode(iAudioSinkIOControl);
 
     iAudioSinkRawFileName = AUDIO_SINK_RAW_FILENAME;
-    //iAudioSinkRawIOControl = new PVRefFileOutput(iAudioSinkRawFileName, MEDIATYPE_AUDIO, false);
-    // iAudioSinkRaw = PVMediaOutputNodeFactory::CreateMediaOutputNode(iAudioSinkRawIOControl);
-    iAudioSinkRaw = PVFileOutputNodeFactory::CreateFileOutput(iAudioSinkRawFileName, PVMF_MIME_PCM16);
+    iAudioSinkRawIOControl = new PVRefFileOutput(iAudioSinkRawFileName, MEDIATYPE_AUDIO, false);
+    iAudioSinkRaw = PVMediaOutputNodeFactory::CreateMediaOutputNode(iAudioSinkRawIOControl);
 
     iAudioSink2FileName = AUDIO_SINK2_FILENAME;
-    // iAudioSink2IOControl = new PVRefFileOutput(iAudioSink2FileName, MEDIATYPE_AUDIO, true);
-    //iAudioSink2 = PVMediaOutputNodeFactory::CreateMediaOutputNode(iAudioSink2IOControl);
-    iAudioSink2 = PVFileOutputNodeFactory::CreateFileOutput(iAudioSink2FileName, PVMF_MIME_AMR_IF2);
+    iAudioSink2IOControl = new PVRefFileOutput(iAudioSink2FileName, MEDIATYPE_AUDIO, true);
+    iAudioSink2 = PVMediaOutputNodeFactory::CreateMediaOutputNode(iAudioSink2IOControl);
 
     // create the video sources
     iVideoSourceYUVFileSettings.iMediaFormat = PVMF_MIME_YUV420;
@@ -587,7 +580,6 @@
     iVideoSourceYUVFileSettings.iFrameHeight = 144;
     iVideoSourceYUVFileSettings.iFrameWidth = 176;
     iVideoSourceYUVFileSettings.iFrameRate = 5;
-    //iVideoSourceYUVFileSettings.iFrameRateSimulation = true;
     iVideoSourceYUVIOControl = PvmiMIOFileInputFactory::Create(iVideoSourceYUVFileSettings);
     iVideoSourceYUV = PvmfMediaInputNodeFactory::Create(iVideoSourceYUVIOControl);
 
@@ -599,7 +591,7 @@
     iVideoSourceH263FileSettings.iFrameHeight = 144;
     iVideoSourceH263FileSettings.iFrameWidth = 176;
     iVideoSourceH263FileSettings.iFrameRate = 5;
-    //iVideoSourceH263FileSettings.iFrameRateSimulation = true;
+
 
     iVideoSourceH263IOControl = PvmiMIOFileInputFactory::Create(iVideoSourceH263FileSettings);
     iVideoSourceH263 = PvmfMediaInputNodeFactory::Create(iVideoSourceH263IOControl);
@@ -612,29 +604,24 @@
     iVideoSourceM4VFileSettings.iFrameHeight = 144;
     iVideoSourceM4VFileSettings.iFrameWidth = 176;
     iVideoSourceM4VFileSettings.iFrameRate = 5;
-    //iVideoSourceM4VFileSettings.iFrameRateSimulation = true;
 
     iVideoSourceM4VIOControl = PvmiMIOFileInputFactory::Create(iVideoSourceM4VFileSettings);
     iVideoSourceM4V = PvmfMediaInputNodeFactory::Create(iVideoSourceM4VIOControl);
 
     // create the video sinks
     iVideoSinkYUVFileName = VIDEO_SINK_YUV_FILENAME;
-    // iVideoSinkYUVIOControl = new PVRefFileOutput(iVideoSinkYUVFileName, MEDIATYPE_VIDEO, false);
+    iVideoSinkYUVIOControl = new PVRefFileOutput(iVideoSinkYUVFileName, MEDIATYPE_VIDEO, false);
 
-    //iVideoSinkYUV = PVMediaOutputNodeFactory::CreateMediaOutputNode(iVideoSinkYUVIOControl);
-    iVideoSinkYUV = PVFileOutputNodeFactory::CreateFileOutput(iVideoSinkYUVFileName, PVMF_MIME_YUV420);
+    iVideoSinkYUV = PVMediaOutputNodeFactory::CreateMediaOutputNode(iVideoSinkYUVIOControl);
 
     iVideoSinkH263FileName = VIDEO_SINK_H263_FILENAME;
-    // iVideoSinkH263IOControl = new PVRefFileOutput(iVideoSinkH263FileName, MEDIATYPE_VIDEO, true);
+    iVideoSinkH263IOControl = new PVRefFileOutput(iVideoSinkH263FileName, MEDIATYPE_VIDEO, true);
+    iVideoSinkH263 = PVMediaOutputNodeFactory::CreateMediaOutputNode(iVideoSinkH263IOControl);
 
-    // iVideoSinkH263 = PVMediaOutputNodeFactory::CreateMediaOutputNode(iVideoSinkH263IOControl);
-    iVideoSinkH263 = PVFileOutputNodeFactory::CreateFileOutput(iVideoSinkH263FileName, PVMF_MIME_H2632000);
 
     iVideoSinkM4VFileName = VIDEO_SINK_M4V_FILENAME;
-    //iVideoSinkM4VIOControl = new PVRefFileOutput(iVideoSinkM4VFileName, MEDIATYPE_VIDEO, true);
-
-    // iVideoSinkM4V = PVMediaOutputNodeFactory::CreateMediaOutputNode(iVideoSinkM4VIOControl);
-    iVideoSinkM4V = PVFileOutputNodeFactory::CreateFileOutput(iVideoSinkM4VFileName, PVMF_MIME_M4V);
+    iVideoSinkM4VIOControl = new PVRefFileOutput(iVideoSinkM4VFileName, MEDIATYPE_VIDEO, true);
+    iVideoSinkM4V = PVMediaOutputNodeFactory::CreateMediaOutputNode(iVideoSinkM4VIOControl);
 
 }
 
@@ -739,46 +726,74 @@
 
     if (iAudioSink)
     {
-        //PVMediaOutputNodeFactory::DeleteMediaOutputNode(iAudioSink);
-        PVFileOutputNodeFactory::DeleteFileOutput(iAudioSink);
+        PVMediaOutputNodeFactory::DeleteMediaOutputNode(iAudioSink);
         iAudioSink = NULL;
     }
 
     if (iAudioSinkRaw)
     {
-        //PVMediaOutputNodeFactory::DeleteMediaOutputNode(iAudioSinkRaw);
-        PVFileOutputNodeFactory::DeleteFileOutput(iAudioSinkRaw);
+        PVMediaOutputNodeFactory::DeleteMediaOutputNode(iAudioSinkRaw);
         iAudioSinkRaw = NULL;
     }
 
     if (iAudioSink2)
     {
-        //PVMediaOutputNodeFactory::DeleteMediaOutputNode(iAudioSink2);
-        PVFileOutputNodeFactory::DeleteFileOutput(iAudioSink2);
+        PVMediaOutputNodeFactory::DeleteMediaOutputNode(iAudioSink2);
         iAudioSink2 = NULL;
     }
+    if (iAudioSinkIOControl)
+    {
+        PvmiMIOFileInputFactory::Delete(iAudioSinkIOControl);
+        iAudioSinkIOControl = NULL;
+    }
 
+    if (iAudioSinkRawIOControl)
+    {
+        PvmiMIOFileInputFactory::Delete(iAudioSinkRawIOControl);
+        iAudioSinkRawIOControl = NULL;
+    }
+
+    if (iAudioSink2IOControl)
+    {
+        PvmiMIOFileInputFactory::Delete(iAudioSinkIOControl);
+        iAudioSink2IOControl = NULL;
+    }
     if (iVideoSinkYUV)
     {
-        //PVMediaOutputNodeFactory::DeleteMediaOutputNode(iVideoSinkYUV);
-        PVFileOutputNodeFactory::DeleteFileOutput(iVideoSinkYUV);
+        PVMediaOutputNodeFactory::DeleteMediaOutputNode(iVideoSinkYUV);
         iVideoSinkYUV = NULL;
     }
 
     if (iVideoSinkH263)
     {
-        //PVMediaOutputNodeFactory::DeleteMediaOutputNode(iVideoSinkH263);
-        PVFileOutputNodeFactory::DeleteFileOutput(iVideoSinkH263);
+        PVMediaOutputNodeFactory::DeleteMediaOutputNode(iVideoSinkH263);
         iVideoSinkH263 = NULL;
     }
 
     if (iVideoSinkM4V)
     {
-        //PVMediaOutputNodeFactory::DeleteMediaOutputNode(iVideoSinkM4V);
-        PVFileOutputNodeFactory::DeleteFileOutput(iVideoSinkM4V);
+        PVMediaOutputNodeFactory::DeleteMediaOutputNode(iVideoSinkM4V);
         iVideoSinkM4V = NULL;
     }
 
+    if (iVideoSinkYUVIOControl)
+    {
+        PvmiMIOFileInputFactory::Delete(iVideoSinkYUVIOControl);
+        iVideoSinkYUVIOControl = NULL;
+    }
+
+    if (iVideoSinkM4VIOControl)
+    {
+        PvmiMIOFileInputFactory::Delete(iVideoSinkM4VIOControl);
+        iVideoSinkM4VIOControl = NULL;
+    }
+
+    if (iVideoSinkH263IOControl)
+    {
+        PvmiMIOFileInputFactory::Delete(iVideoSinkH263IOControl);
+        iVideoSinkH263IOControl = NULL;
+    }
+
 }
 
 PVMFNodeInterface *engine_test::get_audio_source(PVMFFormatType format)
diff --git a/engines/adapters/player/framemetadatautility/Android.mk b/engines/adapters/player/framemetadatautility/Android.mk
index 197d3c6..5932094 100644
--- a/engines/adapters/player/framemetadatautility/Android.mk
+++ b/engines/adapters/player/framemetadatautility/Android.mk
@@ -22,7 +22,7 @@
 LOCAL_C_INCLUDES := \
 	$(PV_TOP)/engines/adapters/player/framemetadatautility/src \
  	$(PV_TOP)/engines/adapters/player/framemetadatautility/include \
- 	$(PV_TOP)/engines/adapters/player/framemetadatautility/config/linux_nj \
+ 	$(PV_TOP)/engines/adapters/player/framemetadatautility/config/android \
  	$(PV_INCLUDES)
 
 LOCAL_COPY_HEADERS_TO := $(PV_COPY_HEADERS_TO)
diff --git a/engines/adapters/player/framemetadatautility/test/build/make/local.mk b/engines/adapters/player/framemetadatautility/test/build/make/local.mk
new file mode 100644
index 0000000..75fea42
--- /dev/null
+++ b/engines/adapters/player/framemetadatautility/test/build/make/local.mk
@@ -0,0 +1,143 @@
+# Get the current local path as the first operation
+LOCAL_PATH := $(call get_makefile_dir)
+
+# Clear out the variables used in the local makefiles
+include $(MK)/clear.mk
+
+TARGET := pv_frame_metadata_utility_test
+
+XINCDIRS += ../../config/common
+
+SRCDIR := ../../src
+INCSRCDIR := ../../src
+
+SRCS := test_pv_frame_metadata_utility.cpp \
+        test_pv_frame_metadata_utility_testset1.cpp \
+        test_pv_frame_metadata_utility_testset_januscpm.cpp
+
+LIBS :=  pvframemetadatautility \
+        colorconvert \
+pvplayer_engine \
+        pvfileoutputnode \
+        pvpvxparser \
+        pvmp3ffparsernode \
+        mp3decnode \
+        pvdownloadmanagernode \
+        pvmp4ffparsernode \
+        cpm \
+        passthru_oma1 \
+        pvaacffparsernode \
+        pvwavffparsernode \
+        pvstillimagenode \
+        pvmp4ff \
+        pvmp3ff \
+        pvwav \
+        pvaacparser \
+        getactualaacconfig \
+        pvomxvideodecnode \
+        pvomxaudiodecnode \
+        pvomxbasedecnode \
+        m4v_config \
+        pvvideodecnode \
+        pvavcdecnode \
+        gsmamrdecnode \
+        aacdecnode \
+        pvstreamingmanagernode \
+        pvjitterbuffernode \
+        pvjitterbufferasf \
+        pvjitterbufferrtp \
+        pvjitterbuffer \
+        pvmedialayernode \
+        rtprtcp \
+        pvrtsp_cli_eng_node \
+        protocolenginenode \
+        pv_http_parcom \
+        pvsocketnode \
+        pvrtppacketsourcenode \
+        rtppayloadparser \
+        pvpvrnode \
+        pvpvr \
+        pvpvrff \
+        pvmf \
+        pvsdpparser \
+        pv_rtsp_parcom \
+        pvwmadecnode \
+        omx_common_lib \
+        pv_config_parser \
+        omx_mp3_component_lib \
+        pvmp3 \
+        omx_avc_component_lib \
+        pvavcdecoder \
+        pv_avc_common_lib \
+        omx_amr_component_lib \
+        pvdecoder_gsmamr \
+        pv_amr_nb_common_lib \
+        pvamrwbdecoder \
+        omx_m4v_component_lib \
+        pvmp4decoder \
+        omx_wmv_component_lib \
+        omx_aac_component_lib \
+        pv_aac_dec \
+        pvmiofileoutput \
+        pvmimeutils \
+        pvmediaoutputnode \
+        pvmediadatastruct \
+        pvamrffparsernode \
+        pvgsmamrparser \
+        pvlatmpayloadparser \
+        rdt_parser \
+        pvwmvdecnode \
+        g726decnode \
+        pvg726decoder \
+        wmvdecoder \
+        omx_wma_component_lib \
+        wmadecoder \
+        pvasfffparsernode \
+        pvasfff \
+        pvjanusplugin \
+        pvmfrecognizer \
+        pvasfffrecognizer \
+        pvmp4ffrecognizer \
+        mp4recognizer_utility \
+        pvmp3ffrecognizer \
+        pvrmffrecognizer \
+        pvoma1ffrecognizer \
+        pvaacffrecognizer \
+        pvfileparserutils \
+        pvrvdecnode \
+        rvdecoder \
+        pvra8decnode \
+        pvra8decoder \
+        pvrmffparsernode \
+        pvrmffparser \
+        pvrmff \
+        realaudio_deinterleaver \
+        pvid3parcom \
+        pvgendatastruct \
+        pvwmdrm \
+        csprng\
+        pvcrypto \
+        pventropysrc\
+        osclregcli \
+        osclregserv \
+        osclio \
+        osclproc \
+        osclutil \
+        osclmemory \
+        osclerror \
+        osclbase \
+        omx_baseclass_lib \
+        pvomx_proxy_lib \
+        omx_queue_lib \
+        threadsafe_callback_ao \
+        packetsources_default \
+        unit_test \
+	asfrecognizer_utility \
+	scsp \
+        pvdivxffrecognizer \
+        pvdivxffparsernode \
+        pv_divxfile_parser
+SYSLIBS += $(SYS_THREAD_LIB)
+
+include $(MK)/prog.mk
+
diff --git a/engines/adapters/player/framemetadatautility/test/config/common/test_pv_frame_metadata_utility_config.h b/engines/adapters/player/framemetadatautility/test/config/common/test_pv_frame_metadata_utility_config.h
index eedf86e..dfbdae4 100644
--- a/engines/adapters/player/framemetadatautility/test/config/common/test_pv_frame_metadata_utility_config.h
+++ b/engines/adapters/player/framemetadatautility/test/config/common/test_pv_frame_metadata_utility_config.h
@@ -24,7 +24,7 @@
 
 // The default test file to use
 #define DEFAULTSOURCEFILENAME "test.mp4"
-#define DEFAULTSOURCEFORMATTYPE PVMF_MPEG4FF
+#define DEFAULTSOURCEFORMATTYPE PVMF_MIME_MPEG4FF
 
 // Set to 1 to enable test cases that output YUV 4:2:0, 0 to disable
 #define RUN_YUV420_TESTCASES 1
@@ -44,7 +44,7 @@
 // The source test file without video track
 //#define NOVIDEOSOURCEFILENAME "test_amr.mp4"
 #define NOVIDEOSOURCEFILENAME "test_aac.mp4"
-#define NOVIDEOSOURCEFORMATTYPE PVMF_MPEG4FF
+#define NOVIDEOSOURCEFORMATTYPE PVMF_MIME_MPEG4FF
 
 // Set to 1 to use the scheduler native to the system instead of PV scheduler
 #define USE_NATIVE_SCHEDULER 0
diff --git a/engines/adapters/player/framemetadatautility/test/src/test_pv_frame_metadata_utility.cpp b/engines/adapters/player/framemetadatautility/test/src/test_pv_frame_metadata_utility.cpp
index 2fe3939..e9f7610 100644
--- a/engines/adapters/player/framemetadatautility/test/src/test_pv_frame_metadata_utility.cpp
+++ b/engines/adapters/player/framemetadatautility/test/src/test_pv_frame_metadata_utility.cpp
@@ -348,63 +348,63 @@
         // AAC file
         if (oscl_strstr(aFileNameInfo.get_cstr(), ".aac") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), ".AAC") != NULL)
         {
-            aInputFileFormatType = PVMF_AACFF;
+            aInputFileFormatType = PVMF_MIME_AACFF;
         }
         // MP3 file
         else  if (oscl_strstr(aFileNameInfo.get_cstr(), ".mp3") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), ".MP3") != NULL)
         {
-            aInputFileFormatType = PVMF_MP3FF;
+            aInputFileFormatType = PVMF_MIME_MP3FF;
         }
         // AMR file (IETF and IF2)
         else  if (oscl_strstr(aFileNameInfo.get_cstr(), ".amr") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), ".AMR") != NULL ||
                   oscl_strstr(aFileNameInfo.get_cstr(), ".cod") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), ".COD") != NULL)
         {
-            aInputFileFormatType = PVMF_AMRFF;
+            aInputFileFormatType = PVMF_MIME_AMRFF;
         }
         // RTSP URL
         else  if ((!oscl_strncmp("rtsp", aFileNameInfo.get_cstr(), 4)) ||
                   (!oscl_strncmp("RTSP", aFileNameInfo.get_cstr(), 4)))
         {
-            aInputFileFormatType = PVMF_DATA_SOURCE_RTSP_URL;
+            aInputFileFormatType = PVMF_MIME_DATA_SOURCE_RTSP_URL;
         }
         // HTTP URL
         else  if (oscl_strstr(aFileNameInfo.get_cstr(), "http:") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), "HTTP:") != NULL)
         {
-            aInputFileFormatType = PVMF_DATA_SOURCE_HTTP_URL;
+            aInputFileFormatType = PVMF_MIME_DATA_SOURCE_HTTP_URL;
         }
         // MP4/3GP file
         else  if (oscl_strstr(aFileNameInfo.get_cstr(), ".mp4") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), ".MP4") != NULL ||
                   oscl_strstr(aFileNameInfo.get_cstr(), ".3gp") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), ".3GP") != NULL)
         {
-            aInputFileFormatType = PVMF_MPEG4FF;
+            aInputFileFormatType = PVMF_MIME_MPEG4FF;
         }
         // ASF file
         else  if (oscl_strstr(aFileNameInfo.get_cstr(), ".asf") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), ".ASF") != NULL ||
                   oscl_strstr(aFileNameInfo.get_cstr(), ".wma") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), ".WMA") != NULL ||
                   oscl_strstr(aFileNameInfo.get_cstr(), ".wmv") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), ".WMV") != NULL)
         {
-            aInputFileFormatType = PVMF_ASFFF;
+            aInputFileFormatType = PVMF_MIME_ASFFF;
         }
         // SDP file
         else  if (oscl_strstr(aFileNameInfo.get_cstr(), ".sdp") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), ".SDP") != NULL)
         {
-            aInputFileFormatType = PVMF_DATA_SOURCE_SDP_FILE;
+            aInputFileFormatType = PVMF_MIME_DATA_SOURCE_SDP_FILE;
         }
         // PVX file
         else  if (oscl_strstr(aFileNameInfo.get_cstr(), ".pvx") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), ".PVX") != NULL)
         {
-            aInputFileFormatType = PVMF_DATA_SOURCE_PVX_FILE;
+            aInputFileFormatType = PVMF_MIME_DATA_SOURCE_PVX_FILE;
         }
         // WAV file
         else  if (oscl_strstr(aFileNameInfo.get_cstr(), ".wav") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), ".WAV") != NULL)
         {
-            aInputFileFormatType = PVMF_WAVFF;
+            aInputFileFormatType = PVMF_MIME_WAVFF;
         }
         // Unknown so set to unknown and let the player engine determine the format type
         else
         {
             fprintf(file, "Source type unknown so setting to unknown and have the utility recognize it\n");
-            aInputFileFormatType = PVMF_FORMAT_UNKNOWN;
+            aInputFileFormatType = PVMF_MIME_FORMAT_UNKNOWN;
         }
     }
 }
@@ -1036,7 +1036,7 @@
         testparam.iTestMsgOutputFile = file;
         testparam.iFileName = iFileName;
         testparam.iFileType = iFileType;
-        testparam.iOutputFrameType = PVMF_YUV420;
+        testparam.iOutputFrameType = PVMF_MIME_YUV420;
 
         switch (iCurrentTestNumber)
         {
@@ -1062,7 +1062,7 @@
 
             case GetFirstFrameYUV420AndMetadataTest:
 #if RUN_YUV420_TESTCASES
-                testparam.iOutputFrameType = PVMF_YUV420;
+                testparam.iOutputFrameType = PVMF_MIME_YUV420;
                 iCurrentTest = new pvframemetadata_async_test_getfirstframemetadata(testparam);
                 fprintf(file, "YUV 4:2:0 ");
 #else
@@ -1072,7 +1072,7 @@
 
             case GetFirstFrameYUV420UtilityBufferTest:
 #if RUN_YUV420_TESTCASES
-                testparam.iOutputFrameType = PVMF_YUV420;
+                testparam.iOutputFrameType = PVMF_MIME_YUV420;
                 iCurrentTest = new pvframemetadata_async_test_getfirstframeutilitybuffer(testparam);
                 fprintf(file, "YUV 4:2:0 ");
 #else
@@ -1102,7 +1102,7 @@
 
             case GetFirstFrameRGB16AndMetadataTest:
 #if RUN_RGB16_TESTCASES
-                testparam.iOutputFrameType = PVMF_RGB16;
+                testparam.iOutputFrameType = PVMF_MIME_RGB16;
                 iCurrentTest = new pvframemetadata_async_test_getfirstframemetadata(testparam);
                 fprintf(file, "RGB 16bpp ");
 #else
@@ -1112,7 +1112,7 @@
 
             case GetFirstFrameRGB16UtilityBufferTest:
 #if RUN_RGB16_TESTCASES
-                testparam.iOutputFrameType = PVMF_RGB16;
+                testparam.iOutputFrameType = PVMF_MIME_RGB16;
                 iCurrentTest = new pvframemetadata_async_test_getfirstframeutilitybuffer(testparam);
                 fprintf(file, "RGB 16bpp ");
 #else
@@ -1158,7 +1158,7 @@
 
             case MultipleGetFramesYUVTest:
 #if RUN_YUV420_TESTCASES
-                testparam.iOutputFrameType = PVMF_YUV420;
+                testparam.iOutputFrameType = PVMF_MIME_YUV420;
                 iCurrentTest = new pvframemetadata_async_test_multigetframe(testparam);
                 fprintf(file, "YUV 4:2:0 ");
 #else
diff --git a/engines/adapters/player/framemetadatautility/test/src/test_pv_frame_metadata_utility.h b/engines/adapters/player/framemetadatautility/test/src/test_pv_frame_metadata_utility.h
index 18a7f85..791c88d 100644
--- a/engines/adapters/player/framemetadatautility/test/src/test_pv_frame_metadata_utility.h
+++ b/engines/adapters/player/framemetadatautility/test/src/test_pv_frame_metadata_utility.h
@@ -123,7 +123,6 @@
             iFileName = aTestParam.iFileName;
             iFileType = aTestParam.iFileType;
             iOutputFrameType = aTestParam.iOutputFrameType;
-            GetFormatString(iOutputFrameType, iOutputFrameTypeString);
             oscl_UTF8ToUnicode(iOutputFrameTypeString.get_str(), iOutputFrameTypeString.get_size(), iTempWCharBuf, 512);
             iOutputFrameTypeWString.set(iTempWCharBuf, oscl_strlen(iTempWCharBuf));
 
diff --git a/engines/adapters/player/framemetadatautility/test/src/test_pv_frame_metadata_utility_testset1.cpp b/engines/adapters/player/framemetadatautility/test/src/test_pv_frame_metadata_utility_testset1.cpp
index eb4a853..524af97 100644
--- a/engines/adapters/player/framemetadatautility/test/src/test_pv_frame_metadata_utility_testset1.cpp
+++ b/engines/adapters/player/framemetadatautility/test/src/test_pv_frame_metadata_utility_testset1.cpp
@@ -2050,7 +2050,7 @@
             // Add a different data source
             OSCL_wHeapString<OsclMemAllocator> secondclip(_STRLIT_WCHAR("test.mp4"));
             iDataSource->SetDataSourceURL(secondclip);
-            iDataSource->SetDataSourceFormatType(PVMF_MPEG4FF);
+            iDataSource->SetDataSourceFormatType(PVMF_MIME_MPEG4FF);
 
             OSCL_TRY(error, iCurrentCmdId = iFrameMetadataUtil->AddDataSource(*iDataSource, (OsclAny*) & iContextObject));
             OSCL_FIRST_CATCH_ANY(error, PVFMUATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
diff --git a/engines/author/build/make/local.mk b/engines/author/build/make/local.mk
index 1095665..231ff97 100644
--- a/engines/author/build/make/local.mk
+++ b/engines/author/build/make/local.mk
@@ -22,6 +22,8 @@
 
 HDRS := pvauthorenginefactory.h pvauthorengineinterface.h
 
+## This file is need by PLATFORM_EXTRAS in library.mk
+sdkinfo_header_name := pv_author_sdkinfo.h
 
 include $(MK)/library.mk
 
@@ -33,9 +35,9 @@
 include $(MK)/doc.mk
 
 sdkinfo_target := $(LOCAL_SRCDIR)/pvauthorengine.cpp
-sdkinfo_header_filename := $(LOCAL_SRCDIR)/pv_author_sdkinfo.h
+sdkinfo_header_filename := $(LOCAL_SRCDIR)/$(sdkinfo_header_name)
 sdkinfo_header_macro := PV_AUTHOR_SDKINFO
 sdkinfo_label_macro := PVAUTHOR_ENGINE_SDKINFO_LABEL
 sdkinfo_date_macro := PVAUTHOR_ENGINE_SDKINFO_DATE
 
-include $(MK)/sdkinfo.mk
+include $(MK)/sdkinfo_nr.mk
diff --git a/engines/author/src/pv_author_sdkinfo.h b/engines/author/src/pv_author_sdkinfo.h
index 614da15..64e0d25 100644
--- a/engines/author/src/pv_author_sdkinfo.h
+++ b/engines/author/src/pv_author_sdkinfo.h
@@ -21,7 +21,7 @@
 // This header file is automatically generated at build-time
 // *** OFFICIAL RELEASE INFO -- Will not auto update
 
-#define PVAUTHOR_ENGINE_SDKINFO_LABEL "PVDEV_CORE_RELEASE_6.101.1.1"
-#define PVAUTHOR_ENGINE_SDKINFO_DATE 0x20090121
+#define PVAUTHOR_ENGINE_SDKINFO_LABEL "PVDEV_CORE_RELEASE_6.504.1.1"
+#define PVAUTHOR_ENGINE_SDKINFO_DATE 0x20090224
 
 #endif //PV_AUTHOR_SDKINFO_H_INCLUDED
diff --git a/engines/author/src/pvauthorengine.cpp b/engines/author/src/pvauthorengine.cpp
index c163165..7aa85ce 100644
--- a/engines/author/src/pvauthorengine.cpp
+++ b/engines/author/src/pvauthorengine.cpp
@@ -296,7 +296,7 @@
 {
     PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
                     (0, "PVAuthorEngine::AddMediaTrack: &aDataSource=0x%x, aComposer=0x%x, \
-		aConfigInterface=0x%x, aContextData=0x%x",
+                     aConfigInterface=0x%x, aContextData=0x%x",
                      &aDataSource, aConfigInterface, aContextData));
 
 
@@ -475,8 +475,7 @@
 
         if (cmdtype == PVAE_CMD_RESET)
         {
-            SetPVAEState(PVAE_STATE_ERROR);
-            return;
+            return; //ignore
         }
         else
         {
@@ -545,7 +544,13 @@
 
     if (aResponse.GetCmdStatus() != PVMFSuccess)
     {
-        SetPVAEState(PVAE_STATE_ERROR);
+        if (cmd.GetCmdType() == PVAE_CMD_RESET)
+        {
+            OSCL_ASSERT(false);//Reset can't fail.
+            return;
+        }
+        else
+            SetPVAEState(PVAE_STATE_ERROR);
     }
     //RESET needs to be handled seperately, if the EngineState is ERROR, ignore all cmds till
     //there are more pending commands, else send out commandComplete Failure
@@ -1673,6 +1678,10 @@
     {
         aMimeType = PVMF_MIME_AMR_IETF;
     }
+    else if (aNodeMimeType == KAMRWbEncMimeType)
+    {
+        aMimeType = PVMF_MIME_AMRWB_IETF;
+    }
     else if (aNodeMimeType == KAACADIFEncMimeType ||
              aNodeMimeType == KAACADIFComposerMimeType)
     {
@@ -1683,6 +1692,10 @@
     {
         aMimeType = PVMF_MIME_ADTS;
     }
+    else if (aNodeMimeType == KAACMP4EncMimeType)
+    {
+        aMimeType = PVMF_MIME_MPEG4_AUDIO;
+    }
     else if (aNodeMimeType == KH264EncMimeType)
     {
         aMimeType = PVMF_MIME_H264_VIDEO_MP4;
@@ -1842,7 +1855,8 @@
                     }
                 }
                 if (anysuccess == false)
-                {   // setParametersSync was not accepted by the node(s)
+                {
+                    // setParametersSync was not accepted by the node(s)
                     *retkvp = &paramkvp[paramind];
                     return PVMFErrArgument;
                 }
diff --git a/engines/author/src/pvauthorengine.h b/engines/author/src/pvauthorengine.h
index 5cd7272..8bb106e 100644
--- a/engines/author/src/pvauthorengine.h
+++ b/engines/author/src/pvauthorengine.h
@@ -54,6 +54,7 @@
 #endif
 #define K3gpComposerMimeType "/x-pvmf/ff-mux/3gp"
 #define KAmrNbEncMimeType "/x-pvmf/audio/encode/amr-nb"
+#define KAMRWbEncMimeType "/x-pvmf/audio/encode/amr-wb"
 #define KH263EncMimeType "/x-pvmf/video/encode/h263"
 #define KH264EncMimeType "/x-pvmf/video/encode/h264"
 #define KMp4EncMimeType "/x-pvmf/video/encode/mp4"
@@ -61,10 +62,12 @@
 
 //MIME strings for .amr and .aac composer
 #define KAMRNbComposerMimeType		"/x-pvmf/ff-mux/amr-nb"
+#define KAMRWbComposerMimeType		"/x-pvmf/ff-mux/amr-wb"
 #define KAACADIFComposerMimeType	"/x-pvmf/ff-mux/adif"
 #define KAACADTSComposerMimeType	"/x-pvmf/ff-mux/adts"
 #define KAACADIFEncMimeType			"/x-pvmf/audio/encode/aac/adif"
 #define KAACADTSEncMimeType			"/x-pvmf/audio/encode/aac/adts"
+#define KAACMP4EncMimeType          "/x-pvmf/audio/encode/X-MPEG4-AUDIO"
 //end of changes
 
 /**
diff --git a/engines/author/src/single_core/pvaenodefactoryutility.h b/engines/author/src/single_core/pvaenodefactoryutility.h
index 6e7bb4d..74d7ce9 100644
--- a/engines/author/src/single_core/pvaenodefactoryutility.h
+++ b/engines/author/src/single_core/pvaenodefactoryutility.h
@@ -50,11 +50,11 @@
 #ifndef PV_MP4_H263_ENC_EXTENSION_H_INCLUDED
 #include "pvmp4h263encextension.h"
 #endif
-#ifndef PVMFAMRENCNODE_EXTENSION_H_INCLUDED
-#include "pvmfamrencnode_extension.h"
+#ifndef PVMF_AUDIO_ENCNODE_EXTENSION_H_INCLUDED
+#include "pvmf_audio_encnode_extension.h"
 #endif
 
-#ifdef USE_OMX_ENC_NODE
+#if USE_OMX_ENC_NODE
 
 #ifndef PVMF_OMX_ENC_FACTORY_H_INCLUDED
 #include "pvmf_omx_enc_factory.h"
@@ -79,7 +79,7 @@
         static PVMFNodeInterface* CreateEncoder(const PVUuid& aUuid)
         {
             PVMFNodeInterface* node = NULL;
-#ifdef USE_OMX_ENC_NODE
+#if USE_OMX_ENC_NODE
             if (aUuid == KPVMFOMXVideoEncNodeUuid)
             {
                 node = PVMFOMXEncNodeFactory::CreatePVMFOMXEncNode();
@@ -126,7 +126,7 @@
             if (!aNode)
                 return false;
 
-#ifdef USE_OMX_ENC_NODE
+#if USE_OMX_ENC_NODE
             else if (aUuid == KPVMFOMXVideoEncNodeUuid)
             {
                 return PVMFOMXEncNodeFactory::DeletePVMFOMXEncNode(aNode);
@@ -169,7 +169,7 @@
             else if (CompareMimeTypes(aMimeType, OSCL_HeapString<OsclMemAllocator>(KMp4EncMimeType)) ||
                      CompareMimeTypes(aMimeType, OSCL_HeapString<OsclMemAllocator>(KH263EncMimeType)))
             {
-#ifdef USE_OMX_ENC_NODE
+#if USE_OMX_ENC_NODE
                 // replace mp4/h263 encoder node with omx encoder node
                 aUuid = KPVMFOMXVideoEncNodeUuid;
 #else
@@ -178,7 +178,7 @@
             }
             else if (CompareMimeTypes(aMimeType, OSCL_HeapString<OsclMemAllocator>(KH264EncMimeType)))
             {
-#ifdef USE_OMX_ENC_NODE
+#if USE_OMX_ENC_NODE
                 // replace avc encoder node with omx encoder node
                 aUuid = KPVMFOMXVideoEncNodeUuid;
 #else
@@ -188,14 +188,25 @@
             }
             else if (CompareMimeTypes(aMimeType, OSCL_HeapString<OsclMemAllocator>(KAmrNbEncMimeType)))
             {
-#ifdef USE_OMX_ENC_NODE
+#if USE_OMX_ENC_NODE
                 // replace amr encoder node with omx encoder node
                 aUuid = KPVMFOMXAudioEncNodeUuid;
 #else
                 aUuid = PvmfAmrEncNodeUuid;
 #endif
             }
+#if USE_OMX_ENC_NODE
+            // aac encoding is supported only under OMX node
+            else if (CompareMimeTypes(aMimeType, OSCL_HeapString<OsclMemAllocator>(KAACADIFEncMimeType)) ||
+                     CompareMimeTypes(aMimeType, OSCL_HeapString<OsclMemAllocator>(KAACADTSEncMimeType)) ||
+                     CompareMimeTypes(aMimeType, OSCL_HeapString<OsclMemAllocator>(KAACMP4EncMimeType))  ||
+                     CompareMimeTypes(aMimeType, OSCL_HeapString<OsclMemAllocator>(KAMRWbEncMimeType)))
+            {
+                aUuid = KPVMFOMXAudioEncNodeUuid;
+            }
+#endif
             else if (CompareMimeTypes(aMimeType, OSCL_HeapString<OsclMemAllocator>(KAMRNbComposerMimeType)) ||
+                     CompareMimeTypes(aMimeType, OSCL_HeapString<OsclMemAllocator>(KAMRWbComposerMimeType)) ||
                      CompareMimeTypes(aMimeType, OSCL_HeapString<OsclMemAllocator>(KAACADIFComposerMimeType)) ||
                      CompareMimeTypes(aMimeType, OSCL_HeapString<OsclMemAllocator>(KAACADTSComposerMimeType)))
             {
@@ -223,7 +234,7 @@
                 aConfigUuid = PvmfFileOutputNodeConfigUuid;
                 status = true;
             }
-#ifdef USE_OMX_ENC_NODE
+#if USE_OMX_ENC_NODE
             else if (aNodeUuid == KPVMFOMXVideoEncNodeUuid)
             {
                 aConfigUuid = PVMp4H263EncExtensionUUID;
@@ -231,7 +242,7 @@
             }
             else if (aNodeUuid == KPVMFOMXAudioEncNodeUuid)
             {
-                aConfigUuid = PVAMREncExtensionUUID;
+                aConfigUuid = PVAudioEncExtensionUUID;
                 status = true;
             }
 #else
@@ -243,7 +254,7 @@
             }
             else if (aNodeUuid == PvmfAmrEncNodeUuid)
             {
-                aConfigUuid = PVAMREncExtensionUUID;
+                aConfigUuid = PVAudioEncExtensionUUID;
                 status = true;
             }
 #endif
diff --git a/engines/author/test/Android.mk b/engines/author/test/Android.mk
index 8600f87..7eaa71e 100644
--- a/engines/author/test/Android.mk
+++ b/engines/author/test/Android.mk
@@ -29,7 +29,7 @@
  	$(PV_TOP)/engines/author/test/src \
  	$(PV_TOP)/engines/common/include \
  	$(PV_TOP)/engines/author/test/src/single_core \
- 	$(PV_TOP)/engines/author/test/config/linux_nj \
+ 	$(PV_TOP)/engines/author/test/config/android \
  	$(PV_TOP)/pvmi/pvmf/include \
  	$(PV_TOP)/nodes/common/include \
  	$(PV_TOP)/extern_libs_v2/khronos/openmax/include \
diff --git a/engines/author/test/build/linux_nj/local.mk b/engines/author/test/build/android/local.mk
similarity index 90%
rename from engines/author/test/build/linux_nj/local.mk
rename to engines/author/test/build/android/local.mk
index 52563a4..a2bd5a9 100644
--- a/engines/author/test/build/linux_nj/local.mk
+++ b/engines/author/test/build/android/local.mk
@@ -10,7 +10,7 @@
 #XCXXFLAGS += $(FLAG_COMPILE_WARNINGS_AS_ERRORS)
 XCPPFLAGS += -D_IMOTION_SPECIFIC_UT_DISABLE
 
-XINCDIRS +=  ../../../../common/include ../../src/single_core ../../config/linux_nj ../../../../../pvmi/pvmf/include ../../../../../nodes/common/include  ../../../../../extern_libs_v2/khronos/openmax/include
+XINCDIRS +=  ../../../../common/include ../../src/single_core ../../config/android ../../../../../pvmi/pvmf/include ../../../../../nodes/common/include  ../../../../../extern_libs_v2/khronos/openmax/include
 
 
 
diff --git a/engines/author/test/config/linux_nj/test_pv_author_engine_config.h b/engines/author/test/config/android/test_pv_author_engine_config.h
similarity index 96%
rename from engines/author/test/config/linux_nj/test_pv_author_engine_config.h
rename to engines/author/test/config/android/test_pv_author_engine_config.h
index d2b7754..cfdfbd0 100644
--- a/engines/author/test/config/linux_nj/test_pv_author_engine_config.h
+++ b/engines/author/test/config/android/test_pv_author_engine_config.h
@@ -36,6 +36,7 @@
 #define KYUVTestInput _STRLIT("yuvtestinput.yuv")
 #define KH263TestInput _STRLIT("h263testinput.h263")
 #define KAMRTestInput _STRLIT("amrtestinput.amr")
+#define KAMRWBTestInput _STRLIT("amrwbtestinput.awb")
 #define KAACADIFTestInput _STRLIT("aac_adif.aacadif")
 #define KAACADTSTestInput _STRLIT("aac_adts.aacadts")
 #define KH264TestInput _STRLIT("h264testinput.h264")
@@ -45,13 +46,14 @@
 
 // Output files
 #define KAMRInputAOnly3gpTestOutput _STRLIT("amr_in_a_only_test.3gp")
-#define KAMRInputAOnlyMp4TestOutput _STRLIT("amr_in_a_only_test.3gp")
+#define KAMRWBInputAOnly3gpTestOutput _STRLIT("amrwb_in_a_only_test.3gp")
 #define KH263InputVOnly3gpTestOutput _STRLIT("h263_in_v_only_test.3gp")
 #define KAMRYUVInputAV3gpTestOutput _STRLIT("amr_yuv_in_av_test.3gp")
 #define KAMRH263InputAV3gpTestOutput _STRLIT("amr_h263_in_av_test.3gp")
 #define KAMRYUVInputAVMp4TestOutput _STRLIT("amr_yuv_in_av_test.3gp")
 #define KAMRM4VInputAVMp4TestOutput _STRLIT("amr_m4v_in_av_test.3gp")
 #define KFOAOnlyAMRTestOutput _STRLIT("amr_testoutput.amr")
+#define KFOAOnlyAMRWBTestOutput _STRLIT("amrwb_testoutput.awb")
 #define KFOAOnlyAACADIFTestOutput _STRLIT("aac_adif_output.aac")
 #define KFOAOnlyAACADTSTestOutput _STRLIT("aac_adts_output.aac")
 #define KH264AMRInputAVMp4TestTestOutput _STRLIT("h264_amr_in_av_test.3gp")
diff --git a/engines/author/test/src/pvaetest.cpp b/engines/author/test/src/pvaetest.cpp
index 69dd173..f06683f 100644
--- a/engines/author/test/src/pvaetest.cpp
+++ b/engines/author/test/src/pvaetest.cpp
@@ -39,7 +39,7 @@
 #include "test_pv_mediainput_author_engine.h"
 #endif
 
-#ifdef USE_OMX_ENC_NODE
+#if USE_OMX_ENC_NODE
 #include "omx_core.h"
 #endif
 
@@ -59,6 +59,7 @@
 const uint8 KH263VideoProfile = 0;
 const uint8 KH263VideoLevel = 10;
 const uint32 KAudioBitrate = 12200;
+const uint32 KAACAudioBitrate = 64000;
 const uint32 KAudioTimescale = 8000;
 const uint32 KAudioNumChannels = 1;
 const uint32 KTextTimescale = 90000;
@@ -344,6 +345,18 @@
                     (const char*)iOutputFileName.get_cstr(), iAudioInputType, iVideoInputType, iTextInputType,
                     iComposerMimeType.get_cstr(), iAudioEncoderMimeType.get_cstr(), iVideoEncoderMimeType.get_cstr(),  iTextEncoderMimeType.get_cstr(), iAVTConfig, false, KTestDuration);
             break;
+        case AMRWB_Input_AOnly_3gpTest:
+            fprintf(iStdOut, "AMR-WB to A-Only .3gp Test\n");
+            iCurrentTest = new pvauthor_async_test_miscellaneous(testparam, (const char*)iInputFileNameAudio.get_cstr(), (const char*)iInputFileNameVideo.get_cstr(), (const char*)iInputFileNameText.get_cstr(),
+                    (const char*)iOutputFileName.get_cstr(), iAudioInputType, iVideoInputType, iTextInputType,
+                    iComposerMimeType.get_cstr(), iAudioEncoderMimeType.get_cstr(), iVideoEncoderMimeType.get_cstr(),  iTextEncoderMimeType.get_cstr(), iAVTConfig, false, KTestDuration);
+            break;
+        case AMRWB_FOutput_Test:
+            fprintf(iStdOut, "AMR-WB Input to .awb Test\n");
+            iCurrentTest = new pvauthor_async_test_miscellaneous(testparam, (const char*)iInputFileNameAudio.get_cstr(), (const char*)iInputFileNameVideo.get_cstr(), (const char*)iInputFileNameText.get_cstr(),
+                    (const char*)iOutputFileName.get_cstr(), iAudioInputType, iVideoInputType, iTextInputType,
+                    iComposerMimeType.get_cstr(), iAudioEncoderMimeType.get_cstr(), iVideoEncoderMimeType.get_cstr(),  iTextEncoderMimeType.get_cstr(), iAVTConfig, false, KTestDuration);
+            break;
         case ErrorHandling_WrongTextInputFileNameTest:
             fprintf(iStdOut, "ErrorHandling_WrongTextInputFileNameTest Test\n");
             iCurrentTest = new pvauthor_async_compressed_test_errorhandling(testparam, (const char*)iInputFileNameAudio.get_cstr(), (const char*)iInputFileNameVideo.get_cstr(), (const char*)iInputFileNameText.get_cstr(),
@@ -424,12 +437,18 @@
                     iComposerMimeType.get_cstr(), iAudioEncoderMimeType.get_cstr(), iVideoEncoderMimeType.get_cstr(),  iTextEncoderMimeType.get_cstr(), iAVTConfig, false, iAuthoringTime);
             break;
 
+        case AMR_FileOutput_Test_UsingExternalFileHandle:
+            fprintf(iStdOut, "AMR Input to .amr using external file handle Test\n");
+            iCurrentTest = new pvauthor_async_test_miscellaneous(testparam, (const char*)iInputFileNameAudio.get_cstr(), (const char*)iInputFileNameVideo.get_cstr(), (const char*)iInputFileNameText.get_cstr(),
+                    (const char*)iOutputFileName.get_cstr(), iAudioInputType, iVideoInputType, iTextInputType,
+                    iComposerMimeType.get_cstr(), iAudioEncoderMimeType.get_cstr(), iVideoEncoderMimeType.get_cstr(),  iTextEncoderMimeType.get_cstr(), iAVTConfig, false, KTestDuration, true);
+            break;
+
         default:
             iCurrentTest = NULL;
             break;
     }
 }
-
 void PVAuthorEngineTest::CompleteTest(test_case &aTC)
 {
     // Print out the result for this test case
@@ -1482,7 +1501,7 @@
 //Depending on the Test Nos, check the validity of input and output files extensions as specified in command line
 //Also set the AVTConfig param by loading the contents of audio and video config files
 //This function is used only for Test No 0 to CompressedNormalTestEnd-1
-bool CheckSourceAndOutputFiles(cmd_line* aCommandLine, int32 firsttest, int32 lasttest, OSCL_HeapString<OsclMemAllocator> &aInputAudioFileName, OSCL_HeapString<OsclMemAllocator> &aInputVideoFileName, OSCL_HeapString<OsclMemAllocator> &aInputTextFileName, OSCL_HeapString<OsclMemAllocator> &aOutputFileName, AVTConfig aAVTConfig, OSCL_HeapString<OsclMemAllocator> &audioconfigfilename, OSCL_HeapString<OsclMemAllocator> &videoconfigfilename, FILE* file)
+bool CheckSourceAndOutputFiles(cmd_line* aCommandLine, int32 firsttest, int32 lasttest, OSCL_HeapString<OsclMemAllocator> &aInputAudioFileName, OSCL_HeapString<OsclMemAllocator> &aInputVideoFileName, OSCL_HeapString<OsclMemAllocator> &aInputTextFileName, OSCL_HeapString<OsclMemAllocator> &aOutputFileName, AVTConfig &aAVTConfig, OSCL_HeapString<OsclMemAllocator> &audioconfigfilename, OSCL_HeapString<OsclMemAllocator> &videoconfigfilename, FILE* file)
 {
     bool bAudioTest = false;//To track if the test is Audio
     bool bVideoTest = false;//To track if the test is Video
@@ -1496,6 +1515,7 @@
         case AMR_H263_Input_AV_3gpTest:
         case AMR_YUV_Input_AV_M4V_AMR_Output_3gpTest:
         case H264_AMR_Input_AV_3gpTest:
+        case AMR_FileOutput_Test_UsingExternalFileHandle:
             //Longetivity Tests
         case AMR_TEXT_Input_AT_3gp_LongetivityTest:
         case AMR_YUV_TEXT_Input_AVT_3gp_LongetivityTest:
@@ -1506,6 +1526,17 @@
                 return false;
             }
             break;
+
+        case AMRWB_Input_AOnly_3gpTest:
+        case AMRWB_FOutput_Test:
+            bAudioTest = true;
+            if (!(oscl_strstr(aInputAudioFileName.get_cstr(), ".awb") != NULL || oscl_strstr(aInputAudioFileName.get_cstr(), ".AWB") != NULL))
+            {
+                fprintf(file, "  Input Filename incorrect!!! TestNo:%d - %d needs Input File: -audio <xxx>.awb\n\n", firsttest, lasttest);
+                return false;
+            }
+            break;
+
         case AACADIF_FOutput_Test:
             bAudioTest = true;
             if (!(oscl_strstr(aInputAudioFileName.get_cstr(), ".aacadif") != NULL || oscl_strstr(aInputAudioFileName.get_cstr(), ".AACADIF") != NULL))
@@ -1678,7 +1709,7 @@
     OsclErrorTrap::Init();
     OsclMem::Init();
 
-#ifdef USE_OMX_ENC_NODE
+#if USE_OMX_ENC_NODE
     OMX_Init();
 #endif
 
@@ -1705,7 +1736,7 @@
     {
         fprintf(file, "Error!  Leave %d\n", err);
     }
-#ifdef USE_OMX_ENC_NODE
+#if USE_OMX_ENC_NODE
     OMX_Deinit();
 #endif
     //Cleanup
@@ -2030,6 +2061,107 @@
     }
 }
 
+//get audio encoder type from arguments
+// -encA 0: AMR-NB
+//       1: AMR-WB
+//       2: AAC-ADIF
+//       3: AAC-ADTS
+//       4: AAC-MPEG4_AUDIO
+
+void FindAudioEncoder(cmd_line* command_line, OSCL_HeapString<OsclMemAllocator>& aAudioEncoderInfo, FILE *aFile)
+{
+    aAudioEncoderInfo = SOURCENAME_PREPEND_STRING;
+    aAudioEncoderInfo += KAMRNbEncMimeType;
+
+    int cmdArgIndex = 0;
+    bool cmdline_iswchar = command_line->is_wchar();
+
+    int count = command_line->get_count();
+
+    // Search for the "-encA" argument
+    for (int ii = 0; ii < count; ii++)
+    {
+        char argstr[128];
+
+        // Convert to UTF8 if necessary
+        if (cmdline_iswchar)
+        {
+            oscl_wchar* argwstr = NULL;
+            command_line->get_arg(ii, argwstr);
+            oscl_UnicodeToUTF8(argwstr, oscl_strlen(argwstr), argstr, 128);
+            argstr[127] = '\0';
+        }
+        else
+        {
+            char* tmpargstr = NULL;
+            command_line->get_arg(ii, tmpargstr);
+            uint32 len = oscl_strlen(tmpargstr);
+            oscl_strncpy(argstr, tmpargstr, len);
+            argstr[len] = '\0';
+        }
+
+        // Do the string compare
+        if (oscl_strcmp(argstr, "-help") == 0)
+        {
+            fprintf(aFile, "Audio Encoder Type option. Default is AMRNb:\n");
+            fprintf(aFile, "  -encA encodertype\n");
+            fprintf(aFile, "  specifies the encoder to be used for authoring\n  0:AMRNb\n  1:AMRWb\n  2:AAC_ADIF\n 3:AAC_ADTS\n 4:AAC MPEG4\n");
+            fprintf(aFile, "  e.g -encA 0 \n\n");
+        }
+        else if (oscl_strcmp(argstr, "-encA") == 0)
+        {
+            cmdArgIndex = ++ii;
+            break;
+        }
+    }
+
+    if (cmdArgIndex > 0)
+    {
+        uint32 encType = 0;
+
+        // Convert to UTF8 if necessary
+        if (cmdline_iswchar)
+        {
+            oscl_wchar* cmdArg;
+            command_line->get_arg(cmdArgIndex, cmdArg);
+            char tmpstr[3];
+            oscl_UnicodeToUTF8(cmdArg, oscl_strlen(cmdArg), tmpstr, 3);
+            tmpstr[2] = '\0';
+            PV_atoi(tmpstr, 'd', 1, encType);
+        }
+        else
+        {
+            char* cmdArg = NULL;
+            command_line->get_arg(cmdArgIndex, cmdArg);
+            PV_atoi(cmdArg, 'd', 1, encType);
+
+        }
+
+        switch (encType)
+        {
+            case 0:
+                aAudioEncoderInfo = KAMRNbEncMimeType;
+                break;
+            case 1:
+                aAudioEncoderInfo = KAMRWbEncMimeType;
+                break;
+            case 2:
+                aAudioEncoderInfo = KAACADIFEncMimeType;
+                break;
+            case 3:
+                aAudioEncoderInfo = KAACADTSEncMimeType;
+                break;
+            case 4:
+                aAudioEncoderInfo = KAACMP4EncMimeType;
+                break;
+            default:
+                fprintf(aFile, "Encoder Type not supported\n Using AMR-NB encoder\n");
+                break;
+        }
+
+    }
+}
+
 bool FindAuthoringMode(cmd_line* command_line, FILE *aFile)
 {
     bool iAuthoringMode = false;
@@ -2087,6 +2219,10 @@
     {
         compType = KAMRNbComposerMimeType;
     }
+    else if (oscl_strstr(aFileName.get_str(), ".awb"))
+    {
+        compType = KAMRWBComposerMimeType;
+    }
     else
     {
         fprintf(aFile, "\n\nNo output file specified\n, Using default MP4 Composer\n");
@@ -2205,6 +2341,7 @@
     OSCL_HeapString<OsclMemAllocator> filenameinfo;
     OSCL_HeapString<OsclMemAllocator> outputfilenameinfo;
     OSCL_HeapString<OsclMemAllocator> videoencoderinfo;
+    OSCL_HeapString<OsclMemAllocator> audioencoderinfo;
     OSCL_HeapString<OsclMemAllocator> configfileinfo;
     PVMFFormatType inputformattype ;
     PVMediaInputAuthorEngineTestParam testparam;
@@ -2213,6 +2350,7 @@
     FindSourceFile(aCommandLine, filenameinfo, inputformattype, file);
     FindOutputFile(aCommandLine, outputfilenameinfo, file);
     FindVideoEncoder(aCommandLine, videoencoderinfo, file);
+    FindAudioEncoder(aCommandLine, audioencoderinfo, file);
 
     testparam.iFirstTest = aFirstTest;
     testparam.iLastTest = aLastTest;
@@ -2221,7 +2359,7 @@
     testparam.iMediainputParam.iIPFileInfo = filenameinfo;
     testparam.iMediainputParam.iOPFileInfo = outputfilenameinfo;
     testparam.iMediainputParam.iVideoEncInfo = videoencoderinfo;
-    testparam.iMediainputParam.iAudioEncInfo = KAMRNbEncMimeType;
+    testparam.iMediainputParam.iAudioEncInfo = audioencoderinfo; //KAMRNbEncMimeType;
     testparam.iMediainputParam.iComposerInfo = FindComposerType(outputfilenameinfo, file);
 
     //setting the default configuration info
@@ -2254,8 +2392,8 @@
             && (PVMediaInput_ErrorHandling_Test_WrongIPFileName != aFirstTest))
     {
         fprintf(file, "Begin test with the following parameters:\
-		\nInput File Name : %s\nOutput File Name: %s,\nVideo Encoder: %s,\nAudio Encoder: %s,\
-		\nComposer: %s\n", testparam.iMediainputParam.iIPFileInfo.get_cstr(), testparam.iMediainputParam.iOPFileInfo.get_cstr(),
+                \nInput File Name : %s\nOutput File Name: %s,\nVideo Encoder: %s,\nAudio Encoder: %s,\
+                \nComposer: %s\n", testparam.iMediainputParam.iIPFileInfo.get_cstr(), testparam.iMediainputParam.iOPFileInfo.get_cstr(),
                 testparam.iMediainputParam.iVideoEncInfo.get_cstr(), testparam.iMediainputParam.iAudioEncInfo.get_cstr(),
                 testparam.iMediainputParam.iComposerInfo.get_cstr());
     }
@@ -2324,6 +2462,7 @@
         FindSourceFile(command_line, filenameinfo, (PVMFFormatType&)formaterr, file);
         FindOutputFile(command_line, filenameinfo, file);
         FindVideoEncoder(command_line, filenameinfo, file);
+        FindAudioEncoder(command_line, filenameinfo, file);
         FindAuthoringTime(command_line, (uint32&)err, file);
 
         fprintf(file, "NO CMD LINE ARGS WERE REQUIRED TO RUN COMPRESSED ERROR HANDLING TESTS [test range from:%d to %d]\n\n", KCompressed_Errorhandling_TestBegin, KCompressed_Errorhandling_TestEnd);
diff --git a/engines/author/test/src/single_core/pvaetest_node_config.h b/engines/author/test/src/single_core/pvaetest_node_config.h
index a7fa5d3..9446738 100644
--- a/engines/author/test/src/single_core/pvaetest_node_config.h
+++ b/engines/author/test/src/single_core/pvaetest_node_config.h
@@ -30,68 +30,79 @@
 #ifndef PVAETESTINPUT_H_INCLUDED
 #include "pvaetestinput.h"
 #endif
-#ifndef PVMFAMRENCNODE_EXTENSION_H_INCLUDED
-#include "pvmfamrencnode_extension.h"
+#ifndef PVMF_AUDIO_ENCNODE_EXTENSION_H_INCLUDED
+#include "pvmf_audio_encnode_extension.h"
 #endif
-
 #ifndef TEST_PV_AUTHOR_ENGINE_TYPEDEFS_H
 #include "test_pv_author_engine_typedefs.h"
 #endif
 
 extern const uint32 KNum20msFramesPerChunk;
 extern const uint32 KAudioBitrate;
-
+extern const uint32 KAACAudioBitrate;
 
 class PVAETestNodeConfig
 {
     public:
-        static bool ConfigureAudioEncoder(PVInterface* aInterface, uint32 aAudioBitrate = 0)
+        static bool ConfigureAudioEncoder(PVInterface* aInterface, const PvmfMimeString& aMimeType, uint32 aAudioBitrate = 0)
         {
             if (!aInterface)
                 return true;
 
             PVInterface* myInterface;
-            if (!aInterface->queryInterface(PVAMREncExtensionUUID, myInterface))
+
+            if (!aInterface->queryInterface(PVAudioEncExtensionUUID, myInterface))
                 return false;
 
-            PVAMREncExtensionInterface* config = OSCL_STATIC_CAST(PVAMREncExtensionInterface*, aInterface);
-            config->SetMaxNumOutputFramesPerBuffer(KNum20msFramesPerChunk);
+            PVAudioEncExtensionInterface* config = OSCL_STATIC_CAST(PVAudioEncExtensionInterface*, aInterface);
 
-            uint32 audioBitrate = aAudioBitrate;
+            if (aMimeType.get_cstr() == (char*)KAMRNbEncMimeType || aMimeType.get_cstr() == (char*)KAMRWbEncMimeType)
+            {
+                config->SetMaxNumOutputFramesPerBuffer(KNum20msFramesPerChunk);
+                uint32 audioBitrate = aAudioBitrate;
 
-            if (audioBitrate == 0)
-            {
-                audioBitrate = KAudioBitrate;
+                if (audioBitrate == 0)
+                {
+                    audioBitrate = KAudioBitrate;
+                }
+
+                switch (audioBitrate)
+                {
+                    case 4750:
+                        config->SetOutputBitRate(GSM_AMR_4_75);
+                        break;
+                    case 5150:
+                        config->SetOutputBitRate(GSM_AMR_5_15);
+                        break;
+                    case 5900:
+                        config->SetOutputBitRate(GSM_AMR_5_90);
+                        break;
+                    case 6700:
+                        config->SetOutputBitRate(GSM_AMR_6_70);
+                        break;
+                    case 7400:
+                        config->SetOutputBitRate(GSM_AMR_7_40);
+                        break;
+                    case 7950:
+                        config->SetOutputBitRate(GSM_AMR_7_95);
+                        break;
+                    case 10200:
+                        config->SetOutputBitRate(GSM_AMR_10_2);
+                        break;
+                    case 12200:
+                        config->SetOutputBitRate(GSM_AMR_12_2);
+                        break;
+                    default:
+                        return false;
+                }
             }
-            switch (audioBitrate)
+            else if (aMimeType == KAACADIFEncMimeType || aMimeType == KAACADTSEncMimeType)
             {
-                case 4750:
-                    config->SetOutputBitRate(GSM_AMR_4_75);
-                    break;
-                case 5150:
-                    config->SetOutputBitRate(GSM_AMR_5_15);
-                    break;
-                case 5900:
-                    config->SetOutputBitRate(GSM_AMR_5_90);
-                    break;
-                case 6700:
-                    config->SetOutputBitRate(GSM_AMR_6_70);
-                    break;
-                case 7400:
-                    config->SetOutputBitRate(GSM_AMR_7_40);
-                    break;
-                case 7950:
-                    config->SetOutputBitRate(GSM_AMR_7_95);
-                    break;
-                case 10200:
-                    config->SetOutputBitRate(GSM_AMR_10_2);
-                    break;
-                case 12200:
-                    config->SetOutputBitRate(GSM_AMR_12_2);
-                    break;
-                default:
-                    return false;
+                config->SetOutputBitRate(KAACAudioBitrate);
+                //config->SetOutputNumChannel();  do not set, use the input ones
+                //config->SetOutputSamplingRate();
             }
+
             return true;
         }
 };
diff --git a/engines/author/test/src/single_core/pvaetestinput.cpp b/engines/author/test/src/single_core/pvaetestinput.cpp
index 656f2d0..bb78cb8 100644
--- a/engines/author/test/src/single_core/pvaetestinput.cpp
+++ b/engines/author/test/src/single_core/pvaetestinput.cpp
@@ -73,6 +73,7 @@
         case PCM16_FILE:
         case YUV_WRONG_FILE:
         case TEXT_FILE:
+        case AMRWB_IETF_FILE:
             return true;
 
         case M4V_FILE:
@@ -98,6 +99,7 @@
         case PCM16_FILE:
         case YUV_WRONG_FILE:
         case TEXT_FILE:
+        case AMRWB_IETF_FILE:
             status = CreateMIOInputNode(aType, aFileName, iAVTConfig);
             break;
 
@@ -128,6 +130,7 @@
         case PCM16_FILE:
         case YUV_WRONG_FILE:
         case TEXT_FILE:
+        case AMRWB_IETF_FILE:
             if (iNode)
                 PvmfMediaInputNodeFactory::Delete(iNode);
             if (iMediaInput)
@@ -225,6 +228,18 @@
             iSettings.iNum20msFramesPerChunk = KNum20msFramesPerChunk;
             break;
 
+        case AMRWB_IETF_FILE:
+            if (aFileName.get_size() == 0)
+            {
+                iSettings.iFileName = KAMRWBTestInput;
+            }
+            iSettings.iMediaFormat = PVMF_MIME_AMRWB_IETF;
+            iSettings.iLoopInputFile = iAVTConfig.iLoopingEnable;
+            iSettings.iSamplingFrequency = 16000; //AMR-WB is always sampled at 16KHz
+            iSettings.iNumChannels = 1; //AMR-WB is always mono
+            iSettings.iNum20msFramesPerChunk = KNum20msFramesPerChunk;
+            break;
+
         case AAC_ADIF_FILE:
             if (aFileName.get_size() == 0)
             {
@@ -248,7 +263,6 @@
             iSettings.iNum20msFramesPerChunk = KNum20msFramesPerChunk;
             break;
 
-
         case TEXT_FILE:
             if (aFileName.get_size() == 0)
             {
diff --git a/engines/author/test/src/single_core/pvaetestinput.h b/engines/author/test/src/single_core/pvaetestinput.h
index 24a9bf9..1608093 100644
--- a/engines/author/test/src/single_core/pvaetestinput.h
+++ b/engines/author/test/src/single_core/pvaetestinput.h
@@ -114,6 +114,7 @@
     , SYMBIAN_DEV_SOUND
     , YUV_WRONG_FILE //just introduced for error handling scenarios
     , TEXT_FILE
+    , AMRWB_IETF_FILE
 } PVAETestInputType;
 
 #define ARRAY_SIZE	512
diff --git a/engines/author/test/src/test_pv_author_engine_testset1.cpp b/engines/author/test/src/test_pv_author_engine_testset1.cpp
index 90f9120..fe27da2 100644
--- a/engines/author/test/src/test_pv_author_engine_testset1.cpp
+++ b/engines/author/test/src/test_pv_author_engine_testset1.cpp
@@ -121,6 +121,8 @@
         case AMR_YUV_TEXT_Input_AVT_3gp_LongetivityTest:
         case AMR_TEXT_Input_AT_3gpTest:
         case AMR_YUV_TEXT_Input_AVT_Mp4Test:
+        case AMR_FileOutput_Test_UsingExternalFileHandle:
+
             PVLOGGER_LOGMSG(PVLOGMSG_INST_REL, iLogger, PVLOGMSG_DEBUG,
                             (0, "pvauthor_async_test_miscellaneous::CreateAudioTestInput: AMR input"));
             if (testInput.IsTestInputTypeSupported(SYMBIAN_DEV_SOUND))
@@ -135,6 +137,22 @@
             }
             break;
 
+        case AMRWB_Input_AOnly_3gpTest:
+        case AMRWB_FOutput_Test:
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_REL, iLogger, PVLOGMSG_DEBUG,
+                            (0, "pvauthor_async_test_miscellaneous::CreateAudioTestInput: AMR-WB input"));
+            if (testInput.IsTestInputTypeSupported(SYMBIAN_DEV_SOUND))
+            {
+                iAudioInputType = SYMBIAN_DEV_SOUND;
+                status = testInput.CreateInputNode(SYMBIAN_DEV_SOUND, iInputFileNameAudio, iAVTConfig);
+            }
+            else if (testInput.IsTestInputTypeSupported(AMRWB_IETF_FILE))
+            {
+                iAudioInputType = AMRWB_IETF_FILE;
+                status = testInput.CreateInputNode(AMRWB_IETF_FILE, iInputFileNameAudio, iAVTConfig);
+            }
+            break;
+
         case AACADIF_FOutput_Test:
             PVLOGGER_LOGMSG(PVLOGMSG_INST_REL, iLogger, PVLOGMSG_DEBUG,
                             (0, "pvauthor_async_test_miscellaneous::CreateAudioTestInput: AAC-ADIF input"));
@@ -155,6 +173,7 @@
                 status = testInput.CreateInputNode(AAC_ADTS_FILE, iInputFileNameAudio, iAVTConfig);
             }
             break;
+
         default:
         {
             PVLOGGER_LOGMSG(PVLOGMSG_INST_REL, iLogger, PVLOGMSG_DEBUG,
@@ -329,13 +348,20 @@
         case AMR_TEXT_Input_AT_3gpTest:
         case YUV_TEXT_Input_VT_3gpTest:
         case AMR_YUV_TEXT_Input_AVT_Mp4Test:
+
+        case AMRWB_Input_AOnly_3gpTest:
             iComposerMimeType = K3gpComposerMimeType;
             break;
 
         case AMR_FOutput_Test:
+        case AMR_FileOutput_Test_UsingExternalFileHandle:
             iComposerMimeType = KAMRNbComposerMimeType;
             break;
 
+        case AMRWB_FOutput_Test:
+            iComposerMimeType = KAMRWBComposerMimeType;
+            break;
+
         case AACADIF_FOutput_Test:
             iComposerMimeType = KAACADIFComposerMimeType;
             break;
@@ -387,12 +413,20 @@
     switch (iTestCaseNum)
     {
         case AMR_FOutput_Test:
+        case AMR_FileOutput_Test_UsingExternalFileHandle:
             if (iOutputFileName == NULL)
             {
                 iOutputFileName = KFOAOnlyAMRTestOutput;
             }
             break;
 
+        case AMRWB_FOutput_Test:
+            if (iOutputFileName == NULL)
+            {
+                iOutputFileName = KFOAOnlyAMRWBTestOutput;
+            }
+            break;
+
         case AACADIF_FOutput_Test:
             if (iOutputFileName == NULL)
             {
@@ -408,7 +442,10 @@
             }
             break;
         default:
-            if (!((iComposerMimeType == KAMRNbComposerMimeType) || (iComposerMimeType == KAACADTSComposerMimeType) || (iComposerMimeType == KAACADIFComposerMimeType)))
+            if (!((iComposerMimeType == KAMRNbComposerMimeType) ||
+                    (iComposerMimeType == KAMRWBComposerMimeType) ||
+                    (iComposerMimeType == KAACADTSComposerMimeType) ||
+                    (iComposerMimeType == KAACADIFComposerMimeType)))
             {
                 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_DEBUG, (0, "pvauthor_async_test_miscellaneous::ConfigAmrAacComposer: AMR-AAC Composer not used in this test case"));
                 return true;
@@ -423,11 +460,34 @@
         return false;
     }
 
-    if (clipConfig->SetOutputFileName(iOutputFileName) != PVMFSuccess)
+    if (!iUseExtrnFileDesc)
     {
-        PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR,
-                        (0, "pvauthor_async_test_miscellaneous::ConfigAmrAacComposer: Error - SetOutputFileName failed"));
-        return false;
+        if (clipConfig->SetOutputFileName(iOutputFileName) != PVMFSuccess)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR,
+                            (0, "pvauthor_async_test_miscellaneous::ConfigAmrAacComposer: Error - SetOutputFileName failed"));
+            return false;
+        }
+    }
+    else
+    {
+
+        char* fname[ARRAY_SIZE];
+        oscl_UnicodeToUTF8(iOutputFileName.get_str(), iOutputFileName.get_size(), (char*)fname, ARRAY_SIZE);
+
+        FILE *fp = fopen((char*)fname, "w+b");
+        if (fp)
+        {
+            iFileHandle = OSCL_NEW(OsclFileHandle, (fp));
+            if (clipConfig->SetOutputFileDescriptor(iFileHandle) != PVMFSuccess)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR,
+                                (0, "pv_mediainput_async_test_opencomposestop::ConfigAmrComposer: Error - SetOutputFileName failed"));
+
+                return false;
+            }
+        }
+
     }
 
     return true;
@@ -505,8 +565,17 @@
                 iOutputFileName = KYUVAMRTEXTInputAVTMp4TestOutput;
             }
             break;
+        case AMRWB_Input_AOnly_3gpTest:
+            if (iOutputFileName == NULL)
+            {
+                iOutputFileName = KAMRWBInputAOnly3gpTestOutput;
+            }
+            break;
         default:
-            if (!(iComposerMimeType == KAMRNbComposerMimeType) && !(iComposerMimeType == KAACADTSComposerMimeType) && !(iComposerMimeType == KAACADIFComposerMimeType))
+            if (!(iComposerMimeType == KAMRNbComposerMimeType) &&
+                    !(iComposerMimeType == KAMRWBComposerMimeType) &&
+                    !(iComposerMimeType == KAACADTSComposerMimeType) &&
+                    !(iComposerMimeType == KAACADIFComposerMimeType))
             {
                 break;
             }
@@ -570,12 +639,18 @@
         case AMR_TEXT_Input_AT_3gpTest:
         case AMR_YUV_TEXT_Input_AVT_Mp4Test:
         case AMR_FOutput_Test:
+        case AMR_FileOutput_Test_UsingExternalFileHandle:
         case H264_AMR_Input_AV_3gpTest:
         case AMR_TEXT_Input_AT_3gp_LongetivityTest:
         case AMR_YUV_TEXT_Input_AVT_3gp_LongetivityTest:
             iAudioEncoderMimeType = KAMRNbEncMimeType;
             break;
 
+        case AMRWB_Input_AOnly_3gpTest:
+        case AMRWB_FOutput_Test:
+            iAudioEncoderMimeType = KAMRWbEncMimeType;
+            break;
+
         case AACADIF_FOutput_Test:
             iAudioEncoderMimeType = KAACADIFEncMimeType;
             break;
@@ -780,7 +855,7 @@
         return true;
     }
 
-    return PVAETestNodeConfig::ConfigureAudioEncoder(iAudioEncoderConfig);
+    return PVAETestNodeConfig::ConfigureAudioEncoder(iAudioEncoderConfig, iAudioEncoderMimeType);
 }
 
 
@@ -919,7 +994,13 @@
     }
 
     DeleteTestInputs();
+    fileserv.Close();
     iOutputFileName = NULL;
+    if (iFileHandle)
+    {
+        OSCL_DELETE(iFileHandle);
+        iFileHandle = NULL;
+    }
 }
 
 
diff --git a/engines/author/test/src/test_pv_author_engine_testset1.h b/engines/author/test/src/test_pv_author_engine_testset1.h
index 0973c73..9491f7c 100644
--- a/engines/author/test/src/test_pv_author_engine_testset1.h
+++ b/engines/author/test/src/test_pv_author_engine_testset1.h
@@ -37,7 +37,8 @@
                                           const char* aOutputFileName, PVAETestInputType aAudioInputType,
                                           PVAETestInputType aVideoInputType, PVAETestInputType aTextInputType,
                                           const char* aComposerMimeType, const char* aAudioEncoderMimeType, const char* aVideoEncoderMimeType,
-                                          const char* aTextEncoderMimeType, AVTConfig aAVTConfig, bool aPauseResumeEnable, uint32 aAuthoringTime)
+                                          const char* aTextEncoderMimeType, AVTConfig aAVTConfig, bool aPauseResumeEnable, uint32 aAuthoringTime,
+                                          bool aUseExtrnFileDesc = false)
 
                 : pvauthor_async_test_base(aTestParam)
 
@@ -61,9 +62,11 @@
                 , iPauseResumeEnable(aPauseResumeEnable)
                 , iAuthoringTime(aAuthoringTime)
                 , iAuthoringCounter(0)
+                , iUseExtrnFileDesc(aUseExtrnFileDesc)
 
         {
             iLogger = PVLogger::GetLoggerObject("pvauthor_async_test_miscellaneous");
+            iFileHandle = NULL;
 
             if (iAuthoringTime > 0)
             {
@@ -215,6 +218,9 @@
         uint32 iAuthoringTime;
         int iAuthoringCounter;
         uint32 iTestDuration;
+        bool iUseExtrnFileDesc;
+        OsclFileHandle *iFileHandle;
+        Oscl_FileServer fileserv;
 };
 
 #endif
diff --git a/engines/author/test/src/test_pv_author_engine_testset4.cpp b/engines/author/test/src/test_pv_author_engine_testset4.cpp
index 014eb16..291f57c 100644
--- a/engines/author/test/src/test_pv_author_engine_testset4.cpp
+++ b/engines/author/test/src/test_pv_author_engine_testset4.cpp
@@ -255,12 +255,20 @@
     switch (iTestCaseNum)
     {
         case AMR_FOutput_Test:
+        case AMR_FileOutput_Test_UsingExternalFileHandle:
             if (iOutputFileName == NULL)
             {
                 iOutputFileName = KFOAOnlyAMRTestOutput;
             }
             break;
 
+        case AMRWB_FOutput_Test:
+            if (iOutputFileName == NULL)
+            {
+                iOutputFileName = KFOAOnlyAMRWBTestOutput;
+            }
+            break;
+
         case AACADIF_FOutput_Test:
             if (iOutputFileName == NULL)
             {
@@ -277,7 +285,10 @@
             break;
 
         default:
-            if (!((iComposerMimeType == KAMRNbComposerMimeType) || (iComposerMimeType == KAACADTSComposerMimeType) || (iComposerMimeType == KAACADIFComposerMimeType)))
+            if (!((iComposerMimeType == KAMRNbComposerMimeType) ||
+                    (iComposerMimeType == KAMRWBComposerMimeType) ||
+                    (iComposerMimeType == KAACADTSComposerMimeType) ||
+                    (iComposerMimeType == KAACADIFComposerMimeType)))
             {
                 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_DEBUG, (0, "pvauthor_async_compressed_test_errorhandling::ConfigAmrAacComposer: AMR-AAC Composer not used in this test case"));
                 return true;
@@ -319,7 +330,10 @@
             break;
 
         default:
-            if (!(iComposerMimeType == KAMRNbComposerMimeType) && !(iComposerMimeType == KAACADTSComposerMimeType) && !(iComposerMimeType == KAACADIFComposerMimeType))
+            if (!(iComposerMimeType == KAMRNbComposerMimeType) &&
+                    !(iComposerMimeType == KAMRWBComposerMimeType) &&
+                    !(iComposerMimeType == KAACADTSComposerMimeType) &&
+                    !(iComposerMimeType == KAACADIFComposerMimeType))
             {
                 break;
             }
@@ -593,7 +607,7 @@
         return true;
     }
 
-    return PVAETestNodeConfig::ConfigureAudioEncoder(iAudioEncoderConfig);
+    return PVAETestNodeConfig::ConfigureAudioEncoder(iAudioEncoderConfig, iAudioEncoderMimeType);
 }
 
 ////////////////////////////////////////////////////////////////////////////
diff --git a/engines/author/test/src/test_pv_author_engine_testset5.cpp b/engines/author/test/src/test_pv_author_engine_testset5.cpp
index d2277b1..1b5f537 100644
--- a/engines/author/test/src/test_pv_author_engine_testset5.cpp
+++ b/engines/author/test/src/test_pv_author_engine_testset5.cpp
@@ -352,14 +352,35 @@
         return false;
     }
 
-    if (clipConfig->SetOutputFileName(iOutputFileName) != PVMFSuccess)
+    if (!iUseExtrnFileDesc)
     {
-        PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR,
-                        (0, "pv_mediainput_async_test_opencomposestop::ConfigAmrComposer: Error - SetOutputFileName failed"));
+        if (clipConfig->SetOutputFileName(iOutputFileName) != PVMFSuccess)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR,
+                            (0, "pv_mediainput_async_test_opencomposestop::ConfigAmrComposer: Error - SetOutputFileName failed"));
 
-        return false;
+            return false;
+        }
     }
+    else
+    {
+        char* fname[ARRAY_SIZE];
+        oscl_UnicodeToUTF8(iOutputFileName.get_str(), iOutputFileName.get_size(), (char*)fname, ARRAY_SIZE);
 
+        FILE *fp = fopen((char*)fname, "w+b");
+        if (fp)
+        {
+            iFileHandle = OSCL_NEW(OsclFileHandle, (fp));
+            if (clipConfig->SetOutputFileDescriptor(iFileHandle) != PVMFSuccess)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR,
+                                (0, "pv_mediainput_async_test_opencomposestop::ConfigAmrComposer: Error - SetOutputFileName failed"));
+
+                return false;
+            }
+        }
+
+    }
     return true;
 }
 
@@ -528,7 +549,7 @@
 
         }
 
-        if (!PVAETestNodeConfig::ConfigureAudioEncoder(iAudioEncoderConfig, iAudioBitrate))
+        if (!PVAETestNodeConfig::ConfigureAudioEncoder(iAudioEncoderConfig, iAudioEncoderMimeType, iAudioBitrate))
         {
             return false;
         }
@@ -651,8 +672,11 @@
 //	iMIOComponent.DeleteInputNode();
     iOutputFileName = NULL;
     iFileServer.Close();
-
-
+    if (iFileHandle)
+    {
+        OSCL_DELETE(iFileHandle);
+        iFileHandle = NULL;
+    }
 }
 
 
@@ -1273,6 +1297,7 @@
         break;
 
         case PVMediaInput_Open_Compose_Stop_Test:
+        case PVMediaInput_Open_Compose_Stop_Test_UsingExternalFileHandle:
         {
             if (config->SetFileSizeProgressReport(true, KFileSizeProgressFreq) != PVMFSuccess)
             {
@@ -1308,6 +1333,7 @@
     switch (iTestCaseNum)
     {
         case PVMediaInput_Open_Compose_Stop_Test:
+        case PVMediaInput_Open_Compose_Stop_Test_UsingExternalFileHandle:
         case KMaxFileSizeTest:
         {
             //iPendingCmds.push_back(PVAE_CMD_QUERY_INTERFACE);
diff --git a/engines/author/test/src/test_pv_author_engine_testset5.h b/engines/author/test/src/test_pv_author_engine_testset5.h
index 5b35482..8300aeb 100644
--- a/engines/author/test/src/test_pv_author_engine_testset5.h
+++ b/engines/author/test/src/test_pv_author_engine_testset5.h
@@ -32,7 +32,8 @@
             public PvmiConfigAndCapabilityCmdObserver
 {
     public:
-        pv_mediainput_async_test_opencomposestop(PVAuthorAsyncTestParam aTestParam, PVMediaInputTestParam aMediaParam, bool aPauseResumeEnable)
+        pv_mediainput_async_test_opencomposestop(PVAuthorAsyncTestParam aTestParam, PVMediaInputTestParam aMediaParam, bool aPauseResumeEnable,
+                bool aUseExtrnFileDesc = false)
                 : pvauthor_async_test_base(aTestParam)
                 , iOutputFileName(NULL)
                 , iInputFileName(NULL)
@@ -58,11 +59,13 @@
                 , iAudioBitrate(aMediaParam.iAudioBitrate)
                 , iFrameRate(aMediaParam.iFrameRate)
                 , iSamplingRate(aMediaParam.iSamplingRate)
+                , iUseExtrnFileDesc(aUseExtrnFileDesc)
 
         {
             OSCL_UNUSED_ARG(iAudioBitrate);
             OSCL_UNUSED_ARG(iFrameRate);
             OSCL_UNUSED_ARG(iSamplingRate);
+            iFileHandle = NULL;
 
             iLogger = PVLogger::GetLoggerObject("pv_mediainput_async_test_opencomposestop");
 
@@ -118,6 +121,7 @@
         // Methods to configure composers
         bool ConfigComposer();
         bool ConfigOutputFile();
+        OsclFileHandle *iFileHandle;
         bool ConfigMp43gpComposer();
 
         bool CapConfigSync();
@@ -194,6 +198,7 @@
         uint32					 iAudioBitrate;
         OsclFloat 				 iFrameRate;
         uint32					 iSamplingRate;
+        bool					 iUseExtrnFileDesc;
 
 };
 
diff --git a/engines/author/test/src/test_pv_author_engine_testset6.cpp b/engines/author/test/src/test_pv_author_engine_testset6.cpp
index b737821..9f9da46 100644
--- a/engines/author/test/src/test_pv_author_engine_testset6.cpp
+++ b/engines/author/test/src/test_pv_author_engine_testset6.cpp
@@ -362,7 +362,7 @@
 
         }
 
-        if (!PVAETestNodeConfig::ConfigureAudioEncoder(iAudioEncoderConfig))
+        if (!PVAETestNodeConfig::ConfigureAudioEncoder(iAudioEncoderConfig, iAudioEncoderMimeType))
         {
             return false;
         }
diff --git a/engines/author/test/src/test_pv_author_engine_testset7.cpp b/engines/author/test/src/test_pv_author_engine_testset7.cpp
index ab84e17..08da4b0 100644
--- a/engines/author/test/src/test_pv_author_engine_testset7.cpp
+++ b/engines/author/test/src/test_pv_author_engine_testset7.cpp
@@ -357,7 +357,7 @@
 
         }
 
-        if (!PVAETestNodeConfig::ConfigureAudioEncoder(iAudioEncoderConfig))
+        if (!PVAETestNodeConfig::ConfigureAudioEncoder(iAudioEncoderConfig, iAudioEncoderMimeType))
         {
             return false;
         }
diff --git a/engines/author/test/src/test_pv_author_engine_testset8.cpp b/engines/author/test/src/test_pv_author_engine_testset8.cpp
index 7024608..deb04e7 100644
--- a/engines/author/test/src/test_pv_author_engine_testset8.cpp
+++ b/engines/author/test/src/test_pv_author_engine_testset8.cpp
@@ -357,7 +357,7 @@
 
         }
 
-        if (!PVAETestNodeConfig::ConfigureAudioEncoder(iAudioEncoderConfig))
+        if (!PVAETestNodeConfig::ConfigureAudioEncoder(iAudioEncoderConfig, iAudioEncoderMimeType))
         {
             return false;
         }
diff --git a/engines/author/test/src/test_pv_author_engine_typedefs.h b/engines/author/test/src/test_pv_author_engine_typedefs.h
index 1863051..307a8ee 100644
--- a/engines/author/test/src/test_pv_author_engine_typedefs.h
+++ b/engines/author/test/src/test_pv_author_engine_typedefs.h
@@ -96,9 +96,6 @@
 #ifndef PVMF_COMPOSER_SIZE_AND_DURATION_H_INCLUDED
 #include "pvmf_composer_size_and_duration.h"
 #endif
-#ifndef PVAETEST_NODE_CONFIG_H_INCLUDED
-#include "pvaetest_node_config.h"
-#endif
 #ifndef TEST_PV_AUTHOR_ENGINE_CONFIG_H_INCLUDED
 #include "test_pv_author_engine_config.h"
 #endif
@@ -147,11 +144,14 @@
 //composer mime type
 #define K3gpComposerMimeType "/x-pvmf/ff-mux/3gp"
 #define KAMRNbComposerMimeType		"/x-pvmf/ff-mux/amr-nb"
+#define KAMRWBComposerMimeType		"/x-pvmf/ff-mux/amr-wb"
 #define KAACADIFComposerMimeType	"/x-pvmf/ff-mux/adif"
 #define KAACADTSComposerMimeType	"/x-pvmf/ff-mux/adts"
 
 //encoder mime type
 #define KAMRNbEncMimeType "/x-pvmf/audio/encode/amr-nb"
+#define KAMRWbEncMimeType "/x-pvmf/audio/encode/amr-wb"
+#define KAACMP4EncMimeType "/x-pvmf/audio/encode/X-MPEG4-AUDIO"
 #define KH263EncMimeType "/x-pvmf/video/encode/h263"
 #define KH264EncMimeType "/x-pvmf/video/encode/h264"
 #define KMp4EncMimeType "/x-pvmf/video/encode/mp4"
@@ -174,6 +174,7 @@
 extern const uint8 KH263VideoProfile;
 extern const uint8 KH263VideoLevel;
 extern const uint32 KAudioBitrate;
+extern const uint32 KAACAudioBitrate;
 extern const uint32 KAudioTimescale;
 extern const uint32 KAudioNumChannels;
 
@@ -223,45 +224,52 @@
     /*********** Compressed Tests Begin****************************/
     // Tests that take compressed inputs
     //3gp output file
-    AMR_Input_AOnly_3gpTest = 0,					//.amr
-    H263_Input_VOnly_3gpTest,						//.h263
-    AMR_YUV_Input_AV_3gpTest,						//.amr+.yuv
-    AMR_H263_Input_AV_3gpTest,						//.amr+.h263
+    AMR_Input_AOnly_3gpTest  = 0,						//.amr
+    H263_Input_VOnly_3gpTest = 1,						//.h263
+    AMR_YUV_Input_AV_3gpTest = 2,						//.amr+.yuv
+    AMR_H263_Input_AV_3gpTest = 3,						//.amr+.h263
 
-    H264_AMR_Input_AV_3gpTest,						//4 //.yuv
-    AMR_YUV_Input_AV_M4V_AMR_Output_3gpTest,						//.amr+.yuv
-    TEXT_Input_TOnly_3gpTest,						//6
-    AMR_TEXT_Input_AT_3gpTest,
-    YUV_TEXT_Input_VT_3gpTest,
-    AMR_YUV_TEXT_Input_AVT_Mp4Test,
+    H264_AMR_Input_AV_3gpTest = 4,						//.yuv
+    AMR_YUV_Input_AV_M4V_AMR_Output_3gpTest = 5,			//.amr+.yuv
+    TEXT_Input_TOnly_3gpTest = 6,
+    AMR_TEXT_Input_AT_3gpTest = 7,
+    YUV_TEXT_Input_VT_3gpTest = 8,
+    AMR_YUV_TEXT_Input_AVT_Mp4Test = 9,
 
-    K3GP_OUTPUT_TestEnd,							//10 placeholder
+    K3GP_OUTPUT_TestEnd = 10,								//placeholder
 
     //amr output file
-    AMR_FOutput_Test,								//11 //.amr
+    AMR_FOutput_Test = 11,								//.amr
 
-    AMR_OUTPUT_TestEnd,								//12 // placeholder
+    AMR_OUTPUT_TestEnd = 12,								// placeholder
 
     //aac output file
-    AACADIF_FOutput_Test,							//.aacadif
-    AACADTS_FOutput_Test,							//.aacadts
+    AACADIF_FOutput_Test = 13,							//.aacadif
+    AACADTS_FOutput_Test = 14,							//.aacadts
 
-    AAC_OUTPUT_TestEnd,								//15 // placeholder
+    AAC_OUTPUT_TestEnd = 15,								// placeholder
 
-    //ErrorHandling_WrongTextInputFileNameTest,		//Incorrect name of Text input file
+    //ErrorHandling_WrongTextInputFileNameTest,			//Incorrect name of Text input file
+    //amr output file
+    AMR_FileOutput_Test_UsingExternalFileHandle = 16,		//.amr
+    //3gp output file
+    AMRWB_Input_AOnly_3gpTest = 17,
 
-    CompressedNormalTestEnd,						//placeholder
+    //amr-wb output file
+    AMRWB_FOutput_Test = 18,
+
+    CompressedNormalTestEnd = 19,							//placeholder
 
     /*********** Compressed Longetivity Tests *********************/
     // tests that takes compressed inputs and run for long duration
     // The duration is configurable through command line argument
     CompressedLongetivityTestBegin = 100,			//placeholder
     //3gp output file
-    TEXT_Input_TOnly_3gp_LongetivityTest,			//.txt
-    AMR_TEXT_Input_AT_3gp_LongetivityTest,			//.amr+.txt
-    YUV_TEXT_Input_VT_3gp_LongetivityTest,			//103 //.txt+.yuv
-    AMR_YUV_TEXT_Input_AVT_3gp_LongetivityTest,		//.txt+.yuv +.amr
-    Compressed_LongetivityTestEnd,					//105 placeholder
+    TEXT_Input_TOnly_3gp_LongetivityTest = 101,			//.txt
+    AMR_TEXT_Input_AT_3gp_LongetivityTest = 102,			//.amr+.txt
+    YUV_TEXT_Input_VT_3gp_LongetivityTest = 103,			//.txt+.yuv
+    AMR_YUV_TEXT_Input_AVT_3gp_LongetivityTest = 104,		//.txt+.yuv +.amr
+    Compressed_LongetivityTestEnd = 105,					// placeholder
 
     /*********** Compressed Tests End******************************/
 
@@ -269,70 +277,70 @@
     // Test case that takes Uncompressed input through AVI File begin
 
     // AVI file must have RGB24, RGB12, YUV420 planar or PCM mono 8KHz data only
-    UnCompressed_NormalTestBegin = 200,				//placeholder
-    PVMediaInput_Open_Compose_Stop_Test  ,			//Use testinput.avi
-    PVMediaInput_Open_RealTimeCompose_Stop_Test,	//Real Time authoring
+    UnCompressed_NormalTestBegin = 200,					//placeholder
+    PVMediaInput_Open_Compose_Stop_Test = 201,			//Use testinput.avi
+    PVMediaInput_Open_RealTimeCompose_Stop_Test = 202,	//Real Time authoring
+    YUV_Input_VOnly_3gpTest = 203,						//.yuv
+    PCM16_Input_AOnly_3gpTest = 204,						//.pcm
+    PCM16_YUV_Input_AV_3gpTest = 205,						//.pcm+.yuv
+    H264_Input_VOnly_3gpTest = 206,						//.yuv
+    PCM16In_AMROut_Test = 207,							//.pcm//207
 
-    YUV_Input_VOnly_3gpTest,						//.yuv
-    PCM16_Input_AOnly_3gpTest,						//204 //.pcm
-    PCM16_YUV_Input_AV_3gpTest,						//205 //.pcm+.yuv
-    H264_Input_VOnly_3gpTest,						//.yuv
-    PCM16In_AMROut_Test,							//.pcm//207
-
-    KMaxFileSizeTest,								//.amr+.yuv
+    KMaxFileSizeTest = 208,								//.amr+.yuv
 
 #ifndef _IMOTION_SPECIFIC_UT_DISABLE
-    KIMotionAuthoringModeTest,						//.amr+.yuv
+    KIMotionAuthoringModeTest = 209,						//.amr+.yuv
 #endif
-    K3GPPDownloadModeTest,							//.amr+.yuv
-    K3GPPProgressiveDownloadModeTest,				//.amr+.yuv
+    K3GPPDownloadModeTest = 210,							//.amr+.yuv
+    K3GPPProgressiveDownloadModeTest = 211,				//.amr+.yuv
 
 #ifndef _IMOTION_SPECIFIC_UT_DISABLE
-    KIMotionDownloadModeTest,						//.amr+.yuv
+    KIMotionDownloadModeTest = 212,						//.amr+.yuv
 #endif
-    KMovieFragmentModeTest,
-    CapConfigTest,									//218
+    KMovieFragmentModeTest = 213,
+    CapConfigTest = 214,
 
-    PVMediaInput_Pause_Resume_Test,//219
+    PVMediaInput_Pause_Resume_Test = 215,
 
-    PVMediaInput_Reset_After_Create_Test,//220
-    PVMediaInput_Reset_After_Open_Test,//221
-    PVMediaInput_Reset_After_AddDataSource_Test,//222
-    PVMediaInput_Reset_After_SelectComposer_Test,//223
-    PVMediaInput_Reset_After_AddMediaTrack_Test,//224
-    PVMediaInput_Reset_After_Init_Test,//225
-    PVMediaInput_Reset_After_Start_Test,//226
-    PVMediaInput_Reset_After_Pause_Test,//227
-    PVMediaInput_Reset_After_Recording_Test,//228
-    PVMediaInput_Reset_After_Stop_Test,//229
+    PVMediaInput_Reset_After_Create_Test = 216,
+    PVMediaInput_Reset_After_Open_Test = 217,
+    PVMediaInput_Reset_After_AddDataSource_Test = 218,
+    PVMediaInput_Reset_After_SelectComposer_Test = 219,
+    PVMediaInput_Reset_After_AddMediaTrack_Test = 220,
+    PVMediaInput_Reset_After_Init_Test = 221,
+    PVMediaInput_Reset_After_Start_Test = 222,
+    PVMediaInput_Reset_After_Pause_Test = 223,
+    PVMediaInput_Reset_After_Recording_Test = 224,
+    PVMediaInput_Reset_After_Stop_Test = 225,
 
-    PVMediaInput_Delete_After_Create_Test,//230
-    PVMediaInput_Delete_After_Open_Test,//231
-    PVMediaInput_Delete_After_AddDataSource_Test,//232
-    PVMediaInput_Delete_After_SelectComposer_Test,//233
-    PVMediaInput_Delete_After_AddMediaTrack_Test,//234
-    PVMediaInput_Delete_After_Init_Test,//235
-    PVMediaInput_Delete_After_Start_Test,//236
-    PVMediaInput_Delete_After_Pause_Test,//237
-    PVMediaInput_Delete_After_Recording_Test,//238
-    PVMediaInput_Delete_After_Stop_Test,//239
+    PVMediaInput_Delete_After_Create_Test = 226,
+    PVMediaInput_Delete_After_Open_Test = 227,
+    PVMediaInput_Delete_After_AddDataSource_Test = 228,
+    PVMediaInput_Delete_After_SelectComposer_Test = 229,
+    PVMediaInput_Delete_After_AddMediaTrack_Test = 230,
+    PVMediaInput_Delete_After_Init_Test = 231,
+    PVMediaInput_Delete_After_Start_Test = 232,
+    PVMediaInput_Delete_After_Pause_Test = 233,
+    PVMediaInput_Delete_After_Recording_Test = 234,
+    PVMediaInput_Delete_After_Stop_Test = 235,
+    PVMediaInput_Open_Compose_Stop_Test_UsingExternalFileHandle = 236,
 
-    UnCompressed_NormalTestEnd,
+    UnCompressed_NormalTestEnd = 237,
 
     /********** Uncompressed Longetivity tests*********************/
-    UnCompressed_LongetivityTestBegin = 300,		//placeholder
-    AVI_Input_Longetivity_Test,						//301
-    KMaxFileSizeLongetivityTest,					//.amr+.yuv/302
+    UnCompressed_LongetivityTestBegin = 300,			//placeholder
+    AVI_Input_Longetivity_Test = 301,
+    KMaxFileSizeLongetivityTest = 302,					//.amr+.yuv/302
 #ifndef _IMOTION_SPECIFIC_UT_DISABLE
-    KIMotionAuthoringModeLongetivityTest,			//.amr+.yuv
+    KIMotionAuthoringModeLongetivityTest = 303,			//.amr+.yuv
 #endif
-    K3GPPDownloadModeLongetivityTest,				//.amr+.yuv
-    K3GPPProgressiveDownloadModeLongetivityTest,    //.amr+.yuv
+    K3GPPDownloadModeLongetivityTest = 304,				//.amr+.yuv
+    K3GPPProgressiveDownloadModeLongetivityTest = 305,  //.amr+.yuv
 #ifndef _IMOTION_SPECIFIC_UT_DISABLE
-    KIMotionDownloadModeLongetivityTest,			//307 //.amr+.yuv
+    KIMotionDownloadModeLongetivityTest = 306,			//.amr+.yuv
 #endif
-    KMovieFragmentModeLongetivityTest,				//308
-    UnCompressed_LongetivityTestEnd,
+    KMovieFragmentModeLongetivityTest = 307,
+    UnCompressed_LongetivityTestEnd = 308,
 
     /*********** UnCompressed Tests End****************************/
 
@@ -345,85 +353,85 @@
 
     // Error handling tests that takes compressed inputs
     KCompressed_Errorhandling_TestBegin = 400,
-    ErrorHandling_WrongTextInputFileNameTest,
-    ErrorHandling_MediaInputNodeStartFailed,
-    KCompressed_Errorhandling_TestEnd,
+    ErrorHandling_WrongTextInputFileNameTest = 401,
+    ErrorHandling_MediaInputNodeStartFailed = 402,
+    KCompressed_Errorhandling_TestEnd = 403,
 
     //Error handling tests that takes uncompressed inputs through avi files.
     KUnCompressed_Errorhandling_TestBegin = 500,
-    PVMediaInput_ErrorHandling_Test_WrongFormat,	//Use testinput_rgb16.avi
-    PVMediaInput_ErrorHandling_Test_WrongIPFileName,
-    ErrorHandling_WrongOutputPathTest,
-    ErrorHandling_VideoInitFailed,							// 504, //Video Encoder Init Failed
-    ErrorHandling_VideoEncodeFailed,						//Video Encoder Encode Failed
-    ErrorHandling_VideoEncode5FramesFailed,					//VideoEncNode Encode5Frames Failed
-    ErrorHandling_ComposerAddFragFailed,					//507, Composer AddMemFrag Failed
-    ErrorHandling_ComposerAddTrackFailed,					//Composer AddMemTrack Failed
-    ErrorHandling_AVCVideoEncodeFailed,						//AVCEncNode Encode Failed
-    ErrorHandling_AVCVideoEncode5FramesFailed,				//AVCEncNode Encode5Frames Failed
-    ErrorHandling_MediaInputNodeStopFailed,
-    ErrorHandling_AudioInitFailed,							//Audio Encoder(AMR) Init Failed
-    ErrorHandling_AudioEncodeFailed,						//513, Audio Encoder(AMR) Encode Failed
-    ErrorHandling_MediaInputNode_NoMemBuffer,				//514
-    ErrorHandling_MediaInputNode_Out_Queue_busy,			//515
-    ErrorHandling_MediaInputNode_large_time_stamp,						//516 MediaInputNode Error in time stamp for large value.
-    ErrorHandling_MediaInputNode_wrong_time_stamp_after_duration,		//517 MediaInputNode Error in time stamp for wrong value after duration of time.
-    ErrorHandling_MediaInputNode_zero_time_stamp,						//518 MediaInputNode Error in time stamp for zero value.
-    ErrorHandling_MediaInputNode_StateFailure_EPause_SendMIORequest,	//MediaInputNode Error in SendMIOioRequest().
-    ErrorHandling_MediaInputNode_StateFailure_CancelMIORequest,			//MediaInputNode Error in CancelMIORequest().
-    ErrorHandling_MediaInputNode_Corrupt_Video_InputData,				//MediaInputNode Corrupt the video input data.
-    ErrorHandling_MediaInputNode_Corrupt_Audio_InputData,				//MediaInputNode Corrupt the audio input data.
-    ErrorHandling_MediaInputNode_DataPath_Stall,						//MediaInputNode Stall the data path.
-    ErrorHandling_MP4Composer_AddTrack_PVMF_AMR_IETF,					//524 MP4ComposerNode Error in AddTrack() for PVMF_AMR_IETF.
-    ErrorHandling_MP4Composer_AddTrack_PVMF_3GPP_TIMEDTEXT,				//MP4ComposerNode Error in AddTrack() for PVMF_3GPP_TIMEDTEXT.
-    ErrorHandling_MP4Composer_AddTrack_PVMF_M4V,						//MP4ComposerNode Error in AddTrack() for PVMF_M4V.
-    ErrorHandling_MP4Composer_AddTrack_PVMF_H263,						//MP4ComposerNode Error in AddTrack() for PVMF_H263.
-    ErrorHandling_MP4Composer_AddTrack_PVMF_H264_MP4,					//MP4ComposerNode Error in AddTrack() for PVMF_H264_MP4.
-    ErrorHandling_MP4Composer_Create_FileParser,						//MP4ComposerNode Error in the creation of mp4 file parser.
-    ErrorHandling_MP4Composer_RenderToFile,								//MP4ComposerNode Error in the RenderToFile().
-    ErrorHandling_MP4Composer_FailAfter_FileSize,						//MP4ComposerNode Error after a particular file size is reached.
-    ErrorHandling_MP4Composer_FailAfter_Duration,						//MP4ComposerNode Error after a duration of some time.
-    ErrorHandling_MP4Composer_DataPathStall,							//MP4ComposerNode Stall the data path.
-    ErrorHandling_VideoEncodeNode_ConfigHeader,							//VideoEncodeNode Error in GetVolHeader().
-    ErrorHandling_VideoEncodeNode_DataPathStall_Before_ProcessingData,	//535 VideoEncodeNode Stall the data path before processing starts.
-    ErrorHandling_VideoEncodeNode_DataPathStall_After_ProcessingData,	//VideoEncodeNode Stall the data path post processing.
-    ErrorHandling_VideoEncodeNode_FailEncode_AfterDuration,				//VideoEncodeNode Error in encode after duration of time.
-    ErrorHandling_AudioEncodeNode_FailEncode_AfterDuration,				//AudioEncodeNode Error in encode operation after duration of time.
-    ErrorHandling_AudioEncodeNode_DataPathStall_Before_ProcessingData,	//AudioEncodeNode Stall data path before processing starts.
-    ErrorHandling_AudioEncodeNode_DataPathStall_After_ProcessingData,	//540 AudioEncodeNode Stall data path post processing.
-    ErrorHandling_AVCEncodeNode_ConfigHeader,							//AVCEncodeNode Error in in getting SPS & PPS Values.
-    ErrorHandling_AVCEncodeNode_DataPathStall_Before_ProcessingData,	//AVCEncodeNode Stall the data path before processing starts.
-    ErrorHandling_AVCEncodeNode_DataPathStall_After_ProcessingData,		//AVCEncodeNode Stall the data path post processing.
-    ErrorHandling_AVCEncodeNode_FailEncode_AfterDuration,				//AVCEncodeNode Error in encode after duration of time.
+    PVMediaInput_ErrorHandling_Test_WrongFormat = 501,	//Use testinput_rgb16.avi
+    PVMediaInput_ErrorHandling_Test_WrongIPFileName = 502,
+    ErrorHandling_WrongOutputPathTest = 503,
+    ErrorHandling_VideoInitFailed = 504,							//Video Encoder Init Failed
+    ErrorHandling_VideoEncodeFailed = 505,						//Video Encoder Encode Failed
+    ErrorHandling_VideoEncode5FramesFailed = 506,					//VideoEncNode Encode5Frames Failed
+    ErrorHandling_ComposerAddFragFailed = 507,					//507, Composer AddMemFrag Failed
+    ErrorHandling_ComposerAddTrackFailed = 508,					//Composer AddMemTrack Failed
+    ErrorHandling_AVCVideoEncodeFailed = 509,						//AVCEncNode Encode Failed
+    ErrorHandling_AVCVideoEncode5FramesFailed = 510,				//AVCEncNode Encode5Frames Failed
+    ErrorHandling_MediaInputNodeStopFailed = 511,
+    ErrorHandling_AudioInitFailed = 512,							//Audio Encoder(AMR) Init Failed
+    ErrorHandling_AudioEncodeFailed = 513,						//Audio Encoder(AMR) Encode Failed
+    ErrorHandling_MediaInputNode_NoMemBuffer = 514,
+    ErrorHandling_MediaInputNode_Out_Queue_busy = 515,
+    ErrorHandling_MediaInputNode_large_time_stamp = 516,						//MediaInputNode Error in time stamp for large value.
+    ErrorHandling_MediaInputNode_wrong_time_stamp_after_duration = 517,		//MediaInputNode Error in time stamp for wrong value after duration of time.
+    ErrorHandling_MediaInputNode_zero_time_stamp = 518,						//MediaInputNode Error in time stamp for zero value.
+    ErrorHandling_MediaInputNode_StateFailure_EPause_SendMIORequest = 519,	//MediaInputNode Error in SendMIOioRequest().
+    ErrorHandling_MediaInputNode_StateFailure_CancelMIORequest = 520,			//MediaInputNode Error in CancelMIORequest().
+    ErrorHandling_MediaInputNode_Corrupt_Video_InputData = 521,				//MediaInputNode Corrupt the video input data.
+    ErrorHandling_MediaInputNode_Corrupt_Audio_InputData = 522,				//MediaInputNode Corrupt the audio input data.
+    ErrorHandling_MediaInputNode_DataPath_Stall = 523,						//MediaInputNode Stall the data path.
+    ErrorHandling_MP4Composer_AddTrack_PVMF_AMR_IETF = 524,					//MP4ComposerNode Error in AddTrack() for PVMF_AMR_IETF.
+    ErrorHandling_MP4Composer_AddTrack_PVMF_3GPP_TIMEDTEXT = 525,				//MP4ComposerNode Error in AddTrack() for PVMF_3GPP_TIMEDTEXT.
+    ErrorHandling_MP4Composer_AddTrack_PVMF_M4V = 526,						//MP4ComposerNode Error in AddTrack() for PVMF_M4V.
+    ErrorHandling_MP4Composer_AddTrack_PVMF_H263 = 527,						//MP4ComposerNode Error in AddTrack() for PVMF_H263.
+    ErrorHandling_MP4Composer_AddTrack_PVMF_H264_MP4 = 528,					//MP4ComposerNode Error in AddTrack() for PVMF_H264_MP4.
+    ErrorHandling_MP4Composer_Create_FileParser = 529,						//MP4ComposerNode Error in the creation of mp4 file parser.
+    ErrorHandling_MP4Composer_RenderToFile = 530,								//MP4ComposerNode Error in the RenderToFile().
+    ErrorHandling_MP4Composer_FailAfter_FileSize = 531,						//MP4ComposerNode Error after a particular file size is reached.
+    ErrorHandling_MP4Composer_FailAfter_Duration = 532,						//MP4ComposerNode Error after a duration of some time.
+    ErrorHandling_MP4Composer_DataPathStall = 533,							//MP4ComposerNode Stall the data path.
+    ErrorHandling_VideoEncodeNode_ConfigHeader = 534,							//VideoEncodeNode Error in GetVolHeader().
+    ErrorHandling_VideoEncodeNode_DataPathStall_Before_ProcessingData = 535,	//VideoEncodeNode Stall the data path before processing starts.
+    ErrorHandling_VideoEncodeNode_DataPathStall_After_ProcessingData = 536,	//VideoEncodeNode Stall the data path post processing.
+    ErrorHandling_VideoEncodeNode_FailEncode_AfterDuration = 537,				//VideoEncodeNode Error in encode after duration of time.
+    ErrorHandling_AudioEncodeNode_FailEncode_AfterDuration = 538,				//AudioEncodeNode Error in encode operation after duration of time.
+    ErrorHandling_AudioEncodeNode_DataPathStall_Before_ProcessingData = 539,	//AudioEncodeNode Stall data path before processing starts.
+    ErrorHandling_AudioEncodeNode_DataPathStall_After_ProcessingData = 540,	//AudioEncodeNode Stall data path post processing.
+    ErrorHandling_AVCEncodeNode_ConfigHeader = 541,							//AVCEncodeNode Error in in getting SPS & PPS Values.
+    ErrorHandling_AVCEncodeNode_DataPathStall_Before_ProcessingData = 542,	//AVCEncodeNode Stall the data path before processing starts.
+    ErrorHandling_AVCEncodeNode_DataPathStall_After_ProcessingData = 543,		//AVCEncodeNode Stall the data path post processing.
+    ErrorHandling_AVCEncodeNode_FailEncode_AfterDuration = 544,				//AVCEncodeNode Error in encode after duration of time.
 
     /***** Test for Node Commands *****/
-    ErrorHandling_MediaInputNode_Node_Cmd_Start,			//545 MediaInputNode Error in node command DoStart().
-    ErrorHandling_MediaInputNode_Node_Cmd_Stop,				//MediaInputNode Error in node command DoStop().
-    ErrorHandling_MediaInputNode_Node_Cmd_Flush,			//MediaInputNode Error in node command DoFlush().
-    ErrorHandling_MediaInputNode_Node_Cmd_Pause,			//MediaInputNode Error in node command DoPause().
-    ErrorHandling_MediaInputNode_Node_Cmd_ReleasePort,		//MediaInputNode Error in node command DoReleasePort().
-    ErrorHandling_MP4Composer_Node_Cmd_Start,				//MP4ComposerNode Error in the node command DoStart().
-    ErrorHandling_MP4Composer_Node_Cmd_Stop,				//MP4ComposerNode Error in the node command DoStop().
-    ErrorHandling_MP4Composer_Node_Cmd_Flush,				//552 MP4ComposerNode Error in the node command DoFlush().
-    ErrorHandling_MP4Composer_Node_Cmd_Pause,				//MP4ComposerNode Error in the node command DoPause().
-    ErrorHandling_MP4Composer_Node_Cmd_ReleasePort,			//MP4ComposerNode Error in the node command DoReleasePort().
-    ErrorHandling_VideoEncodeNode_Node_Cmd_Start,			//VideoEncodeNode Error in node command DoStart().
-    ErrorHandling_VideoEncodeNode_Node_Cmd_Stop,			//VideoEncodeNode Error in node command DoStop().
-    ErrorHandling_VideoEncodeNode_Node_Cmd_Flush,			//VideoEncodeNode Error in node command DoFlush().
-    ErrorHandling_VideoEncodeNode_Node_Cmd_Pause,			//VideoEncodeNode Error in node command DoPause().
-    ErrorHandling_VideoEncodeNode_Node_Cmd_ReleasePort,		//VideoEncodeNode Error in node command DoReleasePort().
-    ErrorHandling_AudioEncodeNode_Node_Cmd_Start,			//560 AudioEncodeNode Error in node command DoStart().
-    ErrorHandling_AudioEncodeNode_Node_Cmd_Stop,			//AudioEncodeNode Error in node command DoStop().
-    ErrorHandling_AudioEncodeNode_Node_Cmd_Flush,			//AudioEncodeNode Error in node command DoFlush().
-    ErrorHandling_AudioEncodeNode_Node_Cmd_Pause,			//AudioEncodeNode Error in node command DoPause().
-    ErrorHandling_AudioEncodeNode_Node_Cmd_ReleasePort,		//AudioEncodeNode Error in node command DoReleasePort().
-    ErrorHandling_AVCEncodeNode_Node_Cmd_Start,				//AVCEncodeNode Error in node command DoStart().
-    ErrorHandling_AVCEncodeNode_Node_Cmd_Stop,				//AVCEncodeNode Error in node command DoStop().
-    ErrorHandling_AVCEncodeNode_Node_Cmd_Flush,				//AVCEncodeNode Error in node command DoFlush().
-    ErrorHandling_AVCEncodeNode_Node_Cmd_Pause,				//AVCEncodeNode Error in node command DoPause().
-    ErrorHandling_AVCEncodeNode_Node_Cmd_ReleasePort,		//569 AVCEncodeNode Error in node command DoReleasePort().
+    ErrorHandling_MediaInputNode_Node_Cmd_Start = 545,			//MediaInputNode Error in node command DoStart().
+    ErrorHandling_MediaInputNode_Node_Cmd_Stop = 546,				//MediaInputNode Error in node command DoStop().
+    ErrorHandling_MediaInputNode_Node_Cmd_Flush = 547,			//MediaInputNode Error in node command DoFlush().
+    ErrorHandling_MediaInputNode_Node_Cmd_Pause = 548,			//MediaInputNode Error in node command DoPause().
+    ErrorHandling_MediaInputNode_Node_Cmd_ReleasePort = 549,		//MediaInputNode Error in node command DoReleasePort().
+    ErrorHandling_MP4Composer_Node_Cmd_Start = 550,				//MP4ComposerNode Error in the node command DoStart().
+    ErrorHandling_MP4Composer_Node_Cmd_Stop = 551,				//MP4ComposerNode Error in the node command DoStop().
+    ErrorHandling_MP4Composer_Node_Cmd_Flush = 552,				//MP4ComposerNode Error in the node command DoFlush().
+    ErrorHandling_MP4Composer_Node_Cmd_Pause = 553,				//MP4ComposerNode Error in the node command DoPause().
+    ErrorHandling_MP4Composer_Node_Cmd_ReleasePort = 554,			//MP4ComposerNode Error in the node command DoReleasePort().
+    ErrorHandling_VideoEncodeNode_Node_Cmd_Start = 555,			//VideoEncodeNode Error in node command DoStart().
+    ErrorHandling_VideoEncodeNode_Node_Cmd_Stop = 556,			//VideoEncodeNode Error in node command DoStop().
+    ErrorHandling_VideoEncodeNode_Node_Cmd_Flush = 557,			//VideoEncodeNode Error in node command DoFlush().
+    ErrorHandling_VideoEncodeNode_Node_Cmd_Pause = 558,			//VideoEncodeNode Error in node command DoPause().
+    ErrorHandling_VideoEncodeNode_Node_Cmd_ReleasePort = 559,		//VideoEncodeNode Error in node command DoReleasePort().
+    ErrorHandling_AudioEncodeNode_Node_Cmd_Start = 560,			//AudioEncodeNode Error in node command DoStart().
+    ErrorHandling_AudioEncodeNode_Node_Cmd_Stop = 561,			//AudioEncodeNode Error in node command DoStop().
+    ErrorHandling_AudioEncodeNode_Node_Cmd_Flush = 562,			//AudioEncodeNode Error in node command DoFlush().
+    ErrorHandling_AudioEncodeNode_Node_Cmd_Pause = 563,			//AudioEncodeNode Error in node command DoPause().
+    ErrorHandling_AudioEncodeNode_Node_Cmd_ReleasePort = 564,		//AudioEncodeNode Error in node command DoReleasePort().
+    ErrorHandling_AVCEncodeNode_Node_Cmd_Start = 565,				//AVCEncodeNode Error in node command DoStart().
+    ErrorHandling_AVCEncodeNode_Node_Cmd_Stop = 566,				//AVCEncodeNode Error in node command DoStop().
+    ErrorHandling_AVCEncodeNode_Node_Cmd_Flush = 567,				//AVCEncodeNode Error in node command DoFlush().
+    ErrorHandling_AVCEncodeNode_Node_Cmd_Pause = 568,				//AVCEncodeNode Error in node command DoPause().
+    ErrorHandling_AVCEncodeNode_Node_Cmd_ReleasePort = 569,		//AVCEncodeNode Error in node command DoReleasePort().
 
-    KUnCompressed_Errorhandling_TestEnd,
+    KUnCompressed_Errorhandling_TestEnd = 570,
 
     /*********** Error Handling Tests End**************************/
     LastInteractiveTest = 1000,
diff --git a/engines/author/test/src/test_pv_mediainput_author_engine.cpp b/engines/author/test/src/test_pv_mediainput_author_engine.cpp
index 944a14d..f026ef7 100644
--- a/engines/author/test/src/test_pv_mediainput_author_engine.cpp
+++ b/engines/author/test/src/test_pv_mediainput_author_engine.cpp
@@ -56,6 +56,7 @@
         break;
 
         case PVMediaInput_Open_Compose_Stop_Test:
+        case PVMediaInput_Open_Compose_Stop_Test_UsingExternalFileHandle:
         {
             if ((iFirstTest != iLastTest) || (aMediaInputParam.iIPFileInfo.get_size() == 0))
             {
@@ -560,7 +561,14 @@
                 ++iNextTestCase;
             }
             break;
-
+            case PVMediaInput_Open_Compose_Stop_Test_UsingExternalFileHandle:
+            {
+                Print_TestCase_Name(iNextTestCase);
+                iCurrentTest = new pv_mediainput_async_test_opencomposestop(testparam, iMediaInputParam, false, true);
+                // Go to next test
+                ++iNextTestCase;
+            }
+            break;
             case PVMediaInput_Pause_Resume_Test:
             {
                 fprintf(iFile, "Pause Resume test with AVI/WAV MIO Comp:\n");
diff --git a/engines/author/test/test_input/amrwbtestinput.awb b/engines/author/test/test_input/amrwbtestinput.awb
new file mode 100644
index 0000000..a3d9791
--- /dev/null
+++ b/engines/author/test/test_input/amrwbtestinput.awb
Binary files differ
diff --git a/engines/author/test/test_input/readme.txt b/engines/author/test/test_input/readme.txt
deleted file mode 100644
index 17fe26d..0000000
--- a/engines/author/test/test_input/readme.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Please copy these test input files to c:\unit_test\pvaetest. Please create the unit_test and pvaetest folders
-if necessary.  Note that for Symbian, C:\ of the emulator is under \epoc32\wins\c for WINS and \epoc32\winscw\c 
-for WINSCW.
\ No newline at end of file
diff --git a/engines/player/build/make/local.mk b/engines/player/build/make/local.mk
index 8b0841e..0828403 100644
--- a/engines/player/build/make/local.mk
+++ b/engines/player/build/make/local.mk
@@ -17,13 +17,8 @@
 SRCS := pv_player_datapath.cpp \
 	pv_player_engine.cpp \
 	pv_player_factory.cpp \
-        pv_player_node_registry.cpp
-
-ifeq ($(BUILD_ARCH),ms_vc2005)
-  SRCS += ../config/ms_vc2005_all/pv_player_node_registry_populator.cpp
-else
-  SRCS += ../config/core/pv_player_node_registry_populator.cpp
-endif
+        pv_player_node_registry.cpp \
+        ../config/core/pv_player_node_registry_populator.cpp
 
 HDRS := pv_player_datasinkfilename.h \
 	pv_player_datasource.h \
@@ -39,6 +34,9 @@
 	pv_player_track_selection_interface.h \
 	pv_player_registry_interface.h
 
+## This file is need by PLATFORM_EXTRAS in library.mk
+sdkinfo_header_name := pv_player_sdkinfo.h
+
 include $(MK)/library.mk
 
 doc_target := pvplayer_engine
@@ -49,10 +47,9 @@
 include $(MK)/doc.mk
 
 sdkinfo_target := $(LOCAL_SRCDIR)/pv_player_engine.cpp
-sdkinfo_header_filename := $(LOCAL_SRCDIR)/pv_player_sdkinfo.h
+sdkinfo_header_filename := $(LOCAL_SRCDIR)/$(sdkinfo_header_name)
 sdkinfo_header_macro := PV_PLAYER_SDKINFO
 sdkinfo_label_macro := PVPLAYER_ENGINE_SDKINFO_LABEL
 sdkinfo_date_macro := PVPLAYER_ENGINE_SDKINFO_DATE
 
-include $(MK)/sdkinfo.mk
-
+include $(MK)/sdkinfo_nr.mk
diff --git a/engines/player/build/make/makefile_all b/engines/player/build/make/makefile_all
deleted file mode 100644
index e91b0a9..0000000
--- a/engines/player/build/make/makefile_all
+++ /dev/null
@@ -1,65 +0,0 @@
-# Include the project-wide makefile to get 
-# appropriate definitions
-include $(PV_TOP)/makefile.pv
-
-#WHAT = library
-#TARGET = pvplayer_engine_all
-
-# Use XCFLAGS to add extra compiler directives for the C compiler
-# if you add any please use "XCFLAGS += ..." not "XCFLAGS = " 
-# unless you're sure you want to override the project defaults.
-# Please include a comment if you do this.
-#
-# XCFLAGS += 
-
-# Use XCXXFLAGS to add extra compiler directives for the C++ compiler.
-# See notes above regarding overriding project defaults.
-#
-# XCXXFLAGS += -DUSE_UNICODE  -D_POSIX_PTHREAD_SEMANTICS   #-D_POSIX_SOURCE
-
-# Use XCPPFLAGS to add extra preprocessor directives. Use XINCDIRS
-# for other include directories, but please only do this if absolutely
-# necessary -- let the makefile system find the include directories if 
-# possible.
-# See notes above regarding overriding project defaults.
-#
-#XCPPFLAGS += 
-
-# Use XINCDIRS for extra include directories. These should be proceeded 
-# with "-I" just as they would be when passing to the compiler.
-#
-# Added this to for osclconfig.h
-#XINCDIRS += -I../../../config/$(BUILD_ARCH)  -I../../../config/shared
-
-
-#ifeq ($(ARCHITECTURE),panasonic_arm)
-#XINCDIRS += -I ../../config/$(BUILD_ARCH)
-#else
-#   ifeq ($(ARCHITECTURE),panasonic_pc)
-#      XINCDIRS += -I ../../config/$(BUILD_ARCH)
-#   else
-#      XINCDIRS += -I ../../config/linux
-#   endif
-#endif
-
-
-# Use XLIBDIRS for extra library directories. These should be proceeded 
-# with "-L" just as they would be when passing to the linker. 
-# Used for building executables.
-#
-# XLIBDIRS += 
-
-# Use XLDFLAGS for extra linker directives.
-# Used for building executables.
-#
-# XLDFLAGS += 
-
-
-# compose final src list for actual build
-engine_all:
-	$(SHELL) /vobs/tools_v2/build/bin/playerengineall.sh $(ARCHITECTURE)	
-#DESTDIR = $(SDK_LOCAL)/installed_lib/$(BUILD_ARCH)
-#INCDESTDIR = $(SDK_LOCAL)/installed_include
-#include $(MK)/gnumake.template
-
-
diff --git a/engines/player/build/make/player_config.mk b/engines/player/build/make/player_config.mk
index 7401eae..27e9b2e 100644
--- a/engines/player/build/make/player_config.mk
+++ b/engines/player/build/make/player_config.mk
@@ -4,7 +4,7 @@
 
 # Add the include path based on project to pick the right tunable and config header
 #
-ifeq ($(ARCHITECTURE),linux_nj)
+ifeq ($(ARCHITECTURE),android)
     XINCDIRS += -I ../../config/$(BUILD_ARCH)
 else
     ifeq ($(FORMAT),3gpp)
@@ -31,8 +31,8 @@
                                 ifeq ($(ARCHITECTURE),necel_arm)
                                     XINCDIRS += -I ../../config/$(BUILD_ARCH)
                                 else
-                                    ifeq ($(FORMAT),nj)
-                                        XINCDIRS += -I ../../config/linux_nj
+                                    ifeq ($(FORMAT),android)
+                                        XINCDIRS += -I ../../config/android
                                     else
                                         ifeq ($(ARCHITECTURE),farnsworth_arm)
                                             XINCDIRS += -I ../../config/$(BUILD_ARCH)
@@ -80,8 +80,8 @@
 	                        ifeq ($(ARCHITECTURE),necel_arm)
     	                        SRCS += ../config/$(BUILD_ARCH)/pv_player_node_registry_populator.cpp
         	                else
-            	                ifeq ($(FORMAT),nj)
-                	                SRCS += ../config/linux_nj/pv_player_node_registry_populator.cpp
+            	                ifeq ($(FORMAT),android)
+                	                SRCS += ../config/android/pv_player_node_registry_populator.cpp
                     	        else
                         	        ifeq ($(ARCHITECTURE),farnsworth_arm)
                             	        SRCS += ../config/$(BUILD_ARCH)/pv_player_node_registry_populator.cpp
diff --git a/engines/player/config/core/pv_player_node_registry_populator.cpp b/engines/player/config/core/pv_player_node_registry_populator.cpp
index 357bba3..a487fd0 100644
--- a/engines/player/config/core/pv_player_node_registry_populator.cpp
+++ b/engines/player/config/core/pv_player_node_registry_populator.cpp
@@ -77,6 +77,9 @@
 #if BUILD_RM_FF_PARSER_NODE
 #include "pvmf_rmffparser_factory.h"
 #endif
+#if BUILD_DIVX_FF_PARSER_NODE
+#include "pvmf_divxffparser_factory.h"
+#endif
 #if BUILD_STREAMING_MANAGER_NODE
 #include "pvmf_sm_node_factory.h"
 #endif
@@ -112,6 +115,9 @@
 #if BUILD_AMR_FF_REC
 #include "pvamrffrec_factory.h"
 #endif
+#if BUILD_DIVX_FF_REC
+#include "pvdivxffrec_factory.h"
+#endif
 #ifdef USE_LOADABLE_MODULES
 #include "oscl_shared_library.h"
 
@@ -163,6 +169,7 @@
     nodeinfo.iInputTypes.push_back(PVMF_MIME_AMRWB);
     nodeinfo.iInputTypes.push_back(PVMF_MIME_AMR_IF2);
     nodeinfo.iInputTypes.push_back(PVMF_MIME_MPEG4_AUDIO);
+    nodeinfo.iInputTypes.push_back(PVMF_MIME_3640);
     nodeinfo.iInputTypes.push_back(PVMF_MIME_ADIF);
     nodeinfo.iInputTypes.push_back(PVMF_MIME_ADTS);
     nodeinfo.iInputTypes.push_back(PVMF_MIME_LATM);
@@ -264,6 +271,7 @@
     //For PVMFAACDecNode
     nodeinfo.iInputTypes.clear();
     nodeinfo.iInputTypes.push_back(PVMF_MIME_MPEG4_AUDIO);
+    nodeinfo.iInputTypes.push_back(PVMF_MIME_3640);
     nodeinfo.iInputTypes.push_back(PVMF_MIME_ADIF);
     nodeinfo.iInputTypes.push_back(PVMF_MIME_ADTS);
     nodeinfo.iInputTypes.push_back(PVMF_MIME_LATM);
@@ -381,6 +389,10 @@
     nodeinfo.iInputTypes.push_back(PVMF_MIME_DATA_SOURCE_REAL_HTTP_CLOAKING_URL);
     nodeinfo.iInputTypes.push_back(PVMF_MIME_DATA_SOURCE_RTSP_URL);
     nodeinfo.iInputTypes.push_back(PVMF_MIME_DATA_SOURCE_SDP_FILE);
+    nodeinfo.iInputTypes.push_back(PVMF_MIME_DATA_SOURCE_SDP_PVR_FCS_FILE);
+    nodeinfo.iInputTypes.push_back(PVMF_MIME_DATA_SOURCE_RTSP_PVR_FCS_URL);
+    nodeinfo.iInputTypes.push_back(PVMF_MIME_DATA_SOURCE_SDP_BROADCAST);
+    nodeinfo.iInputTypes.push_back(PVMF_MIME_DATA_PVRFF);
     nodeinfo.iInputTypes.push_back(PVMF_MIME_DATA_SOURCE_RTP_PACKET_SOURCE);
     nodeinfo.iNodeUUID = KPVMFStreamingManagerNodeUuid;
     nodeinfo.iOutputType.clear();
@@ -404,13 +416,24 @@
 #if BUILD_STILL_IMAGE_NODE
     //For PVMFStillImageNode
     nodeinfo.iInputTypes.clear();
-    nodeinfo.iInputTypes.push_back(PVMF_MIME_M4V_IMAGE);
+    nodeinfo.iInputTypes.push_back(PVMF_MIME_IMAGE_FORMAT);
     nodeinfo.iNodeUUID = KPVMFStillImageNodeUuid;
     nodeinfo.iOutputType.clear();
     nodeinfo.iOutputType.push_back(PVMF_MIME_FORMAT_UNKNOWN);
     nodeinfo.iNodeCreateFunc = PVMFStillImageNodeFactory::CreateStillImageNode;
     aRegistry->RegisterNode(nodeinfo);
 #endif
+#if BUILD_DIVX_FF_PARSER_NODE
+    //For PVMFDIVXParserNode
+    nodeinfo.iInputTypes.clear();
+    nodeinfo.iInputTypes.push_back(PVMF_MIME_DIVXFF);
+    nodeinfo.iNodeUUID = KPVMFDIVXFFParserNodeUuid;
+    nodeinfo.iOutputType.clear();
+    nodeinfo.iOutputType.push_back(PVMF_MIME_FORMAT_UNKNOWN);
+    nodeinfo.iNodeCreateFunc = PVMFDIVXParserNodeFactory::CreatePVMFDIVXParserNode;
+    nodeinfo.iNodeReleaseFunc = PVMFDIVXParserNodeFactory::DeletePVMFDIVXParserNode;
+    aRegistry->RegisterNode(nodeinfo);
+#endif
 }
 
 void PVPlayerRegistryPopulator::UnregisterAllNodes(PVPlayerNodeRegistryInterface* aRegistry, OsclAny* aContext)
@@ -503,6 +526,20 @@
         return;
     }
 #endif
+#if BUILD_DIVX_FF_REC
+    tmpfac = OSCL_STATIC_CAST(PVMFRecognizerPluginFactory*, OSCL_NEW(PVDIVXFFRecognizerFactory, ()));
+    if (PVMFRecognizerRegistry::RegisterPlugin(*tmpfac) == PVMFSuccess)
+    {
+        aRegistry->RegisterRecognizer(tmpfac);
+        nodeList->push_back(tmpfac);
+    }
+    else
+    {
+        OSCL_DELETE(((PVDIVXFFRecognizerFactory*)tmpfac));
+        tmpfac = NULL;
+        return;
+    }
+#endif
 #if BUILD_MP3_FF_REC
     tmpfac = OSCL_STATIC_CAST(PVMFRecognizerPluginFactory*, OSCL_NEW(PVMP3FFRecognizerFactory, ()));
     if (PVMFRecognizerRegistry::RegisterPlugin(*tmpfac) == PVMFSuccess)
diff --git a/engines/player/include/pv_player_interface.h b/engines/player/include/pv_player_interface.h
index a15a9a6..f4947e4 100644
--- a/engines/player/include/pv_player_interface.h
+++ b/engines/player/include/pv_player_interface.h
@@ -258,6 +258,24 @@
         virtual PVCommandId QueryInterface(const PVUuid& aUuid, PVInterface*& aInterfacePtr, const OsclAny* aContextData = NULL) = 0;
 
         /**
+         * This API is to allow user of the SDK to cancel any specific command which is pending on pvPlayer.
+         * If the request is to cancel a command which still has to be processed pvPlayer will just remove
+         * the command from its queue of commands to be processed. If the request is to cancel a command that
+         * is ongoing then player will attempt to interrupt the ongoing command. The state of player after a cancel
+         * can vary. So the user of pvPlayerSDK must always query for state before issuing any subsequent
+         * commands.
+         * This command request is asynchronous. PVCommandStatusObserver's CommandCompleted()
+         * callback handler will be called when this command request completes.
+         *
+         * @param aCancelCmdId
+         *          Command Id to be cancelled.
+         * @param aContextData
+         *         Optional opaque data that will be passed back to the user with the command response
+         * @returns A unique command id for asynchronous completion
+         **/
+        virtual PVCommandId CancelCommand(PVCommandId aCancelCmdId, const OsclAny* aContextData = NULL) = 0;
+
+        /**
          * This API is to allow the user to cancel all pending requests in pvPlayer. The current request being
          * processed, if any, will also be aborted. The user of PV-SDK should get the state of
          * PVPlayer Engine after the command completes and before issuing any other command.
diff --git a/engines/player/src/pv_player_engine.cpp b/engines/player/src/pv_player_engine.cpp
index 35982b0..4eab6d4 100644
--- a/engines/player/src/pv_player_engine.cpp
+++ b/engines/player/src/pv_player_engine.cpp
@@ -53,6 +53,8 @@
 
 #include "pvmf_duration_infomessage.h"
 
+#include "pvmf_metadata_infomessage.h"
+
 #include "pv_mime_string_utils.h"
 
 #include "pvmi_kvp_util.h"
@@ -289,6 +291,19 @@
 }
 
 
+PVCommandId PVPlayerEngine::CancelCommand(PVCommandId aCancelCmdId, const OsclAny* aContextData)
+{
+    PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerEngine::CancelCommand()"));
+    Oscl_Vector<PVPlayerEngineCommandParamUnion, OsclMemAllocator> paramvec;
+    paramvec.reserve(1);
+    paramvec.clear();
+    PVPlayerEngineCommandParamUnion param;
+    param.int32_value = aCancelCmdId;
+    paramvec.push_back(param);
+    return AddCommandToQueue(PVP_ENGINE_COMMAND_CANCEL_COMMAND, (OsclAny*)aContextData, &paramvec);
+}
+
+
 PVCommandId PVPlayerEngine::CancelAllCommands(const OsclAny* aContextData)
 {
     PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerEngine::CancelAllCommands()"));
@@ -1040,7 +1055,6 @@
         iSourceNodeCapConfigIF(NULL),
         iSourceNodeRegInitIF(NULL),
         iSourceNodeCPMLicenseIF(NULL),
-        iSourceNodePacketSourceIF(NULL),
         iSourceNodePVInterfaceInit(NULL),
         iSourceNodePVInterfaceTrackSel(NULL),
         iSourceNodePVInterfacePBCtrl(NULL),
@@ -1050,7 +1064,6 @@
         iSourceNodePVInterfaceCapConfig(NULL),
         iSourceNodePVInterfaceRegInit(NULL),
         iSourceNodePVInterfaceCPMLicense(NULL),
-        iSourceNodePVInterfacePacketSource(NULL),
         iCPMGetLicenseCmdId(0),
         iMetadataValuesCopiedInCallBack(true),
         iReleaseMetadataValuesPending(false),
@@ -1266,6 +1279,7 @@
     if (!iCurrentCmd.empty())
     {
         if ((iCurrentCmd[0].GetCmdType() == PVP_ENGINE_COMMAND_RESET) ||
+                (iCurrentCmd[0].GetCmdType() == PVP_ENGINE_COMMAND_CANCEL_COMMAND) ||
                 (iCurrentCmd[0].GetCmdType() == PVP_ENGINE_COMMAND_CANCEL_ALL_COMMANDS))
         {
             if (iState != PVP_ENGINE_STATE_IDLE)
@@ -1296,10 +1310,32 @@
         }
     }
 
-    /* Check if CancelAll()/CancelAcquireLicense request was made */
+    /* Check if Cancel()/CancelAll()/CancelAcquireLicense request was made */
     if (!iPendingCmds.empty())
     {
-        if (iPendingCmds.top().GetCmdType() == PVP_ENGINE_COMMAND_CANCEL_ALL_COMMANDS)
+        if (iPendingCmds.top().GetCmdType() == PVP_ENGINE_COMMAND_CANCEL_COMMAND)
+        {
+            // Process it right away
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerEngine::Run() Processing Cancel() request"));
+            PVPlayerEngineCommand cmd(iPendingCmds.top());
+            iPendingCmds.pop();
+            if ((!iCurrentCmd.empty()) && (iCurrentCmd[0].GetCmdId() == cmd.GetParam(0).int32_value))
+            {
+                // We need to cancel the ongoing command. In this case issue cancelAll
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                                (0, "PVPlayerEngine::Run: Command to Cancel is ongoing so issue CancelAll"));
+                DoCancelAllCommands(cmd);
+            }
+            else
+            {
+                // The command to be cancelled is in the pending queue
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                                (0, "PVPlayerEngine::Run: Command to Cancel is pending so just Cancel"));
+                DoCancelCommand(cmd);
+            }
+            return;
+        }
+        else if (iPendingCmds.top().GetCmdType() == PVP_ENGINE_COMMAND_CANCEL_ALL_COMMANDS)
         {
             // Process it right away
             PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerEngine::Run() Processing CancelAll() request"));
@@ -1568,12 +1604,20 @@
                 cmdstatus = DoGetLicenseStatusSync(cmd);
                 break;
 
+            case PVP_ENGINE_COMMAND_CANCEL_COMMAND:
+                // Cancel() should not be handled here
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerEngine::Run() CancelCommand should be not handled in here. Return Failure"));
+                cmdstatus = PVMFFailure;
+                break;
+
             case PVP_ENGINE_COMMAND_CANCEL_ALL_COMMANDS:
                 // CancelAll() should not be handled here
                 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerEngine::Run() CancelAllCommands should be not handled in here. Return Failure"));
                 cmdstatus = PVMFFailure;
-                // Just handle as "not supported"
+                break;
+
             default:
+                // Just handle as "not supported"
                 cmdstatus = PVMFErrNotSupported;
                 break;
         }
@@ -2230,7 +2274,6 @@
                         case PVP_CMD_SourceNodeQueryCapConfigIF:
                         case PVP_CMD_SourceNodeQueryCPMLicenseIF:
                         case PVP_CMD_SourceNodeQuerySrcNodeRegInitIF:
-                        case PVP_CMD_SourceNodeQueryPacketSourceIF:
                             HandleSourceNodeQueryInterfaceOptional(*nodecontext, aResponse);
                             break;
 
@@ -3572,6 +3615,82 @@
 }
 
 
+void PVPlayerEngine::DoCancelCommand(PVPlayerEngineCommand& aCmd)
+{
+    PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerEngine::DoCancelCommand() In"));
+
+    // Boolean to check if the command is cancelled or not.
+    bool commandCancelled = false;
+
+    // cmd to cancel either has been completed or is in pending queue.
+    // Create a temporary queue for pending commands and current command if any.
+    OsclPriorityQueue<PVPlayerEngineCommand, OsclMemAllocator, Oscl_Vector<PVPlayerEngineCommand, OsclMemAllocator>, PVPlayerEngineCommandCompareLess> iTempPendingCmds;
+    Oscl_Vector<PVPlayerEngineCommand, OsclMemAllocator> iTempCurrentCmd;
+    // Copy the pending commands to the new queue
+    iTempPendingCmds = iPendingCmds;
+    while (!iTempPendingCmds.empty())
+    {
+        // Get the queue from the top
+        PVPlayerEngineCommand cmd(iTempPendingCmds.top());
+        // Check if it needs to be cancelled
+        if (aCmd.GetParam(0).int32_value == cmd.GetCmdId())
+        {
+            // Found command to be cancelled in the Pending Queue, set the
+            // commandCancelled boolean to true.
+            commandCancelled = true;
+
+            // Remove it from the pending commands queue
+            iPendingCmds.remove(cmd);
+            // Save it temporary as "current command" and then cancel it. If CurrentCmd has some
+            // command, first move it to TempCurrentCmd queue.
+            if (!iCurrentCmd.empty())
+            {
+                iTempCurrentCmd.push_front(iCurrentCmd[0]);
+                iCurrentCmd.erase(iCurrentCmd.begin());
+            }
+
+            iCurrentCmd.push_front(cmd);
+            EngineCommandCompleted(cmd.GetCmdId(), cmd.GetContext(), PVMFErrCancelled);
+
+            // send command complete for CancelCommand also.
+            iCurrentCmd.push_front(aCmd);
+            EngineCommandCompleted(aCmd.GetCmdId(), aCmd.GetContext(), PVMFSuccess);
+
+            // If TempCurrentCmd queue is holding up any command, move it back to CurrentCmd queue.
+            if (!iTempCurrentCmd.empty())
+            {
+                iCurrentCmd.push_front(iTempCurrentCmd[0]);
+                iTempCurrentCmd.erase(iTempCurrentCmd.begin());
+            }
+        }
+        // Pop each cmd from the temporary queue
+        iTempPendingCmds.pop();
+    }
+
+    if (!commandCancelled)
+    {
+        // There was no command cancelled, user might have given a wrong Argument
+        // Fail the command with PVMFErrArgument
+        PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerEngine::DoCancelCommand() Wrong Argument, No comand cancelled"));
+        if (!iCurrentCmd.empty())
+        {
+            PVPlayerEngineCommand currentcmd(iCurrentCmd[0]);
+            iCurrentCmd.erase(iCurrentCmd.begin());
+            iCurrentCmd.push_front(aCmd);
+            EngineCommandCompleted(aCmd.GetCmdId(), aCmd.GetContext(), PVMFErrArgument);
+            iCurrentCmd.push_front(currentcmd);
+        }
+        else
+        {
+            // Current Command is empty, just push CancelCommand and do Command Complete.
+            iCurrentCmd.push_front(aCmd);
+            EngineCommandCompleted(aCmd.GetCmdId(), aCmd.GetContext(), PVMFErrArgument);
+        }
+    }
+    PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerEngine::DoCancelCommand() Out"));
+}
+
+
 void PVPlayerEngine::DoCancelAllCommands(PVPlayerEngineCommand& aCmd)
 {
     PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerEngine::DoCancelAllCommands() In"));
@@ -3730,6 +3849,7 @@
         case PVP_ENGINE_COMMAND_RESUME:
         case PVP_ENGINE_COMMAND_SET_PLAYBACK_RANGE:
         case PVP_ENGINE_COMMAND_SET_PLAYBACK_RATE:
+        case PVP_ENGINE_COMMAND_CANCEL_COMMAND:
         case PVP_ENGINE_COMMAND_PAUSE_DUE_TO_ENDTIME_REACHED:
         case PVP_ENGINE_COMMAND_PAUSE_DUE_TO_ENDOFCLIP:
         case PVP_ENGINE_COMMAND_PAUSE_DUE_TO_BUFFER_UNDERFLOW:
@@ -4614,6 +4734,7 @@
     {
         ++iNumPendingNodeCmd;
     }
+
     if (iNumPendingNodeCmd > 0)
     {
         PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerEngine::DoSourceNodeQueryInterfaceOptional() Out"));
@@ -9157,52 +9278,75 @@
 
     // Don't need to worry about transitional states(...ING).
     // Auto-pause/resume cmds are just regular engine cmds and won't be interrupted by normal ones
-    // First check to see if it is Underflow->Pause->Resume->DataReady usecase.
-    // In this usecase, engine starts playback clock in Resume, source nodes are sposed to pause the
-    // clock, since they are the ones in underflow. Once source nodes report dataready, engine would
-    // already be in STARTED state. So if the clock is still paused, then start it here.
-    if (iPlaybackClock.GetState() == PVMFMediaClock::PAUSED && iState == PVP_ENGINE_STATE_STARTED)
+
+    // Check if Datapaths (Sink Node) are already in Started state.
+    bool datapathSinkNodeStarted = false;
+    for (uint32 j = 0; j < iDatapathList.size(); j++)
     {
-        PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerEngine::DoSourceDataReadyAutoResume: Clock Start from paused state"));
-
-        StartPlaybackClock();
-
-        // Notify all sink nodes that have sync control IF that clock has started
-        for (uint32 i = 0; i < iDatapathList.size(); ++i)
+        if (iDatapathList[j].iSinkNode)
         {
-            if (iDatapathList[i].iDatapath && iDatapathList[i].iSinkNodeSyncCtrlIF)
+            if (iDatapathList[j].iSinkNode->GetState() != EPVMFNodeStarted)
             {
-                iDatapathList[i].iSinkNodeSyncCtrlIF->ClockStarted();
+                // One of the nodes is not in Started state break from the loop
+                // keeping the boolean datapathSinkNodeStaretd as false.
+                datapathSinkNodeStarted = false;
+                break;
             }
+            // this will be true only when all Sink Nodes are in started state.
+            datapathSinkNodeStarted = true;
         }
-        //instead of return PVMFSuccess because PVMFErrNotSupported will cause the DataReady event be sent to app
-        return PVMFErrNotSupported;
     }
 
-    // Next check to see if it is Underflow->Pause->DataReady->Resume usecase.
-    // Then we CANNOT start clock in here, because clock is paused by app.
-    // After Pause done, the engine is in PAUSED state. By allowing auto-resume only when
-    // auto-paused we deal with this usecase ok.
-    if (iState != PVP_ENGINE_STATE_AUTO_PAUSED)
-    {
-        PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerEngine::DoSourceDataReadyAutoResume() Invalid state %d", iState));
-        //return PVMFErrNotSupported so the the DataReady can be sent, depending on iDataReadySent flag.
-        return PVMFErrNotSupported;
-    }
-
-    // Next check to see if it is:
-    // Underflow->Pause->SetPlaybackRange->Resume->DataReady or
-    // Prepare->Underflow->Start->DataReady
-    // or some other usecase, where we are still waiting on PVMFInfoStartOfData.
+    // Next check to see if it is any one of the use-cases:
+    // Prepare->Underflow->Start->DataReady or
+    // Prepare->Underflow->DataReady->Start or
+    // Underflow->Pause->Resume->DataReady or
+    // Underflow->Pause->SetPlaybackRange->Resume->DataReady
+    // These are cases where Sink Nodes are already in Started state and
+    // engine might be still waiting for PVMFInfoStartOfData.
     // Here if all PVMFInfoStartofData have not been received yet,
     // then iNumPVMFInfoStartOfDataPending would be non-zero,
-    // clock would still be in Stopped state
-    // and Engine would be in Started state.
+    // In few of these usecase, engine starts playback clock in Resume, source nodes are sposed to pause the
+    // clock, since they are the ones in underflow. Once source nodes report dataready, engine would
+    // already be in STARTED state. So if the clock is still paused, then start it here.
     // Here just send NotSupported so engine can send DataReady Event to the app.
     // and set the watchdog timer which was cancelled when underflow was recieved.
-    if (iPlaybackClock.GetState() == PVMFMediaClock::STOPPED &&
-            iState == PVP_ENGINE_STATE_STARTED)
+    if (datapathSinkNodeStarted)
     {
+        if (iState == PVP_ENGINE_STATE_PREPARED)
+        {
+            // DataReady recieved during Prepare, Engine just needs to send
+            // DataReady event.
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                            (0, "PVPlayerEngine::DoSourceDataReadyAutoResume: DataReady rcvd, Engine in Prepared state"));
+        }
+        else if (iState == PVP_ENGINE_STATE_STARTED)
+        {
+            // Usecases for this scenario:
+            // Underflow->Pause->Resume->DataReady
+            // Underflow->Pause->SetPlaybackRange->Resume->DataReady
+            // Prepare->Underflow->Start->DataReady
+            // do nothing here
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                            (0, "PVPlayerEngine::DoSourceDataReadyAutoResume: DataReady rcvd, Engine already in Started state"));
+        }
+        else if (iState == PVP_ENGINE_STATE_AUTO_PAUSED)
+        {
+            // Usecase for this scenario:
+            // Prepare->Underflow->DataReady->Started
+            // Change state to STARTED
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                            (0, "PVPlayerEngine::DoSourceDataReadyAutoResume: DataReady rcvd, Prepare->Underflow->DataReady->Started, datapaths already started"));
+            SetEngineState(PVP_ENGINE_STATE_STARTED);
+        }
+        else
+        {
+            // This should never happen
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR,
+                            (0, "PVPlayerEngine::DoSourceDataReadyAutoResume() Invalid state %d, Sinks in Started state", iState));
+            OSCL_ASSERT(false);
+        }
+
         if (iNumPVMFInfoStartOfDataPending > 0)
         {
             PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
@@ -9241,6 +9385,17 @@
         return PVMFErrNotSupported;
     }
 
+    // Next check to see if it is Underflow->Pause->DataReady->Resume usecase.
+    // Then we CANNOT start clock in here, because clock is paused by app.
+    // After Pause done, the engine is in PAUSED state. By allowing auto-resume only when
+    // auto-paused we deal with this usecase ok.
+    if (iState != PVP_ENGINE_STATE_AUTO_PAUSED)
+    {
+        PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerEngine::DoSourceDataReadyAutoResume() Invalid state %d", iState));
+        //return PVMFErrNotSupported so the the DataReady can be sent, depending on iDataReadySent flag.
+        return PVMFErrNotSupported;
+    }
+
     PVMFStatus retval = PVMFErrNotSupported;
 
     // Resume all active sink nodes
@@ -9568,6 +9723,7 @@
             iSourceNodeCPMLicenseIF->removeRef();
             iSourceNodeCPMLicenseIF = NULL;
         }
+
         // Reset the Presentation Info list
         iSourcePresInfoList.Reset();
 
@@ -15970,6 +16126,25 @@
             SendInformationalEvent(event, NULL, aEvent.GetEventData(), aEvent.GetLocalBuffer(), aEvent.GetLocalBufferSize());
         }
         break;
+        case PVMFInfoMetadataAvailable:
+        {
+            PVUuid infomsguuid = PVMFMetadataInfoMessageInterfaceUUID;
+            PVMFMetadataInfoMessageInterface* eventMsg = NULL;
+            PVInterface* infoExtInterface = aEvent.GetEventExtensionInterface();
+            if (infoExtInterface &&
+                    infoExtInterface->queryInterface(infomsguuid, (PVInterface*&)eventMsg))
+            {
+                PVUuid eventuuid;
+                int32 infoCode;
+                eventMsg->GetCodeUUID(infoCode, eventuuid);
+                if (eventuuid == infomsguuid)
+                {
+                    Oscl_Vector<PvmiKvp, OsclMemAllocator> kvpVector = eventMsg->GetMetadataVector();
+                    SendInformationalEvent(aEvent.GetEventType(), infoExtInterface, aEvent.GetEventData(), aEvent.GetLocalBuffer(), aEvent.GetLocalBufferSize());
+                }
+            }
+        }
+        break;
         case PVMFInfoDurationAvailable:
         {
             PVUuid infomsguuid = PVMFDurationInfoMessageInterfaceUUID;
@@ -15994,12 +16169,6 @@
         }
         break;
 
-        case PVMFInfoMetadataAvailable:
-        {
-            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerEngine::HandleSourceNodeInfoEvent() Sending Meta data Info available %d", event));
-            SendInformationalEvent(event, NULL, aEvent.GetEventData(), aEvent.GetLocalBuffer(), aEvent.GetLocalBufferSize());
-        }
-        break;
         case PVMFInfoPoorlyInterleavedContent:
         {
             PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerEngine::HandleSourceNodeInfoEvent() Sending Poorly Interleaved Content Info %d", event));
diff --git a/engines/player/src/pv_player_engine.h b/engines/player/src/pv_player_engine.h
index 0036a71..b66e88b 100644
--- a/engines/player/src/pv_player_engine.h
+++ b/engines/player/src/pv_player_engine.h
@@ -114,7 +114,6 @@
 #include "pv_player_track_selection_interface.h"
 #endif
 
-
 #ifndef PV_PLAYER_REGISTRY_INTERFACE_H_INCLUDED
 #include "pv_player_registry_interface.h"
 #endif
@@ -349,6 +348,7 @@
     PVP_ENGINE_COMMAND_GET_LOG_LEVEL,
     PVP_ENGINE_COMMAND_QUERY_UUID,
     PVP_ENGINE_COMMAND_QUERY_INTERFACE,
+    PVP_ENGINE_COMMAND_CANCEL_COMMAND,
     PVP_ENGINE_COMMAND_CANCEL_ALL_COMMANDS,
     PVP_ENGINE_COMMAND_GET_PVPLAYER_STATE,
     PVP_ENGINE_COMMAND_ADD_DATA_SOURCE,
@@ -461,6 +461,7 @@
                     return 5;
                 case PVP_ENGINE_COMMAND_QUERY_INTERFACE:
                     return 5;
+                case PVP_ENGINE_COMMAND_CANCEL_COMMAND:
                 case PVP_ENGINE_COMMAND_CANCEL_ALL_COMMANDS:
                     return 3;
                 case PVP_ENGINE_COMMAND_GET_PVPLAYER_STATE:
@@ -696,8 +697,6 @@
 class PVMFCPMPluginLicenseInterface;
 class PVMFBasicErrorInfoMessage;
 class PVPlayerWatchdogTimer;
-class PVMFDataSourcePacketSourceInterface;
-class PVPlayerDataSourcePacketSource;
 
 typedef enum
 {
@@ -906,6 +905,7 @@
         PVCommandId GetLogLevel(const char* aTag, PVLogLevelInfo& aLogInfo, const OsclAny* aContextData = NULL);
         PVCommandId QueryUUID(const PvmfMimeString& aMimeType, Oscl_Vector<PVUuid, OsclMemAllocator>& aUuids, bool aExactUuidsOnly = false, const OsclAny* aContextData = NULL);
         PVCommandId QueryInterface(const PVUuid& aUuid, PVInterface*& aInterfacePtr, const OsclAny* aContextData = NULL);
+        PVCommandId CancelCommand(PVCommandId aCancelCmdId, const OsclAny* aContextData = NULL);
         PVCommandId CancelAllCommands(const OsclAny* aContextData = NULL);
         PVCommandId GetPVPlayerState(PVPlayerState& aState, const OsclAny* aContextData = NULL);
         PVMFStatus GetPVPlayerStateSync(PVPlayerState& aState);
@@ -1077,6 +1077,7 @@
         PVMFBasicErrorInfoMessage* iCommandCompleteErrMsgInErrorHandling;
 
         // Command handling functions
+        void DoCancelCommand(PVPlayerEngineCommand& aCmd);
         void DoCancelAllCommands(PVPlayerEngineCommand& aCmd);
         void DoCancelCommandBeingProcessed(void);
         void DoCancelAcquireLicense(PVPlayerEngineCommand& aCmd);
@@ -1203,7 +1204,6 @@
         PvmiCapabilityAndConfig* iSourceNodeCapConfigIF;
         PVMFDataSourceNodeRegistryInitInterface* iSourceNodeRegInitIF;
         PVMFCPMPluginLicenseInterface* iSourceNodeCPMLicenseIF;
-        PVMFDataSourcePacketSourceInterface* iSourceNodePacketSourceIF;
         PVInterface* iSourceNodePVInterfaceInit;
         PVInterface* iSourceNodePVInterfaceTrackSel;
         PVInterface* iSourceNodePVInterfacePBCtrl;
@@ -1213,7 +1213,6 @@
         PVInterface* iSourceNodePVInterfaceCapConfig;
         PVInterface* iSourceNodePVInterfaceRegInit;
         PVInterface* iSourceNodePVInterfaceCPMLicense;
-        PVInterface* iSourceNodePVInterfacePacketSource;
 
         // For CPM license acquisition
         struct PVPlayerEngineCPMAcquireLicenseParam
@@ -1307,7 +1306,6 @@
             PVP_CMD_SourceNodeQueryCapConfigIF,
             PVP_CMD_SourceNodeQueryCPMLicenseIF,
             PVP_CMD_SourceNodeQuerySrcNodeRegInitIF,
-            PVP_CMD_SourceNodeQueryPacketSourceIF,
             PVP_CMD_SourceNodeInit,
             PVP_CMD_SourceNodeGetDurationValue,
             PVP_CMD_SourceNodeSetDataSourceRate,
diff --git a/engines/player/src/pv_player_sdkinfo.h b/engines/player/src/pv_player_sdkinfo.h
index ae60498..73a8146 100644
--- a/engines/player/src/pv_player_sdkinfo.h
+++ b/engines/player/src/pv_player_sdkinfo.h
@@ -21,7 +21,7 @@
 // This header file is automatically generated at build-time
 // *** OFFICIAL RELEASE INFO -- Will not auto update
 
-#define PVPLAYER_ENGINE_SDKINFO_LABEL "PVDEV_CORE_RELEASE_6.101.1.1"
-#define PVPLAYER_ENGINE_SDKINFO_DATE 0x20090121
+#define PVPLAYER_ENGINE_SDKINFO_LABEL "PVDEV_CORE_RELEASE_6.504.1.1"
+#define PVPLAYER_ENGINE_SDKINFO_DATE 0x20090224
 
 #endif //PV_PLAYER_SDKINFO_H_INCLUDED
diff --git a/engines/player/test/Android.mk b/engines/player/test/Android.mk
index 1df7041..a9d099e 100644
--- a/engines/player/test/Android.mk
+++ b/engines/player/test/Android.mk
@@ -36,7 +36,7 @@
  	$(PV_TOP)/engines/player/include \
  	$(PV_TOP)/nodes/common/include \
  	$(PV_TOP)/extern_libs_v2/khronos/openmax/include \
- 	$(PV_TOP)/engines/player/test/config/linux_nj \
+ 	$(PV_TOP)/engines/player/test/config/android \
  	$(PV_INCLUDES)
 
 LOCAL_COPY_HEADERS_TO := $(PV_COPY_HEADERS_TO)
diff --git a/engines/player/test/build/linux_nj/local.mk b/engines/player/test/build/android/local.mk
similarity index 93%
rename from engines/player/test/build/linux_nj/local.mk
rename to engines/player/test/build/android/local.mk
index 8b752bb..2d97e88 100644
--- a/engines/player/test/build/linux_nj/local.mk
+++ b/engines/player/test/build/android/local.mk
@@ -15,8 +15,8 @@
 
 XINCDIRS +=  ../../../../common/include  ../../../../../pvmi/media_io/pvmiofileoutput/include  ../../../../../nodes/pvmediaoutputnode/include  ../../../include  ../../../../../nodes/common/include  ../../../../../extern_libs_v2/khronos/openmax/include
 
-# This makefile is used by opencore config. So, only the linux_nj configuration is required
-XINCDIRS +=  ../../config/linux_nj
+# This makefile is used by opencore config. So, only the android configuration is required
+XINCDIRS +=  ../../config/android
 
 
 
diff --git a/engines/player/test/config/linux_nj/test_pv_player_engine_config.h b/engines/player/test/config/android/test_pv_player_engine_config.h
similarity index 100%
rename from engines/player/test/config/linux_nj/test_pv_player_engine_config.h
rename to engines/player/test/config/android/test_pv_player_engine_config.h
diff --git a/engines/player/test/src/test_pv_player_engine.cpp b/engines/player/test/src/test_pv_player_engine.cpp
index 2f47256..3086c8a 100644
--- a/engines/player/test/src/test_pv_player_engine.cpp
+++ b/engines/player/test/src/test_pv_player_engine.cpp
@@ -216,14 +216,24 @@
                     Oscl_Vector<char*, OsclMemAllocator> LogConfigStrings;
 
                     //Get the logger strings
-                    const char* const lnFd = "\r\n";
+                    const char* const lnFd = "\n";
                     const int8 lnFdLen = oscl_strlen(lnFd);
                     int16 offset = 0;
                     char* lastValidBffrAddr = ibuffer + oscl_strlen(ibuffer);
                     const char* lnFdIndx = oscl_strstr(ibuffer, lnFd);
                     while (lnFdIndx != NULL && lnFdIndx < lastValidBffrAddr)
                     {
-                        oscl_memset((char*)lnFdIndx, '\0', lnFdLen);
+
+                        // Remove the "\r" to avoid any windows formatting issues
+                        if (*(lnFdIndx - 1) == '\r')
+                        {
+                            oscl_memset((char*)(lnFdIndx - 1), '\0', lnFdLen);
+                        }
+                        else
+                        {
+                            oscl_memset((char*)lnFdIndx, '\0', lnFdLen);
+                        }
+
                         LogConfigStrings.push_back(ibuffer + offset);
                         offset = (lnFdIndx + lnFdLen) - ibuffer;
                         lnFdIndx = OSCL_CONST_CAST(char*, oscl_strstr(ibuffer + offset, lnFd));
@@ -653,7 +663,7 @@
         // unrecognized eny (Jupiter envelope) files go to the still image node
         else  if (oscl_strstr(aFileNameInfo.get_cstr(), ".eny") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), ".ENY") != NULL)
         {
-            aInputFileFormatType = PVMF_MIME_M4V_IMAGE;
+            aInputFileFormatType = PVMF_MIME_IMAGE_FORMAT;
         }
         // Unknown so set to unknown try to have the player engine recognize
         else
@@ -1258,6 +1268,10 @@
         {
             lognode = 18; 	//socket node related
         }
+        else if (oscl_strcmp(iSourceFind, "-logshout") == 0)
+        {
+            lognode = 19;	//shoutcast playback log only
+        }
     }
 
     if (cmdline_iswchar)
@@ -1561,14 +1575,232 @@
     return result;
 }
 
+template <typename T>
+class CmdLinePopulator
+{
+    public:
+        CmdLinePopulator()
+        {
+            iNumArgs = 0;
+            for (int ii = 0; ii < MAXNUMARGS; ii++)
+            {
+                iArgArr[ii] = NULL;
+            }
+        }
+        ~CmdLinePopulator()
+        {
+            for (int ii = 0; ii < MAXNUMARGS ;ii++)
+            {
+                if (iArgArr[ii] != NULL)
+                {
+                    delete iArgArr[ii];
+                    iArgArr[ii] = NULL;
+                }
+            }
+
+        }
+
+
+        bool PopulateCmdLine(Oscl_File* apFile, cmd_line* apCommandLine);
+        bool PopulateCmdLine(oscl_wchar* apFileName, cmd_line* apCommandLine);
+
+        uint32 iNumArgs;
+        enum ArgListAttributes
+        {
+            MAXNUMARGS = 15,
+            MAXARGLEN = 256
+        };
+        T* iArgArr[MAXNUMARGS];
+};
+
+template <typename T> bool CmdLinePopulator<T>::PopulateCmdLine(Oscl_File* apFile, cmd_line* apCommandLine)
+{
+
+    return false;
+}
+
+template <typename T> bool CmdLinePopulator<T>::PopulateCmdLine(oscl_wchar* apFileName, cmd_line* apCommandLine)
+{
+    int32 err = 0;
+    bool retval = false;
+    Oscl_FileServer fileServer;
+    err = fileServer.Connect();
+    if (0 == err)
+    {
+        Oscl_File* pFilePtr = new Oscl_File;
+        if (pFilePtr != NULL)
+        {
+            err = pFilePtr->Open(apFileName, Oscl_File::MODE_READ, fileServer);
+            if (0 == err)
+            {
+                if (0 == pFilePtr->Seek(0, Oscl_File::SEEKSET))
+                {
+                    //We require text in input file to be in ascii format
+                    const uint32 maxExpectedFileSz = sizeof(char) * (MAXNUMARGS + 1) * MAXARGLEN;
+                    char buffer[maxExpectedFileSz];
+                    oscl_memset(buffer, 0, sizeof(buffer));
+
+                    const uint32 elementSz = sizeof(buffer[0]);
+                    const uint32 numOfElementsToRead = sizeof(buffer) / sizeof(buffer[0]);
+                    const uint32 numOfElementsRead = pFilePtr->Read(buffer, elementSz, numOfElementsToRead);
+
+                    //we expect file size to be less than maxExpectedFileSz, therefore
+                    //numOfElementsRead should be less than numOfElementsToRead
+                    if (numOfElementsRead == numOfElementsToRead)
+                    {
+                        //print config err
+                        return false;
+                    }
+
+                    uint32 bufferIndexToParse = 0;
+                    int32 numArgPushed = 0;
+                    while (bufferIndexToParse < numOfElementsRead)
+                    {
+                        char* subBuffer = buffer + bufferIndexToParse;
+                        uint32 subBufferLen = 0;
+                        char* const terminal = oscl_strstr(subBuffer, "\"");
+                        if (terminal)
+                        {
+                            subBufferLen = terminal - subBuffer;
+                        }
+                        else
+                        {
+                            subBufferLen = buffer + numOfElementsRead - subBuffer;
+                        }
+                        bufferIndexToParse += subBufferLen;
+
+                        //preprocess the subbuffer
+                        char* ptrIter = subBuffer;
+                        const char* ptrEnd = subBuffer + subBufferLen;
+
+
+                        while (ptrIter < ptrEnd)
+                        {
+                            if (('\r' == *ptrIter) || ('\n' == *ptrIter) || (' ' == *ptrIter) || ('\t' == *ptrIter))
+                            {
+                                *ptrIter = '\0';
+                            }
+                            ++ptrIter;
+                        }
+
+                        uint32 startingSubBufferIndexToParse = 0;
+                        while (startingSubBufferIndexToParse < subBufferLen)
+                        {
+                            //eat any '\0' in the begin
+                            while (subBuffer[startingSubBufferIndexToParse] == '\0')
+                            {
+                                startingSubBufferIndexToParse++;
+
+                            }
+
+                            if (startingSubBufferIndexToParse > subBufferLen)
+                            {
+                                break;
+                            }
+
+                            const uint32 argLen = oscl_strlen(subBuffer + startingSubBufferIndexToParse);
+                            uint32 bufferLenToCopy = argLen < MAXARGLEN ? argLen : (MAXARGLEN - 1);
+                            if (bufferLenToCopy > 0 && numArgPushed < MAXNUMARGS)
+                            {
+                                T* arg = new T[bufferLenToCopy + 1];
+                                if (sizeof(T) != sizeof(char))
+                                {//unicode
+                                    oscl_UTF8ToUnicode(subBuffer + startingSubBufferIndexToParse, bufferLenToCopy, OSCL_STATIC_CAST(oscl_wchar*, arg), bufferLenToCopy + 1);
+                                }
+                                else
+                                {
+                                    oscl_strncpy(OSCL_STATIC_CAST(char*, arg), subBuffer + startingSubBufferIndexToParse, bufferLenToCopy);
+                                    arg[bufferLenToCopy] = '\0';
+                                }
+                                iArgArr[numArgPushed] = arg;
+                                numArgPushed++;
+                            }
+                            startingSubBufferIndexToParse += (argLen + 1);//1 is added for the '\0' in the end of arg in subbuffer
+                        }
+
+                        //look for the ending terminal "\""
+                        if (terminal)
+                        {
+                            //we need to look for ending terminal and accept the param within quotes as the arg
+                            char* const argEnd = oscl_strstr(terminal + 1, "\"");
+                            if (argEnd)
+                            {
+                                *terminal = *argEnd = '\0';
+                                const uint32 argLen = oscl_strlen(terminal + 1);
+                                uint32 bufferLenToCopy = argLen < MAXARGLEN ? argLen : (MAXARGLEN - 1);
+                                if (bufferLenToCopy > 0 && numArgPushed < MAXNUMARGS)
+                                {
+                                    T* arg = new T[bufferLenToCopy + 1];
+                                    if (sizeof(T) != sizeof(char))
+                                    {//unicode
+                                        oscl_UTF8ToUnicode((terminal + 1), bufferLenToCopy, OSCL_STATIC_CAST(oscl_wchar*, arg), bufferLenToCopy + 1);
+                                    }
+                                    else
+                                    {
+                                        oscl_strncpy(OSCL_STATIC_CAST(char*, arg), (terminal + 1), bufferLenToCopy);
+                                        arg[bufferLenToCopy] = '\0';
+                                    }
+                                    iArgArr[numArgPushed] = arg;
+                                    numArgPushed++;
+                                }
+                                bufferIndexToParse += (argLen + 1);
+                            }
+                            else
+                            {
+                                return false;
+                            }
+                        }
+                    }
+                    iNumArgs = numArgPushed;
+                    apCommandLine->setup(iNumArgs, iArgArr);
+                    retval = true;
+                }
+                pFilePtr->Close();
+            }
+            else
+            {
+                char filename[255] = {0};
+                oscl_UnicodeToUTF8(apFileName, oscl_strlen(apFileName), filename, 255);
+                fprintf(file, "Could not locate the file %s", filename);
+            }
+            OSCL_DELETE(pFilePtr);
+        }
+        fileServer.Close();
+    }
+    return retval;
+}
+
 int _local_main(FILE *filehandle, cmd_line *command_line)
 {
     file = filehandle;
 
+    CmdLinePopulator<char> *asciiCmdLinePopulator = NULL;
+    CmdLinePopulator<oscl_wchar> *wcharCmdLinePopulator = NULL;
     // Print out the extension for help if no argument
     if (command_line->get_count() == 0)
     {
-        fprintf(file, "  Specify '-help' first to get help information on options\n\n");
+        fprintf(file, "  No command line options available.. goin to read the cmdlineparamsconfigfile.txt(if exists) file to get input \n\n");
+        //Check if theres input file available to get the params...
+        oscl_wchar cmdLineParamsConfigFile[255] = {0};
+        oscl_strncpy(cmdLineParamsConfigFile, SOURCENAME_PREPEND_WSTRING, oscl_strlen(SOURCENAME_PREPEND_WSTRING));
+        cmdLineParamsConfigFile[oscl_strlen(SOURCENAME_PREPEND_WSTRING)] = '\0';
+        oscl_strcat(cmdLineParamsConfigFile, _STRLIT("cmdlineparamsconfigfile.txt"));
+
+        if (command_line->is_wchar())
+        {
+            wcharCmdLinePopulator = new CmdLinePopulator<oscl_wchar>();
+            wcharCmdLinePopulator->PopulateCmdLine(cmdLineParamsConfigFile, command_line);
+        }
+        else
+        {
+            asciiCmdLinePopulator = new CmdLinePopulator<char>();
+            asciiCmdLinePopulator->PopulateCmdLine(cmdLineParamsConfigFile, command_line);
+        }
+
+        if (command_line->get_count() == 0)
+        {
+            fprintf(file, "  Specify '-help' first to get help information on options\n\n");
+        }
     }
 
     OSCL_HeapString<OsclMemAllocator> filenameinfo;
@@ -1649,10 +1881,32 @@
         delete engine_tests;
         engine_tests = NULL;
 
+        if (asciiCmdLinePopulator)
+        {
+            OSCL_DELETE(asciiCmdLinePopulator);
+            asciiCmdLinePopulator = NULL;
+        }
+
+        if (wcharCmdLinePopulator)
+        {
+            OSCL_DELETE(wcharCmdLinePopulator);
+            wcharCmdLinePopulator = NULL;
+        }
         return (the_result.success_count() != the_result.total_test_count());
     }
     else
     {
+        if (asciiCmdLinePopulator)
+        {
+            delete asciiCmdLinePopulator;
+            asciiCmdLinePopulator = NULL;
+        }
+
+        if (wcharCmdLinePopulator)
+        {
+            delete wcharCmdLinePopulator;
+            wcharCmdLinePopulator = NULL;
+        }
         fprintf(file, "ERROR! pvplayer_engine_test_suite could not be instantiated.\n");
         return 1;
     }
@@ -3070,6 +3324,39 @@
 #endif
                 break;
 
+            case ShoutcastPlayback5MinuteTest:
+#if RUN_SHOUTCAST_TESTCASES
+                testparam.iFileType = PVMF_MIME_DATA_SOURCE_SHOUTCAST_URL;
+                iCurrentTest = new pvplayer_async_test_ppb_normal(testparam);
+                ((pvplayer_async_test_ppb_normal*)iCurrentTest)->setShoutcastSessionDuration();
+                ((pvplayer_async_test_ppb_normal*)iCurrentTest)->iTestCaseName = _STRLIT_CHAR("Shoutcast Playback For 5 Minutes");
+#else
+                fprintf(file, "Shoutcast playback tests not enabled\n");
+#endif
+                break;
+
+            case ShoutcastPlaybackPauseResumeTest:
+#if RUN_SHOUTCAST_TESTCASES
+                testparam.iFileType = PVMF_MIME_DATA_SOURCE_SHOUTCAST_URL;
+                iCurrentTest = new pvplayer_async_test_ppb_normal(testparam);
+                ((pvplayer_async_test_ppb_normal*)iCurrentTest)->enableShoutcastPauseResume();
+                ((pvplayer_async_test_ppb_normal*)iCurrentTest)->iTestCaseName = _STRLIT_CHAR("Shoutcast Playback Pause Resume");
+#else
+                fprintf(file, "Shoutcast playback tests not enabled\n");
+#endif
+                break;
+
+            case ShoutcastPlaybackPlayStopPlayTest:
+#if RUN_SHOUTCAST_TESTCASES
+                testparam.iFileType = PVMF_MIME_DATA_SOURCE_SHOUTCAST_URL;
+                iCurrentTest = new pvplayer_async_test_ppb_normal(testparam);
+                ((pvplayer_async_test_ppb_normal*)iCurrentTest)->enableShoutcastPlayStopPlay();
+                ((pvplayer_async_test_ppb_normal*)iCurrentTest)->iTestCaseName = _STRLIT_CHAR("Shoutcast Playback Play Stop Play");
+#else
+                fprintf(file, "Shoutcast playback tests not enabled\n");
+#endif
+                break;
+
             case FTDownloadOpenPlayUntilEOSTest:
 #if RUN_FASTTRACK_TESTCASES
 #ifndef ONLY_3GPP_STREAMING_FORMAT
@@ -8020,6 +8307,18 @@
             PVLogger *clocknode = PVLogger::GetLoggerObject("PVWmdrmHds");
             clocknode->AddAppender(appenderPtr);
             clocknode->SetLogLevel(PVLOGMSG_DEBUG + 1);
+            clocknode = PVLogger::GetLoggerObject("WmdrmStats");
+            clocknode->AddAppender(appenderPtr);
+            clocknode->SetLogLevel(PVLOGMSG_DEBUG);
+            clocknode = PVLogger::GetLoggerObject("OsclFileStats");
+            clocknode->AddAppender(appenderPtr);
+            clocknode->SetLogLevel(PVLOGMSG_DEBUG);
+            clocknode = PVLogger::GetLoggerObject("Oscl_File");
+            clocknode->AddAppender(appenderPtr);
+            clocknode->SetLogLevel(PVLOGMSG_DEBUG);
+            clocknode = PVLogger::GetLoggerObject("OsclNativeFile");
+            clocknode->AddAppender(appenderPtr);
+            clocknode->SetLogLevel(PVLOGMSG_DEBUG);
         }
         break;
         case 12://-loghdsandosclfileio
@@ -8194,6 +8493,37 @@
             loggernode->AddAppender(appenderPtr);
             loggernode->SetLogLevel(PVLOGMSG_DEBUG);
         }
+        case 19://-logshout
+        {
+            // Log shoutcast playback node data path only.
+            PVLogger *loggernode;
+
+            loggernode = PVLogger::GetLoggerObject("PVPlayerEngine");
+            loggernode->AddAppender(appenderPtr);
+            loggernode->SetLogLevel(PVLOGMSG_DEBUG);
+
+            loggernode = PVLogger::GetLoggerObject("PVMFShoutcastStreamParser");
+            loggernode->AddAppender(appenderPtr);
+            loggernode->SetLogLevel(PVLOGMSG_STACK_TRACE);
+
+            loggernode = PVLogger::GetLoggerObject("PVMFMP3FFParserNode");
+            loggernode->AddAppender(appenderPtr);
+            loggernode->SetLogLevel(PVLOGMSG_INFO);
+            /*
+            loggernode = PVLogger::GetLoggerObject("pvdownloadmanagernode");
+            loggernode->AddAppender(appenderPtr);
+            loggernode->SetLogLevel(PVLOGMSG_DEBUG);
+
+            loggernode = PVLogger::GetLoggerObject("datapath.sourcenode.protocolenginenode");
+            loggernode->AddAppender(appenderPtr);
+            loggernode->SetLogLevel(PVLOGMSG_INFO);
+
+            loggernode = PVLogger::GetLoggerObject("PVMFMemoryBufferDataStream");
+            loggernode->AddAppender(appenderPtr);
+            loggernode->SetLogLevel(PVLOGMSG_DEBUG);
+            */
+        }
+        break;
         default:
             break;
     }
diff --git a/engines/player/test/src/test_pv_player_engine.h b/engines/player/test/src/test_pv_player_engine.h
index 39491e9..6403dd8 100644
--- a/engines/player/test/src/test_pv_player_engine.h
+++ b/engines/player/test/src/test_pv_player_engine.h
@@ -486,6 +486,12 @@
 
             LastProgressivePlaybackTest, //placeholder
 
+            ShoutcastPlayback5MinuteTest = 180,
+            ShoutcastPlaybackPauseResumeTest = 181,
+            ShoutcastPlaybackPlayStopPlayTest = 182,
+
+            LastShoutcastPlaybackTest, // placeholder
+
             FirstStreamingTest = 200, //placeholder
 
             StreamingOpenPlayStopTest, //201
diff --git a/engines/player/test/src/test_pv_player_engine_testset1.cpp b/engines/player/test/src/test_pv_player_engine_testset1.cpp
index 96cefd3..12eb433 100644
--- a/engines/player/test/src/test_pv_player_engine_testset1.cpp
+++ b/engines/player/test/src/test_pv_player_engine_testset1.cpp
@@ -771,7 +771,6 @@
                 break;
             }
 
-            bool useCPM = true;
             if (iUsingDataStreamInput)
             {
                 //Create a data stream factory for recognizer (a)
@@ -786,15 +785,14 @@
 
                 iSourceContextData = new PVMFSourceContextData();
                 iSourceContextData->EnableCommonSourceContext();
-                iSourceContextData->CommonData()->iUseCPMPluginRegistry    = useCPM;
                 iSourceContextData->CommonData()->iRecognizerDataStreamFactory = iDataStreamFactory;
 
                 iDataSource->SetDataSourceContextData((OsclAny*)iSourceContextData);
             }
             else
             {
-                //Create a data source with the CPM usage flag set.
-                iLocalDataSource = new PVMFLocalDataSource(useCPM);
+                //Create a data source
+                iLocalDataSource = new PVMFLocalDataSource();
 
                 iDataSource->SetDataSourceContextData((OsclAny*)iLocalDataSource);
             }
@@ -17620,7 +17618,7 @@
             iFileNameWStr.set(iTmpWCharBuffer, oscl_strlen(iTmpWCharBuffer));
             iDataSource->SetDataSourceURL(iFileNameWStr);
             iDataSource->SetDataSourceFormatType(iFileType);
-            iLocalDataSource = new PVMFLocalDataSource(false);
+            iLocalDataSource = new PVMFLocalDataSource();
             iDataSource->SetDataSourceContextData((OsclAny*)iLocalDataSource);
 
             OSCL_TRY(error, iCurrentCmdId = iPlayer->AddDataSource(*iDataSource, (OsclAny*) & iContextObject));
@@ -18358,7 +18356,7 @@
             iFileNameWStr.set(iTmpWCharBuffer, oscl_strlen(iTmpWCharBuffer));
             iDataSource->SetDataSourceURL(iFileNameWStr);
             iDataSource->SetDataSourceFormatType(iFileType);
-            iLocalDataSource = new PVMFLocalDataSource(false);
+            iLocalDataSource = new PVMFLocalDataSource();
             iDataSource->SetDataSourceContextData((OsclAny*)iLocalDataSource);
 
             OSCL_TRY(error, iCurrentCmdId = iPlayer->AddDataSource(*iDataSource, (OsclAny*) & iContextObject));
diff --git a/engines/player/test/src/test_pv_player_engine_testset10.cpp b/engines/player/test/src/test_pv_player_engine_testset10.cpp
index 74e3b82..74dd533 100644
--- a/engines/player/test/src/test_pv_player_engine_testset10.cpp
+++ b/engines/player/test/src/test_pv_player_engine_testset10.cpp
@@ -203,14 +203,11 @@
     else
 #endif
     {
-        bool aUseCpmForPlayback = false;
-
         iDownloadContextDataHTTP = new PVMFDownloadDataSourceHTTP(aIsNewSession, iDownloadConfigFilename, iDownloadFilename,
                 iDownloadMaxfilesize,
                 iDownloadProxy,
                 iDownloadProxyPort,
-                PVMFDownloadDataSourceHTTP::EAsap,
-                aUseCpmForPlayback);
+                PVMFDownloadDataSourceHTTP::EAsap);
     }
 }
 
@@ -312,7 +309,6 @@
                         iDownloadFilename = OUTPUTNAME_PREPEND_WSTRING;
                         iDownloadFilename += _STRLIT_WCHAR("test_ftdownload.dl");
                         bool aIsNewSession = true;
-                        bool iUseCpmForPlayback = false;
 
                         iSourceContextData->DownloadHTTPData()->bIsNewSession = aIsNewSession;
                         iSourceContextData->DownloadHTTPData()->iConfigFileName = iDownloadConfigFilename;
@@ -321,7 +317,6 @@
                         iSourceContextData->DownloadHTTPData()->iPlaybackControl = PVMFSourceContextDataDownloadHTTP::EAsap;
                         iSourceContextData->DownloadHTTPData()->iProxyName = iDownloadProxy;
                         iSourceContextData->DownloadHTTPData()->iProxyPort = iDownloadProxyPort;
-                        iSourceContextData->CommonData()->iUseCPMPluginRegistry = iUseCpmForPlayback;
                     }
                     iDataSource->SetDataSourceContextData((OsclAny*)iSourceContextData);
 #else
diff --git a/engines/player/test/src/test_pv_player_engine_testset11.cpp b/engines/player/test/src/test_pv_player_engine_testset11.cpp
index 10d657c..3456b56 100644
--- a/engines/player/test/src/test_pv_player_engine_testset11.cpp
+++ b/engines/player/test/src/test_pv_player_engine_testset11.cpp
@@ -203,14 +203,11 @@
     else
 #endif
     {
-        bool aUseCpmForPlayback = false;
-
         iDownloadContextDataHTTP = new PVMFDownloadDataSourceHTTP(aIsNewSession, iDownloadConfigFilename, iDownloadFilename,
                 iDownloadMaxfilesize,
                 iDownloadProxy,
                 iDownloadProxyPort,
-                PVMFDownloadDataSourceHTTP::EAsap,
-                aUseCpmForPlayback);
+                PVMFDownloadDataSourceHTTP::EAsap);
     }
 }
 
@@ -318,7 +315,6 @@
                         iDownloadFilename = OUTPUTNAME_PREPEND_WSTRING;
                         iDownloadFilename += _STRLIT_WCHAR("test_ftdownload.dl");
                         bool aIsNewSession = true;
-                        bool iUseCpmForPlayback = false;
 
                         iSourceContextData->DownloadHTTPData()->bIsNewSession = aIsNewSession;
                         iSourceContextData->DownloadHTTPData()->iConfigFileName = iDownloadConfigFilename;
@@ -327,7 +323,6 @@
                         iSourceContextData->DownloadHTTPData()->iPlaybackControl = PVMFSourceContextDataDownloadHTTP::EAsap;
                         iSourceContextData->DownloadHTTPData()->iProxyName = iDownloadProxy;
                         iSourceContextData->DownloadHTTPData()->iProxyPort = iDownloadProxyPort;
-                        iSourceContextData->CommonData()->iUseCPMPluginRegistry = iUseCpmForPlayback;
                     }
                     iDataSource->SetDataSourceContextData((OsclAny*)iSourceContextData);
 #else
diff --git a/engines/player/test/src/test_pv_player_engine_testset12.cpp b/engines/player/test/src/test_pv_player_engine_testset12.cpp
index c6a1a10..3a79803 100644
--- a/engines/player/test/src/test_pv_player_engine_testset12.cpp
+++ b/engines/player/test/src/test_pv_player_engine_testset12.cpp
@@ -203,14 +203,11 @@
     else
 #endif
     {
-        bool aUseCpmForPlayback = false;
-
         iDownloadContextDataHTTP = new PVMFDownloadDataSourceHTTP(aIsNewSession, iDownloadConfigFilename, iDownloadFilename,
                 iDownloadMaxfilesize,
                 iDownloadProxy,
                 iDownloadProxyPort,
-                PVMFDownloadDataSourceHTTP::EAsap,
-                aUseCpmForPlayback);
+                PVMFDownloadDataSourceHTTP::EAsap);
     }
 }
 
@@ -314,7 +311,6 @@
                         iDownloadFilename = OUTPUTNAME_PREPEND_WSTRING;
                         iDownloadFilename += _STRLIT_WCHAR("test_ftdownload.dl");
                         bool aIsNewSession = true;
-                        bool iUseCpmForPlayback = false;
 
                         iSourceContextData->DownloadHTTPData()->bIsNewSession = aIsNewSession;
                         iSourceContextData->DownloadHTTPData()->iConfigFileName = iDownloadConfigFilename;
@@ -323,7 +319,6 @@
                         iSourceContextData->DownloadHTTPData()->iPlaybackControl = PVMFSourceContextDataDownloadHTTP::EAsap;
                         iSourceContextData->DownloadHTTPData()->iProxyName = iDownloadProxy;
                         iSourceContextData->DownloadHTTPData()->iProxyPort = iDownloadProxyPort;
-                        iSourceContextData->CommonData()->iUseCPMPluginRegistry = iUseCpmForPlayback;
                     }
                     iDataSource->SetDataSourceContextData((OsclAny*)iSourceContextData);
 #else
diff --git a/engines/player/test/src/test_pv_player_engine_testset13.cpp b/engines/player/test/src/test_pv_player_engine_testset13.cpp
index 13e27b0..371a6e1 100644
--- a/engines/player/test/src/test_pv_player_engine_testset13.cpp
+++ b/engines/player/test/src/test_pv_player_engine_testset13.cpp
@@ -206,14 +206,11 @@
     else
 #endif
     {
-        bool aUseCpmForPlayback = false;
-
         iDownloadContextDataHTTP = new PVMFDownloadDataSourceHTTP(aIsNewSession, iDownloadConfigFilename, iDownloadFilename,
                 iDownloadMaxfilesize,
                 iDownloadProxy,
                 iDownloadProxyPort,
-                PVMFDownloadDataSourceHTTP::EAsap,
-                aUseCpmForPlayback);
+                PVMFDownloadDataSourceHTTP::EAsap);
     }
 }
 
@@ -338,7 +335,6 @@
                         iDownloadFilename = OUTPUTNAME_PREPEND_WSTRING;
                         iDownloadFilename += _STRLIT_WCHAR("test_ftdownload.dl");
                         bool aIsNewSession = true;
-                        bool iUseCpmForPlayback = false;
 
                         iSourceContextData->DownloadHTTPData()->bIsNewSession = aIsNewSession;
                         iSourceContextData->DownloadHTTPData()->iConfigFileName = iDownloadConfigFilename;
@@ -347,7 +343,6 @@
                         iSourceContextData->DownloadHTTPData()->iPlaybackControl = PVMFSourceContextDataDownloadHTTP::EAsap;
                         iSourceContextData->DownloadHTTPData()->iProxyName = iDownloadProxy;
                         iSourceContextData->DownloadHTTPData()->iProxyPort = iDownloadProxyPort;
-                        iSourceContextData->CommonData()->iUseCPMPluginRegistry = iUseCpmForPlayback;
                     }
                     iDataSource->SetDataSourceContextData((OsclAny*)iSourceContextData);
 #else
@@ -2419,14 +2414,11 @@
     else
 #endif
     {
-        bool aUseCpmForPlayback = false;
-
         iDownloadContextDataHTTP = new PVMFDownloadDataSourceHTTP(aIsNewSession, iDownloadConfigFilename, iDownloadFilename,
                 iDownloadMaxfilesize,
                 iDownloadProxy,
                 iDownloadProxyPort,
-                PVMFDownloadDataSourceHTTP::EAsap,
-                aUseCpmForPlayback);
+                PVMFDownloadDataSourceHTTP::EAsap);
     }
 }
 
@@ -2550,7 +2542,6 @@
                         iDownloadFilename = OUTPUTNAME_PREPEND_WSTRING;
                         iDownloadFilename += _STRLIT_WCHAR("test_ftdownload.dl");
                         bool aIsNewSession = true;
-                        bool iUseCpmForPlayback = false;
 
                         iSourceContextData->DownloadHTTPData()->bIsNewSession = aIsNewSession;
                         iSourceContextData->DownloadHTTPData()->iConfigFileName = iDownloadConfigFilename;
@@ -2559,7 +2550,6 @@
                         iSourceContextData->DownloadHTTPData()->iPlaybackControl = PVMFSourceContextDataDownloadHTTP::EAsap;
                         iSourceContextData->DownloadHTTPData()->iProxyName = iDownloadProxy;
                         iSourceContextData->DownloadHTTPData()->iProxyPort = iDownloadProxyPort;
-                        iSourceContextData->CommonData()->iUseCPMPluginRegistry = iUseCpmForPlayback;
                     }
                     iDataSource->SetDataSourceContextData((OsclAny*)iSourceContextData);
 #else
@@ -4651,14 +4641,11 @@
     else
 #endif
     {
-        bool aUseCpmForPlayback = false;
-
         iDownloadContextDataHTTP = new PVMFDownloadDataSourceHTTP(aIsNewSession, iDownloadConfigFilename, iDownloadFilename,
                 iDownloadMaxfilesize,
                 iDownloadProxy,
                 iDownloadProxyPort,
-                PVMFDownloadDataSourceHTTP::EAsap,
-                aUseCpmForPlayback);
+                PVMFDownloadDataSourceHTTP::EAsap);
     }
 }
 
@@ -4780,7 +4767,6 @@
                         iDownloadFilename = OUTPUTNAME_PREPEND_WSTRING;
                         iDownloadFilename += _STRLIT_WCHAR("test_ftdownload.dl");
                         bool aIsNewSession = true;
-                        bool iUseCpmForPlayback = false;
 
                         iSourceContextData->DownloadHTTPData()->bIsNewSession = aIsNewSession;
                         iSourceContextData->DownloadHTTPData()->iConfigFileName = iDownloadConfigFilename;
@@ -4789,7 +4775,6 @@
                         iSourceContextData->DownloadHTTPData()->iPlaybackControl = PVMFSourceContextDataDownloadHTTP::EAsap;
                         iSourceContextData->DownloadHTTPData()->iProxyName = iDownloadProxy;
                         iSourceContextData->DownloadHTTPData()->iProxyPort = iDownloadProxyPort;
-                        iSourceContextData->CommonData()->iUseCPMPluginRegistry = iUseCpmForPlayback;
                     }
                     iDataSource->SetDataSourceContextData((OsclAny*)iSourceContextData);
 #else
@@ -6806,14 +6791,11 @@
     else
 #endif
     {
-        bool aUseCpmForPlayback = false;
-
         iDownloadContextDataHTTP = new PVMFDownloadDataSourceHTTP(aIsNewSession, iDownloadConfigFilename, iDownloadFilename,
                 iDownloadMaxfilesize,
                 iDownloadProxy,
                 iDownloadProxyPort,
-                PVMFDownloadDataSourceHTTP::EAsap,
-                aUseCpmForPlayback);
+                PVMFDownloadDataSourceHTTP::EAsap);
     }
 }
 
@@ -6935,7 +6917,6 @@
                         iDownloadFilename = OUTPUTNAME_PREPEND_WSTRING;
                         iDownloadFilename += _STRLIT_WCHAR("test_ftdownload.dl");
                         bool aIsNewSession = true;
-                        bool iUseCpmForPlayback = false;
 
                         iSourceContextData->DownloadHTTPData()->bIsNewSession = aIsNewSession;
                         iSourceContextData->DownloadHTTPData()->iConfigFileName = iDownloadConfigFilename;
@@ -6944,7 +6925,6 @@
                         iSourceContextData->DownloadHTTPData()->iPlaybackControl = PVMFSourceContextDataDownloadHTTP::EAsap;
                         iSourceContextData->DownloadHTTPData()->iProxyName = iDownloadProxy;
                         iSourceContextData->DownloadHTTPData()->iProxyPort = iDownloadProxyPort;
-                        iSourceContextData->CommonData()->iUseCPMPluginRegistry = iUseCpmForPlayback;
                     }
                     iDataSource->SetDataSourceContextData((OsclAny*)iSourceContextData);
 #else
@@ -8981,14 +8961,11 @@
     else
 #endif
     {
-        bool aUseCpmForPlayback = false;
-
         iDownloadContextDataHTTP = new PVMFDownloadDataSourceHTTP(aIsNewSession, iDownloadConfigFilename, iDownloadFilename,
                 iDownloadMaxfilesize,
                 iDownloadProxy,
                 iDownloadProxyPort,
-                PVMFDownloadDataSourceHTTP::EAsap,
-                aUseCpmForPlayback);
+                PVMFDownloadDataSourceHTTP::EAsap);
     }
 }
 
@@ -9095,7 +9072,6 @@
                         iDownloadFilename = OUTPUTNAME_PREPEND_WSTRING;
                         iDownloadFilename += _STRLIT_WCHAR("test_ftdownload.dl");
                         bool aIsNewSession = true;
-                        bool iUseCpmForPlayback = false;
 
                         iSourceContextData->DownloadHTTPData()->bIsNewSession = aIsNewSession;
                         iSourceContextData->DownloadHTTPData()->iConfigFileName = iDownloadConfigFilename;
@@ -9104,7 +9080,6 @@
                         iSourceContextData->DownloadHTTPData()->iPlaybackControl = PVMFSourceContextDataDownloadHTTP::EAsap;
                         iSourceContextData->DownloadHTTPData()->iProxyName = iDownloadProxy;
                         iSourceContextData->DownloadHTTPData()->iProxyPort = iDownloadProxyPort;
-                        iSourceContextData->CommonData()->iUseCPMPluginRegistry = iUseCpmForPlayback;
                     }
                     iDataSource->SetDataSourceContextData((OsclAny*)iSourceContextData);
 #else
@@ -11271,14 +11246,11 @@
     else
 #endif
     {
-        bool aUseCpmForPlayback = false;
-
         iDownloadContextDataHTTP = new PVMFDownloadDataSourceHTTP(aIsNewSession, iDownloadConfigFilename, iDownloadFilename,
                 iDownloadMaxfilesize,
                 iDownloadProxy,
                 iDownloadProxyPort,
-                PVMFDownloadDataSourceHTTP::EAsap,
-                aUseCpmForPlayback);
+                PVMFDownloadDataSourceHTTP::EAsap);
     }
 }
 
@@ -11385,7 +11357,6 @@
                         iDownloadFilename = OUTPUTNAME_PREPEND_WSTRING;
                         iDownloadFilename += _STRLIT_WCHAR("test_ftdownload.dl");
                         bool aIsNewSession = true;
-                        bool iUseCpmForPlayback = false;
 
                         iSourceContextData->DownloadHTTPData()->bIsNewSession = aIsNewSession;
                         iSourceContextData->DownloadHTTPData()->iConfigFileName = iDownloadConfigFilename;
@@ -11394,7 +11365,6 @@
                         iSourceContextData->DownloadHTTPData()->iPlaybackControl = PVMFSourceContextDataDownloadHTTP::EAsap;
                         iSourceContextData->DownloadHTTPData()->iProxyName = iDownloadProxy;
                         iSourceContextData->DownloadHTTPData()->iProxyPort = iDownloadProxyPort;
-                        iSourceContextData->CommonData()->iUseCPMPluginRegistry = iUseCpmForPlayback;
                     }
                     iDataSource->SetDataSourceContextData((OsclAny*)iSourceContextData);
 #else
@@ -13739,14 +13709,11 @@
     else
 #endif
     {
-        bool aUseCpmForPlayback = false;
-
         iDownloadContextDataHTTP = new PVMFDownloadDataSourceHTTP(aIsNewSession, iDownloadConfigFilename, iDownloadFilename,
                 iDownloadMaxfilesize,
                 iDownloadProxy,
                 iDownloadProxyPort,
-                PVMFDownloadDataSourceHTTP::EAsap,
-                aUseCpmForPlayback);
+                PVMFDownloadDataSourceHTTP::EAsap);
     }
 }
 
@@ -13853,7 +13820,6 @@
                         iDownloadFilename = OUTPUTNAME_PREPEND_WSTRING;
                         iDownloadFilename += _STRLIT_WCHAR("test_ftdownload.dl");
                         bool aIsNewSession = true;
-                        bool iUseCpmForPlayback = false;
 
                         iSourceContextData->DownloadHTTPData()->bIsNewSession = aIsNewSession;
                         iSourceContextData->DownloadHTTPData()->iConfigFileName = iDownloadConfigFilename;
@@ -13862,7 +13828,6 @@
                         iSourceContextData->DownloadHTTPData()->iPlaybackControl = PVMFSourceContextDataDownloadHTTP::EAsap;
                         iSourceContextData->DownloadHTTPData()->iProxyName = iDownloadProxy;
                         iSourceContextData->DownloadHTTPData()->iProxyPort = iDownloadProxyPort;
-                        iSourceContextData->CommonData()->iUseCPMPluginRegistry = iUseCpmForPlayback;
                     }
                     iDataSource->SetDataSourceContextData((OsclAny*)iSourceContextData);
 #else
@@ -16006,14 +15971,11 @@
     else
 #endif
     {
-        bool aUseCpmForPlayback = false;
-
         iDownloadContextDataHTTP = new PVMFDownloadDataSourceHTTP(aIsNewSession, iDownloadConfigFilename, iDownloadFilename,
                 iDownloadMaxfilesize,
                 iDownloadProxy,
                 iDownloadProxyPort,
-                PVMFDownloadDataSourceHTTP::EAsap,
-                aUseCpmForPlayback);
+                PVMFDownloadDataSourceHTTP::EAsap);
     }
 }
 
@@ -16135,7 +16097,6 @@
                         iDownloadFilename = OUTPUTNAME_PREPEND_WSTRING;
                         iDownloadFilename += _STRLIT_WCHAR("test_ftdownload.dl");
                         bool aIsNewSession = true;
-                        bool iUseCpmForPlayback = false;
 
                         iSourceContextData->DownloadHTTPData()->bIsNewSession = aIsNewSession;
                         iSourceContextData->DownloadHTTPData()->iConfigFileName = iDownloadConfigFilename;
@@ -16144,7 +16105,6 @@
                         iSourceContextData->DownloadHTTPData()->iPlaybackControl = PVMFSourceContextDataDownloadHTTP::EAsap;
                         iSourceContextData->DownloadHTTPData()->iProxyName = iDownloadProxy;
                         iSourceContextData->DownloadHTTPData()->iProxyPort = iDownloadProxyPort;
-                        iSourceContextData->CommonData()->iUseCPMPluginRegistry = iUseCpmForPlayback;
                     }
                     iDataSource->SetDataSourceContextData((OsclAny*)iSourceContextData);
 #else
@@ -18242,14 +18202,11 @@
     else
 #endif
     {
-        bool aUseCpmForPlayback = false;
-
         iDownloadContextDataHTTP = new PVMFDownloadDataSourceHTTP(aIsNewSession, iDownloadConfigFilename, iDownloadFilename,
                 iDownloadMaxfilesize,
                 iDownloadProxy,
                 iDownloadProxyPort,
-                PVMFDownloadDataSourceHTTP::EAsap,
-                aUseCpmForPlayback);
+                PVMFDownloadDataSourceHTTP::EAsap);
     }
 }
 
@@ -18370,7 +18327,6 @@
                         iDownloadFilename = OUTPUTNAME_PREPEND_WSTRING;
                         iDownloadFilename += _STRLIT_WCHAR("test_ftdownload.dl");
                         bool aIsNewSession = true;
-                        bool iUseCpmForPlayback = false;
 
                         iSourceContextData->DownloadHTTPData()->bIsNewSession = aIsNewSession;
                         iSourceContextData->DownloadHTTPData()->iConfigFileName = iDownloadConfigFilename;
@@ -18379,7 +18335,6 @@
                         iSourceContextData->DownloadHTTPData()->iPlaybackControl = PVMFSourceContextDataDownloadHTTP::EAsap;
                         iSourceContextData->DownloadHTTPData()->iProxyName = iDownloadProxy;
                         iSourceContextData->DownloadHTTPData()->iProxyPort = iDownloadProxyPort;
-                        iSourceContextData->CommonData()->iUseCPMPluginRegistry = iUseCpmForPlayback;
                     }
                     iDataSource->SetDataSourceContextData((OsclAny*)iSourceContextData);
 #else
@@ -19771,14 +19726,11 @@
     else
 #endif
     {
-        bool aUseCpmForPlayback = false;
-
         iDownloadContextDataHTTP = new PVMFDownloadDataSourceHTTP(aIsNewSession, iDownloadConfigFilename, iDownloadFilename,
                 iDownloadMaxfilesize,
                 iDownloadProxy,
                 iDownloadProxyPort,
-                PVMFDownloadDataSourceHTTP::EAsap,
-                aUseCpmForPlayback);
+                PVMFDownloadDataSourceHTTP::EAsap);
     }
 }
 
@@ -19903,7 +19855,6 @@
                         iDownloadFilename = OUTPUTNAME_PREPEND_WSTRING;
                         iDownloadFilename += _STRLIT_WCHAR("test_ftdownload.dl");
                         bool aIsNewSession = true;
-                        bool iUseCpmForPlayback = false;
 
                         iSourceContextData->DownloadHTTPData()->bIsNewSession = aIsNewSession;
                         iSourceContextData->DownloadHTTPData()->iConfigFileName = iDownloadConfigFilename;
@@ -19912,7 +19863,6 @@
                         iSourceContextData->DownloadHTTPData()->iPlaybackControl = PVMFSourceContextDataDownloadHTTP::EAsap;
                         iSourceContextData->DownloadHTTPData()->iProxyName = iDownloadProxy;
                         iSourceContextData->DownloadHTTPData()->iProxyPort = iDownloadProxyPort;
-                        iSourceContextData->CommonData()->iUseCPMPluginRegistry = iUseCpmForPlayback;
                     }
                     iDataSource->SetDataSourceContextData((OsclAny*)iSourceContextData);
 #else
@@ -21921,14 +21871,11 @@
     else
 #endif
     {
-        bool aUseCpmForPlayback = false;
-
         iDownloadContextDataHTTP = new PVMFDownloadDataSourceHTTP(aIsNewSession, iDownloadConfigFilename, iDownloadFilename,
                 iDownloadMaxfilesize,
                 iDownloadProxy,
                 iDownloadProxyPort,
-                PVMFDownloadDataSourceHTTP::EAsap,
-                aUseCpmForPlayback);
+                PVMFDownloadDataSourceHTTP::EAsap);
     }
 }
 
@@ -22053,7 +22000,6 @@
                         iDownloadFilename = OUTPUTNAME_PREPEND_WSTRING;
                         iDownloadFilename += _STRLIT_WCHAR("test_ftdownload.dl");
                         bool aIsNewSession = true;
-                        bool iUseCpmForPlayback = false;
 
                         iSourceContextData->DownloadHTTPData()->bIsNewSession = aIsNewSession;
                         iSourceContextData->DownloadHTTPData()->iConfigFileName = iDownloadConfigFilename;
@@ -22062,7 +22008,6 @@
                         iSourceContextData->DownloadHTTPData()->iPlaybackControl = PVMFSourceContextDataDownloadHTTP::EAsap;
                         iSourceContextData->DownloadHTTPData()->iProxyName = iDownloadProxy;
                         iSourceContextData->DownloadHTTPData()->iProxyPort = iDownloadProxyPort;
-                        iSourceContextData->CommonData()->iUseCPMPluginRegistry = iUseCpmForPlayback;
                     }
                     iDataSource->SetDataSourceContextData((OsclAny*)iSourceContextData);
 #else
diff --git a/engines/player/test/src/test_pv_player_engine_testset5.cpp b/engines/player/test/src/test_pv_player_engine_testset5.cpp
index e0eb3d1..ac17247 100644
--- a/engines/player/test/src/test_pv_player_engine_testset5.cpp
+++ b/engines/player/test/src/test_pv_player_engine_testset5.cpp
@@ -102,6 +102,10 @@
 #include "pvmf_socket_node_events.h"
 #endif
 
+#ifndef PVMF_METADTA_INFOMESSAGE_H
+#include "pvmf_metadata_infomessage.h"
+#endif
+
 
 
 //Default Fast-track download file
@@ -133,7 +137,9 @@
 
 #define DEFAULT_CANCEL_DURING_INIT_DELAY_TEST_URL "http://reallinux.pv.com:1415/blz4-110302-aac-h263.mp4?bitrate=1000000"
 
-#define DEFAULT_3GPP_PPB_URL "http://pvwmsoha.pv.com:7070/MediaDownloadContent/UserUploads/youtube_singer.3gp"
+#define DEFAULT_3GPP_PPB_URL "http://wms.pv.com:7070/MediaDownloadContent/UserUploads/youtube_singer.3gp"
+
+#define DEFAULT_SHOUTCAST_URL "http://scfire-dtc-aa05.stream.aol.com/stream/1018"
 
 extern FILE* file;
 
@@ -1875,7 +1881,6 @@
     iDownloadContextData->DownloadHTTPData()->iUserID = _STRLIT_CHAR("abc");
     iDownloadContextData->DownloadHTTPData()->iUserPasswd = _STRLIT_CHAR("xyz");
     iDownloadContextData->DownloadHTTPData()->iPlaybackControl = PVMFSourceContextDataDownloadHTTP::EAsap;
-    iDownloadContextData->CommonData()->iUseCPMPluginRegistry = iUseCpmForPlayback;
 
     iDataSource->SetDataSourceContextData(iDownloadContextData);
 }
@@ -1975,7 +1980,6 @@
     iDownloadContextData->DownloadHTTPData()->iUserID = _STRLIT_CHAR("abc");
     iDownloadContextData->DownloadHTTPData()->iUserPasswd = _STRLIT_CHAR("xyz");
     iDownloadContextData->DownloadHTTPData()->iPlaybackControl = PVMFSourceContextDataDownloadHTTP::ENoSaveToFile;
-    iDownloadContextData->CommonData()->iUseCPMPluginRegistry = false;
 
     iDataSource->SetDataSourceContextData(iDownloadContextData);
 }
@@ -2057,7 +2061,6 @@
     iDownloadContextData->DownloadHTTPData()->iProxyName = iDownloadProxy;
     iDownloadContextData->DownloadHTTPData()->iProxyPort = iDownloadProxyPort;
     iDownloadContextData->DownloadHTTPData()->iPlaybackControl = PVMFSourceContextDataDownloadHTTP::EAfterDownload;
-    iDownloadContextData->CommonData()->iUseCPMPluginRegistry = false;
 
     iDataSource->SetDataSourceContextData(iDownloadContextData);
 }
@@ -2140,7 +2143,6 @@
     iDownloadContextData->DownloadHTTPData()->iProxyName = iDownloadProxy;
     iDownloadContextData->DownloadHTTPData()->iProxyPort = iDownloadProxyPort;
     iDownloadContextData->DownloadHTTPData()->iPlaybackControl = PVMFSourceContextDataDownloadHTTP::ENoPlayback;
-    iDownloadContextData->CommonData()->iUseCPMPluginRegistry = false;
 
     iDataSource->SetDataSourceContextData(iDownloadContextData);
 }
@@ -3109,7 +3111,6 @@
     iDownloadContextData->DownloadHTTPData()->iProxyName = iDownloadProxy;
     iDownloadContextData->DownloadHTTPData()->iProxyPort = iDownloadProxyPort;
     iDownloadContextData->DownloadHTTPData()->iPlaybackControl = PVMFSourceContextDataDownloadHTTP::ENoPlayback;
-    iDownloadContextData->CommonData()->iUseCPMPluginRegistry = false;
 
     iDataSource->SetDataSourceContextData(iDownloadContextData);
 }
@@ -3181,7 +3182,6 @@
     iDownloadContextData->DownloadHTTPData()->iProxyName = iDownloadProxy;
     iDownloadContextData->DownloadHTTPData()->iProxyPort = iDownloadProxyPort;
     iDownloadContextData->DownloadHTTPData()->iPlaybackControl = PVMFSourceContextDataDownloadHTTP::EAsap;
-    iDownloadContextData->CommonData()->iUseCPMPluginRegistry = false;
 
     iDataSource->SetDataSourceContextData(iDownloadContextData);
 }
@@ -4064,8 +4064,17 @@
                     if (iLongPauseResume || iShortPauseResume)
                     {
                         iState = STATE_PAUSE;
-                        //just play for 20 seconds then stop
-                        RunIfNotReady(20*1000*1000);
+
+                        if (iShoutcastSession)
+                        {
+                            //just play for 1 minutes then stop
+                            RunIfNotReady(iSCListenTime);
+                        }
+                        else
+                        {
+                            //just play for 20 seconds then stop
+                            RunIfNotReady(20*1000*1000);
+                        }
                     }
                     else if (iSeekAfterDownloadComplete && 0 == iNumBufferingComplete)
                     {
@@ -4074,8 +4083,18 @@
                     else if (!iPlayUntilEOS)
                     {
                         iState = STATE_STOP;
-                        //just play for 20 seconds then stop
-                        RunIfNotReady(20*1000*1000);
+
+                        if (iShoutcastSession)
+                        {
+                            //just play for 5 minutes then stop
+                            // or 1 minute when it is play stop play
+                            RunIfNotReady(iSCListenTime);
+                        }
+                        else
+                        {
+                            //just play for 20 second then stop
+                            RunIfNotReady(20*1000*1000);
+                        }
                     }
                     else
                     {
@@ -4118,6 +4137,11 @@
                         iState = STATE_STOP_TWICE;
                         RunIfNotReady(3*1000*1000);	// Play for 3 seconds
                     }
+                    else if (iShoutcastPlayStopPlay)
+                    {
+                        iState = STATE_STOP_TWICE;
+                        RunIfNotReady(iSCListenTime);	// Play for another minute
+                    }
                 }
             }
             else
@@ -4237,8 +4261,17 @@
                     }
                     else
                     {
-                        // play for another 20 seconds and stop
-                        RunIfNotReady(20*1000*1000);
+
+                        if (iShoutcastSession)
+                        {
+                            //just play for 1 minutes then stop
+                            RunIfNotReady(iSCListenTime);
+                        }
+                        else
+                        {
+                            // play for another 20 seconds and stop
+                            RunIfNotReady(20*1000*1000);
+                        }
                     }
                 }
             }
@@ -4340,10 +4373,14 @@
         case STATE_STOP:
             if (aResponse.GetCmdStatus() == PVMFSuccess)
             {
-                if (iEOSStopPlay)
+                if (iEOSStopPlay || iShoutcastPlayStopPlay)
+                {
                     iState = STATE_PREPARE_AFTERSTOP;
+                }
                 else
+                {
                     iState = STATE_REMOVEDATASINK_VIDEO;
+                }
                 RunIfNotReady();
             }
             else
@@ -4484,6 +4521,7 @@
     {
         fprintf(iTestMsgOutputFile, "PVMFSocketNodeErrorSocketServerCreateError\n");
     }
+
     else if (aErr == PVMFSocketNodeErrorSocketServConnectError)
     {
         fprintf(iTestMsgOutputFile, "PVMFSocketNodeErrorSocketServConnectError\n");
@@ -4687,8 +4725,11 @@
             fprintf(file, "   PVMFInfoBufferingStart\n");
             iNumBufferingStart++;
             //we should only get one of these.
-            if (iNumBufferingStart == 2 && !iEOSStopPlay)
-                PVPATB_TEST_IS_TRUE(false);
+            if (iNumBufferingStart == 2)
+            {
+                if (!iEOSStopPlay && !iShoutcastPlayStopPlay)
+                    PVPATB_TEST_IS_TRUE(false);
+            }
             break;
 
         case PVMFInfoBufferingComplete:
@@ -4863,6 +4904,50 @@
             }
         }
         break;
+        case PVMFInfoMetadataAvailable:
+        {
+            PVUuid infomsguuid = PVMFMetadataInfoMessageInterfaceUUID;
+            PVMFMetadataInfoMessageInterface* eventMsg = NULL;
+            PVInterface* infoExtInterface = aEvent.GetEventExtensionInterface();
+            if (infoExtInterface &&
+                    infoExtInterface->queryInterface(infomsguuid, (PVInterface*&)eventMsg))
+            {
+                PVUuid eventuuid;
+                int32 infoCode;
+                eventMsg->GetCodeUUID(infoCode, eventuuid);
+                if (eventuuid == infomsguuid)
+                {
+                    Oscl_Vector<PvmiKvp, OsclMemAllocator> kvpVector = eventMsg->GetMetadataVector();
+                    for (uint32 i = 0;i < kvpVector.size();i++)
+                    {
+                        //arora
+                        if (oscl_strstr(kvpVector[i].key, "valtype=char*"))
+                        {
+                            fprintf(file, "\n*********************************");
+                            fprintf(file, "\nMetadata Key '%s', value '%s'\n", kvpVector[i].key, kvpVector[i].value.pChar_value);
+                            fprintf(file, "\n*********************************");
+                        }
+                        else if (oscl_strstr(kvpVector[i].key, "valtype=wchar*"))
+                        {
+                            OSCL_HeapString<OsclMemAllocator> ostr;
+                            char buf[2];
+                            buf[1] = '\0';
+                            for (uint32 j = 0;;j++)
+                            {
+                                if (kvpVector[i].value.pWChar_value[j] == '\0')
+                                    break;
+                                buf[0] = kvpVector[i].value.pWChar_value[j];
+                                ostr += buf;
+                            }
+                            fprintf(file, "\n*********************************");
+                            fprintf(file, "  Metadata Key '%s', value '%s'\n", kvpVector[i].key, ostr.get_str());
+                            fprintf(file, "\n*********************************");
+                        }
+                    }
+                }
+            }
+        }
+
         default:
             break;
     }
@@ -4882,11 +4967,26 @@
     OSCL_HeapString<OsclMemAllocator> url(iFileName);
     OSCL_HeapString<OsclMemAllocator> default_source(SOURCENAME_PREPEND_STRING);
     default_source += DEFAULTSOURCEFILENAME;
+
+    if (iFileType == PVMF_MIME_DATA_SOURCE_SHOUTCAST_URL)
+    {
+        iShoutcastSession = true;
+    }
+
     if (url == default_source)
     {
-        fprintf(file, "Setting source to %s\n", DEFAULT_3GPP_PPB_URL);
-        url = DEFAULT_3GPP_PPB_URL;
+        if (iFileType == PVMF_MIME_DATA_SOURCE_SHOUTCAST_URL)
+        {
+            fprintf(file, "Setting source to %s\n", DEFAULT_SHOUTCAST_URL);
+            url = DEFAULT_SHOUTCAST_URL;
+        }
+        else
+        {
+            fprintf(file, "Setting source to %s\n", DEFAULT_3GPP_PPB_URL);
+            url = DEFAULT_3GPP_PPB_URL;
+        }
     }
+
     oscl_wchar wbuf[2];
     wbuf[1] = '\0';
     for (uint32 i = 0; i < url.get_size(); i++)
@@ -4896,7 +4996,15 @@
     }
     iDataSource = new PVPlayerDataSourceURL;
     iDataSource->SetDataSourceURL(iDownloadURL);
-    iDataSource->SetDataSourceFormatType(PVMF_MIME_DATA_SOURCE_HTTP_URL);
+
+    if (iFileType == PVMF_MIME_DATA_SOURCE_SHOUTCAST_URL)
+    {
+        iDataSource->SetDataSourceFormatType(PVMF_MIME_DATA_SOURCE_SHOUTCAST_URL);
+    }
+    else
+    {
+        iDataSource->SetDataSourceFormatType(PVMF_MIME_DATA_SOURCE_HTTP_URL);
+    }
 
     iDownloadFilename = NULL;
 
@@ -4922,7 +5030,6 @@
     iDownloadContextData->DownloadHTTPData()->iProxyName = iDownloadProxy;
     iDownloadContextData->DownloadHTTPData()->iProxyPort = iDownloadProxyPort;
     iDownloadContextData->DownloadHTTPData()->iPlaybackControl = PVMFSourceContextDataDownloadHTTP::ENoSaveToFile;
-    iDownloadContextData->CommonData()->iUseCPMPluginRegistry = false;
 
     iDataSource->SetDataSourceContextData(iDownloadContextData);
 }
@@ -4931,6 +5038,7 @@
 {
     OSCL_wHeapString<OsclMemAllocator> sinkfile = OUTPUTNAME_PREPEND_WSTRING;
     sinkfile += _STRLIT_WCHAR("test_player_3gp_ppb_");
+
     if (iShortPauseResume)
     {
         sinkfile += _STRLIT_WCHAR("sht_ps_rsm_");
@@ -4977,7 +5085,14 @@
 void pvplayer_async_test_ppb_normal::CreateDataSinkAudio()
 {
     OSCL_wHeapString<OsclMemAllocator> sinkfile = OUTPUTNAME_PREPEND_WSTRING;
-    sinkfile += _STRLIT_WCHAR("test_player_3gp_ppb_");
+    if (iShoutcastSession)
+    {
+        sinkfile += _STRLIT_WCHAR("test_player_shout_");
+    }
+    else
+    {
+        sinkfile += _STRLIT_WCHAR("test_player_3gp_ppb_");
+    }
     if (iShortPauseResume)
     {
         sinkfile += _STRLIT_WCHAR("sht_ps_rsm_");
@@ -5006,6 +5121,11 @@
         sinkfile += _STRLIT_WCHAR("lp_");
     }
 
+    if (iShoutcastPlayStopPlay)
+    {
+        sinkfile += _STRLIT_WCHAR("ply_stp_ply_");
+    }
+
     if (iPlayUntilEOS)
     {
         sinkfile += _STRLIT_WCHAR("utl_eos_audio.dat");
@@ -5092,7 +5212,6 @@
     iDownloadContextData->DownloadHTTPData()->iUserID = _STRLIT_CHAR("abc");
     iDownloadContextData->DownloadHTTPData()->iUserPasswd = _STRLIT_CHAR("xyz");
     iDownloadContextData->DownloadHTTPData()->iPlaybackControl = PVMFSourceContextDataDownloadHTTP::EAsap;
-    iDownloadContextData->CommonData()->iUseCPMPluginRegistry = false;
 
     iDataSource->SetDataSourceContextData(iDownloadContextData);
 }
diff --git a/engines/player/test/src/test_pv_player_engine_testset5.h b/engines/player/test/src/test_pv_player_engine_testset5.h
index 2371707..5110d8e 100644
--- a/engines/player/test/src/test_pv_player_engine_testset5.h
+++ b/engines/player/test/src/test_pv_player_engine_testset5.h
@@ -292,12 +292,6 @@
         {
             iLogger = PVLogger::GetLoggerObject("pvplayer_async_test_3gppdlnormal");
             iTestCaseName = _STRLIT_CHAR("3GPP Download Play ASAP");
-#if !(JANUS_IS_LOADABLE_MODULE)
-            iPluginFactory = NULL;
-#endif
-            iUseCpmForPlayback = false;
-            iDrmDeviceInfoFactory = NULL;
-            iDrmSystemClockFactory = NULL;
         }
 
         ~pvplayer_async_test_3gppdlnormal();
@@ -307,16 +301,6 @@
         void CreateDataSinkAudio();
 
         //for janus DRM
-#if !(JANUS_IS_LOADABLE_MODULE)
-        PVMFCPMPluginFactoryRegistryClient iPluginRegistryClient;
-        PVMFJanusPluginFactory* iPluginFactory;
-        OSCL_HeapString<OsclMemAllocator> iPluginMimeType;
-#endif
-        bool iUseCpmForPlayback;
-#if !(JANUS_IS_LOADABLE_MODULE)
-#endif
-        WmDrmDeviceInfoFactory* iDrmDeviceInfoFactory;
-        PVWmdrmDeviceSystemClockFactory* iDrmSystemClockFactory;
         void CleanupData();
 };
 
@@ -680,6 +664,9 @@
                 , iSeekToBOC(false)
                 , iSeekInCache(false)
                 , iEOSStopPlay(false)
+                , iShoutcastSession(false)
+                , iSCListenTime(0)
+                , iShoutcastPlayStopPlay(false)
                 , iSessionDuration(0)
         {
             iNumBufferingStart = iNumBufferingComplete = iNumUnderflow = iNumDataReady = iNumEOS = 0;
@@ -862,6 +849,26 @@
         }
         bool iEOSStopPlay;
 
+        void setShoutcastSessionDuration()
+        {
+            iSCListenTime = 5 * 60 * 1000 * 1000;
+        }
+        bool iShoutcastSession;
+        int32 iSCListenTime;
+        bool iShoutcastPlayStopPlay;
+
+        void enableShoutcastPauseResume()
+        {
+            iSCListenTime = 1 * 60 * 1000 * 1000;
+            enableShortPauseResume();
+        }
+
+        void enableShoutcastPlayStopPlay()
+        {
+            iSCListenTime = 30 * 1000 * 1000;
+            iShoutcastPlayStopPlay = true;
+        }
+
         //for janus drm.
         void PrintJanusError(const PVCmdResponse& aResponse);
 
diff --git a/engines/player/test/src/test_pv_player_engine_testset6.cpp b/engines/player/test/src/test_pv_player_engine_testset6.cpp
index 24f9828..1941b23 100644
--- a/engines/player/test/src/test_pv_player_engine_testset6.cpp
+++ b/engines/player/test/src/test_pv_player_engine_testset6.cpp
@@ -240,6 +240,8 @@
                     PVMFSourceContextDataPVR* pvrData = iSourceContextData->PVRData();
                     m_PVRControl = OSCL_NEW(PVMFPVRControl, ());
                     pvrData->SetPVRControl(m_PVRControl);
+                    fileType = PVMF_MIME_DATA_SOURCE_RTSP_PVR_FCS_URL;
+                    iFileType = PVMF_MIME_DATA_SOURCE_RTSP_PVR_FCS_URL;
                 }
 #endif
                 PVInterface* sourceContext = NULL;
@@ -572,7 +574,7 @@
         {
             fprintf(iTestMsgOutputFile, "***Adding Video Data Sink...\n");
             OSCL_wHeapString<OsclMemAllocator> videoSinkFileName = OUTPUTNAME_PREPEND_WSTRING;
-            if (iFileType == PVMF_MIME_DATA_SOURCE_RTSP_URL)
+            if (iFileType == PVMF_MIME_DATA_SOURCE_RTSP_URL || (iFileType ==  PVMF_MIME_DATA_SOURCE_RTSP_PVR_FCS_URL))
             {
                 videoSinkFileName += _STRLIT_WCHAR("test_player_rtspurl_video.dat");
             }
@@ -603,7 +605,7 @@
         {
             fprintf(iTestMsgOutputFile, "***Adding Audio Data Sink...\n");
             OSCL_wHeapString<OsclMemAllocator> audioSinkFileName = OUTPUTNAME_PREPEND_WSTRING;
-            if (iFileType == PVMF_MIME_DATA_SOURCE_RTSP_URL)
+            if (iFileType == PVMF_MIME_DATA_SOURCE_RTSP_URL || (iFileType ==  PVMF_MIME_DATA_SOURCE_RTSP_PVR_FCS_URL))
             {
                 audioSinkFileName += _STRLIT_WCHAR("test_player_rtspurl_audio.dat");
             }
@@ -5446,7 +5448,6 @@
             m_sourceContext.DisableDownloadPVXSourceContext() ;
             m_sourceContext.DisablePVRSourceContext() ;
             m_sourceContext.DisablePacketSourceSourceContext();
-            m_sourceContext.DisablePVRLocalPlaySourceContext();
             m_sourceContext.DisableCommonSourceContext();
 
 
diff --git a/engines/player/test/src/test_pv_player_engine_testset8.cpp b/engines/player/test/src/test_pv_player_engine_testset8.cpp
index a05bd9d..7914742 100644
--- a/engines/player/test/src/test_pv_player_engine_testset8.cpp
+++ b/engines/player/test/src/test_pv_player_engine_testset8.cpp
@@ -67,7 +67,6 @@
 #include "oscl_mem_audit.h"
 #endif
 
-
 //
 // pvplayer_async_test_printmetadata section
 //
@@ -110,16 +109,71 @@
             iTmpWCharBuffer[511] = '\0';
             iFileNameWStr = SOURCENAME_PREPEND_WSTRING;
             iFileNameWStr += iTmpWCharBuffer;
-            iDataSource->SetDataSourceURL(iFileNameWStr);
-            iDataSource->SetDataSourceFormatType(iFileType);
             /*
              * In case of HTTP URLs always attempt rollover,
              * since we donot know if it is a download or a streaming url
              */
             if (iFileType == PVMF_MIME_DATA_SOURCE_HTTP_URL)
             {
-                iDataSource->SetAlternateSourceFormatType(PVMF_MIME_DATA_SOURCE_MS_HTTP_STREAMING_URL);
+                iSourceContextData = new PVMFSourceContextData();
+                iSourceContextData->EnableStreamingSourceContext();
+                iSourceContextData->EnableCommonSourceContext();
+                PVInterface* sourceContextStream = NULL;
+
+                PVUuid streamingContextUuid(PVMF_SOURCE_CONTEXT_DATA_STREAMING_UUID);
+                if (iSourceContextData->queryInterface(streamingContextUuid, sourceContextStream))
+                {
+                    PVMFSourceContextDataStreaming* streamingContext =
+                        OSCL_STATIC_CAST(PVMFSourceContextDataStreaming*, sourceContextStream);
+                    streamingContext->iStreamStatsLoggingURL = iFileNameWStr;
+
+                    if (iProxyEnabled)
+                    {
+                        streamingContext->iProxyName = _STRLIT_WCHAR("");
+                        streamingContext->iProxyPort = 8080;
+                    }
+                }
+                PVInterface* sourceContextDownload = NULL;
+                iSourceContextData->EnableDownloadHTTPSourceContext();
+                PVUuid downloadContextUuid(PVMF_SOURCE_CONTEXT_DATA_DOWNLOAD_HTTP_UUID);
+                if (iSourceContextData->queryInterface(downloadContextUuid, sourceContextDownload))
+                {
+                    //create the opaque data
+                    iDownloadProxy = _STRLIT_CHAR("");
+                    int32 iDownloadProxyPort = 0;
+                    if (iProxyEnabled)
+                    {
+                        iDownloadProxy = _STRLIT_CHAR("");
+                        iDownloadProxyPort = 8080;
+                    }
+                    iDownloadConfigFilename = OUTPUTNAME_PREPEND_WSTRING;
+                    iDownloadConfigFilename += _STRLIT_WCHAR("mydlconfig");
+                    iDownloadMaxfilesize = 0x7FFFFFFF;
+                    iDownloadFilename = OUTPUTNAME_PREPEND_WSTRING;
+                    iDownloadFilename += _STRLIT_WCHAR("test_ftdownload.dl");
+                    bool aIsNewSession = true;
+
+                    iSourceContextData->DownloadHTTPData()->bIsNewSession = aIsNewSession;
+                    iSourceContextData->DownloadHTTPData()->iConfigFileName = iDownloadConfigFilename;
+                    iSourceContextData->DownloadHTTPData()->iDownloadFileName = iDownloadFilename;
+                    iSourceContextData->DownloadHTTPData()->iMaxFileSize = iDownloadMaxfilesize;
+                    iSourceContextData->DownloadHTTPData()->iPlaybackControl = PVMFSourceContextDataDownloadHTTP::EAsap;
+                    iSourceContextData->DownloadHTTPData()->iProxyName = iDownloadProxy;
+                    iSourceContextData->DownloadHTTPData()->iProxyPort = iDownloadProxyPort;
+
+                }
+                iDataSource->SetDataSourceContextData((OsclAny*)iSourceContextData);
+
+                iDataSource->SetDataSourceFormatType(PVMF_MIME_DATA_SOURCE_MS_HTTP_STREAMING_URL);
+                iDataSource->SetAlternateSourceFormatType(PVMF_MIME_DATA_SOURCE_HTTP_URL);
             }
+            else
+            {
+                iDataSource->SetDataSourceFormatType(iFileType);
+            }
+
+            iDataSource->SetDataSourceURL(iFileNameWStr);
+
             OSCL_TRY(error, iCurrentCmdId = iPlayer->AddDataSource(*iDataSource, (OsclAny*) & iContextObject));
             OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
         }
@@ -314,6 +368,9 @@
             PVPATB_TEST_IS_TRUE(PVPlayerFactory::DeletePlayer(iPlayer));
             iPlayer = NULL;
 
+            delete iSourceContextData;
+            iSourceContextData = NULL;
+
             delete iDataSource;
             iDataSource = NULL;
 
@@ -1269,8 +1326,71 @@
             iTmpWCharBuffer[511] = '\0';
             iFileNameWStr = SOURCENAME_PREPEND_WSTRING;
             iFileNameWStr += iTmpWCharBuffer;
+            /*
+             * In case of HTTP URLs always attempt rollover,
+             * since we donot know if it is a download or a streaming url
+             */
+            if (iFileType == PVMF_MIME_DATA_SOURCE_HTTP_URL)
+            {
+                iSourceContextData = new PVMFSourceContextData();
+                iSourceContextData->EnableStreamingSourceContext();
+                iSourceContextData->EnableCommonSourceContext();
+                PVInterface* sourceContextStream = NULL;
+
+                PVUuid streamingContextUuid(PVMF_SOURCE_CONTEXT_DATA_STREAMING_UUID);
+                if (iSourceContextData->queryInterface(streamingContextUuid, sourceContextStream))
+                {
+                    PVMFSourceContextDataStreaming* streamingContext =
+                        OSCL_STATIC_CAST(PVMFSourceContextDataStreaming*, sourceContextStream);
+                    streamingContext->iStreamStatsLoggingURL = iFileNameWStr;
+
+                    if (iProxyEnabled)
+                    {
+                        streamingContext->iProxyName = _STRLIT_WCHAR("");
+                        streamingContext->iProxyPort = 8080;
+                    }
+                }
+                PVInterface* sourceContextDownload = NULL;
+                iSourceContextData->EnableDownloadHTTPSourceContext();
+                PVUuid downloadContextUuid(PVMF_SOURCE_CONTEXT_DATA_DOWNLOAD_HTTP_UUID);
+                if (iSourceContextData->queryInterface(downloadContextUuid, sourceContextDownload))
+                {
+                    //create the opaque data
+                    iDownloadProxy = _STRLIT_CHAR("");
+                    int32 iDownloadProxyPort = 0;
+                    if (iProxyEnabled)
+                    {
+                        iDownloadProxy = _STRLIT_CHAR("");
+                        iDownloadProxyPort = 8080;
+                    }
+                    iDownloadConfigFilename = OUTPUTNAME_PREPEND_WSTRING;
+                    iDownloadConfigFilename += _STRLIT_WCHAR("mydlconfig");
+                    iDownloadMaxfilesize = 0x7FFFFFFF;
+                    iDownloadFilename = OUTPUTNAME_PREPEND_WSTRING;
+                    iDownloadFilename += _STRLIT_WCHAR("test_ftdownload.dl");
+                    bool aIsNewSession = true;
+
+                    iSourceContextData->DownloadHTTPData()->bIsNewSession = aIsNewSession;
+                    iSourceContextData->DownloadHTTPData()->iConfigFileName = iDownloadConfigFilename;
+                    iSourceContextData->DownloadHTTPData()->iDownloadFileName = iDownloadFilename;
+                    iSourceContextData->DownloadHTTPData()->iMaxFileSize = iDownloadMaxfilesize;
+                    iSourceContextData->DownloadHTTPData()->iPlaybackControl = PVMFSourceContextDataDownloadHTTP::EAsap;
+                    iSourceContextData->DownloadHTTPData()->iProxyName = iDownloadProxy;
+                    iSourceContextData->DownloadHTTPData()->iProxyPort = iDownloadProxyPort;
+
+                }
+                iDataSource->SetDataSourceContextData((OsclAny*)iSourceContextData);
+
+                iDataSource->SetDataSourceFormatType(PVMF_MIME_DATA_SOURCE_MS_HTTP_STREAMING_URL);
+                iDataSource->SetAlternateSourceFormatType(PVMF_MIME_DATA_SOURCE_HTTP_URL);
+            }
+            else
+            {
+                iDataSource->SetDataSourceFormatType(iFileType);
+            }
+
             iDataSource->SetDataSourceURL(iFileNameWStr);
-            iDataSource->SetDataSourceFormatType(iFileType);
+
             OSCL_TRY(error, iCurrentCmdId = iPlayer->AddDataSource(*iDataSource, (OsclAny*) & iContextObject));
             OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
         }
@@ -1411,6 +1531,9 @@
             fprintf(iTestMsgOutputFile, "After player destruction: ");
             PrintMemStats();
 
+            delete iSourceContextData;
+            iSourceContextData = NULL;
+
             delete iDataSource;
             iDataSource = NULL;
 
@@ -1847,8 +1970,71 @@
             iDataSource = new PVPlayerDataSourceURL;
             oscl_UTF8ToUnicode(iFileName, oscl_strlen(iFileName), iTmpWCharBuffer, 512);
             iFileNameWStr.set(iTmpWCharBuffer, oscl_strlen(iTmpWCharBuffer));
+            /*
+             * In case of HTTP URLs always attempt rollover,
+             * since we donot know if it is a download or a streaming url
+             */
+            if (iFileType == PVMF_MIME_DATA_SOURCE_HTTP_URL)
+            {
+                iSourceContextData = new PVMFSourceContextData();
+                iSourceContextData->EnableStreamingSourceContext();
+                iSourceContextData->EnableCommonSourceContext();
+                PVInterface* sourceContextStream = NULL;
+
+                PVUuid streamingContextUuid(PVMF_SOURCE_CONTEXT_DATA_STREAMING_UUID);
+                if (iSourceContextData->queryInterface(streamingContextUuid, sourceContextStream))
+                {
+                    PVMFSourceContextDataStreaming* streamingContext =
+                        OSCL_STATIC_CAST(PVMFSourceContextDataStreaming*, sourceContextStream);
+                    streamingContext->iStreamStatsLoggingURL = iFileNameWStr;
+
+                    if (iProxyEnabled)
+                    {
+                        streamingContext->iProxyName = _STRLIT_WCHAR("");
+                        streamingContext->iProxyPort = 8080;
+                    }
+                }
+                PVInterface* sourceContextDownload = NULL;
+                iSourceContextData->EnableDownloadHTTPSourceContext();
+                PVUuid downloadContextUuid(PVMF_SOURCE_CONTEXT_DATA_DOWNLOAD_HTTP_UUID);
+                if (iSourceContextData->queryInterface(downloadContextUuid, sourceContextDownload))
+                {
+                    //create the opaque data
+                    iDownloadProxy = _STRLIT_CHAR("");
+                    int32 iDownloadProxyPort = 0;
+                    if (iProxyEnabled)
+                    {
+                        iDownloadProxy = _STRLIT_CHAR("");
+                        iDownloadProxyPort = 8080;
+                    }
+                    iDownloadConfigFilename = OUTPUTNAME_PREPEND_WSTRING;
+                    iDownloadConfigFilename += _STRLIT_WCHAR("mydlconfig");
+                    iDownloadMaxfilesize = 0x7FFFFFFF;
+                    iDownloadFilename = OUTPUTNAME_PREPEND_WSTRING;
+                    iDownloadFilename += _STRLIT_WCHAR("test_ftdownload.dl");
+                    bool aIsNewSession = true;
+
+                    iSourceContextData->DownloadHTTPData()->bIsNewSession = aIsNewSession;
+                    iSourceContextData->DownloadHTTPData()->iConfigFileName = iDownloadConfigFilename;
+                    iSourceContextData->DownloadHTTPData()->iDownloadFileName = iDownloadFilename;
+                    iSourceContextData->DownloadHTTPData()->iMaxFileSize = iDownloadMaxfilesize;
+                    iSourceContextData->DownloadHTTPData()->iPlaybackControl = PVMFSourceContextDataDownloadHTTP::EAsap;
+                    iSourceContextData->DownloadHTTPData()->iProxyName = iDownloadProxy;
+                    iSourceContextData->DownloadHTTPData()->iProxyPort = iDownloadProxyPort;
+
+                }
+                iDataSource->SetDataSourceContextData((OsclAny*)iSourceContextData);
+
+                iDataSource->SetDataSourceFormatType(PVMF_MIME_DATA_SOURCE_MS_HTTP_STREAMING_URL);
+                iDataSource->SetAlternateSourceFormatType(PVMF_MIME_DATA_SOURCE_HTTP_URL);
+            }
+            else
+            {
+                iDataSource->SetDataSourceFormatType(iFileType);
+            }
+
             iDataSource->SetDataSourceURL(iFileNameWStr);
-            iDataSource->SetDataSourceFormatType(iFileType);
+
             OSCL_TRY(error, iCurrentCmdId = iPlayer->AddDataSource(*iDataSource, (OsclAny*) & iContextObject));
             OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
         }
@@ -1991,6 +2177,9 @@
             PVPATB_TEST_IS_TRUE(PVPlayerFactory::DeletePlayer(iPlayer));
             iPlayer = NULL;
 
+            delete iSourceContextData;
+            iSourceContextData = NULL;
+
             delete iDataSource;
             iDataSource = NULL;
 
diff --git a/engines/player/test/src/test_pv_player_engine_testset8.h b/engines/player/test/src/test_pv_player_engine_testset8.h
index 5e7e526..96188ac 100644
--- a/engines/player/test/src/test_pv_player_engine_testset8.h
+++ b/engines/player/test/src/test_pv_player_engine_testset8.h
@@ -57,6 +57,10 @@
 #include "pvmi_config_and_capability_observer.h"
 #endif
 
+#ifndef PVMF_SOURCE_CONTEXT_DATA_H_INCLUDED
+#include "pvmf_source_context_data.h"
+#endif
+
 #define INDEX_CODEC_SPECIFIC_INFO_UNDEFINED -1
 #define INDEX_CODEC_SPECIFIC_INFO_AUDIO 1
 #define INDEX_CODEC_SPECIFIC_INFO_VIDEO 2
@@ -138,6 +142,7 @@
                 , iMIOFileOutText(NULL)
                 , iCurrentCmdId(0)
                 , iReleaseMetadataByApp(aReleaseMetadataByApp)
+                , iSourceContextData(NULL)
         {
             if (iReleaseMetadataByApp)
             {
@@ -207,6 +212,7 @@
         PvmiMIOControl* iMIOFileOutText;
         PVCommandId iCurrentCmdId;
         bool iReleaseMetadataByApp;
+        PVMFSourceContextData* iSourceContextData;
 
         OSCL_wHeapString<OsclMemAllocator> iFileNameWStr;
         oscl_wchar iTmpWCharBuffer[512];
@@ -214,6 +220,12 @@
         PVPMetadataList iMetadataKeyList;
         Oscl_Vector<PvmiKvp, OsclMemAllocator> iMetadataValueList;
         int32 iNumValues;
+
+        int32 iDownloadMaxfilesize;
+        OSCL_wHeapString<OsclMemAllocator> iDownloadFilename;
+        OSCL_HeapString<OsclMemAllocator> iDownloadProxy;
+        OSCL_wHeapString<OsclMemAllocator> iDownloadConfigFilename;
+
 };
 
 
@@ -261,6 +273,7 @@
                 , iMIOFileOutAudio(NULL)
                 , iMIOFileOutText(NULL)
                 , iCurrentCmdId(0)
+                , iSourceContextData(NULL)
                 , iPlayTimeCtr(0)
                 , iInitialNumBytes(0)
                 , iInitialNumAllocs(0)
@@ -315,6 +328,7 @@
         PvmiMIOControl* iMIOFileOutAudio;
         PvmiMIOControl* iMIOFileOutText;
         PVCommandId iCurrentCmdId;
+        PVMFSourceContextData* iSourceContextData;
 
         OSCL_wHeapString<OsclMemAllocator> iFileNameWStr;
         oscl_wchar iTmpWCharBuffer[512];
@@ -327,6 +341,11 @@
 
         uint32 iInitialNumBytes;
         uint32 iInitialNumAllocs;
+
+        int32 iDownloadMaxfilesize;
+        OSCL_wHeapString<OsclMemAllocator> iDownloadFilename;
+        OSCL_HeapString<OsclMemAllocator> iDownloadProxy;
+        OSCL_wHeapString<OsclMemAllocator> iDownloadConfigFilename;
 };
 
 
@@ -373,6 +392,7 @@
                 , iMIOFileOutAudio(NULL)
                 , iMIOFileOutText(NULL)
                 , iCurrentCmdId(0)
+                , iSourceContextData(NULL)
         {
             iTestCaseName = _STRLIT_CHAR("Play Until EOS");
         }
@@ -420,9 +440,15 @@
         PvmiMIOControl* iMIOFileOutAudio;
         PvmiMIOControl* iMIOFileOutText;
         PVCommandId iCurrentCmdId;
+        PVMFSourceContextData* iSourceContextData;
 
         OSCL_wHeapString<OsclMemAllocator> iFileNameWStr;
         oscl_wchar iTmpWCharBuffer[512];
+
+        int32 iDownloadMaxfilesize;
+        OSCL_wHeapString<OsclMemAllocator> iDownloadFilename;
+        OSCL_HeapString<OsclMemAllocator> iDownloadProxy;
+        OSCL_wHeapString<OsclMemAllocator> iDownloadConfigFilename;
 };
 
 // Structure CodecSpecificInfo stores the codecSpecificInfoIndex,
diff --git a/engines/player/test/src/test_pv_player_engine_testset9.cpp b/engines/player/test/src/test_pv_player_engine_testset9.cpp
index c79da10..d93eb7c 100644
--- a/engines/player/test/src/test_pv_player_engine_testset9.cpp
+++ b/engines/player/test/src/test_pv_player_engine_testset9.cpp
@@ -203,14 +203,11 @@
     else
 #endif
     {
-        bool aUseCpmForPlayback = false;
-
         iDownloadContextDataHTTP = new PVMFDownloadDataSourceHTTP(aIsNewSession, iDownloadConfigFilename, iDownloadFilename,
                 iDownloadMaxfilesize,
                 iDownloadProxy,
                 iDownloadProxyPort,
-                PVMFDownloadDataSourceHTTP::EAsap,
-                aUseCpmForPlayback);
+                PVMFDownloadDataSourceHTTP::EAsap);
     }
 }
 
@@ -317,7 +314,6 @@
                         iDownloadFilename = OUTPUTNAME_PREPEND_WSTRING;
                         iDownloadFilename += _STRLIT_WCHAR("test_ftdownload.dl");
                         bool aIsNewSession = true;
-                        bool iUseCpmForPlayback = false;
 
                         iSourceContextData->DownloadHTTPData()->bIsNewSession = aIsNewSession;
                         iSourceContextData->DownloadHTTPData()->iConfigFileName = iDownloadConfigFilename;
@@ -326,7 +322,6 @@
                         iSourceContextData->DownloadHTTPData()->iPlaybackControl = PVMFSourceContextDataDownloadHTTP::EAsap;
                         iSourceContextData->DownloadHTTPData()->iProxyName = iDownloadProxy;
                         iSourceContextData->DownloadHTTPData()->iProxyPort = iDownloadProxyPort;
-                        iSourceContextData->CommonData()->iUseCPMPluginRegistry = iUseCpmForPlayback;
 
                     }
                     iDataSource->SetDataSourceContextData((OsclAny*)iSourceContextData);
diff --git a/engines/player/test/src/test_pv_player_engine_testset_cpmdlapassthru.cpp b/engines/player/test/src/test_pv_player_engine_testset_cpmdlapassthru.cpp
index df62fbb..00b4be7 100644
--- a/engines/player/test/src/test_pv_player_engine_testset_cpmdlapassthru.cpp
+++ b/engines/player/test/src/test_pv_player_engine_testset_cpmdlapassthru.cpp
@@ -290,14 +290,6 @@
                     iSourceContextData->EnableCommonSourceContext();
 
                     PVInterface* sourceContextStream = NULL;
-                    bool useCPM = true;
-                    PVUuid commonContextUuid(PVMF_SOURCE_CONTEXT_DATA_COMMON_UUID);
-                    if (iSourceContextData->queryInterface(commonContextUuid, sourceContextStream))
-                    {
-                        PVMFSourceContextDataCommon* commonContext =
-                            OSCL_STATIC_CAST(PVMFSourceContextDataCommon*, sourceContextStream);
-                        commonContext->iUseCPMPluginRegistry = useCPM;
-                    }
 
                     iSourceContextData->EnableStreamingSourceContext();
                     PVUuid streamingContextUuid(PVMF_SOURCE_CONTEXT_DATA_STREAMING_UUID);
@@ -326,7 +318,6 @@
                         iDownloadFilename = OUTPUTNAME_PREPEND_WSTRING;
                         iDownloadFilename += _STRLIT_WCHAR("test_ftdownload.dl");
                         bool aIsNewSession = true;
-                        bool iUseCpmForPlayback = true;
 
                         iSourceContextData->DownloadHTTPData()->bIsNewSession = aIsNewSession;
                         iSourceContextData->DownloadHTTPData()->iConfigFileName = iDownloadConfigFilename;
@@ -335,7 +326,6 @@
                         iSourceContextData->DownloadHTTPData()->iPlaybackControl = PVMFSourceContextDataDownloadHTTP::EAsap;
                         iSourceContextData->DownloadHTTPData()->iProxyName = iDownloadProxy;
                         iSourceContextData->DownloadHTTPData()->iProxyPort = iDownloadProxyPort;
-                        iSourceContextData->CommonData()->iUseCPMPluginRegistry = iUseCpmForPlayback;
 
                     }
                     iDataSource->SetDataSourceContextData((OsclAny*)iSourceContextData);
@@ -381,9 +371,8 @@
             }
             else
             {
-                //Create a data source with the CPM usage flag set.
-                bool useCPM = true;
-                iLocalDataSource = new PVMFLocalDataSource(useCPM);
+                //Create a data source
+                iLocalDataSource = new PVMFLocalDataSource();
                 iDataSource->SetDataSourceContextData((OsclAny*)iLocalDataSource);
             }
 
diff --git a/fileformats/common/parser/include/pvfile.h b/fileformats/common/parser/include/pvfile.h
index 9466880..23fae06 100644
--- a/fileformats/common/parser/include/pvfile.h
+++ b/fileformats/common/parser/include/pvfile.h
@@ -107,14 +107,7 @@
         //default constructor.
         PVFile()
         {
-            iFile = NULL;
-            iFileHandle = NULL;
-            iCPMAccessFactory = NULL;
-            iFilePtr = NULL;
-            iDataStreamAccess = NULL;
-            iFileSize = 0;
-            iFileSizeAvailable = false;
-            iRequestReadCapacityNotificationID = 0;
+            Reset();
         }
 
         //API to copy all fields from another object.
@@ -142,6 +135,18 @@
         {
         }
 
+        void Reset()
+        {
+            iFile = NULL;
+            iFileHandle = NULL;
+            iCPMAccessFactory = NULL;
+            iFilePtr = NULL;
+            iDataStreamAccess = NULL;
+            iFileSize = 0;
+            iFileSizeAvailable = false;
+            iRequestReadCapacityNotificationID = 0;
+        }
+
         //API to set the CPM access interface.
         //The CPM access interface is provided in the
         //local file source data.
diff --git a/fileformats/common/parser/src/pvfile.cpp b/fileformats/common/parser/src/pvfile.cpp
index 16d8f66..2c8f628 100644
--- a/fileformats/common/parser/src/pvfile.cpp
+++ b/fileformats/common/parser/src/pvfile.cpp
@@ -66,9 +66,9 @@
 OSCL_EXPORT_REF int32 PVFile::Tell()
 {
     if (iFile)
-        return iFile->Tell();
+        return (TOsclFileOffsetInt32)iFile->Tell();
     else if (iFilePtr)
-        return iFilePtr->Tell();
+        return (TOsclFileOffsetInt32)iFilePtr->Tell();
     else if (iDataStreamAccess)
         return (int32)(iDataStreamAccess->GetCurrentPointerPosition(iDataStreamSession));
     return (-1);//error
@@ -114,9 +114,10 @@
 
 OSCL_EXPORT_REF int32 PVFile::Close()
 {
+    int32 result = -1;
     if (iFilePtr)
     {
-        return -1;//Close should not be called for filePtr access.
+        result = -1;//Close should not be called for filePtr access.
     }
     else if (iDataStreamAccess)
     {
@@ -124,13 +125,12 @@
         PVUuid uuid = PVMIDataStreamSyncInterfaceUuid;
         iCPMAccessFactory->DestroyPVMFCPMPluginAccessInterface(uuid, iDataStreamAccess);
         iDataStreamAccess = NULL;
-        return 0;
+        result = 0;
     }
     else if (iFile)
     {
         //if using a file handle, don't actually close the
         //file, just flush it.
-        int32 result;
         if (iFileHandle)
             result = iFile->Flush();
 
@@ -140,11 +140,12 @@
         //delete the file object.
         OSCL_DELETE(iFile);
         iFile = NULL;
-        return result;
     }
-    return (-1);//not open
+    Reset(); // Reset all the internal flags
+    return result;
 }
 
+
 OSCL_EXPORT_REF int32 PVFile::Open(const oscl_wchar *filename,
                                    uint32 mode,
                                    Oscl_FileServer& fileserv)
@@ -247,6 +248,7 @@
 
 OSCL_EXPORT_REF bool PVFile::GetRemainingBytes(uint32& aNumBytes)
 {
+    bool result = false;
     if (iFile)
     {
         uint32 currPos = (uint32)(iFile->Tell());
@@ -261,7 +263,7 @@
         if (currPos <= iFileSize)
         {
             aNumBytes = (iFileSize - currPos);
-            return true;
+            result = true;
         }
     }
     else if (iFilePtr)
@@ -277,7 +279,7 @@
         if (currPos <= iFileSize)
         {
             aNumBytes = (iFileSize - currPos);
-            return true;
+            result = true;
         }
     }
     else if (iDataStreamAccess)
@@ -285,9 +287,11 @@
         PvmiDataStreamStatus status =
             iDataStreamAccess->QueryReadCapacity(iDataStreamSession, aNumBytes);
         if ((status == PVDS_SUCCESS) || (status == PVDS_END_OF_STREAM))
-            return true;
+        {
+            result = true;
+        }
     }
-    return false; //error
+    return result;
 }
 
 OSCL_EXPORT_REF bool
diff --git a/fileformats/common/parser/src/pvmi_datastreamsyncinterface_ref_impl.cpp b/fileformats/common/parser/src/pvmi_datastreamsyncinterface_ref_impl.cpp
index a1f8015..659ab62 100644
--- a/fileformats/common/parser/src/pvmi_datastreamsyncinterface_ref_impl.cpp
+++ b/fileformats/common/parser/src/pvmi_datastreamsyncinterface_ref_impl.cpp
@@ -125,7 +125,7 @@
         int32 res = iFileObject->Seek(0, Oscl_File::SEEKEND);
         if (res == 0)
         {
-            iFileNumBytes = iFileObject->Tell();
+            iFileNumBytes = (TOsclFileOffsetInt32)iFileObject->Tell();
             iFileObject->Seek(0, Oscl_File::SEEKSET);
         }
         aSessionID = iSessionID;
@@ -295,7 +295,7 @@
 
     if (!iFileObject)
         return 0;
-    int32 result = iFileObject->Tell();
+    int32 result = (TOsclFileOffsetInt32)iFileObject->Tell();
     LOGDEBUG((0, "PVMIDataStreamSyncInterfaceRefImpl::GetCurrentContentPosition returning %d", result));
     return (uint32)(result);
 }
diff --git a/fileformats/id3parcom/build/make/local.mk b/fileformats/id3parcom/build/make/local.mk
index f56b4e4..7fe42b1 100644
--- a/fileformats/id3parcom/build/make/local.mk
+++ b/fileformats/id3parcom/build/make/local.mk
@@ -6,13 +6,7 @@
 
 TARGET := pvid3parcom
 
-
-
-
-
-
-
-
+XCXXFLAGS += $(FLAG_COMPILE_WARNINGS_AS_ERRORS)
 
 SRCDIR := ../../src
 INCSRCDIR := ../../include
diff --git a/fileformats/id3parcom/include/pv_id3_parcom_constants.h b/fileformats/id3parcom/include/pv_id3_parcom_constants.h
index 6839a12..17c4327 100644
--- a/fileformats/id3parcom/include/pv_id3_parcom_constants.h
+++ b/fileformats/id3parcom/include/pv_id3_parcom_constants.h
@@ -75,6 +75,8 @@
 #define UNICODE_BOM_SIZE						2
 #define VERSION_SIZE							2
 
+#define UNICODE_CHAR_SIZE						2
+
 //Max length for null terminated strings in text frames
 #define ID3_MAX_STRING_FRAME_LEN				256
 
diff --git a/fileformats/id3parcom/src/pv_id3_parcom.cpp b/fileformats/id3parcom/src/pv_id3_parcom.cpp
index abd14ef..5491858 100644
--- a/fileformats/id3parcom/src/pv_id3_parcom.cpp
+++ b/fileformats/id3parcom/src/pv_id3_parcom.cpp
@@ -41,6 +41,9 @@
 #ifndef OSCL_DLL_H_INCLUDED
 #include "oscl_dll.h"
 #endif
+#ifndef WCHAR_SIZE_UTILS_H_INCLUDED
+#include "wchar_size_utils.h"
+#endif
 
 #define LOG_STACK_TRACE(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, m);
 #define LOG_DEBUG(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_DEBUG, m);
@@ -3540,12 +3543,31 @@
         case PV_ID3_CHARSET_UTF16:
         case PV_ID3_CHARSET_UTF16BE:
         {
-            char* tmpData = NULL;
-            tmpData = (char*) AllocateValueArray(err, PVMI_KVPVALTYPE_CHARPTR, aValueSize / sizeof(oscl_wchar) + 1, &iAlloc);
+            //it uses 16-bit unicode 2.0 (ISO/IEC 10646-1:1993, UCS-2)
 
-            oscl_UnicodeToUTF8((oscl_wchar*)ptrFrameData, aValueSize / sizeof(oscl_wchar), tmpData, aValueSize);
+            char* tmpData = NULL;
+            int len = aValueSize / UNICODE_CHAR_SIZE + 1;
+            tmpData = (char*) AllocateValueArray(err, PVMI_KVPVALTYPE_CHARPTR, len, &iAlloc);
+
+            if (sizeof(oscl_wchar) == UNICODE_CHAR_SIZE)
+            {
+                oscl_UnicodeToUTF8((oscl_wchar*)ptrFrameData, aValueSize / sizeof(oscl_wchar), tmpData, len);
+            }
+            else
+            {
+                oscl_wchar* tmpData2 = NULL;
+
+                tmpData2 = (oscl_wchar*) AllocateValueArray(err, PVMI_KVPVALTYPE_WCHARPTR, len);
+                // convert 2 byte unicode data  to 4 byte wchar data
+                ExpandWChar2BytesTo4Bytes(tmpData2, (uint16*)ptrFrameData, len);
+
+                oscl_UnicodeToUTF8(tmpData2, aValueSize / UNICODE_CHAR_SIZE, tmpData, len);
+
+                OSCL_ARRAY_DELETE(tmpData2);
+            }
+
             // copy the UTF8 string back to ptrFrameData
-            oscl_strncpy((char*)ptrFrameData, tmpData, oscl_strlen((const oscl_wchar*)ptrFrameData) + 1);
+            oscl_strncpy((char*)ptrFrameData, tmpData, len);
 
             iAlloc.deallocate((OsclAny*)tmpData);
         }
diff --git a/fileformats/mp3/parser/include/imp3ff.h b/fileformats/mp3/parser/include/imp3ff.h
index 8034b76..254da42 100644
--- a/fileformats/mp3/parser/include/imp3ff.h
+++ b/fileformats/mp3/parser/include/imp3ff.h
@@ -111,24 +111,24 @@
 typedef enum
 {
     MP3_ERROR_UNKNOWN = 0,
-    MP3_SUCCESS,
-    MP3_END_OF_FILE,
-    MP3_CRC_ERR,
-    MP3_FILE_READ_ERR,
-    MP3_FILE_HDR_READ_ERR,
-    MP3_FILE_HDR_DECODE_ERR,
-    MP3_FILE_XING_HDR_ERR,
-    MP3_FILE_VBRI_HDR_ERR,
-    MP3_ERR_NO_MEMORY,
-    MP3_NO_SYNC_FOUND,
-    MP3_FILE_OPEN_ERR,
+    MP3_SUCCESS = 1,
+    MP3_END_OF_FILE = 2,
+    MP3_CRC_ERR = 3,
+    MP3_FILE_READ_ERR = 4,
+    MP3_FILE_HDR_READ_ERR = 5,
+    MP3_FILE_HDR_DECODE_ERR = 6,
+    MP3_FILE_XING_HDR_ERR = 7,
+    MP3_FILE_VBRI_HDR_ERR = 8,
+    MP3_ERR_NO_MEMORY = 9,
+    MP3_NO_SYNC_FOUND = 10,
+    MP3_FILE_OPEN_ERR = 11,
     /* PD related Error values*/
-    MP3_ERROR_UNKNOWN_OBJECT,
-    MP3_FILE_OPEN_FAILED,
-    MP3_INSUFFICIENT_DATA,
-    MP3_METADATA_NOTPARSED,
+    MP3_ERROR_UNKNOWN_OBJECT = 12,
+    MP3_FILE_OPEN_FAILED = 13,
+    MP3_INSUFFICIENT_DATA = 14,
+    MP3_METADATA_NOTPARSED = 15,
     /* Duration related Info value*/
-    MP3_DURATION_PRESENT
+    MP3_DURATION_PRESENT = 16
 }MP3ErrorType;
 
 //----------------------------------------------------------------------
diff --git a/fileformats/mp3/parser/include/mp3utils.h b/fileformats/mp3/parser/include/mp3utils.h
index df9c7cc..4c421da 100644
--- a/fileformats/mp3/parser/include/mp3utils.h
+++ b/fileformats/mp3/parser/include/mp3utils.h
@@ -116,7 +116,7 @@
         static int32  CloseFile(PVFile *fp);
         static int32  Flush(PVFile *fp);
         static bool   getCurrentFileSize(PVFile *fp, uint32& aCurrentSize);
-        static MP3ErrorType SeektoOffset(PVFile *fp, int32 offset);
+        static MP3ErrorType SeektoOffset(PVFile *fp, int32 offset, Oscl_File::seek_type aSeekType);
 };
 
 #endif // MP3_UTILS_H_INCLUDED
diff --git a/fileformats/mp3/parser/src/mp3parser.cpp b/fileformats/mp3/parser/src/mp3parser.cpp
index 4ffeaf7..68f1bb1 100644
--- a/fileformats/mp3/parser/src/mp3parser.cpp
+++ b/fileformats/mp3/parser/src/mp3parser.cpp
@@ -75,6 +75,7 @@
 static const uint8	FRAME_VESION_MPEG_2_5		= 0x00;
 
 static const uint8	MP3_FRAME_HEADER_SIZE				= 0x04;
+static const uint32	MP3_FIRST_FRAME_SIZE				= 128;
 /***********************************************************************
  * End XING VBR Header Constants
  ***********************************************************************/
@@ -419,9 +420,8 @@
     ConfigSize = 0;
     StartOffset = 0;
 
-    int32 currentFilePosn = 0; // current file position
     uint32 firstHeader = 0;
-    uint8 pFirstFrame[128];
+    uint8 pFirstFrame[MP3_FIRST_FRAME_SIZE];
     uint8 pFrameHeader[MP3_FRAME_HEADER_SIZE];
 
     uint8 * pBuf = pFirstFrame;
@@ -431,31 +431,21 @@
     oscl_memset(&ConfigData, 0, sizeof(ConfigData));
     oscl_memset(&iVbriHeader, 0, sizeof(iVbriHeader));
 
-    fp->Seek(0, Oscl_File::SEEKSET);
+    MP3ErrorType errCode = MP3_SUCCESS;
     // SAVE THE CURRENT FILE POSITION
-    currentFilePosn = MP3Utils::getCurrentFilePosition(fp);
-
-    if (!iLocalFileSizeSet)
+    errCode = MP3Utils::SeektoOffset(fp, 0, Oscl_File::SEEKSET);
+    // try to retrieve the file size
+    if (fp->GetCPM() == NULL && MP3Utils::getCurrentFileSize(fp, iLocalFileSize))
     {
-        // seek to the end of the cfile and get the file size
-        int res = fp->Seek(0, Oscl_File::SEEKEND);
-        if (res == 0)   //success
+        iLocalFileSizeSet = true;
+        iInitSearchFileSize = OSCL_MIN(iInitSearchFileSize, iLocalFileSize);
+        if (iLocalFileSize == 0)
         {
-            iLocalFileSize = MP3Utils::getCurrentFilePosition(fp);
-            iLocalFileSizeSet = true;
-            if (iLocalFileSize == 0)
-            {
-                return MP3_END_OF_FILE;
-            }
+            return MP3_END_OF_FILE;
         }
     }
 
-    if (iLocalFileSizeSet)
-    {
-        // set the length of initial search to the min between default and filesize
-        iInitSearchFileSize = OSCL_MIN(iInitSearchFileSize, iLocalFileSize);
-    }
-    else
+    if (!iLocalFileSizeSet)
     {
         uint32 remBytes = 0;
         if (fp->GetRemainingBytes(remBytes))
@@ -464,14 +454,6 @@
         }
     }
 
-    MP3ErrorType err = MP3Utils::SeektoOffset(fp, 0);
-    if (MP3_SUCCESS != err)
-    {
-        return err;
-    }
-
-    uint32 byteOffsetToStartOfAudioFrames = currentFilePosn;
-
     if (fp->GetFileBufferingCapacity() <= 0)
     {
         // Parse the MetaData (Beginning or End)
@@ -481,30 +463,27 @@
             // This is the position of the first MP3 Frame in the File
             if (iId3TagParser.IsID3V2Present())
             {
-                byteOffsetToStartOfAudioFrames = iId3TagParser.GetByteOffsetToStartOfAudioFrames();
-                iTagSize = byteOffsetToStartOfAudioFrames;
+                iTagSize = iId3TagParser.GetByteOffsetToStartOfAudioFrames();
             }
         }
     }
     else
     {
         // get id3 tag size only
-        iId3TagParser.IsID3V2Present(fp, byteOffsetToStartOfAudioFrames);
+        iId3TagParser.IsID3V2Present(fp, iTagSize);
     }
 
-    if (byteOffsetToStartOfAudioFrames > 0)
+    if (iTagSize > 0)
     {
-        StartOffset = byteOffsetToStartOfAudioFrames;
+        StartOffset = iTagSize;
     }
 
-    err = MP3Utils::SeektoOffset(fp, StartOffset);
-    if (MP3_SUCCESS != err)
+    errCode = MP3Utils::SeektoOffset(fp, StartOffset, Oscl_File::SEEKSET);
+    if (MP3_SUCCESS != errCode)
     {
-        return err;
+        return errCode;
     }
 
-    currentFilePosn = StartOffset;
-
     if (!MP3FileIO::readByteData(fp, MP3_FRAME_HEADER_SIZE, (uint8 *)pFrameHeader))
     {
         return MP3_INSUFFICIENT_DATA;
@@ -521,11 +500,12 @@
     if (!GetMP3Header(firstHeader, iMP3HeaderInfo))
     {
         uint32 seekOffset = 0;
+        MP3Utils::SeektoOffset(fp, 0 - MP3_FRAME_HEADER_SIZE, Oscl_File::SEEKCUR);
         MP3ErrorType err = mp3FindSync(StartOffset, seekOffset, fp);
         if (err == MP3_SUCCESS)
         {
             StartOffset += seekOffset;
-            MP3ErrorType err = MP3Utils::SeektoOffset(fp, StartOffset);
+            MP3ErrorType err = MP3Utils::SeektoOffset(fp, seekOffset, Oscl_File::SEEKCUR);
             if (MP3_SUCCESS != err)
             {
                 return err;
@@ -562,17 +542,19 @@
         ConfigSize = MP3_FRAME_HEADER_SIZE;
     }
 
-    err = MP3Utils::SeektoOffset(fp, StartOffset);
-    if (MP3_SUCCESS != err)
+    int32 revSeek = 0 - MP3_FRAME_HEADER_SIZE;
+    errCode = MP3Utils::SeektoOffset(fp, revSeek, Oscl_File::SEEKCUR);
+    if (MP3_SUCCESS != errCode)
     {
-        return err;
+        return errCode;
     }
 
-    if (!MP3FileIO::readByteData(fp, 128, pFirstFrame))
+    if (!MP3FileIO::readByteData(fp, MP3_FIRST_FRAME_SIZE, pFirstFrame))
     {
         return MP3_INSUFFICIENT_DATA;
     }
 
+    revSeek = 0 - MP3_FIRST_FRAME_SIZE;
     //VBRI header exist exactly 32 bytes after first frame header
     if ((oscl_memcmp((pBuf + VBRI_HEADER_OFFSET), STR_VBRI_HEADER_IDENTIFIER, VBR_HEADER_SIZE) == 0))
     {
@@ -580,7 +562,7 @@
         int32 actualBufferSize = bufferSize + VBRI_HEADER_OFFSET + VBR_HEADER_SIZE;
         uint8* tempBuf = OSCL_ARRAY_NEW(uint8, actualBufferSize);
 
-        MP3ErrorType err = MP3Utils::SeektoOffset(fp, StartOffset);
+        MP3ErrorType err = MP3Utils::SeektoOffset(fp, revSeek, Oscl_File::SEEKCUR);
         if (MP3_SUCCESS != err)
         {
             OSCL_ARRAY_DELETE(tempBuf);
@@ -602,6 +584,7 @@
             }
         }
 
+        revSeek = 0 - actualBufferSize;
         if (!DecodeVBRIHeader(pBuf, iVbriHeader, iMP3HeaderInfo))
         {
             OSCL_ARRAY_DELETE(tempBuf);
@@ -654,35 +637,19 @@
         if ((oscl_memcmp(pBuf, STR_XING_HEADER_IDENTIFIER, VBR_HEADER_SIZE) == 0) ||
                 (oscl_memcmp(pBuf, STR_INFO_HEADER_IDENTIFIER, VBR_HEADER_SIZE) == 0))
         {
-            MP3ErrorType err = MP3Utils::SeektoOffset(fp, StartOffset + offset);
+            MP3ErrorType err = MP3Utils::SeektoOffset(fp, offset - MP3_FIRST_FRAME_SIZE, Oscl_File::SEEKCUR);
             if (MP3_SUCCESS != err)
             {
                 return err;
             }
+            revSeek = 0 - offset;
 
-            if (!MP3FileIO::readByteData(fp, 128, pFirstFrame))
+            if (!MP3FileIO::readByteData(fp, MP3_FIRST_FRAME_SIZE, pFirstFrame))
             {
                 return MP3_INSUFFICIENT_DATA;
             }
 
-            if (!DecodeXINGHeader(pFirstFrame, iXingHeader, iMP3HeaderInfo))
-                return MP3_FILE_XING_HDR_ERR;
-            else
-                mp3Type = EXINGType;
-        }
-        // Check for INFO Header, same as XING Header
-        if ((oscl_memcmp(pBuf, STR_INFO_HEADER_IDENTIFIER, VBR_HEADER_SIZE) == 0))
-        {
-            MP3ErrorType err = MP3Utils::SeektoOffset(fp, StartOffset + offset);
-            if (MP3_SUCCESS != err)
-            {
-                return err;
-            }
-
-            if (!MP3FileIO::readByteData(fp, 128, pFirstFrame))
-            {
-                return MP3_INSUFFICIENT_DATA;
-            }
+            revSeek -= MP3_FIRST_FRAME_SIZE;
 
             if (!DecodeXINGHeader(pFirstFrame, iXingHeader, iMP3HeaderInfo))
                 return MP3_FILE_XING_HDR_ERR;
@@ -705,10 +672,10 @@
 
     iAvgBitrateInbps = iMP3ConfigInfo.BitRate;
     // Set the position to the position of the first MP3 frame
-    err = MP3Utils::SeektoOffset(fp, StartOffset);
-    if (MP3_SUCCESS != err)
+    errCode = MP3Utils::SeektoOffset(fp, revSeek, Oscl_File::SEEKCUR);
+    if (MP3_SUCCESS != errCode)
     {
-        return err;
+        return errCode;
     }
     iCurrFrameNumber = 0;
     return MP3_SUCCESS;
@@ -726,10 +693,9 @@
  ***********************************************************************/
 MP3ErrorType MP3Parser::ScanMP3File(PVFile * fpUsed, uint32 aFramesToScan)
 {
-    int32 currentFilePosn = 0;
     uint32 firstHeader = 0;
-    uint8 pFrameHeader[4];
-    int32 startOffset = 0;
+    uint8 pFrameHeader[MP3_FRAME_HEADER_SIZE];
+    int32 audioOffset = 0;
     uint32 seekOffset = 0;
     MP3HeaderType mp3HeaderInfo;
     MP3ConfigInfoType mp3ConfigInfo;
@@ -754,47 +720,23 @@
     {
         if (iTagSize > 0)
         {
-            startOffset = iTagSize;
-            MP3ErrorType err = MP3Utils::SeektoOffset(fpUsed, startOffset);
+            audioOffset = StartOffset;
+            MP3ErrorType err = MP3Utils::SeektoOffset(fpUsed, audioOffset, Oscl_File::SEEKSET);
             if (MP3_SUCCESS != err)
             {
                 return err;
             }
         }
+        iFirstScan = false;
     }
     else
     {
-        startOffset = iLastScanPosition;
+        audioOffset = iLastScanPosition;
     }
 
     // Set length of initial search to the min between default and filesize
     iInitSearchFileSize = OSCL_MIN(iInitSearchFileSize, iLocalFileSize);
 
-    if (iFirstScan)
-    {
-        iFirstScan = false;
-        currentFilePosn = startOffset;
-
-        MP3ErrorType err = mp3FindSync(startOffset, seekOffset, fpUsed);
-        if (MP3_SUCCESS != err)
-        {
-            MP3ErrorType mp3err = MP3Utils::SeektoOffset(fpUsed, currentFilePosn);
-            if (MP3_SUCCESS != mp3err)
-            {
-                return mp3err;
-            }
-            return err;
-        }
-
-        startOffset += seekOffset;
-
-        err = MP3Utils::SeektoOffset(fpUsed, startOffset);
-        if (MP3_SUCCESS != err)
-        {
-            return err;
-        }
-    }
-    currentFilePosn = MP3Utils::getCurrentFilePosition(fpUsed);
     uint32 numFrames = 0;
     int32 bitrate = 0;
     uint32 frameDur = 0;
@@ -810,24 +752,25 @@
             {
                 iDurationScanComplete = true;
             }
-            FillTOCTable(startOffset, 0);
+            FillTOCTable(audioOffset, 0);
             return MP3_INSUFFICIENT_DATA;
         }
         firstHeader = SwapFileToHostByteOrderInt32(pFrameHeader);
         uint32 offset = MP3Utils::getCurrentFilePosition(fpUsed);
         if (!GetMP3Header(firstHeader, mp3HeaderInfo))
         {
+            MP3Utils::SeektoOffset(fp, 0 - MP3_FRAME_HEADER_SIZE, Oscl_File::SEEKCUR);
             MP3ErrorType err = mp3FindSync(offset, seekOffset, fpUsed);
             if (err == MP3_SUCCESS)
             {
                 offset += seekOffset;
-                err = MP3Utils::SeektoOffset(fpUsed, offset);
+                err = MP3Utils::SeektoOffset(fpUsed, seekOffset, Oscl_File::SEEKCUR);
                 if (MP3_SUCCESS != err)
                 {
                     return err;
                 }
 
-                if (!MP3FileIO::readByteData(fpUsed, 4, pFrameHeader))
+                if (!MP3FileIO::readByteData(fpUsed, MP3_FRAME_HEADER_SIZE, pFrameHeader))
                 {
                     iDurationScanComplete = true;
                     FillTOCTable(offset, iScanTimestamp);
@@ -857,7 +800,7 @@
             return MP3_FILE_HDR_DECODE_ERR;
         }
 
-        fpUsed->Seek(mp3ConfigInfo.FrameLengthInBytes - 4, Oscl_File::SEEKCUR);
+        MP3Utils::SeektoOffset(fpUsed, mp3ConfigInfo.FrameLengthInBytes - MP3_FRAME_HEADER_SIZE, Oscl_File::SEEKCUR);
         bitrate = mp3ConfigInfo.BitRate;
         frameDur = frameDur + (uint32)((OsclFloat) mp3ConfigInfo.FrameLengthInBytes * 8000.00f / mp3ConfigInfo.BitRate);
         iLastScanPosition = fpUsed->Tell();
@@ -879,7 +822,7 @@
     }
 
     // After scan of frames we need to fill the TOC table
-    FillTOCTable(startOffset, iScanTimestamp);
+    FillTOCTable(audioOffset, iScanTimestamp);
     iScanTimestamp = iScanTimestamp + frameDur;
 
     return MP3_SUCCESS;
@@ -1027,11 +970,11 @@
             if (aComputeAvgBitrate)
             {
                 int32 filesize = OSCL_MAX(iFileSizeFromExternalSource, iLocalFileSize);
-                uint32 audioDataSize = (filesize - iTagSize);
+                uint32 audioDataSize = (filesize - StartOffset);
                 if (iId3TagParser.IsID3V1Present())
                 {
                     // The TAG in an ID3V1.x MP3 File is 128 bytes long
-                    audioDataSize -= 128;
+                    audioDataSize -= ID3_V1_TAG_SIZE;
                 }
                 iNumberOfFrames = audioDataSize / (aMP3ConfigInfo.FrameLengthInBytes);
 
@@ -1361,7 +1304,7 @@
                 uint32 fileSize = iLocalFileSize;
                 if (iId3TagParser.IsID3V2Present())
                 {
-                    fileSize -= iTagSize;
+                    fileSize -= StartOffset;
                 }
                 if (iId3TagParser.IsID3V1Present())
                 {
@@ -1577,16 +1520,17 @@
         // ////////////////////////////////////////////////////////////////////////////
         // If we don't find a valid MP3 Marker point we will attempt recovery.
         uint32 seekOffset = 0;
+        MP3Utils::SeektoOffset(fp, 0 - MP3_FRAME_HEADER_SIZE, Oscl_File::SEEKCUR);
         MP3ErrorType err = mp3FindSync(currentFilePosn, seekOffset, fp);
 
         if (err == MP3_SUCCESS)
         {
-            currentFilePosn += seekOffset;
-            err = MP3Utils::SeektoOffset(fp, currentFilePosn);
+            err = MP3Utils::SeektoOffset(fp, seekOffset, Oscl_File::SEEKCUR);
             if (MP3_SUCCESS != err)
             {
                 return err;
             }
+            currentFilePosn += seekOffset;
 
             if (0 != contentLength)
             {
@@ -1610,12 +1554,6 @@
         }
         else
         {
-            // Seek back to the original position
-            MP3ErrorType mp3err = MP3Utils::SeektoOffset(fp, currentFilePosn);
-            if (MP3_SUCCESS != mp3err)
-            {
-                return mp3err;
-            }
             return err;
         }
     }
@@ -1628,9 +1566,10 @@
         return MP3_FILE_HDR_DECODE_ERR;
     }
 
+    int32 revSeek = 0 - MP3_FRAME_HEADER_SIZE;
     mp3FrameSizeInBytes = mp3CDInfo.FrameLengthInBytes;
 
-    MP3ErrorType err = MP3Utils::SeektoOffset(fp, currentFilePosn);
+    MP3ErrorType err = MP3Utils::SeektoOffset(fp, revSeek, Oscl_File::SEEKCUR);
     if (MP3_SUCCESS != err)
     {
         iCurrFrameNumber--;
@@ -1644,21 +1583,23 @@
         //could be error in calculating frame size. So try to find sync again.
         iCurrFrameNumber--;
         currentFilePosn += MP3_FRAME_HEADER_SIZE;
-        if (MP3_SUCCESS != MP3Utils::SeektoOffset(fp, currentFilePosn))
+        if (MP3_SUCCESS != MP3Utils::SeektoOffset(fp, MP3_FRAME_HEADER_SIZE, Oscl_File::SEEKCUR))
         {
             return err;
         }
 
         uint32 seekOffset = 0;
+        MP3Utils::SeektoOffset(fp, 0 - MP3_FRAME_HEADER_SIZE, Oscl_File::SEEKCUR);
+
         MP3ErrorType err = mp3FindSync(currentFilePosn, seekOffset, fp);
         if (err == MP3_SUCCESS)
         {
-            currentFilePosn += seekOffset;
-            err = MP3Utils::SeektoOffset(fp, currentFilePosn);
+            err = MP3Utils::SeektoOffset(fp, seekOffset, Oscl_File::SEEKCUR);
             if (MP3_SUCCESS != err)
             {
                 return err;
             }
+            currentFilePosn += seekOffset;
             goto BEGIN;
         }
         else
@@ -1673,7 +1614,7 @@
         return mp3Err;
     }
 
-    err = MP3Utils::SeektoOffset(fp, currentFilePosn + MP3_FRAME_HEADER_SIZE);
+    err = MP3Utils::SeektoOffset(fp, MP3_FRAME_HEADER_SIZE, Oscl_File::SEEKCUR);
     if (MP3_SUCCESS != err)
     {
         iCurrFrameNumber--;
@@ -1702,6 +1643,11 @@
                 return MP3_END_OF_FILE;
             }
         }
+        err = MP3Utils::SeektoOffset(fp, 0 - MP3_FRAME_HEADER_SIZE, Oscl_File::SEEKCUR);
+        if (MP3_SUCCESS != err)
+        {
+            return err;
+        }
         return MP3_INSUFFICIENT_DATA;
     }
 
@@ -1756,17 +1702,11 @@
 {
     uint32 SeekPosition = 0;
     SeekPosition = SeekPointFromTimestamp(timestampInMsec);
-    if ((!fp->GetCPM()) && (SeekPosition == iLocalFileSize) && (timestampInMsec == iClipDurationInMsec))
-    {
-        // this should happen only for local playback where we reposition to end of file and have not enough
-        // data to validate the mp3 header.
-        fp->Seek(SeekPosition, Oscl_File::SEEKSET);
-    }
-    else
+    if (!((!fp->GetCPM()) && (SeekPosition == iLocalFileSize) && (timestampInMsec == iClipDurationInMsec)))
     {
         SeekPosition += StartOffset;
-        fp->Seek(SeekPosition, Oscl_File::SEEKSET);
     }
+    MP3Utils::SeektoOffset(fp, SeekPosition, Oscl_File::SEEKSET);
     return timestampInMsec;
 }
 
@@ -1919,12 +1859,14 @@
     **/
     if (seekPoint > 0 && !fp->GetCPM())
     {
-        uint32 retVal = mp3FindSync(seekPoint + StartOffset, seekOffset);
+        // seek to the reposition point location
+        MP3Utils::SeektoOffset(fp, seekPoint + StartOffset, Oscl_File::SEEKSET);
+        uint32 retVal = mp3FindSync(seekPoint + StartOffset, seekOffset, fp);
+
         if (retVal == MP3_SUCCESS)
         {
             seekPoint += seekOffset;
-            MP3Utils::SeektoOffset(fp, seekPoint);
-
+            MP3Utils::SeektoOffset(fp, seekOffset, Oscl_File::SEEKCUR);
             if (iDurationScanComplete)
             {
                 uint32 offsetDiff = iTOC[binNo+1] - iTOC[binNo];
@@ -1977,6 +1919,7 @@
  ***********************************************************************/
 MP3ErrorType MP3Parser::mp3FindSync(uint32 seekPoint, uint32 &syncOffset, PVFile* aFile)
 {
+    syncOffset = 0;
     iMaxSyncBufferSize = 627;   /* default for 192 kbps, 44.1 kHz */
 
     if (!aFile)
@@ -2016,40 +1959,32 @@
     }
 
     PVFile* fpused = (aFile) ? aFile : fp;
+    seekPoint = fpused->Tell();
     uint32 i = 0;
     uint32 j = 0;
     uint32 BufferSize = 0;
     pSyncBuffer[0] = 0;
     bool syncFound = false;
     MP3ErrorType mp3Err = MP3_SUCCESS;
-    uint32 b = 0;
+    uint32 maxSearchOffset = 0;
+    int32 revSeek = 0;
     if (iLocalFileSizeSet)
     {
-        b = OSCL_MIN(iInitSearchFileSize, iLocalFileSize - seekPoint);
+        maxSearchOffset = OSCL_MIN(iInitSearchFileSize, iLocalFileSize - seekPoint);
     }
     else
     {
         uint32 remBytes = 0;
         if (fp->GetRemainingBytes(remBytes))
         {
-            b = OSCL_MAX(iInitSearchFileSize, fpused->Tell() + remBytes - seekPoint);
+            maxSearchOffset = OSCL_MIN(iInitSearchFileSize, fpused->Tell() + remBytes - seekPoint);
         }
     }
 
-    for (j = 0; j < b; j += iMaxSyncBufferSize)
+    for (j = 0; j < maxSearchOffset; j += iMaxSyncBufferSize)
     {
+        revSeek = 0;
         // Grab a new buffer for a byte by byte search
-        MP3ErrorType err = MP3Utils::SeektoOffset(fpused, seekPoint + j);
-        if (MP3_SUCCESS != err)
-        {
-            if (pSyncBuffer)
-            {
-                OSCL_ARRAY_DELETE(pSyncBuffer);
-                pSyncBuffer = NULL;
-            }
-            return err;
-        }
-
         if (!MP3FileIO::readByteData(fpused, iMaxSyncBufferSize, &pSyncBuffer[1], &BufferSize))
         {
             if (pSyncBuffer)
@@ -2059,6 +1994,7 @@
             }
             return MP3_ERROR_UNKNOWN_OBJECT;
         }
+        revSeek -= j;
         // Find the first Sync Marker by doing a byte by byte search.
         // Once we have found the sync words, the frame is validated.
         // For frame header validation, we read four bytes.
@@ -2074,11 +2010,11 @@
                     if ((pSyncBuffer[i+1] & 0xF0) == 0xF0)
                     {
                         // if partial match is found verify that 4 consecutives sync word are valid
-                        int32 currPos = fpused->Tell();
+                        MP3Utils::SeektoOffset(fpused, 0 - (int32) iMaxSyncBufferSize + (int32) i - 1, Oscl_File::SEEKCUR);
                         mp3Err = IsValidFrame(&(pSyncBuffer[i]), j + i - 1, seekPoint, fpused);
-                        fpused->Seek(currPos, Oscl_File::SEEKSET);
                         if (mp3Err == MP3_SUCCESS)
                         {
+                            MP3Utils::SeektoOffset(fpused, 0 - (int32)j - i + 1, Oscl_File::SEEKCUR);
                             break;
                         }
                         else if (mp3Err == MP3_INSUFFICIENT_DATA)
@@ -2093,18 +2029,19 @@
                         else
                         {
                             // Drop the frame
+                            MP3Utils::SeektoOffset(fpused, iMaxSyncBufferSize - i + 1, Oscl_File::SEEKCUR);
                         }
                     }
                     // MPEG 2.5
                     else if ((pSyncBuffer[i+1] & 0xF0) == 0xE0)
                     {
                         // if partial match is found verify that 4 consecutives sync word are valid
-                        int32 currPos = fpused->Tell();
+                        MP3Utils::SeektoOffset(fpused, 0 - (int32) iMaxSyncBufferSize + (int32) i - 1, Oscl_File::SEEKCUR);
                         mp3Err = IsValidFrame(&(pSyncBuffer[i]), j + i - 1, seekPoint, fpused);
-                        fpused->Seek(currPos, Oscl_File::SEEKSET);
 
                         if (mp3Err == MP3_SUCCESS)
                         {
+                            MP3Utils::SeektoOffset(fpused, 0 - (int32)j - i + 1, Oscl_File::SEEKCUR);
                             break;
                         }
                         else if (mp3Err == MP3_INSUFFICIENT_DATA)
@@ -2119,6 +2056,7 @@
                         else
                         {
                             // Drop the frame
+                            MP3Utils::SeektoOffset(fpused, iMaxSyncBufferSize - i + 1, Oscl_File::SEEKCUR);
                         }
                     }
                 }
@@ -2197,12 +2135,13 @@
  * RETURN VALUE:
  * SIDE EFFECTS:
  ***********************************************************************/
-MP3ErrorType MP3Parser::IsValidFrameHeader(uint8 *mp3Frame,
-        bool &bCRCPresent,
-        uint32 firstSyncOffset,
-        uint32 seekPoint,
+MP3ErrorType MP3Parser::IsValidFrameHeader(uint8 *mp3Frame, bool &bCRCPresent,
+        uint32 firstSyncOffset, uint32 seekPoint,
         PVFile* aFile)
 {
+    OSCL_UNUSED_ARG(firstSyncOffset);
+    OSCL_UNUSED_ARG(seekPoint);
+
     PVFile* fpUsed = fp;
     if (aFile)
     {
@@ -2213,7 +2152,8 @@
     MP3ConfigInfoType mp3CDInfo2 = {0, 0, 0, 0, 0};
     MP3ConfigInfoType mp3CDInfo3 = {0, 0, 0, 0, 0};
     MP3ConfigInfoType mp3CDInfo4 = {0, 0, 0, 0, 0};
-    int32 offset, flength;
+    int32 flength = 0;
+    int32 revSeek = 0;
     bool status;
 
     uint32 mp3Header = SwapFileToHostByteOrderInt32(mp3Frame);
@@ -2233,20 +2173,21 @@
     // A flag of 0 means the CRC is present
     bCRCPresent = !(mp3HeaderInfo.crcFollows);
 
-
     /*
      *  Search 4 consecutives header to guarantee that we
      *  really latch on a valid sync word
      */
-    offset = mp3CDInfo.FrameLengthInBytes;
-    MP3ErrorType err = MP3Utils::SeektoOffset(fpUsed, seekPoint + firstSyncOffset + offset);
+    flength = mp3CDInfo.FrameLengthInBytes;
+    MP3ErrorType err = MP3Utils::SeektoOffset(fpUsed, flength, Oscl_File::SEEKCUR);
     if (MP3_SUCCESS != err)
     {
         return err;
     }
+    revSeek -= flength;
 
     if (!MP3FileIO::readByteData(fpUsed, MP3_FRAME_HEADER_SIZE, (uint8 *)&mp3Header))
     {
+        MP3Utils::SeektoOffset(fpUsed, revSeek , Oscl_File::SEEKCUR);
         return MP3_INSUFFICIENT_DATA;
     }
 
@@ -2256,17 +2197,18 @@
     status = DecodeMP3Header(mp3HeaderInfo, mp3CDInfo2, false);
 
     flength = mp3CDInfo2.FrameLengthInBytes;
-    offset += flength;
 
-    int32 seekOffset = seekPoint + firstSyncOffset + offset;
-    err = MP3Utils::SeektoOffset(fpUsed, seekOffset);
+    err = MP3Utils::SeektoOffset(fpUsed, flength - MP3_FRAME_HEADER_SIZE, Oscl_File::SEEKCUR);
     if (MP3_SUCCESS != err)
     {
+        MP3Utils::SeektoOffset(fpUsed, revSeek - MP3_FRAME_HEADER_SIZE, Oscl_File::SEEKCUR);
         return err;
     }
+    revSeek -= flength;
 
-    if (!MP3FileIO::readByteData(fpUsed, 4, (uint8 *)&mp3Header))
+    if (!MP3FileIO::readByteData(fpUsed, MP3_FRAME_HEADER_SIZE, (uint8 *)&mp3Header))
     {
+        MP3Utils::SeektoOffset(fpUsed, revSeek , Oscl_File::SEEKCUR);
         return MP3_INSUFFICIENT_DATA;
     }
 
@@ -2275,19 +2217,21 @@
     status = GetMP3Header(mp3Header, mp3HeaderInfo);
     status = DecodeMP3Header(mp3HeaderInfo, mp3CDInfo3, false);
 
-    offset += mp3CDInfo3.FrameLengthInBytes;
-
-    err = MP3Utils::SeektoOffset(fpUsed, seekPoint + firstSyncOffset + offset);
+    flength = mp3CDInfo3.FrameLengthInBytes;
+    err = MP3Utils::SeektoOffset(fpUsed, flength - MP3_FRAME_HEADER_SIZE, Oscl_File::SEEKCUR);
     if (MP3_SUCCESS != err)
     {
+        MP3Utils::SeektoOffset(fpUsed, revSeek - MP3_FRAME_HEADER_SIZE, Oscl_File::SEEKCUR);
         return err;
     }
+    revSeek -= flength;
 
-    if (!MP3FileIO::readByteData(fpUsed, 4, (uint8 *)&mp3Header))
+    if (!MP3FileIO::readByteData(fpUsed, MP3_FRAME_HEADER_SIZE, (uint8 *)&mp3Header))
     {
+        MP3Utils::SeektoOffset(fpUsed, revSeek, Oscl_File::SEEKCUR);
         return MP3_INSUFFICIENT_DATA;
     }
-
+    revSeek -= MP3_FRAME_HEADER_SIZE;
 
     mp3Header = SwapFileToHostByteOrderInt32((uint8 *) & mp3Header);
 
@@ -2303,6 +2247,7 @@
             (mp3CDInfo3.SamplingRate != mp3CDInfo4.SamplingRate) |
             (mp3CDInfo3.SamplingRate != mp3CDInfo.SamplingRate))
     {
+        MP3Utils::SeektoOffset(fpUsed, revSeek, Oscl_File::SEEKCUR);
         return MP3_FILE_HDR_READ_ERR;
     }
 
@@ -2310,9 +2255,12 @@
             (mp3CDInfo3.NumberOfChannels != mp3CDInfo4.NumberOfChannels) |
             (mp3CDInfo3.NumberOfChannels != mp3CDInfo.NumberOfChannels))
     {
+        MP3Utils::SeektoOffset(fpUsed, revSeek, Oscl_File::SEEKCUR);
         return MP3_FILE_HDR_READ_ERR;
     }
 
+    // seek back to position from where we started
+    MP3Utils::SeektoOffset(fpUsed, revSeek, Oscl_File::SEEKCUR);
     return MP3_SUCCESS;
 }
 
@@ -2366,12 +2314,14 @@
     numberOfBytes = numberOfBits % 8 ? numberOfBits / 8 + 1 : numberOfBits / 8;
 
     uint8 *buffer = OSCL_ARRAY_NEW(uint8 , numberOfBytes + 1);
-    uint32 startFilePos = 0;
+    int32 revSeek = 0;
     if (!MP3FileIO::readByteData(fp, numberOfBytes, (uint8 *)buffer))
 {
         return MP3_INSUFFICIENT_DATA;
     }
 
+    revSeek -= numberOfBytes;
+
     uint16 calcCRC16 = CalcCRC16(buffer, numberOfBits);
 
     // read crc from frame
@@ -2380,27 +2330,32 @@
     {
         if (remBytes >= MP3_FRAME_HEADER_SIZE)
         {
-            fp->Seek(MP3_FRAME_HEADER_SIZE, Oscl_File::SEEKCUR);
+            MP3Utils::SeektoOffset(fp, MP3_FRAME_HEADER_SIZE, Oscl_File::SEEKCUR);
+            revSeek -= MP3_FRAME_HEADER_SIZE;
         }
         else
         {
+            MP3Utils::SeektoOffset(fp, revSeek, Oscl_File::SEEKCUR);
             return MP3_INSUFFICIENT_DATA;
         }
     }
     else
     {
+        MP3Utils::SeektoOffset(fp, revSeek, Oscl_File::SEEKCUR);
         return MP3_ERROR_UNKNOWN;
     }
 
     if (!MP3FileIO::readByteData(fp, 2, (uint8 *)crcData))
     {
+        MP3Utils::SeektoOffset(fp, revSeek, Oscl_File::SEEKCUR);
         return MP3_INSUFFICIENT_DATA;
     }
+    revSeek -= 2;
 
     uint16 crcVal = SwapFileToHostByteOrderInt16(&crcData[0]);
 
     // seek back to original start position
-    MP3ErrorType err = MP3Utils::SeektoOffset(fp, startFilePos);
+    MP3ErrorType err = MP3Utils::SeektoOffset(fp, revSeek, Oscl_File::SEEKCUR);
     if (MP3_SUCCESS != err)
     {
         return err;
@@ -2588,31 +2543,25 @@
     MP3ErrorType errCode = MP3_SUCCESS;
     uint8 pFrameHeader[MP3_FRAME_HEADER_SIZE];
     uint32 firstHeader = 0;
+    StartOffset = 0;
+    int32 revSeek = 0;
 
     // get the file pointer
     fp = &(aFile->_pvfile);
 
+    errCode = MP3Utils::SeektoOffset(fp, 0, Oscl_File::SEEKSET);
     // try to retrieve the file size
-    int32 err = fp->Seek(0, Oscl_File::SEEKEND);
-    if (err == 0)
+    if (MP3Utils::getCurrentFileSize(fp, iLocalFileSize))
     {
         iLocalFileSizeSet = true;
-        iLocalFileSize =  MP3Utils::getCurrentFilePosition(fp);
+        iInitSearchFileSize = OSCL_MIN(aInitSearchFileSize, iLocalFileSize);
         if (iLocalFileSize == 0)
         {
             return MP3_END_OF_FILE;
         }
     }
-    else
-    {
-        iLocalFileSize = 0;
-    }
-    //set the initial file search size
-    if (iLocalFileSizeSet)
-    {
-        iInitSearchFileSize = OSCL_MIN(aInitSearchFileSize, iLocalFileSize);
-    }
-    else
+
+    if (!iLocalFileSizeSet)
     {
         uint32 remBytes = 0;
         if (fp->GetRemainingBytes(remBytes))
@@ -2622,7 +2571,6 @@
     }
 
     // seek to the begining position in the file
-    fp->Seek(0, Oscl_File::SEEKSET);
 
     // verify if the id3 tags are present in this clip
     PVID3ParCom tagParser;
@@ -2630,36 +2578,33 @@
     if (true == tagParser.IsID3V2Present(fp, iTagSize))
     {
         // move the file read pointer to begining of audio data
-        errCode = MP3Utils::SeektoOffset(fp, iTagSize);
-        if (MP3_SUCCESS != errCode)
-        {
-            return errCode;
-        }
         StartOffset += iTagSize;
     }
 
     // seek to the begining position in the file
-    fp->Seek(0, Oscl_File::SEEKSET);
+    MP3Utils::SeektoOffset(fp, StartOffset, Oscl_File::SEEKSET);
 
     if (!MP3FileIO::readByteData(fp, MP3_FRAME_HEADER_SIZE, (uint8 *)pFrameHeader))
     {
         return MP3_INSUFFICIENT_DATA;
     }
+    revSeek = 0 - MP3_FRAME_HEADER_SIZE;
 
     firstHeader = SwapFileToHostByteOrderInt32(pFrameHeader);
 
     if (!GetMP3Header(firstHeader, iMP3HeaderInfo))
     {
         uint32 seekOffset = 0;
-        errCode = mp3FindSync(iTagSize, seekOffset);
+        MP3Utils::SeektoOffset(fp, 0 - MP3_FRAME_HEADER_SIZE, Oscl_File::SEEKCUR);
+        errCode = mp3FindSync(StartOffset, seekOffset);
         if (errCode == MP3_SUCCESS)
         {
-            StartOffset += seekOffset;
-            errCode = MP3Utils::SeektoOffset(fp, StartOffset);
+            errCode = MP3Utils::SeektoOffset(fp, seekOffset, Oscl_File::SEEKCUR);
             if (MP3_SUCCESS != errCode)
             {
                 return errCode;
             }
+            StartOffset += seekOffset;
 
             if (!MP3FileIO::readByteData(fp, MP3_FRAME_HEADER_SIZE, pFrameHeader))
             {
@@ -2682,6 +2627,7 @@
         }
         else if (errCode == MP3_INSUFFICIENT_DATA)
         {
+            MP3Utils::SeektoOffset(fp, fp->Tell() - StartOffset, Oscl_File::SEEKCUR);
             return errCode;
         }
         else
@@ -2757,7 +2703,7 @@
     uint32 fileSize = iFileSizeFromExternalSource;
     if (iId3TagParser.IsID3V2Present())
     {
-        fileSize -= iTagSize;
+        fileSize -= StartOffset;
     }
     if (iId3TagParser.IsID3V1Present())
     {
@@ -2833,18 +2779,18 @@
         return MP3_SUCCESS;
     }
 
+    MP3ErrorType status = MP3_SUCCESS;
     uint32 currFilePos = MP3Utils::getCurrentFilePosition(fp);
 
-    if (MP3_ERROR_UNKNOWN != ComputeDurationFromNRandomFrames(fp))
+    status = ComputeDurationFromNRandomFrames(fp);
+    if (MP3_ERROR_UNKNOWN != status)
     {
-        uint32 fileSz = iLocalFileSize - iTagSize;
+        uint32 fileSz = iLocalFileSize - StartOffset;
         iClipDurationFromRandomScan = (uint32)(fileSz * 8000.00f / iAvgBitrateInbpsFromRandomScan);
         aClipDuration = iClipDurationFromRandomScan;
-        MP3ErrorType status = MP3Utils::SeektoOffset(fp, currFilePos);
-        return status;
     }
-    MP3Utils::SeektoOffset(fp, currFilePos);
-    return MP3_ERROR_UNKNOWN;
+    MP3Utils::SeektoOffset(fp, currFilePos, Oscl_File::SEEKSET);
+    return status;
 }
 
 /***********************************************************************
@@ -2860,7 +2806,7 @@
 {
     uint32 firstHeader = 0;
     uint8 pFrameHeader[MP3_FRAME_HEADER_SIZE];
-    uint32 startOffset = 0;
+    uint32 audioOffset = 0;
     int32 totBR = 0;
     int32 avgBitRate = 0;
     int32 framecount = 0;
@@ -2879,44 +2825,44 @@
         audioDataSize = iLocalFileSize;
     }
 
-    audioDataSize -= iTagSize;
+    audioDataSize -= StartOffset;
     if (iId3TagParser.IsID3V1Present())
     {
         audioDataSize -= ID3_V1_TAG_SIZE;
     }
 
-    startOffset = iTagSize;
-    fpUsed->Seek(startOffset, Oscl_File::SEEKSET);
-
+    randomByteOffset = StartOffset;
     uint32 skipMultiple = audioDataSize / (aNumRandomLoc + 1);
 
     int32 numSearchLoc = 0;
     while (numSearchLoc < aNumRandomLoc)
     {
         // find random location to which we should seek in order to find
-        uint32 currFilePosn = MP3Utils::getCurrentFilePosition(fp);
+        uint32 currFilePosn = MP3Utils::getCurrentFilePosition(fpUsed);
         randomByteOffset = currFilePosn + skipMultiple;
+
         if (randomByteOffset > iLocalFileSize)
         {
             break;
         }
         // initialize frame count
         framecount = 0;
-        startOffset = randomByteOffset;
+        audioOffset = randomByteOffset;
+        MP3Utils::SeektoOffset(fpUsed, audioOffset, Oscl_File::SEEKSET);
         // Find sync
         uint32 seekOffset = 0;
-        err = mp3FindSync(startOffset, seekOffset);
+        err = mp3FindSync(audioOffset, seekOffset, fpUsed);
         if (err != MP3_SUCCESS)
         {
             break;
         }
-        startOffset += seekOffset;
-        fpUsed->Seek(startOffset, Oscl_File::SEEKSET);
+        audioOffset += seekOffset;
+        MP3Utils::SeektoOffset(fpUsed, seekOffset, Oscl_File::SEEKCUR);
         // lets check rest of the frames
         while (framecount < aNumFrames)
         {
             // Read 4 bytes
-            if (!MP3FileIO::readByteData(fp, MP3_FRAME_HEADER_SIZE, pFrameHeader))
+            if (!MP3FileIO::readByteData(fpUsed, MP3_FRAME_HEADER_SIZE, pFrameHeader))
             {
                 err = MP3_INSUFFICIENT_DATA;
                 break;
@@ -2936,7 +2882,7 @@
                 break;
             }
 
-            fp->Seek(mp3ConfigInfo.FrameLengthInBytes - MP3_FRAME_HEADER_SIZE, Oscl_File::SEEKCUR);
+            MP3Utils::SeektoOffset(fpUsed, mp3ConfigInfo.FrameLengthInBytes - MP3_FRAME_HEADER_SIZE, Oscl_File::SEEKCUR);
             framecount++;
 
             // initialize avgBitRate first time only
@@ -2954,7 +2900,7 @@
         numSearchLoc++;
     }
     // calculate average bitrate
-    iAvgBitrateInbpsFromRandomScan = totBR / numSearchLoc;
+    iAvgBitrateInbpsFromRandomScan = numSearchLoc > 0 ? totBR / numSearchLoc : 0;
     if (!iAvgBitrateInbpsFromRandomScan)
     {
         return MP3_ERROR_UNKNOWN;
diff --git a/fileformats/mp3/parser/src/mp3utils.cpp b/fileformats/mp3/parser/src/mp3utils.cpp
index 39423b4..4d05a44 100644
--- a/fileformats/mp3/parser/src/mp3utils.cpp
+++ b/fileformats/mp3/parser/src/mp3utils.cpp
@@ -82,23 +82,40 @@
     return false;
 }
 
-MP3ErrorType MP3Utils::SeektoOffset(PVFile *aFP, int32 aOffset)
+MP3ErrorType MP3Utils::SeektoOffset(PVFile *aFP, int32 aOffset, Oscl_File::seek_type aSeekType)
 {
     uint32 currFileSize = 0;
-    if (MP3Utils::getCurrentFileSize(aFP, currFileSize))
+    uint32 currPos = 0;
+    int32 seekOffset = 0;
+    currPos = MP3Utils::getCurrentFilePosition(aFP);
+    MP3Utils::getCurrentFileSize(aFP, currFileSize);
+
+    // translate the seek offset to seek from current position
+    switch (aSeekType)
     {
-        if (currFileSize >= (uint32)aOffset)
+        case Oscl_File::SEEKSET:
+            seekOffset = aOffset - currPos;
+            break;
+        case Oscl_File::SEEKEND:
+            seekOffset = currFileSize - currPos;
+            break;
+        case Oscl_File::SEEKCUR:
+            seekOffset = aOffset;
+        default:
+            break;
+    }
+
+    if (aOffset <= 0 || currFileSize >= (uint32) aOffset)
+    {
+        if (aFP->Seek(seekOffset, Oscl_File::SEEKCUR) != 0)
         {
-            if (aFP->Seek(aOffset, Oscl_File::SEEKSET) != 0)
-            {
-                return MP3_FILE_READ_ERR;
-            }
-            return MP3_SUCCESS;
+            return MP3_FILE_READ_ERR;
         }
-        else
-        {
-            return MP3_INSUFFICIENT_DATA;
-        }
+        return MP3_SUCCESS;
+    }
+    else
+    {
+        return MP3_INSUFFICIENT_DATA;
     }
     return MP3_ERROR_UNKNOWN;
 }
diff --git a/fileformats/mp4/composer/Android.mk b/fileformats/mp4/composer/Android.mk
index 45cba0f..65aa4b7 100644
--- a/fileformats/mp4/composer/Android.mk
+++ b/fileformats/mp4/composer/Android.mk
@@ -2,8 +2,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_SRC_FILES := \
-	src/amrdecoderspecificinfo.cpp \
- 	src/amrdecoderspecificinfo3gpp.cpp \
+	src/amrdecoderspecificinfo3gpp.cpp \
  	src/amrsampleentry.cpp \
  	src/assetinfoatoms.cpp \
  	src/atom.cpp \
@@ -28,7 +27,6 @@
  	src/expandablebaseclass.cpp \
  	src/filetypeatom.cpp \
  	src/fullatom.cpp \
- 	src/h263decoderspecificinfo.cpp \
  	src/h263decoderspecificinfo3gpp.cpp \
  	src/h263sampleentry.cpp \
  	src/handleratom.cpp \
diff --git a/fileformats/mp4/composer/build_opencore/make/local.mk b/fileformats/mp4/composer/build_opencore/make/local.mk
index 8cfa85c..819fb23 100644
--- a/fileformats/mp4/composer/build_opencore/make/local.mk
+++ b/fileformats/mp4/composer/build_opencore/make/local.mk
@@ -17,8 +17,7 @@
 SRCDIR := ../../src
 INCSRCDIR := ../../include
 
-SRCS := amrdecoderspecificinfo.cpp \
-	amrdecoderspecificinfo3gpp.cpp \
+SRCS := amrdecoderspecificinfo3gpp.cpp \
 	amrsampleentry.cpp \
     assetinfoatoms.cpp \
 	atom.cpp \
@@ -43,7 +42,6 @@
 	expandablebaseclass.cpp \
 	filetypeatom.cpp \
 	fullatom.cpp \
-	h263decoderspecificinfo.cpp \
 	h263decoderspecificinfo3gpp.cpp \
 	h263sampleentry.cpp \
 	handleratom.cpp \
diff --git a/fileformats/mp4/composer/include/a_atomdefs.h b/fileformats/mp4/composer/include/a_atomdefs.h
index 32d562f..1ff3809 100644
--- a/fileformats/mp4/composer/include/a_atomdefs.h
+++ b/fileformats/mp4/composer/include/a_atomdefs.h
@@ -169,6 +169,7 @@
 
 const uint32    TEXT_SAMPLE_ENTRY = FourCharConstToUint32('t', 'x', '3', 'g');
 const uint32    AMR_SAMPLE_ENTRY = FourCharConstToUint32('s', 'a', 'm', 'r');
+const uint32    AMR_WB_SAMPLE_ENTRY = FourCharConstToUint32('s', 'a', 'w', 'b');
 const uint32    H263_SAMPLE_ENTRY = FourCharConstToUint32('s', '2', '6', '3');
 const uint32    AMR_SPECIFIC_ATOM = FourCharConstToUint32('d', 'a', 'm', 'r');
 const uint32    H263_SPECIFIC_ATOM = FourCharConstToUint32('d', '2', '6', '3');
@@ -217,20 +218,20 @@
 typedef enum
 {
     CODEC_TYPE_AMR_AUDIO = 1,
-    CODEC_TYPE_AAC_AUDIO,
-
+    CODEC_TYPE_AAC_AUDIO = 2,
+    CODEC_TYPE_AMR_WB_AUDIO = 3
 } AUDIO_CODEC_TYPES;
 
 typedef enum
 {
-    CODEC_TYPE_MPEG4_VIDEO = 1,
-    CODEC_TYPE_BASELINE_H263_VIDEO,
-    CODEC_TYPE_AVC_VIDEO
+    CODEC_TYPE_MPEG4_VIDEO = 4,
+    CODEC_TYPE_BASELINE_H263_VIDEO = 5,
+    CODEC_TYPE_AVC_VIDEO = 6
 } VIDEO_CODEC_TYPES;
 
 typedef enum
 {
-    CODEC_TYPE_TIMED_TEXT = 1
+    CODEC_TYPE_TIMED_TEXT = 7
 
 } TEXT_CODEC_TYPES;
 
@@ -245,6 +246,7 @@
 #define MIN_NUM_MEDIA_TRACKS 0
 
 #define AMR_INTERLEAVE_BUFFER_SIZE    2048
+#define AMR_WB_INTERLEAVE_BUFFER_SIZE 4096
 #define AAC_INTERLEAVE_BUFFER_SIZE   12000  // Calc with 96 Kbps as max
 #define VIDEO_INTERLEAVE_BUFFER_SIZE 128000 // 2 x Bitrate @ 256 kbps
 #define TEXT_INTERLEAVE_BUFFER_SIZE  12000
diff --git a/fileformats/mp4/composer/include/a_impeg4file.h b/fileformats/mp4/composer/include/a_impeg4file.h
index 5f7db7b..3f08e72 100644
--- a/fileformats/mp4/composer/include/a_impeg4file.h
+++ b/fileformats/mp4/composer/include/a_impeg4file.h
@@ -342,7 +342,6 @@
         // movie fragment duration
         virtual void setMovieFragmentDuration(uint32 duration) = 0;
         virtual uint32 getMovieFragmentDuration() = 0;
-        virtual void setVideoWidthHeight(uint32 trackID, int16 width, int16 height) = 0;
 
         OSCL_IMPORT_REF static void DestroyMP4FileObject(PVA_FF_IMpeg4File* aMP4FileObject);
 };
diff --git a/fileformats/mp4/composer/include/amrdecoderspecificinfo.h b/fileformats/mp4/composer/include/amrdecoderspecificinfo.h
deleted file mode 100644
index 61ac075..0000000
--- a/fileformats/mp4/composer/include/amrdecoderspecificinfo.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/* ------------------------------------------------------------------
- * Copyright (C) 1998-2009 PacketVideo
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
- * express or implied.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- * -------------------------------------------------------------------
- */
-/*
-    This PVA_FF_DecoderSpecificInfo Class that holds the Mpeg4 VOL header for the
-	video stream
-*/
-
-#ifndef __AMRDecoderSpecificInfo_H__
-#define __AMRDecoderSpecificInfo_H__
-
-#include "oscl_types.h"
-
-#include "a_atomdefs.h"
-#include "decoderspecificinfo.h"
-
-//using namespace std;
-
-class PVA_FF_AMRDecoderSpecificInfo : public PVA_FF_DecoderSpecificInfo
-{
-
-    public:
-        PVA_FF_AMRDecoderSpecificInfo(); // Default constructor
-        virtual ~PVA_FF_AMRDecoderSpecificInfo() {}; // Destructor
-
-        void setVendorcode(int32 VendorCode = PACKETVIDEO_FOURCC)
-        {
-            _VendorCode = VendorCode;
-        }
-        void setEncoderVersion(uint8 encoder_version = 0)
-        {
-            _encoder_version = encoder_version;
-        }
-        void setBandMode(uint8 band_mode = 0)
-        {
-            _band_mode = band_mode;
-        }
-        void setFrameType(uint8 frame_type)
-        {
-            _frame_type = frame_type;
-        }
-        void setModeSet(uint16 mode_set)
-        {
-            _mode_set = mode_set;
-        }
-        void setModeChangePeriod(uint8 mode_change_period = 0)
-        {
-            _mode_change_period = mode_change_period;
-        }
-        void setModeChangeNeighbour(uint8 mode_change_neighbour = 0)
-        {
-            _mode_change_neighbour = mode_change_neighbour;
-        }
-
-        uint8  getFrameType()
-        {
-            return _frame_type;
-        }
-        uint16 getModeSet()
-        {
-            return _mode_set;
-        }
-
-        virtual bool renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp);
-
-    private:
-        int32           _VendorCode;
-        uint8           _encoder_version;
-        uint8           _band_mode;
-        uint8           _frame_type;
-        uint16          _mode_set;
-        uint8           _mode_change_period;
-        uint8           _mode_change_neighbour;
-        int32           _reserved;
-};
-
-#endif
-
diff --git a/fileformats/mp4/composer/include/amrsampleentry.h b/fileformats/mp4/composer/include/amrsampleentry.h
index 239457d..4af958b 100644
--- a/fileformats/mp4/composer/include/amrsampleentry.h
+++ b/fileformats/mp4/composer/include/amrsampleentry.h
@@ -29,7 +29,7 @@
 class PVA_FF_AMRSampleEntry : public PVA_FF_SampleEntry
 {
     public:
-        PVA_FF_AMRSampleEntry(); // Constructor
+        PVA_FF_AMRSampleEntry(uint32 format); // Constructor
         virtual ~PVA_FF_AMRSampleEntry();
 
         uint16 getTimeScale()
diff --git a/fileformats/mp4/composer/include/basecommand.h b/fileformats/mp4/composer/include/basecommand.h
deleted file mode 100644
index 78c37f4..0000000
--- a/fileformats/mp4/composer/include/basecommand.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* ------------------------------------------------------------------
- * Copyright (C) 1998-2009 PacketVideo
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
- * express or implied.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- * -------------------------------------------------------------------
- */
-/*
-    This PVA_FF_BaseCommand Class is the base class for all PVA_FF_ObjectDescriptor streams
-    that are represented as PVA_FF_ObjectDescriptor commands - the AccessUnits for all
-    OD streams
-*/
-
-
-#ifndef __BaseCommand_H__
-#define __BaseCommand_H__
-
-#include "oscl_types.h"
-
-#include "expandablebaseclass.h"
-
-const uint32 DEFAULT_COMMAND_SIZE = 1; // 8 bits for the tag ONLY
-// _sizeOfClass is computed explicitly elsewhere!
-
-class PVA_FF_BaseCommand : public PVA_FF_ExpandableBaseClass
-{
-
-    public:
-        PVA_FF_BaseCommand(uint8 tag); // Constructor
-        virtual ~PVA_FF_BaseCommand();
-
-        // Rendering the Descriptor in proper format (bitlengths, etc.) to an ostream
-        virtual bool renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp)
-        {
-            OSCL_UNUSED_ARG(fp);
-            return true;
-        }
-        // Rendering only the members of the PVA_FF_BaseDescriptor class
-        int renderBaseCommandMembers(MP4_AUTHOR_FF_FILE_IO_WRAP *fp) const;
-        virtual void recomputeSize() = 0; // Should get overridden
-        uint32 getSizeOfClass() const
-        {
-            return _sizeOfClass;
-        }
-        uint32 getDefaultCommandSize() const
-        {
-            return DEFAULT_COMMAND_SIZE;
-        }
-
-    private:
-        PVA_FF_BaseCommand() {} // Disabling public default constructor
-
-};
-
-
-
-#endif
-
diff --git a/fileformats/mp4/composer/include/h263decoderspecificinfo.h b/fileformats/mp4/composer/include/h263decoderspecificinfo.h
deleted file mode 100644
index 82bc49f..0000000
--- a/fileformats/mp4/composer/include/h263decoderspecificinfo.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* ------------------------------------------------------------------
- * Copyright (C) 1998-2009 PacketVideo
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
- * express or implied.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- * -------------------------------------------------------------------
- */
-/*
-    This PVA_FF_DecoderSpecificInfo Class that holds the Mpeg4 VOL header for the
-	video stream
-*/
-
-#ifndef __H263DecoderSpecificInfo_H__
-#define __H263DecoderSpecificInfo_H__
-
-#include "a_atomdefs.h"
-#include "decoderspecificinfo.h"
-
-//using namespace std;
-
-class PVA_FF_H263DecoderSpecificInfo : public PVA_FF_DecoderSpecificInfo
-{
-
-    public:
-        PVA_FF_H263DecoderSpecificInfo(); // Default constructor
-        virtual ~PVA_FF_H263DecoderSpecificInfo() {}; // Destructor
-
-        void setVendorCode(int32 VendorCode = PACKETVIDEO_FOURCC)
-        {
-            _VendorCode = VendorCode;
-        }
-        void setEncoderVersion(uint8 encoder_version = 0)
-        {
-            _encoder_version = encoder_version;
-        }
-        void setCodecProfile(uint8 codec_profile = 0)
-        {
-            _codec_profile = codec_profile;
-        }
-        void setCodecLevel(uint8 codec_level = 10)
-        {
-            _codec_level = codec_level;
-        }
-        void setMaxWidth(uint16 max_width = 176)
-        {
-            _max_width = max_width;
-        }
-        void setMaxHeight(uint16 max_height = 144)
-        {
-            _max_height = max_height;
-        }
-
-        virtual bool renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp);
-
-    private:
-        int32    _VendorCode;
-        uint8    _encoder_version;
-        uint8    _codec_profile;
-        uint8    _codec_level;
-        uint16   _max_width;
-        uint16   _max_height;
-};
-
-#endif
-
diff --git a/fileformats/mp4/composer/include/initialobjectdescriptor.h b/fileformats/mp4/composer/include/initialobjectdescriptor.h
deleted file mode 100644
index 2e1bc3b..0000000
--- a/fileformats/mp4/composer/include/initialobjectdescriptor.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/* ------------------------------------------------------------------
- * Copyright (C) 1998-2009 PacketVideo
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
- * express or implied.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- * -------------------------------------------------------------------
- */
-/*
-    This PVA_FF_InitialObjectDescriptor Class
-*/
-
-#ifndef __InitialObjectDescriptor_H__
-#define __InitialObjectDescriptor_H__
-
-#include "objectdescriptor.h"
-#include "es_id_inc.h"
-
-
-class PVA_FF_InitialObjectDescriptor : public PVA_FF_ObjectDescriptor
-{
-
-    public:
-        PVA_FF_InitialObjectDescriptor(); // Constructor
-
-        virtual ~PVA_FF_InitialObjectDescriptor();
-        void init();
-
-        // Rendering the PVA_FF_Atom in proper format (bitlengths, etc.) to an ostream
-        virtual bool renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp);
-
-        // Recompute size of class
-        virtual void recomputeSize();
-
-        // Member gets and sets
-        bool getIncludeInlineProfilesFlag() const
-        {
-            return _includeInlineProfilesFlag;
-        }
-        void setIncludeInlineProfilesFlag(bool flag)
-        {
-            _includeInlineProfilesFlag = flag;
-        }
-
-        uint8 getODProfileLevelIndication()
-        {
-            return _ODProfileLevelIndication;
-        }
-        void setODProfileLevelIndication(uint8 odpli)
-        {
-            _ODProfileLevelIndication = odpli;
-        }
-
-        uint8 getSceneProfileLevelIndication()
-        {
-            return _sceneProfileLevelIndication;
-        }
-        void setSceneProfileLevelIndication(uint8 spli)
-        {
-            _sceneProfileLevelIndication = spli;
-        }
-
-        uint8 getAudioProfileLevelIndication()
-        {
-            return _audioProfileLevelIndication;
-        }
-        void setAudioProfileLevelIndication(uint8 apli)
-        {
-            _audioProfileLevelIndication = apli;
-        }
-
-        uint8 getVisualProfileLevelIndication()
-        {
-            return _visualProfileLevelIndication;
-        }
-        void setVisualProfileLevelIndication(uint8 vpli)
-        {
-            _visualProfileLevelIndication = vpli;
-        }
-
-        uint8 getGraphicsProfileLevelIndication()
-        {
-            return _graphicsProfileLevelIndication;
-        }
-        void setGraphicsProfileLevelIndication(uint8 gpli)
-        {
-            _graphicsProfileLevelIndication = gpli;
-        }
-
-        Oscl_Vector<PVA_FF_ES_ID_Inc*, OsclMemAllocator> &getESIDIncludes()
-        {
-            return *_pES_ID_Inc_Vec;
-        }
-        void addESIDInclude(PVA_FF_ES_ID_Inc *ref);
-        PVA_FF_ES_ID_Inc* getESIDIncludeAt(int32 index);
-
-    private:
-        // ODID from base clase PVA_FF_ObjectDescriptor (10)
-        // urlFlag from base class PVA_FF_ObjectDescriptor (1)
-        bool _includeInlineProfilesFlag; // (1)
-        // _reserved from base class - now ONLY (4) instead of (5)
-
-        uint8 _ODProfileLevelIndication; // (8)
-        uint8 _sceneProfileLevelIndication; // (8)
-        uint8 _audioProfileLevelIndication; // (8)
-        uint8 _visualProfileLevelIndication; // (8)
-        uint8 _graphicsProfileLevelIndication; // (8)
-
-        Oscl_Vector<PVA_FF_ES_ID_Inc*, OsclMemAllocator> *_pES_ID_Inc_Vec; // PVA_FF_ESDescriptor[1 to 30]
-};
-
-
-
-#endif
diff --git a/fileformats/mp4/composer/include/mediaatom.h b/fileformats/mp4/composer/include/mediaatom.h
index 070d1e3..5479da0 100644
--- a/fileformats/mp4/composer/include/mediaatom.h
+++ b/fileformats/mp4/composer/include/mediaatom.h
@@ -40,7 +40,6 @@
         PVA_FF_MediaAtom(int32 mediaType,
                          int32 codecType,
                          uint32 fileAuthoringFlags,
-                         bool o3GPPCompliant = false,
                          uint32 protocol = 0,
                          uint8 profile = 1,
                          uint8 profileComp = 0xFF,
diff --git a/fileformats/mp4/composer/include/mediainformationatom.h b/fileformats/mp4/composer/include/mediainformationatom.h
index 5316b6c..ff2cfe2 100644
--- a/fileformats/mp4/composer/include/mediainformationatom.h
+++ b/fileformats/mp4/composer/include/mediainformationatom.h
@@ -41,7 +41,6 @@
         PVA_FF_MediaInformationAtom(uint32 mediaType,
                                     int32 codecType,
                                     uint32 fileAuthoringFlags,
-                                    bool o3GPPCompliant = false,
                                     uint32 protocol = 0,
                                     uint8 profile = 1,
                                     uint8 profileComp = 0xFF,
diff --git a/fileformats/mp4/composer/include/movieatom.h b/fileformats/mp4/composer/include/movieatom.h
index acd6a72..d38a27c 100644
--- a/fileformats/mp4/composer/include/movieatom.h
+++ b/fileformats/mp4/composer/include/movieatom.h
@@ -32,7 +32,6 @@
 #include "pv_mp4ffcomposer_config.h"
 
 #include "movieheaderatom.h"
-#include "objectdescriptoratom.h"
 #include "trackatom.h"
 
 #include "userdataatom.h"
@@ -337,7 +336,6 @@
         void	setMovieFragmentDuration();
         void	updateMovieFragmentDuration(uint32 trackID, uint32 ts);
         void	writeMovieFragmentDuration(MP4_AUTHOR_FF_FILE_IO_WRAP* fp);
-        void	setVideoWidthHeight(uint32 trackID, int16 width, int16 height);
         void    SetMaxSampleSize(uint32, uint32);
         void	writeMaxSampleSize(MP4_AUTHOR_FF_FILE_IO_WRAP*);
     private:
diff --git a/fileformats/mp4/composer/include/mpeg4file.h b/fileformats/mp4/composer/include/mpeg4file.h
index 32a316c..6123b7c 100644
--- a/fileformats/mp4/composer/include/mpeg4file.h
+++ b/fileformats/mp4/composer/include/mpeg4file.h
@@ -36,7 +36,6 @@
 #include "a_atomdefs.h"
 #include "a_isucceedfail.h"
 
-#include "objectdescriptorupdate.h"
 #include "interleavebuffer.h"
 
 // movie fragment
@@ -271,11 +270,6 @@
 
         bool renderMoovAtom();
         bool renderMovieFragments();
-        void setVideoWidthHeight(uint32 trackID, int16 width, int16 height)
-        {
-            if (_pmovieAtom != NULL)
-                _pmovieAtom->setVideoWidthHeight(trackID, width, height);
-        }
 
     private:
 
diff --git a/fileformats/mp4/composer/include/objectdescriptor.h b/fileformats/mp4/composer/include/objectdescriptor.h
deleted file mode 100644
index be9dd78..0000000
--- a/fileformats/mp4/composer/include/objectdescriptor.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/* ------------------------------------------------------------------
- * Copyright (C) 1998-2009 PacketVideo
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
- * express or implied.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- * -------------------------------------------------------------------
- */
-/*
-    This PVA_FF_ObjectDescriptor Class
-*/
-
-
-#ifndef __ObjectDescriptor_H__
-#define __ObjectDescriptor_H__
-
-#include "a_atomdefs.h"
-#include "basedescriptor.h"
-#include "a_isucceedfail.h"
-
-#include "esdescriptor.h"
-#include "es_id_ref.h"
-
-class PVA_FF_ObjectDescriptor : public PVA_FF_BaseDescriptor, public PVA_FF_ISucceedFail
-{
-
-    public:
-        // Default Constructor
-        PVA_FF_ObjectDescriptor(uint16 nextAvailableODID, uint8 tag = MP4_OD_TAG);
-
-        virtual ~PVA_FF_ObjectDescriptor();
-
-        void init(uint16 nextAvailableODID);
-
-        // Rendering the PVA_FF_Atom in proper format (bitlengths, etc.) to an ostream
-        virtual bool renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp);
-
-        // Member gets and sets
-        uint16 getObjectDescriptorID() const
-        {
-            return _objectDescriptorID;
-        }
-        void setObjectDescriptorID(uint16 id)
-        {
-            _objectDescriptorID = id;
-        }
-
-        bool getUrlFlag() const
-        {
-            return _urlFlag;
-        }
-        void setUrlFlag(bool flag)
-        {
-            _urlFlag = flag;
-        }
-
-        uint8 getUrlLength() const
-        {
-            return _urlLength;
-        }
-        PVA_FF_UTF8_STRING_PARAM getUrlString() const
-        {
-            return _urlString;
-        }
-        void setUrlString(PVA_FF_UTF8_STRING_PARAM url)
-        {
-            _urlString = url;
-        }
-
-        Oscl_Vector<PVA_FF_ES_ID_Ref*, OsclMemAllocator> &getESIDReferences()
-        {
-            return *_pES_ID_Ref_Vec;
-        }
-        void addESIDReference(PVA_FF_ES_ID_Ref *ref);
-        PVA_FF_ES_ID_Ref* getESIDReferenceAt(int32 index);
-
-    private:
-        virtual void recomputeSize();
-
-    protected:
-        uint16 _objectDescriptorID; // (10)
-        bool _urlFlag; // (1)
-        uint8 _reserved; // 0b11111; // (5)
-
-        uint8 _urlLength; // (8)
-        PVA_FF_UTF8_HEAP_STRING _urlString; // (8)[_urlLength]
-
-        Oscl_Vector<PVA_FF_ES_ID_Ref*, OsclMemAllocator> *_pES_ID_Ref_Vec; // PVA_FF_ESDescriptor[1 to 30]
-};
-
-
-
-#endif
-
diff --git a/fileformats/mp4/composer/include/objectdescriptoratom.h b/fileformats/mp4/composer/include/objectdescriptoratom.h
deleted file mode 100644
index 277ef43..0000000
--- a/fileformats/mp4/composer/include/objectdescriptoratom.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* ------------------------------------------------------------------
- * Copyright (C) 1998-2009 PacketVideo
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
- * express or implied.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- * -------------------------------------------------------------------
- */
-/*
-    This PVA_FF_ObjectDescriptorAtom Class contains an PVA_FF_ObjectDescriptor or an
-    PVA_FF_InitialObjectDescriptor.
-*/
-
-
-#ifndef __ObjectDescriptorAtom_H__
-#define __ObjectDescriptorAtom_H__
-
-#include "fullatom.h"
-#include "a_isucceedfail.h"
-
-#include "initialobjectdescriptor.h"
-
-class PVA_FF_ObjectDescriptorAtom : public PVA_FF_FullAtom, public PVA_FF_ISucceedFail
-{
-
-    public:
-        PVA_FF_ObjectDescriptorAtom(uint8 version, uint32 flags); // Constructor
-
-        virtual ~PVA_FF_ObjectDescriptorAtom();
-
-        // Member gets and sets
-        PVA_FF_InitialObjectDescriptor &getMutableInitialObjectDescriptor()
-        {
-            return *_pOD;
-        }
-        const PVA_FF_InitialObjectDescriptor &getInitialObjectDescriptor() const
-        {
-            return *_pOD;
-        }
-        void setInitialObjectDescriptor(PVA_FF_InitialObjectDescriptor *piod)
-        {
-            _pOD = piod;
-        }
-
-        virtual void recomputeSize();
-
-        // Rendering the PVA_FF_Atom in proper format (bitlengths, etc.) to an ostream
-        virtual bool renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp);
-
-    private:
-        PVA_FF_InitialObjectDescriptor *_pOD;
-};
-
-
-
-#endif
-
diff --git a/fileformats/mp4/composer/include/objectdescriptorupdate.h b/fileformats/mp4/composer/include/objectdescriptorupdate.h
deleted file mode 100644
index 60d4339..0000000
--- a/fileformats/mp4/composer/include/objectdescriptorupdate.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* ------------------------------------------------------------------
- * Copyright (C) 1998-2009 PacketVideo
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
- * express or implied.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- * -------------------------------------------------------------------
- */
-/*
-    This PVA_FF_ObjectDescriptorUpdate Class conveys a new list of ObjectDescriptors
-    OD streams
-*/
-
-
-#ifndef __ObjectDescriptorUpdate_H__
-#define __ObjectDescriptorUpdate_H__
-
-#include "basecommand.h"
-#include "objectdescriptor.h"
-
-class PVA_FF_ObjectDescriptorUpdate : public PVA_FF_BaseCommand
-{
-
-    public:
-        PVA_FF_ObjectDescriptorUpdate(); // Constructor
-        virtual ~PVA_FF_ObjectDescriptorUpdate();
-
-        // Adding elements to and getting from ObjDescrVec
-        void addObjectDescriptor(PVA_FF_ObjectDescriptor *pdescr);
-        const PVA_FF_ObjectDescriptor *getObjectDescriptorAt(int32 index) const;
-        const Oscl_Vector<PVA_FF_ObjectDescriptor*, OsclMemAllocator> &getObjDescrVec()
-        {
-            return *_pobjDescrVec;
-        }
-
-        // Rendering the Descriptor in proper format (bitlengths, etc.) to an ostream
-        virtual bool renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp);
-
-        virtual void recomputeSize();
-
-        // Dumps the objects members to the ostream os
-        virtual MP4_AUTHOR_FF_FILE_IO_WRAP* dump(MP4_AUTHOR_FF_FILE_IO_WRAP *fp);
-
-    private:
-        Oscl_Vector<PVA_FF_ObjectDescriptor*, OsclMemAllocator> *_pobjDescrVec;
-        uint32 _entryCount; // DO NOT RENDER THIS ATTRIBUTE - internal ONLY
-
-};
-
-#endif
-
diff --git a/fileformats/mp4/composer/include/sampledescriptionatom.h b/fileformats/mp4/composer/include/sampledescriptionatom.h
index d13cb83..0d157b3 100644
--- a/fileformats/mp4/composer/include/sampledescriptionatom.h
+++ b/fileformats/mp4/composer/include/sampledescriptionatom.h
@@ -34,11 +34,20 @@
 {
 
     public:
-        PVA_FF_SampleDescriptionAtom(uint32 mediaType, int32 codecType, bool o3GPPCompliant = false, uint32 protocol = 0, uint8 profile = 1, uint8 profileComp = 0xFF, uint8 level = 0xFF); // Constructor
+        PVA_FF_SampleDescriptionAtom(uint32 mediaType,
+                                     int32 codecType,
+                                     uint32 protocol = 0,
+                                     uint8 profile = 1,
+                                     uint8 profileComp = 0xFF,
+                                     uint8 level = 0xFF); // Constructor
 
         virtual ~PVA_FF_SampleDescriptionAtom();
 
-        void init(int32 mediaType, uint32 protocol, uint8 profile, uint8 profileComp, uint8 level);
+        void init(int32 mediaType,
+                  uint32 protocol,
+                  uint8 profile,
+                  uint8 profileComp,
+                  uint8 level);
 
         int32  nextSample(uint32 size, uint8 flags);
         int32  nextTextSample(uint32 size, uint8 flags, int32 index);
@@ -121,8 +130,6 @@
 
         uint16 _frame_width;
         uint16 _frame_height;
-
-        bool   _o3GPPCompliant;
         uint8  _h263Profile;
         uint8  _h263Level;
 
diff --git a/fileformats/mp4/composer/include/sampletableatom.h b/fileformats/mp4/composer/include/sampletableatom.h
index effe657..4358f8c 100644
--- a/fileformats/mp4/composer/include/sampletableatom.h
+++ b/fileformats/mp4/composer/include/sampletableatom.h
@@ -45,7 +45,6 @@
         PVA_FF_SampleTableAtom(uint32 mediaType,
                                int32 codecType,
                                uint32 fileAuthoringFlags,
-                               bool o3GPPCompliant = false,
                                uint32 protocol = 0,
                                uint8 profile = 1,
                                uint8 profileComp = 0xFF,
diff --git a/fileformats/mp4/composer/include/trackatom.h b/fileformats/mp4/composer/include/trackatom.h
index f9b521d..6bfd062 100644
--- a/fileformats/mp4/composer/include/trackatom.h
+++ b/fileformats/mp4/composer/include/trackatom.h
@@ -53,7 +53,6 @@
                          uint32 id,
                          uint32 fileAuthoringFlags,
                          int32 codecType = 0,
-                         bool o3GPPCompliant = false,
                          uint32 protocol = 0,
                          uint8 profile = 1,
                          uint8 profileComp = 0xFF,
@@ -233,22 +232,13 @@
             _pmediaAtom->setMaxBufferSizeDB(max);
         }
 
-        void setVideoParams(uint32 frame_width, uint32 frame_height)
-        {
-            _pmediaAtom->setVideoParams(frame_width, frame_height);
-        }
+        void setVideoParams(uint32 frame_width, uint32 frame_height);
 
         void setH263ProfileLevel(uint8 profile, uint8 level)
         {
             _pmediaAtom->setH263ProfileLevel(profile, level);
         }
 
-        bool Is3GPPTrack()
-        {
-            return _o3GPPCompliant;
-        }
-
-
         void setESID(uint16 esid)
         {
             _pmediaAtom->setESID(esid);
@@ -269,7 +259,6 @@
             return FIRST_SAMPLE;
         }
         void updateLastTSEntry(uint32 ts);
-        void setVideoWidthHeight(int16 width, int16 height);
         void SetMaxSampleSize(uint32);
         void writeMaxSampleSize(MP4_AUTHOR_FF_FILE_IO_WRAP*);
 
@@ -288,8 +277,6 @@
         bool FIRST_SAMPLE;
         PVA_FF_EditAtom	*_eList;
 
-        bool _o3GPPCompliant;
-
         bool   _oInterLeaveMode;
 
         bool _setDecoderSpecificInfoDone;
diff --git a/fileformats/mp4/composer/src/amrdecoderspecificinfo.cpp b/fileformats/mp4/composer/src/amrdecoderspecificinfo.cpp
deleted file mode 100644
index 3e47dff..0000000
--- a/fileformats/mp4/composer/src/amrdecoderspecificinfo.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-/* ------------------------------------------------------------------
- * Copyright (C) 1998-2009 PacketVideo
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
- * express or implied.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- * -------------------------------------------------------------------
- */
-/*
-    This PVA_FF_DecoderSpecificInfo Class that holds the Mpeg4 VOL header for the
-	video stream
-*/
-
-#define __IMPLEMENT_AMRDecoderSpecificInfo__
-
-#include "amrdecoderspecificinfo.h"
-
-#include "atom.h"
-#include "atomutils.h"
-
-// Default constructor
-PVA_FF_AMRDecoderSpecificInfo::PVA_FF_AMRDecoderSpecificInfo()
-{
-    _sizeOfClass = 12;
-    _sizeOfSizeField = PVA_FF_AtomUtils::
-                       getNumberOfBytesUsedToStoreSizeOfClass(_sizeOfClass);
-
-    _VendorCode = PACKETVIDEO_FOURCC;
-    _encoder_version = 0;
-    _band_mode = 0;
-    _mode_set = 0;
-    _mode_change_period = 0;
-    _mode_change_neighbour = 0;
-    _reserved = 0;
-}
-
-bool
-PVA_FF_AMRDecoderSpecificInfo::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp)
-{
-    uint8 temp1 = 0;
-    int32  temp2 = 0;
-    int32 rendered = 0;
-
-    // Render base descriptor packed size and tag
-    if (!renderBaseDescriptorMembers(fp))
-    {
-        return false;
-    }
-
-    rendered += getSize();
-
-    // Render decoder specific info payload
-    if (!PVA_FF_AtomUtils::render32(fp, _VendorCode))
-    {
-        return false;
-    }
-    rendered += 4;
-
-    if (!PVA_FF_AtomUtils::render8(fp, _encoder_version))
-    {
-        return false;
-    }
-    rendered += 1;
-
-    temp1 = (uint8)(((_band_mode << 7) & 0x80) | (_frame_type & 0x0F));
-    if (!PVA_FF_AtomUtils::render8(fp, temp1))
-    {
-        return false;
-    }
-    rendered += 1;
-
-    if (!PVA_FF_AtomUtils::render16(fp, _mode_set))
-    {
-        return false;
-    }
-    rendered += 2;
-
-    temp2 = ((_mode_change_period << 1) | (_mode_change_neighbour & 0x01));
-    if (!PVA_FF_AtomUtils::render32(fp, temp2))
-    {
-        return false;
-    }
-    rendered += 4;
-
-    return true;
-}
-
-
diff --git a/fileformats/mp4/composer/src/amrsampleentry.cpp b/fileformats/mp4/composer/src/amrsampleentry.cpp
index cbef66f..8d15927 100644
--- a/fileformats/mp4/composer/src/amrsampleentry.cpp
+++ b/fileformats/mp4/composer/src/amrsampleentry.cpp
@@ -26,8 +26,8 @@
 #include "a_atomdefs.h"
 
 // Constructor
-PVA_FF_AMRSampleEntry::PVA_FF_AMRSampleEntry()
-        : PVA_FF_SampleEntry(FourCharConstToUint32('s', 'a', 'm', 'r'))
+PVA_FF_AMRSampleEntry::PVA_FF_AMRSampleEntry(uint32 format)
+        : PVA_FF_SampleEntry(format)
 {
     init();
     recomputeSize();
diff --git a/fileformats/mp4/composer/src/decoderconfigdescriptor.cpp b/fileformats/mp4/composer/src/decoderconfigdescriptor.cpp
index 18bb291..4e60a13 100644
--- a/fileformats/mp4/composer/src/decoderconfigdescriptor.cpp
+++ b/fileformats/mp4/composer/src/decoderconfigdescriptor.cpp
@@ -61,13 +61,13 @@
         {
             switch (_codecType)
             {
-                case CODEC_TYPE_AMR_AUDIO:
-                    _objectTypeIndication = 0xd0;
-                    break;
-
                 case CODEC_TYPE_AAC_AUDIO:
                     _objectTypeIndication = 0x40;
                     break;
+
+                default:
+                    _objectTypeIndication = 0xFF;
+                    break;
             }
             _streamType = 0x05; // 0x05 for AudioStream
 
diff --git a/fileformats/mp4/composer/src/h263decoderspecificinfo.cpp b/fileformats/mp4/composer/src/h263decoderspecificinfo.cpp
deleted file mode 100644
index f571c54..0000000
--- a/fileformats/mp4/composer/src/h263decoderspecificinfo.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-/* ------------------------------------------------------------------
- * Copyright (C) 1998-2009 PacketVideo
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
- * express or implied.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- * -------------------------------------------------------------------
- */
-/*
-    This PVA_FF_DecoderSpecificInfo Class that holds the Mpeg4 VOL header for the
-	video stream
-*/
-
-#define __IMPLEMENT_AMRDecoderSpecificInfo__
-
-#include "h263decoderspecificinfo.h"
-
-#include "atomutils.h"
-
-PVA_FF_H263DecoderSpecificInfo::PVA_FF_H263DecoderSpecificInfo()
-{
-    _sizeOfClass = 12;
-    _sizeOfSizeField = PVA_FF_AtomUtils::
-                       getNumberOfBytesUsedToStoreSizeOfClass(_sizeOfClass);
-}
-
-bool
-PVA_FF_H263DecoderSpecificInfo::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp)
-{
-    int32 rendered = 0;
-
-    // Render base descriptor packed size and tag
-    if (!renderBaseDescriptorMembers(fp))
-    {
-        return false;
-    }
-    rendered += getSize();
-
-    // Render decoder specific info payload
-    if (!PVA_FF_AtomUtils::render32(fp, _VendorCode))
-    {
-        return false;
-    }
-    rendered += 4;
-
-    if (!PVA_FF_AtomUtils::render8(fp, _encoder_version))
-    {
-        return false;
-    }
-    rendered += 1;
-
-    if (!PVA_FF_AtomUtils::render8(fp, _codec_profile))
-    {
-        return false;
-    }
-    rendered += 1;
-
-    if (!PVA_FF_AtomUtils::render8(fp, _codec_level))
-    {
-        return false;
-    }
-    rendered += 1;
-
-    if (!PVA_FF_AtomUtils::render8(fp, 0))
-    {
-        return false;
-    }
-    rendered += 1;
-
-    if (!PVA_FF_AtomUtils::render16(fp, _max_width))
-    {
-        return false;
-    }
-    rendered += 2;
-
-    if (!PVA_FF_AtomUtils::render16(fp, _max_height))
-    {
-        return false;
-    }
-    rendered += 2;
-
-    return true;
-}
-
-
diff --git a/fileformats/mp4/composer/src/impeg4file.cpp b/fileformats/mp4/composer/src/impeg4file.cpp
index b5a93c5..63ef20e 100644
--- a/fileformats/mp4/composer/src/impeg4file.cpp
+++ b/fileformats/mp4/composer/src/impeg4file.cpp
@@ -68,6 +68,7 @@
     return mp4;
 }
 
+OSCL_EXPORT_REF
 PVA_FF_IMpeg4File*
 PVA_FF_IMpeg4File::createMP4File(int32 mediaType,
                                  uint32 fileAuthoringFlags,
diff --git a/fileformats/mp4/composer/src/interleavebuffer.cpp b/fileformats/mp4/composer/src/interleavebuffer.cpp
index 4068b02..941b3b3 100644
--- a/fileformats/mp4/composer/src/interleavebuffer.cpp
+++ b/fileformats/mp4/composer/src/interleavebuffer.cpp
@@ -54,6 +54,13 @@
 
             _maxInterLeaveBufferSize = AAC_INTERLEAVE_BUFFER_SIZE;
         }
+        else if (codecType == CODEC_TYPE_AMR_WB_AUDIO)
+        {
+            _interLeaveBuffer =
+                (uint8 *)(oscl_malloc(sizeof(uint8) * AMR_WB_INTERLEAVE_BUFFER_SIZE));
+
+            _maxInterLeaveBufferSize = AMR_WB_INTERLEAVE_BUFFER_SIZE;
+        }
     }
 
     if ((uint32) mediaType == MEDIA_TYPE_VISUAL)
diff --git a/fileformats/mp4/composer/src/mediaatom.cpp b/fileformats/mp4/composer/src/mediaatom.cpp
index 3e5ee81..c8a5898 100644
--- a/fileformats/mp4/composer/src/mediaatom.cpp
+++ b/fileformats/mp4/composer/src/mediaatom.cpp
@@ -30,7 +30,6 @@
 PVA_FF_MediaAtom::PVA_FF_MediaAtom(int32 mediaType,
                                    int32 codecType,
                                    uint32 fileAuthoringFlags,
-                                   bool o3GPPCompliant,
                                    uint32 protocol,
                                    uint8 profile,
                                    uint8 profileComp,
@@ -45,7 +44,6 @@
     PV_MP4_FF_NEW(fp->auditCB, PVA_FF_MediaInformationAtom, (mediaType,
                   codecType,
                   fileAuthoringFlags,
-                  o3GPPCompliant,
                   protocol, profile,
                   profileComp, level), _pmediaInformation);
 
diff --git a/fileformats/mp4/composer/src/mediainformationatom.cpp b/fileformats/mp4/composer/src/mediainformationatom.cpp
index 5e85bb2..bbaa71b 100644
--- a/fileformats/mp4/composer/src/mediainformationatom.cpp
+++ b/fileformats/mp4/composer/src/mediainformationatom.cpp
@@ -37,7 +37,6 @@
 PVA_FF_MediaInformationAtom::PVA_FF_MediaInformationAtom(uint32 mediaType,
         int32 codecType,
         uint32 fileAuthoringFlags,
-        bool o3GPPCompliant,
         uint32 protocol,
         uint8 profile,
         uint8 profileComp,
@@ -49,7 +48,6 @@
     PV_MP4_FF_NEW(fp->auditCB, PVA_FF_SampleTableAtom, (mediaType,
                   codecType,
                   fileAuthoringFlags,
-                  o3GPPCompliant,
                   protocol, profile,
                   profileComp, level), _psampleTableAtom);
 
diff --git a/fileformats/mp4/composer/src/movieatom.cpp b/fileformats/mp4/composer/src/movieatom.cpp
index f954789..7235adf 100644
--- a/fileformats/mp4/composer/src/movieatom.cpp
+++ b/fileformats/mp4/composer/src/movieatom.cpp
@@ -435,24 +435,6 @@
     }
 }
 
-void PVA_FF_MovieAtom::setVideoWidthHeight(uint32 trackID, int16 width, int16 height)
-{
-    PVA_FF_TrackAtom *mediaTrack;
-    uint32 mediaType = 0;
-    mediaTrack = getMediaTrack(trackID);
-
-    if (mediaTrack != NULL)
-    {
-        mediaType  = mediaTrack->getMediaType();
-        if (mediaType == MEDIA_TYPE_VISUAL)
-        {
-            mediaTrack->setVideoWidthHeight(width, height);
-        }
-    }
-}
-
-
-
 void
 PVA_FF_MovieAtom::addSampleToTrack(uint32 trackID,
                                    uint8 *psample,
diff --git a/fileformats/mp4/composer/src/mpeg4file.cpp b/fileformats/mp4/composer/src/mpeg4file.cpp
index 556b907..709acda 100644
--- a/fileformats/mp4/composer/src/mpeg4file.cpp
+++ b/fileformats/mp4/composer/src/mpeg4file.cpp
@@ -32,20 +32,59 @@
 #include "a_atomdefs.h"
 #include "atomutils.h"
 
-#include "objectdescriptorupdate.h"
-
 #include "pv_gau.h"
 #include "oscl_byte_order.h"
 #include "oscl_bin_stream.h"
 
 #include "pv_mp4ffcomposer_config.h"
 
-const uint8 aZeroSetMask[9] = {0xfe, 0xfe, 0xfc, 0xfc, 0xf0, 0xfe, 0xf0, 0xf0, 0xfe};
+const uint8 aAMRNBZeroSetMask[9] =
+{
+    0xfe, 0xfe, 0xfc, 0xfc,
+    0xf0, 0xfe, 0xf0, 0xf0,
+    0xfe
+};
+//IETF AMR WB Speech Frame Sizes (including zero byte padding but not including TOC)
+//FT 0 (6.6 Kbps) - 17 bytes = 136 bits
+//FT 1 (8.85 Kbps) - 23 bytes = 184 bits
+//FT 2 (12.65 Kbps) - 32 bytes = 256 bits
+//FT 3 (14.25 Kbps) - 36 bytes = 288 bits
+//FT 4 (15.85 Kbps) - 40 bytes = 320 bits
+//FT 5 (18.25 Kbps) - 46 bytes = 368 bits
+//FT 6 (19.85 Kbps) - 50 bytes = 400 bits
+//FT 7 (23.05 Kbps) - 58 bytes = 464 bits
+//FT 8 (23.85 Kbps) - 60 bytes = 480 bits
+//FT 9 (SID) - 5 bytes = 40 bits
+//FT 10-13 - Reserved
+//FT 14 (Lost frame) and FT 15 (NO DATA) - 0 bytes = 0 bits
+
+//IETF AMR WB IF1 Speech Frame Sizes (just Class A, B & C speech bits, does not include FT or any other headers)
+//FT 0 (6.6 Kbps) -  132 bits; num-bits-padded = 4
+//FT 1 (8.85 Kbps) - 177 bits; num-bits-padded = 7
+//FT 2 (12.65 Kbps) - 253 bits; num-bits-padded = 3
+//FT 3 (14.25 Kbps) - 285 bits; num-bits-padded = 3
+//FT 4 (15.85 Kbps) - 317 bits; num-bits-padded = 3
+//FT 5 (18.25 Kbps) - 365 bits; num-bits-padded = 3
+//FT 6 (19.85 Kbps) - 397 bits; num-bits-padded = 3
+//FT 7 (23.05 Kbps) - 461 bits; num-bits-padded = 3
+//FT 8 (23.85 Kbps) - 477 bits; num-bits-padded = 3
+//FT 9 (SID) - 5 bytes = 40 bits; num-bits-padded = 0
+//FT 10-13 - Reserved
+//FT 14 (Lost frame) and FT 15 (NO DATA) - 0 bytes = 0 bits; num-bits-padded = 0
+
+// Difference between IF1 bits and IETF storage bits is padded with zeros to byte align the frame
+const uint8 aAMRWBZeroSetMask[9] =
+{
+    0xf0, 0x80, 0xf8, 0xf8,
+    0xf8, 0xf8, 0xf8, 0xf8,
+    0xf8
+};
 
 typedef Oscl_Vector<PVA_FF_MediaDataAtom*, OsclMemAllocator> PVA_FF_MediaDataAtomVecType;
 typedef Oscl_Vector<PVA_FF_MovieFragmentAtom*, OsclMemAllocator> PVA_FF_MovieFragmentAtomVecType;
 typedef Oscl_Vector<PVA_FF_InterLeaveBuffer*, OsclMemAllocator> PVA_FF_InterLeaveBufferVecType;
 
+//common to both AMR and AMR-WB
 const uint32 AMRModeSetMask[16] =
 {
     0x0001, 0x0002, 0x0004, 0x0008,
@@ -54,12 +93,6 @@
     0x1000, 0x2000, 0x4000, 0x8000
 };
 
-const uint32 AMRBitRates[8] =
-{
-    4750, 5150, 5900, 6700,
-    7400, 7950, 10200, 12200
-};
-
 // Constructor
 PVA_FF_Mpeg4File::PVA_FF_Mpeg4File(int32 mediaType)
 {
@@ -403,39 +436,13 @@
 }
 
 uint32
-PVA_FF_Mpeg4File::addTrack(int32 mediaType, int32 codecType, bool oDirectRender,
-                           uint8 profile, uint8 profileComp, uint8 level)
+PVA_FF_Mpeg4File::addTrack(int32 mediaType,
+                           int32 codecType,
+                           bool oDirectRender,
+                           uint8 profile,
+                           uint8 profileComp,
+                           uint8 level)
 {
-    bool o3GPPCompliant = false;
-
-    //Always 3GPP in case of AMR and H263
-    if ((uint32) mediaType == MEDIA_TYPE_AUDIO)
-    {
-        if (codecType == CODEC_TYPE_AMR_AUDIO)
-        {
-            o3GPPCompliant = true;
-        }
-    }
-    else if ((uint32) mediaType == MEDIA_TYPE_VISUAL)
-    {
-        if (codecType == CODEC_TYPE_BASELINE_H263_VIDEO)
-        {
-            o3GPPCompliant = true;
-        }
-        if (codecType == CODEC_TYPE_AVC_VIDEO)
-        {
-            o3GPPCompliant = true;
-        }
-
-    }
-    else if ((uint32) mediaType == MEDIA_TYPE_TEXT) //added for timed text track
-    {
-        if (codecType == CODEC_TYPE_TIMED_TEXT)
-        {
-            o3GPPCompliant = true;
-        }
-    }
-
     uint32 TrackID = 0;
     PVA_FF_TrackAtom *pmediatrack = NULL;
     _codecType = codecType;
@@ -499,7 +506,7 @@
                       _pmovieAtom->getMutableMovieHeaderAtom().findNextTrackID(),
                       _fileAuthoringFlags,
                       codecType,
-                      o3GPPCompliant, 1, profile, profileComp, level),
+                      1, profile, profileComp, level),
                       pmediatrack);
 
         if (mda)
@@ -522,12 +529,10 @@
 
         TrackID = pmediatrack->getTrackID();
 
-        if (codecType == CODEC_TYPE_AMR_AUDIO)
+        if ((codecType == CODEC_TYPE_AMR_AUDIO) ||
+                (codecType == CODEC_TYPE_AMR_WB_AUDIO))
         {
-            if (o3GPPCompliant)
-            {
-                _o3GPPTrack = true;
-            }
+            _o3GPPTrack = true;
         }
         if (codecType == CODEC_TYPE_AAC_AUDIO)
         {
@@ -538,19 +543,10 @@
 
     if ((uint32) mediaType == MEDIA_TYPE_VISUAL)
     {
-        if (codecType == CODEC_TYPE_BASELINE_H263_VIDEO)
+        if ((codecType == CODEC_TYPE_BASELINE_H263_VIDEO) ||
+                (codecType == CODEC_TYPE_AVC_VIDEO))
         {
-            if (o3GPPCompliant)
-            {
-                _o3GPPTrack = true;
-            }
-        }
-        else if (codecType == CODEC_TYPE_AVC_VIDEO)
-        {
-            if (o3GPPCompliant)
-            {
-                _o3GPPTrack = true;
-            }
+            _o3GPPTrack = true;
         }
         else if (codecType == CODEC_TYPE_MPEG4_VIDEO)
         {
@@ -559,12 +555,11 @@
         }
 
         // Create default video track and add it to moov atom
-
         PV_MP4_FF_NEW(fp->auditCB, PVA_FF_TrackAtom, (MEDIA_TYPE_VISUAL,
                       _pmovieAtom->getMutableMovieHeaderAtom().findNextTrackID(),
                       _fileAuthoringFlags,
                       codecType,
-                      o3GPPCompliant, 1, profile, profileComp, level),
+                      1, profile, profileComp, level),
                       pmediatrack);
 
         // add video interleave buffer for track
@@ -592,24 +587,18 @@
     {
         if (codecType == CODEC_TYPE_TIMED_TEXT)
         {
-            if (o3GPPCompliant)
-            {
-                _o3GPPTrack = true;
-            }
+            _o3GPPTrack = true;
         }
-
         // Create default video track and add it to moov atom
-
         PV_MP4_FF_NEW(fp->auditCB, PVA_FF_TrackAtom, (MEDIA_TYPE_TEXT,
                       _pmovieAtom->getMutableMovieHeaderAtom().findNextTrackID(),
                       _fileAuthoringFlags,
                       codecType,
-                      o3GPPCompliant, 1,
+                      1,
                       profile, profileComp, level),
                       pmediatrack);
 
         // add text interleave buffer for track
-
         if (_oInterLeaveEnabled)
         {
             PV_MP4_FF_NEW(fp->auditCB, PVA_FF_InterLeaveBuffer, (MEDIA_TYPE_TEXT,
@@ -625,13 +614,9 @@
 
         // Returns the index of the reference in the table to which this was
         // just added (with a 1-based index NOT a zero-based index)
-
         TrackID = pmediatrack->getTrackID();
-
     }
-
     recomputeSize();
-
     return (TrackID);
 }
 
@@ -801,100 +786,54 @@
         {
             if (mediaTrack != NULL)
             {
-                if (mediaTrack->getCodecType() == CODEC_TYPE_AMR_AUDIO)
+                if ((mediaTrack->getCodecType() == CODEC_TYPE_AMR_AUDIO) ||
+                        (mediaTrack->getCodecType() == CODEC_TYPE_AMR_WB_AUDIO))
                 {
                     if (size >= 1)
                     {
                         PVA_FF_TrackAtom *track = _pmovieAtom->getMediaTrack(trackID);
-
                         if (track != NULL)
                         {
-                            if (track->Is3GPPTrack())
+                            // FT is in the first byte that comes off the encoder
+                            flags = *((uint8*)(fragmentList.front().ptr));
+                            uint32 mode_set = 0;
+                            if (flags < 16)
                             {
-                                // FT fp in the first byte that comes off the encoder
-                                flags = *((uint8*)(fragmentList.front().ptr));
-
-                                uint32 mode_set = 0;
-
-                                if (flags < 16)
+                                mode_set = AMRModeSetMask[(flags&0x0f)];
+                            }
+                            if (flags < 9)
+                            {
+                                // JUST TO ENSURE THAT THE PADDED BITS ARE ZERO
+                                fragment = fragmentList.back();
+                                if (mediaTrack->getCodecType() == CODEC_TYPE_AMR_AUDIO)
                                 {
-                                    mode_set = AMRModeSetMask[(flags&0x0f)];
+                                    ((uint8*)fragment.ptr)[ fragment.len - 1] &= aAMRNBZeroSetMask[(flags&0x0f)];
+                                }
+                                else if (mediaTrack->getCodecType() == CODEC_TYPE_AMR_WB_AUDIO)
+                                {
+                                    ((uint8*)fragment.ptr)[ fragment.len - 1] &= aAMRWBZeroSetMask[(flags&0x0f)];
                                 }
 
-                                if (flags < 9)
+                            }
+                            if (_oInterLeaveEnabled)
+                            {
+                                if (!addMediaSampleInterleave(trackID, fragmentList, size, ts, flags))
                                 {
-                                    // JUST TO ENSURE THAT THE PADDED BITS ARE ZERO
-                                    fragment = fragmentList.back();
-                                    ((uint8*)fragment.ptr)[ fragment.len - 1] &= aZeroSetMask[(flags&0x0f)];
-
-                                }
-
-                                if (_oInterLeaveEnabled)
-                                {
-                                    if (!addMediaSampleInterleave(trackID, fragmentList, size, ts, flags))
-                                    {
-                                        return false;
-                                    }
-                                }
-                                else
-                                {
-                                    // Add to mdat PVA_FF_Atom for the specified track
-                                    if (!mdatAtom->addRawSample(fragmentList, size, mediaType, codecType))
-                                    {
-                                        retVal = false;
-                                    }
-                                    // Add to moov atom (in turn adds to tracks)
-                                    _pmovieAtom->addSampleToTrack(trackID, fragmentList, size,
-                                                                  ts, flags);
+                                    return false;
                                 }
                             }
                             else
                             {
-
-                                // FT fp in the first byte that comes off the encoder
-                                flags = *((uint8*)(fragmentList.front()).ptr);
-
                                 // Add to mdat PVA_FF_Atom for the specified track
-                                uint32 mode_set = 0;
-
-                                if (flags < 16)
+                                if (!mdatAtom->addRawSample(fragmentList, size, mediaType, codecType))
                                 {
-                                    mode_set = AMRModeSetMask[(flags&0x0f)];
+                                    retVal = false;
                                 }
-
-                                if (flags < 9)
-                                {
-                                    // JUST TO ENSURE THAT THE PADDED BITS ARE ZERO
-                                    fragment = fragmentList.back();
-                                    ((uint8*)fragment.ptr)[ fragment.len - 1] &= aZeroSetMask[(flags&0x0f)];
-                                }
-
-                                if (_oInterLeaveEnabled)
-                                {
-                                    if (!addMediaSampleInterleave(trackID, fragmentList, size, ts, flags))
-                                    {
-                                        return false;
-                                    }
-                                }
-                                else
-                                {
-                                    Oscl_Vector <OsclMemoryFragment, OsclMemAllocator>& list = fragmentList;
-                                    list.front().ptr = (uint8*)(list.front().ptr) + 1;
-                                    list.front().len = list.front().len - 1;
-                                    if (!mdatAtom->addRawSample(list, size - 1, mediaType, codecType))
-                                    {
-                                        retVal = false;
-                                    }
-
-                                    // Add to moov atom (in turn adds to tracks)
-                                    list = fragmentList;
-                                    list.back().len = list.back().len - 1;
-                                    _pmovieAtom->addSampleToTrack(trackID, list, (size - 1),
-                                                                  ts, flags);
-                                }
+                                // Add to moov atom (in turn adds to tracks)
+                                _pmovieAtom->addSampleToTrack(trackID, fragmentList, size,
+                                                              ts, flags);
                             }
                         }
-
                     }
                     else
                     {
@@ -1242,7 +1181,10 @@
     OSCL_UNUSED_ARG(interval);
     PVA_FF_TrackAtom *trackAtom;
     trackAtom = _pmovieAtom->getMediaTrack(trackID);
-    trackAtom->setVideoParams(frame_width, frame_height);
+
+    if (trackAtom != NULL)
+        trackAtom->setVideoParams(frame_width, frame_height);
+
     return;
 }
 
@@ -1781,93 +1723,71 @@
     {
         if (_modifiable)
         {
-            if (mediaTrack->getCodecType() == CODEC_TYPE_AMR_AUDIO)
+            if ((mediaTrack->getCodecType() == CODEC_TYPE_AMR_AUDIO) ||
+                    (mediaTrack->getCodecType() == CODEC_TYPE_AMR_WB_AUDIO))
             {
-                if (mediaTrack->Is3GPPTrack())
+                int32 index = 0;
+
+                uint8  *frag_ptr = (uint8 *)pgau->buf.fragments[index].ptr;
+                int32 frag_len  = pgau->buf.fragments[index].len;
+
+                for (uint32 k = 0; k < pgau->numMediaSamples; k++)
                 {
-                    int32 index = 0;
+                    uint8 frame_type = (uint8)pgau->info[k].sample_info;
 
-                    uint8  *frag_ptr = (uint8 *)pgau->buf.fragments[index].ptr;
-                    int32 frag_len  = pgau->buf.fragments[index].len;
+                    frame_type = (uint8)(frame_type << 3);
+                    frame_type |= 0x04;
 
-                    for (uint32 k = 0; k < pgau->numMediaSamples; k++)
+                    // Add to mdat PVA_FF_Atom for the specified track
+                    if (!mdatAtom->addRawSample(&frame_type, 1))
                     {
-                        uint8 frame_type = (uint8)pgau->info[k].sample_info;
+                        retVal = false;
+                    }
 
-                        frame_type = (uint8)(frame_type << 3);
-                        frame_type |= 0x04;
+                    int32 frame_size = pgau->info[k].len;
 
-                        // Add to mdat PVA_FF_Atom for the specified track
-                        if (!mdatAtom->addRawSample(&frame_type, 1))
+                    while (frame_size)
+                    {
+                        if (frag_len >= frame_size)
                         {
-                            retVal = false;
-                        }
-
-                        int32 frame_size = pgau->info[k].len;
-
-                        while (frame_size)
-                        {
-                            if (frag_len >= frame_size)
+                            // Add to mdat PVA_FF_Atom for the specified track
+                            if (!mdatAtom->addRawSample(frag_ptr,
+                                                        frame_size))
                             {
-                                // Add to mdat PVA_FF_Atom for the specified track
-                                if (!mdatAtom->addRawSample(frag_ptr,
-                                                            frame_size))
-                                {
-                                    retVal = false;
-                                }
-
-                                frag_ptr += frame_size;
-                                frag_len -= frame_size;
-                                frame_size = 0;
+                                retVal = false;
                             }
-                            else
-                            {
-                                // Add to mdat PVA_FF_Atom for the specified track
-                                if (!mdatAtom->addRawSample(frag_ptr,
-                                                            frag_len))
-                                {
-                                    retVal = false;
-                                }
 
-                                frame_size -= frag_len;
-
-                                index++;
-
-                                if (index == pgau->buf.num_fragments)
-                                {
-                                    return false;
-                                }
-
-                                frag_ptr = (uint8 *)pgau->buf.fragments[index].ptr;
-                                frag_len = pgau->buf.fragments[index].len;
-                            }
+                            frag_ptr += frame_size;
+                            frag_len -= frame_size;
+                            frame_size = 0;
                         }
-                        // Add to moov atom (in turn adds to tracks)
-                        _pmovieAtom->addSampleToTrack(trackID, NULL,
-                                                      (pgau->info[k].len + 1),
-                                                      pgau->info[k].ts,
-                                                      (uint8)pgau->info[k].sample_info);
-                    }
-                }
-                else
-                {
-                    for (int32 k = 0; k < pgau->buf.num_fragments; k++)
-                    {
-                        // Add to mdat PVA_FF_Atom for the specified track
-                        if (!mdatAtom->addRawSample(pgau->buf.fragments[k].ptr,
-                                                    pgau->buf.fragments[k].len))
+                        else
                         {
-                            retVal = false;
+                            // Add to mdat PVA_FF_Atom for the specified track
+                            if (!mdatAtom->addRawSample(frag_ptr,
+                                                        frag_len))
+                            {
+                                retVal = false;
+                            }
+
+                            frame_size -= frag_len;
+
+                            index++;
+
+                            if (index == pgau->buf.num_fragments)
+                            {
+                                return false;
+                            }
+
+                            frag_ptr = (uint8 *)pgau->buf.fragments[index].ptr;
+                            frag_len = pgau->buf.fragments[index].len;
                         }
                     }
-                    for (uint32 j = 0; j < pgau->numMediaSamples; j++)
-                    {
-                        // Add to moov atom (in turn adds to tracks)
-                        _pmovieAtom->addSampleToTrack(trackID, NULL,
-                                                      pgau->info[j].len,
-                                                      pgau->info[j].ts,
-                                                      (uint8)pgau->info[j].sample_info);
-                    }
+                    // Add to moov atom (in turn adds to tracks)
+                    _pmovieAtom->addSampleToTrack(trackID, NULL,
+                                                  (pgau->info[k].len + 1),
+                                                  pgau->info[k].ts,
+                                                  (uint8)pgau->info[k].sample_info);
                 }
             }
             else
diff --git a/fileformats/mp4/composer/src/sampledescriptionatom.cpp b/fileformats/mp4/composer/src/sampledescriptionatom.cpp
index fd46a1e..3de9b45 100644
--- a/fileformats/mp4/composer/src/sampledescriptionatom.cpp
+++ b/fileformats/mp4/composer/src/sampledescriptionatom.cpp
@@ -23,28 +23,19 @@
 
 #define IMPLEMENT_SampleDescriptionAtom
 
+#include "atomutils.h"
+#include "a_atomdefs.h"
 #include "sampledescriptionatom.h"
-
 #include "visualsampleentry.h"
 #include "audiosampleentry.h"
 #include "mpegsampleentry.h"
-
-#include "objectdescriptorupdate.h"
-
-#include "atomutils.h"
-#include "a_atomdefs.h"
-#include "objectdescriptor.h"
 #include "decoderspecificinfo.h"
-#include "amrdecoderspecificinfo.h"
-#include "h263decoderspecificinfo.h"
-
 #include "amrsampleentry.h"
 #include "h263sampleentry.h"
-#include"avcsampleentry.h"
-
-#ifndef TEXTSAMPLEENTRY_H_INCLUDED
+#include "avcsampleentry.h"
 #include "textsampleentry.h"
-#endif
+
+//common to both AMR and AMR-WB
 const int32 AMRModeSetMask[16] =
 {
     0x0001, 0x0002, 0x0004, 0x0008,
@@ -53,27 +44,17 @@
     0x1000, 0x2000, 0x4000, 0x8000
 };
 
-const int32 AMRBitRates[9] =
-{
-    4750, 5150,  5900,
-    6700, 7400,  7950,
-    10200, 12200, 2400
-};
-
 typedef Oscl_Vector<PVA_FF_SampleEntry*, OsclMemAllocator> PVA_FF_SampleEntryVecType;
 typedef Oscl_Vector<uint32, OsclMemAllocator> PVA_FF_SampleEntryTypeVecType;
 
 // Constructor
 PVA_FF_SampleDescriptionAtom::PVA_FF_SampleDescriptionAtom(uint32 mediaType, int32 codecType,
-        bool o3GPPCompliant, uint32 protocol, uint8 profile,
+        uint32 protocol, uint8 profile,
         uint8 profileComp, uint8 level)
         : PVA_FF_FullAtom(SAMPLE_DESCRIPTION_ATOM, (uint8)0, (uint32)0),
         _mediaType(mediaType)
 {
     _codecType = codecType;
-
-    _o3GPPCompliant = o3GPPCompliant;
-
     init(mediaType, protocol, profile, profileComp, level);
     recomputeSize();
 }
@@ -123,17 +104,19 @@
                 PV_MP4_FF_NEW(fp->auditCB, PVA_FF_AudioSampleEntry, (_codecType), entry);
                 addSampleEntry(entry);
             }
-
-            if (_codecType == CODEC_TYPE_AMR_AUDIO)
+            else if (_codecType == CODEC_TYPE_AMR_AUDIO)
             {
-                if (_o3GPPCompliant)
-                {
-                    PV_MP4_FF_NEW(fp->auditCB, PVA_FF_AMRSampleEntry, (), entry);
-
-                    addSampleEntry(entry);
-                    entry->setParent(this);
-                    entry->recomputeSize();
-                }
+                PV_MP4_FF_NEW(fp->auditCB, PVA_FF_AMRSampleEntry, (AMR_SAMPLE_ENTRY), entry);
+                addSampleEntry(entry);
+                entry->setParent(this);
+                entry->recomputeSize();
+            }
+            else if (_codecType == CODEC_TYPE_AMR_WB_AUDIO)
+            {
+                PV_MP4_FF_NEW(fp->auditCB, PVA_FF_AMRSampleEntry, (AMR_WB_SAMPLE_ENTRY), entry);
+                addSampleEntry(entry);
+                entry->setParent(this);
+                entry->recomputeSize();
             }
         }
         break;
@@ -143,18 +126,8 @@
 
             if (_codecType == CODEC_TYPE_BASELINE_H263_VIDEO)
             {
-                if (_o3GPPCompliant)
-                {
-                    PV_MP4_FF_NEW(fp->auditCB, PVA_FF_H263SampleEntry, (), entry);
-                    addSampleEntry(entry);
-                }
-                else
-                {
-                    PV_MP4_FF_NEW(fp->auditCB, PVA_FF_VisualSampleEntry, (_codecType), entry);
-
-                    addSampleEntry(entry);
-                    addDecoderSpecificInfo(NULL);
-                }
+                PV_MP4_FF_NEW(fp->auditCB, PVA_FF_H263SampleEntry, (), entry);
+                addSampleEntry(entry);
             }
             else if (_codecType == CODEC_TYPE_AVC_VIDEO)
             {
@@ -162,7 +135,6 @@
                 addSampleEntry(entry);
                 entry->setParent(this);
                 entry->recomputeSize();
-
             }
             else
             {
@@ -208,6 +180,12 @@
                 PV_MP4_FF_DELETE(NULL, PVA_FF_AMRSampleEntry, audioentry);
 
             }
+            else if (type == AMR_WB_SAMPLE_ENTRY)
+            {
+                PVA_FF_AMRSampleEntry* audioentry = OSCL_STATIC_CAST(PVA_FF_AMRSampleEntry*, entry);
+                PV_MP4_FF_DELETE(NULL, PVA_FF_AMRSampleEntry, audioentry);
+
+            }
             else if (type == H263_SAMPLE_ENTRY)
             {
                 PVA_FF_H263SampleEntry* videoentry = OSCL_STATIC_CAST(PVA_FF_H263SampleEntry*, entry);
@@ -309,20 +287,7 @@
     {
         case MEDIA_TYPE_VISUAL:
         {
-            // ALL PARAMETERS DEFAULTED
-            if (_codecType == CODEC_TYPE_BASELINE_H263_VIDEO)
-            {
-                PVA_FF_H263DecoderSpecificInfo *pH263info = NULL;
-                PV_MP4_FF_NEW(fp->auditCB, PVA_FF_H263DecoderSpecificInfo, (), pH263info);
-                pH263info->setVendorCode();
-                pH263info->setEncoderVersion();
-                pH263info->setCodecProfile();
-                pH263info->setCodecLevel();
-                pH263info->setMaxWidth();
-                pH263info->setMaxHeight();
-                getMutableSampleEntryAt(0)->addDecoderSpecificInfo(pH263info);
-            }
-            else if (_codecType == CODEC_TYPE_MPEG4_VIDEO)
+            if (_codecType == CODEC_TYPE_MPEG4_VIDEO)
             {
                 getMutableSampleEntryAt(0)->addDecoderSpecificInfo(pinfo);
             }
@@ -331,7 +296,6 @@
                 getMutableSampleEntryAt(0)->addDecoderSpecificInfo(pinfo);
                 getMutableSampleEntryAt(0)->recomputeSize();
                 recomputeSize();
-
             }
             else
             {
@@ -352,7 +316,7 @@
         break;
 
         default:
-            return; // This fp actually an undefined situation
+            return; // This is actually an undefined situation
     }
 }
 
@@ -422,11 +386,7 @@
     {
         case MEDIA_TYPE_VISUAL:
         {
-            if (_codecType == CODEC_TYPE_AVC_VIDEO)
-            {
-                //nothing
-            }
-            else if (!_o3GPPCompliant)
+            if (_codecType == CODEC_TYPE_MPEG4_VIDEO)
             {
                 PVA_FF_VisualSampleEntry *entry = (PVA_FF_VisualSampleEntry*) getSampleEntryAt(0);
                 entry->nextSampleSize(size);
@@ -446,105 +406,22 @@
             else
             {
                 unsigned short mode_set = 0;
-
-                if (!_o3GPPCompliant)
+                if ((_codecType == CODEC_TYPE_AMR_AUDIO) ||
+                        (_codecType == CODEC_TYPE_AMR_WB_AUDIO))
                 {
-                    bool found = false;
-                    uint32 i = 0;
-                    int32 frameType;
-
                     //CHECK FOR FRAME TYPE AND SET FLAGS ACCORDINGLY
-                    audio_frame_type = (uint8)(flags & 0x0f);
-
-                    for (i = 0; i < _psampleEntryVec->size(); i++)
+                    audio_frame_type = (flags >> 3) & 0x0F;
+                    if (getSampleEntryAt(0) != NULL)
                     {
-                        switch (_codecType)
+                        PVA_FF_AMRSampleEntry *entry = (PVA_FF_AMRSampleEntry *)(getSampleEntryAt(0));
+                        mode_set = entry->getModeSet();
+                        if (audio_frame_type < 16)
                         {
-                            case CODEC_TYPE_AMR_AUDIO:
-                            {
-                                PVA_FF_AMRDecoderSpecificInfo *pAMRInfo =
-                                    (PVA_FF_AMRDecoderSpecificInfo *)(getSampleEntryAt(i)->getDecoderSpecificInfo());
-
-                                frameType = pAMRInfo->getFrameType();
-
-                                if (frameType == audio_frame_type)
-                                {
-                                    found = true;
-                                }
-                                else
-                                {
-                                    mode_set = pAMRInfo->getModeSet();
-
-                                    mode_set |= AMRModeSetMask[(int)audio_frame_type];
-
-                                    pAMRInfo->setModeSet(mode_set);
-                                }
-                            }
-                            break;
-
-                            default:
-                                break;
-                        }
-
-                        if (found)
-                        {
-                            break;
-                        }
-                    }
-
-                    if (!found) // Add new audio sample entry
-                    {
-                        PVA_FF_AudioSampleEntry *entry = NULL;
-                        PV_MP4_FF_NEW(fp->auditCB, PVA_FF_AudioSampleEntry, (_codecType), entry);
-                        entry->nextSampleSize(size);
-
-                        if (_codecType == CODEC_TYPE_AMR_AUDIO)
-                        {
-                            PVA_FF_AMRDecoderSpecificInfo *pAMRInfo = NULL;
-                            PV_MP4_FF_NEW(fp->auditCB, PVA_FF_AMRDecoderSpecificInfo, (), pAMRInfo);
-
-                            pAMRInfo->setVendorcode(PACKETVIDEO_FOURCC);
-                            pAMRInfo->setEncoderVersion(1);
-
-                            entry->setTargetBitrate(AMRBitRates[(int)audio_frame_type]);
-
-
-                            pAMRInfo->setFrameType(audio_frame_type);
-
                             mode_set |= AMRModeSetMask[(int)audio_frame_type];
-                            pAMRInfo->setModeSet(mode_set);
-                            entry->addDecoderSpecificInfo(pAMRInfo);
                         }
-                        addSampleEntry(entry);
-
-                        nReturn = _psampleEntryVec->size();
+                        entry->setModeSet(mode_set);
                     }
-                    else
-                    {
-                        nReturn = i + 1;
-                    }
-                }
-                else
-                {
-                    if (_codecType == CODEC_TYPE_AMR_AUDIO)
-                    {
-                        //CHECK FOR FRAME TYPE AND SET FLAGS ACCORDINGLY
-                        //audio_frame_type = (uint8)(flags & 0x0f);
-
-                        audio_frame_type = flags >> 3;
-
-                        if (getSampleEntryAt(0) != NULL)
-                        {
-                            PVA_FF_AMRSampleEntry *entry = (PVA_FF_AMRSampleEntry *)(getSampleEntryAt(0));
-
-                            mode_set = entry->getModeSet();
-
-                            mode_set |= AMRModeSetMask[(int)audio_frame_type];
-
-                            entry->setModeSet(mode_set);
-                        }
-                        nReturn = 1;
-                    }
+                    nReturn = 1;
                 }
             }
             break;
@@ -627,6 +504,10 @@
             {
                 _psampleEntryVec->push_back(entry);
             }
+            else if (entry->getType() == AMR_WB_SAMPLE_ENTRY)
+            {
+                _psampleEntryVec->push_back(entry);
+            }
             else
             {
                 return;
@@ -801,31 +682,15 @@
         {
             if (_codecType == CODEC_TYPE_BASELINE_H263_VIDEO)
             {
-                if (_o3GPPCompliant)
-                {
-                    PVA_FF_H263SampleEntry *entry =
-                        (PVA_FF_H263SampleEntry *)((*_psampleEntryVec)[i]);
-                    entry->setVideoParams(_frame_width, _frame_height);
+                PVA_FF_H263SampleEntry *entry =
+                    (PVA_FF_H263SampleEntry *)((*_psampleEntryVec)[i]);
+                entry->setVideoParams(_frame_width, _frame_height);
 
-                    PVA_FF_H263SpecficAtom *h263SpecificAtom =
-                        entry->get3GPPDecoderSpecificInfo();
+                PVA_FF_H263SpecficAtom *h263SpecificAtom =
+                    entry->get3GPPDecoderSpecificInfo();
 
-                    h263SpecificAtom->setCodecProfile(_h263Profile);
-                    h263SpecificAtom->setCodecLevel(_h263Level);
-                }
-                else
-                {
-                    PVA_FF_VisualSampleEntry *entry =
-                        (PVA_FF_VisualSampleEntry *)((*_psampleEntryVec)[i]);
-
-                    PVA_FF_H263DecoderSpecificInfo *pH263info =
-                        (PVA_FF_H263DecoderSpecificInfo *)(entry->getDecoderSpecificInfo());
-
-                    pH263info->setMaxWidth(_frame_width);
-                    pH263info->setMaxHeight(_frame_height);
-                    pH263info->setCodecProfile(_h263Profile);
-                    pH263info->setCodecLevel(_h263Level);
-                }
+                h263SpecificAtom->setCodecProfile(_h263Profile);
+                h263SpecificAtom->setCodecLevel(_h263Level);
             }
             else if (_codecType == CODEC_TYPE_AVC_VIDEO)
             {
@@ -881,7 +746,7 @@
     {
         case MEDIA_TYPE_VISUAL:
         {
-            if (!_o3GPPCompliant)
+            if (_codecType == CODEC_TYPE_MPEG4_VIDEO)
             {
                 PVA_FF_VisualSampleEntry *entry = (PVA_FF_VisualSampleEntry*) getSampleEntryAt(0);
                 entry->nextSampleSize(aSize);
@@ -914,7 +779,7 @@
     {
         case MEDIA_TYPE_VISUAL:
         {
-            if (!_o3GPPCompliant)
+            if (_codecType == CODEC_TYPE_MPEG4_VIDEO)
             {
                 PVA_FF_VisualSampleEntry *entry = (PVA_FF_VisualSampleEntry*) getSampleEntryAt(0);
                 entry->writeMaxSampleSize(_afp);
diff --git a/fileformats/mp4/composer/src/sampletableatom.cpp b/fileformats/mp4/composer/src/sampletableatom.cpp
index 1e190a7..5d1d0a3 100644
--- a/fileformats/mp4/composer/src/sampletableatom.cpp
+++ b/fileformats/mp4/composer/src/sampletableatom.cpp
@@ -31,7 +31,6 @@
 PVA_FF_SampleTableAtom::PVA_FF_SampleTableAtom(uint32 mediaType,
         int32 codecType,
         uint32 fileAuthoringFlags,
-        bool o3GPPCompliant,
         uint32 protocol,
         uint8 profile,
         uint8 profileComp,
@@ -45,7 +44,7 @@
     }
 
     PV_MP4_FF_NEW(fp->auditCB, PVA_FF_TimeToSampleAtom, (mediaType), _ptimeToSampleAtom);
-    PV_MP4_FF_NEW(fp->auditCB, PVA_FF_SampleDescriptionAtom, (mediaType, codecType, o3GPPCompliant, protocol, profile, profileComp, level), _psampleDescriptionAtom);
+    PV_MP4_FF_NEW(fp->auditCB, PVA_FF_SampleDescriptionAtom, (mediaType, codecType, protocol, profile, profileComp, level), _psampleDescriptionAtom);
     PV_MP4_FF_NEW(fp->auditCB, PVA_FF_SampleSizeAtom, (mediaType), _psampleSizeAtom);
     PV_MP4_FF_NEW(fp->auditCB, PVA_FF_SampleToChunkAtom, (mediaType, fileAuthoringFlags), _psampleToChunkAtom);
     PV_MP4_FF_NEW(fp->auditCB, PVA_FF_ChunkOffsetAtom, (mediaType, fileAuthoringFlags), _pchunkOffsetAtom);
diff --git a/fileformats/mp4/composer/src/timetosampleatom.cpp b/fileformats/mp4/composer/src/timetosampleatom.cpp
index 2bf71bd..592fab0 100644
--- a/fileformats/mp4/composer/src/timetosampleatom.cpp
+++ b/fileformats/mp4/composer/src/timetosampleatom.cpp
@@ -26,7 +26,6 @@
 #include "timetosampleatom.h"
 #include "atomutils.h"
 #include "a_atomdefs.h"
-#include "objectdescriptorupdate.h"
 
 typedef Oscl_Vector<uint32, OsclMemAllocator> uint32VecType;
 typedef Oscl_Vector<int32, OsclMemAllocator> int32VecType;
diff --git a/fileformats/mp4/composer/src/trackatom.cpp b/fileformats/mp4/composer/src/trackatom.cpp
index 0ad74ba..f2a8a4f 100644
--- a/fileformats/mp4/composer/src/trackatom.cpp
+++ b/fileformats/mp4/composer/src/trackatom.cpp
@@ -35,7 +35,6 @@
                                    uint32 id,
                                    uint32 fileAuthoringFlags,
                                    int32 codecType,
-                                   bool o3GPPCompliant,
                                    uint32 protocol,
                                    uint8 profile,
                                    uint8 profileComp,
@@ -51,8 +50,6 @@
 
     _codecType = codecType;
 
-    _o3GPPCompliant = o3GPPCompliant;
-
     _oInterLeaveMode = false;
     if (fileAuthoringFlags & PVMP4FF_SET_MEDIA_INTERLEAVE_MODE)
     {
@@ -77,7 +74,6 @@
     PV_MP4_FF_NEW(fp->auditCB, PVA_FF_MediaAtom, (type,
                   codecType,
                   fileAuthoringFlags,
-                  o3GPPCompliant,
                   protocol, profile,
                   profileComp, level),
                   _pmediaAtom);
@@ -469,14 +465,6 @@
     return (mediaHeaderDuration);
 }
 
-void PVA_FF_TrackAtom::setVideoWidthHeight(int16 width, int16 height)
-{
-    if (_ptrackHeader != NULL)
-    {
-        _ptrackHeader->setVideoWidthHeight(width, height);
-    }
-}
-
 // in movie fragment mode set the actual duration of
 // last sample
 void
@@ -505,3 +493,13 @@
 {
     _pmediaAtom->writeMaxSampleSize(_afp);
 }
+
+void
+PVA_FF_TrackAtom::setVideoParams(uint32 frame_width, uint32 frame_height)
+{
+    if (_ptrackHeader != NULL)
+        _ptrackHeader->setVideoWidthHeight((int16)frame_width, (int16)frame_height);
+
+    if (_pmediaAtom != NULL)
+        _pmediaAtom->setVideoParams(frame_width, frame_height);
+}
diff --git a/fileformats/pvx/parser/Android.mk b/fileformats/pvx/parser/Android.mk
new file mode 100644
index 0000000..3c6140e
--- /dev/null
+++ b/fileformats/pvx/parser/Android.mk
@@ -0,0 +1,28 @@
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := \
+ 	src/pvpvxparser.cpp
+
+
+LOCAL_MODULE := libpvpvxparser
+
+LOCAL_CFLAGS :=  $(PV_CFLAGS)
+
+
+
+LOCAL_STATIC_LIBRARIES := 
+
+LOCAL_SHARED_LIBRARIES := 
+
+LOCAL_C_INCLUDES := \
+	$(PV_TOP)/fileformats/pvx/parser/src \
+ 	$(PV_TOP)/fileformats/pvx/parser/include \
+ 	$(PV_INCLUDES)
+
+LOCAL_COPY_HEADERS_TO := $(PV_COPY_HEADERS_TO)
+
+LOCAL_COPY_HEADERS := \
+ 	include/pvpvxparser.h
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/fileformats/pvx/parser/build/make/local.mk b/fileformats/pvx/parser/build/make/local.mk
new file mode 100644
index 0000000..71b20a7
--- /dev/null
+++ b/fileformats/pvx/parser/build/make/local.mk
@@ -0,0 +1,28 @@
+# Get the current local path as the first operation
+LOCAL_PATH := $(call get_makefile_dir)
+
+# Clear out the variables used in the local makefiles
+include $(MK)/clear.mk
+
+TARGET := pvpvxparser
+
+
+XCXXFLAGS += $(FLAG_COMPILE_WARNINGS_AS_ERRORS)
+
+
+
+
+
+
+
+
+SRCDIR := ../../src
+INCSRCDIR := ../../include
+
+SRCS := pvpvxparser.cpp
+
+HDRS := pvpvxparser.h
+
+
+
+include $(MK)/library.mk
diff --git a/fileformats/pvx/parser/include/pvpvxparser.h b/fileformats/pvx/parser/include/pvpvxparser.h
new file mode 100644
index 0000000..8bb6643
--- /dev/null
+++ b/fileformats/pvx/parser/include/pvpvxparser.h
@@ -0,0 +1,137 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+
+#ifndef PVPVXPARSER_H_INCLUDED
+#define PVPVXPARSER_H_INCLUDED
+
+#ifndef OSCL_BASE_H_INCLUDED
+#include "oscl_base.h"
+#endif
+#ifndef OSCLCONFIG_IO_H_INCLUDED
+#include "osclconfig_io.h"
+#endif
+#ifndef OSCL_FILE_IO_H_INCLUDED
+#include "oscl_file_io.h"
+#endif
+#ifndef OSCL_STRING_H_INCLUDED
+#include "oscl_string.h"
+#endif
+#ifndef OSCL_PRIQUEUE_H_INCLUDED
+#include "oscl_priqueue.h"
+#endif
+#ifndef OSCL_SCHEDULER_AO_H_INCLUDED
+#include "oscl_scheduler_ao.h"
+#endif
+#ifndef OSCL_MEM_MEMPOOL_H_INCLUDED
+#include "oscl_mem_mempool.h"
+#endif
+#ifndef PVLOGGER_H_INCLUDED
+#include "pvlogger.h"
+#endif
+
+#ifndef OSCL_TYPES_H_INCLUDED
+#include "oscl_types.h"
+#endif
+
+#ifndef OSCL_STRING_CONTAINERS_H_INCLUDED
+#include "oscl_string_containers.h"
+#endif
+
+#ifndef OSCL_UTF8CONV_H
+#include "oscl_utf8conv.h"
+#endif
+
+#define MAX_PVXUSERID_LEN			256
+#define MAX_PVXAPPSPECIFICSTRING_LEN		256
+#define MAX_PVXSESSIONID_LEN			36
+#define MAX_PVXEXPIRYTIMESTAMP_LEN		20
+#define MAX_PVXRANDOMFILLER_LEN			16
+#define MAX_PVXDIGITALSIGNATURE_LEN		40
+
+class CPVXInfo
+{
+    public:
+        OSCL_IMPORT_REF CPVXInfo(void);
+        OSCL_IMPORT_REF ~CPVXInfo();
+        void Reset(void);
+        bool iSecurity;
+        OSCL_StackString<MAX_PVXUSERID_LEN>iUserID;
+        OSCL_StackString<MAX_PVXAPPSPECIFICSTRING_LEN>iAppSpecificString;
+        OSCL_StackString<MAX_PVXSESSIONID_LEN>iSessionID;
+        OSCL_StackString<MAX_PVXEXPIRYTIMESTAMP_LEN>iExpiryTimeStamp;
+        OSCL_StackString<MAX_PVXRANDOMFILLER_LEN>iRandomFiller;
+        OSCL_StackString<MAX_PVXDIGITALSIGNATURE_LEN>iDigitalSignature;
+
+        typedef enum
+        {
+            ENoAction			= 0,
+            ECloseApp,
+            ENextUrl
+        } TPVEndOfClipAction;
+
+        typedef enum 		// For Download only
+        {
+            ENoPlayback			= 0,
+            EAfterDownload,
+            EAsap,
+            EReserve
+        } TPVPlaybackControl;
+
+        // Imperial specific data
+        int16 iPVXVersion;
+        int32 iStartTime;
+        int32 iEndTime;
+        int32 iFlags;
+        bool iDownload;
+        bool iPurge;
+        bool iRandomPos;
+        TPVPlaybackControl	iPlaybackControl;
+        bool iUserPlayback;
+        TPVEndOfClipAction	iEndOfClip;
+        OSCL_wHeapStringA iLaunchURL;
+};
+
+
+class CPVXParser
+{
+    public:
+
+        typedef enum
+        {
+            CPVXParser_Success,
+            CPVXParser_InvalidSize,
+            CPVXParser_URLCorrupted
+        } CPVXParserStatus;
+        /**
+         * This routine parses the .pvx file.
+         * @param aPVX: (input param) .pvx file.
+         * @param aClipURL: (output param) the target URL
+         * @param aPVXInfo: (output param) additional information in the .pvx file
+         * @return Error code
+         */
+        OSCL_IMPORT_REF CPVXParserStatus ParsePVX(OsclMemoryFragment &aPVX, OSCL_HeapString<OsclMemAllocator>& aClipURL, CPVXInfo& aPVXInfo);
+        OSCL_IMPORT_REF CPVXParser(void);
+
+    private:
+        int16 BufToShortInt(uint8* data);
+        int32 BufToLongInt(uint8* data);
+        PVLogger* iLogger;
+};
+
+# endif
+
diff --git a/fileformats/pvx/parser/src/pvpvxparser.cpp b/fileformats/pvx/parser/src/pvpvxparser.cpp
new file mode 100644
index 0000000..7e971e3
--- /dev/null
+++ b/fileformats/pvx/parser/src/pvpvxparser.cpp
@@ -0,0 +1,395 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+
+#include "pvpvxparser.h"
+
+// Use default DLL entry point for Symbian
+#include "oscl_dll.h"
+OSCL_DLL_ENTRY_POINT_DEFAULT()
+
+
+///////////////////////////////////////////////////
+OSCL_EXPORT_REF CPVXInfo::CPVXInfo(void)
+{
+    Reset();
+}
+
+////////////////////////////////////////////////////
+OSCL_EXPORT_REF CPVXInfo::~CPVXInfo()
+{
+}
+
+////////////////////////////////////////////////////
+// Clear the PVX info
+void CPVXInfo::Reset(void)
+{
+    iSecurity = false;
+    iPVXVersion = 0;
+    iStartTime = 0;
+    iEndTime = -1;
+    iFlags = 0;
+    iDownload = false;
+    iPurge = false;
+    iRandomPos = false;
+    iPlaybackControl = ENoPlayback;
+    iUserPlayback = false;
+    iEndOfClip = ENoAction;
+    iLaunchURL = OSCL_wHeapStringA();
+}
+
+
+/////////////////////////////////////////////////////////////////////////////
+OSCL_EXPORT_REF CPVXParser::CPVXParser(void)
+{
+    iLogger = PVLogger::GetLoggerObject("");
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// Parses the PVX file content contained in aBuffer (2.0 or Imperial) and puts
+// the parse content in pPVXInfo
+OSCL_EXPORT_REF CPVXParser::CPVXParserStatus CPVXParser::ParsePVX(OsclMemoryFragment &aPVX, OSCL_HeapString<OsclMemAllocator>& aClipURL, CPVXInfo& aPVXInfo)
+{
+
+    PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "CPVXParser::ParsePVX() called"));
+
+    uint32 aBufferLen = aPVX.len;
+    uint8* aBuffer = (uint8*)aPVX.ptr;
+    // Check if the PVX info structure is valid
+
+    // Get the PVX file size
+    uint32 FileLoc = 0;
+    if (FileLoc + 2 >= aBufferLen)
+    {
+        PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "CPVXParser::ParsePVX Error  1 FileLoc+2 >= aBufferLen"));
+        return CPVXParser_InvalidSize;
+    }
+
+    FileLoc += 2;	// Skip the file size
+
+    // Get video and audio IDs (2.0) OR PVX file version (Imperial) (2 bytes)
+    if (FileLoc + 2 >= aBufferLen)
+    {
+        PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "CPVXParser::ParsePVX Error 2 FileLoc+2 >= aBufferLen"));
+        return CPVXParser_InvalidSize;
+    }
+
+    aPVXInfo.iPVXVersion = BufToShortInt(&aBuffer[FileLoc]);
+    FileLoc += 2;
+
+    // Get the subscriber size info (2 bytes)
+    if (FileLoc + 2 >= aBufferLen)
+    {
+        PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "CPVXParser::ParsePVX Error 3 FileLoc+2 >= aBufferLen"));
+        return CPVXParser_InvalidSize;
+    }
+
+    int16 dSubSize = BufToShortInt(&aBuffer[FileLoc]);
+    FileLoc += 2;
+
+    // Get subscriber info if present
+    if (dSubSize > 0)
+    {
+        // Get the user ID size (2 bytes)
+        if (FileLoc + 2 >= aBufferLen)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR,
+                            (0, "CPVXParser::ParsePVX Error 4 FileLoc+2 >= aBufferLen"));
+            return CPVXParser_InvalidSize;
+        }
+        int16 dUserIDSize = BufToShortInt(&aBuffer[FileLoc]);
+        FileLoc += 2;
+
+        // Get User ID if present (variable length specified by dUserIDSize)
+        if (dUserIDSize > 0)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                            (0, "CPVXParser::ParsePVX() called FileLoc=%d,dUserIDSize=%d, \
+			aBufferLen=%d,MAX_PVXUSERID_LEN=%d", FileLoc, dUserIDSize, aBufferLen, MAX_PVXUSERID_LEN));
+            if (FileLoc + dUserIDSize >= aBufferLen || dUserIDSize > MAX_PVXUSERID_LEN - 1)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "CPVXParser:: \
+				ParsePVX Error 5 FileLoc+2 >= aBufferLen"));
+                return CPVXParser_InvalidSize;
+            }
+            aPVXInfo.iUserID.write(0, dUserIDSize, (char *)&aBuffer[FileLoc]);
+            FileLoc += dUserIDSize;
+        }
+
+        // Get the application specific string size (2 bytes)
+        if (FileLoc + 2 >= aBufferLen)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR,
+                            (0, "CPVXParser::ParsePVX Error 6 FileLoc+2 >= aBufferLen"));
+            return CPVXParser_InvalidSize;
+        }
+
+        int16 dAppSpecificSize = BufToShortInt(&aBuffer[FileLoc]);
+        FileLoc += 2;
+
+        // Get application specific string if present (variable length specified by dAppSpecificSize)
+        if (dAppSpecificSize > 0)
+        {
+            if (FileLoc + dAppSpecificSize >= aBufferLen || dAppSpecificSize > MAX_PVXAPPSPECIFICSTRING_LEN - 1)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR,
+                                (0, "CPVXParser::ParsePVX Error 7 FileLoc+2 >= aBufferLen"));
+                return CPVXParser_InvalidSize;
+            }
+
+            aPVXInfo.iAppSpecificString.write(0, dAppSpecificSize, (char *)&aBuffer[FileLoc]);
+            FileLoc += dAppSpecificSize;
+        }
+
+        // Get the security flag (1 byte)
+        if (FileLoc + 1 >= aBufferLen)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR,
+                            (0, "CPVXParser::ParsePVX Error FileLoc+1 >= aBufferLen"));
+            return CPVXParser_InvalidSize;
+        }
+
+        if (aBuffer[FileLoc] > 0)
+        {
+            aPVXInfo.iSecurity = true;
+        }
+        else
+        {
+            aPVXInfo.iSecurity = false;
+        }
+        FileLoc += 1;
+
+        // Get authentication session ID (36 bytes)
+        if (FileLoc + 36 >= aBufferLen)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR,
+                            (0, "CPVXParser::ParsePVX Error 8 FileLoc+2 >= aBufferLen"));
+            return CPVXParser_InvalidSize;
+        }
+
+        aPVXInfo.iSessionID.write(0, MAX_PVXSESSIONID_LEN, (char *)&aBuffer[FileLoc]);
+        FileLoc += 36;
+
+        // Get expiry timestamp (20 bytes)
+        if (FileLoc + 20 >= aBufferLen)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR,
+                            (0, "CPVXParser::ParsePVX Error 9 FileLoc+2 >= aBufferLen"));
+            return CPVXParser_InvalidSize;
+        }
+        aPVXInfo.iExpiryTimeStamp.write(0, MAX_PVXEXPIRYTIMESTAMP_LEN, (char *)&aBuffer[FileLoc]);
+        FileLoc += 20;
+
+        // Get random filler field (16 bytes)
+        if (FileLoc + 16 >= aBufferLen)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR,
+                            (0, "CPVXParser::ParsePVX Error 10 FileLoc+2 >= aBufferLen"));
+            return CPVXParser_InvalidSize;
+        }
+        aPVXInfo.iRandomFiller.write(0, MAX_PVXRANDOMFILLER_LEN, (char *)&aBuffer[FileLoc]);
+        FileLoc += 16;
+
+        // Get digital signature (40 bytes)
+        if (FileLoc + 40 >= aBufferLen)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR,
+                            (0, "CPVXParser::ParsePVX Error 11 FileLoc+2 >= aBufferLen"));
+            return CPVXParser_InvalidSize;
+        }
+        aPVXInfo.iDigitalSignature.write(0, MAX_PVXDIGITALSIGNATURE_LEN, (char *)&aBuffer[FileLoc]);
+        FileLoc += 40;
+    }
+
+    //	For proper implementation, URL size should be an offset from subscriber auth size
+
+    //	But following PVPlayer 2.0 PC/CE implementation
+
+    // Get the URL size (2 bytes)
+    if (FileLoc + 2 >= aBufferLen)
+    {
+        PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR,
+                        (0, "CPVXParser::ParsePVX Error 12 FileLoc+2 >= aBufferLen"));
+        return CPVXParser_InvalidSize;
+    }
+
+    int16 dURLSize = BufToShortInt(&aBuffer[FileLoc]);
+    FileLoc += 2;
+
+    // Get the URL (variable length specified by dURLSize)
+    if (dURLSize > 0)
+    {
+        if (FileLoc + dURLSize > aBufferLen)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR,
+                            (0, "CPVXParser::ParsePVX Error 13 FileLoc+2 >= aBufferLen"));
+            return CPVXParser_InvalidSize;
+        }
+
+        // Only copy dURLSize of bytes
+        aClipURL.set((char*)&aBuffer[FileLoc], dURLSize);
+    }
+    else
+    {
+        // URL is not present. Bad PVX file
+        PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "CPVXParser::ParsePVX Error NO URL...BAD PVX FILE"));
+        return CPVXParser_URLCorrupted;
+    }
+    FileLoc += dURLSize;
+
+    // If iPVXVersion is 768(0x0300), Imperial format
+    if (aPVXInfo.iPVXVersion == 0x0300)
+    {
+        // Get playback start time (4 bytes)
+        if (FileLoc + 4 >= aBufferLen)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "CPVXParser::ParsePVX Error 15 FileLoc+2 >= aBufferLen"));
+            return CPVXParser_InvalidSize;
+        }
+        aPVXInfo.iStartTime = BufToLongInt(&aBuffer[FileLoc]);
+        FileLoc += 4;
+
+        // Get playback end time (4 bytes)
+        if (FileLoc + 4 >= aBufferLen)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "CPVXParser::ParsePVX Error 16 FileLoc+2 >= aBufferLen"));
+            return CPVXParser_InvalidSize;
+        }
+        aPVXInfo.iEndTime = BufToLongInt(&aBuffer[FileLoc]);
+        FileLoc += 4;
+
+        // Get flags (4 bytes)
+        if (FileLoc + 4 >= aBufferLen)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "CPVXParser::ParsePVX Error 17 FileLoc+2 >= aBufferLen"));
+            return CPVXParser_InvalidSize;
+        }
+        aPVXInfo.iFlags = BufToLongInt(&aBuffer[FileLoc]);
+        FileLoc += 4;
+
+        // Check the flags
+        aPVXInfo.iRandomPos = (aPVXInfo.iFlags & 0x01 ? false : true);
+        aPVXInfo.iDownload = (aPVXInfo.iFlags & 0x02 ? true : false);
+        aPVXInfo.iPurge = (aPVXInfo.iFlags & 0x04 ? true : false);
+        aPVXInfo.iUserPlayback = (aPVXInfo.iFlags & 0x20 ? false : true);
+        switch (aPVXInfo.iFlags & 0x18)
+        {
+            case 0x08:	// Automatic after download complete
+                aPVXInfo.iPlaybackControl = CPVXInfo::EAfterDownload;
+                break;
+            case 0x10:	// Play as soon as possible
+                aPVXInfo.iPlaybackControl = CPVXInfo::EAsap;
+                break;
+            case 0x18:	// Reserved
+                aPVXInfo.iPlaybackControl = CPVXInfo::EReserve;
+                break;
+            case 0x00:	// Not automatic
+            default:
+                aPVXInfo.iPlaybackControl = CPVXInfo::ENoPlayback;
+                break;
+        }
+
+        // Get end of clip behavior (2 bytes)
+        if (FileLoc + 2 >= aBufferLen)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "CPVXParser::ParsePVX Error 18 FileLoc+2 >= aBufferLen"));
+            return CPVXParser_InvalidSize;
+        }
+        switch (BufToShortInt(&aBuffer[FileLoc]))
+        {
+            case 1:
+                aPVXInfo.iEndOfClip = CPVXInfo::ECloseApp;
+                break;
+
+            case 2:
+                aPVXInfo.iEndOfClip = CPVXInfo::ENextUrl;
+                break;
+
+            case 0:
+            default:
+                aPVXInfo.iEndOfClip = CPVXInfo::ENoAction;
+                break;
+        }
+        FileLoc += 2;
+
+        // Get launch URL size (2 bytes)
+        if (FileLoc + 2 > aBufferLen)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "CPVXParser::ParsePVX Error 19 FileLoc+2 >= aBufferLen"));
+            return CPVXParser_InvalidSize;
+        }
+        int16 dLaunchURLSize = BufToShortInt(&aBuffer[FileLoc]);
+        FileLoc += 2;
+
+        // Get launch URL (variable length specified by dLaunchURLSize)
+        if (dLaunchURLSize > 0)
+        {
+            if (FileLoc + dLaunchURLSize > aBufferLen)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "CPVXParser::ParsePVX Error 20 FileLoc+2 >= aBufferLen"));
+                return CPVXParser_InvalidSize;
+            }
+            OSCL_HeapStringA launchurl8((const char *)&aBuffer[FileLoc], dLaunchURLSize);
+
+            OSCL_wString::chartype* launchurl16 = OSCL_ARRAY_NEW(OSCL_wString::chartype, dLaunchURLSize + 1);
+            if (launchurl16 == NULL)
+            {
+                // Memory allocation failure
+                return CPVXParser_InvalidSize;
+            }
+            oscl_UTF8ToUnicode((const OSCL_String::chartype*)launchurl8.get_cstr(), launchurl8.get_size(), \
+                               launchurl16, dLaunchURLSize + 1);
+
+            OSCL_wHeapStringA tmp16(launchurl16, dLaunchURLSize);
+
+            aPVXInfo.iLaunchURL = tmp16;
+            OSCL_ARRAY_DELETE(launchurl16);
+        }
+        FileLoc += dLaunchURLSize;
+    }
+
+    PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "CPVXParser::ParsePVX() End"));
+    return CPVXParser_Success;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
+// Converts little endian data to short int
+int16 CPVXParser::BufToShortInt(uint8* data)
+{
+
+    // Little endian
+    PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "CPVXParser::BufToShortInt() called"));
+    return (int16)(((((int16)data[1]) << 8)&0xFF00) | (((int16)data[0])&0x00FF));
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
+// Converts little endian data to long int
+int32 CPVXParser::BufToLongInt(uint8* data)
+{
+    // Little endian
+    PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "CPVXParser::BufToLongInt() called"));
+    return (int32)(((((int32)data[3]) << 24)&0xFF000000) | ((((int32)data[2]) << 16)&0x00FF0000) |
+                   ((((int32)data[1]) << 8)&0x0000FF00) | (((int32)data[0])&0x000000FF));
+}
+////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
diff --git a/fileformats/wav/parser/src/pvwavfileparser.cpp b/fileformats/wav/parser/src/pvwavfileparser.cpp
index 2e8cb29..20668ec 100644
--- a/fileformats/wav/parser/src/pvwavfileparser.cpp
+++ b/fileformats/wav/parser/src/pvwavfileparser.cpp
@@ -195,7 +195,7 @@
         return PVWAVPARSER_MISC_ERROR;
     }
 
-    filesize = ipWAVFile->Tell();
+    filesize = (TOsclFileOffsetInt32)ipWAVFile->Tell();
 
     if (filesize <= 0)
     {
@@ -450,7 +450,7 @@
     uint32 myBufSize = NumberOfSamples * BytesPerSample * NumChannels;
     if ((ipWAVFile->Tell() + myBufSize) > iEndOfDataSubChunkOffset)
     {//we don't have enough data to fulfill this request
-        int32 pos = ipWAVFile->Tell();
+        int32 pos = (TOsclFileOffsetInt32)ipWAVFile->Tell();
         if (((uint32)(BytesPerSample*NumChannels) + pos) > iEndOfDataSubChunkOffset)
         {
             return PVWAVPARSER_END_OF_FILE;
diff --git a/modules/cml2/rules.cml b/modules/cml2/rules.cml
index 7758c23..1dc226f 100644
--- a/modules/cml2/rules.cml
+++ b/modules/cml2/rules.cml
@@ -11,6 +11,10 @@
 derive pvmp4reginterface_m_mk from mp4local_support==y                 ? "/modules/linux_mp4/node_registry/build/make" : ""
 derive pvasflocalpbinterface_m_mk from asflocal_support==y                ? "/modules/linux_asf/asf_localpb/core/build/make" : ""
 derive pvasflocalpbreginterface_m_mk from asflocal_support==y          ? "/modules/linux_asf/asf_localpb/node_registry/build/make" : ""
+derive pvjanusplugininterface_m_mk from janus_support==y               ? "/modules/cpm_janus/build/make" : ""
+derive pvwmdrmdevinterface_m_mk from wmdrmdev_support==y               ? "/modules/wmdrmpd_dev/build/make" : ""
+derive pvwmdrmplatinterface_m_mk from wmdrmplat_support==y             ? "/modules/wmdrmpd_plat/build/make" : ""
+derive pvwmdrmsysclkinterface_m_mk from wmdrmsysclk_support==y         ? "/modules/wmdrmpd_sysclk/build/make" : ""
 
 derive pvrtspinterface_m_lib from rtsp_support==y                         ? "-lpvrtspinterface" : ""
 derive pvrtspreginterface_m_lib from rtsp_support==y                   ? "-lpvrtspreginterface" : ""
@@ -22,9 +26,12 @@
 derive pvmp4reginterface_m_lib from mp4local_support==y                ? "-lpvmp4reginterface" : ""
 derive pvasflocalpbinterface_m_lib from asflocal_support==y               ? "-lpvasflocalpbinterface" : ""
 derive pvasflocalpbreginterface_m_lib from asflocal_support==y         ? "-lpvasflocalpbreginterface" : ""
+derive pvjanusplugininterface_m_lib from janus_support==y              ? "-lpvjanusplugininterface" : ""
+derive pvwmdrmdevinterface_m_lib from wmdrmdev_support==y              ? "-lpvwmdrmdevinterface" : ""
+derive pvwmdrmplatinterface_m_lib from wmdrmplat_support==y            ? "-lpvwmdrmplatinterface" : ""
+derive pvwmdrmsysclkinterface_m_lib from wmdrmsysclk_support==y        ? "-lpvwmdrmsysclkinterface" : ""
 
+derive LIBDIR_tools_v2_shared from pvrtspinterface_m_mk.pvrtspreginterface_m_mk.pvasfstreaminginterface_m_mk.pvasfstreamingreginterface_m_mk.pvdownloadinterface_m_mk.pvdownloadreginterface_m_mk.pvmp4interface_m_mk.pvmp4reginterface_m_mk.pvasflocalpbinterface_m_mk.pvasflocalpbreginterface_m_mk.pvjanusplugininterface_m_mk.pvwmdrmdevinterface_m_mk.pvwmdrmplatinterface_m_mk.pvwmdrmsysclkinterface_m_mk
 
-derive LIBDIR_tools_v2_shared from pvrtspinterface_m_mk.pvrtspreginterface_m_mk.pvasfstreaminginterface_m_mk.pvasfstreamingreginterface_m_mk.pvdownloadinterface_m_mk.pvdownloadreginterface_m_mk.pvmp4interface_m_mk.pvmp4reginterface_m_mk.pvasflocalpbinterface_m_mk.pvasflocalpbreginterface_m_mk
-
-derive LIBS_tools_v2_shared from pvrtspinterface_m_lib.pvrtspreginterface_m_lib.pvasfstreaminginterface_m_lib.pvasfstreamingreginterface_m_lib.pvdownloadinterface_m_lib.pvdownloadreginterface_m_lib.pvmp4interface_m_lib.pvmp4reginterface_m_lib.pvasflocalpbinterface_m_lib.pvasflocalpbreginterface_m_lib
+derive LIBS_tools_v2_shared from pvrtspinterface_m_lib.pvrtspreginterface_m_lib.pvasfstreaminginterface_m_lib.pvasfstreamingreginterface_m_lib.pvdownloadinterface_m_lib.pvdownloadreginterface_m_lib.pvmp4interface_m_lib.pvmp4reginterface_m_lib.pvasflocalpbinterface_m_lib.pvasflocalpbreginterface_m_lib.pvjanusplugininterface_m_lib.pvwmdrmdevinterface_m_lib.pvwmdrmplatinterface_m_lib.pvwmdrmsysclkinterface_m_lib
 
diff --git a/modules/linux_download/core/src/pvmfdownloadnodes.cpp b/modules/linux_download/core/src/pvmfdownloadnodes.cpp
index e7d7cbc..d97b187 100644
--- a/modules/linux_download/core/src/pvmfdownloadnodes.cpp
+++ b/modules/linux_download/core/src/pvmfdownloadnodes.cpp
@@ -25,6 +25,8 @@
             public NodeSharedLibraryInterface
 {
     public:
+        DownloadNodesInterface() {};
+
         // From NodeSharedLibraryInterface
         OsclAny* QueryNodeInterface(const PVUuid& aNodeUuid, const OsclUuid& aInterfaceId)
         {
@@ -52,17 +54,6 @@
             }
             return NULL;
         };
-
-        static DownloadNodesInterface* Instance()
-        {
-            static DownloadNodesInterface nodeInterface;
-            return &nodeInterface;
-        };
-
-    private:
-
-        DownloadNodesInterface() {};
-
 };
 
 
@@ -70,11 +61,11 @@
 {
     OsclSharedLibraryInterface* PVGetInterface(void)
     {
-        return DownloadNodesInterface::Instance();
+        return OSCL_NEW(DownloadNodesInterface, ());
     }
-    void PVReleaseInterface(OsclSharedLibraryInterface*)
+    void PVReleaseInterface(OsclSharedLibraryInterface* aInstance)
     {
-        //nothing needed
+        OSCL_DELETE(aInstance);
     }
 }
 
diff --git a/modules/linux_download/node_registry/src/pvmfdownloadnodereg.cpp b/modules/linux_download/node_registry/src/pvmfdownloadnodereg.cpp
index d47dbfd..9b2c3b3 100644
--- a/modules/linux_download/node_registry/src/pvmfdownloadnodereg.cpp
+++ b/modules/linux_download/node_registry/src/pvmfdownloadnodereg.cpp
@@ -50,32 +50,26 @@
 
 typedef bool (* LPFN_NODE_RELEASE_FUNC)(PVMFNodeInterface *);
 
-// init static variables before use
-OsclSharedLibrary* DownloadNodesCoreLibraryLoader::iOsclSharedLibrary = NULL;
-
 // Factory functions
 PVMFNodeInterface* DownloadNodesCoreLibraryLoader::CreateDownloadManagerNode(int32 aPriority)
 {
-    if (NULL == iOsclSharedLibrary)
+    OsclSharedLibrary* downloadSharedLibrary = NULL;
+    OSCL_StackString<NODE_REGISTRY_LIB_NAME_MAX_LENGTH> libname(DOWNLOAD_LIB_NAME);
+
+    // Need to load the library for the node
+    downloadSharedLibrary = OSCL_NEW(OsclSharedLibrary, (libname));
+    OsclLibStatus result = downloadSharedLibrary->LoadLib();
+    if (OsclLibSuccess != result)
     {
-        OSCL_StackString<NODE_REGISTRY_LIB_NAME_MAX_LENGTH> libname(DOWNLOAD_LIB_NAME);
-
-        // Need to load the library for the node
-        iOsclSharedLibrary = OSCL_NEW(OsclSharedLibrary, (libname));
-
-        OsclLibStatus result = iOsclSharedLibrary->LoadLib();
-        if (OsclLibSuccess != result)
-        {
-            return NULL;
-        }
+        return NULL;
     }
 
-    iOsclSharedLibrary->AddRef();
+    downloadSharedLibrary->AddRef();
 
     // Query for create function
     OsclAny* interfacePtr = NULL;
 
-    iOsclSharedLibrary->QueryInterface(PV_NODE_INTERFACE, (OsclAny*&)interfacePtr);
+    downloadSharedLibrary->QueryInterface(PV_NODE_INTERFACE, (OsclAny*&)interfacePtr);
 
     NodeSharedLibraryInterface* nodeIntPtr = OSCL_DYNAMIC_CAST(NodeSharedLibraryInterface*, interfacePtr);
 
@@ -85,8 +79,23 @@
 
     if (NULL != nodeCreateFunc)
     {
+        PVMFNodeInterface* node = NULL;
         // call the real node factory function
-        return (*(nodeCreateFunc))(aPriority);
+        node = (*(nodeCreateFunc))(aPriority);
+        if (NULL == node)
+        {
+            downloadSharedLibrary->RemoveRef();
+
+            if (OsclLibSuccess == downloadSharedLibrary->Close())
+            {
+                // Close will unload the library if refcount is 0
+                OSCL_DELETE(downloadSharedLibrary);
+            }
+
+            return NULL;
+        }
+        node->SetSharedLibraryPtr(downloadSharedLibrary);
+        return node;
     }
     return NULL;
 }
@@ -95,13 +104,22 @@
 bool DownloadNodesCoreLibraryLoader::DeleteDownloadManagerNode(PVMFNodeInterface* aNode)
 {
     bool bStatus = false;
+    OsclSharedLibrary* downloadSharedLibrary = NULL;
 
-    if (NULL != iOsclSharedLibrary)
+    if (NULL == aNode)
+    {
+        return false;
+    }
+
+    // Retrieve shared library pointer
+    downloadSharedLibrary = aNode->GetSharedLibraryPtr();
+
+    if (NULL != downloadSharedLibrary)
     {
         // Query for release function
         OsclAny* interfacePtr = NULL;
 
-        iOsclSharedLibrary->QueryInterface(PV_NODE_INTERFACE, (OsclAny*&)interfacePtr);
+        downloadSharedLibrary->QueryInterface(PV_NODE_INTERFACE, (OsclAny*&)interfacePtr);
 
         NodeSharedLibraryInterface* nodeIntPtr = OSCL_DYNAMIC_CAST(NodeSharedLibraryInterface*, interfacePtr);
 
@@ -114,13 +132,12 @@
             bStatus = (*(nodeReleaseFunc))(aNode);
         }
 
-        iOsclSharedLibrary->RemoveRef();
+        downloadSharedLibrary->RemoveRef();
 
-        if (OsclLibSuccess == iOsclSharedLibrary->Close())
+        if (OsclLibSuccess == downloadSharedLibrary->Close())
         {
             // Close will unload the library if refcount is 0
-            OSCL_DELETE(iOsclSharedLibrary);
-            iOsclSharedLibrary = NULL;
+            OSCL_DELETE(downloadSharedLibrary);
         }
     }
 
@@ -134,6 +151,7 @@
             public RecognizerPopulatorInterface
 {
     public:
+        DownloadNodesRegistryInterface() {};
 
         // From NodeRegistryPopulatorInterface
         void RegisterAllNodes(PVPlayerNodeRegistryInterface* aRegistry, OsclAny*& aContext)
@@ -147,10 +165,11 @@
             //For PVMFDownloadManagerNode
             nodeinfo.iInputTypes.clear();
             nodeinfo.iInputTypes.push_back(PVMF_MIME_DATA_SOURCE_HTTP_URL);
+            nodeinfo.iInputTypes.push_back(PVMF_MIME_DATA_SOURCE_PVX_FILE);
+            nodeinfo.iInputTypes.push_back(PVMF_MIME_DATA_SOURCE_SHOUTCAST_URL);
             nodeinfo.iNodeUUID = KPVMFDownloadManagerNodeUuid;
             nodeinfo.iOutputType.clear();
             nodeinfo.iOutputType.push_back(PVMF_MIME_FORMAT_UNKNOWN);
-            nodeinfo.iSharedLibrary = OSCL_NEW(OsclSharedLibrary, (libname));
             nodeinfo.iNodeCreateFunc = (DownloadNodesCoreLibraryLoader::CreateDownloadManagerNode);
             nodeinfo.iNodeReleaseFunc = (DownloadNodesCoreLibraryLoader::DeleteDownloadManagerNode);
 
@@ -171,7 +190,6 @@
                 while (!nodeList->empty())
                 {
                     PVPlayerNodeInfo tmpnode = nodeList->front();
-                    OSCL_DELETE(tmpnode.iSharedLibrary);
                     aRegistry->UnregisterNode(tmpnode);
                     nodeList->erase(nodeList->begin());
                 }
@@ -204,17 +222,6 @@
             }
             return NULL;
         };
-
-        static DownloadNodesRegistryInterface* Instance()
-        {
-            static DownloadNodesRegistryInterface nodeInterface;
-            return &nodeInterface;
-        };
-
-    private:
-
-        DownloadNodesRegistryInterface() {};
-
 };
 
 
@@ -222,11 +229,11 @@
 {
     OsclSharedLibraryInterface* PVGetInterface(void)
     {
-        return DownloadNodesRegistryInterface::Instance();
+        return OSCL_NEW(DownloadNodesRegistryInterface, ());
     }
-    void PVReleaseInterface(OsclSharedLibraryInterface*)
+    void PVReleaseInterface(OsclSharedLibraryInterface* aInstance)
     {
-        //nothing needed
+        OSCL_DELETE(aInstance);
     }
 }
 
diff --git a/modules/linux_download/node_registry/src/pvmfdownloadnodereg.h b/modules/linux_download/node_registry/src/pvmfdownloadnodereg.h
index 50c9021..46aa207 100644
--- a/modules/linux_download/node_registry/src/pvmfdownloadnodereg.h
+++ b/modules/linux_download/node_registry/src/pvmfdownloadnodereg.h
@@ -31,8 +31,6 @@
     public:
         static PVMFNodeInterface* CreateDownloadManagerNode(int32 aPriority);
         static bool DeleteDownloadManagerNode(PVMFNodeInterface* aNode);
-    private:
-        static OsclSharedLibrary* iOsclSharedLibrary;
 };
 
 #endif // PVMFDOWNLOADNODEREG_H_INCLUDED
diff --git a/modules/linux_mp4/core/src/pvmfmp4nodes.cpp b/modules/linux_mp4/core/src/pvmfmp4nodes.cpp
index 3d29c89..bbf0751 100644
--- a/modules/linux_mp4/core/src/pvmfmp4nodes.cpp
+++ b/modules/linux_mp4/core/src/pvmfmp4nodes.cpp
@@ -25,6 +25,8 @@
             public NodeSharedLibraryInterface
 {
     public:
+        Mp4NodesInterface() {};
+
         // From NodeSharedLibraryInterface
         OsclAny* QueryNodeInterface(const PVUuid& aNodeUuid, const OsclUuid& aInterfaceId)
         {
@@ -53,17 +55,6 @@
 
             return NULL;
         };
-
-        static Mp4NodesInterface* Instance()
-        {
-            static Mp4NodesInterface nodeInterface;
-            return &nodeInterface;
-        };
-
-    private:
-
-        Mp4NodesInterface() {};
-
 };
 
 
@@ -71,11 +62,11 @@
 {
     OsclSharedLibraryInterface *PVGetInterface(void)
     {
-        return Mp4NodesInterface::Instance();
+        return OSCL_NEW(Mp4NodesInterface, ());
     }
-    void PVReleaseInterface(OsclSharedLibraryInterface*)
+    void PVReleaseInterface(OsclSharedLibraryInterface* aInstance)
     {
-        //nothing needed
+        OSCL_DELETE(aInstance);
     }
 }
 
diff --git a/modules/linux_mp4/node_registry/src/pvmfmp4nodereg.cpp b/modules/linux_mp4/node_registry/src/pvmfmp4nodereg.cpp
index 6237af0..2398196 100644
--- a/modules/linux_mp4/node_registry/src/pvmfmp4nodereg.cpp
+++ b/modules/linux_mp4/node_registry/src/pvmfmp4nodereg.cpp
@@ -54,32 +54,26 @@
 
 typedef bool (* LPFN_NODE_RELEASE_FUNC)(PVMFNodeInterface *);
 
-// init static variables before use
-OsclSharedLibrary* Mp4NodesCoreLibraryLoader::iOsclSharedLibrary = NULL;
-
 // Factory functions
 PVMFNodeInterface* Mp4NodesCoreLibraryLoader::CreateMp4ParserNode(int32 aPriority)
 {
-    if (NULL == iOsclSharedLibrary)
+    OsclSharedLibrary* mp4SharedLibrary = NULL;
+    OSCL_StackString<NODE_REGISTRY_LIB_NAME_MAX_LENGTH> libname(MP4_LIB_NAME);
+
+    // Need to load the library for the node
+    mp4SharedLibrary = OSCL_NEW(OsclSharedLibrary, (libname));
+    OsclLibStatus result = mp4SharedLibrary->LoadLib();
+    if (OsclLibSuccess != result)
     {
-        OSCL_StackString<NODE_REGISTRY_LIB_NAME_MAX_LENGTH> libname(MP4_LIB_NAME);
-
-        // Need to load the library for the node
-        iOsclSharedLibrary = OSCL_NEW(OsclSharedLibrary, (libname));
-
-        OsclLibStatus result = iOsclSharedLibrary->LoadLib();
-        if (OsclLibSuccess != result)
-        {
-            return NULL;
-        }
+        return NULL;
     }
 
-    iOsclSharedLibrary->AddRef();
+    mp4SharedLibrary->AddRef();
 
     // Query for create function
     OsclAny* interfacePtr = NULL;
 
-    iOsclSharedLibrary->QueryInterface(PV_NODE_INTERFACE, (OsclAny*&)interfacePtr);
+    mp4SharedLibrary->QueryInterface(PV_NODE_INTERFACE, (OsclAny*&)interfacePtr);
 
     NodeSharedLibraryInterface* nodeIntPtr = OSCL_DYNAMIC_CAST(NodeSharedLibraryInterface*, interfacePtr);
 
@@ -89,8 +83,23 @@
 
     if (NULL != nodeCreateFunc)
     {
+        PVMFNodeInterface* node = NULL;
         // call the real node factory function
-        return (*(nodeCreateFunc))(aPriority);
+        node = (*(nodeCreateFunc))(aPriority);
+        if (NULL == node)
+        {
+            mp4SharedLibrary->RemoveRef();
+
+            if (OsclLibSuccess == mp4SharedLibrary->Close())
+            {
+                // Close will unload the library if refcount is 0
+                OSCL_DELETE(mp4SharedLibrary);
+            }
+
+            return NULL;
+        }
+        node->SetSharedLibraryPtr(mp4SharedLibrary);
+        return node;
     }
     return NULL;
 }
@@ -99,13 +108,22 @@
 bool Mp4NodesCoreLibraryLoader::DeleteMp4ParserNode(PVMFNodeInterface* aNode)
 {
     bool bStatus = false;
+    OsclSharedLibrary* mp4SharedLibrary = NULL;
 
-    if (NULL != iOsclSharedLibrary)
+    if (NULL == aNode)
+    {
+        return false;
+    }
+
+    // Retrieve shared library pointer
+    mp4SharedLibrary = aNode->GetSharedLibraryPtr();
+
+    if (NULL != mp4SharedLibrary)
     {
         // Query for release function
         OsclAny* interfacePtr = NULL;
 
-        iOsclSharedLibrary->QueryInterface(PV_NODE_INTERFACE, (OsclAny*&)interfacePtr);
+        mp4SharedLibrary->QueryInterface(PV_NODE_INTERFACE, (OsclAny*&)interfacePtr);
 
         NodeSharedLibraryInterface* nodeIntPtr = OSCL_DYNAMIC_CAST(NodeSharedLibraryInterface*, interfacePtr);
 
@@ -118,13 +136,12 @@
             bStatus = (*(nodeReleaseFunc))(aNode);
         }
 
-        iOsclSharedLibrary->RemoveRef();
+        mp4SharedLibrary->RemoveRef();
 
-        if (OsclLibSuccess == iOsclSharedLibrary->Close())
+        if (OsclLibSuccess == mp4SharedLibrary->Close())
         {
             // Close will unload the library if refcount is 0
-            OSCL_DELETE(iOsclSharedLibrary);
-            iOsclSharedLibrary = NULL;
+            OSCL_DELETE(mp4SharedLibrary);
         }
     }
 
@@ -136,6 +153,7 @@
             public RecognizerPopulatorInterface
 {
     public:
+        Mp4NodesRegistryInterface() {};
 
         // From NodeRegistryPopulatorInterface
         void RegisterAllNodes(PVPlayerNodeRegistryInterface* aRegistry, OsclAny*& aContext)
@@ -152,7 +170,6 @@
             nodeinfo.iNodeUUID = KPVMFMP4FFParserNodeUuid;
             nodeinfo.iOutputType.clear();
             nodeinfo.iOutputType.push_back(PVMF_MIME_FORMAT_UNKNOWN);
-            nodeinfo.iSharedLibrary = OSCL_NEW(OsclSharedLibrary, (libname));
             nodeinfo.iNodeCreateFunc = (Mp4NodesCoreLibraryLoader::CreateMp4ParserNode);
             nodeinfo.iNodeReleaseFunc = (Mp4NodesCoreLibraryLoader::DeleteMp4ParserNode);
 
@@ -174,7 +191,6 @@
                 while (!nodeList->empty())
                 {
                     PVPlayerNodeInfo tmpnode = nodeList->front();
-                    OSCL_DELETE(tmpnode.iSharedLibrary);
                     aRegistry->UnregisterNode(tmpnode);
                     nodeList->erase(nodeList->begin());
                 }
@@ -236,17 +252,6 @@
             }
             return NULL;
         };
-
-        static Mp4NodesRegistryInterface* Instance()
-        {
-            static Mp4NodesRegistryInterface nodeInterface;
-            return &nodeInterface;
-        };
-
-    private:
-
-        Mp4NodesRegistryInterface() {};
-
 };
 
 
@@ -254,11 +259,11 @@
 {
     OsclSharedLibraryInterface *PVGetInterface(void)
     {
-        return Mp4NodesRegistryInterface::Instance();
+        return OSCL_NEW(Mp4NodesRegistryInterface, ());
     }
-    void PVReleaseInterface(OsclSharedLibraryInterface*)
+    void PVReleaseInterface(OsclSharedLibraryInterface* aInstance)
     {
-        //nothing needed
+        OSCL_DELETE(aInstance);
     }
 }
 
diff --git a/modules/linux_mp4/node_registry/src/pvmfmp4nodereg.h b/modules/linux_mp4/node_registry/src/pvmfmp4nodereg.h
index 9810c43..2db3d4b 100644
--- a/modules/linux_mp4/node_registry/src/pvmfmp4nodereg.h
+++ b/modules/linux_mp4/node_registry/src/pvmfmp4nodereg.h
@@ -31,8 +31,6 @@
     public:
         static PVMFNodeInterface* CreateMp4ParserNode(int32 aPriority);
         static bool DeleteMp4ParserNode(PVMFNodeInterface* aNode);
-    private:
-        static OsclSharedLibrary* iOsclSharedLibrary;
 };
 
 #endif // PVMFMP4NODEREG_H_INCLUDED
diff --git a/modules/linux_rtsp/core/src/pvmfrtspnodes.cpp b/modules/linux_rtsp/core/src/pvmfrtspnodes.cpp
index e0e3f51..47fe288 100644
--- a/modules/linux_rtsp/core/src/pvmfrtspnodes.cpp
+++ b/modules/linux_rtsp/core/src/pvmfrtspnodes.cpp
@@ -28,6 +28,8 @@
             public NodeSharedLibraryInterface
 {
     public:
+        StreamingNodesInterface() {};
+
         // From NodeSharedLibraryInterface
         OsclAny* QueryNodeInterface(const PVUuid& aNodeUuid, const OsclUuid& aInterfaceId)
         {
@@ -55,17 +57,6 @@
             }
             return NULL;
         };
-
-        static StreamingNodesInterface* Instance()
-        {
-            static StreamingNodesInterface nodeInterface;
-            return &nodeInterface;
-        };
-
-    private:
-
-        StreamingNodesInterface() {};
-
 };
 
 
@@ -73,11 +64,11 @@
 {
     OsclSharedLibraryInterface* PVGetInterface(void)
     {
-        return StreamingNodesInterface::Instance();
+        return OSCL_NEW(StreamingNodesInterface, ());
     }
-    void PVReleaseInterface(OsclSharedLibraryInterface*)
+    void PVReleaseInterface(OsclSharedLibraryInterface* aInstance)
     {
-        //nothing needed
+        OSCL_DELETE(aInstance);
     }
 }
 
diff --git a/modules/linux_rtsp/node_registry/src/pvmfrtspnodereg.cpp b/modules/linux_rtsp/node_registry/src/pvmfrtspnodereg.cpp
index d5257c3..5628551 100644
--- a/modules/linux_rtsp/node_registry/src/pvmfrtspnodereg.cpp
+++ b/modules/linux_rtsp/node_registry/src/pvmfrtspnodereg.cpp
@@ -51,32 +51,26 @@
 
 typedef bool (* LPFN_NODE_RELEASE_FUNC)(PVMFNodeInterface *);
 
-// init static variables before use
-OsclSharedLibrary* StreamingNodesCoreLibraryLoader::iOsclSharedLibrary = NULL;
-
 // Factory functions
 PVMFNodeInterface* StreamingNodesCoreLibraryLoader::CreateStreamingManagerNode(int32 aPriority)
 {
-    if (NULL == iOsclSharedLibrary)
+    OsclSharedLibrary* streamingSharedLibrary = NULL;
+    OSCL_StackString<NODE_REGISTRY_LIB_NAME_MAX_LENGTH> libname(RTSP_LIB_NAME);
+
+    // Need to load the library for the node
+    streamingSharedLibrary = OSCL_NEW(OsclSharedLibrary, (libname));
+    OsclLibStatus result = streamingSharedLibrary->LoadLib();
+    if (OsclLibSuccess != result)
     {
-        OSCL_StackString<NODE_REGISTRY_LIB_NAME_MAX_LENGTH> libname(RTSP_LIB_NAME);
-
-        // Need to load the library for the node
-        iOsclSharedLibrary = OSCL_NEW(OsclSharedLibrary, (libname));
-
-        OsclLibStatus result = iOsclSharedLibrary->LoadLib();
-        if (OsclLibSuccess != result)
-        {
-            return NULL;
-        }
+        return NULL;
     }
 
-    iOsclSharedLibrary->AddRef();
+    streamingSharedLibrary->AddRef();
 
     // Query for create function
     OsclAny* interfacePtr = NULL;
 
-    iOsclSharedLibrary->QueryInterface(PV_NODE_INTERFACE, (OsclAny*&)interfacePtr);
+    streamingSharedLibrary->QueryInterface(PV_NODE_INTERFACE, (OsclAny*&)interfacePtr);
 
     NodeSharedLibraryInterface* nodeIntPtr = OSCL_DYNAMIC_CAST(NodeSharedLibraryInterface*, interfacePtr);
 
@@ -86,8 +80,23 @@
 
     if (NULL != nodeCreateFunc)
     {
+        PVMFNodeInterface* node = NULL;
         // call the real node factory function
-        return (*(nodeCreateFunc))(aPriority);
+        node = (*(nodeCreateFunc))(aPriority);
+        if (NULL == node)
+        {
+            streamingSharedLibrary->RemoveRef();
+
+            if (OsclLibSuccess == streamingSharedLibrary->Close())
+            {
+                // Close will unload the library if refcount is 0
+                OSCL_DELETE(streamingSharedLibrary);
+            }
+
+            return NULL;
+        }
+        node->SetSharedLibraryPtr(streamingSharedLibrary);
+        return node;
     }
     return NULL;
 }
@@ -95,13 +104,22 @@
 bool StreamingNodesCoreLibraryLoader::DeleteStreamingManagerNode(PVMFNodeInterface* aNode)
 {
     bool bStatus = false;
+    OsclSharedLibrary* streamingSharedLibrary = NULL;
 
-    if (NULL != iOsclSharedLibrary)
+    if (NULL == aNode)
+    {
+        return false;
+    }
+
+    // Retrieve shared library pointer
+    streamingSharedLibrary = aNode->GetSharedLibraryPtr();
+
+    if (NULL != streamingSharedLibrary)
     {
         // Query fro release function
         OsclAny* interfacePtr = NULL;
 
-        iOsclSharedLibrary->QueryInterface(PV_NODE_INTERFACE, (OsclAny*&)interfacePtr);
+        streamingSharedLibrary->QueryInterface(PV_NODE_INTERFACE, (OsclAny*&)interfacePtr);
 
         NodeSharedLibraryInterface* nodeIntPtr = OSCL_DYNAMIC_CAST(NodeSharedLibraryInterface*, interfacePtr);
 
@@ -114,13 +132,12 @@
             bStatus = (*(nodeReleaseFunc))(aNode);
         }
 
-        iOsclSharedLibrary->RemoveRef();
+        streamingSharedLibrary->RemoveRef();
 
-        if (OsclLibSuccess == iOsclSharedLibrary->Close())
+        if (OsclLibSuccess == streamingSharedLibrary->Close())
         {
             // Close will unload the library if refcount is 0
-            OSCL_DELETE(iOsclSharedLibrary);
-            iOsclSharedLibrary = NULL;
+            OSCL_DELETE(streamingSharedLibrary);
         }
     }
 
@@ -134,6 +151,7 @@
             public RecognizerPopulatorInterface
 {
     public:
+        StreamingNodesRegistryInterface() {};
 
         // From NodeRegistryPopulatorInterface
         void RegisterAllNodes(PVPlayerNodeRegistryInterface* aRegistry, OsclAny*& aContext)
@@ -151,7 +169,6 @@
             nodeinfo.iNodeUUID = KPVMFRTSPStreamingModuleUuid;
             nodeinfo.iOutputType.clear();
             nodeinfo.iOutputType.push_back(PVMF_MIME_FORMAT_UNKNOWN);
-            nodeinfo.iSharedLibrary = OSCL_NEW(OsclSharedLibrary, (libname));
             nodeinfo.iNodeCreateFunc = (StreamingNodesCoreLibraryLoader::CreateStreamingManagerNode);
             nodeinfo.iNodeReleaseFunc = (StreamingNodesCoreLibraryLoader::DeleteStreamingManagerNode);
 
@@ -172,7 +189,6 @@
                 while (!nodeList->empty())
                 {
                     PVPlayerNodeInfo tmpnode = nodeList->front();
-                    OSCL_DELETE(tmpnode.iSharedLibrary);
                     aRegistry->UnregisterNode(tmpnode);
                     nodeList->erase(nodeList->begin());
                 }
@@ -205,16 +221,6 @@
             }
             return NULL;
         };
-
-        static StreamingNodesRegistryInterface* Instance()
-        {
-            static StreamingNodesRegistryInterface nodeInterface;
-            return &nodeInterface;
-        };
-
-    private:
-
-        StreamingNodesRegistryInterface() {};
 };
 
 
@@ -222,11 +228,11 @@
 {
     OsclSharedLibraryInterface* PVGetInterface(void)
     {
-        return StreamingNodesRegistryInterface::Instance();
+        return OSCL_NEW(StreamingNodesRegistryInterface, ());
     }
-    void PVReleaseInterface(OsclSharedLibraryInterface*)
+    void PVReleaseInterface(OsclSharedLibraryInterface* aInstance)
     {
-        //nothing needed
+        OSCL_DELETE(aInstance);
     }
 }
 
diff --git a/modules/linux_rtsp/node_registry/src/pvmfrtspnodereg.h b/modules/linux_rtsp/node_registry/src/pvmfrtspnodereg.h
index 36e6422..b06b3bc 100644
--- a/modules/linux_rtsp/node_registry/src/pvmfrtspnodereg.h
+++ b/modules/linux_rtsp/node_registry/src/pvmfrtspnodereg.h
@@ -32,8 +32,6 @@
     public:
         static PVMFNodeInterface* CreateStreamingManagerNode(int32 aPriority);
         static bool DeleteStreamingManagerNode(PVMFNodeInterface* aNode);
-    private:
-        static OsclSharedLibrary* iOsclSharedLibrary;
 };
 
 #endif // PVMFRTSPNODEREG_H_INCLUDED
diff --git a/nodes/common/Android.mk b/nodes/common/Android.mk
index 4ab5656..36ccfd8 100644
--- a/nodes/common/Android.mk
+++ b/nodes/common/Android.mk
@@ -43,6 +43,7 @@
  	include/pvmf_source_context_data.h \
  	include/pv_player_node_registry_interface.h \
  	include/pvmf_streaming_data_source.h \
+ 	include/pvmf_audio_encnode_extension.h \
  	include/pvmfamrencnode_extension.h \
  	include/pvmp4h263encextension.h \
  	include/pvmf_format_progdownload_support_extension.h
diff --git a/nodes/common/build/make/local.mk b/nodes/common/build/make/local.mk
index 6d4e866..b387b20 100644
--- a/nodes/common/build/make/local.mk
+++ b/nodes/common/build/make/local.mk
@@ -33,6 +33,7 @@
 	pvmf_source_context_data.h \
 	pv_player_node_registry_interface.h \
 	pvmf_streaming_data_source.h \
+        pvmf_audio_encnode_extension.h \
 	pvmfamrencnode_extension.h \
 	pvmp4h263encextension.h \
         pvmf_format_progdownload_support_extension.h
diff --git a/nodes/common/include/pv_player_node_registry_interface.h b/nodes/common/include/pv_player_node_registry_interface.h
index 212ddd5..1efa265 100644
--- a/nodes/common/include/pv_player_node_registry_interface.h
+++ b/nodes/common/include/pv_player_node_registry_interface.h
@@ -66,7 +66,6 @@
         {
             iNodeCreateFunc = NULL;
             iNodeReleaseFunc = NULL;
-            iSharedLibrary = NULL;
         }
 
         /**
@@ -79,7 +78,6 @@
             iNodeReleaseFunc = aInfo.iNodeReleaseFunc;
             iInputTypes = aInfo.iInputTypes;
             iOutputType = aInfo.iOutputType;
-            iSharedLibrary = aInfo.iSharedLibrary;
         }
 
         /**
@@ -94,7 +92,6 @@
         bool (*iNodeReleaseFunc)(PVMFNodeInterface *);
         Oscl_Vector<PVMFFormatType, OsclMemAllocator> iInputTypes;
         Oscl_Vector<PVMFFormatType, OsclMemAllocator> iOutputType;
-        OsclSharedLibrary* iSharedLibrary;
 };
 
 
diff --git a/nodes/common/include/pvmf_audio_encnode_extension.h b/nodes/common/include/pvmf_audio_encnode_extension.h
new file mode 100644
index 0000000..8484414
--- /dev/null
+++ b/nodes/common/include/pvmf_audio_encnode_extension.h
@@ -0,0 +1,121 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+/**
+ * @file pvmf_audio_encnode_extension.h
+ */
+
+#ifndef PVMF_AUDIO_ENCNODE_EXTENSION_H_INCLUDED
+#define PVMF_AUDIO_ENCNODE_EXTENSION_H_INCLUDED
+
+#ifndef OSCL_BASE_H_INCLUDED
+#include "oscl_base.h"
+#endif
+#ifndef OSCL_STRING_H_INCLUDED
+#include "oscl_string.h"
+#endif
+#ifndef PV_UUID_H_INCLUDED
+#include "pv_uuid.h"
+#endif
+#ifndef PV_INTERFACE_H_INCLUDED
+#include "pv_interface.h"
+#endif
+
+
+// The AMR enc node interface was modified to audio enc node interface
+//#define PVAMREncExtensionUUID PVUuid(0xd282cc91,0x54a6,0x4f36,0xbc,0x5b,0x2d,0xab,0xb4,0x40,0x69,0x26)
+
+#define PVAudioEncExtensionUUID PVUuid(0xd282cc91,0x54a6,0x4f36,0xbc,0x5b,0x2d,0xab,0xb4,0x40,0x69,0x27)
+
+typedef enum
+{
+    GSM_AMR_4_75 = 0,
+    GSM_AMR_5_15,
+    GSM_AMR_5_90,
+    GSM_AMR_6_70,
+    GSM_AMR_7_40,
+    GSM_AMR_7_95,
+    GSM_AMR_10_2,
+    GSM_AMR_12_2,
+    GSM_AMR_DTX,
+    GSM_AMR_N_MODES      /* number of (SPC) modes */
+} PVMF_GSMAMR_Rate;
+
+
+////////////////////////////////////////////////////////////////////////////
+class PVAudioEncExtensionInterface : public PVInterface
+{
+    public:
+        /** Increment reference counter for this interface. */
+        virtual void addRef() = 0;
+
+        /** Decrement reference counter for this interface. */
+        virtual void removeRef() = 0;
+
+        /**
+         * Query for a pointer to an instance of the interface specified by the UUID.
+         *
+         * @param uuid UUID of the interface to be queried.
+         * @param iface Output parameter where a pointer to an instance of the requested
+         * interface is stored if the interface is supported.
+         * @return true if successful, else false.
+         */
+        virtual bool queryInterface(const PVUuid& uuid, PVInterface*& iface) = 0;
+
+        /**
+         * Sets the bitrate of encoded output.
+         * @param aBitRate Bitrate in bits per second.
+         * @return PVMFSuccess if successful, else see PVMF return code.
+         */
+        virtual PVMFStatus SetOutputBitRate(uint32 aBitRate) = 0;
+
+        /**
+         * Sets the number of channels of encoded output (default to source num channel).
+         * @param aNumChannel Number of channels.
+         * @return PVMFSuccess if successful, else see PVMF return code.
+         */
+        virtual PVMFStatus SetOutputNumChannel(uint32 aNumChannel) = 0;
+
+        /**
+         * Sets the sampling of encoded output (default equal source sampling rate).
+         * @param aSamplingRate Sampling rate in Hz.
+         * @return PVMFSuccess if successful, else see PVMF return code.
+         */
+        virtual PVMFStatus SetOutputSamplingRate(uint32 aSamplingRate) = 0;
+
+        //// From AMREncExtensionInterface
+        /**
+         * Sets the bitrate of encoded output.
+         * @param aBitRate Bitrate in bits per second.
+         * @return PVMFSuccess if successful, else see PVMF return code.
+         */
+        virtual PVMFStatus SetOutputBitRate(PVMF_GSMAMR_Rate aBitRate) = 0;
+
+        /**
+         * Sets the maximum number of output frames per media buffer
+         * @param aNumOutputFrames, maximum number of output frames
+         * @return PVMFSuccess if successful, else see PVMF return code.
+         */
+        virtual PVMFStatus SetMaxNumOutputFramesPerBuffer(uint32 aNumOutputFrames) = 0;
+};
+
+#endif // PVMF_AUDIO_ENCNODE_EXTENSION_H_INCLUDED
+
+
+
+
+
diff --git a/nodes/common/include/pvmf_download_data_source.h b/nodes/common/include/pvmf_download_data_source.h
index 70fcd1f..f0ab0fb 100644
--- a/nodes/common/include/pvmf_download_data_source.h
+++ b/nodes/common/include/pvmf_download_data_source.h
@@ -55,19 +55,13 @@
         } TPVPlaybackControl;
         TPVPlaybackControl	iPlaybackControl;
 
-        //Optional CPM usage flag.
-        //If true, CPM will be used during playback.
-        //If false, CPM will not be used during playback.
-        bool iUseCPMPluginRegistryForPlayback;
-
         PVMFDownloadDataSourceHTTP(bool aIsNewSession
                                    , OSCL_wString &aConfigFile
                                    , OSCL_wString &aDownloadFileName
                                    , uint32 aMaxSize
                                    , OSCL_String &aProxyName
                                    , int32 aProxyPort
-                                   , TPVPlaybackControl aPlaybackControl
-                                   , bool aUseCPMPluginRegistryForPlayback = false)
+                                   , TPVPlaybackControl aPlaybackControl)
                 : bIsNewSession(aIsNewSession)
                 , iConfigFileName(aConfigFile)
                 , iDownloadFileName(aDownloadFileName)
@@ -75,8 +69,8 @@
                 , iProxyName(aProxyName)
                 , iProxyPort(aProxyPort)
                 , iPlaybackControl(aPlaybackControl)
-                , iUseCPMPluginRegistryForPlayback(aUseCPMPluginRegistryForPlayback)
-        {}
+        {
+        }
 
         /* From PVInterface */
         void addRef()
diff --git a/nodes/common/include/pvmf_format_progdownload_support_extension.h b/nodes/common/include/pvmf_format_progdownload_support_extension.h
index cbdb12f..48c8b4c 100644
--- a/nodes/common/include/pvmf_format_progdownload_support_extension.h
+++ b/nodes/common/include/pvmf_format_progdownload_support_extension.h
@@ -36,6 +36,9 @@
 #ifndef PV_INTERFACE_H
 #include "pv_interface.h"
 #endif
+#ifndef PVMI_KVP_H_INCLUDED
+#include "pvmi_kvp.h"
+#endif
 
 #define PVMF_FF_PROGDOWNLOAD_SUPPORT_INTERFACE_MIMETYPE "x-pvmf/pvmf/ff/progdownload-support"
 #define PVMF_FF_PROGDOWNLOAD_SUPPORT_INTERFACE_UUID PVUuid(0x00f80b00, 0x4bd4, 0x4656, 0x8e, 0x0f, 0x63, 0xe0, 0x3d, 0x7a, 0x5f, 0x39)
@@ -97,6 +100,19 @@
          */
         virtual void notifyDownloadComplete() = 0;
 
+        /**
+         * Set the protocol information that is defined as kvp
+         *
+         * @param aInfoKvpVec, a kvp vector of all protocol information
+         *
+         * @return true means success, and false means any exceptional case, such as aInfoKvpVec has nothing
+         */
+        virtual bool setProtocolInfo(Oscl_Vector<PvmiKvp*, OsclMemAllocator>& aInfoKvpVec)
+        {
+            OSCL_UNUSED_ARG(aInfoKvpVec);
+            return true;
+        }
+
 };
 
 #endif //PVMF_FF_PROGDOWNLOAD_SUPPORT_EXTENSION_H_INCLUDED
diff --git a/nodes/common/include/pvmf_local_data_source.h b/nodes/common/include/pvmf_local_data_source.h
index 2700639..af744c1 100644
--- a/nodes/common/include/pvmf_local_data_source.h
+++ b/nodes/common/include/pvmf_local_data_source.h
@@ -43,18 +43,16 @@
 {
     public:
         //default constructor
-        PVMFLocalDataSource(bool aUseCPMPluginRegistry = false
-                            , OsclFileHandle*aFileHandle = NULL)
-                : iUseCPMPluginRegistry(aUseCPMPluginRegistry)
-                , iFileHandle(aFileHandle)
+        PVMFLocalDataSource(OsclFileHandle*aFileHandle = NULL)
+                : iFileHandle(aFileHandle)
                 , iPreviewMode(false)
                 , iIntent(BITMASK_PVMF_SOURCE_INTENT_PLAY)
                 , iContentAccessFactory(NULL)
-        {}
+        {
+        }
 
         //copy constructor
         PVMFLocalDataSource(const PVMFLocalDataSource& source) : PVInterface(source)
-                , iUseCPMPluginRegistry(source.iUseCPMPluginRegistry)
                 , iFileHandle(source.iFileHandle)
                 , iPreviewMode(source.iPreviewMode)
                 , iIntent(source.iIntent)
@@ -85,11 +83,6 @@
         }
         int32 iRefCounter;
 
-        bool iUseCPMPluginRegistry;
-        //Optional CPM usage flag.
-        //When true, CPM will be used as needed.
-        //When false, CPM will never be used.
-
         OsclFileHandle* iFileHandle;
         //Optional file handle.
         //When not NULL, the file will be accessed using this handle.
diff --git a/nodes/common/include/pvmf_source_context_data.h b/nodes/common/include/pvmf_source_context_data.h
index 0732779..56a46a9 100644
--- a/nodes/common/include/pvmf_source_context_data.h
+++ b/nodes/common/include/pvmf_source_context_data.h
@@ -42,7 +42,6 @@
 #define PVMF_SOURCE_CONTEXT_DATA_DOWNLOAD_PVX_UUID PVUuid(0x3dbb1b51,0x49ea,0x4933,0xa6,0xec,0x26,0x97,0x43,0x12,0xb6,0xd6)
 #define PVMF_SOURCE_CONTEXT_DATA_PVR_UUID PVUuid(0x442059a2,0x76b6,0x11dc,0x83,0x14,0x08,0x00,0x20,0x0c,0x9a,0x66)
 #define PVMF_SOURCE_CONTEXT_DATA_PACKETSOURCE_UUID PVUuid(0x7f064f8c,0xa90d,0x11dc,0x83,0x14,0x08,0x00,0x20,0x0c,0x9a,0x66)
-#define PVMF_SOURCE_CONTEXT_DATA_PVRLOCALPLAYBACK_UUID PVUuid(0x3f9c615e,0x31e2,0x474c,0x9a,0xdd,0x29,0xc6,0x1d,0xd0,0x7e,0xad)
 //3f9c615e-31e2-474c-9add-29c61dd07ead
 
 class OsclFileHandle;
@@ -59,7 +58,6 @@
         PVMFSourceContextDataCommon()
         {
             iRefCounter = 0;
-            iUseCPMPluginRegistry = false;
             iFileHandle = NULL;
             iPreviewMode = false;
             iIntent = BITMASK_PVMF_SOURCE_INTENT_PLAY;
@@ -106,11 +104,6 @@
         }
         int32 iRefCounter;
 
-        //Optional CPM usage flag.
-        //When true, CPM will be used as needed.
-        //When false, CPM will never be used.
-        bool iUseCPMPluginRegistry;
-
         //Optional file handle.
         OsclFileHandle* iFileHandle;
 
@@ -137,7 +130,6 @@
     private:
         void MyCopy(const PVMFSourceContextDataCommon& aSrc)
         {
-            iUseCPMPluginRegistry	= aSrc.iUseCPMPluginRegistry;
             iFileHandle				= aSrc.iFileHandle;
             iPreviewMode			= aSrc.iPreviewMode;
             iIntent					= aSrc.iIntent;
@@ -558,80 +550,6 @@
         PVMFPacketSource* iPacketSourcePlugin;
 };
 
-// Source context data for local playback of pvr files.
-// This should not be the final approach for pvr local playback. Ideally, the
-// engine should be modified to associate pvr extensions with the SM
-// source node. In that way, pvr files would be treated just like any other
-// local playback format.
-class PVMFSourceContextDataPVRLocalPlay : public PVInterface
-{
-    public:
-        PVMFSourceContextDataPVRLocalPlay()
-        {
-            iRefCounter = 0;
-        }
-
-        PVMFSourceContextDataPVRLocalPlay(const PVMFSourceContextDataPVRLocalPlay& aSrc) : PVInterface(aSrc)
-        {
-            iRefCounter = 0;
-            MyCopy(aSrc);
-        };
-
-        PVMFSourceContextDataPVRLocalPlay& operator=(const PVMFSourceContextDataPVRLocalPlay& aSrc)
-        {
-            if (&aSrc != this)
-            {
-                MyCopy(aSrc);
-            }
-            return *this;
-        };
-
-        void SetFileName(OSCL_wString& aFileName)
-        {
-            iPVRFileName = aFileName;
-        }
-
-        OSCL_wString& GetFileName()
-        {
-            return iPVRFileName;
-        }
-
-        /* From PVInterface */
-        void addRef()
-        {
-            iRefCounter++;
-        }
-        void removeRef()
-        {
-            iRefCounter--;
-        }
-
-        bool queryInterface(const PVUuid& uuid, PVInterface*& iface)
-        {
-            if (uuid == PVUuid(PVMF_SOURCE_CONTEXT_DATA_PVRLOCALPLAYBACK_UUID))
-            {
-                iface = this;
-                return true;
-            }
-            else
-            {
-                iface = NULL;
-                return false;
-            }
-        }
-
-    private:
-        void MyCopy(const PVMFSourceContextDataPVRLocalPlay& aSrc)
-        {
-            iPVRFileName = aSrc.iPVRFileName;
-        };
-
-        // reference counter
-        int32 iRefCounter;
-        // Full file name
-        OSCL_wHeapString<OsclMemAllocator> iPVRFileName;
-};
-
 class PVMFSourceContextData : public PVInterface
 {
     public:
@@ -644,7 +562,6 @@
             iDownloadPVXDataContextValid = false;
             iPVRDataContextValid = false;
             iPacketSourceDataContextValid = false;
-            iPVRLocalPlayDataContextValid = false;
         };
 
         PVMFSourceContextData(const PVMFSourceContextData& aSrc) : PVInterface(aSrc)
@@ -726,15 +643,6 @@
                     return true;
                 }
             }
-            else if (uuid == PVUuid(PVMF_SOURCE_CONTEXT_DATA_PVRLOCALPLAYBACK_UUID))
-            {
-                if (iPVRLocalPlayDataContextValid == true)
-                {
-                    iface = &iPVMFSourceContextDataPVRLocalPlay;
-                    return true;
-                }
-            }
-
 
             iface = NULL;
             return false;
@@ -764,11 +672,6 @@
         {
             iPacketSourceDataContextValid = true;
         }
-        void EnablePVRLocalPlaySourceContext()
-        {
-            iPVRLocalPlayDataContextValid = true;
-        }
-
         void DisableCommonSourceContext()
         {
             iCommonDataContextValid = false;
@@ -793,11 +696,6 @@
         {
             iPacketSourceDataContextValid = false;
         }
-        void DisablePVRLocalPlaySourceContext()
-        {
-            iPVRLocalPlayDataContextValid = false;
-        }
-
         PVMFSourceContextDataCommon* CommonData()
         {
             return iCommonDataContextValid ? &iPVMFSourceContextDataCommon : NULL;
@@ -822,10 +720,6 @@
         {
             return iPacketSourceDataContextValid ? &iPVMFSourceContextDataPacketSource : NULL;
         }
-        PVMFSourceContextDataPVRLocalPlay* PVRLocalPlayData()
-        {
-            return iPVRLocalPlayDataContextValid ? &iPVMFSourceContextDataPVRLocalPlay : NULL;
-        }
 
     private:
         int32 iRefCounter;
@@ -835,7 +729,6 @@
         bool iDownloadPVXDataContextValid;
         bool iPVRDataContextValid;
         bool iPacketSourceDataContextValid;
-        bool iPVRLocalPlayDataContextValid;
 
         PVMFSourceContextDataCommon iPVMFSourceContextDataCommon;
         PVMFSourceContextDataStreaming iPVMFSourceContextDataStreaming;
@@ -843,7 +736,6 @@
         PVMFSourceContextDataDownloadPVX iPVMFSourceContextDataDownloadPVX;
         PVMFSourceContextDataPVR iPVMFSourceContextDataPVR;
         PVMFSourceContextDataPacketSource iPVMFSourceContextDataPacketSource;
-        PVMFSourceContextDataPVRLocalPlay iPVMFSourceContextDataPVRLocalPlay;
 
         void MyCopy(const PVMFSourceContextData& aSrc)
         {
@@ -853,7 +745,6 @@
             iDownloadPVXDataContextValid = aSrc.iDownloadPVXDataContextValid;
             iPVRDataContextValid = aSrc.iPVRDataContextValid;
             iPacketSourceDataContextValid = aSrc.iPacketSourceDataContextValid;
-            iPVRLocalPlayDataContextValid = aSrc.iPVRLocalPlayDataContextValid;
 
             iPVMFSourceContextDataCommon = aSrc.iPVMFSourceContextDataCommon;
             iPVMFSourceContextDataStreaming = aSrc.iPVMFSourceContextDataStreaming;
@@ -861,7 +752,6 @@
             iPVMFSourceContextDataDownloadPVX = aSrc.iPVMFSourceContextDataDownloadPVX;
             iPVMFSourceContextDataPVR = aSrc.iPVMFSourceContextDataPVR;
             iPVMFSourceContextDataPacketSource = aSrc.iPVMFSourceContextDataPacketSource;
-            iPVMFSourceContextDataPVRLocalPlay = aSrc.iPVMFSourceContextDataPVRLocalPlay;
         };
 };
 
diff --git a/nodes/common/include/pvmf_streaming_data_source.h b/nodes/common/include/pvmf_streaming_data_source.h
index 1f5154d..72c7711 100644
--- a/nodes/common/include/pvmf_streaming_data_source.h
+++ b/nodes/common/include/pvmf_streaming_data_source.h
@@ -49,17 +49,15 @@
 {
     public:
         //default constructor
-        PVMFStreamingDataSource(bool aUseCPMPluginRegistry = false
-                                , OsclFileHandle*aFileHandle = NULL)
-                : iUseCPMPluginRegistry(aUseCPMPluginRegistry)
-                , iFileHandle(aFileHandle)
+        PVMFStreamingDataSource(OsclFileHandle*aFileHandle = NULL)
+                : iFileHandle(aFileHandle)
                 , iPreviewMode(false)
                 , iIntent(BITMASK_PVMF_SOURCE_INTENT_PLAY)
-        {}
+        {
+        }
 
         //copy constructor
         PVMFStreamingDataSource(const PVMFStreamingDataSource& source) : PVInterface(source)
-                , iUseCPMPluginRegistry(source.iUseCPMPluginRegistry)
                 , iFileHandle(source.iFileHandle)
                 , iStreamStatsLoggingURL(source.iStreamStatsLoggingURL)
                 , iPreviewMode(source.iPreviewMode)
@@ -90,11 +88,6 @@
         }
         int32 iRefCounter;
 
-        bool iUseCPMPluginRegistry;
-        //Optional CPM usage flag.
-        //When true, CPM will be used as needed.
-        //When false, CPM will never be used.
-
         OsclFileHandle* iFileHandle;
         //Optional file handle.
         //When not NULL, the sdp file will be accessed using this handle.
diff --git a/nodes/pvaacffparsernode/src/pvmf_aacffparser_node.cpp b/nodes/pvaacffparsernode/src/pvmf_aacffparser_node.cpp
index c2552de..ebaa9a2 100644
--- a/nodes/pvaacffparsernode/src/pvmf_aacffparser_node.cpp
+++ b/nodes/pvaacffparsernode/src/pvmf_aacffparser_node.cpp
@@ -2209,7 +2209,6 @@
                     OSCL_STATIC_CAST(PVMFLocalDataSource*, localDataSrc);
 
                 iPreviewMode = context->iPreviewMode;
-                iUseCPMPluginRegistry = context->iUseCPMPluginRegistry;
                 if (context->iFileHandle)
                 {
 
@@ -2238,7 +2237,6 @@
                         OSCL_STATIC_CAST(PVMFSourceContextDataCommon*, commonDataContext);
 
                     iPreviewMode = context->iPreviewMode;
-                    iUseCPMPluginRegistry = context->iUseCPMPluginRegistry;
                     if (context->iFileHandle)
                     {
 
@@ -2255,10 +2253,9 @@
             }
         }
         /*
-        	 * If a CPM flag is provided in the source data, then
-        	 * create a CPM object here...
-        	 */
-        if (iUseCPMPluginRegistry)
+        * create a CPM object here...
+        */
+        iUseCPMPluginRegistry = true;
         {
             //cleanup any prior instance
             if (iCPM)
@@ -2268,7 +2265,15 @@
                 iCPM = NULL;
             }
             iCPM = PVMFCPMFactory::CreateContentPolicyManager(*this);
-            iCPM->ThreadLogon();
+            //thread logon may leave if there are no plugins
+            int32 err;
+            OSCL_TRY(err, iCPM->ThreadLogon(););
+            OSCL_FIRST_CATCH_ANY(err,
+                                 iCPM->ThreadLogoff();
+                                 PVMFCPMFactory::DestroyContentPolicyManager(iCPM);
+                                 iCPM = NULL;
+                                 iUseCPMPluginRegistry = false;
+                                );
         }
         return PVMFSuccess;
     }
@@ -2306,8 +2311,7 @@
     tmpTrackInfo.setTrackID(0);
 
     TPVAacFileInfo aacinfo;
-    iAACParser->RetrieveFileInfo(aacinfo);
-    if (aacinfo.iFormat == EAACUnrecognized) return PVMFErrNotSupported;
+    if (!iAACParser->RetrieveFileInfo(aacinfo)) return PVMFErrNotSupported;
 
     // bitrate
     tmpTrackInfo.setTrackBitRate(aacinfo.iBitrate);
diff --git a/nodes/pvamrffparsernode/src/pvmf_amrffparser_node.cpp b/nodes/pvamrffparsernode/src/pvmf_amrffparser_node.cpp
index d705d61..6b5e10b 100644
--- a/nodes/pvamrffparsernode/src/pvmf_amrffparser_node.cpp
+++ b/nodes/pvamrffparsernode/src/pvmf_amrffparser_node.cpp
@@ -2212,7 +2212,6 @@
                     OSCL_STATIC_CAST(PVMFLocalDataSource*, localDataSrc);
 
                 iPreviewMode = context->iPreviewMode;
-                iUseCPMPluginRegistry = context->iUseCPMPluginRegistry;
                 if (context->iFileHandle)
                 {
 
@@ -2241,7 +2240,6 @@
                         OSCL_STATIC_CAST(PVMFSourceContextDataCommon*, commonDataContext);
 
                     iPreviewMode = context->iPreviewMode;
-                    iUseCPMPluginRegistry = context->iUseCPMPluginRegistry;
                     if (context->iFileHandle)
                     {
 
@@ -2258,10 +2256,9 @@
             }
         }
         /*
-         * If a CPM flag is provided in the source data, then
          * create a CPM object here...
          */
-        if (iUseCPMPluginRegistry)
+        iUseCPMPluginRegistry = true;
         {
             //cleanup any prior instance
             if (iCPM)
@@ -2271,7 +2268,15 @@
                 iCPM = NULL;
             }
             iCPM = PVMFCPMFactory::CreateContentPolicyManager(*this);
-            iCPM->ThreadLogon();
+            //thread logon may leave if there are no plugins
+            int32 err;
+            OSCL_TRY(err, iCPM->ThreadLogon(););
+            OSCL_FIRST_CATCH_ANY(err,
+                                 iCPM->ThreadLogoff();
+                                 PVMFCPMFactory::DestroyContentPolicyManager(iCPM);
+                                 iCPM = NULL;
+                                 iUseCPMPluginRegistry = false;
+                                );
         }
         return PVMFSuccess;
     }
@@ -2306,7 +2311,7 @@
     tmpTrackInfo.setPortTag(PVMF_AMRFFPARSER_NODE_PORT_TYPE_SOURCE);
     tmpTrackInfo.setTrackID(0);
     TPVAmrFileInfo amrinfo;
-    iAMRParser->RetrieveFileInfo(amrinfo);
+    if (!iAMRParser->RetrieveFileInfo(amrinfo)) return PVMFErrNotSupported;
 
     switch (amrinfo.iAmrFormat)
     {
diff --git a/nodes/pvdownloadmanagernode/config/opencore/pvmf_downloadmanager_config.h b/nodes/pvdownloadmanagernode/config/opencore/pvmf_downloadmanager_config.h
index 0404a8a..24ac7f6 100644
--- a/nodes/pvdownloadmanagernode/config/opencore/pvmf_downloadmanager_config.h
+++ b/nodes/pvdownloadmanagernode/config/opencore/pvmf_downloadmanager_config.h
@@ -25,10 +25,6 @@
 */
 
 /*!
-** Support PVX download
-*/
-
-/*!
 ** Support progressive playback.
 */
 #ifndef PVMF_DOWNLOADMANAGER_SUPPORT_PPB
@@ -36,14 +32,6 @@
 #endif
 
 /*!
-** Support License Acquire interface.  This allows acquiring a license
-** during playback of protected content.
-*/
-#ifndef PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE
-#define PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE   1
-#endif
-
-/*!
 ** A tunable parameter setting the number of TCP buffers to
 ** use for progressive playback.
 */
@@ -51,5 +39,23 @@
 #define PVMF_DOWNLOADMANAGER_MIN_TCP_BUFFERS_FOR_PPB  8
 #endif
 
+/*!
+** A tunable parameter setting the MBDS cache size to
+** use for shoutcast in seconds.
+** PE node required jitter buffer size is 4 seconds.
+*/
+#ifndef PVMF_DOWNLOADMANAGER_CACHE_SIZE_FOR_SC_IN_SECONDS
+#define PVMF_DOWNLOADMANAGER_CACHE_SIZE_FOR_SC_IN_SECONDS  6
+#endif
+
+/*!
+** A tunable parameter setting the maximum clip bitrate supported
+** by shoutcast in kbps
+*/
+#ifndef PVMF_DOWNLOADMANAGER_MAX_BITRATE_FOR_SC
+#define PVMF_DOWNLOADMANAGER_MAX_BITRATE_FOR_SC  128
+#endif
+
+
 #endif // PVMF_DOWNLOADMANAGER_CONFIG_H_INCLUDED
 
diff --git a/nodes/pvdownloadmanagernode/include/pvmf_memorybufferdatastream_factory.h b/nodes/pvdownloadmanagernode/include/pvmf_memorybufferdatastream_factory.h
index 6ea1db3..6cb1758 100644
--- a/nodes/pvdownloadmanagernode/include/pvmf_memorybufferdatastream_factory.h
+++ b/nodes/pvdownloadmanagernode/include/pvmf_memorybufferdatastream_factory.h
@@ -68,36 +68,26 @@
 #endif
 
 
-//#define PV_MB_MAX_NUMBER_OF_READ_CONNECTIONS    8
-#define PV_MB_MAX_NUMBER_OF_READ_CONNECTIONS	16
+#define PV_MBDS_MAX_NUMBER_OF_READ_CONNECTIONS	16
 
-#define PV_MB_MAX_NUMBER_OF_WRITE_CONNECTIONS	1
+#define PV_MBDS_MAX_NUMBER_OF_WRITE_CONNECTIONS	1
 
-#define PV_MB_MAX_NUMBER_OF_TOTAL_CONNECTIONS  PV_MB_MAX_NUMBER_OF_WRITE_CONNECTIONS + PV_MB_MAX_NUMBER_OF_READ_CONNECTIONS
+#define PV_MBDS_MAX_NUMBER_OF_TOTAL_CONNECTIONS  PV_MB_MAX_NUMBER_OF_WRITE_CONNECTIONS + PV_MB_MAX_NUMBER_OF_READ_CONNECTIONS
 
-// this is the minimum size of the sliding window
-// the file format parsers used this number to decide if a clip can be played properly in a progressive manner
-// @TODO this needs to be tied to the socket memory pool size
-#define READ_BUFFER_SIZE    300000
-#define READ_BUFFER_TRIM_THRESHOLD  100 * 1024
-#if (ENABLE_LARGE_MBDS_CACHE_SIZE)
-#undef READ_BUFFER_SIZE
-#define READ_BUFFER_SIZE    1680000
 
-#undef READ_BUFFER_TRIM_THRESHOLD
-#define READ_BUFFER_TRIM_THRESHOLD 	900 * 1024
-#endif
-
-// starts trimming if the cache is grown beyond this margin
-#define READ_BUFFER_MARGIN 		4 * 1024
+#define PV_MBDS_TEMP_CACHE_TRIM_MARGIN_PS					64000
+#define PV_MBDS_TEMP_CACHE_TRIM_THRESHOLD_PS(capacity)				(capacity * 2) / 3
+// for shoutcast
+#define PV_MBDS_TEMP_CACHE_TRIM_MARGIN_SC					4096
+#define PV_MBDS_TEMP_CACHE_TRIM_THRESHOLD_SC(capacity)                          capacity / 6
 
 #define NO_LIMIT		0
-#define PERM_CACHE_SIZE		NO_LIMIT
+#define PV_MBDS_PERM_CACHE_SIZE		NO_LIMIT
 
 // how many bytes are we willing to wait for assuming they are coming
 // instead of repositioning
 // this depends on channel bandwidth and network condition
-#define BYTES_TO_WAIT         4 * 1024
+#define PV_MBDS_BYTES_TO_WAIT         4 * 1024
 
 // In forward repositioning, if the data is going to come in soon,
 // which is defined as requested offset minus the download offset (aka current write pointer)
@@ -119,6 +109,13 @@
     MBDS_REPOSITION_WITH_MARGIN
 } MBDSRepositionMode;
 
+typedef enum
+{
+    MBDS_STREAM_FORMAT_UNKNOWN,
+    MBDS_STREAM_FORMAT_PROGRESSIVE_PLAYBACK,
+    MBDS_STREAM_FORMAT_SHOUTCAST
+} MBDSStreamFormat;
+
 class PVMFMemoryBufferWriteDataStreamImpl;
 
 class PVMFMemoryBufferReadDataStreamImpl;
@@ -147,8 +144,6 @@
 
         uint32 GetNumEntries();
 
-        uint32 GetCacheSize();
-
     private:
 
         struct MBDSTempCacheEntry
@@ -288,7 +283,7 @@
 {
     public:
         OSCL_IMPORT_REF PVMFMemoryBufferWriteDataStreamFactoryImpl(PVMFMemoryBufferDataStreamTempCache* aTempCache,
-                PVMFMemoryBufferDataStreamPermCache* aPermCache);
+                PVMFMemoryBufferDataStreamPermCache* aPermCache, MBDSStreamFormat aStreamFormat, uint32 aTempCacheCapacity);
 
         OSCL_IMPORT_REF ~PVMFMemoryBufferWriteDataStreamFactoryImpl();
 
@@ -317,6 +312,10 @@
         PVMFMemoryBufferDataStreamPermCache* iPermCache;
 
         bool iDownloadComplete;
+
+        MBDSStreamFormat iStreamFormat;
+
+        uint32 iTempCacheCapacity;
 };
 
 
@@ -438,7 +437,8 @@
 {
     public:
         OSCL_IMPORT_REF PVMFMemoryBufferWriteDataStreamImpl(PVMFMemoryBufferDataStreamTempCache* aTempCache,
-                PVMFMemoryBufferDataStreamPermCache* aPermCache);
+                PVMFMemoryBufferDataStreamPermCache* aPermCache, MBDSStreamFormat aStreamFormat,
+                uint32 aTempCacheCapacity);
 
         OSCL_IMPORT_REF ~PVMFMemoryBufferWriteDataStreamImpl();
 
@@ -531,6 +531,14 @@
 
         OSCL_IMPORT_REF bool GetPermCachePersistence(uint32& aFirstOffset, uint32& aLastOffset);
 
+        OSCL_IMPORT_REF void SetStreamFormat(MBDSStreamFormat aStreamFormat);
+
+        OSCL_IMPORT_REF void SetTempCacheCapacity(uint32 aCapacity);
+
+        OSCL_IMPORT_REF MBDSStreamFormat GetStreamFormat();
+
+        OSCL_IMPORT_REF uint32 GetTempCacheCapacity();
+
     public:
         bool iDownloadComplete;
 
@@ -614,11 +622,11 @@
 
         uint32 iNumReadSessions;
 
-        ReadCapacityNotificationStruct iReadNotifications[PV_MB_MAX_NUMBER_OF_READ_CONNECTIONS];
+        ReadCapacityNotificationStruct iReadNotifications[PV_MBDS_MAX_NUMBER_OF_READ_CONNECTIONS];
 
         RepositionRequestStruct iRepositionRequest;
 
-        ReadFilePositionStruct iReadFilePositions[PV_MB_MAX_NUMBER_OF_READ_CONNECTIONS];
+        ReadFilePositionStruct iReadFilePositions[PV_MBDS_MAX_NUMBER_OF_READ_CONNECTIONS];
 
         PvmiDataStreamSession iSessionID;
 
@@ -644,6 +652,14 @@
         uint32 iAVTOffsetDelta;
 
         bool iMadePersistent;
+
+        MBDSStreamFormat iStreamFormat;
+
+        uint32 iTempCacheCapacity;
+
+        uint32 iTempCacheTrimThreshold;
+
+        uint32 iTempCacheTrimMargin;
 };
 
 
@@ -654,7 +670,7 @@
 {
     public:
         // in case we would want to pass the constructor an existing cache
-        OSCL_IMPORT_REF PVMFMemoryBufferDataStream();
+        OSCL_IMPORT_REF PVMFMemoryBufferDataStream(PVMFFormatType& aStreamFormat, uint32 aTempCacheCapacity);
 
         OSCL_IMPORT_REF ~PVMFMemoryBufferDataStream();
 
diff --git a/nodes/pvdownloadmanagernode/src/pvmf_downloadmanager_node.cpp b/nodes/pvdownloadmanagernode/src/pvmf_downloadmanager_node.cpp
index 2e381ec..26b5f2c 100644
--- a/nodes/pvdownloadmanagernode/src/pvmf_downloadmanager_node.cpp
+++ b/nodes/pvdownloadmanagernode/src/pvmf_downloadmanager_node.cpp
@@ -26,6 +26,7 @@
 #include "oscl_error_codes.h"
 #include "oscl_str_ptr_len.h" // for OSCL_ASCII_CASE_MAGIC_BIT
 #include "pvmi_datastreamuser_interface.h"
+#include "pvpvxparser.h"
 #include "pv_mime_string_utils.h"
 #include "pvmi_kvp_util.h"
 #include "pvmf_source_context_data.h"
@@ -108,15 +109,17 @@
     iPlayBackClock = NULL;
     iClockNotificationsInf = NULL;
 
+    iNoPETrackSelect = false;
+    iMovieAtomComplete = false;
+    iParserInitAfterMovieAtom = false;
+    iParserPrepareAfterMovieAtom = false;
 
     iParserInit = false;
     iDataReady = false;
     iDownloadComplete = false;
     iRecognizerError = false;
 
-#if(PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE)
     iInitFailedLicenseRequired = false;
-#endif
 
     iProtocolEngineNodePort = NULL;
     iSocketNodePort = NULL;
@@ -526,13 +529,11 @@
         PvmiCapabilityAndConfig* myInterface = OSCL_STATIC_CAST(PvmiCapabilityAndConfig*, this);
         iface = OSCL_STATIC_CAST(PVInterface*, myInterface);
     }
-#if(PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE)
     else if (uuid == PVMFCPMPluginLicenseInterfaceUuid)
     {
         PVMFCPMPluginLicenseInterface* myInterface = OSCL_STATIC_CAST(PVMFCPMPluginLicenseInterface*, this);
         iface = OSCL_STATIC_CAST(PVInterface*, myInterface);
     }
-#endif//PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE
     else
     {
         return false;
@@ -552,24 +553,6 @@
     if (iInterfaceState != EPVMFNodeIdle && iInterfaceState != EPVMFNodeCreated)
         return PVMFErrInvalidState;
 
-    //Validate
-    if (aSourceFormat == PVMF_MIME_DATA_SOURCE_HTTP_URL)
-    {
-        if (!aSourceData)
-            return PVMFErrArgument;
-    }
-    else if (aSourceFormat == PVMF_MIME_DATA_SOURCE_PVX_FILE)
-    {
-        PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0,
-                        "PVMFDownloadManagerNode:SetSourceInitializationData() Unsupported source format."));
-        return PVMFErrArgument; // unsupported format
-    }
-    else
-    {
-        PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0,
-                        "PVMFDownloadManagerNode:SetSourceInitializationData() Unsupported source format."));
-        return PVMFErrArgument; // unsupported format
-    }
 
     // Pass the source info directly to the protocol engine node.
 
@@ -601,6 +584,12 @@
 
     if (aSourceFormat == PVMF_MIME_DATA_SOURCE_HTTP_URL)
     {
+        if (!aSourceData)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0,
+                            "PVMFDownloadManagerNode:SetSourceInitializationData() Missing source data"));
+            return PVMFErrArgument;
+        }
         PVInterface* pvinterface = (PVInterface*)aSourceData;
         PVUuid uuid(PVMF_DOWNLOAD_DATASOURCE_HTTP_UUID);
         PVInterface* temp = NULL;
@@ -610,9 +599,6 @@
             //extract the download file name from the opaque data.
             iDownloadFileName = data->iDownloadFileName;
 
-            //extract CPM options
-            iLocalDataSource.iUseCPMPluginRegistry = data->iUseCPMPluginRegistryForPlayback;
-
             //extract the playback mode
             switch (data->iPlaybackControl)
             {
@@ -678,20 +664,148 @@
                         iPlaybackMode = EPlayAsap;
                         break;
                 }
-
-                //extract the cpm usage flag from the common data
+            }
+            else
+            {//invalid source data
+                return PVMFErrArgument;
+            }
+        }
+    }
+    else if (aSourceFormat == PVMF_MIME_DATA_SOURCE_PVX_FILE)
+    {
+        if (!aSourceData)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0,
+                            "PVMFDownloadManagerNode:SetSourceInitializationData() Missing source data"));
+            return PVMFErrArgument;
+        }
+        PVInterface* pvinterface = (PVInterface*)aSourceData;
+        PVUuid uuid(PVMF_DOWNLOAD_DATASOURCE_PVX_UUID);
+        PVInterface* temp = NULL;
+        if (pvinterface->queryInterface(uuid, temp))
+        {
+            PVMFDownloadDataSourcePVX* data = OSCL_STATIC_CAST(PVMFDownloadDataSourcePVX*, temp);
+            iDownloadFileName = data->iDownloadFileName;
+            //get the playback mode from the PVX info
+            switch (data->iPvxInfo.iPlaybackControl)
+            {
+                case CPVXInfo::ENoPlayback:
+                    iPlaybackMode = EDownloadOnly;
+                    break;
+                case CPVXInfo::EAfterDownload:
+                    iPlaybackMode = EDownloadThenPlay;
+                    break;
+                case CPVXInfo::EAsap:
+                    iPlaybackMode = EPlayAsap;
+                    break;
+                default:
+                    iPlaybackMode = EPlayAsap;
+                    break;
+            }
+        }
+        else
+        {
+            PVUuid uuid(PVMF_SOURCE_CONTEXT_DATA_DOWNLOAD_PVX_UUID);
+            temp = NULL;
+            if (pvinterface->queryInterface(uuid, temp))
+            {
+                PVMFSourceContextDataDownloadPVX* data = OSCL_STATIC_CAST(PVMFSourceContextDataDownloadPVX*, temp);
+                iDownloadFileName = data->iDownloadFileName;
+                if (!data->iPvxInfo)
+                {//invalid source data
+                    return PVMFErrArgument;
+                }
+                //get the playback mode from the PVX info
+                switch (data->iPvxInfo->iPlaybackControl)
                 {
-                    PVUuid uuid(PVMF_SOURCE_CONTEXT_DATA_COMMON_UUID);
-                    temp = NULL;
-                    if (pvinterface->queryInterface(uuid, temp))
-                    {
-                        PVMFSourceContextDataCommon* data = OSCL_STATIC_CAST(PVMFSourceContextDataCommon*, temp);
-                        iLocalDataSource.iUseCPMPluginRegistry = data->iUseCPMPluginRegistry;
-                    }
-                    else
-                    {//invalid source data
-                        return PVMFErrArgument;
-                    }
+                    case CPVXInfo::ENoPlayback:
+                        iPlaybackMode = EDownloadOnly;
+                        break;
+                    case CPVXInfo::EAfterDownload:
+                        iPlaybackMode = EDownloadThenPlay;
+                        break;
+                    case CPVXInfo::EAsap:
+                        iPlaybackMode = EPlayAsap;
+                        break;
+                    default:
+                        iPlaybackMode = EPlayAsap;
+                        break;
+                }
+            }
+            else
+            {//invalid source data
+                return PVMFErrArgument;
+            }
+        }
+    }
+    else if (aSourceFormat == PVMF_MIME_DATA_SOURCE_SHOUTCAST_URL)
+    {
+        if (!aSourceData)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0,
+                            "PVMFDownloadManagerNode:SetSourceInitializationData() Missing source data"));
+            return PVMFErrArgument;
+        }
+        PVInterface* pvinterface = (PVInterface*)aSourceData;
+        PVUuid uuid(PVMF_DOWNLOAD_DATASOURCE_HTTP_UUID);
+        PVInterface* temp = NULL;
+        if (pvinterface->queryInterface(uuid, temp))
+        {
+            PVMFDownloadDataSourceHTTP* data = OSCL_STATIC_CAST(PVMFDownloadDataSourceHTTP*, temp);
+
+            //extract the download file name from the opaque data.
+            iDownloadFileName = data->iDownloadFileName;
+
+            //extract the playback mode
+            switch (data->iPlaybackControl)
+            {
+                case PVMFDownloadDataSourceHTTP::ENoSaveToFile:
+
+#if(PVMF_DOWNLOADMANAGER_SUPPORT_PPB)
+                    iPlaybackMode = EPlaybackOnly;
+                    break;
+#else
+                    PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0,
+                                    "PVMFDownloadManagerNode:SetSourceInitializationData() NoSaveToFile is not supported!"));
+                    return PVMFErrArgument;//unsupported mode.
+#endif//PVMF_DOWNLOADMANAGER_SUPPORT_PPB
+
+                default:
+
+                    PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0,
+                                    "PVMFDownloadManagerNode:SetSourceInitializationData() Only NoSaveToFile mode is supported for PVMF_MIME_DATA_SOURCE_SHOUTCAST_URL!"));
+                    return PVMFErrArgument;//unsupported mode.
+                    break;
+            }
+        }
+        else
+        {
+            PVUuid uuid(PVMF_SOURCE_CONTEXT_DATA_DOWNLOAD_HTTP_UUID);
+            if (pvinterface->queryInterface(uuid, temp))
+            {
+                PVMFSourceContextDataDownloadHTTP* data = OSCL_STATIC_CAST(PVMFSourceContextDataDownloadHTTP*, temp);
+                //extract the download file name from the opaque data.
+                iDownloadFileName = data->iDownloadFileName;
+
+                //extract the playback mode
+                switch (data->iPlaybackControl)
+                {
+                    case PVMFSourceContextDataDownloadHTTP::ENoSaveToFile:
+
+#if(PVMF_DOWNLOADMANAGER_SUPPORT_PPB)
+                        iPlaybackMode = EPlaybackOnly;
+                        break;
+#else
+                        PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0,
+                                        "PVMFDownloadManagerNode:SetSourceInitializationData() NoSaveToFile is not supported!"));
+                        return PVMFErrArgument;//unsupported mode.
+#endif//PVMF_DOWNLOADMANAGER_SUPPORT_PPB
+
+                    default:
+                        PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0,
+                                        "PVMFDownloadManagerNode:SetSourceInitializationData() Only NoSaveToFile mode is supported for PVMF_MIME_DATA_SOURCE_SHOUTCAST_URL!"));
+                        return PVMFErrArgument;//unsupported mode.
+                        break;
                 }
             }
             else
@@ -702,18 +816,56 @@
     }
     else
     {
-        OSCL_ASSERT(false);
+        PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0,
+                        "PVMFDownloadManagerNode:SetSourceInitializationData() Unsupported source type"));
+        return PVMFErrArgument;
     }
 
 #if(PVMF_DOWNLOADMANAGER_SUPPORT_PPB)
+    //Configure the MBDS
     if (iPlaybackMode == EPlaybackOnly)
     {
-        //make sure we have enough TCP buffers for PPB
-        if (iSocketNode.iNode)
-            ((PVMFSocketNode*)iSocketNode.iNode)->SetMaxTCPRecvBufferCount(PVMF_DOWNLOADMANAGER_MIN_TCP_BUFFERS_FOR_PPB);
+        // make sure we have enough TCP buffers for PPB and shoutcast
+        if (aSourceFormat == PVMF_MIME_DATA_SOURCE_SHOUTCAST_URL)
+        {
+            // calculate MBDS cache size in bytes
+            // max bitrate in bytes per second * cache size in secs
+            uint32 bitRate = PVMF_DOWNLOADMANAGER_MAX_BITRATE_FOR_SC * 1000 / 8;
+            uint32 cacheSize = bitRate * PVMF_DOWNLOADMANAGER_CACHE_SIZE_FOR_SC_IN_SECONDS;
 
-        // Use Memory Buffer Data Stream for progressive playback
-        iMemoryBufferDatastreamFactory = OSCL_NEW(PVMFMemoryBufferDataStream, ());
+            if (iSocketNode.iNode)
+            {
+                // TCP buffer size for shoutcast is 1564 (1500 data + 64 overhead)
+                // add 1 second margin
+                ((PVMFSocketNode*)iSocketNode.iNode)->SetMaxTCPRecvBufferCount((cacheSize + bitRate) / PVMF_DOWNLOADMANAGER_TCP_BUFFER_SIZE_FOR_SC);
+
+                ((PVMFSocketNode*)iSocketNode.iNode)->SetMaxTCPRecvBufferSize(PVMF_DOWNLOADMANAGER_TCP_BUFFER_SIZE_FOR_SC + PVMF_DOWNLOADMANAGER_TCP_BUFFER_OVERHEAD);
+            }
+
+            // Use Memory Buffer Data Stream for progressive playback and Shoutcast
+            iMemoryBufferDatastreamFactory = OSCL_NEW(PVMFMemoryBufferDataStream, (aSourceFormat, cacheSize));
+        }
+        else
+        {
+            uint32 bufSize = PVMF_DOWNLOADMANAGER_TCP_BUFFER_SIZE_FOR_PPB;
+            if (iSocketNode.iNode)
+            {
+                ((PVMFSocketNode*)iSocketNode.iNode)->SetMaxTCPRecvBufferCount(PVMF_DOWNLOADMANAGER_MIN_TCP_BUFFERS_FOR_PPB);
+                // get buffer size
+                ((PVMFSocketNode*)iSocketNode.iNode)->GetMaxTCPRecvBufferSize(bufSize);
+            }
+
+            // MBDS cache size calculation, see RIO-3965 for detail
+            // TCP buffer size is 64000 (the default), assume worst case that the average packet size is 250 bytes
+            // Packet overhead is 64 bytes per packet
+            // 8 buffers will yield a cache of 305500, 13 buffers will yield a cache of 560500
+            uint32 totalPoolSizeMinusTwoBuffers = (PVMF_DOWNLOADMANAGER_MIN_TCP_BUFFERS_FOR_PPB - PVMF_DOWNLOADMANAGER_TCP_BUFFER_NOT_AVAILABLE) * bufSize;
+            uint32 numPacketsToFitInPool = totalPoolSizeMinusTwoBuffers / (PVMF_DOWNLOADMANAGER_TCP_AVG_SMALL_PACKET_SIZE + PVMF_DOWNLOADMANAGER_TCP_BUFFER_OVERHEAD);
+            uint32 maxDataMinusOverheadInPool = numPacketsToFitInPool * PVMF_DOWNLOADMANAGER_TCP_AVG_SMALL_PACKET_SIZE;
+
+            // Use Memory Buffer Data Stream for progressive playback and Shoutcast
+            iMemoryBufferDatastreamFactory = OSCL_NEW(PVMFMemoryBufferDataStream, (aSourceFormat, maxDataMinusOverheadInPool));
+        }
 
         OSCL_ASSERT(iMemoryBufferDatastreamFactory != NULL);
 
@@ -731,7 +883,7 @@
         iWriteFactory = iFileBufferDatastreamFactory->GetWriteDataStreamFactoryPtr();
     }
 
-    //save the source info
+//save the source info
     iSourceFormat = aSourceFormat;
     iSourceURL = aSourceURL;
     iSourceData = aSourceData;
@@ -774,13 +926,25 @@
 PVMFDownloadManagerSubNodeContainer& PVMFDownloadManagerNode::TrackSelectNode()
 {
     //Decide which sub-node is supporting track selection.
-    if (iSourceFormat == PVMF_MIME_DATA_SOURCE_HTTP_URL)
+    if (iSourceFormat == PVMF_MIME_DATA_SOURCE_PVX_FILE)
     {
-        //for 3gpp, the parser does track selection.
-        return iFormatParserNode;
+        //for pvx file, the PE node may or may not do track selection.
+        //the final decision isn't available until PE node prepare is done
+        //and we've queried for the TS interface, at which point the
+        //iNoPETrackSelect may be set.
+        if (iNoPETrackSelect)
+            return iFormatParserNode;
+
+        //if download is already complete, such as after a stop, then
+        //the parser node will do track selection.
+        if (iDownloadComplete && iPlaybackMode != EDownloadOnly)
+            return iFormatParserNode;
+
+        return iProtocolEngineNode;
     }
     else
     {
+        //for 3gpp & shoutcast, parser does track selection.
         return iFormatParserNode;
     }
 }
@@ -1017,11 +1181,9 @@
                 cmdstatus = DoCancelCommand(aCmd);
                 break;
 
-#if(PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE)
             case PVDLM_NODE_CMD_CANCEL_GET_LICENSE:
                 cmdstatus = DoCancelGetLicense(aCmd);
                 break;
-#endif//PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE
 
             default:
                 cmdstatus = PVMFErrNotSupported;
@@ -1108,7 +1270,6 @@
                 cmdstatus = PVMFErrNotSupported;
                 break;
 
-#if(PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE)
             case PVDLM_NODE_CMD_GET_LICENSE_W:
                 cmdstatus = DoGetLicense(aCmd, true);
                 break;
@@ -1116,7 +1277,6 @@
             case PVDLM_NODE_CMD_GET_LICENSE:
                 cmdstatus = DoGetLicense(aCmd);
                 break;
-#endif//PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE
 
             default:
                 OSCL_ASSERT(false);
@@ -1155,6 +1315,26 @@
     if (!iSubNodeCmdVec.empty())
         iSubNodeCmdVec.clear();
 
+    //We may need to wait on the movie atom before the node cmd can complete.
+    //This is a good place to catch that condition and suppress the node
+    //cmd completion.
+    if (iParserInitAfterMovieAtom
+            || iParserPrepareAfterMovieAtom)
+    {
+        if (aStatus == PVMFSuccess)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                            (0, "PVMFDownloadManagerNode::CommandComplete() Blocking Command Completion until Movie Atom Downloaded."));
+            return;//keep waiting on movie atom complete.
+        }
+        else
+        {
+            //if command failed or was cancelled then clear any movie atom wait
+            //flags.
+            iParserInitAfterMovieAtom = false;
+            iParserPrepareAfterMovieAtom = false;
+        }
+    }
 
     //Do the post-command state changes and anything else.
     if (aStatus == PVMFSuccess)
@@ -1274,7 +1454,7 @@
 
             break;
         case PVMFInfoRemoteSourceNotification:
-            //we get this event for "not pseudostreamable" for both fast-track
+            //we get this event for "not pseudostreamable" for both PVX
             //and 3gpp.  Only pass it up for 3gpp.
             if (iSourceFormat != PVMF_MIME_DATA_SOURCE_HTTP_URL)
                 return true;
@@ -1605,7 +1785,16 @@
     if (iPlaybackMode != EDownloadOnly)
     {
         //do recognizer sequence if needed.
+        if (iSourceFormat == PVMF_MIME_DATA_SOURCE_PVX_FILE)
         {
+            //PXV is always assumed to be MP4
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0,
+                            "PVMFDownloadManagerNode::ContinueFromDownloadTrackSelectionPoint Setting format to MP4"));
+            iMimeType = PVMF_MIME_MPEG4FF;
+        }
+        else
+        {
+            //for other source formats, use the recognizer to determine the format.
             Push(iRecognizerNode, PVMFDownloadManagerSubNodeContainerBase::ERecognizerStart);
             Push(iRecognizerNode, PVMFDownloadManagerSubNodeContainerBase::ERecognizerClose);
         }
@@ -1621,12 +1810,28 @@
         Push(iFormatParserNode, PVMFDownloadManagerSubNodeContainerBase::EQueryDataSourcePlayback);
         Push(iFormatParserNode, PVMFDownloadManagerSubNodeContainerBase::EQueryFFProgDownload);
         Push(iProtocolEngineNode, PVMFDownloadManagerSubNodeContainerBase::ESetFFProgDownloadSupport);
-#if(PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE)
         Push(iFormatParserNode, PVMFDownloadManagerSubNodeContainerBase::ECPMQueryLicenseInterface);
-#endif//PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE
 
+        //if this is PVX, we need to wait on movie atom before we can
+        //init parser.
+        if (iSourceFormat == PVMF_MIME_DATA_SOURCE_PVX_FILE)
         {
-            //for 3gpp, go ahead and init parser.  Init will block until
+            if (iMovieAtomComplete || iDownloadComplete)
+            {
+                iParserInit = true;
+                Push(iFormatParserNode, PVMFDownloadManagerSubNodeContainerBase::EInit);
+            }
+            else
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0,
+                                "PVMFDownloadManagerNode::ContinueFromDownloadTrackSelectionPoint Setting flag to Init Parser after Movie Atom Downloaded"));
+                //set this flag to trigger parser init when movie atom is done.
+                iParserInitAfterMovieAtom = true;
+            }
+        }
+        else
+        {
+            //for other formats, go ahead and init parser.  Init will block until
             //receiving movie atom.
             iParserInit = true;
             Push(iFormatParserNode, PVMFDownloadManagerSubNodeContainerBase::EInit);
@@ -1634,6 +1839,37 @@
     }
 }
 
+//Called when movie atom is received, or when download is complete
+//but movie atom was never received.
+void PVMFDownloadManagerNode::ContinueAfterMovieAtom()
+{
+    PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                    (0, "PVMFDownloadManagerNode::ContinueAfterMovieAtom() "));
+
+    if (!iMovieAtomComplete)
+    {
+        iMovieAtomComplete = true;
+        //see whether we need to continue with parser init
+        if (iParserInitAfterMovieAtom)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                            (0, "PVMFDownloadManagerNode::ContinueAfterMovieAtom() Continuing to Parser Init"));
+            iParserInitAfterMovieAtom = false;
+            iParserInit = true;
+            Push(iFormatParserNode, PVMFDownloadManagerSubNodeContainerBase::EInit);
+            RunIfNotReady();
+        }
+        //see whether we need to continue with parser prepare
+        if (iParserPrepareAfterMovieAtom)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                            (0, "PVMFDownloadManagerNode::ContinueAfterMovieAtom() Continuing to Parser Prepare"));
+            iParserPrepareAfterMovieAtom = false;
+            Push(iFormatParserNode, PVMFDownloadManagerSubNodeContainerBase::EPrepare);
+            RunIfNotReady();
+        }
+    }
+}
 
 PVMFNodeInterface* PVMFDownloadManagerNode::CreateParser()
 {
@@ -1691,7 +1927,6 @@
         break;
 
         case PVMF_GENERIC_NODE_INIT:
-#if(PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE)
             //check for second "Init" command after a license acquire.
             if (iInitFailedLicenseRequired)
             {
@@ -1700,19 +1935,21 @@
             }
             else
 
-#endif//PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE
             {
                 //reset any prior download/playback event
                 iDownloadComplete = false;
                 iParserInit = false;
                 iDataReady = false;
+                iMovieAtomComplete = false;
+                iParserInitAfterMovieAtom = false;
+                iParserPrepareAfterMovieAtom = false;
                 iRecognizerError = false;
-#if(PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE)
                 iInitFailedLicenseRequired = false;
-#endif//PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE
 
                 //reset any prior track select decisions.
                 iFormatParserNode.iTrackSelection = NULL;
+                iProtocolEngineNode.iTrackSelection = NULL;
+                iNoPETrackSelect = false;
 
                 //reset any prior recognizer decisions.
                 iMimeType = PVMF_MIME_FORMAT_UNKNOWN;
@@ -1736,6 +1973,14 @@
                     //parser is doing track selection, there's no question
                     ContinueInitAfterTrackSelectDecision();
                 }
+                else
+                {
+                    //PE node may be doing track selection, but to be sure, we need
+                    //to wait until it is prepared, then request the track selection interface.
+                    iProtocolEngineNode.iTrackSelection = NULL;
+                    Push(iProtocolEngineNode, PVMFDownloadManagerSubNodeContainerBase::EQueryTrackSelection);
+                    //once this command is complete, we will call ContinueInitAfterTrackSelectDecision()
+                }
             }
             break;
 
@@ -1752,6 +1997,14 @@
             {
                 Push(iFormatParserNode, PVMFDownloadManagerSubNodeContainerBase::EPrepare);
             }
+            //if we're waiting on movie atom to init parser, then set a flag so we'll
+            //also do the parser prepare when it arrives.
+            else if (iParserInitAfterMovieAtom)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0,
+                                "PVMFDownloadManagerNode::ScheduleSubNodeCommands Setting flag to Prepare Parser after Movie Atom Downloaded"));
+                iParserPrepareAfterMovieAtom = true;
+            }
             break;
 
         case PVMF_GENERIC_NODE_REQUESTPORT:
@@ -1882,7 +2135,6 @@
     iSubNodeCmdVec.push_back(elem);
 }
 
-#if(PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE)
 PVMFCommandId
 PVMFDownloadManagerNode::GetLicense(PVMFSessionId aSessionId,
                                     OSCL_wString& aContentName,
@@ -1983,7 +2235,6 @@
     }
     return PVMFPending;
 }
-#endif//PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE
 
 //
 // PVMFDownloadManagerSubNodeContainer Implementation.
@@ -2044,13 +2295,11 @@
         iDownloadProgress->removeRef();
         iDownloadProgress = NULL;
     }
-#if(PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE)
     if (iLicenseInterface)
     {
         iLicenseInterface->removeRef();
         iLicenseInterface = NULL;
     }
-#endif//PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE
     //the node instance is cleaned up elsewhere.
 }
 
@@ -2149,7 +2398,6 @@
             LOGSUBCMD((0, "PVMFDownloadManagerSubNodeContainer::IssueCommand %s CmdId %d ", GETNODESTR, iCmdId));
             return PVMFPending;
 
-#if(PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE)
         case ECPMQueryLicenseInterface:
             OSCL_ASSERT(iNode != NULL);
             LOGSUBCMD((0, "PVMFDownloadManagerSubNodeContainer::IssueCommand %s Calling QueryInterface(License)", GETNODESTR));
@@ -2157,7 +2405,6 @@
             iCmdId = iNode->QueryInterface(iSessionId, PVMFCPMPluginLicenseInterfaceUuid, iLicenseInterface);
             LOGSUBCMD((0, "PVMFDownloadManagerSubNodeContainer::IssueCommand %s CmdId %d ", GETNODESTR, iCmdId));
             return PVMFPending;
-#endif//PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE
 
         case EQueryDataSourcePlayback:
             OSCL_ASSERT(iNode != NULL);
@@ -2181,17 +2428,31 @@
                     return PVMFFailure; //no datastreamuser interface?
 
                 //Pass data to the parser node.
-#if(PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE)
                 if (iContainer->iInitFailedLicenseRequired)
                 {
                     ;//do nothing-- data was already set on the first init call.
                 }
                 else
-#endif//PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE
                 {
                     //Pass source data
-                        //for 3gpp, pass the recognized file format to the parser node.
+                    if (iContainer->iSourceFormat == PVMF_MIME_DATA_SOURCE_PVX_FILE)
                     {
+                        // let the parser know this is PVX format.
+                        PVMFFormatType fmt = PVMF_MIME_DATA_SOURCE_PVX_FILE;
+                        (DataSourceInit())->SetSourceInitializationData(iContainer->iDownloadFileName
+                                , fmt
+                                , (OsclAny*)&iContainer->iLocalDataSource);
+                    }
+                    else if (iContainer->iSourceFormat == PVMF_MIME_DATA_SOURCE_SHOUTCAST_URL)
+                    {
+                        // let the parser node know that it is playing from a shoutcast stream
+                        (DataSourceInit())->SetSourceInitializationData(iContainer->iDownloadFileName
+                                , iContainer->iSourceFormat
+                                , (OsclAny*)iContainer->iSourceData);
+                    }
+                    else
+                    {
+                        // pass the recognized format to the parser.
                         (DataSourceInit())->SetSourceInitializationData(iContainer->iDownloadFileName
                                 , iContainer->iFmt
                                 , (OsclAny*)iContainer->iSourceData);
@@ -2226,7 +2487,6 @@
                 return PVMFPending;
             }
 
-#if(PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE)
         case ECPMGetLicenseW:
         {
             OSCL_ASSERT(iNode != NULL);
@@ -2275,7 +2535,6 @@
             LOGSUBCMD((0, "PVMFDownloadManagerSubNodeContainer::IssueCommand %s CmdId %d ", GETNODESTR, iCmdId));
             return PVMFPending;
         }
-#endif//PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE
 
         case ERequestPort:
             OSCL_ASSERT(iNode != NULL);
@@ -2790,8 +3049,16 @@
             case PVMFInfoBufferingComplete:
                 iContainer->iDownloadComplete = true;
                 iContainer->NotifyDownloadComplete();
+                //not sure whether this is possible, but just in case download
+                //completes before movie atom notice, go ahead and do anything
+                //that was waiting on movie atom.
+                if (!iContainer->iMovieAtomComplete)
+                    iContainer->ContinueAfterMovieAtom();
                 break;
             case PVMFPROTOCOLENGINE_INFO_MovieAtomCompleted:
+                //we may be waiting on this event to continue Parser init.
+                if (!iContainer->iMovieAtomComplete)
+                    iContainer->ContinueAfterMovieAtom();
                 if (iContainer->iDebugMode)
                 {
                     iContainer->ReportInfoEvent((PVMFAsyncEvent&)aEvent);
@@ -2920,13 +3187,11 @@
 
     PVMFStatus status = aStatus;
 
-#if(PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE)
     // Set "Init Failed License Required" flag with the results of parser Init.
     if (iType == EFormatParser && iCmd == EInit)
     {
         iContainer->iInitFailedLicenseRequired = (status == PVMFErrLicenseRequired);
     }
-#endif//PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE
 
     // Watch for the request port command completion from the protocol node, because we need to save the port pointer
     if (iType == EProtocolEngine && iCmd == ERequestPort && status == PVMFSuccess)
@@ -2952,6 +3217,17 @@
     }
 
 
+    // Watch for the query track selection interface completion from the protocol engine node.
+    if (iType == EProtocolEngine && iCmd == EQueryTrackSelection)
+    {
+        //see whether we got the TS interface from PE node.
+        iContainer->iNoPETrackSelect = (status != PVMFSuccess || iContainer->iProtocolEngineNode.iTrackSelection == NULL);
+        //ignore cmd failure so it won't terminate the Init sequence
+        if (status != PVMFSuccess)
+            status = PVMFSuccess;
+        //Continue the Init sequence now that we have the track select decision.
+        iContainer->ContinueInitAfterTrackSelectDecision();
+    }
 
     // Watch for recognizer start failure
     if (iType == ERecognizer && iCmd == ERecognizerStart && aStatus != PVMFSuccess)
@@ -3067,14 +3343,12 @@
         //Process node cancel command response
         CancelCommandDone(aResponse.GetCmdStatus(), aResponse.GetEventExtensionInterface(), aResponse.GetEventData());
     }
-#if(PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE)
     //Process Get License cancel command response.
     else if (aResponse.GetCmdId() == iCPMCancelGetLicenseCmdId
              && iCancelCmdState == EBusy)
     {
         CancelCommandDone(aResponse.GetCmdStatus(), aResponse.GetEventExtensionInterface(), aResponse.GetEventData());
     }
-#endif//PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE
     else
     {
         OSCL_ASSERT(false);//unexpected response.
diff --git a/nodes/pvdownloadmanagernode/src/pvmf_downloadmanager_node.h b/nodes/pvdownloadmanagernode/src/pvmf_downloadmanager_node.h
index c88c4d8..eab371d 100644
--- a/nodes/pvdownloadmanagernode/src/pvmf_downloadmanager_node.h
+++ b/nodes/pvdownloadmanagernode/src/pvmf_downloadmanager_node.h
@@ -93,11 +93,9 @@
 #endif
 #endif //PVMF_DOWNLOADMANAGER_SUPPORT_PPB
 
-#if(PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE)
 #ifndef PVMF_CPMPLUGIN_LICENSE_INTERFACE_H_INCLUDED
 #include "pvmf_cpmplugin_license_interface.h"
 #endif
-#endif//PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE
 
 /**
 * Node command handling
@@ -112,17 +110,14 @@
     , PVDLM_NODE_CMD_SETDATASOURCERATE
     , PVDLM_NODE_CMD_GETNODEMETADATAKEY
     , PVDLM_NODE_CMD_GETNODEMETADATAVALUE
-#if(PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE)
     , PVDLM_NODE_CMD_GET_LICENSE
     , PVDLM_NODE_CMD_GET_LICENSE_W
     , PVDLM_NODE_CMD_CANCEL_GET_LICENSE
-#endif//PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE
 };
 
 class PVMFDownloadManagerNodeCommand : public PVMFDownloadManagerNodeCommandBase
 {
     public:
-#if(PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE)
         //override the default implementation of "hipri" and add the "cancel get license"
         //command to the list of hi-priority commands.
         bool hipri()
@@ -130,7 +125,6 @@
             return PVMFDownloadManagerNodeCommandBase::hipri()
                    || iCmd == PVDLM_NODE_CMD_CANCEL_GET_LICENSE;
         }
-#endif//PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE
 
         // Constructor and parser for GetNodeMetadataKey
         void Construct(PVMFSessionId s, int32 cmd
@@ -274,7 +268,6 @@
                     break;
             }
         }
-#if(PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE)
         /* Constructor and parser for GetLicenseW */
         void Construct(PVMFSessionId s,
                        int32 cmd,
@@ -328,7 +321,6 @@
             aDataSize = (uint32)iParam3;
             aTimeoutMsec = (int32)iParam4;
         }
-#endif//PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE
 
 };
 
@@ -366,11 +358,9 @@
         //Node Command processing
         PVMFCommandId iCmdId;
 
-#if(PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE)
         //License Command Processing
         PVMFCommandId iCPMGetLicenseCmdId;
         PVMFCommandId iCPMCancelGetLicenseCmdId;
-#endif //PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE
 
         enum CmdState
         {
@@ -411,13 +401,11 @@
             //Recognizer module commands
             , ERecognizerStart = 24
             , ERecognizerClose = 25
-#if(PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE)
             //License commands.
             , ECPMQueryLicenseInterface = 26
             , ECPMGetLicense = 27
             , ECPMGetLicenseW = 28
             , ECPMCancelGetLicense = 29
-#endif//PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE
         };
 
         int32 iCmd;
@@ -465,9 +453,7 @@
             iFormatProgDownloadSupport = NULL;
             iDownloadProgress = NULL;
             iNode = NULL;
-#if(PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE)
             iLicenseInterface = NULL;
-#endif//PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE
         }
 
         ~PVMFDownloadManagerSubNodeContainer()
@@ -494,9 +480,7 @@
         PVInterface* iDownloadProgress;
         PVInterface* iDataSourcePlayback;
         PVInterface* iDatastreamUser;
-#if(PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE)
         PVInterface* iLicenseInterface;
-#endif//PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE
 
         PVMFDataSourceInitializationExtensionInterface *DataSourceInit()
         {
@@ -530,12 +514,10 @@
         {
             return (PvmfDataSourcePlaybackControlInterface*)iDataSourcePlayback;
         }
-#if(PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE)
         PVMFCPMPluginLicenseInterface* LicenseInterface()
         {
             return (PVMFCPMPluginLicenseInterface*)iLicenseInterface;
         }
-#endif //PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE
 
         //Node event observers
         void HandleNodeErrorEvent(const PVMFAsyncEvent& aEvent);
@@ -626,9 +608,7 @@
             , public PvmfDataSourcePlaybackControlInterface
             , public PVMFMetadataExtensionInterface
             , public PVMFDataSourceNodeRegistryInitInterface
-#if(PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE)
             , public PVMFCPMPluginLicenseInterface
-#endif//PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE
             // For observing the playback clock states
             , public PVMFMediaClockStateObserver
 {
@@ -754,7 +734,6 @@
         void ClockStateUpdated();
         void NotificationsInterfaceDestroyed();
 
-#if(PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE)
         /* From PVMFCPMPluginLicenseInterface */
         PVMFStatus GetLicenseURL(PVMFSessionId aSessionId,
                                  OSCL_wString& aContentName,
@@ -794,7 +773,6 @@
         PVMFCommandId CancelGetLicense(PVMFSessionId aSessionId
                                        , PVMFCommandId aCmdId
                                        , OsclAny* aContextData);
-#endif //PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE
 
     private:
         bool iDebugMode;
@@ -935,17 +913,19 @@
         bool iParserInit;//set when file parse sequence is initiated.
         bool iDataReady;//set when initial data ready is received or generated.
         bool iDownloadComplete;//set when DL is complete.
-
+        bool iMovieAtomComplete;//set when movie atom DL complete for fast-track.
+        bool iNoPETrackSelect;//set after deciding that PE cannot to track selection.
+        bool iParserInitAfterMovieAtom;
+        bool iParserPrepareAfterMovieAtom;
 
         bool iRecognizerError;//set when recognizer fails.
         PVMFStatus iRecognizerStartStatus;
 
-#if(PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE)
         bool iInitFailedLicenseRequired; //set when PVMFErrLicenseRequired failed
-#endif//PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE
 
         void ContinueInitAfterTrackSelectDecision();
         void ContinueFromDownloadTrackSelectionPoint();
+        void ContinueAfterMovieAtom();
 
         PVMFNodeInterface* CreateParser();
 
@@ -986,13 +966,11 @@
         // HTTP Content-Type header MIME string hint from the server
         OSCL_HeapString<OsclMemAllocator> iContentTypeMIMEString;
 
-#if(PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE)
         PVMFStatus DoGetLicense(PVMFDownloadManagerNodeCommand& aCmd,
                                 bool aWideCharVersion = false);
         void CompleteGetLicense();
 
         PVMFStatus DoCancelGetLicense(PVMFDownloadManagerNodeCommand& aCmd);
-#endif//PVMF_DOWNLOADMANAGER_SUPPORT_CPM_GETLICENSE
 };
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -1011,5 +989,20 @@
 // The number of characters to allocate for the key string
 #define DLMCONFIG_KEYSTRING_SIZE 128
 
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Constants for setting up socket mem pool for progressive playback and shoutcast
+// These constants are not tunables.
+//
+///////////////////////////////////////////////////////////////////////////////
+#define PVMF_DOWNLOADMANAGER_TCP_BUFFER_SIZE_FOR_SC		1500
+#define PVMF_DOWNLOADMANAGER_TCP_BUFFER_SIZE_FOR_PPB	64000
+#define PVMF_DOWNLOADMANAGER_TCP_BUFFER_NOT_AVAILABLE	2
+#define PVMF_DOWNLOADMANAGER_TCP_BUFFER_OVERHEAD		64
+#define PVMF_DOWNLOADMANAGER_TCP_AVG_SMALL_PACKET_SIZE	250
+
+
+
 #endif // PVMF_DOWNLOADMANAGER_NODE_H_INCLUDED
 
diff --git a/nodes/pvdownloadmanagernode/src/pvmf_filebufferdatastream_factory.cpp b/nodes/pvdownloadmanagernode/src/pvmf_filebufferdatastream_factory.cpp
index 5a66042..5f5fe17 100644
--- a/nodes/pvdownloadmanagernode/src/pvmf_filebufferdatastream_factory.cpp
+++ b/nodes/pvdownloadmanagernode/src/pvmf_filebufferdatastream_factory.cpp
@@ -571,7 +571,7 @@
 
     if (!iFileObject)
         return 0;  // No iFileObject to work with, return zero
-    int32 result = iFileObject->Tell();
+    int32 result = (TOsclFileOffsetInt32)iFileObject->Tell();
     LOGDEBUG((0, "PVMFFileBufferReadDataStreamImpl::GetCurrentContentPosition returning %d", result));
     return (uint32)(result);
 }
@@ -731,7 +731,7 @@
             aSessionID = 0;
             if (result == 0)
             {
-                const int32 filesize = iFileObject->Size();
+                const int32 filesize = (TOsclFileOffsetInt32)iFileObject->Size();
                 if (filesize >= 0)
                     this->iFileNumBytes = filesize;
             }
@@ -1091,7 +1091,7 @@
 
     if (!iFileObject)
         return 0;  // No iFileObject to work with, return zero
-    int32 result = iFileObject->Tell();
+    int32 result = (TOsclFileOffsetInt32)iFileObject->Tell();
     LOGDEBUG((0, "PVMFFileBufferWriteDataStreamImpl::GetCurrentContentPosition returning %d", result));
     return (uint32)(result);
 }
diff --git a/nodes/pvdownloadmanagernode/src/pvmf_memorybufferdatastream_factory.cpp b/nodes/pvdownloadmanagernode/src/pvmf_memorybufferdatastream_factory.cpp
index 1ed5c4d..585358d 100644
--- a/nodes/pvdownloadmanagernode/src/pvmf_memorybufferdatastream_factory.cpp
+++ b/nodes/pvdownloadmanagernode/src/pvmf_memorybufferdatastream_factory.cpp
@@ -71,7 +71,7 @@
 PVMFMemoryBufferReadDataStreamFactoryImpl::CreatePVMFCPMPluginAccessInterface(PVUuid& aUuid)
 {
     // Create a new PVMFMemoryBufferReadDataStreamFactoryImpl for each request
-    // Can have up to PV_MB_MAX_NUMBER_OF_READ_CONNECTIONS connections
+    // Can have up to PV_MBDS_MAX_NUMBER_OF_READ_CONNECTIONS connections
     if (aUuid == PVMIDataStreamSyncInterfaceUuid)
     {
         PVMFMemoryBufferReadDataStreamImpl* ReadStream = NULL;
@@ -136,7 +136,7 @@
 //////////////////////////////////////////////////////////////////////
 OSCL_EXPORT_REF
 PVMFMemoryBufferWriteDataStreamFactoryImpl::PVMFMemoryBufferWriteDataStreamFactoryImpl(PVMFMemoryBufferDataStreamTempCache* aTempCache,
-        PVMFMemoryBufferDataStreamPermCache* aPermCache)
+        PVMFMemoryBufferDataStreamPermCache* aPermCache, MBDSStreamFormat aStreamFormat, uint32 aTempCacheCapacity)
 {
     // Init to NULL for later creation in CreatePVMFCPMPluginAccessInterface()
     iWriteDataStream = NULL;
@@ -144,6 +144,8 @@
     iTempCache = aTempCache;
     iPermCache = aPermCache;
     iDownloadComplete = false;
+    iStreamFormat = aStreamFormat;
+    iTempCacheCapacity = aTempCacheCapacity;
 }
 
 OSCL_EXPORT_REF
@@ -171,7 +173,7 @@
         if (!iWriteDataStream)
         {
             // It does not exist so allocate
-            iWriteDataStream = OSCL_NEW(PVMFMemoryBufferWriteDataStreamImpl, (iTempCache, iPermCache));
+            iWriteDataStream = OSCL_NEW(PVMFMemoryBufferWriteDataStreamImpl, (iTempCache, iPermCache, iStreamFormat, iTempCacheCapacity));
             if (iWriteDataStream == NULL)
             {
                 OSCL_LEAVE(OsclErrNoMemory);
@@ -199,7 +201,6 @@
     iWriteDataStream->NotifyDownloadComplete();
 }
 
-
 //////////////////////////////////////////////////////////////////////
 // PVMFMemoryBufferReadDataStreamImpl
 //////////////////////////////////////////////////////////////////////
@@ -507,8 +508,8 @@
             // First byte not in the temp cache
             // Find out if it is on route to the cache, if so, no need to send reposition request
             // But if the cache is full, we need to send reposition request
-            if ((firstByteToRead < firstTempByteOffset) || ((firstByteToRead - lastTempByteOffset) > BYTES_TO_WAIT) ||
-                    (((firstByteToRead - lastTempByteOffset) <= BYTES_TO_WAIT) && ((lastTempByteOffset - firstTempByteOffset + 1) >= READ_BUFFER_SIZE)))
+            if ((firstByteToRead < firstTempByteOffset) || ((firstByteToRead - lastTempByteOffset) > PV_MBDS_BYTES_TO_WAIT) ||
+                    (((firstByteToRead - lastTempByteOffset) <= PV_MBDS_BYTES_TO_WAIT) && ((lastTempByteOffset - firstTempByteOffset + 1) >= iWriteDataStream->GetTempCacheCapacity())))
             {
                 LOGDEBUG((0, "PVMFMemoryBufferReadDataStreamImpl::Read Reposition first %d last %d session %d offset %d",
                           firstTempByteOffset, lastTempByteOffset, iSessionID, firstByteToRead));
@@ -736,7 +737,7 @@
                         // Check if the data for new offset will eventually come and that there is room
                         // in the cache for it. If there is no room and no more reads are issued by the parser,
                         // no buffers will be released and there will be a deadlock
-                        if ((lastTempByteOffset + capacity) > (skipTo + BYTES_TO_WAIT))
+                        if ((lastTempByteOffset + capacity) > (skipTo + PV_MBDS_BYTES_TO_WAIT))
                         {
                             // data is coming, no need to send request
                             LOGDEBUG((0, "PVMFMemoryBufferReadDataStreamImpl::Seek/Skip data is expected shortly session %d offset %d", iSessionID, skipTo));
@@ -907,14 +908,14 @@
         return PVDS_SUCCESS;
     }
     // check for upper bound, if any
-    if (PERM_CACHE_SIZE != NO_LIMIT)
+    if (PV_MBDS_PERM_CACHE_SIZE != NO_LIMIT)
     {
         // find out current perm cache size
         // want to know what has been allocated, not what has been filled
         uint32 cacheSize = iPermCache->GetCacheSize();
-        if ((cacheSize + aSize) > PERM_CACHE_SIZE)
+        if ((cacheSize + aSize) > PV_MBDS_PERM_CACHE_SIZE)
         {
-            LOGERROR((0, "PVMFMemoryBufferReadDataStreamImpl::MakePersistent exceed cache size limit cacheSize %d limit %d", cacheSize, PERM_CACHE_SIZE));
+            LOGERROR((0, "PVMFMemoryBufferReadDataStreamImpl::MakePersistent exceed cache size limit cacheSize %d limit %d", cacheSize, PV_MBDS_PERM_CACHE_SIZE));
             return PVDS_FAILURE;
         }
     }
@@ -1119,7 +1120,7 @@
 //////////////////////////////////////////////////////////////////////
 OSCL_EXPORT_REF
 PVMFMemoryBufferWriteDataStreamImpl::PVMFMemoryBufferWriteDataStreamImpl(PVMFMemoryBufferDataStreamTempCache* aTempCache,
-        PVMFMemoryBufferDataStreamPermCache* aPermCache)
+        PVMFMemoryBufferDataStreamPermCache* aPermCache, MBDSStreamFormat aStreamFormat, uint32 aTempCacheCapacity)
 {
     iDownloadComplete = false;
     iFileNumBytes = 0;
@@ -1139,8 +1140,10 @@
     // save pointer to cache
     iTempCache = aTempCache;
     iPermCache = aPermCache;
+    iStreamFormat = aStreamFormat;
+    iTempCacheCapacity = aTempCacheCapacity;
 
-    for (uint32 i = 0; i < PV_MB_MAX_NUMBER_OF_READ_CONNECTIONS; i++)
+    for (uint32 i = 0; i < PV_MBDS_MAX_NUMBER_OF_READ_CONNECTIONS; i++)
     {
         iReadNotifications[i].iReadStructValid = false;
 
@@ -1151,7 +1154,20 @@
     iWriteNotification.iOutstanding = false;
     iLogger = PVLogger::GetLoggerObject("PVMFMemoryBufferDataStream");
 
-    LOGTRACE((0, "PVMFMemoryBufferWriteDataStreamImpl::PVMFMemoryBufferWriteDataStreamImpl"));
+    // put this in the header
+    if (MBDS_STREAM_FORMAT_SHOUTCAST == iStreamFormat)
+    {
+        iTempCacheTrimThreshold = PV_MBDS_TEMP_CACHE_TRIM_THRESHOLD_SC(iTempCacheCapacity);
+        iTempCacheTrimMargin = PV_MBDS_TEMP_CACHE_TRIM_MARGIN_SC;
+    }
+    else
+    {
+        iTempCacheTrimThreshold = PV_MBDS_TEMP_CACHE_TRIM_THRESHOLD_PS(iTempCacheCapacity);
+        iTempCacheTrimMargin = PV_MBDS_TEMP_CACHE_TRIM_MARGIN_PS;
+    }
+
+    LOGTRACE((0, "PVMFMemoryBufferWriteDataStreamImpl::PVMFMemoryBufferWriteDataStreamImpl stream format %d temp cache size %d trim threshold %d trim margin %d",
+              iStreamFormat, iTempCacheCapacity, iTempCacheTrimThreshold, iTempCacheTrimMargin));
 }
 
 OSCL_EXPORT_REF
@@ -1161,7 +1177,7 @@
 
     // If there are read notifications outstanding, send them
     // If there are reposition request, signal the semaphores
-    for (uint32 i = 0; i < PV_MB_MAX_NUMBER_OF_READ_CONNECTIONS; i++)
+    for (uint32 i = 0; i < PV_MBDS_MAX_NUMBER_OF_READ_CONNECTIONS; i++)
     {
         if ((iReadNotifications[i].iReadStructValid == true) &&
                 (iReadNotifications[i].iOutstanding == true) &&
@@ -1265,18 +1281,18 @@
     {
         case PVDS_READ_ONLY:
             // Check to see if we have free READ connections before setting one.
-            if (iNumReadSessions < PV_MB_MAX_NUMBER_OF_READ_CONNECTIONS)
+            if (iNumReadSessions < PV_MBDS_MAX_NUMBER_OF_READ_CONNECTIONS)
             {
                 // at least one of them is free
                 bool found = false;
-                for (int i = 0; i < PV_MB_MAX_NUMBER_OF_READ_CONNECTIONS; i++)
+                for (int i = 0; i < PV_MBDS_MAX_NUMBER_OF_READ_CONNECTIONS; i++)
                 {
                     if (false == iReadFilePositions[i].iReadPositionStructValid)
                     {
                         found = true;
 
                         iReadNotifications[i].iReadStructValid = true;
-                        iReadNotifications[i].iReadSessionID = i + PV_MB_MAX_NUMBER_OF_WRITE_CONNECTIONS;
+                        iReadNotifications[i].iReadSessionID = i + PV_MBDS_MAX_NUMBER_OF_WRITE_CONNECTIONS;
                         iReadNotifications[i].iReadObserver = NULL;
                         iReadNotifications[i].iFilePosition = 0;
                         iReadNotifications[i].iReadCapacity = 0;
@@ -1393,15 +1409,15 @@
     else
     {
         // Close the READ sessions
-        if ((aSessionID > (PV_MB_MAX_NUMBER_OF_READ_CONNECTIONS + PV_MB_MAX_NUMBER_OF_WRITE_CONNECTIONS)) ||
-                (iReadFilePositions[aSessionID - PV_MB_MAX_NUMBER_OF_WRITE_CONNECTIONS].iReadPositionStructValid != true))
+        if ((aSessionID > (PV_MBDS_MAX_NUMBER_OF_READ_CONNECTIONS + PV_MBDS_MAX_NUMBER_OF_WRITE_CONNECTIONS)) ||
+                (iReadFilePositions[aSessionID - PV_MBDS_MAX_NUMBER_OF_WRITE_CONNECTIONS].iReadPositionStructValid != true))
         {
             status =  PVDS_INVALID_SESSION;
         }
         else
         {
             // Have a valid READ session so close it by setting the flag to invalid
-            PvmiDataStreamSession sessionId = aSessionID - PV_MB_MAX_NUMBER_OF_WRITE_CONNECTIONS;
+            PvmiDataStreamSession sessionId = aSessionID - PV_MBDS_MAX_NUMBER_OF_WRITE_CONNECTIONS;
 
             if (sessionId == iRepositionRequest.iRepositionSessionID)
             {
@@ -1478,13 +1494,13 @@
 
     //  Check that aSessionID is valid and is not the WRITE session
     if ((aSessionID == 0) ||
-            (aSessionID > (PV_MB_MAX_NUMBER_OF_READ_CONNECTIONS + PV_MB_MAX_NUMBER_OF_WRITE_CONNECTIONS)) ||
-            (iReadNotifications[aSessionID - PV_MB_MAX_NUMBER_OF_WRITE_CONNECTIONS].iReadStructValid != true))
+            (aSessionID > (PV_MBDS_MAX_NUMBER_OF_READ_CONNECTIONS + PV_MBDS_MAX_NUMBER_OF_WRITE_CONNECTIONS)) ||
+            (iReadNotifications[aSessionID - PV_MBDS_MAX_NUMBER_OF_WRITE_CONNECTIONS].iReadStructValid != true))
     {
         OSCL_LEAVE(OsclErrArgument);
     }
-    // Read SessionID index is PV_MB_MAX_NUMBER_OF_WRITE_CONNECTIONS less than the aSessionID passed in
-    PvmiDataStreamSession temp_session = aSessionID - PV_MB_MAX_NUMBER_OF_WRITE_CONNECTIONS;
+    // Read SessionID index is PV_MBDS_MAX_NUMBER_OF_WRITE_CONNECTIONS less than the aSessionID passed in
+    PvmiDataStreamSession temp_session = aSessionID - PV_MBDS_MAX_NUMBER_OF_WRITE_CONNECTIONS;
 
     // Save the read notification
     iReadNotifications[temp_session].iOutstanding = true;
@@ -1507,7 +1523,7 @@
     // return the number of bytes left in the sliding window that can be filled
     // only support writing to the temp cache right now
     // the perm cache is filled by copyig from the temp cache
-    aCapacity = (iTempCache->GetTotalBytes() >= READ_BUFFER_SIZE) ? 0 : READ_BUFFER_SIZE - (iTempCache->GetTotalBytes());
+    aCapacity = (iTempCache->GetTotalBytes() >= iTempCacheCapacity) ? 0 : iTempCacheCapacity - (iTempCache->GetTotalBytes());
 
     LOGTRACE((0, "PVMFMemoryBufferWriteDataStreamImpl::QueryWriteCapacity returning %d", aCapacity));
 
@@ -1589,8 +1605,8 @@
             iWriteNotification.iCommandID = 0;
         }
     }
-    else if ((aSessionID > (PV_MB_MAX_NUMBER_OF_READ_CONNECTIONS + PV_MB_MAX_NUMBER_OF_WRITE_CONNECTIONS)) ||
-             (iReadNotifications[aSessionID - PV_MB_MAX_NUMBER_OF_WRITE_CONNECTIONS].iReadStructValid != true))
+    else if ((aSessionID > (PV_MBDS_MAX_NUMBER_OF_READ_CONNECTIONS + PV_MBDS_MAX_NUMBER_OF_WRITE_CONNECTIONS)) ||
+             (iReadNotifications[aSessionID - PV_MBDS_MAX_NUMBER_OF_WRITE_CONNECTIONS].iReadStructValid != true))
     {
         // Cancel read notification
         // Check that aSessionID is valid
@@ -1599,7 +1615,7 @@
     else
     {
         // Zero out notification info
-        PvmiDataStreamSession temp_sessionID = aSessionID - PV_MB_MAX_NUMBER_OF_WRITE_CONNECTIONS;
+        PvmiDataStreamSession temp_sessionID = aSessionID - PV_MBDS_MAX_NUMBER_OF_WRITE_CONNECTIONS;
         iReadNotifications[temp_sessionID].iOutstanding = false;
         iReadNotifications[temp_sessionID].iReadObserver = NULL;
         iReadNotifications[temp_sessionID].iFilePosition = 0;
@@ -1847,7 +1863,7 @@
 
     //  Check that aSessionID is valid and is not the WRITE session
     if ((aSessionID == 0) ||
-            (aSessionID > (PV_MB_MAX_NUMBER_OF_READ_CONNECTIONS + PV_MB_MAX_NUMBER_OF_WRITE_CONNECTIONS)))
+            (aSessionID > (PV_MBDS_MAX_NUMBER_OF_READ_CONNECTIONS + PV_MBDS_MAX_NUMBER_OF_WRITE_CONNECTIONS)))
     {
         status = PVDS_FAILURE;
         return status;
@@ -1870,7 +1886,7 @@
             uint32 firstPersistentOffset = 0;
             uint32 lastPersistentOffset = 0;
             iPermCache->GetPermOffsets(firstPersistentOffset, lastPersistentOffset);
-            for (int32 i = 0; i < PV_MB_MAX_NUMBER_OF_READ_CONNECTIONS; i++)
+            for (int32 i = 0; i < PV_MBDS_MAX_NUMBER_OF_READ_CONNECTIONS; i++)
             {
                 if ((iReadFilePositions[i].iReadPositionStructValid == true) && (iReadFilePositions[i].iInTempCache == true))
                 {
@@ -1901,7 +1917,7 @@
             if ((smallest >= iFilePtrPos) &&
                     (iFilePtrPos + PV_MBDS_FWD_SEEKING_NO_GET_REQUEST_THRESHOLD > smallest) &&
                     ((writeCap != 0) && ((smallest - iFilePtrPos) < writeCap)) &&
-                    (iAVTOffsetDelta < READ_BUFFER_SIZE))
+                    (iAVTOffsetDelta < iTempCacheCapacity))
             {
                 //LOGE("Ln %d Do nothing. found %d smalltest %d", __LINE__, found, smallest );
                 return status;
@@ -1958,9 +1974,9 @@
                         iPermCache->GetFileOffsets(firstPermByteOffset, lastPermByteOffset);
 
                         // should never reposition outside of the temp cache
-                        if (aOffset >= lastPermByteOffset + 64000)
+                        if (aOffset >= lastPermByteOffset + PV_MBDS_TEMP_CACHE_TRIM_MARGIN_PS)
                         {
-                            iRepositionRequest.iNewFilePosition = aOffset - 64000;
+                            iRepositionRequest.iNewFilePosition = aOffset - PV_MBDS_TEMP_CACHE_TRIM_MARGIN_PS;
                         }
                         else
                         {
@@ -1972,9 +1988,9 @@
                 if (!hasPerm)
                 {
                     // add the margin
-                    if (aOffset > 64000)
+                    if (aOffset > PV_MBDS_TEMP_CACHE_TRIM_MARGIN_PS)
                     {
-                        iRepositionRequest.iNewFilePosition = aOffset - 64000;
+                        iRepositionRequest.iNewFilePosition = aOffset - PV_MBDS_TEMP_CACHE_TRIM_MARGIN_PS;
                     }
                     else
                     {
@@ -2005,8 +2021,8 @@
             iRepositionRequest.iRequestCompleted = false;
             iRepositionRequest.iSuccess = PVDS_PENDING;
 
-            // Read SessionID index is PV_MB_MAX_NUMBER_OF_WRITE_CONNECTIONS less than the aSessionID passed in
-            iRepositionRequest.iRepositionSessionID = aSessionID - PV_MB_MAX_NUMBER_OF_WRITE_CONNECTIONS;
+            // Read SessionID index is PV_MBDS_MAX_NUMBER_OF_WRITE_CONNECTIONS less than the aSessionID passed in
+            iRepositionRequest.iRepositionSessionID = aSessionID - PV_MBDS_MAX_NUMBER_OF_WRITE_CONNECTIONS;
 
             PvmiDataStreamCommandId cmdId = 0;
             int32 error = 0;
@@ -2061,7 +2077,7 @@
         // Empty cache and return mem buffers to writer
         // It doesn't matter if there are read sessions still open
         // subsequent reads will fail
-        for (int32 i = 0; i < PV_MB_MAX_NUMBER_OF_READ_CONNECTIONS; i++)
+        for (int32 i = 0; i < PV_MBDS_MAX_NUMBER_OF_READ_CONNECTIONS; i++)
         {
             if (true == iReadFilePositions[i].iReadPositionStructValid)
             {
@@ -2161,10 +2177,10 @@
 OSCL_EXPORT_REF uint32
 PVMFMemoryBufferWriteDataStreamImpl::QueryBufferingCapacity()
 {
-    LOGTRACE((0, "PVMFMemoryBufferWriteDataStreamImpl::QueryBufferingCapacity returning %d", READ_BUFFER_SIZE));
+    LOGTRACE((0, "PVMFMemoryBufferWriteDataStreamImpl::QueryBufferingCapacity returning %d", iTempCacheCapacity));
 
     // return the minimum size of the cache/sliding window
-    return READ_BUFFER_SIZE;
+    return iTempCacheCapacity;
 }
 
 OSCL_EXPORT_REF PvmiDataStreamStatus
@@ -2187,7 +2203,7 @@
     {
         // go through the temp cache looking for the id's of the audio/video/text sessions
         PvmiDataStreamSession avtFirst = 0, avtSecond = 0, avtThird = 0;
-        for (int32 i = 0; i < PV_MB_MAX_NUMBER_OF_READ_CONNECTIONS; i++)
+        for (int32 i = 0; i < PV_MBDS_MAX_NUMBER_OF_READ_CONNECTIONS; i++)
         {
             if ((iReadFilePositions[i].iReadPositionStructValid == true) && (iReadFilePositions[i].iInTempCache == true))
             {
@@ -2218,15 +2234,15 @@
 
     PvmiDataStreamStatus status = PVDS_SUCCESS;
     if ((aSessionID == 0) ||
-            (aSessionID > (PV_MB_MAX_NUMBER_OF_READ_CONNECTIONS + PV_MB_MAX_NUMBER_OF_WRITE_CONNECTIONS)) ||
-            (iReadFilePositions[aSessionID - PV_MB_MAX_NUMBER_OF_WRITE_CONNECTIONS].iReadPositionStructValid != true))
+            (aSessionID > (PV_MBDS_MAX_NUMBER_OF_READ_CONNECTIONS + PV_MBDS_MAX_NUMBER_OF_WRITE_CONNECTIONS)) ||
+            (iReadFilePositions[aSessionID - PV_MBDS_MAX_NUMBER_OF_WRITE_CONNECTIONS].iReadPositionStructValid != true))
     {
         LOGERROR((0, "PVMFMemoryBufferWriteDataStreamImpl::SetReadPointerPosition invalid session %d", aSessionID));
         status = PVDS_FAILURE;
     }
     else
     {
-        PvmiDataStreamSession index = aSessionID - PV_MB_MAX_NUMBER_OF_WRITE_CONNECTIONS;
+        PvmiDataStreamSession index = aSessionID - PV_MBDS_MAX_NUMBER_OF_WRITE_CONNECTIONS;
         iReadFilePositions[index].iReadFilePtr = aFilePosition;
 
         // Once MakePersistent has been called
@@ -2288,15 +2304,15 @@
 
     PvmiDataStreamStatus status = PVDS_SUCCESS;
     if ((aSessionID == 0) ||
-            (aSessionID > (PV_MB_MAX_NUMBER_OF_READ_CONNECTIONS + PV_MB_MAX_NUMBER_OF_WRITE_CONNECTIONS)) ||
-            (iReadFilePositions[aSessionID - PV_MB_MAX_NUMBER_OF_WRITE_CONNECTIONS].iReadPositionStructValid != true))
+            (aSessionID > (PV_MBDS_MAX_NUMBER_OF_READ_CONNECTIONS + PV_MBDS_MAX_NUMBER_OF_WRITE_CONNECTIONS)) ||
+            (iReadFilePositions[aSessionID - PV_MBDS_MAX_NUMBER_OF_WRITE_CONNECTIONS].iReadPositionStructValid != true))
     {
         LOGERROR((0, "PVMFMemoryBufferWriteDataStreamImpl::SetReadPointerCacheLocation invalid session %d", aSessionID));
         status = PVDS_FAILURE;
     }
     else
     {
-        PvmiDataStreamSession index = aSessionID - PV_MB_MAX_NUMBER_OF_WRITE_CONNECTIONS;
+        PvmiDataStreamSession index = aSessionID - PV_MBDS_MAX_NUMBER_OF_WRITE_CONNECTIONS;
         iReadFilePositions[index].iInTempCache = aInTempCache;
     }
     LOGTRACE((0, "PVMFMemoryBufferWriteDataStreamImpl::SetReadPointerCacheLocation returning %d", status));
@@ -2315,7 +2331,7 @@
     // download has completed
 
     uint32 currFilePosition = iFilePtrPos;
-    for (uint32 i = 0; i < PV_MB_MAX_NUMBER_OF_READ_CONNECTIONS; i++)
+    for (uint32 i = 0; i < PV_MBDS_MAX_NUMBER_OF_READ_CONNECTIONS; i++)
     {
         // Make sure it a valid iReadNotifications element
         //  AND the iReadObserver != NULL
@@ -2381,7 +2397,7 @@
     }
 
     // for debug only
-    for (int32 j = 0; j < PV_MB_MAX_NUMBER_OF_READ_CONNECTIONS; j++)
+    for (int32 j = 0; j < PV_MBDS_MAX_NUMBER_OF_READ_CONNECTIONS; j++)
     {
         LOGDEBUG((0, "PVMFMemoryBufferWriteDataStreamImpl::ManageCache session %d valid %d cache %d ptr %d",
                   j + 1, iReadFilePositions[j].iReadPositionStructValid, iReadFilePositions[j].iInTempCache, iReadFilePositions[j].iReadFilePtr));
@@ -2422,7 +2438,7 @@
     bool found = false;
     bool trim = false;
     uint32 smallest = 0xFFFFFFFF;
-    for (int32 i = 0; i < PV_MB_MAX_NUMBER_OF_READ_CONNECTIONS; i++)
+    for (int32 i = 0; i < PV_MBDS_MAX_NUMBER_OF_READ_CONNECTIONS; i++)
     {
         if ((iReadFilePositions[i].iReadPositionStructValid == true) && (iReadFilePositions[i].iInTempCache == true))
         {
@@ -2462,22 +2478,22 @@
 
     if ((0xFFFFFFFF != smallest) && !trim)
     {
-        // Put in a 64000 buffer zone at the beginning of cache
+        // Put in a buffer zone at the beginning of cache (64000 for PS and 4096 for Shoutcast)
         // If there is less than 64000 at the beginning, don't touch the cache
         // This is important in case there are other read sessions (audio, video, text) that have not yet been opened,
         // don't want to throw away any media data that may be needed later
-        if ((smallest - firstTempByteOffset) <= 64000)
+        if ((smallest - firstTempByteOffset) <= iTempCacheTrimMargin)
         {
-            LOGDEBUG((0, "PVMFMemoryBufferWriteDataStreamImpl::ManageCache leaving a 64000 zone, do nothing"));
+            LOGDEBUG((0, "PVMFMemoryBufferWriteDataStreamImpl::ManageCache leaving a %d zone, do nothing", iTempCacheTrimMargin));
             return;
         }
         else
         {
-            smallest -= 64000;
+            smallest -= iTempCacheTrimMargin;
         }
     }
 
-    while ((0 != iTempCache->GetNumEntries()) && (trim || (iTempCache->GetTotalBytes() > (READ_BUFFER_TRIM_THRESHOLD + READ_BUFFER_MARGIN))))
+    while ((0 != iTempCache->GetNumEntries()) && (trim || (iTempCache->GetTotalBytes() > (iTempCacheTrimThreshold))))
     {
         // Check if any read pointers are pointing to this frag
         uint32 size = 0;
@@ -2488,7 +2504,7 @@
         {
             // this entire fragment is below the zone and can be released if no read pointers are in it
             found = true;
-            for (int32 i = 0; i < PV_MB_MAX_NUMBER_OF_READ_CONNECTIONS; i++)
+            for (int32 i = 0; i < PV_MBDS_MAX_NUMBER_OF_READ_CONNECTIONS; i++)
             {
                 if ((iReadFilePositions[i].iReadPositionStructValid == true) && (iReadFilePositions[i].iInTempCache == true))
                 {
@@ -2577,7 +2593,7 @@
             uint32 offset = 0;
             iTempCache->GetFirstEntryInfo(offset, size);
 
-            for (int i = 0; i < PV_MB_MAX_NUMBER_OF_READ_CONNECTIONS; i++)
+            for (int i = 0; i < PV_MBDS_MAX_NUMBER_OF_READ_CONNECTIONS; i++)
             {
                 if ((true == iReadFilePositions[i].iReadPositionStructValid) &&
                         (iReadFilePositions[i].iInTempCache == true) &&
@@ -2612,14 +2628,14 @@
     {
         // Trim from the end, up to 1/2 of max cache size
         while (((MBDS_CACHE_TRIM_HEAD_AND_TAIL == aTrimMode) && (iTempCache->GetNumEntries() > 0)) ||
-                ((MBDS_CACHE_TRIM_TAIL_ONLY == aTrimMode) && (iTempCache->GetTotalBytes() > (READ_BUFFER_SIZE >> 1))))
+                ((MBDS_CACHE_TRIM_TAIL_ONLY == aTrimMode) && (iTempCache->GetTotalBytes() > (iTempCacheCapacity >> 1))))
         {
             bool releaseBuf = true;
             uint32 size = 0;
             uint32 offset = 0;
             iTempCache->GetLastEntryInfo(offset, size);
 
-            for (int i = 0; i < PV_MB_MAX_NUMBER_OF_READ_CONNECTIONS; i++)
+            for (int i = 0; i < PV_MBDS_MAX_NUMBER_OF_READ_CONNECTIONS; i++)
             {
                 if ((true == iReadFilePositions[i].iReadPositionStructValid) &&
                         (iReadFilePositions[i].iInTempCache == true) &&
@@ -2663,7 +2679,7 @@
     uint32 lastOffset = 0;
     iPermCache->GetFileOffsets(firstOffset, lastOffset);
 
-    for (int32 i = 0; i < PV_MB_MAX_NUMBER_OF_READ_CONNECTIONS; i++)
+    for (int32 i = 0; i < PV_MBDS_MAX_NUMBER_OF_READ_CONNECTIONS; i++)
     {
         if ((true == iReadFilePositions[i].iReadPositionStructValid) && (true == iReadFilePositions[i].iInTempCache))
         {
@@ -2696,18 +2712,49 @@
     return iMadePersistent;
 }
 
+OSCL_EXPORT_REF void
+PVMFMemoryBufferWriteDataStreamImpl::SetStreamFormat(MBDSStreamFormat aStreamFormat)
+{
+    iStreamFormat = aStreamFormat;
+}
+
+OSCL_EXPORT_REF void
+PVMFMemoryBufferWriteDataStreamImpl::SetTempCacheCapacity(uint32 aCapacity)
+{
+    iTempCacheCapacity = aCapacity;
+}
+
+OSCL_EXPORT_REF MBDSStreamFormat
+PVMFMemoryBufferWriteDataStreamImpl::GetStreamFormat()
+{
+    return iStreamFormat;
+}
+
+OSCL_EXPORT_REF uint32
+PVMFMemoryBufferWriteDataStreamImpl::GetTempCacheCapacity()
+{
+    return iTempCacheCapacity;
+}
+
 //////////////////////////////////////////////////////////////////////
 // PVMFMemoryBufferDataStream
 //////////////////////////////////////////////////////////////////////
 OSCL_EXPORT_REF
-PVMFMemoryBufferDataStream::PVMFMemoryBufferDataStream()
+PVMFMemoryBufferDataStream::PVMFMemoryBufferDataStream(PVMFFormatType& aStreamFormat, uint32 aTempCacheCapacity)
 {
     // Create a temporary cache and a permanent cache
     iTemporaryCache = OSCL_NEW(PVMFMemoryBufferDataStreamTempCache, ());
     iPermanentCache = OSCL_NEW(PVMFMemoryBufferDataStreamPermCache, ());
 
+    // set the stream format and the temp cache size
+    MBDSStreamFormat streamFormat = MBDS_STREAM_FORMAT_PROGRESSIVE_PLAYBACK;
+    if (aStreamFormat == PVMF_MIME_DATA_SOURCE_SHOUTCAST_URL)
+    {
+        streamFormat = MBDS_STREAM_FORMAT_SHOUTCAST;
+    }
+
     // Create the two factories
-    iWriteDataStreamFactory = OSCL_NEW(PVMFMemoryBufferWriteDataStreamFactoryImpl, (iTemporaryCache, iPermanentCache));
+    iWriteDataStreamFactory = OSCL_NEW(PVMFMemoryBufferWriteDataStreamFactoryImpl, (iTemporaryCache, iPermanentCache, streamFormat, aTempCacheCapacity));
     iReadDataStreamFactory = OSCL_NEW(PVMFMemoryBufferReadDataStreamFactoryImpl, (iTemporaryCache, iPermanentCache));
 
     // Now create a iWriteDataStream
@@ -3118,15 +3165,6 @@
 }
 
 
-uint32
-PVMFMemoryBufferDataStreamTempCache::GetCacheSize()
-{
-    LOGTRACE((0, "PVMFMemoryBufferDataStreamTempCache::GetCacheSize %d", READ_BUFFER_SIZE));
-    // return max cache size
-    return READ_BUFFER_SIZE;
-}
-
-
 //////////////////////////////////////////////////////////////////////
 // PVMFMemoryBufferDataStreamPermCache
 //////////////////////////////////////////////////////////////////////
diff --git a/nodes/pvfileoutputnode/include/pvmf_fileoutput_config.h b/nodes/pvfileoutputnode/include/pvmf_fileoutput_config.h
index d6bda9c..482d0f2 100644
--- a/nodes/pvfileoutputnode/include/pvmf_fileoutput_config.h
+++ b/nodes/pvfileoutputnode/include/pvmf_fileoutput_config.h
@@ -77,6 +77,14 @@
          * @return Completion status of this method.
          */
         virtual PVMFStatus SetOutputFileName(const OSCL_wString& aFileName) = 0;
+        /**
+         * This method sets the output file handle. This method must be called before
+         * Start() is called.
+         *
+         * @param aFileHandle Output file descriptor
+         * @return Completion status of this method.
+         */
+        virtual PVMFStatus SetOutputFileDescriptor(const OsclFileHandle* aFileHandle) = 0;
 
 };
 
diff --git a/nodes/pvfileoutputnode/src/pvmf_fileoutput_inport.cpp b/nodes/pvfileoutputnode/src/pvmf_fileoutput_inport.cpp
index f72d474..f583f4f 100644
--- a/nodes/pvfileoutputnode/src/pvmf_fileoutput_inport.cpp
+++ b/nodes/pvfileoutputnode/src/pvmf_fileoutput_inport.cpp
@@ -266,6 +266,7 @@
 bool PVMFFileOutputInPort::IsFormatSupported(PVMFFormatType aFmt)
 {
     if ((aFmt == PVMF_MIME_AMR_IETF) ||
+            (aFmt == PVMF_MIME_AMRWB_IETF) ||
             (aFmt == PVMF_MIME_AMR) ||
             (aFmt == PVMF_MIME_AMR_IF2) ||
             (aFmt == PVMF_MIME_ADTS) ||
@@ -342,7 +343,7 @@
 
     if (pv_mime_strcmp(identifier, INPUT_FORMATS_CAP_QUERY) == 0)
     {
-        num_parameter_elements = 16;
+        num_parameter_elements = 17;
         status = AllocateKvp(parameters, (PvmiKeyType)INPUT_FORMATS_VALTYPE, num_parameter_elements);
         if (status != PVMFSuccess)
         {
@@ -366,6 +367,7 @@
             parameters[13].value.pChar_value = (char*)PVMF_MIME_H264_VIDEO_MP4;
             parameters[14].value.pChar_value = (char*)PVMF_MIME_H264_VIDEO;
             parameters[15].value.pChar_value = (char*)PVMF_MIME_3GPP_TIMEDTEXT;
+            parameters[16].value.pChar_value = (char*)PVMF_MIME_AMRWB_IETF;
         }
     }
     else if (pv_mime_strcmp(identifier, INPUT_FORMATS_CUR_QUERY) == 0)
diff --git a/nodes/pvfileoutputnode/src/pvmf_fileoutput_node.cpp b/nodes/pvfileoutputnode/src/pvmf_fileoutput_node.cpp
index 17dd8ab..64522d5 100644
--- a/nodes/pvfileoutputnode/src/pvmf_fileoutput_node.cpp
+++ b/nodes/pvfileoutputnode/src/pvmf_fileoutput_node.cpp
@@ -36,6 +36,7 @@
         : OsclActiveObject(aPriority, "PVMFFileOutputNode")
         , iCmdIdCounter(0)
         , iInPort(NULL)
+        , iFileHandle(NULL)
         , iFileOpened(0)
         , iFirstMediaData(false)
         , iLogger(NULL)
@@ -220,6 +221,7 @@
     else
     {
         iCapability.iInputFormatCapability.push_back(PVMF_MIME_AMR_IETF);
+        iCapability.iInputFormatCapability.push_back(PVMF_MIME_AMRWB_IETF);
         iCapability.iInputFormatCapability.push_back(PVMF_MIME_M4V);
         iCapability.iInputFormatCapability.push_back(PVMF_MIME_PCM8);
         iCapability.iInputFormatCapability.push_back(PVMF_MIME_PCM16);
@@ -430,6 +432,35 @@
     return PVMFSuccess;
 }
 
+///////////////////////////////////////////////////////////////////////////
+PVMFStatus PVMFFileOutputNode::SetOutputFileDescriptor(const OsclFileHandle* aFileHandle)
+{
+    if (iInterfaceState != EPVMFNodeIdle
+            && iInterfaceState != EPVMFNodeInitialized
+            && iInterfaceState != EPVMFNodeCreated
+            && iInterfaceState != EPVMFNodePrepared)
+        return false;
+
+    iOutputFile.SetPVCacheSize(0);
+    iOutputFile.SetAsyncReadBufferSize(0);
+    iOutputFile.SetNativeBufferSize(0);
+    iOutputFile.SetLoggingEnable(false);
+    iOutputFile.SetSummaryStatsLoggingEnable(false);
+    iOutputFile.SetFileHandle((OsclFileHandle*)aFileHandle);
+
+    //call open
+    int32 retval = iOutputFile.Open(_STRLIT_CHAR("dummy"),
+                                    Oscl_File::MODE_READWRITE | Oscl_File::MODE_BINARY,
+                                    iFs);
+
+    if (retval == 0)
+    {
+        iFileOpened = 1;
+        iFirstMediaData = true;
+        return PVMFSuccess;
+    }
+    return PVMFFailure;
+}
 ////////////////////////////////////////////////////////////////////////////
 PVMFStatus PVMFFileOutputNode::SetMaxFileSize(bool aEnable, uint32 aMaxFileSizeBytes)
 {
@@ -866,6 +897,24 @@
             }
             iFirstMediaData = false;
         }
+        // Add the amr-wb header if required
+        else if (((PVMFFileOutputInPort*)iInPort)->iFormat == PVMF_MIME_AMRWB_IETF)
+        {
+            // Check if the incoming data has "#!AMR-WB\n" string
+            if (aSize < AMRWB_HEADER_SIZE ||
+                    oscl_strncmp((const char*)aPtr, AMRWB_HEADER, AMRWB_HEADER_SIZE) != 0)
+            {
+                // AMR header not found, add AMR header to file first
+                status = WriteData((OsclAny*)AMRWB_HEADER, AMRWB_HEADER_SIZE);
+                if (status != PVMFSuccess)
+                {
+                    PVLOGGER_LOGMSG(PVLOGMSG_INST_REL, iLogger, PVLOGMSG_ERR,
+                                    (0, "PVMFFileOutputNode::WriteFormatSpecificInfo: Error - WriteData failed"));
+                    return status;
+                }
+            }
+            iFirstMediaData = false;
+        }
         else if (((PVMFFileOutputInPort*)iInPort)->iFormat == PVMF_MIME_M4V)
         {
             if (aSize > 0)
diff --git a/nodes/pvfileoutputnode/src/pvmf_fileoutput_node.h b/nodes/pvfileoutputnode/src/pvmf_fileoutput_node.h
index 8e56641..1e6a1e1 100644
--- a/nodes/pvfileoutputnode/src/pvmf_fileoutput_node.h
+++ b/nodes/pvfileoutputnode/src/pvmf_fileoutput_node.h
@@ -82,6 +82,10 @@
 #define	AMR_HEADER		"#!AMR\n"
 #define AMR_HEADER_SIZE	6
 
+// Macros for AMR-WB header
+#define	AMRWB_HEADER		"#!AMR-WB\n"
+#define AMRWB_HEADER_SIZE	9
+
 ////////////////////////////////////////////////////////////////////////////
 class PVMFFileOutputAlloc : public Oscl_DefAlloc
 {
@@ -207,6 +211,7 @@
 
         // Pure virtual from PvmfFileOutputNodeConfigInterface
         PVMFStatus SetOutputFileName(const OSCL_wString& aFileName);
+        PVMFStatus SetOutputFileDescriptor(const OsclFileHandle* aFileHandle);
 
         // Pure virtual from PvmfComposerSizeAndDurationInterface
         PVMFStatus SetMaxFileSize(bool aEnable, uint32 aMaxFileSizeBytes);
@@ -376,6 +381,7 @@
 
         // Output file name
         OSCL_wHeapString<OsclMemAllocator> iOutputFileName;
+        OsclFileHandle* iFileHandle;
 
         // Allocator
         Oscl_DefAlloc* iAlloc;
diff --git a/nodes/pvmediainputnode/include/pvmf_media_input_node_events.h b/nodes/pvmediainputnode/include/pvmf_media_input_node_events.h
index d2899f7..07c2080 100644
--- a/nodes/pvmediainputnode/include/pvmf_media_input_node_events.h
+++ b/nodes/pvmediainputnode/include/pvmf_media_input_node_events.h
@@ -64,6 +64,7 @@
     , PvmfMediaInputNodeErr_MediaIOStart
     , PvmfMediaInputNodeErr_MediaIOPause
     , PvmfMediaInputNodeErr_MediaIOStop
+    , PvmfMediaInputNodeErr_MediaIOReset
     , PvmfMediaInputNodeErr_MediaIOFlush
     , PvmfMediaInputNodeErr_MediaIOCancelCommand
 
diff --git a/nodes/pvmediainputnode/src/pvmf_media_input_node.cpp b/nodes/pvmediainputnode/src/pvmf_media_input_node.cpp
index ea86bd8..7cf3ef4 100644
--- a/nodes/pvmediainputnode/src/pvmf_media_input_node.cpp
+++ b/nodes/pvmediainputnode/src/pvmf_media_input_node.cpp
@@ -103,6 +103,7 @@
         AddToScheduler();
 
     if (iMediaIOControl)
+
         iMediaIOControl->ThreadLogon();
 
     SetState(EPVMFNodeIdle);
@@ -471,7 +472,18 @@
                     iMediaIOState = MIO_STATE_INITIALIZED;
                 }
                 break;
+            case EReset:
 
+                if (aResponse.GetCmdStatus() != PVMFSuccess)
+                {
+                    cmd.iEventCode = PvmfMediaInputNodeErr_MediaIOReset;
+                }
+                else
+                {
+                    iMediaIOState = MIO_STATE_IDLE;
+                    SetState(EPVMFNodeIdle);
+                }
+                break;
             default:
                 OSCL_ASSERT(false);
                 break;
@@ -1181,10 +1193,9 @@
 
         //restore original port vector reserve.
         iOutPortVector.Reconstruct();
-
-        //logoff & go back to Created state.
-        SetState(EPVMFNodeIdle);
-        return PVMFSuccess;
+        //Reset the MIO
+        PVMFStatus status = SendMioRequest(aCmd, EReset);
+        return status;
     }
     else
     {
@@ -1431,6 +1442,23 @@
             }
         }
         break;
+        case EReset:
+        {
+            int32 err ;
+            OSCL_TRY(err, iMediaIOCmdId = iMediaIOControl->Reset(););
+            if (err != OsclErrNone)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR,
+                                (0, "PVMediaInputNode::SendMioRequest: Error - iMIOControl->Reset failed"));
+                aCmd.iEventCode = PvmfMediaInputNodeErr_MediaIOReset;
+                status = PVMFFailure;
+            }
+            else
+            {
+                status = PVMFPending;
+            }
+        }
+        break;
 
         default:
             status = PVMFFailure;
diff --git a/nodes/pvmediainputnode/src/pvmf_media_input_node.h b/nodes/pvmediainputnode/src/pvmf_media_input_node.h
index 28a89a6..05452c2 100644
--- a/nodes/pvmediainputnode/src/pvmf_media_input_node.h
+++ b/nodes/pvmediainputnode/src/pvmf_media_input_node.h
@@ -220,6 +220,7 @@
             , EStart
             , EPause
             , EStop
+            , EReset
         } EMioRequest;
 
         PvmfMediaInputNode();
diff --git a/nodes/pvmediainputnode/src/pvmf_media_input_node_outport.cpp b/nodes/pvmediainputnode/src/pvmf_media_input_node_outport.cpp
index d2c1c37..a986f07 100644
--- a/nodes/pvmediainputnode/src/pvmf_media_input_node_outport.cpp
+++ b/nodes/pvmediainputnode/src/pvmf_media_input_node_outport.cpp
@@ -433,7 +433,7 @@
                 OsclRefCounter* my_refcnt;
                 uint aligned_refcnt_size = oscl_mem_aligned_size(sizeof(OsclRefCounterSA< OsclMemAllocDestructDealloc<uint8> >));
                 uint8* my_ptr = (uint8*) my_alloc.allocate(aligned_refcnt_size + sizeof(int32));
-                my_refcnt = new(my_ptr) OsclRefCounterSA< OsclMemAllocDestructDealloc<uint8> >(my_ptr);
+                my_refcnt = OSCL_PLACEMENT_NEW(my_ptr, OsclRefCounterSA< OsclMemAllocDestructDealloc<uint8> >(my_ptr));
                 my_ptr += aligned_refcnt_size;
 
                 OsclMemoryFragment memfrag;
diff --git a/nodes/pvmp3ffparsernode/src/pvmf_mp3ffparser_node.cpp b/nodes/pvmp3ffparsernode/src/pvmf_mp3ffparser_node.cpp
index 39ff65f..fca839b 100644
--- a/nodes/pvmp3ffparsernode/src/pvmf_mp3ffparser_node.cpp
+++ b/nodes/pvmp3ffparsernode/src/pvmf_mp3ffparser_node.cpp
@@ -30,13 +30,24 @@
 #ifndef PVMF_DURATION_INFOMESSAGE_H_INCLUDED
 #include "pvmf_duration_infomessage.h"
 #endif
+#ifndef PVMF_METADATA_INFOMESSAGE_H_INCLUDED
+#include "pvmf_metadata_infomessage.h"
+#endif
 #ifndef OSCL_MIME_STRING_UTILS_H
 #include "pv_mime_string_utils.h"
 #endif
-
+#ifndef __MEDIA_CLOCK_CONVERTER_H
 #include "media_clock_converter.h"
+#endif
+#ifndef PV_GAU_H_
 #include "pv_gau.h"
+#endif
+#ifndef PVMF_SOURCE_CONTEXT_DATA_H_INCLUDED
 #include "pvmf_source_context_data.h"
+#endif
+#ifndef PVMF_RETURN_CODES_H_INCLUDED
+#include "pvmf_return_codes.h"
+#endif
 
 // Playback clock timescale
 #define COMMON_PLAYBACK_CLOCK_TIMESCALE 1000
@@ -48,6 +59,14 @@
 #define PVMP3FF_DEFAULT_MAX_FRAMESIZE       4096
 #define PVMF3FF_DEFAULT_NUM_OF_FRAMES       5
 #define PVMF3FF_DURATION_SCAN_AO_DELAY      1000
+
+#ifdef PV_HAS_SHOUTCAST_SUPPORT_ENABLED
+#define PVMF_MP3FFPARSER_NODE_METADATA_RESERVE 2
+#define SHOUTCAST_MEDIA_DATA_LENGTH_STRING "x-pvmf/net/shoutcast-media-data-length"
+#define SHOUTCAST_CLIP_BITRATE_STRING "x-pvmf/net/shoutcast-clip-bitrate"
+#define SHOUTCAST_IS_SHOUTCAST_SESSION_STRING "x-pvmf/net/is-shoutcast-session"
+#endif
+
 /**
  * Macros for calling PVLogger
  */
@@ -74,9 +93,18 @@
         iLogger(NULL),
         iSendDecodeFormatSpecificInfo(true)
 {
+#if PV_HAS_SHOUTCAST_SUPPORT_ENABLED
+    iMetadataBuf = NULL;
+    iMetadataBufSize = 0;
+    iMetadataSize = 0;
+    iSCSPFactory = NULL;
+    iSCSP = NULL;
+    iClipByteRate = 0;
+    iMetadataInterval = 0;
+#endif
+
     iCPMContainer.iCPMLicenseInterface = NULL;
     iCPMContainer.iCPMLicenseInterfacePVI = NULL;
-    iUseCPMPluginRegistry = false;
     iCPMContainer.iCPMMetaDataExtensionInterface   = NULL;
     iCPMGetMetaDataKeysCmdId = 0;
     iCPMGetMetaDataValuesCmdId = 0;
@@ -137,8 +165,9 @@
         iFileServer.Close();
         OSCL_LEAVE(err);
     }
-
-
+#if PV_HAS_SHOUTCAST_SUPPORT_ENABLED
+    iMetadataVector.reserve(PVMF_MP3FFPARSER_NODE_METADATA_RESERVE);
+#endif
 }
 
 /**
@@ -170,6 +199,7 @@
         OSCL_DELETE(iDurationCalcAO);
         iDurationCalcAO = NULL;
     }
+
     // Unbind the download progress clock
     iDownloadProgressClock.Unbind();
     // Release the download progress interface, if any
@@ -209,6 +239,13 @@
         CommandComplete(iInputCommands, iInputCommands.front(), PVMFFailure, NULL, NULL);
     }
 
+#if PV_HAS_SHOUTCAST_SUPPORT_ENABLED
+    while (!iMetadataVector.empty())
+    {
+        iMetadataVector.erase(iMetadataVector.begin());
+    }
+#endif
+
     ReleaseTrack();
     // Clean up the file source
     CleanupFileSource();
@@ -1060,7 +1097,20 @@
                 PVMFDataStreamFactory* dsFactory = iCPMContainer.iCPMContentAccessFactory;
                 if ((dsFactory == NULL) && (iDataStreamFactory != NULL))
                 {
+#if PV_HAS_SHOUTCAST_SUPPORT_ENABLED
+                    if (iSourceFormat == PVMF_MIME_DATA_SOURCE_SHOUTCAST_URL && iSCSPFactory != NULL && iSCSP != NULL)
+                    {
+
+                        dsFactory = iSCSPFactory;
+                        iSCSP->RequestMetadataUpdates(iDataStreamSessionID, *this, iMetadataBufSize, iMetadataBuf);
+                    }
+                    else
+                    {
+                        dsFactory = iDataStreamFactory;
+                    }
+#else
                     dsFactory = iDataStreamFactory;
+#endif
                 }
 
                 // Try block start
@@ -1073,41 +1123,38 @@
                     SetState(EPVMFNodeError);
                     return PVMFErrResource;
                 }
+            }
+            //we need to go through the CPM sequence to check access on the file.
+            if (oWaitingOnLicense == false)
+            {
+                Push(iCPMContainer, PVMFSubNodeContainerBaseMp3::ECPMInit);
+            }
+            else
+            {
+                Push(iCPMContainer, PVMFSubNodeContainerBaseMp3::ECPMApproveUsage);
+                Push(iCPMContainer, PVMFSubNodeContainerBaseMp3::ECPMCheckUsage);
+            }
+
+            // enable the duration scanner for local playback only
+            if (!iDataStreamFactory)
+            {
                 int32 leavecode = 0;
                 OSCL_TRY(leavecode, iDurationCalcAO = OSCL_NEW(PVMp3DurationCalculator,
                                                       (OsclActiveObject::EPriorityIdle, iMP3File, this)));
                 if (leavecode)
                 {
                     PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
-                                    (0, "PVMFMP3FFParserNode::DoInit() Duration Scan is disabled DurationCalcAO not created"));
+                                    (0, "PVMFMP3FFParserNode::DoInit() Duration Scan is disabled. DurationCalcAO not created"));
                 }
-            }
-            //If a CPM flag was provided in the source data, then
-            //we need to go through the CPM sequence to check access on the file.
-            if (iUseCPMPluginRegistry)
-            {
-                if (oWaitingOnLicense == false)
-                {
-                    Push(iCPMContainer, PVMFSubNodeContainerBaseMp3::ECPMInit);
-                    Push(iCPMContainer, PVMFSubNodeContainerBaseMp3::ECPMOpenSession);
-                    Push(iCPMContainer, PVMFSubNodeContainerBaseMp3::ECPMRegisterContent);
-                }
-                else
-                {
-                    Push(iCPMContainer, PVMFSubNodeContainerBaseMp3::ECPMApproveUsage);
-                    Push(iCPMContainer, PVMFSubNodeContainerBaseMp3::ECPMCheckUsage);
-                }
-                RunIfNotReady();
-                status = PVMFPending;
-            }
-            else
-            {
-                status = CheckForMP3HeaderAvailability();
-                if (status == MP3_SUCCESS && iDurationCalcAO)
+
+                if (iDurationCalcAO)
                 {
                     iDurationCalcAO->ScheduleAO();
                 }
             }
+
+            RunIfNotReady();
+            status = PVMFPending;
             break;
 
         default:
@@ -1750,10 +1797,37 @@
 
     if (iDataStreamFactory == NULL)
     {
-        iDataStreamFactory = &aFactory;
         PVUuid uuid = PVMIDataStreamSyncInterfaceUuid;
-        PVInterface* iFace =
-            iDataStreamFactory->CreatePVMFCPMPluginAccessInterface(uuid);
+        PVInterface* iFace = NULL;
+        iDataStreamFactory = &aFactory;
+
+#if PV_HAS_SHOUTCAST_SUPPORT_ENABLED
+        if (iSourceFormat == PVMF_MIME_DATA_SOURCE_SHOUTCAST_URL)
+        {
+            iSCSPFactory = OSCL_NEW(PVMFShoutcastStreamParserFactory, (&aFactory, iMetadataInterval));
+
+            iFace = iSCSPFactory->CreatePVMFCPMPluginAccessInterface(uuid);
+            if (iFace != NULL)
+            {
+                iSCSP = OSCL_STATIC_CAST(PVMFShoutcastStreamParser*, iFace);
+                if (iMetadataBuf == NULL)
+                {
+                    iMetadataBuf = (uint8*)oscl_malloc(PV_SCSP_MAX_METADATA_TAG_SIZE * sizeof(uint8));
+                    if (iMetadataBuf != NULL)
+                    {
+                        iMetadataBufSize = PV_SCSP_MAX_METADATA_TAG_SIZE;
+                    }
+                }
+            }
+        }
+        else
+        {
+            iFace = iDataStreamFactory->CreatePVMFCPMPluginAccessInterface(uuid);
+        }
+#else
+        iFace = iDataStreamFactory->CreatePVMFCPMPluginAccessInterface(uuid);
+#endif
+
         if (iFace != NULL)
         {
             iDataStreamInterface = OSCL_STATIC_CAST(PVMIDataStreamSyncInterface*, iFace);
@@ -1774,7 +1848,6 @@
 
 int32 PVMFMP3FFParserNode::convertSizeToTime(uint32 aFileSize, uint32& aNPTInMS)
 {
-    if (!iMP3File)
     {
         return -1;
     }
@@ -1783,6 +1856,39 @@
 
     return iMP3File->ConvertSizeToTime(aFileSize, aNPTInMS);
 }
+bool PVMFMP3FFParserNode::setProtocolInfo(Oscl_Vector<PvmiKvp*, OsclMemAllocator>& aInfoKvpVec)
+{
+#if PV_HAS_SHOUTCAST_SUPPORT_ENABLED
+
+    if (aInfoKvpVec.empty())
+    {
+        return false;
+    }
+    for (uint32 i = 0; i < aInfoKvpVec.size(); i++)
+    {
+        if (!aInfoKvpVec[i])
+        {
+            return false;
+        }
+
+        if (oscl_strstr(aInfoKvpVec[i]->key, SHOUTCAST_MEDIA_DATA_LENGTH_STRING))
+        {
+            iMetadataInterval = aInfoKvpVec[i]->value.uint32_value;
+        }
+        else if (oscl_strstr(aInfoKvpVec[i]->key, SHOUTCAST_CLIP_BITRATE_STRING))
+        {
+            iClipByteRate = aInfoKvpVec[i]->value.uint32_value;
+        }
+        else if (oscl_strstr(aInfoKvpVec[i]->key, SHOUTCAST_IS_SHOUTCAST_SESSION_STRING))
+        {
+        }
+    }
+#else
+    OSCL_UNUSED_ARG(aInfoKvpVec);
+#endif
+
+    return true;
+}
 
 void PVMFMP3FFParserNode::setFileSize(const uint32 aFileSize)
 {
@@ -2120,7 +2226,7 @@
             {
                 if (retval > 0)
                 {
-                    //parser reported underflow during local playback session
+                    //parser reported underflow during download playback session
                     if (!SendTrackData(iTrack))
                     {
                         // SendTrackData un-successful
@@ -2380,6 +2486,15 @@
     iTrack.iSendBOS = false;
     iTrack.iFirstFrame = false;
     iAutoPaused = false;
+
+#if PV_HAS_SHOUTCAST_SUPPORT_ENABLED
+    // if this is shoutcast session,
+    // reset the stream and read pointers
+    if ((iSourceFormat == PVMF_MIME_DATA_SOURCE_SHOUTCAST_URL) && (iSCSPFactory != NULL))
+    {
+        iSCSPFactory->ResetShoutcastStream();
+    }
+#endif
 }
 
 /**
@@ -2438,9 +2553,38 @@
     {
         PVInterface* iFace = OSCL_STATIC_CAST(PVInterface*, iDataStreamInterface);
         PVUuid uuid = PVMIDataStreamSyncInterfaceUuid;
+
+#if PV_HAS_SHOUTCAST_SUPPORT_ENABLED
+        if (iSCSPFactory != NULL)
+        {
+            iSCSPFactory->DestroyPVMFCPMPluginAccessInterface(uuid, iFace);
+            iSCSP = NULL;
+        }
+        else
+        {
+            iDataStreamFactory->DestroyPVMFCPMPluginAccessInterface(uuid, iFace);
+        }
+#else
         iDataStreamFactory->DestroyPVMFCPMPluginAccessInterface(uuid, iFace);
+#endif
         iDataStreamInterface = NULL;
     }
+
+#if PV_HAS_SHOUTCAST_SUPPORT_ENABLED
+    if (iSCSPFactory != NULL)
+    {
+        OSCL_DELETE(iSCSPFactory);
+        iSCSPFactory = NULL;
+    }
+    if (iMetadataBuf != NULL)
+    {
+        oscl_free(iMetadataBuf);
+        iMetadataBuf = NULL;
+        iMetadataBufSize = 0;
+        iMetadataSize = 0;
+    }
+#endif
+
     if (iDataStreamFactory != NULL)
     {
         iDataStreamFactory->removeRef();
@@ -2448,7 +2592,6 @@
     }
     iMP3ParserNodeMetadataValueCount = 0;
 
-    iUseCPMPluginRegistry = false;
     iCPMSourceData.iFileHandle = NULL;
 
     if (iFileHandle)
@@ -2572,9 +2715,10 @@
         CleanupFileSource();
     }
 
-    if (aSourceFormat != PVMF_MIME_MP3FF)
+    if (aSourceFormat != PVMF_MIME_MP3FF &&
+            aSourceFormat != PVMF_MIME_DATA_SOURCE_SHOUTCAST_URL)
     {
-        // Node doesnt support any other format than MP3
+        // Node doesnt support any other format than MP3/Shoutcast stream
         return PVMFFailure;
     }
 
@@ -2590,7 +2734,6 @@
         if (pvInterface->queryInterface(localDataSrcUuid, localDataSrc))
         {
             PVMFLocalDataSource* opaqueData = OSCL_STATIC_CAST(PVMFLocalDataSource*, localDataSrc);
-            iUseCPMPluginRegistry = opaqueData->iUseCPMPluginRegistry;
             if (opaqueData->iFileHandle)
             {
                 iFileHandle = OSCL_NEW(OsclFileHandle, (*(opaqueData->iFileHandle)));
@@ -2598,16 +2741,8 @@
             }
             if (opaqueData->iContentAccessFactory != NULL)
             {
-                if (iUseCPMPluginRegistry == false)
-                {
-                    // External download - Not supported
-                    return PVMFErrNotSupported;
-                }
-                else
-                {
-                    //Cannot have both plugin usage and a datastream factory
-                    return PVMFErrArgument;
-                }
+                //Cannot have both plugin usage and a datastream factory
+                return PVMFErrArgument;
             }
         }
         else
@@ -2623,23 +2758,14 @@
                     PVMFSourceContextDataCommon* cContext = OSCL_STATIC_CAST(
                                                                 PVMFSourceContextDataCommon*,
                                                                 commonDataContext);
-                    iUseCPMPluginRegistry = cContext->iUseCPMPluginRegistry;
                     if (cContext->iFileHandle)
                     {
                         iFileHandle = OSCL_NEW(OsclFileHandle, (*(cContext->iFileHandle)));
                     }
                     if (cContext->iContentAccessFactory != NULL)
                     {
-                        if (iUseCPMPluginRegistry == false)
-                        {
-                            // External download - Not supported
-                            return PVMFErrNotSupported;
-                        }
-                        else
-                        {
-                            //Cannot have both plugin usage and a datastream factory
-                            return PVMFErrArgument;
-                        }
+                        //Cannot have both plugin usage and a datastream factory
+                        return PVMFErrArgument;
                     }
                     PVMFSourceContextData* sContext = OSCL_STATIC_CAST(
                                                           PVMFSourceContextData*,
@@ -3471,19 +3597,41 @@
             Cleanup();
             //Create a CPM instance.
             OSCL_ASSERT(iCPM == NULL);
-            OSCL_ASSERT(iContainer->iUseCPMPluginRegistry == true);
             iCPM = PVMFCPMFactory::CreateContentPolicyManager(*this);
             if (!iCPM)
             {
                 return PVMFErrNoMemory;
             }
-            iCPM->ThreadLogon();
-            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iContainer->iLogger, PVLOGMSG_STACK_TRACE,
-                            (0, "PVMFCPMContainerMp3::IssueCommand Calling Init"));
+            //thread logon may leave if there are no plugins
+            int32 err;
+            OSCL_TRY(err, iCPM->ThreadLogon(););
+            if (err != OsclErrNone)
+            {
+                //end the sequence now.
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iContainer->iLogger, PVLOGMSG_STACK_TRACE,
+                                (0, "PVMFCPMContainerMp3::IssueCommand No plugins, ending CPM sequence"));
 
-            iCmdState = EBusy;
-            iCmdId = iCPM->Init();
-            return PVMFPending;
+                iCPM->ThreadLogoff();
+                PVMFCPMFactory::DestroyContentPolicyManager(iCPM);
+                iCPM = NULL;
+
+                //treat it as unprotected content.
+                PVMFStatus status = iContainer->CheckForMP3HeaderAvailability();
+                return status;
+            }
+            else
+            {
+                //continue the sequence
+                iContainer->Push(*this, PVMFSubNodeContainerBaseMp3::ECPMOpenSession);
+                iContainer->Push(*this, PVMFSubNodeContainerBaseMp3::ECPMRegisterContent);
+
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iContainer->iLogger, PVLOGMSG_STACK_TRACE,
+                                (0, "PVMFCPMContainerMp3::IssueCommand Calling Init"));
+
+                iCmdState = EBusy;
+                iCmdId = iCPM->Init();
+                return PVMFPending;
+            }
 
         case ECPMOpenSession:
             OSCL_ASSERT(iCPM != NULL);
@@ -3946,18 +4094,26 @@
         MP3ErrorType retCode = MP3_ERROR_UNKNOWN;
         if (iMP3File)
         {
-            retCode = iMP3File->GetMetadataSize(iMP3MetaDataSize);
-            if (retCode == MP3_SUCCESS)
+
+            if (iSourceFormat != PVMF_MIME_DATA_SOURCE_SHOUTCAST_URL)
             {
-                /* Fetch the id3 tag size, if any and make it persistent in cache*/
-                iDataStreamInterface->MakePersistent(0, iMP3MetaDataSize);
-                if (currCapacity < iMP3MetaDataSize)
+                retCode = iMP3File->GetMetadataSize(iMP3MetaDataSize);
+                if (retCode == MP3_SUCCESS)
                 {
-                    iRequestReadCapacityNotificationID =
-                        iDataStreamInterface->RequestReadCapacityNotification(iDataStreamSessionID,
-                                *this,
-                                iMP3MetaDataSize + minBytesRequired);
-                    return PVMFPending;
+                    /* Fetch the id3 tag size, if any and make it persistent in cache*/
+                    iDataStreamInterface->MakePersistent(0, iMP3MetaDataSize);
+                    if (currCapacity < iMP3MetaDataSize)
+                    {
+                        iRequestReadCapacityNotificationID =
+                            iDataStreamInterface->RequestReadCapacityNotification(iDataStreamSessionID,
+                                    *this,
+                                    iMP3MetaDataSize + minBytesRequired);
+                        return PVMFPending;
+                    }
+                }
+                else
+                {
+                    iDataStreamInterface->MakePersistent(0, 0);
                 }
             }
             else
@@ -4092,3 +4248,126 @@
     OSCL_FIRST_CATCH_ANY(leavecode, PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVMFMP3FFParserNode::CompleteGetMetadataKeys() Memory allocation failure when copying metadata key"));return PVMFErrNoMemory);
     return PVMFSuccess;
 }
+
+#if PV_HAS_SHOUTCAST_SUPPORT_ENABLED
+void PVMFMP3FFParserNode::MetadataUpdated(uint32 aMetadataSize)
+{
+    if (!iMetadataVector.empty())
+    {
+        iMetadataVector.clear();
+    }
+
+    iMetadataSize = aMetadataSize;
+    int32 leavecode = OsclErrNone;
+    PVMFMetadataInfoMessage* eventMsg = NULL;
+    // parse the metadata to a kvp vector
+    ParseShoutcastMetadata((char*) iMetadataBuf, iMetadataSize, iMetadataVector);
+    // create a info msg
+    OSCL_TRY(leavecode, eventMsg = OSCL_NEW(PVMFMetadataInfoMessage, (iMetadataVector)));
+    // report the info msg to observer
+    ReportInfoEvent(PVMFInfoMetadataAvailable, NULL, OSCL_STATIC_CAST(PVInterface*, eventMsg));
+
+    uint32 i = 0;
+    //cleanup the metadata vector
+    while (i < iMetadataVector.size())
+    {
+        PvmiKvp kvp = iMetadataVector[i];
+        if (kvp.key)
+        {
+            OSCL_ARRAY_DELETE(kvp.key);
+            kvp.key = NULL;
+        }
+        if (kvp.value.pChar_value)
+        {
+            OSCL_ARRAY_DELETE(kvp.value.pChar_value);
+            kvp.value.pChar_value = NULL;
+        }
+        i++;
+    }
+
+    while (!iMetadataVector.empty())
+    {
+        iMetadataVector.erase(iMetadataVector.begin());
+    }
+    if (eventMsg)
+    {
+        eventMsg->removeRef();
+    }
+}
+#endif
+
+PVMFStatus PVMFMP3FFParserNode::ParseShoutcastMetadata(char* aMetadataBuf, uint32 aMetadataSize, Oscl_Vector<PvmiKvp, OsclMemAllocator>& aKvpVector)
+{
+    // parse shoutcast metadata
+    char* metadataPtr = NULL;
+    metadataPtr = (char*)oscl_malloc(aMetadataSize);
+    oscl_strncpy(metadataPtr, aMetadataBuf, aMetadataSize);
+
+    char* bufPtr = metadataPtr;
+
+    PvmiKvp kvp;
+
+    char* key = NULL;
+    char* valueStr = NULL;
+    while (true)
+    {
+        key = bufPtr;
+        char* tmpPtr = oscl_strchr(bufPtr, '=');
+        if (NULL == tmpPtr)
+        {
+            break;
+        }
+        *tmpPtr = '\0';
+        valueStr = tmpPtr + 2; // skip 2 bytes. '=' & '''
+        tmpPtr = oscl_strchr(valueStr, ';');
+        if (NULL == tmpPtr)
+        {
+            break;
+        }
+        *(tmpPtr - 1) = '\0'; // remove '''
+        *tmpPtr = '\0';
+
+        bufPtr = tmpPtr + 1;
+
+        // make kvp from key & valueStr info
+        OSCL_StackString<128> keyStr;
+        keyStr = _STRLIT_CHAR("");
+
+        if (!(oscl_strncmp(key, "StreamTitle", oscl_strlen("StreamTitle"))))
+        {
+            keyStr += _STRLIT_CHAR(KVP_KEY_TITLE);
+            keyStr += SEMI_COLON;
+            keyStr += _STRLIT_CHAR(KVP_VALTYPE_ISO88591_CHAR);
+        }
+        else if (!(oscl_strncmp(key, "StreamUrl", oscl_strlen("StreamUrl"))))
+        {
+            keyStr += _STRLIT_CHAR(KVP_KEY_DESCRIPTION);
+            keyStr += SEMI_COLON;
+            keyStr += _STRLIT_CHAR(KVP_VALTYPE_ISO88591_CHAR);
+        }
+        else
+        {
+            //not supported
+        }
+
+        keyStr += NULL_CHARACTER;
+
+        int32 keylen = oscl_strlen(keyStr.get_cstr());
+        int32 valuelen = oscl_strlen(valueStr);
+
+        kvp.key = OSCL_ARRAY_NEW(char, (keylen + 1));
+        kvp.value.pChar_value = OSCL_ARRAY_NEW(char, (valuelen + 1));
+
+        oscl_strncpy(kvp.key, keyStr.get_cstr(), keylen + 1);
+        oscl_strncpy(kvp.value.pChar_value, valueStr, valuelen + 1);
+
+        aKvpVector.push_back(kvp);
+    }
+
+    if (metadataPtr)
+    {
+        oscl_free(metadataPtr);
+        metadataPtr = NULL;
+    }
+    return PVMFSuccess;
+}
diff --git a/nodes/pvmp3ffparsernode/src/pvmf_mp3ffparser_node.h b/nodes/pvmp3ffparsernode/src/pvmf_mp3ffparser_node.h
index e668313..0c8c658 100644
--- a/nodes/pvmp3ffparsernode/src/pvmf_mp3ffparser_node.h
+++ b/nodes/pvmp3ffparsernode/src/pvmf_mp3ffparser_node.h
@@ -19,7 +19,6 @@
 #define PVMF_MP3FFPARSER_NODE_H_INCLUDED
 
 
-
 #ifndef OSCL_SCHEDULER_AO_H_INCLUDED
 #include "oscl_scheduler_ao.h"
 #endif
@@ -114,8 +113,20 @@
 #ifndef IMP3FF_H_INCLUDED
 #include "imp3ff.h"  // Includes for the core file format mp3 parser library
 #endif
-#define PVMF_MP3_PARSER_NODE_MAX_CPM_METADATA_KEYS 256
 
+#ifndef USE_CML2_CONFIG
+#ifndef PVMF_MP3FFPASER_NODE_CONFIG_H_INCLUDED
+#include "pvmf_mp3ffparser_node_config.h"
+#endif
+#endif
+
+#if PV_HAS_SHOUTCAST_SUPPORT_ENABLED // include scsp only when SHOUTCAST support is enabled
+#ifndef PVMF_SHOUTCAST_STREAM_PARSER_H_INCLUDED
+#include "pvmf_shoutcast_stream_parser.h"
+#endif
+#endif
+
+#define PVMF_MP3_PARSER_NODE_MAX_CPM_METADATA_KEYS 256
 
 /**
 * Container for the CPM object
@@ -375,6 +386,9 @@
             public OsclMemPoolResizableAllocatorObserver,
             public PvmfDataSourcePlaybackControlInterface,
             public PVMFCPMPluginLicenseInterface
+#if PV_HAS_SHOUTCAST_SUPPORT_ENABLED
+            , public PVMFMetadataUpdatesObserver
+#endif
 {
     public:
         PVMFMP3FFParserNode(int32 aPriority = OsclActiveObject::EPriorityNominal);
@@ -415,6 +429,10 @@
         PVMFStatus GetMediaPresentationInfo(PVMFMediaPresentationInfo& aInfo);
         PVMFStatus SelectTracks(PVMFMediaPresentationInfo& aInfo);
 
+#if PV_HAS_SHOUTCAST_SUPPORT_ENABLED
+        //From PVMFMetadataUpdatesObserver
+        void MetadataUpdated(uint32 aMetadataSize);
+#endif
         // From PVMFMetadataExtensionInterface
         uint32 GetNumMetadataKeys(char* aQueryKeyString = NULL);
         uint32 GetNumMetadataValues(PVMFMetadataList& aKeyList);
@@ -454,6 +472,7 @@
 
         /* From PVMFFormatProgDownloadSupportInterface */
         int32 convertSizeToTime(uint32 fileSize, uint32& aNPTInMS);
+        bool setProtocolInfo(Oscl_Vector<PvmiKvp*, OsclMemAllocator>& aInfoKvpVec);
         void setFileSize(const uint32 aFileSize);
         void setDownloadProgressInterface(PVMFDownloadProgressInterface* download_progress);
         void playResumeNotification(bool aDownloadComplete);
@@ -512,6 +531,8 @@
     private:
         PVMFStatus CheckForMP3HeaderAvailability();
         PVMFStatus GetFileOffsetForAutoResume(uint32& aOffset, PVMP3FFNodeTrackPortInfo* aTrackPortInfo);
+        PVMFStatus ParseShoutcastMetadata(char* aMetadataBuf, uint32 aMetadataSize, Oscl_Vector<PvmiKvp, OsclMemAllocator>& aKvpVector);
+
         void Construct();
 
         //from OsclActiveObject
@@ -588,6 +609,20 @@
 
 // private member variables
     private:
+
+#if PV_HAS_SHOUTCAST_SUPPORT_ENABLED
+        // shoutcast related
+        int32 iClipByteRate;
+        int32 iMetadataBufSize;
+        uint32 iMetadataSize;
+        int32 iMetadataInterval;
+        Oscl_Vector<PvmiKvp, OsclMemAllocator> iMetadataVector;
+
+        PVMFShoutcastStreamParserFactory* iSCSPFactory;
+        PVMFShoutcastStreamParser* iSCSP;
+        uint8 *iMetadataBuf;
+#endif
+
         // Vector of ports contained in this node
         PVMFPortVector<PVMFMP3FFParserPort, PVMFMP3FFParserNodeAllocator> iPortVector;
 
@@ -606,7 +641,6 @@
         OSCL_wHeapString<OsclMemAllocator> iSourceURL;
         bool iSourceURLSet;
         PVMFFormatType iSourceFormat;
-        bool iUseCPMPluginRegistry;
         PVMFSourceContextData iSourceContextData;
         bool iSourceContextDataValid;
         OsclFileHandle* iFileHandle;
diff --git a/nodes/pvmp4ffcomposernode/include/pvmp4ffcn_clipconfig.h b/nodes/pvmp4ffcomposernode/include/pvmp4ffcn_clipconfig.h
index eb4b4b3..26ca474 100644
--- a/nodes/pvmp4ffcomposernode/include/pvmp4ffcn_clipconfig.h
+++ b/nodes/pvmp4ffcomposernode/include/pvmp4ffcn_clipconfig.h
@@ -29,6 +29,9 @@
 #ifndef OSCL_STRING_H_INCLUDED
 #include "oscl_string.h"
 #endif
+#ifndef OSCL_FILE_IO_H_INCLUDED
+#include "oscl_file_io.h"
+#endif
 #ifndef PVMF_RETURN_CODES_H_INCLUDED
 #include "pvmf_return_codes.h"
 #endif
@@ -133,6 +136,15 @@
         virtual PVMFStatus SetOutputFileName(const OSCL_wString& aFileName) = 0;
 
         /**
+         * This method sets the output file handle. This method must be called before
+         * Start() is called.
+         *
+         * @param aFileHandle Output file descriptor
+         * @return Completion status of this method.
+         */
+        virtual PVMFStatus SetOutputFileDescriptor(const OsclFileHandle* aFileHandle) = 0;
+
+        /**
          * This method sets the authoring mode. This method must be called before
          * Start() is called.  Default authoring mode is non 3GPPProgressive
          * Downloadable file using no temp files durating authoring.
diff --git a/nodes/pvmp4ffcomposernode/include/pvmp4ffcn_settings.h b/nodes/pvmp4ffcomposernode/include/pvmp4ffcn_settings.h
index 616b6ac..ac1976a 100644
--- a/nodes/pvmp4ffcomposernode/include/pvmp4ffcn_settings.h
+++ b/nodes/pvmp4ffcomposernode/include/pvmp4ffcn_settings.h
@@ -37,7 +37,7 @@
     public:
         PVMp4FFComposerNodeSettings()
         {
-            iMediaFormat = PVMF_FORMAT_UNKNOWN;
+            iMediaFormat = PVMF_MIME_FORMAT_UNKNOWN;
             iLoopInputFile = true;
             iSamplingFrequency = 8000;
             iNumChannels = 1;
@@ -49,6 +49,7 @@
             iFrameRate = 15;
             iFirstFrameTimestamp = 0;
             iBitrate = 0;
+            iFrameInterval = 0;
         }
 
         // General settings
@@ -70,6 +71,7 @@
         OsclFloat iFrameRate;
         uint32 iFirstFrameTimestamp;
         uint32 iBitrate;
+        uint32 iFrameInterval;
 };
 
 #endif
diff --git a/nodes/pvmp4ffcomposernode/src/pvmp4ffcn_node.cpp b/nodes/pvmp4ffcomposernode/src/pvmp4ffcn_node.cpp
index 955947e..86b7c13 100644
--- a/nodes/pvmp4ffcomposernode/src/pvmp4ffcn_node.cpp
+++ b/nodes/pvmp4ffcomposernode/src/pvmp4ffcn_node.cpp
@@ -125,6 +125,7 @@
     iNum_PPS_Set = 0;
     iNum_SPS_Set = 0;
     iText_sdIndex = 0;
+    iFileObject = NULL;
 #if PROFILING_ON
     iMaxSampleAddTime = 0;
     iMinSampleAddTime = 0;
@@ -200,6 +201,12 @@
             iFs.Close();
         }
     }
+    if (iFileObject)
+    {
+        iFileObject->Close();
+        OSCL_DELETE(iFileObject);
+        iFileObject = NULL;
+    }
     for (uint32 i = 0; i < iKeyWordVector.size() ; i++)
     {
         if (iKeyWordVector[i] != NULL)
@@ -304,8 +311,9 @@
     aNodeCapability.iInputFormatCapability.push_back(PVMF_MIME_H2631998);
     aNodeCapability.iInputFormatCapability.push_back(PVMF_MIME_H2632000);
     aNodeCapability.iInputFormatCapability.push_back(PVMF_MIME_AMR_IETF);
+    aNodeCapability.iInputFormatCapability.push_back(PVMF_MIME_AMRWB_IETF);
     aNodeCapability.iInputFormatCapability.push_back(PVMF_MIME_3GPP_TIMEDTEXT);
-
+    aNodeCapability.iInputFormatCapability.push_back(PVMF_MIME_MPEG4_AUDIO);
     return PVMFSuccess;
 }
 
@@ -515,7 +523,31 @@
     iFileName = aFileName;
     return PVMFSuccess;
 }
+//////////////////////////////////////////////////////////////////////////////
+OSCL_EXPORT_REF PVMFStatus PVMp4FFComposerNode::SetOutputFileDescriptor(const OsclFileHandle* aFileHandle)
+{
+    if (iInterfaceState != EPVMFNodeIdle && iInterfaceState != EPVMFNodeInitialized)
+        return false;
 
+    iFileObject = OSCL_NEW(Oscl_File, (0, (OsclFileHandle *)aFileHandle));
+    iFileObject->SetPVCacheSize(0);
+    iFileObject->SetAsyncReadBufferSize(0);
+    iFileObject->SetNativeBufferSize(0);
+    iFileObject->SetLoggingEnable(false);
+    iFileObject->SetSummaryStatsLoggingEnable(false);
+    iFileObject->SetFileHandle((OsclFileHandle*)aFileHandle);
+
+    //call open
+    int32 retval = iFileObject->Open(_STRLIT_CHAR("dummy"),
+                                     Oscl_File::MODE_READWRITE | Oscl_File::MODE_BINARY,
+                                     iFs);
+
+    if (retval == 0)
+    {
+        return PVMFSuccess;
+    }
+    return PVMFFailure;
+}
 ////////////////////////////////////////////////////////////////////////////
 OSCL_EXPORT_REF PVMFStatus PVMp4FFComposerNode::SetAuthoringMode(PVMp4FFCN_AuthoringMode aAuthoringMode)
 {
@@ -1129,7 +1161,11 @@
                 format == PVMF_MIME_M4V ||
                 format == PVMF_MIME_H2631998 ||
                 format == PVMF_MIME_H2632000 ||
-                format == PVMF_MIME_AMR_IETF)
+                format == PVMF_MIME_AMR_IETF ||
+                format == PVMF_MIME_AMRWB_IETF ||
+                format == PVMF_MIME_ADIF ||
+                format == PVMF_MIME_ADTS ||
+                format == PVMF_MIME_MPEG4_AUDIO)
         {
             port->SetFormat(format);
         }
@@ -1282,7 +1318,9 @@
                 {
                     iFileType |= FILE_TYPE_VIDEO;
                 }
-                else if (iInPorts[i]->GetFormat() == PVMF_MIME_AMR_IETF)
+                else if (iInPorts[i]->GetFormat() == PVMF_MIME_AMR_IETF ||
+                         iInPorts[i]->GetFormat() == PVMF_MIME_AMRWB_IETF ||
+                         iInPorts[i]->GetFormat() == PVMF_MIME_MPEG4_AUDIO)
                 {
                     iFileType |= FILE_TYPE_AUDIO;
                 }
@@ -1320,13 +1358,30 @@
             }
             else
             {
-                iMpeg4File = PVA_FF_IMpeg4File::createMP4File(iFileType, iOutputPath, iPostfix,
-                             (void*) & iFs, iAuthoringMode, iFileName, iCacheSize);
+                if (iFileObject != NULL)
+                {
+                    iMpeg4File = PVA_FF_IMpeg4File::createMP4File(iFileType, iAuthoringMode, iFileObject, iCacheSize);
 
+                }
+                else
+                {
+
+                    iMpeg4File = PVA_FF_IMpeg4File::createMP4File(iFileType, iOutputPath, iPostfix,
+                                 (void*) & iFs, iAuthoringMode, iFileName, iCacheSize);
+
+                }
             }
 #else
-            iMpeg4File = PVA_FF_IMpeg4File::createMP4File(iFileType, iOutputPath, iPostfix,
-                         (void*) & iFs, iAuthoringMode, iFileName, iCacheSize);
+            if (iFileObject != NULL)
+            {
+                iMpeg4File = PVA_FF_IMpeg4File::createMP4File(iFileType, iAuthoringMode, iFileObject, iCacheSize);
+
+            }
+            else
+            {
+                iMpeg4File = PVA_FF_IMpeg4File::createMP4File(iFileType, iOutputPath, iPostfix,
+                             (void*) & iFs, iAuthoringMode, iFileName, iCacheSize);
+            }
 #endif
             if (!iMpeg4File)
             {
@@ -1445,6 +1500,16 @@
         codecType = CODEC_TYPE_AMR_AUDIO;
         mediaType = MEDIA_TYPE_AUDIO;
     }
+    else if (aPort->GetFormat() == PVMF_MIME_AMRWB_IETF)
+    {
+        codecType = CODEC_TYPE_AMR_WB_AUDIO;
+        mediaType = MEDIA_TYPE_AUDIO;
+    }
+    else if (aPort->GetFormat() ==  PVMF_MIME_MPEG4_AUDIO)
+    {
+        codecType = CODEC_TYPE_AAC_AUDIO;
+        mediaType = MEDIA_TYPE_AUDIO;
+    }
     else
     {
         PVLOGGER_LOGMSG(PVLOGMSG_INST_REL, iLogger, PVLOGMSG_ERR,
@@ -1452,6 +1517,8 @@
         return PVMFFailure;
     }
 
+    aPort->SetCodecType(codecType);
+
     PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_DEBUG,
                     (0, "PVMp4FFComposerNode::AddTrack: Calling PVA_FF_IMpeg4File::addTrack(0x%x,0x%x)",
                      mediaType, codecType));
@@ -1790,14 +1857,11 @@
     for (i = 0; i < iInPorts.size(); i++)
         iInPorts[i]->ResumeInput();
 
-    if (iCurrentCmd.empty())
+    if (!iCurrentCmd.empty())
     {
-        LOG_ERR((0, "PVMp4FFComposerNode::FlushComplete: Error - iCurrentCmd is empty"));
-        status = PVMFFailure;
+        CommandComplete(iCurrentCmd, iCurrentCmd[0], status);
     }
 
-    CommandComplete(iCurrentCmd, iCurrentCmd[0], status);
-
     if (!iCmdQueue.empty())
     {
         // If command queue is not empty, schedule to process the next command
@@ -2031,13 +2095,30 @@
                 int32* pVal = (int32*)textconfiginfo.getMemFragPtr();
                 iText_sdIndex = *pVal;
             }
-            if ((port->GetFormat() == PVMF_MIME_AMR_IETF) && mediaDataPtr->getErrorsFlag())
+            if (((port->GetFormat() == PVMF_MIME_AMR_IETF) ||
+                    (port->GetFormat() == PVMF_MIME_AMRWB_IETF)) && mediaDataPtr->getErrorsFlag())
             {
                 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_NOTICE,
                                 (0, "PVMp4FFComposerNode::ProcessIncomingMsg: Error flag set for AMR!"));
                 return PVMFSuccess;
             }
 
+            if ((mediaDataPtr->getSeqNum() == 0) && (port->GetFormat() == PVMF_MIME_MPEG4_AUDIO))
+            {
+                // Set AAC Config
+                OsclRefCounterMemFrag decSpecInfo;
+                if (mediaDataPtr->getFormatSpecificInfo(decSpecInfo) == false ||
+                        decSpecInfo.getMemFragSize() == 0)
+                {
+                    PVLOGGER_LOGMSG(PVLOGMSG_INST_REL, iLogger, PVLOGMSG_ERR,
+                                    (0, "PVMp4FFComposerNode::ProcessIncomingMsg: Error - Decoder Specific not available"));
+                    return PVMFFailure;
+                }
+
+                iMpeg4File->setDecoderSpecificInfo((uint8*)decSpecInfo.getMemFragPtr(),
+                                                   (int32)decSpecInfo.getMemFragSize(), trackId);
+            }
+
             // Retrieve data from incoming queue
             OsclRefCounterMemFrag memFrag;
             uint32 numFrags = mediaDataPtr->getNumFragments();
@@ -2103,6 +2184,13 @@
         aTimestamp = aTimestamp - iTSOffset;
     }
 
+    uint32 timeScale = 0;
+    PVMP4FFCNFormatSpecificConfig* config = aPort->GetFormatSpecificConfig();
+    if (config)
+    {
+        timeScale = config->iTimescale;
+    }
+
     uint32 i = 0;
 #if PROFILING_ON
     PVMp4FFCNStats* stats = NULL;
@@ -2321,7 +2409,9 @@
         stats->iDuration = aTimestamp;
 #endif
     }
-    else if (aFormat == PVMF_MIME_AMR_IETF)
+
+    else if ((aFormat == PVMF_MIME_AMR_IETF) ||
+             (aFormat == PVMF_MIME_AMRWB_IETF))
     {
         if (iRealTimeTS)
         {
@@ -2360,10 +2450,21 @@
                 }
 
                 // Update clock converter
+                iClockConverter.set_timescale(timeScale);
                 iClockConverter.set_clock_other_timescale(aTimestamp, 1000);
 
                 // Check max file size
-                frameSize = GetIETFFrameSize(data[0]);
+                int32 frSize = GetIETFFrameSize(data[0], aPort->GetCodecType());
+                if (frSize == -1)
+                {
+                    PVLOGGER_LOGMSG(PVLOGMSG_INST_REL, iLogger, PVLOGMSG_ERR,
+                                    (0, "PVMp4FFComposerNode::AddMemFragToTrack: Error - Frame Type Not Supported - Skipping"));
+                    LOGDATATRAFFIC((0, "PVMp4FFComposerNode::AddMemFragToTrack - Invalid Frame: TrackID=%d, Byte=0x%x, Mime=%s",
+                                    aTrackId, data[0], aPort->GetMimeType().get_cstr()));
+                    return PVMFFailure;
+                }
+                frameSize = (uint32)frSize;
+
                 status = CheckMaxFileSize(frameSize);
                 if (status == PVMFFailure)
                 {
@@ -2434,9 +2535,82 @@
         }
     }
 
+    else if (aFormat == PVMF_MIME_MPEG4_AUDIO)
+    {
+        status = CheckMaxDuration(aTimestamp);
+        if (status == PVMFFailure)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_REL, iLogger, PVLOGMSG_ERR,
+                            (0, "PVMp4FFComposerNode::AddMemFragToTrack: Error - CheckMaxDuration failed"));
+            return status;
+        }
+        else if (status == PVMFSuccess)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_REL, iLogger, PVLOGMSG_DEBUG,
+                            (0, "PVMp4FFComposerNode::AddMemFragToTrack: Maxmimum duration reached"));
+            return status;
+        }
+
+        for (i = 0; i < aFrame.size(); i++)
+        {
+            size = aFrame[i].len;
+            status = CheckMaxFileSize(size);
+            if (status == PVMFFailure)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_REL, iLogger, PVLOGMSG_ERR,
+                                (0, "PVMp4FFComposerNode::AddMemFragToTrack: Error - CheckMaxFileSize failed"));
+                return status;
+            }
+            else if (status == PVMFSuccess)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_REL, iLogger, PVLOGMSG_DEBUG,
+                                (0, "PVMp4FFComposerNode::AddMemFragToTrack: Maxmimum file size reached"));
+                return status;
+            }
+
+            //No data for some reason.
+            if (size == 0)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_REL, iLogger, PVLOGMSG_NOTICE,
+                                (0, "PVMp4FFComposerNode::AddMemFragToTrack: no data in frag!"));
+                return PVMFSuccess;
+            }
+        }
+
+        if (iRealTimeTS)
+        {
+            if (aTimestamp <= aPort->GetLastTS())
+            {
+                aTimestamp = aPort->GetLastTS() + 1;
+            }
+
+            aPort->SetLastTS(aTimestamp);
+        }
+
+        iClockConverter.set_timescale(timeScale);
+        iClockConverter.set_clock_other_timescale(aTimestamp, 1000);
+        uint32 aacTS = iClockConverter.get_current_timestamp();
+
+        if (!iMpeg4File->addSampleToTrack(aTrackId, aFrame, aacTS, flags))
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_REL, iLogger, PVLOGMSG_ERR,
+                            (0, "PVMp4FFComposerNode::AddMemFragToTrack: Error - addSampleToTrack failed"));
+            return PVMFFailure;
+        }
+        iSampleInTrack = true;
+        // Send progress report after sample is successfully added
+        SendProgressReport(aTimestamp);
+
+#if PROFILING_ON
+        ++(stats->iNumFrames);
+        stats->iDuration = aTimestamp;
+#endif
+    }
+
     return PVMFSuccess;
 }
 
+
 void PVMp4FFComposerNode::GenerateDiagnostics(uint32 aTime, uint32 aSize)
 {
 #if PROFILING_ON
@@ -2463,34 +2637,82 @@
     OSCL_UNUSED_ARG(aSize);
 }
 //////////////////////////////////////////////////////////////////////////////////
-int32 PVMp4FFComposerNode::GetIETFFrameSize(uint8 aFrameType)
+int32 PVMp4FFComposerNode::GetIETFFrameSize(uint8 aFrameType,
+        int32 aCodecType)
 {
-    uint8 frameType = (uint8)(aFrameType >> 3);
-
-    // Find frame size for each frame type
-    switch (frameType)
+    uint8 frameType = (uint8)(aFrameType >> 3) & 0x0f;
+    if (aCodecType == CODEC_TYPE_AMR_AUDIO)
     {
-        case 0: // AMR 4.75 Kbps
-            return 13;
-        case 1: // AMR 5.15 Kbps
-            return 14;
-        case 2: // AMR 5.90 Kbps
-            return 16;
-        case 3: // AMR 6.70 Kbps
-            return 18;
-        case 4: // AMR 7.40 Kbps
-            return 20;
-        case 5: // AMR 7.95 Kbps
-            return 21;
-        case 6: // AMR 10.2 Kbps
-            return 27;
-        case 7: // AMR 12.2 Kbps
-            return 32;
-        case 15: // AMR Frame No Data
-            return 1;
-        default: // Error - For Future Use
-            return -1;
+        // Find frame size for each frame type
+        switch (frameType)
+        {
+            case 0: // AMR 4.75 Kbps
+                return 13;
+            case 1: // AMR 5.15 Kbps
+                return 14;
+            case 2: // AMR 5.90 Kbps
+                return 16;
+            case 3: // AMR 6.70 Kbps
+                return 18;
+            case 4: // AMR 7.40 Kbps
+                return 20;
+            case 5: // AMR 7.95 Kbps
+                return 21;
+            case 6: // AMR 10.2 Kbps
+                return 27;
+            case 7: // AMR 12.2 Kbps
+                return 32;
+            case 8: // AMR Frame SID
+                return 6;
+            case 9: // AMR Frame GSM EFR SID
+                return 7;
+            case 10:// AMR Frame TDMA EFR SID
+            case 11:// AMR Frame PDC EFR SID
+                return 6;
+            case 15: // AMR Frame No Data
+                return 1;
+            default: // Error - For Future Use
+                return -1;
+        }
     }
+    else if (aCodecType == CODEC_TYPE_AMR_WB_AUDIO)
+    {
+        // Find frame size for each frame type
+        switch (frameType)
+        {
+            case 0: // AMR-WB 6.60 Kbps
+                return 18;
+            case 1: // AMR-WB 8.85 Kbps
+                return 24;
+            case 2: // AMR-WB 12.65 Kbps
+                return 33;
+            case 3: // AMR-WB 14.25 Kbps
+                return 37;
+            case 4: // AMR-WB 15.85 Kbps
+                return 41;
+            case 5: // AMR-WB 18.25 Kbps
+                return 47;
+            case 6: // AMR-WB 19.85 Kbps
+                return 51;
+            case 7: // AMR-WB 23.05 Kbps
+                return 59;
+            case 8: // AMR-WB 23.85 Kbps
+                return 61;
+            case 9: // AMR-WB SID Frame
+                return 6;
+            case 10: //Reserved
+            case 11: //Reserved
+            case 12: //Reserved
+            case 13: //Reserved
+                return -1;
+            case 14: // AMR-WB Frame Lost
+            case 15: // AMR-WB Frame No Data
+                return 1;
+            default: // Error - For Future Use
+                return -1;
+        }
+    }
+    return -1;
 }
 
 //////////////////////////////////////////////////////////////////////////////////
diff --git a/nodes/pvmp4ffcomposernode/src/pvmp4ffcn_node.h b/nodes/pvmp4ffcomposernode/src/pvmp4ffcn_node.h
index e41ca08..eea75b1 100644
--- a/nodes/pvmp4ffcomposernode/src/pvmp4ffcn_node.h
+++ b/nodes/pvmp4ffcomposernode/src/pvmp4ffcn_node.h
@@ -156,6 +156,7 @@
 
         // Pure virtual functions from PVMp4FFCNClipConfigInterface
         OSCL_IMPORT_REF PVMFStatus SetOutputFileName(const OSCL_wString& aFileName);
+        OSCL_IMPORT_REF PVMFStatus SetOutputFileDescriptor(const OsclFileHandle* aFileHandle);
         OSCL_IMPORT_REF PVMFStatus SetAuthoringMode(PVMp4FFCN_AuthoringMode aAuthoringMode = PVMP4FFCN_3GPP_DOWNLOAD_MODE);
         OSCL_IMPORT_REF PVMFStatus SetPresentationTimescale(uint32 aTimescale);
         OSCL_IMPORT_REF PVMFStatus SetVersion(const OSCL_wString& aVersion, const OSCL_String& aLangCode);
@@ -268,7 +269,7 @@
 
         PVMFStatus AddMemFragToTrack(Oscl_Vector<OsclMemoryFragment, OsclMemAllocator> aFrame, OsclRefCounterMemFrag& aMemFrag, PVMFFormatType aFormat,
                                      uint32& aTimestamp, int32 aTrackId, PVMp4FFComposerPort *aPort);
-        int32 GetIETFFrameSize(uint8 aFrameType);
+        int32 GetIETFFrameSize(uint8 aFrameType, int32 aCodecType);
 
         /////////////////////////////////////////////////////
         //    Progress and max size / duration routines
@@ -348,7 +349,7 @@
         uint32 iAuthoringMode;
         uint32 iPresentationTimescale;
         uint32 iMovieFragmentDuration;
-
+        Oscl_File* iFileObject;
         // Meta data strings
         struct PVMP4FFCN_MetaDataString
         {
diff --git a/nodes/pvmp4ffcomposernode/src/pvmp4ffcn_node_cap_config.cpp b/nodes/pvmp4ffcomposernode/src/pvmp4ffcn_node_cap_config.cpp
index d556eb5..9ada003 100644
--- a/nodes/pvmp4ffcomposernode/src/pvmp4ffcn_node_cap_config.cpp
+++ b/nodes/pvmp4ffcomposernode/src/pvmp4ffcn_node_cap_config.cpp
@@ -355,6 +355,10 @@
                 {
                     iErrorAddTrack = PVMF_MIME_AMR_IETF;
                 }
+                if (pv_mime_strcmp(val_key, "PVMF_MIME_AMRWB_IETF") == 0)
+                {
+                    iErrorAddTrack = PVMF_MIME_AMRWB_IETF;
+                }
 
             }
             break;
diff --git a/nodes/pvmp4ffcomposernode/src/pvmp4ffcn_port.cpp b/nodes/pvmp4ffcomposernode/src/pvmp4ffcn_port.cpp
index 0e6f01a..4cee0c2 100644
--- a/nodes/pvmp4ffcomposernode/src/pvmp4ffcn_port.cpp
+++ b/nodes/pvmp4ffcomposernode/src/pvmp4ffcn_port.cpp
@@ -49,6 +49,7 @@
         iNode(aNode),
         iTrackId(0),
         iFormat(PVMF_MIME_FORMAT_UNKNOWN),
+        iCodecType(0),
         iReferencePort(NULL),
         iLastTS(0),
         iEndOfDataReached(false)
@@ -262,7 +263,7 @@
     //identifier is a key and is assumed to be null terminated
     if (oscl_strcmp(identifier, INPUT_FORMATS_CAP_QUERY) == 0)
     {
-        num_parameter_elements = 6;
+        num_parameter_elements = 8;
         status = AllocateKvp(parameters, (PvmiKeyType)INPUT_FORMATS_VALTYPE, num_parameter_elements);
         if (status != PVMFSuccess)
         {
@@ -271,11 +272,13 @@
         else
         {
             parameters[0].value.pChar_value = (char*)PVMF_MIME_AMR_IETF;
-            parameters[1].value.pChar_value = (char*)PVMF_MIME_M4V;
-            parameters[2].value.pChar_value = (char*)PVMF_MIME_H2631998;
-            parameters[3].value.pChar_value = (char*)PVMF_MIME_H2632000;
-            parameters[4].value.pChar_value = (char*)PVMF_MIME_H264_VIDEO_MP4;
-            parameters[5].value.pChar_value = (char*)PVMF_MIME_3GPP_TIMEDTEXT;
+            parameters[1].value.pChar_value = (char*)PVMF_MIME_MPEG4_AUDIO;
+            parameters[2].value.pChar_value = (char*)PVMF_MIME_M4V;
+            parameters[3].value.pChar_value = (char*)PVMF_MIME_H2631998;
+            parameters[4].value.pChar_value = (char*)PVMF_MIME_H2632000;
+            parameters[5].value.pChar_value = (char*)PVMF_MIME_H264_VIDEO_MP4;
+            parameters[6].value.pChar_value = (char*)PVMF_MIME_3GPP_TIMEDTEXT;
+            parameters[7].value.pChar_value = (char*)PVMF_MIME_AMRWB_IETF;
         }
     }
     else if (oscl_strcmp(identifier, INPUT_FORMATS_CUR_QUERY) == 0)
@@ -597,10 +600,12 @@
     {
         if (pv_mime_strcmp(aKvp->value.pChar_value, PVMF_MIME_3GPP_TIMEDTEXT) == 0 ||
                 pv_mime_strcmp(aKvp->value.pChar_value, PVMF_MIME_AMR_IETF) == 0 ||
+                pv_mime_strcmp(aKvp->value.pChar_value, PVMF_MIME_AMRWB_IETF) == 0 ||
                 pv_mime_strcmp(aKvp->value.pChar_value, PVMF_MIME_H264_VIDEO_MP4) == 0 ||
                 pv_mime_strcmp(aKvp->value.pChar_value, PVMF_MIME_M4V) == 0 ||
                 pv_mime_strcmp(aKvp->value.pChar_value, PVMF_MIME_H2631998) == 0 ||
-                pv_mime_strcmp(aKvp->value.pChar_value, PVMF_MIME_H2632000) == 0)
+                pv_mime_strcmp(aKvp->value.pChar_value, PVMF_MIME_H2632000) == 0 ||
+                pv_mime_strcmp(aKvp->value.pChar_value, PVMF_MIME_MPEG4_AUDIO) == 0)
         {
             if (aSetParam)
                 iFormat = aKvp->value.pChar_value;
@@ -644,10 +649,12 @@
     // Check if data format from peer is supported
     if (pv_mime_strcmp(kvp->value.pChar_value, PVMF_MIME_3GPP_TIMEDTEXT) == 0 ||
             pv_mime_strcmp(kvp->value.pChar_value, PVMF_MIME_AMR_IETF) == 0 ||
+            pv_mime_strcmp(kvp->value.pChar_value, PVMF_MIME_AMRWB_IETF) == 0 ||
             pv_mime_strcmp(kvp->value.pChar_value, PVMF_MIME_H264_VIDEO_MP4) == 0 ||
             pv_mime_strcmp(kvp->value.pChar_value, PVMF_MIME_M4V) == 0 ||
             pv_mime_strcmp(kvp->value.pChar_value, PVMF_MIME_H2631998) == 0 ||
-            pv_mime_strcmp(kvp->value.pChar_value, PVMF_MIME_H2632000) == 0)
+            pv_mime_strcmp(kvp->value.pChar_value, PVMF_MIME_H2632000) == 0 ||
+            pv_mime_strcmp(kvp->value.pChar_value, PVMF_MIME_MPEG4_AUDIO) == 0)
     {
         // do nothing
     }
@@ -689,7 +696,9 @@
         {
             iFormatSpecificConfig.iBitrate = PVMF_MP4FFCN_TEXT_BITRATE;
         }
-        else if (iFormat == PVMF_MIME_AMR_IETF)
+        else if (iFormat == PVMF_MIME_AMR_IETF ||
+                 iFormat == PVMF_MIME_AMRWB_IETF ||
+                 iFormat == PVMF_MIME_MPEG4_AUDIO)
         {
             iFormatSpecificConfig.iBitrate = PVMF_MP4FFCN_AUDIO_BITRATE;
         }
@@ -714,9 +723,11 @@
     numParams = 0;
 
     // Get timescale from peer
-    if (iFormat == PVMF_MIME_AMR_IETF)
+    if (iFormat == PVMF_MIME_AMR_IETF ||
+            iFormat == PVMF_MIME_AMRWB_IETF ||
+            iFormat == PVMF_MIME_MPEG4_AUDIO)
     {
-        status = aConfig->getParametersSync(NULL, (PvmiKeyType)AUDIO_OUTPUT_SAMPLING_RATE_CUR_QUERY, kvp, numParams, NULL);
+        status = aConfig->getParametersSync(NULL, (PvmiKeyType)OUTPUT_TIMESCALE_CUR_QUERY, kvp, numParams, NULL);
         if (status != PVMFSuccess || !kvp || numParams != 1)
         {
             LOG_DEBUG((0, "PVMp4FFComposerPort::GetInputParametersFromPeer: Sampling rate info not available. Use default"));
@@ -730,20 +741,19 @@
         kvp = NULL;
         numParams = 0;
     }
-    else if (iFormat == PVMF_MIME_H2631998 ||
+    else if (iFormat == PVMF_MIME_H264_VIDEO_MP4 ||
+             iFormat == PVMF_MIME_M4V ||
+             iFormat == PVMF_MIME_H2631998 ||
              iFormat == PVMF_MIME_H2632000)
     {
-        iFormatSpecificConfig.iH263Profile = PVMF_MP4FFCN_VIDEO_H263_PROFILE;
-        iFormatSpecificConfig.iH263Level = PVMF_MP4FFCN_VIDEO_H263_LEVEL;
-        // Do not break here. Continue to configure the other video parameters
-    }
-    else if (iFormat == PVMF_MIME_H264_VIDEO_MP4 ||
-             iFormat == PVMF_MIME_M4V)
-    {
-        iFormatSpecificConfig.iIFrameInterval = PVMF_MP4FFCN_VIDEO_IFRAME_INTERVAL;
-        iFormatSpecificConfig.iRateControlType = PVMP4FFCN_RATE_CONTROL_CBR;
+        if (iFormat == PVMF_MIME_H2631998 ||
+                iFormat == PVMF_MIME_H2632000)
+        {
+            iFormatSpecificConfig.iH263Profile = PVMF_MP4FFCN_VIDEO_H263_PROFILE;
+            iFormatSpecificConfig.iH263Level = PVMF_MP4FFCN_VIDEO_H263_LEVEL;
+            // Do not break here. Continue to configure the other video parameters
+        }
 
-        // Get size (in pixels) of video data from peer
         status = aConfig->getParametersSync(NULL, (PvmiKeyType)VIDEO_OUTPUT_WIDTH_CUR_QUERY, kvp, numParams, NULL);
         if (status != PVMFSuccess || numParams != 1)
         {
@@ -758,6 +768,23 @@
         kvp = NULL;
         numParams = 0;
 
+        iFormatSpecificConfig.iRateControlType = PVMP4FFCN_RATE_CONTROL_CBR;
+
+        // Get size (in pixels) of video data from peer
+        status = aConfig->getParametersSync(NULL, (PvmiKeyType)VIDEO_OUTPUT_IFRAME_INTERVAL_CUR_QUERY, kvp, numParams, NULL);
+        if (status != PVMFSuccess || numParams != 1)
+        {
+            LOG_DEBUG((0, "PVMp4FFComposerPort::GetInputParametersFromPeer: Frame width not available. Use default"));
+            iFormatSpecificConfig.iIFrameInterval = PVMF_MP4FFCN_VIDEO_IFRAME_INTERVAL;
+        }
+        else
+        {
+            iFormatSpecificConfig.iIFrameInterval = kvp[0].value.uint32_value;
+            aConfig->releaseParameters(NULL, kvp, numParams);
+        }
+        kvp = NULL;
+        numParams = 0;
+
         status = aConfig->getParametersSync(NULL, (PvmiKeyType)VIDEO_OUTPUT_HEIGHT_CUR_QUERY, kvp, numParams, NULL);
         if (status != PVMFSuccess || numParams != 1)
         {
diff --git a/nodes/pvmp4ffcomposernode/src/pvmp4ffcn_port.h b/nodes/pvmp4ffcomposernode/src/pvmp4ffcn_port.h
index fbda5e1..45a9a39 100644
--- a/nodes/pvmp4ffcomposernode/src/pvmp4ffcn_port.h
+++ b/nodes/pvmp4ffcomposernode/src/pvmp4ffcn_port.h
@@ -131,6 +131,14 @@
         {
             return iMimeType;
         }
+        void SetCodecType(int32 aCodecType)
+        {
+            iCodecType = aCodecType;
+        }
+        int32 GetCodecType()
+        {
+            return iCodecType;
+        }
         PVMP4FFCNFormatSpecificConfig* GetFormatSpecificConfig()
         {
             PvmiCapabilityAndConfig* config = NULL;
@@ -223,6 +231,7 @@
         // Port configuration
         int32 iTrackId;
         PVMFFormatType iFormat;
+        int32 iCodecType; //integer value to avoid formatype comparisons
         PVMP4FFCNFormatSpecificConfig iFormatSpecificConfig;
         PVMp4FFComposerPort* iReferencePort;
         OsclMemoryFragment* memfrag_sps;
diff --git a/nodes/pvmp4ffparsernode/src/pvmf_mp4ffparser_node.cpp b/nodes/pvmp4ffparsernode/src/pvmf_mp4ffparser_node.cpp
index be2938b..9b2774e 100644
--- a/nodes/pvmp4ffparsernode/src/pvmf_mp4ffparser_node.cpp
+++ b/nodes/pvmp4ffparsernode/src/pvmf_mp4ffparser_node.cpp
@@ -648,6 +648,7 @@
     {
         iFilename = aSourceURL;
         iSourceFormat = inputFormatType;
+        iUseCPMPluginRegistry = true;
         if (aSourceData)
         {
             PVInterface* pvInterface =
@@ -664,7 +665,6 @@
                 {
                     iThumbNailMode = true;
                 }
-                iUseCPMPluginRegistry = opaqueData->iUseCPMPluginRegistry;
                 iCPMSourceData.iPreviewMode = iPreviewMode;
                 iCPMSourceData.iIntent = opaqueData->iIntent;
                 if (opaqueData->iFileHandle)
@@ -713,7 +713,6 @@
                         {
                             iThumbNailMode = true;
                         }
-                        iUseCPMPluginRegistry = cContext->iUseCPMPluginRegistry;
                         if (cContext->iFileHandle)
                         {
                             iFileHandle = OSCL_NEW(OsclFileHandle, (*(cContext->iFileHandle)));
@@ -739,12 +738,19 @@
                 }
             }
         }
-        //If a CPM flag is provided in the source data, then
         //create a CPM object here...
         if (iUseCPMPluginRegistry)
         {
             iCPM = PVMFCPMFactory::CreateContentPolicyManager(*this);
-            iCPM->ThreadLogon();
+            //thread logon may leave if there are no plugins
+            int32 err;
+            OSCL_TRY(err, iCPM->ThreadLogon(););
+            OSCL_FIRST_CATCH_ANY(err,
+                                 iCPM->ThreadLogoff();
+                                 PVMFCPMFactory::DestroyContentPolicyManager(iCPM);
+                                 iCPM = NULL;
+                                 iUseCPMPluginRegistry = false;
+                                );
         }
         return PVMFSuccess;
     }
diff --git a/nodes/pvomxaudiodecnode/src/pvmf_omx_audiodec_node.cpp b/nodes/pvomxaudiodecnode/src/pvmf_omx_audiodec_node.cpp
index db84041..4299c68 100644
--- a/nodes/pvomxaudiodecnode/src/pvmf_omx_audiodec_node.cpp
+++ b/nodes/pvomxaudiodecnode/src/pvmf_omx_audiodec_node.cpp
@@ -32,7 +32,7 @@
 #include "pv_omxcore.h"
 
 // needed for capability and config
-#include "pv_audio_config_parser.h"
+#include "pv_omx_config_parser.h"
 
 
 #define CONFIG_SIZE_AND_VERSION(param) \
@@ -136,6 +136,7 @@
              iCapability.iHasMaxNumberOfPorts = true;
              iCapability.iMaxNumberOfPorts = 2;
              iCapability.iInputFormatCapability.push_back(PVMF_MIME_MPEG4_AUDIO);
+             iCapability.iInputFormatCapability.push_back(PVMF_MIME_3640);
              iCapability.iInputFormatCapability.push_back(PVMF_MIME_ADIF);
              iCapability.iInputFormatCapability.push_back(PVMF_MIME_LATM);
              iCapability.iInputFormatCapability.push_back(PVMF_MIME_ASF_MPEG4_AUDIO);
@@ -516,6 +517,7 @@
     {
         // AAC
         if (((PVMFOMXDecPort*)iInPort)->iFormat ==  PVMF_MIME_MPEG4_AUDIO ||
+                ((PVMFOMXDecPort*)iInPort)->iFormat == PVMF_MIME_3640 ||
                 ((PVMFOMXDecPort*)iInPort)->iFormat == PVMF_MIME_LATM ||
                 ((PVMFOMXDecPort*)iInPort)->iFormat == PVMF_MIME_ADIF ||
                 ((PVMFOMXDecPort*)iInPort)->iFormat == PVMF_MIME_ASF_MPEG4_AUDIO ||
@@ -553,6 +555,7 @@
         Format = ((PVMFOMXDecPort*)iInPort)->iFormat;
     }
     if (Format ==  PVMF_MIME_MPEG4_AUDIO ||
+            Format == PVMF_MIME_3640 ||
             Format == PVMF_MIME_LATM ||
             Format == PVMF_MIME_ADIF ||
             Format == PVMF_MIME_ASF_MPEG4_AUDIO ||
@@ -676,6 +679,39 @@
             return PVMFErrNoMemory;
         }
 
+        if (out_ctrl_struct_ptr == NULL)
+        {
+
+            out_ctrl_struct_ptr = (OsclAny **) oscl_malloc(iNumOutputBuffers * sizeof(OsclAny *));
+
+            if (out_ctrl_struct_ptr == NULL)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                                (0, "PVMFOMXAudioDecNode::HandlePortReEnable() out_ctrl_struct_ptr == NULL"));
+
+                SetState(EPVMFNodeError);
+                ReportErrorEvent(PVMFErrNoMemory);
+                return PVMFErrNoMemory;
+            }
+        }
+
+        if (out_buff_hdr_ptr == NULL)
+        {
+
+            out_buff_hdr_ptr = (OsclAny **) oscl_malloc(iNumOutputBuffers * sizeof(OsclAny *));
+
+            if (out_buff_hdr_ptr == NULL)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                                (0, "PVMFOMXAudioDecNode::HandlePortReEnable()  out_buff_hdr_ptr == NULL"));
+
+                SetState(EPVMFNodeError);
+                ReportErrorEvent(PVMFErrNoMemory);
+                return PVMFErrNoMemory;
+            }
+        }
+
+
         if (!ProvideBuffersToComponent(iOutBufMemoryPool, // allocator
                                        iOutputAllocSize,	 // size to allocate from pool (hdr only or hdr+ buffer)
                                        iNumOutputBuffers, // number of buffers
@@ -724,6 +760,39 @@
             return PVMFErrNoMemory;
         }
 
+        if (in_ctrl_struct_ptr == NULL)
+        {
+
+            in_ctrl_struct_ptr = (OsclAny **) oscl_malloc(iNumInputBuffers * sizeof(OsclAny *));
+
+            if (in_ctrl_struct_ptr == NULL)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                                (0, "PVMFOMXAudioDecNode::HandlePortReEnable() in_ctrl_struct_ptr == NULL"));
+
+                SetState(EPVMFNodeError);
+                ReportErrorEvent(PVMFErrNoMemory);
+                return PVMFErrNoMemory;
+            }
+        }
+
+        if (in_buff_hdr_ptr == NULL)
+        {
+
+            in_buff_hdr_ptr = (OsclAny **) oscl_malloc(iNumInputBuffers * sizeof(OsclAny *));
+
+            if (in_buff_hdr_ptr == NULL)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                                (0, "PVMFOMXAudioDecNode::HandlePortReEnable()  in_buff_hdr_ptr == NULL"));
+
+                SetState(EPVMFNodeError);
+                ReportErrorEvent(PVMFErrNoMemory);
+                return PVMFErrNoMemory;
+            }
+        }
+
+
         if (!ProvideBuffersToComponent(iInBufMemoryPool, // allocator
                                        iInputAllocSize,	 // size to allocate from pool (hdr only or hdr+ buffer)
                                        iNumInputBuffers, // number of buffers
@@ -757,7 +826,7 @@
     return PVMFSuccess; // allow rescheduling of the node
 }
 ////////////////////////////////////////////////////////////////////////////////
-bool PVMFOMXAudioDecNode::NegotiateComponentParameters()
+bool PVMFOMXAudioDecNode::NegotiateComponentParameters(OMX_PTR aOutputParameters)
 {
     PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
                     (0, "PVMFOMXAudioDecNode::NegotiateComponentParameters() In"));
@@ -770,51 +839,32 @@
 
 
     pvAudioConfigParserInputs aInputs;
-    pvAudioConfigParserOutputs aOutputs;
+    AudioOMXConfigParserOutputs *pOutputParameters;
 
     aInputs.inPtr = (uint8*)((PVMFOMXDecPort*)iInPort)->iTrackConfig;
     aInputs.inBytes = (int32)((PVMFOMXDecPort*)iInPort)->iTrackConfigSize;
     aInputs.iMimeType = ((PVMFOMXDecPort*)iInPort)->iFormat;
+    pOutputParameters = (AudioOMXConfigParserOutputs *)aOutputParameters;
 
     PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
                     (0, "PVMFOMXAudioDecNode::NegotiateComponentParameters() Calling audio config parser - TrackConfig = %p, TrackConfigSize = %d, mimetype = %s", aInputs.inPtr, aInputs.inBytes, aInputs.iMimeType.getMIMEStrPtr()));
 
 
-    if (aInputs.inBytes == 0 || aInputs.inPtr == NULL)
-    {
-        if (aInputs.iMimeType == PVMF_MIME_WMA ||
-                aInputs.iMimeType == PVMF_MIME_MPEG4_AUDIO ||
-                aInputs.iMimeType == PVMF_MIME_LATM ||
-                aInputs.iMimeType == PVMF_MIME_ADIF ||
-                aInputs.iMimeType == PVMF_MIME_ASF_MPEG4_AUDIO ||
-                aInputs.iMimeType == PVMF_MIME_AAC_SIZEHDR)
-        {
-            return false;
-        }
-    }
-
-    int16 status;
-    status = pv_audio_config_parser(&aInputs, &aOutputs);
-    if (status == 0)
-    {
-        PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
-                        (0, "PVMFOMXAudioDecNode::NegotiateComponentParameters() pv_audio_config_parser()-unsupported parameters\n"));
-        return false;
-    }
 
     if (aInputs.iMimeType == PVMF_MIME_WMA)
     {
-        iNumberOfAudioChannels = aOutputs.Channels;
-        iPCMSamplingRate = aOutputs.SamplesPerSec;
+        iNumberOfAudioChannels = pOutputParameters->Channels;
+        iPCMSamplingRate = pOutputParameters->SamplesPerSec;
     }
     else if (aInputs.iMimeType == PVMF_MIME_MPEG4_AUDIO ||
+             aInputs.iMimeType == PVMF_MIME_3640 ||
              aInputs.iMimeType == PVMF_MIME_LATM ||
              aInputs.iMimeType == PVMF_MIME_ADIF ||
              aInputs.iMimeType == PVMF_MIME_ASF_MPEG4_AUDIO ||
              aInputs.iMimeType == PVMF_MIME_AAC_SIZEHDR)
 
     {
-        iNumberOfAudioChannels = aOutputs.Channels;
+        iNumberOfAudioChannels = pOutputParameters->Channels;
     }
 
     CONFIG_SIZE_AND_VERSION(AudioPortParameters);
@@ -941,13 +991,11 @@
                     (0, "PVMFOMXAudioDecNode::NegotiateComponentParameters() Inport buffers %d,size %d", iNumInputBuffers, iOMXComponentInputBufferSize));
 
 
-    // Codec specific info set/get: SamplingRate, formats etc.
-    if (!GetSetCodecSpecificInfo())
-        return false;
 
 
     CONFIG_SIZE_AND_VERSION(iParamPort);
-
+    iParamPort.nPortIndex = iInputPortIndex;
+    // finalize setting input port parameters
     Err = OMX_SetParameter(iOMXDecoder, OMX_IndexParamPortDefinition, &iParamPort);
     if (Err != OMX_ErrorNone)
     {
@@ -959,6 +1007,8 @@
 
 
     // Codec specific info set/get: SamplingRate, formats etc.
+    // NOTE: iParamPort is modified in the routine below - it is loaded from the component output port values
+    // Based on sampling rate - we also determine the desired output buffer size
     if (!GetSetCodecSpecificInfo())
         return false;
 
@@ -993,7 +1043,8 @@
                     (0, "PVMFOMXAudioDecNode::NegotiateComponentParameters() Outport buffers %d,size %d", iNumOutputBuffers, iOMXComponentOutputBufferSize));
 
     CONFIG_SIZE_AND_VERSION(iParamPort);
-
+    iParamPort.nPortIndex = iOutputPortIndex;
+    // finalize setting output port parameters
     Err = OMX_SetParameter(iOMXDecoder, OMX_IndexParamPortDefinition, &iParamPort);
     if (Err != OMX_ErrorNone)
     {
@@ -1012,6 +1063,7 @@
         Format = ((PVMFOMXDecPort*)iInPort)->iFormat;
     }
     if (Format == PVMF_MIME_MPEG4_AUDIO ||
+            Format == PVMF_MIME_3640 ||
             Format == PVMF_MIME_LATM ||
             Format == PVMF_MIME_ADIF ||
             Format == PVMF_MIME_ASF_MPEG4_AUDIO ||
@@ -1101,6 +1153,7 @@
         Format = ((PVMFOMXDecPort*)iInPort)->iFormat;
     }
     if (Format ==  PVMF_MIME_MPEG4_AUDIO ||
+            Format == PVMF_MIME_3640 ||
             Format == PVMF_MIME_LATM ||
             Format == PVMF_MIME_ADIF ||
             Format == PVMF_MIME_ASF_MPEG4_AUDIO ||
@@ -1160,6 +1213,10 @@
     {
         Audio_Aac_Param.eAACStreamFormat = OMX_AUDIO_AACStreamFormatMP4ADTS;
     }
+    else if (Format ==  PVMF_MIME_3640)
+    {
+        Audio_Aac_Param.eAACStreamFormat = OMX_AUDIO_AACStreamFormatMP4ADTS;
+    }
     else if (Format == PVMF_MIME_LATM)
     {
         Audio_Aac_Param.eAACStreamFormat = OMX_AUDIO_AACStreamFormatMP4LATM;
@@ -1244,6 +1301,7 @@
     // read the output frame size
     // AAC
     if (Format ==  PVMF_MIME_MPEG4_AUDIO ||
+            Format == PVMF_MIME_3640 ||
             Format == PVMF_MIME_LATM ||
             Format == PVMF_MIME_ADIF ||
             Format == PVMF_MIME_ASF_MPEG4_AUDIO ||
@@ -1389,6 +1447,7 @@
         }
     }
     else if (((PVMFOMXDecPort*)iInPort)->iFormat ==  PVMF_MIME_MPEG4_AUDIO ||
+             ((PVMFOMXDecPort*)iInPort)->iFormat == PVMF_MIME_3640 ||
              ((PVMFOMXDecPort*)iInPort)->iFormat == PVMF_MIME_ADIF ||
              ((PVMFOMXDecPort*)iInPort)->iFormat == PVMF_MIME_ASF_MPEG4_AUDIO ||
              ((PVMFOMXDecPort*)iInPort)->iFormat == PVMF_MIME_AAC_SIZEHDR) // for testing
@@ -2174,6 +2233,7 @@
             // Format
             if ((((PVMFOMXDecPort*)iInPort)->iFormat == PVMF_MIME_LATM) ||
                     (((PVMFOMXDecPort*)iInPort)->iFormat == PVMF_MIME_MPEG4_AUDIO) ||
+                    (((PVMFOMXDecPort*)iInPort)->iFormat == PVMF_MIME_3640) ||
                     (((PVMFOMXDecPort*)iInPort)->iFormat == PVMF_MIME_ADIF) ||
                     (((PVMFOMXDecPort*)iInPort)->iFormat == PVMF_MIME_AAC_SIZEHDR) ||
                     (((PVMFOMXDecPort*)iInPort)->iFormat == PVMF_MIME_AMR_IF2) ||
@@ -2205,6 +2265,10 @@
                     {
                         valuelen = oscl_strlen(_STRLIT_CHAR(PVMF_MIME_MPEG4_AUDIO)) + 1; // Value string plus one for NULL terminator
                     }
+                    else if (((PVMFOMXDecPort*)iInPort)->iFormat == PVMF_MIME_3640)
+                    {
+                        valuelen = oscl_strlen(_STRLIT_CHAR(PVMF_MIME_3640)) + 1; // Value string plus one for NULL terminator
+                    }
                     else if (((PVMFOMXDecPort*)iInPort)->iFormat == PVMF_MIME_ADIF)
                     {
                         valuelen = oscl_strlen(_STRLIT_CHAR(PVMF_MIME_ADIF)) + 1;
@@ -2269,6 +2333,10 @@
                         {
                             oscl_strncpy(KeyVal.value.pChar_value, _STRLIT_CHAR(PVMF_MIME_MPEG4_AUDIO), valuelen);
                         }
+                        else if (((PVMFOMXDecPort*)iInPort)->iFormat == PVMF_MIME_3640)
+                        {
+                            oscl_strncpy(KeyVal.value.pChar_value, _STRLIT_CHAR(PVMF_MIME_3640), valuelen);
+                        }
                         else if (((PVMFOMXDecPort*)iInPort)->iFormat == PVMF_MIME_ADIF)
                         {
                             oscl_strncpy(KeyVal.value.pChar_value, _STRLIT_CHAR(PVMF_MIME_ADIF), valuelen);
@@ -2531,6 +2599,7 @@
             // Format
             if ((((PVMFOMXDecPort*)iInPort)->iFormat == PVMF_MIME_LATM) ||
                     (((PVMFOMXDecPort*)iInPort)->iFormat == PVMF_MIME_MPEG4_AUDIO) ||
+                    (((PVMFOMXDecPort*)iInPort)->iFormat == PVMF_MIME_3640) ||
                     (((PVMFOMXDecPort*)iInPort)->iFormat == PVMF_MIME_ADIF) ||
                     (((PVMFOMXDecPort*)iInPort)->iFormat == PVMF_MIME_AMR_IF2) ||
                     (((PVMFOMXDecPort*)iInPort)->iFormat == PVMF_MIME_AMR_IETF) ||
@@ -2574,11 +2643,15 @@
     bool cap_exchange_status = false;
 
     pvAudioConfigParserInputs aInputs;
-    pvAudioConfigParserOutputs aOutputs;
+    OMXConfigParserInputs aInputParameters;
+    AudioOMXConfigParserOutputs aOutputParameters;
 
     aInputs.inPtr = (uint8*)(aParameters->value.key_specific_value);
     aInputs.inBytes = (int32)aParameters->capacity;
     aInputs.iMimeType = PVMF_MIME_WMA;
+    aInputParameters.cComponentRole = (OMX_STRING)"audio_decoder.wma";
+    aInputParameters.inBytes = aInputs.inBytes;
+    aInputParameters.inPtr = aInputs.inPtr;
 
 
     if (aInputs.inBytes == 0 || aInputs.inPtr == NULL)
@@ -2587,14 +2660,58 @@
     }
 
 
-    int32 status;
-    status = pv_audio_config_parser(&aInputs, &aOutputs);
-    if (0 != status)
+    OMX_BOOL status = OMX_FALSE;
+    OMX_U32 num_comps = 0, ii;
+    OMX_STRING *CompOfRole;
+    //	uint32 ii;
+    // call once to find out the number of components that can fit the role
+    OMX_GetComponentsOfRole(aInputParameters.cComponentRole, &num_comps, NULL);
+
+    if (num_comps > 0)
+    {
+        CompOfRole = (OMX_STRING *)oscl_malloc(num_comps * sizeof(OMX_STRING));
+        for (ii = 0; ii < num_comps; ii++)
+            CompOfRole[ii] = (OMX_STRING) oscl_malloc(PV_OMX_MAX_COMPONENT_NAME_LENGTH * sizeof(OMX_U8));
+
+        // call 2nd time to get the component names
+        OMX_GetComponentsOfRole(aInputParameters.cComponentRole, &num_comps, (OMX_U8 **)CompOfRole);
+
+        for (ii = 0; ii < num_comps; ii++)
+        {
+            aInputParameters.cComponentName = CompOfRole[ii];
+            status = OMXConfigParser(&aInputParameters, &aOutputParameters);
+            if (status == OMX_TRUE)
+            {
+                break;
+            }
+            else
+            {
+                status = OMX_FALSE;
+            }
+        }
+
+        // whether successful or not, need to free CompOfRoles
+        for (ii = 0; ii < num_comps; ii++)
+        {
+            oscl_free(CompOfRole[ii]);
+            CompOfRole[ii] = NULL;
+        }
+
+        oscl_free(CompOfRole);
+
+    }
+    else
+    {
+        // if no components support the role, nothing else to do
+        return false;
+    }
+
+    if (OMX_FALSE != status)
     {
         cap_exchange_status = true;
 
-        iPCMSamplingRate = aOutputs.SamplesPerSec;
-        iNumberOfAudioChannels = aOutputs.Channels;
+        iPCMSamplingRate = aOutputParameters.SamplesPerSec;
+        iNumberOfAudioChannels = aOutputParameters.Channels;
 
         if ((iNumberOfAudioChannels != 1 && iNumberOfAudioChannels != 2) ||
                 (iPCMSamplingRate <= 0))
@@ -2616,11 +2733,14 @@
                     (0, "PVMFOMXAudioDecNode::DoCapConfigVerifyParameters() In\n"));
 
     pvAudioConfigParserInputs aInputs;
-    pvAudioConfigParserOutputs aOutputs;
+    OMXConfigParserInputs aInputParameters;
+    AudioOMXConfigParserOutputs aOutputParameters;
 
     aInputs.inPtr = (uint8*)(aParameters->value.key_specific_value);
     aInputs.inBytes = (int32)aParameters->capacity;
     aInputs.iMimeType = iNodeConfig.iMimeType;
+    aInputParameters.inBytes = aInputs.inBytes;
+    aInputParameters.inPtr = aInputs.inPtr;
 
     if (aInputs.inBytes == 0 || aInputs.inPtr == NULL)
     {
@@ -2628,6 +2748,7 @@
         // be present in the query. If not, config parser cannot be called
         if (aInputs.iMimeType == PVMF_MIME_WMA ||
                 aInputs.iMimeType == PVMF_MIME_MPEG4_AUDIO ||
+                aInputs.iMimeType == PVMF_MIME_3640 ||
                 aInputs.iMimeType == PVMF_MIME_LATM ||
                 aInputs.iMimeType == PVMF_MIME_ADIF ||
                 aInputs.iMimeType == PVMF_MIME_ASF_MPEG4_AUDIO ||
@@ -2646,27 +2767,109 @@
     }
 
 
-    int16 status;
-    status = pv_audio_config_parser(&aInputs, &aOutputs);
-    if (status == 0)
+    if (aInputs.iMimeType == PVMF_MIME_MPEG4_AUDIO ||
+            aInputs.iMimeType == PVMF_MIME_3640 ||
+            aInputs.iMimeType == PVMF_MIME_LATM ||
+            aInputs.iMimeType == PVMF_MIME_ADIF ||
+            aInputs.iMimeType == PVMF_MIME_ASF_MPEG4_AUDIO ||
+            aInputs.iMimeType == PVMF_MIME_AAC_SIZEHDR)
+    {
+        aInputParameters.cComponentRole = (OMX_STRING)"audio_decoder.aac";
+    }
+    // AMR
+    else if (aInputs.iMimeType == PVMF_MIME_AMR_IF2 ||
+             aInputs.iMimeType == PVMF_MIME_AMR_IETF ||
+             aInputs.iMimeType == PVMF_MIME_AMR)
+    {
+        aInputParameters.cComponentRole = (OMX_STRING)"audio_decoder.amrnb";
+    }
+    else if (aInputs.iMimeType == PVMF_MIME_AMRWB_IETF ||
+             aInputs.iMimeType == PVMF_MIME_AMRWB)
+    {
+        aInputParameters.cComponentRole = (OMX_STRING)"audio_decoder.amrwb";
+    }
+    else if (aInputs.iMimeType == PVMF_MIME_MP3)
+    {
+        aInputParameters.cComponentRole = (OMX_STRING)"audio_decoder.mp3";
+    }
+    else if (aInputs.iMimeType ==  PVMF_MIME_WMA)
+    {
+        aInputParameters.cComponentRole = (OMX_STRING)"audio_decoder.wma";
+    }
+    else
+    {
+        // Illegal codec specified.
+        PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "%s::PVMFOMXAudioDecNode::DoCapConfigVerifyParameters() Input port format other then codec type", iName.Str()));
+    }
+
+    OMX_BOOL status = OMX_FALSE;
+    OMX_U32 num_comps = 0, ii;
+    OMX_STRING *CompOfRole;
+    //	uint32 ii;
+    // call once to find out the number of components that can fit the role
+    OMX_GetComponentsOfRole(aInputParameters.cComponentRole, &num_comps, NULL);
+
+    if (num_comps > 0)
+    {
+        CompOfRole = (OMX_STRING *)oscl_malloc(num_comps * sizeof(OMX_STRING));
+        for (ii = 0; ii < num_comps; ii++)
+            CompOfRole[ii] = (OMX_STRING) oscl_malloc(PV_OMX_MAX_COMPONENT_NAME_LENGTH * sizeof(OMX_U8));
+
+        // call 2nd time to get the component names
+        OMX_GetComponentsOfRole(aInputParameters.cComponentRole, &num_comps, (OMX_U8 **)CompOfRole);
+
+        for (ii = 0; ii < num_comps; ii++)
+        {
+            aInputParameters.cComponentName = CompOfRole[ii];
+            status = OMXConfigParser(&aInputParameters, &aOutputParameters);
+            if (status == OMX_TRUE)
+            {
+                break;
+            }
+            else
+            {
+                status = OMX_FALSE;
+            }
+        }
+
+        // whether successful or not, need to free CompOfRoles
+        for (ii = 0; ii < num_comps; ii++)
+        {
+            oscl_free(CompOfRole[ii]);
+            CompOfRole[ii] = NULL;
+        }
+
+        oscl_free(CompOfRole);
+
+    }
+    else
+    {
+        // if no component supports the role, nothing else to do
+        PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                        (0, "PVMFOMXAudioDecNode::DoCapConfigVerifyParameters() No omx component supports this role PVMFErrNotSupported\n"));
+        return PVMFErrNotSupported;
+    }
+
+    if (status == OMX_FALSE)
     {
         PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
-                        (0, "PVMFOMXAudioDecNode::DoCapConfigVerifyParameters() ->pv_audio_config_parser() PVMFErrNotSupported\n"));
+                        (0, "PVMFOMXAudioDecNode::DoCapConfigVerifyParameters() ->OMXConfigParser() PVMFErrNotSupported\n"));
         return PVMFErrNotSupported;
     }
 
     if (aInputs.iMimeType == PVMF_MIME_WMA)
     {
-        iNumberOfAudioChannels = aOutputs.Channels;
-        iPCMSamplingRate = aOutputs.SamplesPerSec;
+        iNumberOfAudioChannels = aOutputParameters.Channels;
+        iPCMSamplingRate = aOutputParameters.SamplesPerSec;
     }
     else if (aInputs.iMimeType == PVMF_MIME_MPEG4_AUDIO ||
+             aInputs.iMimeType == PVMF_MIME_3640 ||
              aInputs.iMimeType == PVMF_MIME_LATM ||
              aInputs.iMimeType == PVMF_MIME_ADIF ||
              aInputs.iMimeType == PVMF_MIME_ASF_MPEG4_AUDIO ||
              aInputs.iMimeType == PVMF_MIME_AAC_SIZEHDR)
     {
-        iNumberOfAudioChannels = aOutputs.Channels;
+        iNumberOfAudioChannels = aOutputParameters.Channels;
     }
 
     PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
diff --git a/nodes/pvomxaudiodecnode/src/pvmf_omx_audiodec_node.h b/nodes/pvomxaudiodecnode/src/pvmf_omx_audiodec_node.h
index 7e7295a..061e806 100644
--- a/nodes/pvomxaudiodecnode/src/pvmf_omx_audiodec_node.h
+++ b/nodes/pvomxaudiodecnode/src/pvmf_omx_audiodec_node.h
@@ -118,7 +118,7 @@
 
         bool InitDecoder(PVMFSharedMediaDataPtr&);
 
-        bool NegotiateComponentParameters();
+        bool NegotiateComponentParameters(OMX_PTR aOutputParameters);
         bool GetSetCodecSpecificInfo();
         bool QueueOutputBuffer(OsclSharedPtr<PVMFMediaDataImpl> &mediadataimplout, uint32 aDataLen);
 
diff --git a/nodes/pvomxbasedecnode/include/pvmf_omx_basedec_node.h b/nodes/pvomxbasedecnode/include/pvmf_omx_basedec_node.h
index a00b916..e600db9 100644
--- a/nodes/pvomxbasedecnode/include/pvmf_omx_basedec_node.h
+++ b/nodes/pvomxbasedecnode/include/pvmf_omx_basedec_node.h
@@ -106,6 +106,7 @@
 #endif
 #endif
 
+#define MAX_NAL_PER_FRAME 100
 
 typedef struct OutputBufCtrlStruct
 {
@@ -508,7 +509,7 @@
         }
 
         // DV:
-        virtual bool NegotiateComponentParameters() = 0;
+        virtual bool NegotiateComponentParameters(OMX_PTR aOutputParameters) = 0;
 
         bool SetDefaultCapabilityFlags();
         OSCL_IMPORT_REF bool CreateOutMemPool(uint32 num);
@@ -542,7 +543,7 @@
         bool SendBeginOfMediaStreamCommand(void);
         bool SendEndOfTrackCommand(void);
 
-
+        bool AppendExtraDataToBuffer(InputBufCtrlStruct* aInputBuffer, OMX_EXTRADATATYPE aType, uint8* aExtraData, uint8 aDataLength);
 
         virtual bool ReleaseAllPorts() = 0;
         bool DeleteOMXBaseDecoder();
@@ -634,6 +635,7 @@
         bool	iKeepDroppingMsgsUntilMarkerBit;
         bool	iFirstDataMsgAfterBOS;
         InputBufCtrlStruct *iInputBufferUnderConstruction;
+        bool	iIncompleteFrame;
 
         OSCL_IMPORT_REF void DropCurrentBufferUnderConstruction();
         OSCL_IMPORT_REF void SendIncompleteBufferUnderConstruction();
@@ -669,7 +671,8 @@
         bool iSetMarkerBitForEveryFrag; // is every fragment complete frame (e.g. AVC file playback = each fragment is a NAL)
         bool iIsOMXComponentMultiThreaded;
         bool iOMXComponentSupportsPartialFrames;
-        bool iOMXComponentNeedsNALStartCode;
+        bool iOMXComponentUsesNALStartCodes;
+        bool iOMXComponentUsesFullAVCFrames;
         bool iOMXComponentCanHandleIncompleteFrames;
 
         // State definitions for HandleProcessingState() state machine
@@ -781,6 +784,17 @@
         bool iResetInProgress;
         bool iResetMsgSent;
         bool iStopInResetMsgSent;
+
+        // AVC NAL counter and size array
+        uint32 iNALCount;
+        uint32 iNALSizeArray[MAX_NAL_PER_FRAME]; // NAL count shouldn't exceed 100
+
+        OsclAny **out_ctrl_struct_ptr ;
+        OsclAny **out_buff_hdr_ptr ;
+        OsclAny **in_ctrl_struct_ptr ;
+        OsclAny **in_buff_hdr_ptr ;
+
+
 };
 
 
diff --git a/nodes/pvomxbasedecnode/src/pvmf_omx_basedec_node.cpp b/nodes/pvomxbasedecnode/src/pvmf_omx_basedec_node.cpp
index 5851af4..60ae020 100644
--- a/nodes/pvomxbasedecnode/src/pvmf_omx_basedec_node.cpp
+++ b/nodes/pvomxbasedecnode/src/pvmf_omx_basedec_node.cpp
@@ -28,7 +28,7 @@
 #include "omx_core.h"
 #include "pvmf_omx_basedec_callbacks.h"     //used for thin AO in Decoder's callbacks
 #include "pv_omxcore.h"
-
+#include "pv_omx_config_parser.h"
 #define CONFIG_SIZE_AND_VERSION(param) \
 	    param.nSize=sizeof(param); \
 	    param.nVersion.s.nVersionMajor = SPECVERSIONMAJOR; \
@@ -1502,6 +1502,7 @@
 
     OutputBufCtrlStruct *output_buf = NULL;
     int32 errcode = OsclErrNone;
+    uint32 ii;
 
     // try to get output buffer header
     OSCL_TRY(errcode, output_buf = (OutputBufCtrlStruct *) iOutBufMemoryPool->allocate(iOutputAllocSize));
@@ -1536,6 +1537,19 @@
     iOutBufMemoryPool->notifyfreechunkavailable(*this, (OsclAny *)iOutBufMemoryPool);
     iNumOutstandingOutputBuffers++;
 
+    for (ii = 0;ii < iNumOutputBuffers;ii++)
+    {
+        if (output_buf == out_ctrl_struct_ptr[ii])
+        {
+            break;
+        }
+    }
+
+    if (ii == iNumOutputBuffers)
+        return false;
+
+    output_buf->pBufHdr = (OMX_BUFFERHEADERTYPE *)out_buff_hdr_ptr[ii];
+
     output_buf->pBufHdr->nFilledLen = 0; // make sure you tell OMX component buffer is empty
     output_buf->pBufHdr->nOffset = 0;
     output_buf->pBufHdr->pAppPrivate = output_buf; // set pAppPrivate to be pointer to output_buf
@@ -1562,9 +1576,10 @@
     iOMXComponentSupportsExternalOutputBufferAlloc = false;
     iOMXComponentSupportsExternalInputBufferAlloc = false;
     iOMXComponentSupportsMovableInputBuffers = false;
-    iOMXComponentNeedsNALStartCode = true;
+    iOMXComponentUsesNALStartCodes = true;
     iOMXComponentSupportsPartialFrames = false;
     iOMXComponentCanHandleIncompleteFrames = true;
+    iOMXComponentUsesFullAVCFrames = false;
 
     return true;
 }
@@ -1743,8 +1758,8 @@
         uint32 current_msg_marker;
         if (iSetMarkerBitForEveryFrag == true) // PV AVC case
         {
-
             current_msg_marker = iDataIn->getMarkerInfo() & PVMF_MEDIA_DATA_MARKER_INFO_END_OF_NAL_BIT;
+            current_msg_marker |= iDataIn->getMarkerInfo() & PVMF_MEDIA_DATA_MARKER_INFO_M_BIT;
         }
         else
         {
@@ -1771,7 +1786,8 @@
                             (0, "%s::SendInputBufferToOMXComponent() Dropping input msg with seqnum %d until marker bit", iName.Str(), current_msg_seq_num));
 
             //if msg has marker bit, stop dropping msgs
-            if (current_msg_marker != 0)
+            if ((current_msg_marker != 0 && !iOMXComponentUsesFullAVCFrames) || // frame or NAL boundaries
+                    ((current_msg_marker & PVMF_MEDIA_DATA_MARKER_INFO_M_BIT) && iOMXComponentUsesFullAVCFrames)) // only frame boundaries
             {
                 iKeepDroppingMsgsUntilMarkerBit = false;
                 // also remember the sequence number & timestamp so that we have reference
@@ -1896,7 +1912,8 @@
             iDataIn.Unbind();
 
             //if msg has marker bit, stop dropping msgs
-            if (current_msg_marker != 0)
+            if ((current_msg_marker != 0 && !iOMXComponentUsesFullAVCFrames) || // frame or NAL boundaries
+                    ((current_msg_marker & PVMF_MEDIA_DATA_MARKER_INFO_M_BIT) && iOMXComponentUsesFullAVCFrames)) // only frame boundaries
             {
                 iKeepDroppingMsgsUntilMarkerBit = false;
                 // also remember the sequence number & timestamp so that we have reference
@@ -1913,8 +1930,9 @@
 
     InputBufCtrlStruct *input_buf = NULL;
     int32 errcode = OsclErrNone;
+    uint32 ii;
 
-// NOTE: a) if NAL start codes must be inserted i.e. iOMXComponentNeedsNALStartCodes is TRUE, then iOMXComponentSupportsMovableInputBuffers must be set to FALSE.
+// NOTE: a) if NAL start codes must be inserted i.e. iOMXComponentUsesNALStartCodess is TRUE, then iOMXComponentSupportsMovableInputBuffers must be set to FALSE.
 //		 b) if iOMXComponentSupportsPartialFrames is FALSE, then iOMXComponentSupportsMovableInputBuffers must be FALSE as well
 //		 c) if iOMXCOmponentSupportsPartialFrames is FALSE, and the input frame/NAL size is larger than the buffer size, the frame/NAL is discarded
 
@@ -1959,6 +1977,19 @@
             iInBufMemoryPool->notifyfreechunkavailable(*this, (OsclAny*) iInBufMemoryPool);
             iNumOutstandingInputBuffers++;
 
+            for (ii = 0;ii < iNumInputBuffers;ii++)
+            {
+                if (input_buf == in_ctrl_struct_ptr[ii])
+                {
+                    break;
+                }
+            }
+
+            if (ii == iNumInputBuffers)
+                return false;
+
+            input_buf->pBufHdr = (OMX_BUFFERHEADERTYPE *)in_buff_hdr_ptr[ii];
+
             // Now we have the buffer header (i.e. a buffer) to send to component:
             // Depending on OMX component capabilities, either pass the input msg fragment(s) directly
             //	into OMX component without copying (and update the input msg refcount)
@@ -1980,6 +2011,14 @@
                 iObtainNewInputBuffer = false;
             }
 
+            if (iOMXComponentUsesFullAVCFrames)
+            {
+                // reset NAL counters
+                oscl_memset(iNALSizeArray, 0, sizeof(uint32) * iNALCount);
+                iNALCount = 0;
+            }
+
+            iIncompleteFrame = false;
             iFirstPieceOfPartialFrame = true;
         }
         else
@@ -2009,6 +2048,7 @@
             if (iSetMarkerBitForEveryFrag == true) // PV AVC case
             {
                 iCurrentMsgMarkerBit = iDataIn->getMarkerInfo() & PVMF_MEDIA_DATA_MARKER_INFO_END_OF_NAL_BIT;
+                iCurrentMsgMarkerBit |= iDataIn->getMarkerInfo() & PVMF_MEDIA_DATA_MARKER_INFO_M_BIT;
             }
             else
             {
@@ -2077,7 +2117,7 @@
             // in this case, no need to use input msg refcounter, each buffer fragment is copied over and treated separately
             (input_buf->pMediaData).Unbind();
 
-            if (iOMXComponentNeedsNALStartCode == true && iFirstPieceOfPartialFrame == true)
+            if (iOMXComponentUsesNALStartCodes == true && iFirstPieceOfPartialFrame == true)
             {
                 oscl_memcpy(input_buf->pBufHdr->pBuffer + input_buf->pBufHdr->nFilledLen,
                             (void *) NAL_START_CODE,
@@ -2100,7 +2140,18 @@
             }
 
             // can the remaining fragment fit into the buffer?
-            uint32 bytes_remaining_in_buffer = (input_buf->pBufHdr->nAllocLen - input_buf->pBufHdr->nFilledLen);
+            uint32 bytes_remaining_in_buffer;
+
+            if (iOMXComponentUsesFullAVCFrames && !iOMXComponentUsesNALStartCodes)
+            {
+                // need to keep to account the extra data appended at the end of the buffer
+                int32 temp = (input_buf->pBufHdr->nAllocLen - input_buf->pBufHdr->nFilledLen - (20 + 4 * (iNALCount + 1) + 20 + 6));//(sizeOfExtraDataStruct_NAL + sizeOfExTraData + sizeOfExtraDataStruct_terminator + padding);
+                bytes_remaining_in_buffer = (uint32)((temp < 0) ? 0 : temp);
+            }
+            else
+            {
+                bytes_remaining_in_buffer = (input_buf->pBufHdr->nAllocLen - input_buf->pBufHdr->nFilledLen);
+            }
 
             if (iFragmentSizeRemainingToCopy <= bytes_remaining_in_buffer)
             {
@@ -2111,14 +2162,33 @@
 
                 input_buf->pBufHdr->nFilledLen += iFragmentSizeRemainingToCopy;
 
+                if (iOMXComponentUsesFullAVCFrames)
+                {
+                    iNALSizeArray[iNALCount] += iFragmentSizeRemainingToCopy;
+
+                    if ((iCurrentMsgMarkerBit & PVMF_MEDIA_DATA_MARKER_INFO_END_OF_NAL_BIT) &&
+                            (1 == iDataIn->getNumFragments()))
+                    {
+                        // streaming case (and 1 nal per frame file format case)
+                        iNALCount++;
+                        // we have a full NAL now, so insert a start code (if it needs it) for the next NAL, the next time through the loop
+                        iFirstPieceOfPartialFrame = true;
+                    }
+                    else if (iDataIn->getNumFragments() > 1)
+                    {
+                        // multiple nals per frame file format case
+                        iNALCount = iCurrFragNum + 1;
+                        // we have a full NAL now, so insert a start code for the next NAL, the next time through the loop
+                        iFirstPieceOfPartialFrame = true;
+                    }
+                }
+
                 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
                                 (0, "%s::SendInputBufferToOMXComponent() - Copied %d bytes of fragment %d out of %d into buffer 0x%x of size %d, TS=%d ", iName.Str(), iFragmentSizeRemainingToCopy, iCurrFragNum + 1, iDataIn->getNumFragments(), input_buf->pBufHdr->pBuffer, input_buf->pBufHdr->nFilledLen, iInTimestamp));
 
                 iCopyPosition += iFragmentSizeRemainingToCopy;
                 iFragmentSizeRemainingToCopy = 0;
 
-
-
                 iIsNewDataFragment = true; // done with this fragment. Get a new one
                 iCurrFragNum++;
 
@@ -2133,11 +2203,25 @@
                                 bytes_remaining_in_buffer);
 
                     PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
-                                    (0, "%s::SendInputBufferToOMXComponent() - Copied %d bytes of fragment %d out of %d into buffer 0x%x of size %d, TS=%d", iName.Str(), input_buf->pBufHdr->nAllocLen, iCurrFragNum + 1, iDataIn->getNumFragments(), input_buf->pBufHdr->pBuffer, input_buf->pBufHdr->nFilledLen, iInTimestamp));
+                                    (0, "%s::SendInputBufferToOMXComponent() - Copied %d bytes of fragment %d out of %d into buffer 0x%x of size %d, TS=%d", iName.Str(), bytes_remaining_in_buffer, iCurrFragNum + 1, iDataIn->getNumFragments(), input_buf->pBufHdr->pBuffer, input_buf->pBufHdr->nFilledLen, iInTimestamp));
                 }
-                input_buf->pBufHdr->nFilledLen = input_buf->pBufHdr->nAllocLen;
+
+                input_buf->pBufHdr->nFilledLen += bytes_remaining_in_buffer;
+
+                if (iOMXComponentUsesFullAVCFrames && (bytes_remaining_in_buffer > 0))
+                {
+                    PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                                    (0, "%s::SendInputBufferToOMXComponent() - Reconstructing partial frame (iOMXComponentUsesFullAVCFrames) - more data cannot fit in buffer 0x%x, TS=%d.Skipping data.", iName.Str(), input_buf->pBufHdr->pBuffer, iInTimestamp));
+
+                    iNALSizeArray[iNALCount] += bytes_remaining_in_buffer;
+
+                    // increment NAL count regardless if market bit is present or not since it is a fragment
+                    iNALCount++;
+                }
+
                 iCopyPosition += bytes_remaining_in_buffer; // move current position within fragment forward
                 iFragmentSizeRemainingToCopy -= bytes_remaining_in_buffer;
+                iIncompleteFrame = true;
                 iIsNewDataFragment = false; // set the flag to indicate we're still working on the "old" fragment
                 if (!iOMXComponentSupportsPartialFrames)
                 {
@@ -2150,8 +2234,6 @@
                     iIsNewDataFragment = true; // done with this fragment, get a new one
                     iCurrFragNum++;
                 }
-
-
             }
 
         }
@@ -2206,9 +2288,23 @@
                     //(i.e. this is the last piece of a broken up piece), put marker bit on it unconditionally
                     PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
                                     (0, "%s::SendInputBufferToOMXComponent() - END OF FRAGMENT - Multifragmented msg AVC case, Buffer 0x%x MARKER bit set to 1", iName.Str(), input_buf->pBufHdr->pBuffer));
-                    input_buf->pBufHdr->nFlags |= OMX_BUFFERFLAG_ENDOFFRAME;
-                    // if NAL is complete, make sure you send it and obtain new buffer
-                    iObtainNewInputBuffer = true;
+
+                    if (!iOMXComponentUsesFullAVCFrames)
+                    {
+                        // NAL mode, (uses OMX_BUFFERFLAG_ENDOFFRAME flag to mark end of NAL instead of end of frame)
+                        // once NAL is complete, make sure you send it and obtain new buffer
+                        input_buf->pBufHdr->nFlags |= OMX_BUFFERFLAG_ENDOFFRAME;
+                        iObtainNewInputBuffer = true;
+                    }
+                    else if (iCurrentMsgMarkerBit & PVMF_MEDIA_DATA_MARKER_INFO_M_BIT)
+                    {
+                        // frame mode (send out full AVC frames)
+                        if (iCurrFragNum == iDataIn->getNumFragments())
+                        {
+                            input_buf->pBufHdr->nFlags |= OMX_BUFFERFLAG_ENDOFFRAME;
+                            iObtainNewInputBuffer = true;
+                        }
+                    }
                 }
                 else if ((iDataIn->getNumFragments() == 1))
                 {
@@ -2217,11 +2313,19 @@
                     PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
                                     (0, "%s::SendInputBufferToOMXComponent() - END OF FRAGMENT - Buffer 0x%x MARKER bit set to %d", iName.Str(), input_buf->pBufHdr->pBuffer, iCurrentMsgMarkerBit));
 
-                    if (iCurrentMsgMarkerBit)
+                    // if either PVMF_MEDIA_DATA_MARKER_INFO_END_OF_NAL_BIT or PVMF_MEDIA_DATA_MARKER_INFO_M_BIT
+                    // and we're not in "frame" mode, then set OMX_BUFFERFLAG_ENDOFFRAME
+                    if (iCurrentMsgMarkerBit && !iOMXComponentUsesFullAVCFrames)
                     {
-                        input_buf->pBufHdr->nFlags |= OMX_BUFFERFLAG_ENDOFFRAME;
+                        // NAL mode, (uses OMX_BUFFERFLAG_ENDOFFRAME flag to mark end of NAL instead of end of frame)
                         // once NAL is complete, make sure you send it and obtain new buffer
-
+                        input_buf->pBufHdr->nFlags |= OMX_BUFFERFLAG_ENDOFFRAME;
+                        iObtainNewInputBuffer = true;
+                    }
+                    else if (iCurrentMsgMarkerBit & PVMF_MEDIA_DATA_MARKER_INFO_M_BIT)
+                    {
+                        // frame mode
+                        input_buf->pBufHdr->nFlags |= OMX_BUFFERFLAG_ENDOFFRAME;
                         iObtainNewInputBuffer = true;
                     }
                 }
@@ -2287,12 +2391,29 @@
             // if partial frames are not supported, this flag will be set only
             // if the partial frame/NAL has been assembled, so we can send it
 
+            // if incomplete frames are not supported then let go of this buffer, and move on
+            if (iIncompleteFrame && !iOMXComponentCanHandleIncompleteFrames)
+            {
+                DropCurrentBufferUnderConstruction();
+            }
+            else
+            {
+                // append extra data for "frame" mode
+                if (iOMXComponentUsesFullAVCFrames && !iOMXComponentUsesNALStartCodes)
+                {
+                    if (!AppendExtraDataToBuffer(input_buf, (OMX_EXTRADATATYPE) OMX_ExtraDataNALSizeArray, (uint8*) iNALSizeArray, 4 * iNALCount))
+                    {
+                        // if AppendExtraDataToBuffer returns false, that means there wasn't enough room to write the data, so drop the buffer
+                        DropCurrentBufferUnderConstruction();
+                    }
+                }
 
-            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
-                            (0, "%s::SendInputBufferToOMXComponent()  - Sending Buffer 0x%x to OMX Component MARKER field set to %x, TS=%d", iName.Str(), input_buf->pBufHdr->pBuffer, input_buf->pBufHdr->nFlags, iInTimestamp));
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                                (0, "%s::SendInputBufferToOMXComponent()  - Sending Buffer 0x%x to OMX Component MARKER field set to %x, TS=%d", iName.Str(), input_buf->pBufHdr->pBuffer, input_buf->pBufHdr->nFlags, iInTimestamp));
 
-            OMX_EmptyThisBuffer(iOMXDecoder, input_buf->pBufHdr);
-            iInputBufferUnderConstruction = NULL; // this buffer is gone to OMX component now
+                OMX_EmptyThisBuffer(iOMXDecoder, input_buf->pBufHdr);
+                iInputBufferUnderConstruction = NULL; // this buffer is gone to OMX component now
+            }
         }
 
         // if we sent all fragments to OMX component, decouple the input message from iDataIn
@@ -2310,14 +2431,90 @@
     }
     while (iCurrFragNum < iInNumFrags); //iDataIn->getNumFragments());
 
-
-
     PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
                     (0, "%s::SendInputBufferToOMXComponent() Out", iName.Str()));
 
     return true;
 
 }
+
+/////////////////////////////////////////////////////////////////////////////
+OSCL_EXPORT_REF bool PVMFOMXBaseDecNode::AppendExtraDataToBuffer(InputBufCtrlStruct* aInputBuffer,
+        OMX_EXTRADATATYPE aType,
+        uint8* aExtraData,
+        uint8 aDataLength)
+
+{
+    // This function is used to append AVC NAL info to the buffer using the OMX_EXTRADATA_TYPE structure, when
+    // a component requires buffers with full AVC frames rather than just NALs
+    PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                    (0, "%s::AppendExtraDataToBuffer() In", iName.Str()));
+
+
+    if ((aType != OMX_ExtraDataNone) && (aExtraData != NULL) && (aInputBuffer->pBufHdr->pBuffer != NULL))
+    {
+        const uint32 sizeOfExtraDataStruct = 20; // 20 is the number of bytes for the OMX_OTHER_EXTRADATATYPE structure (minus the data hint member)
+
+        OMX_OTHER_EXTRADATATYPE extra;
+        OMX_OTHER_EXTRADATATYPE terminator;
+
+        CONFIG_SIZE_AND_VERSION(extra);
+        CONFIG_SIZE_AND_VERSION(terminator);
+
+        extra.nPortIndex = iInputPortIndex;
+        terminator.nPortIndex = iInputPortIndex;
+
+        extra.eType = aType;
+        extra.nSize = (sizeOfExtraDataStruct + aDataLength + 3) & ~3; // size + padding for byte alignment
+        extra.nDataSize = aDataLength;
+
+        // fill in fields for terminator
+        terminator.eType = OMX_ExtraDataNone;
+        terminator.nDataSize = 0;
+
+        // make sure there is enough room in the buffer
+        if (aInputBuffer->pBufHdr->nAllocLen < (aInputBuffer->pBufHdr->nFilledLen + sizeOfExtraDataStruct + aDataLength + terminator.nSize + 6))
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                            (0, "%s::AppendExtraDataToBuffer()  - Error (not enough room in buffer) appending extra data to Buffer 0x%x to OMX Component, TS=%d", iName.Str(), aInputBuffer->pBufHdr->pBuffer, iInTimestamp));
+
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                            (0, "%s::AppendExtraDataToBuffer() Out", iName.Str()));
+
+            return false;
+        }
+
+        // copy extra data into buffer
+        // need to align to 4 bytes
+        OMX_U8* buffer = aInputBuffer->pBufHdr->pBuffer + aInputBuffer->pBufHdr->nOffset + aInputBuffer->pBufHdr->nFilledLen;
+        buffer = (OMX_U8*)(((OMX_U32) buffer + 3) & ~3);
+
+        oscl_memcpy(buffer, &extra, sizeOfExtraDataStruct);
+        oscl_memcpy(buffer + sizeOfExtraDataStruct, aExtraData, aDataLength);
+        buffer += extra.nSize;
+
+        oscl_memcpy(buffer, &terminator, terminator.nSize);
+
+        // flag buffer
+        aInputBuffer->pBufHdr->nFlags |= OMX_BUFFERFLAG_EXTRADATA;
+
+        PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                        (0, "%s::AppendExtraDataToBuffer()  - Appending extra data to Buffer 0x%x to OMX Component, TS=%d", iName.Str(), aInputBuffer->pBufHdr->pBuffer, iInTimestamp));
+
+        PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                        (0, "%s::AppendExtraDataToBuffer() Out", iName.Str()));
+
+        return true;
+    }
+    else
+    {
+        PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                        (0, "%s::AppendExtraDataToBuffer() Out", iName.Str()));
+
+        return false;
+    }
+}
+
 /////////////////////////////////////////////////////////////////////////////
 OSCL_EXPORT_REF bool PVMFOMXBaseDecNode::SendConfigBufferToOMXComponent(uint8 *initbuffer, uint32 initbufsize)
 
@@ -2404,7 +2601,7 @@
         iCopyPosition = 0;
         iFragmentSizeRemainingToCopy  = initbufsize;
 
-        if (iOMXComponentNeedsNALStartCode == true)
+        if (iOMXComponentUsesNALStartCodes == true)
         {
             oscl_memcpy(input_buf->pBufHdr->pBuffer,
                         (void *) NAL_START_CODE,
@@ -2731,6 +2928,9 @@
                                     (OMX_U32)aActualBufferSize,		// buffer size
                                     pB);						// buffer data ptr
 
+                in_ctrl_struct_ptr[ii] = ctrl_struct_ptr[ii];
+                in_buff_hdr_ptr[ii] = temp->pBufHdr;
+
             }
             else
             {
@@ -2748,6 +2948,11 @@
                                     (OMX_U32)aActualBufferSize,		// buffer size
                                     pB);						// buffer data ptr
 
+                out_ctrl_struct_ptr[ii] = ctrl_struct_ptr[ii];
+                out_buff_hdr_ptr[ii] = temp->pBufHdr;
+
+
+
 
             }
 
@@ -2769,6 +2974,9 @@
                                          aPortIndex,
                                          ctrl_struct_ptr[ii],
                                          (OMX_U32)aActualBufferSize);
+
+                in_ctrl_struct_ptr[ii] = ctrl_struct_ptr[ii];
+                in_buff_hdr_ptr[ii] = temp->pBufHdr;
             }
             else
             {
@@ -2778,6 +2986,9 @@
                                          aPortIndex,
                                          ctrl_struct_ptr[ii],
                                          (OMX_U32)aActualBufferSize);
+
+                out_ctrl_struct_ptr[ii] = ctrl_struct_ptr[ii];
+                out_buff_hdr_ptr[ii] = temp->pBufHdr;
             }
 
         }
@@ -2909,10 +3120,20 @@
     // mark buffers as freed (so as not to do it twice)
     if (aIsThisInputBuffer)
     {
+        oscl_free(in_ctrl_struct_ptr);
+        oscl_free(in_buff_hdr_ptr);
+
+        in_ctrl_struct_ptr = NULL;
+        in_buff_hdr_ptr = NULL;
         iInputBuffersFreed = true;
     }
     else
     {
+        oscl_free(out_ctrl_struct_ptr);
+        oscl_free(out_buff_hdr_ptr);
+
+        out_ctrl_struct_ptr = NULL;
+        out_buff_hdr_ptr = NULL;
         iOutputBuffersFreed = true;
     }
     PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "%s::FreeBuffersFromComponent() done", iName.Str()));
@@ -3398,7 +3619,9 @@
 void PVMFOMXBaseDecNode::DoPrepare(PVMFOMXBaseDecNodeCommand& aCmd)
 {
     OMX_ERRORTYPE err = OMX_ErrorNone;
-    OMX_STRING Role = NULL;
+    OMXConfigParserInputs aInputParameters;
+    aInputParameters.cComponentRole = NULL;
+    OMX_PTR aOutputParameters = NULL;
 
     switch (iInterfaceState)
     {
@@ -3415,48 +3638,61 @@
             PVMFFormatType format = ((PVMFOMXDecPort*)iInPort)->iFormat;
             // AAC
             if (format == PVMF_MIME_MPEG4_AUDIO ||
+                    format == PVMF_MIME_3640 ||
                     format == PVMF_MIME_LATM ||
                     format == PVMF_MIME_ADIF ||
                     format == PVMF_MIME_ASF_MPEG4_AUDIO ||
                     format == PVMF_MIME_AAC_SIZEHDR)
             {
-                Role = (OMX_STRING)"audio_decoder.aac";
+                aInputParameters.cComponentRole = (OMX_STRING)"audio_decoder.aac";
+                aOutputParameters = (AudioOMXConfigParserOutputs *)oscl_malloc(sizeof(AudioOMXConfigParserOutputs));
             }
             // AMR
             else if (format == PVMF_MIME_AMR_IF2 ||
                      format == PVMF_MIME_AMR_IETF ||
-                     format == PVMF_MIME_AMR ||
-                     format == PVMF_MIME_AMRWB_IETF ||
+                     format == PVMF_MIME_AMR)
+            {
+                aInputParameters.cComponentRole = (OMX_STRING)"audio_decoder.amrnb";
+                aOutputParameters = (AudioOMXConfigParserOutputs *)oscl_malloc(sizeof(AudioOMXConfigParserOutputs));
+            }
+            else if (format == PVMF_MIME_AMRWB_IETF ||
                      format == PVMF_MIME_AMRWB)
             {
-                Role = (OMX_STRING)"audio_decoder.amr";
+                aInputParameters.cComponentRole = (OMX_STRING)"audio_decoder.amrwb";
+                aOutputParameters = (AudioOMXConfigParserOutputs *)oscl_malloc(sizeof(AudioOMXConfigParserOutputs));
             }
             else if (format == PVMF_MIME_MP3)
             {
-                Role = (OMX_STRING)"audio_decoder.mp3";
+                aInputParameters.cComponentRole = (OMX_STRING)"audio_decoder.mp3";
+                aOutputParameters = (AudioOMXConfigParserOutputs *)oscl_malloc(sizeof(AudioOMXConfigParserOutputs));
             }
             else if (format ==  PVMF_MIME_WMA)
             {
-                Role = (OMX_STRING)"audio_decoder.wma";
+                aInputParameters.cComponentRole = (OMX_STRING)"audio_decoder.wma";
+                aOutputParameters = (AudioOMXConfigParserOutputs *)oscl_malloc(sizeof(AudioOMXConfigParserOutputs));
             }
             else if (format ==  PVMF_MIME_H264_VIDEO ||
                      format == PVMF_MIME_H264_VIDEO_MP4 ||
                      format == PVMF_MIME_H264_VIDEO_RAW)
             {
-                Role = (OMX_STRING)"video_decoder.avc";
+                aInputParameters.cComponentRole = (OMX_STRING)"video_decoder.avc";
+                aOutputParameters = (VideoOMXConfigParserOutputs *)oscl_malloc(sizeof(VideoOMXConfigParserOutputs));
             }
             else if (format ==  PVMF_MIME_M4V)
             {
-                Role = (OMX_STRING)"video_decoder.mpeg4";
+                aInputParameters.cComponentRole = (OMX_STRING)"video_decoder.mpeg4";
+                aOutputParameters = (VideoOMXConfigParserOutputs *)oscl_malloc(sizeof(VideoOMXConfigParserOutputs));
             }
             else if (format ==  PVMF_MIME_H2631998 ||
                      format == PVMF_MIME_H2632000)
             {
-                Role = (OMX_STRING)"video_decoder.h263";
+                aInputParameters.cComponentRole = (OMX_STRING)"video_decoder.h263";
+                aOutputParameters = (VideoOMXConfigParserOutputs *)oscl_malloc(sizeof(VideoOMXConfigParserOutputs));
             }
             else if (format ==  PVMF_MIME_WMV)
             {
-                Role = (OMX_STRING)"video_decoder.wmv";
+                aInputParameters.cComponentRole = (OMX_STRING)"video_decoder.wmv";
+                aOutputParameters = (VideoOMXConfigParserOutputs *)oscl_malloc(sizeof(VideoOMXConfigParserOutputs));
             }
             else
             {
@@ -3465,9 +3701,16 @@
                 CommandComplete(iInputCommands, aCmd, PVMFErrArgument);
                 return;
             }
+            if (aOutputParameters == NULL)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR,
+                                (0, "%s::Can't allocate memory for OMXConfigParser output!", iName.Str()))
+                CommandComplete(iInputCommands, aCmd, PVMFErrResource);
+                return;
+            }
 
             PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_DEBUG,
-                            (0, "%s::Initializing OMX component and decoder for role %s", iName.Str(), Role));
+                            (0, "%s::Initializing OMX component and decoder for role %s", iName.Str(), aInputParameters.cComponentRole));
 
             /* Set callback structure */
             iCallbacks.EventHandler    = CallbackEventHandler; //event_handler;
@@ -3479,14 +3722,39 @@
             // then, create the component. If multiple components fit the role,
             // the first one registered will be selected. If that one fails to
             // be created, the second one in the list is selected etc.
+            OMX_BOOL status;
             OMX_U32 num_comps = 0;
             OMX_STRING *CompOfRole;
+            OMX_S8 CompName[PV_OMX_MAX_COMPONENT_NAME_LENGTH];
+
+            //AudioOMXConfigParserOutputs aOutputParameters;
+            aInputParameters.inPtr = (uint8*)((PVMFOMXDecPort*)iInPort)->iTrackConfig;
+            aInputParameters.inBytes = (int32)((PVMFOMXDecPort*)iInPort)->iTrackConfigSize;
+
+            if (aInputParameters.inBytes == 0 || aInputParameters.inPtr == NULL)
+            {
+                if (format == PVMF_MIME_WMA ||
+                        format == PVMF_MIME_MPEG4_AUDIO ||
+                        format == PVMF_MIME_3640 ||
+                        format == PVMF_MIME_LATM ||
+                        format == PVMF_MIME_ADIF ||
+                        format == PVMF_MIME_ASF_MPEG4_AUDIO ||
+                        format == PVMF_MIME_AAC_SIZEHDR)
+                {
+                    PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR,
+                                    (0, "%s::DoPrepare() Cannot get component parameters", iName.Str()));
+                    oscl_free(aOutputParameters);
+                    CommandComplete(iInputCommands, aCmd, PVMFErrNoResources);
+                    return;
+
+                }
+            }
             // call once to find out the number of components that can fit the role
-            OMX_GetComponentsOfRole(Role, &num_comps, NULL);
+            OMX_GetComponentsOfRole(aInputParameters.cComponentRole, &num_comps, NULL);
             uint32 ii;
 
             PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_DEBUG,
-                            (0, "%s::DoPrepare(): There are %d components of role %s ", iName.Str(), num_comps, Role));
+                            (0, "%s::DoPrepare(): There are %d components of role %s ", iName.Str(), num_comps, aInputParameters.cComponentRole));
 
             if (num_comps > 0)
             {
@@ -3496,26 +3764,39 @@
                     CompOfRole[ii] = (OMX_STRING) oscl_malloc(PV_OMX_MAX_COMPONENT_NAME_LENGTH * sizeof(OMX_U8));
 
                 // call 2nd time to get the component names
-                OMX_GetComponentsOfRole(Role, &num_comps, (OMX_U8 **)CompOfRole);
+                OMX_GetComponentsOfRole(aInputParameters.cComponentRole, &num_comps, (OMX_U8 **)CompOfRole);
 
                 for (ii = 0; ii < num_comps; ii++)
                 {
-                    // try to create component
-                    err = OMX_GetHandle(&iOMXDecoder, (OMX_STRING) CompOfRole[ii], (OMX_PTR) this, (OMX_CALLBACKTYPE *) & iCallbacks);
-                    // if successful, no need to continue
-                    if ((err == OMX_ErrorNone) && (iOMXDecoder != NULL))
+                    aInputParameters.cComponentName = CompOfRole[ii];
+                    status = OMXConfigParser(&aInputParameters, aOutputParameters);
+                    if (status == OMX_TRUE)
                     {
-                        PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_DEBUG,
-                                        (0, "%s::DoPrepare(): Got Component %s handle ", iName.Str(), CompOfRole[ii]));
+                        // need to actually copy name since the memory for CompOfRole needs to be freed before a possible return or there will a be a memory leak,
+                        // but also needs to valid long enough to use it when getting the number of roles later on
+                        oscl_strncpy((OMX_STRING)CompName, (OMX_STRING) CompOfRole[ii], PV_OMX_MAX_COMPONENT_NAME_LENGTH);
 
-                        break;
+                        // try to create component
+                        err = OMX_GetHandle(&iOMXDecoder, (OMX_STRING) aInputParameters.cComponentName, (OMX_PTR) this, (OMX_CALLBACKTYPE *) & iCallbacks);
+                        // if successful, no need to continue
+                        if ((err == OMX_ErrorNone) && (iOMXDecoder != NULL))
+                        {
+                            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_DEBUG,
+                                            (0, "%s::DoPrepare(): Got Component %s handle ", iName.Str(), aInputParameters.cComponentName));
+                            break;
+                        }
+                        else
+                        {
+                            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_DEBUG,
+                                            (0, "%s::DoPrepare(): Cannot get component %s handle, try another component if available", iName.Str(), aInputParameters.cComponentName));
+                        }
                     }
                     else
                     {
-                        PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_DEBUG,
-                                        (0, "%s::DoPrepare(): Cannot get component %s handle, try another component if available", iName.Str(), CompOfRole[ii]));
+                        status = OMX_FALSE;
                     }
 
+
                 }
                 // whether successful or not, need to free CompOfRoles
                 for (ii = 0; ii < num_comps; ii++)
@@ -3525,12 +3806,14 @@
                 }
 
                 oscl_free(CompOfRole);
+
                 // check if there was a problem
                 if ((err != OMX_ErrorNone) || (iOMXDecoder == NULL))
                 {
                     PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR,
                                     (0, "%s::Can't get handle for decoder!", iName.Str()));
                     iOMXDecoder = NULL;
+                    oscl_free(aOutputParameters);
                     CommandComplete(iInputCommands, aCmd, PVMFErrResource);
                     return;
                 }
@@ -3538,8 +3821,9 @@
             else
             {
                 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR,
-                                (0, "%s::No component can handle role %s !", iName.Str(), Role));
+                                (0, "%s::No component can handle role %s !", iName.Str(), aInputParameters.cComponentRole));
                 iOMXDecoder = NULL;
+                oscl_free(aOutputParameters);
                 CommandComplete(iInputCommands, aCmd, PVMFErrResource);
                 return;
             }
@@ -3548,19 +3832,38 @@
 
             if (!iOMXDecoder)
             {
+                oscl_free(aOutputParameters);
                 CommandComplete(iInputCommands, aCmd, PVMFErrNoResources);
                 return;
             }
 
-            OMX_PARAM_COMPONENTROLETYPE RoleParam;
-            CONFIG_SIZE_AND_VERSION(RoleParam);
-            oscl_strncpy((OMX_STRING)RoleParam.cRole, (OMX_STRING)Role, OMX_MAX_STRINGNAME_SIZE);
-            err = OMX_SetParameter(iOMXDecoder, OMX_IndexParamStandardComponentRole, &RoleParam);
+            // find out how many roles the component supports
+            OMX_U32 NumRoles;
+            err = OMX_GetRolesOfComponent((OMX_STRING)CompName, &NumRoles, NULL);
             if (err != OMX_ErrorNone)
             {
                 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR,
-                                (0, "%s::DoPrepare() Problem setting component role", iName.Str()));
-                // ignore this error since component may not support this parameter
+                                (0, "%s::DoPrepare() Problem getting component roles", iName.Str()));
+
+                CommandComplete(iInputCommands, aCmd, PVMFErrResource);
+                return;
+            }
+
+            // if the component supports multiple roles, call OMX_SetParameter
+            if (NumRoles > 1)
+            {
+                OMX_PARAM_COMPONENTROLETYPE RoleParam;
+                CONFIG_SIZE_AND_VERSION(RoleParam);
+                oscl_strncpy((OMX_STRING)RoleParam.cRole, (OMX_STRING)aInputParameters.cComponentRole, OMX_MAX_STRINGNAME_SIZE);
+                err = OMX_SetParameter(iOMXDecoder, OMX_IndexParamStandardComponentRole, &RoleParam);
+                if (err != OMX_ErrorNone)
+                {
+                    PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR,
+                                    (0, "%s::DoPrepare() Problem setting component role", iName.Str()));
+
+                    CommandComplete(iInputCommands, aCmd, PVMFErrResource);
+                    return;
+                }
             }
 
             // GET CAPABILITY FLAGS FROM PV COMPONENT, IF this fails, use defaults
@@ -3577,33 +3880,43 @@
                 iOMXComponentSupportsExternalOutputBufferAlloc = (OMX_TRUE == Cap_flags.iOMXComponentSupportsExternalOutputBufferAlloc) ? true : false;
                 iOMXComponentSupportsMovableInputBuffers = (OMX_TRUE == Cap_flags.iOMXComponentSupportsMovableInputBuffers) ? true : false;
                 iOMXComponentSupportsPartialFrames = (OMX_TRUE == Cap_flags.iOMXComponentSupportsPartialFrames) ? true : false;
-                iOMXComponentNeedsNALStartCode = (OMX_FALSE == Cap_flags.iOMXComponentSupportsPartialFrames) ? true : false;
+                iOMXComponentUsesNALStartCodes = (OMX_TRUE == Cap_flags.iOMXComponentUsesNALStartCodes) ? true : false;
                 iOMXComponentCanHandleIncompleteFrames = (OMX_TRUE == Cap_flags.iOMXComponentCanHandleIncompleteFrames) ? true : false;
+                iOMXComponentUsesFullAVCFrames = (OMX_TRUE == Cap_flags.iOMXComponentUsesFullAVCFrames) ? true : false;
             }
 
             // do some sanity checking
 
             if ((format != PVMF_MIME_H264_VIDEO) && (format != PVMF_MIME_H264_VIDEO_MP4) && (format != PVMF_MIME_H264_VIDEO_RAW))
             {
-                iOMXComponentNeedsNALStartCode = false;
+                iOMXComponentUsesNALStartCodes = false;
+                iOMXComponentUsesFullAVCFrames = false;
+            }
+
+            if (iOMXComponentUsesFullAVCFrames)
+            {
+                iNALCount = 0;
+                oscl_memset(iNALSizeArray, 0, sizeof(uint32) * MAX_NAL_PER_FRAME); // 100 is max number of NALs
             }
 
             // make sure that copying is used where necessary
-            if (!iOMXComponentSupportsPartialFrames || iOMXComponentNeedsNALStartCode)
+            if (!iOMXComponentSupportsPartialFrames || iOMXComponentUsesNALStartCodes || iOMXComponentUsesFullAVCFrames)
             {
                 iOMXComponentSupportsMovableInputBuffers = false;
             }
 
             // find out about parameters
 
-            if (!NegotiateComponentParameters())
+            if (!NegotiateComponentParameters(aOutputParameters))
             {
                 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR,
                                 (0, "%s::DoPrepare() Cannot get component parameters", iName.Str()));
 
+                oscl_free(aOutputParameters);
                 CommandComplete(iInputCommands, aCmd, PVMFErrNoResources);
                 return;
             }
+            oscl_free(aOutputParameters);
 
             // create active objects to handle callbacks in case of multithreaded implementation
 
@@ -3687,6 +4000,31 @@
                 return;
             }
 
+            in_ctrl_struct_ptr = NULL;
+            in_buff_hdr_ptr = NULL;
+
+            in_ctrl_struct_ptr = (OsclAny **) oscl_malloc(iNumInputBuffers * sizeof(OsclAny *));
+
+            if (in_ctrl_struct_ptr == NULL)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                                (0, "%s::DoPrepare() in_ctrl_struct_ptr == NULL"));
+
+                CommandComplete(iInputCommands, aCmd, PVMFErrNoResources);
+                return ;
+            }
+
+            in_buff_hdr_ptr = (OsclAny **) oscl_malloc(iNumInputBuffers * sizeof(OsclAny *));
+
+            if (in_buff_hdr_ptr == NULL)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                                (0, "%s::DoPrepare() in_buff_hdr_ptr == NULL"));
+
+                CommandComplete(iInputCommands, aCmd, PVMFErrNoResources);
+                return ;
+            }
+
             if (!ProvideBuffersToComponent(iInBufMemoryPool, // allocator
                                            iInputAllocSize,	 // size to allocate from pool (hdr only or hdr+ buffer)
                                            iNumInputBuffers, // number of buffers
@@ -3714,6 +4052,32 @@
                 return;
             }
 
+            out_ctrl_struct_ptr = NULL;
+            out_buff_hdr_ptr = NULL;
+
+            out_ctrl_struct_ptr = (OsclAny **) oscl_malloc(iNumOutputBuffers * sizeof(OsclAny *));
+
+            if (out_ctrl_struct_ptr == NULL)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                                (0, "%s::DoPrepare() out_ctrl_struct_ptr == NULL"));
+
+                CommandComplete(iInputCommands, aCmd, PVMFErrNoResources);
+                return ;
+            }
+
+            out_buff_hdr_ptr = (OsclAny **) oscl_malloc(iNumOutputBuffers * sizeof(OsclAny *));
+
+            if (out_buff_hdr_ptr == NULL)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                                (0, "%s::DoPrepare()  out_buff_hdr_ptr == NULL"));
+
+                CommandComplete(iInputCommands, aCmd, PVMFErrNoResources);
+                return ;
+            }
+
+
             if (!ProvideBuffersToComponent(iOutBufMemoryPool, // allocator
                                            iOutputAllocSize,	 // size to allocate from pool (hdr only or hdr+ buffer)
                                            iNumOutputBuffers, // number of buffers
@@ -4450,6 +4814,11 @@
             iIsEOSSentToComponent = false;
             iIsEOSReceivedFromComponent = false;
 
+            if (iOMXComponentUsesFullAVCFrames)
+            {
+                iNALCount = 0;
+                oscl_memset(iNALSizeArray, 0, sizeof(uint32) * 100); // 100 is max number of NALs
+            }
 
             iProcessingState = EPVMFOMXBaseDecNodeProcessingState_Idle;
             //logoff & go back to Created state.
diff --git a/nodes/pvomxbasedecnode/src/pvmf_omx_basedec_port.cpp b/nodes/pvomxbasedecnode/src/pvmf_omx_basedec_port.cpp
index d1826c2..86a65fc 100644
--- a/nodes/pvomxbasedecnode/src/pvmf_omx_basedec_port.cpp
+++ b/nodes/pvomxbasedecnode/src/pvmf_omx_basedec_port.cpp
@@ -84,6 +84,7 @@
         isSupported = ((aFmt == PVMF_MIME_PCM16) ||
                        (aFmt == PVMF_MIME_LATM) ||
                        (aFmt == PVMF_MIME_MPEG4_AUDIO) ||
+                       (aFmt == PVMF_MIME_3640) ||
                        (aFmt == PVMF_MIME_ADIF) ||
                        (aFmt == PVMF_MIME_ASF_MPEG4_AUDIO) ||
                        (aFmt == PVMF_MIME_AAC_SIZEHDR) ||
diff --git a/nodes/pvomxencnode/include/pvmf_omx_enc_port.h b/nodes/pvomxencnode/include/pvmf_omx_enc_port.h
index 19c22f7..a601816 100644
--- a/nodes/pvomxencnode/include/pvmf_omx_enc_port.h
+++ b/nodes/pvomxencnode/include/pvmf_omx_enc_port.h
@@ -177,6 +177,7 @@
         uint32 iNumFramesConsumed; //number of frames consumed & discarded.
         uint32 iTrackConfigSize;
         uint8* iTrackConfig;
+        uint32 iTimescale;
         friend class PVMFOMXEncNode;
         PVMFOMXEncNode* iOMXNode;
 };
diff --git a/nodes/pvomxencnode/src/pvmf_omx_enc_node.cpp b/nodes/pvomxencnode/src/pvmf_omx_enc_node.cpp
index a62cd55..de599eb 100644
--- a/nodes/pvomxencnode/src/pvmf_omx_enc_node.cpp
+++ b/nodes/pvomxencnode/src/pvmf_omx_enc_node.cpp
@@ -85,6 +85,7 @@
 static const char PVOMXENCMETADATA_SEMICOLON[] = ";";
 
 static const char LOG_ID_AUDIO_AMR[]  = "Audio_AMR";
+static const char LOG_ID_AUDIO_AAC[]  = "Audio_AAC";
 static const char LOG_ID_VIDEO_H263[] = "Video_H263";
 static const char LOG_ID_VIDEO_M4V[] =  "Video_M4V";
 static const char LOG_ID_VIDEO_AVC[] =  "Video_AVC";
@@ -364,6 +365,16 @@
         CommandComplete(iInputCommands, iInputCommands.front(), PVMFFailure);
     }
 
+    if (iNALSizeArray != NULL)
+    {
+        oscl_free(iNALSizeArray);
+    }
+
+    if (iNALPtrArray != NULL)
+    {
+        oscl_free(iNALPtrArray);
+    }
+
     //Release Input buffer
     iDataIn.Unbind();
 
@@ -483,7 +494,7 @@
     PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVMFOMXEncNode-%s::RequestPort() called", iNodeTypeId));
     PVMFOMXEncNodeCommand cmd;
 
-// DUSAN V.: IMPORTANT NOTE - ENGINE IS SENDING THE MIME TYPE FOR THE ENCODER INPUT/OUTPUT FORMAT THRU THE PORT PARAMETER
+    // IMPORTANT NOTE - ENGINE IS SENDING THE MIME TYPE FOR THE ENCODER INPUT/OUTPUT FORMAT THRU THE PORT PARAMETER
     cmd.PVMFOMXEncNodeCommandBase::Construct(s, PVMF_GENERIC_NODE_REQUESTPORT, aPortTag, aPortConfig, aContext);
     return QueueCommandL(cmd);
 
@@ -660,6 +671,9 @@
              // audio output
              iCapability.iOutputFormatCapability.push_back(PVMF_MIME_AMR_IETF);
              iCapability.iOutputFormatCapability.push_back(PVMF_MIME_AMR_IF2);
+             iCapability.iOutputFormatCapability.push_back(PVMF_MIME_ADTS);
+             iCapability.iOutputFormatCapability.push_back(PVMF_MIME_ADIF);
+             iCapability.iOutputFormatCapability.push_back(PVMF_MIME_MPEG4_AUDIO);
 
              // video input
              iCapability.iInputFormatCapability.push_back(PVMF_MIME_YUV420);
@@ -721,6 +735,12 @@
     iFirstNAL = false; //set this to false so that mp4 can proceed without a problem.
     // in case of AVC, this flag will be set after spspps
 
+    iNALSizeArray = NULL;
+    iNALPtrArray = NULL;
+    iNALSizeArrayMaxElems = 0;
+    iNumNALs = 0;
+    iFirstNALStartCodeSize = 0;
+
     iThreadSafeHandlerEventHandler = NULL;
     iThreadSafeHandlerEmptyBufferDone = NULL;
     iThreadSafeHandlerFillBufferDone = NULL;
@@ -823,7 +843,8 @@
     oscl_memset(&iAudioEncodeParam, 0, sizeof(iAudioEncodeParam));
 
     iAudioEncodeParam.iMaxNumOutputFramesPerBuffer = MAX_NUM_AMR_FRAMES_PER_BUFFER;
-    iAudioEncodeParam.iOutputBitrate = GSM_AMR_12_2;
+    iAudioEncodeParam.iAMRBitrate = GSM_AMR_12_2;
+    iAudioEncodeParam.iOutputBitrate = 24000;
     iAudioEncodeParam.iOutputNumChannels = iAudioInputFormat.iInputNumChannels;
     iAudioEncodeParam.iOutputSamplingRate = iAudioInputFormat.iInputSamplingRate;
 
@@ -1786,7 +1807,8 @@
 
 
     OutputBufCtrlStruct *output_buf = NULL;
-    int32 errcode = 0;
+    int32  errcode = 0;
+    uint32 ii;
 
     // try to get output buffer header
     OSCL_TRY(errcode, output_buf = (OutputBufCtrlStruct *) iOutBufMemoryPool->allocate(iOutputAllocSize));
@@ -1821,6 +1843,21 @@
     iOutBufMemoryPool->notifyfreechunkavailable(*this, (OsclAny *)iOutBufMemoryPool);
     iNumOutstandingOutputBuffers++;
 
+    for (ii = 0;ii < iNumOutputBuffers;ii++)
+    {
+        if (output_buf == out_ctrl_struct_ptr[ii])
+        {
+            break;
+        }
+    }
+
+    if (ii == iNumOutputBuffers)
+        return false;
+
+    output_buf->pBufHdr = (OMX_BUFFERHEADERTYPE *)out_buff_hdr_ptr[ii];
+
+
+
     output_buf->pBufHdr->nFilledLen = 0; // make sure you tell OMX component buffer is empty
     output_buf->pBufHdr->nOffset = 0;
     output_buf->pBufHdr->pAppPrivate = output_buf; // set pAppPrivate to be pointer to output_buf
@@ -3085,7 +3122,7 @@
 
     // first basic check if encode parameters have been set correctly
     if ((0 == iAudioEncodeParam.iMaxNumOutputFramesPerBuffer) ||
-            (0 == iAudioEncodeParam.iOutputBitrate) ||
+            (0 == iAudioEncodeParam.iAMRBitrate) ||
             (0 == iAudioEncodeParam.iOutputNumChannels) ||
             (2 < iAudioEncodeParam.iOutputNumChannels) ||
             (0 == iAudioEncodeParam.iOutputSamplingRate) ||
@@ -3150,6 +3187,7 @@
         return false;
     }
 
+    // TODO: FIX THIS - JUST READ THE BUFFER SIZE FROM COMPONENT PORT
     if (iInFormat == PVMF_MIME_PCM16)
     {
         iOMXComponentInputBufferSize = MAX_NUM_AMR_FRAMES_PER_BUFFER * (PVMF_AMRENC_DEFAULT_FRAME_DURATION * PVMF_AMRENC_DEFAULT_SAMPLING_RATE * PVMF_AMRENC_DEFAULT_BITSPERSAMPLE) / (1000 * 8);
@@ -3249,6 +3287,12 @@
     {
         DesiredPortFormat = OMX_AUDIO_CodingAMR;
     }
+    else if (iOutFormat == PVMF_MIME_ADIF ||
+             iOutFormat == PVMF_MIME_ADTS ||
+             iOutFormat == PVMF_MIME_MPEG4_AUDIO)
+    {
+        DesiredPortFormat = OMX_AUDIO_CodingAAC;
+    }
     else
     {
         DesiredPortFormat = OMX_AUDIO_CodingUnused;
@@ -3337,6 +3381,12 @@
     {
         iParamPort.format.audio.eEncoding = OMX_AUDIO_CodingAMR;
     }
+    else if (iOutFormat == PVMF_MIME_ADTS ||
+             iOutFormat == PVMF_MIME_ADIF ||
+             iOutFormat == PVMF_MIME_MPEG4_AUDIO)
+    {
+        iParamPort.format.audio.eEncoding = OMX_AUDIO_CodingAAC;
+    }
 
     PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
                     (0, "PVMFOMXEncNode-%s::NegotiateAudioComponentParameters() Outport buffers %d,size %d", iNodeTypeId, iNumOutputBuffers, iOMXComponentOutputBufferSize));
@@ -3349,19 +3399,28 @@
         PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
                         (0, "PVMFOMXEncNode-%s::NegotiateAudioComponentParameters() Problem setting parameters in output port %d ", iNodeTypeId, iOutputPortIndex));
         return false;
-    }
 
+    }
 
     // now call codec specific parameter setting
     bool status = true;
     if (iOutFormat == PVMF_MIME_AMR_IETF ||
             iOutFormat == PVMF_MIME_AMR_IF2)
     {
+
         status = SetAMREncoderParameters();
     }
+    else if (iOutFormat == PVMF_MIME_ADTS ||
+             iOutFormat == PVMF_MIME_ADIF ||
+             iOutFormat == PVMF_MIME_MPEG4_AUDIO)
+    {
+        status = SetAACEncoderParameters();
+    }
+
 
     return status;
 }
+
 bool PVMFOMXEncNode::SetAMREncoderParameters()
 {
 
@@ -3386,13 +3445,16 @@
 
     if (iOutFormat == PVMF_MIME_AMR_IETF)
     {
-        AmrType.eAMRFrameFormat = OMX_AUDIO_AMRFrameFormatRTPPayload;
+        AmrType.eAMRFrameFormat = OMX_AUDIO_AMRFrameFormatFSF;
     }
     else if (iOutFormat == PVMF_MIME_AMR_IF2)
     {
         AmrType.eAMRFrameFormat = OMX_AUDIO_AMRFrameFormatIF2;
     }
 
+    CONFIG_SIZE_AND_VERSION(AmrType);
+    AmrType.nPortIndex = iOutputPortIndex;
+
     Err = OMX_SetParameter(iOMXEncoder, OMX_IndexParamAudioAmr, &AmrType);
     if (Err != OMX_ErrorNone)
     {
@@ -3404,6 +3466,103 @@
     return true;
 }
 
+bool PVMFOMXEncNode::SetAACEncoderParameters()
+{
+
+    OMX_ERRORTYPE Err = OMX_ErrorNone;
+    OMX_AUDIO_PARAM_AACPROFILETYPE AacType;
+
+#if 0
+    /** AAC params */
+    typedef struct OMX_AUDIO_PARAM_AACPROFILETYPE
+    {
+        OMX_U32 nSize;                 /**< Size of this structure, in Bytes */
+        OMX_VERSIONTYPE nVersion;      /**< OMX specification version information */
+        OMX_U32 nPortIndex;            /**< Port that this structure applies to */
+        OMX_U32 nChannels;             /**< Number of channels */
+        OMX_U32 nSampleRate;           /**< Sampling rate of the source data.  Use 0 for
+                                        variable or unknown sampling rate. */
+        OMX_U32 nBitRate;              /**< Bit rate of the input data.  Use 0 for variable
+                                        rate or unknown bit rates */
+        OMX_U32 nAudioBandWidth;       /**< Audio band width (in Hz) to which an encoder should
+                                        limit the audio signal. Use 0 to let encoder decide */
+        OMX_U32 nFrameLength;          /**< Frame length (in audio samples per channel) of the codec.
+                                        Can be 1024 or 960 (AAC-LC), 2048 (HE-AAC), 480 or 512 (AAC-LD).
+                                        Use 0 to let encoder decide */
+        OMX_U32 nAACtools;             /**< AAC tool usage */
+        OMX_U32 nAACERtools;           /**< MPEG-4 AAC error resilience tool usage */
+        OMX_AUDIO_AACPROFILETYPE eAACProfile;   /**< AAC profile enumeration */
+        OMX_AUDIO_AACSTREAMFORMATTYPE eAACStreamFormat; /**< AAC stream format enumeration */
+        OMX_AUDIO_CHANNELMODETYPE eChannelMode;   /**< Channel mode enumeration */
+    } OMX_AUDIO_PARAM_AACPROFILETYPE;
+
+
+#endif
+
+    CONFIG_SIZE_AND_VERSION(AacType);
+    AacType.nPortIndex = iOutputPortIndex;
+
+    Err = OMX_GetParameter(iOMXEncoder, OMX_IndexParamAudioAac, &AacType);
+    if (Err != OMX_ErrorNone)
+    {
+        PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                        (0, "PVMFOMXEncNode-%s::SetAACEncoderParameters - Problem getting AAC parameters in output port %d ", iNodeTypeId, iOutputPortIndex));
+        return false;
+    }
+
+    AacType.nChannels = iAudioEncodeParam.iOutputNumChannels;
+    // The following parameter could be set to input sampling rate or 0 (i.e. unknown)
+    AacType.nSampleRate = iAudioEncodeParam.iOutputSamplingRate;
+    // The following parameter could be set to 0 (i.e. unknown)
+    AacType.nBitRate = iAudioEncodeParam.iOutputBitrate;
+
+    // Let encoder decide the following parameters - i.e. set to 0
+    AacType.nAudioBandWidth =   0;
+    AacType.nFrameLength    =   0;
+    AacType.nAACtools =         OMX_AUDIO_AACToolAll; // this means all tools are allowed - let encoder decide
+    AacType.nAACERtools =       OMX_AUDIO_AACERNone;   // error resilience tools are not allowed
+
+    // Set the AAC profile to use LC
+    AacType.eAACProfile = OMX_AUDIO_AACObjectLC;
+
+    // Do set the stream format
+    if (iOutFormat == PVMF_MIME_ADTS)
+    {
+        AacType.eAACStreamFormat = OMX_AUDIO_AACStreamFormatMP4ADTS;
+    }
+    else if (iOutFormat == PVMF_MIME_ADIF)
+    {
+        AacType.eAACStreamFormat = OMX_AUDIO_AACStreamFormatADIF;
+    }
+    else if (iOutFormat == PVMF_MIME_MPEG4_AUDIO)
+    {
+        AacType.eAACStreamFormat = OMX_AUDIO_AACStreamFormatMP4FF;
+    }
+
+    // Set the AAC channel mode - (stereo, or mono)
+    if (iAudioEncodeParam.iOutputNumChannels == 1)
+    {
+        AacType.eChannelMode = OMX_AUDIO_ChannelModeMono;
+    }
+    else if (iAudioEncodeParam.iOutputNumChannels == 2)
+    {
+        AacType.eChannelMode = OMX_AUDIO_ChannelModeStereo;
+    }
+
+    CONFIG_SIZE_AND_VERSION(AacType);
+    AacType.nPortIndex = iOutputPortIndex;
+
+    Err = OMX_SetParameter(iOMXEncoder, OMX_IndexParamAudioAac, &AacType);
+    if (Err != OMX_ErrorNone)
+    {
+        PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                        (0, "PVMFOMXEncNode-%s::SetAACEncoderParameters - Problem setting AAC parameters in output port %d ", iNodeTypeId, iOutputPortIndex));
+        return false;
+    }
+
+    return true;
+}
+
 bool PVMFOMXEncNode::SetDefaultCapabilityFlags()
 {
 
@@ -3413,9 +3572,10 @@
     iOMXComponentSupportsExternalInputBufferAlloc = false;
     iOMXComponentSupportsMovableInputBuffers = false;
 
-    iOMXComponentNeedsNALStartCode = true;
+    iOMXComponentUsesNALStartCodes = true;
     iOMXComponentSupportsPartialFrames = false;
     iOMXComponentCanHandleIncompleteFrames = false;
+    iOMXComponentUsesFullAVCFrames = false;
 
     return true;
 }
@@ -3517,6 +3677,7 @@
     // first of all , get an input buffer. Without a buffer, no point in proceeding
     InputBufCtrlStruct *input_buf = NULL;
     int32 errcode = 0;
+    uint32 ii;
 
     do
     {
@@ -3556,6 +3717,19 @@
         iInBufMemoryPool->notifyfreechunkavailable(*this, (OsclAny*) iInBufMemoryPool);
         iNumOutstandingInputBuffers++;
 
+        for (ii = 0;ii < iNumInputBuffers;ii++)
+        {
+            if (input_buf == in_ctrl_struct_ptr[ii])
+            {
+                break;
+            }
+        }
+
+        if (ii == iNumInputBuffers)
+            return false;
+
+        input_buf->pBufHdr = (OMX_BUFFERHEADERTYPE *)in_buff_hdr_ptr[ii];
+
         // Now we have the buffer header (i.e. a buffer) to send to component:
         // Depending on OMX component capabilities, either pass the input msg fragment(s) directly
         //	into OMX component without copying (and update the input msg refcount)
@@ -3758,7 +3932,9 @@
     }
 
     // ENCODER SPECIFIC FOR AVC RAW (BYTESTREAM) FORMAT
-    if (iOutFormat == PVMF_MIME_H264_VIDEO_RAW)
+    if ((iOutFormat == PVMF_MIME_H264_VIDEO_RAW) &&
+            (!iOMXComponentUsesFullAVCFrames) &&
+            (!iOMXComponentUsesNALStartCodes))
     {
         iOutputAllocSize += 4; // NAL SYNC WORD SIZE
     }
@@ -3992,6 +4168,9 @@
                                     (OMX_U32)aActualBufferSize,		// buffer size
                                     pB);						// buffer data ptr
 
+                in_ctrl_struct_ptr[ii] = ctrl_struct_ptr[ii];
+                in_buff_hdr_ptr[ii] = temp->pBufHdr;
+
             }
             else
             {
@@ -3999,7 +4178,9 @@
                 // advance buffer ptr to skip the structure
                 pB += oscl_mem_aligned_size(sizeof(OutputBufCtrlStruct));
 
-                if (iOutFormat == PVMF_MIME_H264_VIDEO_RAW)
+                if ((iOutFormat == PVMF_MIME_H264_VIDEO_RAW) &&
+                        !iOMXComponentUsesFullAVCFrames &&
+                        !iOMXComponentUsesNALStartCodes)
                 {
                     // write out NAL sync word at the beginning of the buffer
                     pB[0] = 0;
@@ -4021,6 +4202,9 @@
                                     (OMX_U32)aActualBufferSize,		// buffer size
                                     pB);						// buffer data ptr
 
+                out_ctrl_struct_ptr[ii] = ctrl_struct_ptr[ii];
+                out_buff_hdr_ptr[ii] = temp->pBufHdr;
+
 
             }
 
@@ -4038,6 +4222,9 @@
                                          aPortIndex,
                                          ctrl_struct_ptr[ii],
                                          (OMX_U32)aActualBufferSize);
+
+                in_ctrl_struct_ptr[ii] = ctrl_struct_ptr[ii];
+                in_buff_hdr_ptr[ii] = temp->pBufHdr;
             }
             else
             {
@@ -4047,6 +4234,9 @@
                                          aPortIndex,
                                          ctrl_struct_ptr[ii],
                                          (OMX_U32)aActualBufferSize);
+
+                out_ctrl_struct_ptr[ii] = ctrl_struct_ptr[ii];
+                out_buff_hdr_ptr[ii] = temp->pBufHdr;
             }
 
         }
@@ -4178,10 +4368,21 @@
     // mark buffers as freed (so as not to do it twice)
     if (aIsThisInputBuffer)
     {
+        oscl_free(in_ctrl_struct_ptr);
+        oscl_free(in_buff_hdr_ptr);
+
+        in_ctrl_struct_ptr = NULL;
+        in_buff_hdr_ptr = NULL;
         iInputBuffersFreed = true;
     }
     else
     {
+        oscl_free(out_ctrl_struct_ptr);
+        oscl_free(out_buff_hdr_ptr);
+
+        out_ctrl_struct_ptr = NULL;
+        out_buff_hdr_ptr = NULL;
+
         iOutputBuffersFreed = true;
     }
     PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVMFOMXEncNode-%s::FreeBuffersFromComponent() done", iNodeTypeId));
@@ -4652,6 +4853,28 @@
 
     }
 
+    if (iOMXComponentUsesNALStartCodes)
+    {
+        // find size of first start code, since it can be either 3 or 4 bytes
+        uint8* pData = (uint8*)aBuffer->pBuffer + aBuffer->nOffset;
+        uint8* pTemp;
+        uint32 size = aBuffer->nFilledLen;
+        if (AVCAnnexBGetNALUnit(pData, &pTemp, (int32*)&size, true))
+        {
+            iFirstNALStartCodeSize = (uint32)pTemp - (uint32)pData;
+        }
+        else
+        {
+            iFirstNALStartCodeSize = 0;
+        }
+    }
+
+    /* the case in which a buffer simply containing a start code is sent */
+    if (aBuffer->nFilledLen <= iFirstNALStartCodeSize && iOMXComponentUsesNALStartCodes)
+    {
+        aBuffer->nFilledLen = 0;
+    }
+
     // if a buffer is empty, or if it should not be sent downstream (say, due to state change)
     // release the buffer back to the pool
     if ((aBuffer->nFilledLen == 0) || (iDoNotSendOutputBuffersDownstreamFlag == true))
@@ -4704,10 +4927,49 @@
             return OMX_ErrorNone;
         }
 
+        if (iFrameCounter == 1)
+        {
+            if ((iOutFormat == PVMF_MIME_ADTS)
+                    || (iOutFormat == PVMF_MIME_ADIF)
+                    || (iOutFormat == PVMF_MIME_MPEG4_AUDIO)
+                    || (iOutFormat == PVMF_MIME_WMA)
+                    || (iOutFormat == PVMF_MIME_WMV)
+               )
+            {
+
+                // save the first buffer since this is the config header and needs to be sent separately
+                uint refCounterSize = oscl_mem_aligned_size(sizeof(OsclRefCounterDA));
+                OsclMemoryFragment configHeader;
+                configHeader.ptr = NULL;
+                configHeader.len = aBuffer->nFilledLen;
+                uint8* memBuffer = (uint8*)iAlloc.allocate(refCounterSize + configHeader.len);
+                oscl_memset(memBuffer, 0, refCounterSize + configHeader.len);
+                OsclRefCounter* refCounter = OSCL_PLACEMENT_NEW(memBuffer, OsclRefCounterDA(memBuffer, (OsclDestructDealloc*) & iAlloc));
+                memBuffer += refCounterSize;
+                configHeader.ptr = (OsclAny*)memBuffer;
+
+                // copy the vol header from OMX buffer
+                oscl_memcpy(configHeader.ptr, pBufdata, configHeader.len);
+
+                // save in class variable
+                iConfigHeader = OsclRefCounterMemFrag(configHeader, refCounter, configHeader.len);
+
+                // release the OMX buffer
+                iOutBufMemoryPool->deallocate(pContext);
+                return OMX_ErrorNone;
+            }
+        }
+
         // in case of avc mp4, need to save sps/pps sequences
         if ((iOutFormat == PVMF_MIME_H264_VIDEO_MP4) && (!iSpsPpsSequenceOver))
         {
 
+            if (iOMXComponentUsesNALStartCodes)
+            {
+                // remove the start code from these single NAL frames
+                pBufdata += iFirstNALStartCodeSize;
+                bufLen -= iFirstNALStartCodeSize;
+            }
             // detect nal type
             uint8 *bitstream = pBufdata;
             int nal_type;
@@ -4763,6 +5025,13 @@
             }
             else
             {
+                if (iOMXComponentUsesNALStartCodes)
+                {
+                    // bring start code back since it's not a SPS or PPS
+                    pBufdata -= iFirstNALStartCodeSize;
+                    bufLen += iFirstNALStartCodeSize;
+                }
+
                 // this is neither SPS nor PPS
                 // stop recording SPS/PPS
                 iSpsPpsSequenceOver = true;
@@ -4776,9 +5045,25 @@
 
         }
 
+        if (iOMXComponentUsesFullAVCFrames && iOutFormat == PVMF_MIME_H264_VIDEO_MP4)
+        {
+            // do not parse fo PVMF_MIME_H264_VIDEO_RAW, since this data is just written raw, and knowing
+            // the NAL boundaries isn't necessary
+
+            if (!ParseFullAVCFramesIntoNALs(aBuffer))
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                                (0, "PVMFOMXEncNode-%s::FillBufferDoneProcessing: Problem parsing NALs in buffer %x of size %d - releasing the buffer", iNodeTypeId, pBufdata, aBuffer->nFilledLen));
+
+                iOutBufMemoryPool->deallocate(pContext);
+            }
+        }
+
         // adjust ptr to data to expose the NAL sync word if necessary
         if ((iOutFormat == PVMF_MIME_H264_VIDEO_RAW) &&
                 (iOMXComponentSupportsExternalOutputBufferAlloc) &&
+                (!iOMXComponentUsesFullAVCFrames) &&
+                (!iOMXComponentUsesNALStartCodes) &&
                 ((iFirstNAL == true) || (iEndOfNALFlagPrevious != 0))
            )
         {
@@ -4992,16 +5277,24 @@
 
 
         // Check if Fsi needs to be sent (VOL header)
-        if (sendYuvFsi && (iVideoEncodeParam.iContentType == EI_M4V_STREAMING))
+        if (sendYuvFsi)
         {
+            if (iVideoEncodeParam.iContentType == EI_M4V_STREAMING)
+            {
+                mediaDataOut->setFormatSpecificInfo(iVolHeader);
 
-            mediaDataOut->setFormatSpecificInfo(iVolHeader);
+            }
+            else if ((iOutFormat == PVMF_MIME_ADTS)
+                     || (iOutFormat == PVMF_MIME_ADIF)
+                     || (iOutFormat == PVMF_MIME_MPEG4_AUDIO)
+                     || (iOutFormat == PVMF_MIME_WMA)
+                     || (iOutFormat == PVMF_MIME_WMV))
+            {
 
-            // Reset the flag
-            sendYuvFsi = false;
-        }
-        else
-        {
+                mediaDataOut->setFormatSpecificInfo(iConfigHeader);
+
+            }
+
             sendYuvFsi = false;
         }
 
@@ -5044,37 +5337,79 @@
 OsclSharedPtr<PVMFMediaDataImpl> PVMFOMXEncNode::WrapOutputBuffer(uint8 *pData, uint32 aDataLen, OsclAny *pContext)
 {
     // wrap output buffer into a mediadataimpl
-    uint32 aligned_class_size = oscl_mem_aligned_size(sizeof(PVMFSimpleMediaBuffer));
     uint32 aligned_cleanup_size = oscl_mem_aligned_size(sizeof(PVOMXBufferSharedPtrWrapperCombinedCleanupDA));
     uint32 aligned_refcnt_size = oscl_mem_aligned_size(sizeof(OsclRefCounterDA));
-    uint8 *my_ptr = (uint8*) oscl_malloc(aligned_refcnt_size + aligned_cleanup_size + aligned_class_size);
+    uint8 *my_ptr = (uint8*) oscl_malloc(aligned_cleanup_size + aligned_refcnt_size);
 
     if (my_ptr == NULL)
     {
         OsclSharedPtr<PVMFMediaDataImpl> null_buff(NULL, NULL);
         return null_buff;
     }
+
     // create a deallocator and pass the buffer_allocator to it as well as pointer to data that needs to be returned to the mempool
     PVOMXBufferSharedPtrWrapperCombinedCleanupDA *cleanup_ptr =
         OSCL_PLACEMENT_NEW(my_ptr + aligned_refcnt_size, PVOMXBufferSharedPtrWrapperCombinedCleanupDA(iOutBufMemoryPool, pContext));
 
-    //ModifiedPvciBufferCombinedCleanup* cleanup_ptr = OSCL_PLACEMENT_NEW(my_ptr + aligned_refcnt_size,ModifiedPvciBufferCombinedCleanup(aOutput.GetRefCounter()) );
-
     // create the ref counter after the cleanup object (refcount is set to 1 at creation)
-    OsclRefCounterDA *my_refcnt = OSCL_PLACEMENT_NEW(my_ptr, OsclRefCounterDA(my_ptr, cleanup_ptr));
+    OsclRefCounterDA *my_refcnt;
+    PVMFMediaDataImpl* media_data_ptr;
 
-    my_ptr += aligned_refcnt_size + aligned_cleanup_size;
+    if (iOMXComponentUsesFullAVCFrames && iNumNALs > 0)
+    {
+        uint32 ii;
+        media_data_ptr = OSCL_NEW(PVMFMediaFragGroup<OsclMemAllocator>, (iNumNALs));
+        my_refcnt = OSCL_PLACEMENT_NEW(my_ptr, OsclRefCounterDA(media_data_ptr, cleanup_ptr));
 
-    PVMFMediaDataImpl* media_data_ptr = OSCL_PLACEMENT_NEW(my_ptr, PVMFSimpleMediaBuffer((void *) pData, // ptr to data
-                                        aDataLen, // capacity
-                                        my_refcnt));   // ref counter
+        // loop through and assign a create a media fragment for each NAL
+        for (ii = 0; ii < iNumNALs; ii++)
+        {
+            OsclMemoryFragment memFrag;
+
+            if (iOMXComponentUsesNALStartCodes)
+            {
+                // need to get NAL ptr from stored array, since start codes can be 3 or 4 bytes,
+                // and the only way to know is by parsing the buffer (which we should have done by now and stored in the array)
+                memFrag.ptr = iNALPtrArray[ii];
+            }
+            else
+            {
+                memFrag.ptr = pData;
+                pData += iNALSizeArray[ii];
+            }
+
+            memFrag.len = iNALSizeArray[ii];
+
+            OsclRefCounterMemFrag refCountMemFragOut(memFrag, my_refcnt, memFrag.len);
+            media_data_ptr->appendMediaFragment(refCountMemFragOut);
+        }
+
+        oscl_memset((void *) iNALSizeArray, 0, sizeof(uint32) * iNumNALs);
+        iNumNALs = 0;
+    }
+    else
+    {
+        media_data_ptr = OSCL_NEW(PVMFMediaFragGroup<OsclMemAllocator>, (1));
+        my_refcnt = OSCL_PLACEMENT_NEW(my_ptr, OsclRefCounterDA(media_data_ptr, cleanup_ptr));
+
+        OsclMemoryFragment memFrag;
+
+        if (iOMXComponentUsesNALStartCodes && (iOutFormat != PVMF_MIME_H264_VIDEO_RAW))
+        {
+            // skip start code
+            pData += iFirstNALStartCodeSize;
+        }
+
+        memFrag.ptr = pData;
+        memFrag.len = aDataLen;
+
+        OsclRefCounterMemFrag refCountMemFragOut(memFrag, my_refcnt, memFrag.len);
+        media_data_ptr->appendMediaFragment(refCountMemFragOut);
+    }
 
     OsclSharedPtr<PVMFMediaDataImpl> MediaDataImplOut(media_data_ptr, my_refcnt);
 
-    MediaDataImplOut->setMediaFragFilledLen(0, aDataLen);
-
     return MediaDataImplOut;
-
 }
 //////////////////////////////////////////////////////////////////////////////
 bool PVMFOMXEncNode::SendBeginOfMediaStreamCommand()
@@ -5219,6 +5554,13 @@
                 Role = (OMX_STRING)"audio_encoder.amr";
                 iNodeTypeId = LOG_ID_AUDIO_AMR;
             }
+            else if (iOutFormat == PVMF_MIME_ADTS ||
+                     iOutFormat == PVMF_MIME_ADIF ||
+                     iOutFormat == PVMF_MIME_MPEG4_AUDIO)
+            {
+                Role = (OMX_STRING)"audio_encoder.aac";
+                iNodeTypeId = LOG_ID_AUDIO_AAC;
+            }
             else
             {
                 // Illegal codec specified.
@@ -5243,6 +5585,7 @@
             // be created, the second one in the list is selected etc.
             OMX_U32 num_comps = 0;
             OMX_STRING *CompOfRole;
+            OMX_S8 CompName[PV_OMX_MAX_COMPONENT_NAME_LENGTH];
             // call once to find out the number of components that can fit the role
             OMX_GetComponentsOfRole(Role, &num_comps, NULL);
             uint32 ii;
@@ -5267,6 +5610,8 @@
                     // if successful, no need to continue
                     if ((err == OMX_ErrorNone) && (iOMXEncoder != NULL))
                     {
+                        oscl_strncpy((OMX_STRING)CompName, (OMX_STRING) CompOfRole[ii], PV_OMX_MAX_COMPONENT_NAME_LENGTH);
+
                         PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_DEBUG,
                                         (0, "PVMFOMXEncNode-%s::DoPrepare(): Got Component %s handle ", iNodeTypeId, CompOfRole[ii]));
 
@@ -5314,17 +5659,37 @@
                 return;
             }
 
-            OMX_PARAM_COMPONENTROLETYPE RoleParam;
-            CONFIG_SIZE_AND_VERSION(RoleParam);
-            oscl_strncpy((OMX_STRING)RoleParam.cRole, (OMX_STRING)Role, OMX_MAX_STRINGNAME_SIZE);
-            err = OMX_SetParameter(iOMXEncoder, OMX_IndexParamStandardComponentRole, &RoleParam);
+
+            // find out how many roles the component supports
+            OMX_U32 NumRoles;
+            err = OMX_GetRolesOfComponent((OMX_STRING)CompName, &NumRoles, NULL);
             if (err != OMX_ErrorNone)
             {
                 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR,
-                                (0, "PVMFOMXEncNode-%s::DoPrepare() Problem setting component role", iNodeTypeId));
-                // ignore error since not all components may support this parameter
+                                (0, "PVMFOMXEncNode-%s::DoPrepare() Problem getting component roles", iNodeTypeId));
+
+                CommandComplete(iInputCommands, aCmd, PVMFErrResource);
+                return;
             }
 
+            // if the component supports multiple roles, call OMX_SetParameter
+            if (NumRoles > 1)
+            {
+                OMX_PARAM_COMPONENTROLETYPE RoleParam;
+                CONFIG_SIZE_AND_VERSION(RoleParam);
+                oscl_strncpy((OMX_STRING)RoleParam.cRole, (OMX_STRING)Role, OMX_MAX_STRINGNAME_SIZE);
+                err = OMX_SetParameter(iOMXEncoder, OMX_IndexParamStandardComponentRole, &RoleParam);
+                if (err != OMX_ErrorNone)
+                {
+                    PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR,
+                                    (0, "PVMFOMXEncNode-%s::DoPrepare() Problem setting component role", iNodeTypeId));
+
+                    CommandComplete(iInputCommands, aCmd, PVMFErrResource);
+                    return;
+                }
+            }
+
+
             // GET CAPABILITY FLAGS FROM PV COMPONENT, IF this fails, use defaults
             PV_OMXComponentCapabilityFlagsType Cap_flags;
             err = OMX_GetParameter(iOMXEncoder, (OMX_INDEXTYPE) PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX, &Cap_flags);
@@ -5339,13 +5704,47 @@
                 iOMXComponentSupportsExternalOutputBufferAlloc = (OMX_TRUE == Cap_flags.iOMXComponentSupportsExternalOutputBufferAlloc) ? true : false;
                 iOMXComponentSupportsMovableInputBuffers = (OMX_TRUE == Cap_flags.iOMXComponentSupportsMovableInputBuffers) ? true : false;
                 iOMXComponentSupportsPartialFrames = (OMX_TRUE == Cap_flags.iOMXComponentSupportsPartialFrames) ? true : false;
-                iOMXComponentNeedsNALStartCode = (OMX_FALSE == Cap_flags.iOMXComponentSupportsPartialFrames) ? true : false;
+                iOMXComponentUsesNALStartCodes = (OMX_TRUE == Cap_flags.iOMXComponentUsesNALStartCodes) ? true : false;
                 iOMXComponentCanHandleIncompleteFrames = (OMX_TRUE == Cap_flags.iOMXComponentCanHandleIncompleteFrames) ? true : false;
+                iOMXComponentUsesFullAVCFrames = (OMX_TRUE == Cap_flags.iOMXComponentUsesFullAVCFrames) ? true : false;
+            }
+
+            /*	iOMXComponentUsesNALStartCodes:				The component inserts start codes before NALs
+
+             	iOMXComponentUsesFullAVCFrames
+             		&& !iOMXComponentUsesNALStartCodes:		The component outputs full frames, and stores NAL start codes using the
+             												OMX ExtraData structure in the output buffer
+             	iOMXComponentUsesFullAVCFrames
+             		&& iOMXComponentUsesNALStartCodes:		The component outputs full frames, and delimits NALs by their start codes
+
+             	iOutFormat == PVMF_MIME_H264_VIDEO_RAW
+             		&& !iOMXComponentUsesNALStartCodes:		The node inserts the start codes and hides them / exposes them when needed
+
+             	iOutFormat == PVMF_MIME_H264_VIDEO_RAW
+             		&& !iOMXComponentUsesNALStartCodes
+             		&& iOMXComponentUsesFullAVCFrames:		This is an invalid combination.  If the node wants raw output, and the component
+             												uses full frames, and no start codes, then there is no way to detect the
+             												NAL boundaries.
+
+             */
+
+            if (iOutFormat == PVMF_MIME_H264_VIDEO_RAW &&
+                    iOMXComponentUsesFullAVCFrames && !iOMXComponentUsesNALStartCodes)
+            {
+                // This is an invalid combination (see above). Therefore, return an error.
+
+
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR,
+                                (0, "PVMFOMXEncNode-%s::DoPrepare() Component cannot support %s format", iNodeTypeId, PVMF_MIME_H264_VIDEO_RAW));
+
+                CommandComplete(iInputCommands, aCmd, PVMFErrNotSupported);
+                return;
             }
 
 
             // find out about parameters
-            if ((iOutFormat == PVMF_MIME_AMR_IETF) || (iOutFormat == PVMF_MIME_AMR_IF2))
+            if ((iOutFormat == PVMF_MIME_AMR_IETF) || (iOutFormat == PVMF_MIME_AMR_IF2) ||
+                    (iOutFormat == PVMF_MIME_ADIF) || (iOutFormat == PVMF_MIME_ADTS) || (iOutFormat == PVMF_MIME_MPEG4_AUDIO))
             {
                 if (!NegotiateAudioComponentParameters())
                 {
@@ -5441,6 +5840,32 @@
                 return;
             }
 
+            in_ctrl_struct_ptr = NULL;
+            in_buff_hdr_ptr = NULL;
+
+            in_ctrl_struct_ptr = (OsclAny **) oscl_malloc(iNumInputBuffers * sizeof(OsclAny *));
+
+            if (in_ctrl_struct_ptr == NULL)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                                (0, "PVMFOMXEncNode-%s::DoPreapare in_ctrl_struct_ptr == NULL", iNodeTypeId));
+
+                CommandComplete(iInputCommands, aCmd, PVMFErrNoResources);
+                return ;
+            }
+
+            in_buff_hdr_ptr = (OsclAny **) oscl_malloc(iNumInputBuffers * sizeof(OsclAny *));
+
+            if (in_buff_hdr_ptr == NULL)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                                (0, "PVMFOMXEncNode-%s::DoPreapare in_buff_hdr_ptr == NULL", iNodeTypeId));
+
+                CommandComplete(iInputCommands, aCmd, PVMFErrNoResources);
+                return ;
+            }
+
+
             if (!ProvideBuffersToComponent(iInBufMemoryPool, // allocator
                                            iInputAllocSize,	 // size to allocate from pool (hdr only or hdr+ buffer)
                                            iNumInputBuffers, // number of buffers
@@ -5468,6 +5893,32 @@
                 return;
             }
 
+            out_ctrl_struct_ptr = NULL;
+            out_buff_hdr_ptr = NULL;
+
+            out_ctrl_struct_ptr = (OsclAny **) oscl_malloc(iNumOutputBuffers * sizeof(OsclAny *));
+
+            if (out_ctrl_struct_ptr == NULL)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                                (0, "PVMFOMXEncNode-%s::DoPreapare out_ctrl_struct_ptr == NULL", iNodeTypeId));
+
+                CommandComplete(iInputCommands, aCmd, PVMFErrNoResources);
+                return ;
+            }
+
+            out_buff_hdr_ptr = (OsclAny **) oscl_malloc(iNumOutputBuffers * sizeof(OsclAny *));
+
+            if (out_buff_hdr_ptr == NULL)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                                (0, "PVMFOMXEncNode-%s::DoPreapare out_buff_hdr_ptr == NULL", iNodeTypeId));
+
+                CommandComplete(iInputCommands, aCmd, PVMFErrNoResources);
+                return ;
+            }
+
+
             if (!ProvideBuffersToComponent(iOutBufMemoryPool, // allocator
                                            iOutputAllocSize,	 // size to allocate from pool (hdr only or hdr+ buffer)
                                            iNumOutputBuffers, // number of buffers
@@ -5922,7 +6373,37 @@
                     }
                     else
                     {
-                        CommandComplete(iInputCommands, aCmd, PVMFErrResource);
+                        //delete all ports and notify observer.
+                        if (iInPort)
+                        {
+                            OSCL_DELETE(((PVMFOMXEncPort*)iInPort));
+                            iInPort = NULL;
+                        }
+
+                        if (iOutPort)
+                        {
+                            OSCL_DELETE(((PVMFOMXEncPort*)iOutPort));
+                            iOutPort = NULL;
+                        }
+
+                        iDataIn.Unbind();
+
+
+                        // Reset the metadata key list
+                        iAvailableMetadataKeys.clear();
+
+                        iEndOfDataReached = false;
+                        iIsEOSSentToComponent = false;
+                        iIsEOSReceivedFromComponent = false;
+
+
+                        iProcessingState = EPVMFOMXEncNodeProcessingState_Idle;
+                        //logoff & go back to Created state.
+                        SetState(EPVMFNodeIdle);
+
+                        CommandComplete(iInputCommands, aCmd, PVMFSuccess);
+
+                        //CommandComplete(iInputCommands, aCmd, PVMFErrResource);
                         return;
                     }
                 }
@@ -7205,10 +7686,10 @@
         //iface = OSCL_STATIC_CAST(PVInterface*, myInterface);
 
     }
-    else if (*uuid == PVAMREncExtensionUUID)
+    else if (*uuid == PVAudioEncExtensionUUID)
     {
         addRef();
-        *ptr = OSCL_STATIC_CAST(PVAMREncExtensionInterface*, this);
+        *ptr = OSCL_STATIC_CAST(PVAudioEncExtensionInterface*, this);
         //iface = OSCL_STATIC_CAST(PVInterface*, myInterface);
         CommandComplete(iInputCommands, aCmd, PVMFSuccess);
 
@@ -7995,6 +8476,12 @@
     {
         iOutFormat = aCodec;
     }
+    else if (aCodec == PVMF_MIME_ADTS ||
+             aCodec == PVMF_MIME_ADIF ||
+             aCodec == PVMF_MIME_MPEG4_AUDIO)
+    {
+        iOutFormat = aCodec;
+    }
     else
     {
         return PVMFErrNotSupported;
@@ -8171,10 +8658,32 @@
     return iVideoEncodeParam.iIFrameInterval;
 }
 /////////////////////////////////////////////////////////////////////////////
+
+uint32 PVMFOMXEncNode::GetOutputSamplingRate()
+{
+
+
+    PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                    (0, "PVMFOMXEncNode-%s::GetOutputSamplingRate: =%d", iNodeTypeId, iAudioEncodeParam.iOutputSamplingRate));
+
+    return (uint32) iAudioEncodeParam.iOutputSamplingRate;
+}
+/////////////////////////////////////////////////////////////////////////////
+
+uint32 PVMFOMXEncNode::GetOutputNumChannels()
+{
+
+
+    PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                    (0, "PVMFOMXEncNode-%s::GetOutputNumChannels: =%d", iNodeTypeId, iAudioEncodeParam.iOutputNumChannels));
+
+    return (uint32) iAudioEncodeParam.iOutputNumChannels;
+}
+
 /////////////////////////AMRENCInterfaceExtension //////////////////////////
 OSCL_EXPORT_REF PVMFStatus PVMFOMXEncNode::SetOutputBitRate(PVMF_GSMAMR_Rate aBitRate)
 {
-    iAudioEncodeParam.iOutputBitrate = aBitRate;
+    iAudioEncodeParam.iAMRBitrate = aBitRate;
     return PVMFSuccess;
 }
 
@@ -8186,11 +8695,30 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////
+OSCL_EXPORT_REF PVMFStatus PVMFOMXEncNode::SetOutputBitRate(uint32 aBitRate)
+{
+    iAudioEncodeParam.iOutputBitrate = aBitRate;
+    return PVMFSuccess;
+}
+
+////////////////////////////////////////////////////////////////////////////
+OSCL_EXPORT_REF PVMFStatus PVMFOMXEncNode::SetOutputNumChannel(uint32 aNumChannels)
+{
+    iAudioEncodeParam.iOutputNumChannels = aNumChannels;
+    return PVMFSuccess;
+}
+
+////////////////////////////////////////////////////////////////////////////
+OSCL_EXPORT_REF PVMFStatus PVMFOMXEncNode::SetOutputSamplingRate(uint32 aSamplingRate)
+{
+    iAudioEncodeParam.iOutputSamplingRate = aSamplingRate;
+    return PVMFSuccess;
+}
+
+
+////////////////////////////////////////////////////////////////////////////
 PVMFStatus PVMFOMXEncNode::SetInputSamplingRate(uint32 aSamplingRate)
 {
-    if (aSamplingRate != 8000)
-        return PVMFErrNotSupported;
-
     iAudioInputFormat.iInputSamplingRate = aSamplingRate;
 
     // set output as well
@@ -8212,9 +8740,6 @@
 ////////////////////////////////////////////////////////////////////////////
 PVMFStatus PVMFOMXEncNode::SetInputNumChannels(uint32 aNumChannels)
 {
-    if (aNumChannels != 1)
-        return PVMFErrNotSupported;
-
     iAudioInputFormat.iInputNumChannels = aNumChannels;
 
     //set output as well
@@ -8225,26 +8750,36 @@
 ////////////////////////////////////////////////////////////////////////////
 uint32 PVMFOMXEncNode::GetOutputBitRate()
 {
-    switch (iAudioEncodeParam.iOutputBitrate)
+    if ((iOutFormat == PVMF_MIME_AMR_IF2) ||
+            (iOutFormat == PVMF_MIME_AMR_IETF)
+       )
     {
-        case GSM_AMR_4_75:
-            return 4750;
-        case GSM_AMR_5_15:
-            return 5150;
-        case GSM_AMR_5_90:
-            return 5900;
-        case GSM_AMR_6_70:
-            return 6700;
-        case GSM_AMR_7_40:
-            return 7400;
-        case GSM_AMR_7_95:
-            return 7950;
-        case GSM_AMR_10_2:
-            return 10200;
-        case GSM_AMR_12_2:
-            return 12200;
-        default:
-            return 0;
+
+        switch (iAudioEncodeParam.iAMRBitrate)
+        {
+            case GSM_AMR_4_75:
+                return 4750;
+            case GSM_AMR_5_15:
+                return 5150;
+            case GSM_AMR_5_90:
+                return 5900;
+            case GSM_AMR_6_70:
+                return 6700;
+            case GSM_AMR_7_40:
+                return 7400;
+            case GSM_AMR_7_95:
+                return 7950;
+            case GSM_AMR_10_2:
+                return 10200;
+            case GSM_AMR_12_2:
+                return 12200;
+            default:
+                return 0;
+        }
+    }
+    else
+    {
+        return iAudioEncodeParam.iOutputBitrate;
     }
 }
 
@@ -8913,3 +9448,237 @@
     return errcode;
 }
 
+bool PVMFOMXEncNode::ParseFullAVCFramesIntoNALs(OMX_BUFFERHEADERTYPE* aOutputBuffer)
+{
+    PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_NOTICE, (0, "PVMFOMXEncNode-%s : ParseFullAVCFramesIntoNALs IN", iNodeTypeId));
+
+    if (iOMXComponentUsesNALStartCodes && !(aOutputBuffer->nFlags & OMX_BUFFERFLAG_EXTRADATA))
+    {
+        OMX_U32 offset = aOutputBuffer->nOffset;
+        OMX_U32 length = aOutputBuffer->nFilledLen;
+        OMX_U8* pBuffer = aOutputBuffer->pBuffer + offset;
+        OMX_U8* pCurrNAL;
+        OMX_U32 bytesConsumed;
+        int32 nalSize;
+
+        iNumNALs = 0;
+
+        while (length > 0)
+        {
+            nalSize = length;
+
+            if (false == AVCAnnexBGetNALUnit(pBuffer, &pCurrNAL, &nalSize, false))
+            {
+                break;
+            }
+
+            bytesConsumed = nalSize + (int32)(pCurrNAL - pBuffer);
+            length -= bytesConsumed;
+            pBuffer += bytesConsumed;
+
+            if ((iNALSizeArrayMaxElems > iNumNALs) && (iNALSizeArray != NULL))
+            {
+                iNALSizeArray[iNumNALs] = nalSize;
+                iNALPtrArray[iNumNALs] = (uint8*)pCurrNAL; /* need store NAL ptrs since start code can be either 4 bytes or 3 bytes */
+                iNumNALs++;
+            }
+            else
+            {
+                iNumNALs++;
+
+                // count the number of NALs in the buffer
+                while (length > 0)
+                {
+                    nalSize = length;
+
+                    if (false == AVCAnnexBGetNALUnit(pBuffer, &pCurrNAL, &nalSize, false))
+                    {
+                        break;
+                    }
+
+                    bytesConsumed = nalSize + (int32)(pCurrNAL - pBuffer);
+                    length -= bytesConsumed;
+                    pBuffer += bytesConsumed;
+
+                    iNumNALs++;
+                }
+
+                // reassign alloc size to new max.
+                iNALSizeArrayMaxElems = iNumNALs;
+
+                // free memory and then reallocate
+                if (iNALSizeArray != NULL)
+                {
+                    oscl_free(iNALSizeArray);
+                }
+                iNALSizeArray = (uint32*) oscl_malloc(sizeof(uint32) * iNALSizeArrayMaxElems);
+
+                if (iNALPtrArray != NULL)
+                {
+                    oscl_free(iNALPtrArray);
+                }
+                iNALPtrArray = (uint8**) oscl_malloc(sizeof(uint8*) * iNALSizeArrayMaxElems);
+
+                // reset parameters and start over
+                iNumNALs = 0;
+                length = aOutputBuffer->nFilledLen;
+                pBuffer = aOutputBuffer->pBuffer + offset;
+
+                if (iNALSizeArray == NULL || iNALPtrArray == NULL)
+                {
+                    iNALSizeArrayMaxElems = 0;
+
+                    PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_NOTICE, (0, "PVMFOMXEncNode-%s : ParseFullAVCFramesIntoNALs ERROR - Out of Memory", iNodeTypeId));
+                    return false;
+                }
+            }
+        }
+
+        if (iNumNALs <= 0)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_NOTICE, (0, "PVMFOMXEncNode-%s : ParseFullAVCFramesIntoNALs ERROR", iNodeTypeId));
+            return false;
+        }
+    }
+    else if (aOutputBuffer->nFlags & OMX_BUFFERFLAG_EXTRADATA)
+    {
+        // get extra data from end of buffer
+        OMX_OTHER_EXTRADATATYPE *pExtra;
+        OMX_U32 offset = aOutputBuffer->nOffset + aOutputBuffer->nFilledLen;
+        OMX_U32 allocLen = aOutputBuffer->nAllocLen;
+        OMX_U8* pTemp = aOutputBuffer->pBuffer + offset;
+
+        // align
+        pExtra = (OMX_OTHER_EXTRADATATYPE *)(((OMX_U32) pTemp + 3) & ~3);
+        offset += (OMX_U32) pExtra - (OMX_U32) pTemp;
+
+        while (pExtra->eType != OMX_ExtraDataNone)
+        {
+            if (pExtra->eType == OMX_ExtraDataNALSizeArray)
+            {
+                iNumNALs = pExtra->nDataSize >> 2;
+                if ((iNALSizeArrayMaxElems > iNumNALs) && (iNALSizeArray != NULL))
+                {
+                    oscl_memcpy(iNALSizeArray, ((OMX_U8*)pExtra + 20), pExtra->nDataSize); // 20 is the size of the extra data struct (minus data hint)
+                }
+                else
+                {
+                    // reassign alloc size to new max.
+                    iNALSizeArrayMaxElems = iNumNALs;
+
+                    // free memory and then reallocate
+                    if (iNALSizeArray != NULL)
+                    {
+                        oscl_free(iNALSizeArray);
+                    }
+
+                    iNALSizeArray = (uint32*) oscl_malloc(sizeof(uint32) * iNALSizeArrayMaxElems);
+                    if (iNALSizeArray == NULL)
+                    {
+                        iNALSizeArrayMaxElems = 0;
+
+                        PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_NOTICE, (0, "PVMFOMXEncNode-%s : ParseFullAVCFramesIntoNALs ERROR - Out of Memory", iNodeTypeId));
+                        return false;
+                    }
+
+                    oscl_memcpy(iNALSizeArray, ((OMX_U8*)pExtra + 20), pExtra->nDataSize); // 20 is the size of the extra data struct (minus data hint)
+                }
+
+                break;
+            }
+
+            offset += pExtra->nSize;
+            /* 20 is size of extra data struct (minus data hint),
+             * so if there isn't enough room for there to be a full struct, and we haven't reached an OMX_ExtraDataNone
+             * the data is corrupt
+             */
+            if (offset > (allocLen - 20))
+            {
+                // corrupt data
+                break;
+            }
+            else
+            {
+                pExtra = (OMX_OTHER_EXTRADATATYPE *)((OMX_U8*)pExtra + pExtra->nSize);
+            }
+        }
+
+        if (pExtra->eType != OMX_ExtraDataNALSizeArray)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_NOTICE, (0, "PVMFOMXEncNode-%s : ParseFullAVCFramesIntoNALs ERROR", iNodeTypeId));
+            return false;
+        }
+    }
+    else
+    {
+        PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_NOTICE, (0, "PVMFOMXEncNode-%s : ParseFullAVCFramesIntoNALs ERROR", iNodeTypeId));
+        return false;
+    }
+
+    PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_NOTICE, (0, "PVMFOMXEncNode-%s : ParseFullAVCFramesIntoNALs OUT", iNodeTypeId));
+    return true;
+}
+
+/* utility function copied from the AVC Decoder interface */
+bool PVMFOMXEncNode::AVCAnnexBGetNALUnit(uint8 *bitstream, uint8 **nal_unit, int32 *size, bool getPtrOnly)
+{
+    int32 i, j, FoundStartCode = 0;
+    int32 end;
+
+    i = 0;
+    while (bitstream[i] == 0 && i < *size)
+    {
+        i++;
+    }
+    if (i >= *size)
+    {
+        *nal_unit = bitstream;
+        return false; /* cannot find any start_code_prefix. */
+    }
+    else if (bitstream[i] != 0x1)
+    {
+        i = -1;  /* start_code_prefix is not at the beginning, continue */
+    }
+
+    i++;
+    *nal_unit = bitstream + i; /* point to the beginning of the NAL unit */
+
+    if (getPtrOnly)
+    {
+        // size not needed, just return with ptr
+        return true;
+    }
+
+    j = end = i;
+    while (!FoundStartCode)
+    {
+        while ((j + 1 < *size) && (bitstream[j] != 0 || bitstream[j+1] != 0))  /* see 2 consecutive zero bytes */
+        {
+            j++;
+        }
+        end = j;   /* stop and check for start code */
+        while (j + 2 < *size && bitstream[j+2] == 0) /* keep reading for zero byte */
+        {
+            j++;
+        }
+        if (j + 2 >= *size)
+        {
+            *size -= i;
+            return true;  /* cannot find the second start_code_prefix */
+        }
+        if (bitstream[j+2] == 0x1)
+        {
+            FoundStartCode = 1;
+        }
+        else
+        {
+            /* could be emulation code 0x3 */
+            j += 2; /* continue the search */
+        }
+    }
+
+    *size = end - i;
+
+    return true;
+}
+
diff --git a/nodes/pvomxencnode/src/pvmf_omx_enc_node.h b/nodes/pvomxencnode/src/pvmf_omx_enc_node.h
index 4111fe9..b77a107 100644
--- a/nodes/pvomxencnode/src/pvmf_omx_enc_node.h
+++ b/nodes/pvomxencnode/src/pvmf_omx_enc_node.h
@@ -53,6 +53,10 @@
 #include "pvmf_simple_media_buffer.h"
 #endif
 
+#ifndef PVMF_MEDIA_FRAG_GROUP_H_INCLUDED
+#include "pvmf_media_frag_group.h"
+#endif
+
 #ifndef PVMF_POOL_BUFFER_ALLOCATOR_H_INCLUDED
 #include "pvmf_pool_buffer_allocator.h"
 #endif
@@ -81,8 +85,8 @@
 #include "pvmp4h263encextension.h"
 #endif
 
-#ifndef PVMFAMRENCNODE_EXTENSION_H_INCLUDED
-#include "pvmfamrencnode_extension.h"
+#ifndef PVMF_AUDIO_ENCNODE_EXTENSION_H_INCLUDED
+#include "pvmf_audio_encnode_extension.h"
 #endif
 
 // DV: NOTE - this needs to be fixed
@@ -110,6 +114,9 @@
 #include "pvmf_omx_enc_callbacks.h"
 #endif
 
+#ifndef PV_OMXDEFS_H_INCLUDED
+#include "pv_omxdefs.h"
+#endif
 
 #ifndef OSCLCONFIG_IO_H_INCLUDED
 #include "osclconfig_io.h"
@@ -203,7 +210,8 @@
                 buf_alloc->deallocate(ptr_to_data_to_dealloc);
             }
 
-            // finally, free the shared ptr wrapper memory
+            // this is needed to completely free PVMFMediaDataImpl, since it allocates memory for the frag list
+            ((PVMFMediaDataImpl*)ptr)->~PVMFMediaDataImpl();
             oscl_free(ptr);
         }
 
@@ -681,7 +689,10 @@
     uint8 iOutputNumChannels;
 
     // DESCRIPTION: Currently, output bitrate is expressed as GSM-AMR type rate
-    PVMF_GSMAMR_Rate iOutputBitrate;
+    PVMF_GSMAMR_Rate iAMRBitrate;
+
+    // DESCRIPTION: output bitrate in bits per second for non-AMR codecs
+    uint32  iOutputBitrate;
 
     //
     uint32	iMaxNumOutputFramesPerBuffer;
@@ -867,8 +878,7 @@
             , public PVMFMetadataExtensionInterface
             , public PvmiCapabilityAndConfig
             , public PVMp4H263EncExtensionInterface
-            , public PVAMREncExtensionInterface
-
+            , public PVAudioEncExtensionInterface
 {
     public:
         PVMFOMXEncNode(int32 aPriority);
@@ -1008,9 +1018,13 @@
 
         OSCL_IMPORT_REF virtual bool SetFSIParam(uint8* aFSIBuff, int aFSIBuffLength);
 
-        // from AMREncExtensionInterface
+        // from AudioEncExtensionInterface
         OSCL_IMPORT_REF PVMFStatus SetOutputBitRate(PVMF_GSMAMR_Rate aBitRate);
         OSCL_IMPORT_REF PVMFStatus SetMaxNumOutputFramesPerBuffer(uint32 aNumOutputFrames);
+        OSCL_IMPORT_REF PVMFStatus SetOutputBitRate(uint32 aBitRate);
+        OSCL_IMPORT_REF PVMFStatus SetOutputNumChannel(uint32 aNumChannel);
+        OSCL_IMPORT_REF PVMFStatus SetOutputSamplingRate(uint32 aSamplingRate);
+
 
         PVMFStatus SetInputSamplingRate(uint32 aSamplingRate);
         PVMFStatus SetInputBitsPerSample(uint32 aBitsPerSample);
@@ -1030,6 +1044,8 @@
         OsclFloat GetOutputFrameRate(uint32 aLayer);
         PVMFStatus GetOutputFrameSize(uint32 aLayer, uint32& aWidth, uint32& aHeight);
         uint32 GetIFrameInterval();
+        uint32 GetOutputSamplingRate();
+        uint32 GetOutputNumChannels();
 
     private:
         void CommandComplete(PVMFOMXEncNodeCmdQ& aCmdQ, PVMFOMXEncNodeCommand& aCmd, PVMFStatus aStatus, OsclAny* aEventData = NULL);
@@ -1067,6 +1083,7 @@
 
         bool NegotiateAudioComponentParameters();
         bool SetAMREncoderParameters();
+        bool SetAACEncoderParameters();
 
         bool SetDefaultCapabilityFlags();
         bool CreateOutMemPool(uint32 num);
@@ -1132,6 +1149,9 @@
         int32 CreateNewArray(char*&, int32);
         int32 MemAllocate(OsclAny*& , OsclMemPoolFixedChunkAllocator*, uint32);
 
+        bool ParseFullAVCFramesIntoNALs(OMX_BUFFERHEADERTYPE* aOutputBuffer);
+        bool AVCAnnexBGetNALUnit(uint8 *bitstream, uint8 **nal_unit, int32 *size, bool getPtrOnly);
+
         friend class PVMFOMXEncPort;
 
         // Ports pointers
@@ -1155,8 +1175,6 @@
         // Memory pool for simple media data
         OsclMemPoolFixedChunkAllocator *iMediaDataMemPool;
 
-
-
         // Size of output buffer (negotiated with component)
         uint32 iOMXComponentOutputBufferSize;
 
@@ -1226,9 +1244,10 @@
         bool iOMXComponentSupportsExternalOutputBufferAlloc;
         bool iOMXComponentSupportsExternalInputBufferAlloc;
         bool iOMXComponentSupportsMovableInputBuffers;
-        bool iOMXComponentNeedsNALStartCode;
+        bool iOMXComponentUsesNALStartCodes;
         bool iOMXComponentSupportsPartialFrames;
         bool iOMXComponentCanHandleIncompleteFrames;
+        bool iOMXComponentUsesFullAVCFrames;
 
         bool iSetMarkerBitForEveryFrag;
         bool iIsOMXComponentMultiThreaded;
@@ -1347,6 +1366,7 @@
 
         PVMFOMXEncNodeAllocDestructDealloc iAlloc;
         OsclRefCounterMemFrag iVolHeader; /** Vol header */
+        OsclRefCounterMemFrag iConfigHeader;
 
         OsclRefCounterMemFrag iParamSet; /* place holder for sps,pps values */
         OsclMemoryFragment iSPSs[PVMF_AVCENC_NODE_SPS_VECTOR_RESERVE]; // just ptrs
@@ -1356,6 +1376,11 @@
         bool iSpsPpsSequenceOver;
         OsclSharedPtr<PVMFMediaDataImpl> iPreviousMediaData;
         bool iFirstNAL;
+        uint32* iNALSizeArray;
+        uint8** iNALPtrArray;
+        uint32 iNALSizeArrayMaxElems;
+        uint32 iNumNALs;
+        uint32 iFirstNALStartCodeSize;
 
         uint32 iEndOfFrameFlagPrevious;
         uint32 iKeyFrameFlagPrevious;
@@ -1368,6 +1393,10 @@
         uint32 iEndOfNALFlagOut;
         uint32 iTimeStampOut;
         uint32 iBufferLenOut;
+        OsclAny **out_ctrl_struct_ptr ;
+        OsclAny **out_buff_hdr_ptr ;
+        OsclAny **in_ctrl_struct_ptr ;
+        OsclAny **in_buff_hdr_ptr ;
 
 
 
diff --git a/nodes/pvomxencnode/src/pvmf_omx_enc_port.cpp b/nodes/pvomxencnode/src/pvmf_omx_enc_port.cpp
index 704a613..afc902c 100644
--- a/nodes/pvomxencnode/src/pvmf_omx_enc_port.cpp
+++ b/nodes/pvomxencnode/src/pvmf_omx_enc_port.cpp
@@ -35,6 +35,7 @@
     iNumFramesConsumed = 0;
     iTrackConfig = NULL;
     iTrackConfigSize = 0;
+    iTimescale = 0;
 
 }
 
@@ -66,7 +67,10 @@
             (aFmt == PVMF_MIME_H2631998) ||
             (aFmt == PVMF_MIME_H2632000) ||
             (aFmt == PVMF_MIME_AMR_IETF) ||
-            (aFmt == PVMF_MIME_AMR_IF2))
+            (aFmt == PVMF_MIME_AMR_IF2) ||
+            (aFmt == PVMF_MIME_ADTS) ||
+            (aFmt == PVMF_MIME_ADIF) ||
+            (aFmt == PVMF_MIME_MPEG4_AUDIO))
     {
         return true;
     }
@@ -372,7 +376,7 @@
 
         if (pv_mime_strcmp(param1, param2) == 0)
         {
-            num_parameter_elements = 7;
+            num_parameter_elements = 10;
             status = AllocateKvp(parameters, (OMX_STRING)OUTPUT_FORMATS_VALTYPE, num_parameter_elements);
             if (status != PVMFSuccess)
             {
@@ -387,6 +391,9 @@
                 parameters[4].value.pChar_value = (char*)PVMF_MIME_H264_VIDEO_MP4;
                 parameters[5].value.pChar_value = (char*)PVMF_MIME_AMR_IETF;
                 parameters[6].value.pChar_value = (char*)PVMF_MIME_AMR_IF2;
+                parameters[7].value.pChar_value = (char*)PVMF_MIME_ADTS;
+                parameters[8].value.pChar_value = (char*)PVMF_MIME_ADIF;
+                parameters[9].value.pChar_value = (char*)PVMF_MIME_MPEG4_AUDIO;
 
             }
         }
@@ -485,7 +492,8 @@
         {
 
             // NOTE: we assume that port format will be set before this call
-            if ((iFormat == PVMF_MIME_AMR_IETF) || (iFormat == PVMF_MIME_AMR_IF2))
+            if ((iFormat == PVMF_MIME_AMR_IETF) || (iFormat == PVMF_MIME_AMR_IF2) ||
+                    (iFormat == PVMF_MIME_ADTS) || (iFormat == PVMF_MIME_ADIF) || (iFormat == PVMF_MIME_MPEG4_AUDIO))
             {
                 parameters[0].value.uint32_value = iOMXNode->GetOutputBitRate(); // use audio version - void arg
             }
@@ -523,6 +531,54 @@
             parameters[0].value.uint32_value = iOMXNode->GetIFrameInterval();
         }
     }
+    else if (pv_mime_strcmp(identifier, AUDIO_OUTPUT_SAMPLING_RATE_CUR_QUERY) == 0)
+    {
+        num_parameter_elements = 1;
+        status = AllocateKvp(parameters, (PvmiKeyType)AUDIO_OUTPUT_SAMPLING_RATE_CUR_VALUE, num_parameter_elements);
+        if (status != PVMFSuccess)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVMFOMXEncPort::GetOutputParametersSync: Error - AllocateKvp failed. status=%d", status));
+            return status;
+        }
+
+        parameters[0].value.uint32_value = (uint32) iOMXNode->GetOutputSamplingRate();
+
+    }
+    else if (pv_mime_strcmp(identifier, AUDIO_OUTPUT_NUM_CHANNELS_CUR_QUERY) == 0)
+    {
+        num_parameter_elements = 1;
+        status = AllocateKvp(parameters, (PvmiKeyType)AUDIO_OUTPUT_NUM_CHANNELS_CUR_VALUE, num_parameter_elements);
+        if (status != PVMFSuccess)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVMFOMXEncPort::GetOutputParametersSync: Error - AllocateKvp failed. status=%d", status));
+            return status;
+        }
+
+        parameters[0].value.uint32_value = (uint32) iOMXNode->GetOutputNumChannels();
+    }
+    else if ((pv_mime_strcmp(identifier, OUTPUT_TIMESCALE_CUR_QUERY) == 0) &&
+             ((iFormat == PVMF_MIME_AMR_IETF) ||
+              (iFormat == PVMF_MIME_AMR_IF2) ||
+              (iFormat == PVMF_MIME_ADTS) ||
+              (iFormat == PVMF_MIME_ADIF) ||
+              (iFormat == PVMF_MIME_MPEG4_AUDIO)
+             ))
+    {
+        num_parameter_elements = 1;
+        status = AllocateKvp(parameters, (PvmiKeyType)OUTPUT_TIMESCALE_CUR_VALUE, num_parameter_elements);
+        if (status != PVMFSuccess)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVMFOMXEncPort::GetOutputParametersSync: Error - AllocateKvp failed. status=%d", status));
+            return status;
+        }
+        else
+        {
+
+            parameters[0].value.uint32_value = (uint32) iOMXNode->GetOutputSamplingRate();
+
+        }
+    }
+
 
     return status;
 }
@@ -608,7 +664,10 @@
                 pv_mime_strcmp(aKvp->value.pChar_value, PVMF_MIME_H264_VIDEO_RAW) == 0 ||
                 pv_mime_strcmp(aKvp->value.pChar_value, PVMF_MIME_H264_VIDEO_MP4) == 0 ||
                 pv_mime_strcmp(aKvp->value.pChar_value, PVMF_MIME_AMR_IETF) == 0 ||
-                pv_mime_strcmp(aKvp->value.pChar_value, PVMF_MIME_AMR_IF2) == 0)
+                pv_mime_strcmp(aKvp->value.pChar_value, PVMF_MIME_AMR_IF2) == 0 ||
+                pv_mime_strcmp(aKvp->value.pChar_value, PVMF_MIME_ADIF) == 0 ||
+                pv_mime_strcmp(aKvp->value.pChar_value, PVMF_MIME_ADTS) == 0 ||
+                pv_mime_strcmp(aKvp->value.pChar_value, PVMF_MIME_MPEG4_AUDIO) == 0)
         {
             if (aSetParam)
             {
@@ -620,7 +679,7 @@
         else
         {
             PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVMFOMXEncPort::VerifyAndSetParameter: Error - Output format %d not supported",
-                            aKvp->value.uint32_value));
+                            aKvp->value.pChar_value));
             return PVMFFailure;
         }
     }
@@ -763,6 +822,24 @@
         kvp = NULL;
         numParams = 0;
 
+        // do the "TIMESCALE" query
+        status = aConfig->getParametersSync(NULL, (PvmiKeyType)OUTPUT_TIMESCALE_CUR_QUERY, kvp, numParams, NULL);
+        iTimescale = 0;
+        if (status != PVMFSuccess || !kvp || numParams != 1)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVMFOMXEncPort::NegotiateInputSettings: config->getParametersSync(sampling rate) not supported. Use default."));
+            iTimescale = PVMF_AMRENC_DEFAULT_SAMPLING_RATE;
+        }
+        else
+        {
+            iTimescale = kvp[0].value.uint32_value;
+
+            aConfig->releaseParameters(NULL, kvp, numParams);
+        }
+
+        kvp = NULL;
+        numParams = 0;
+
         return PVMFSuccess;
 
     }
diff --git a/nodes/pvomxvideodecnode/src/pvmf_omx_videodec_node.cpp b/nodes/pvomxvideodecnode/src/pvmf_omx_videodec_node.cpp
index 4d5c38f..66910d5 100644
--- a/nodes/pvomxvideodecnode/src/pvmf_omx_videodec_node.cpp
+++ b/nodes/pvomxvideodecnode/src/pvmf_omx_videodec_node.cpp
@@ -25,7 +25,7 @@
 #include "pvmf_media_msg_format_ids.h"
 #include "pvmi_kvp_util.h"
 // needed for capability and config
-#include "pv_video_config_parser.h"
+#include "pv_omx_config_parser.h"
 
 
 #include "omx_core.h"
@@ -261,6 +261,39 @@
             return PVMFErrNoMemory;
         }
 
+        if (out_ctrl_struct_ptr == NULL)
+        {
+
+            out_ctrl_struct_ptr = (OsclAny **) oscl_malloc(iNumOutputBuffers * sizeof(OsclAny *));
+
+            if (out_ctrl_struct_ptr == NULL)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                                (0, "PVMFOMXVideoDecNode::HandlePortReEnable() out_ctrl_struct_ptr == NULL"));
+
+                SetState(EPVMFNodeError);
+                ReportErrorEvent(PVMFErrNoMemory);
+                return PVMFErrNoMemory;
+            }
+        }
+
+        if (out_buff_hdr_ptr == NULL)
+        {
+
+            out_buff_hdr_ptr = (OsclAny **) oscl_malloc(iNumOutputBuffers * sizeof(OsclAny *));
+
+            if (out_buff_hdr_ptr == NULL)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                                (0, "PVMFOMXVideoDecNode::HandlePortReEnable()  out_buff_hdr_ptr == NULL"));
+
+                SetState(EPVMFNodeError);
+                ReportErrorEvent(PVMFErrNoMemory);
+                return PVMFErrNoMemory;
+            }
+        }
+
+
         if (!ProvideBuffersToComponent(iOutBufMemoryPool, // allocator
                                        iOutputAllocSize,	 // size to allocate from pool (hdr only or hdr+ buffer)
                                        iNumOutputBuffers, // number of buffers
@@ -309,6 +342,38 @@
             return PVMFErrNoMemory;
         }
 
+        if (in_ctrl_struct_ptr == NULL)
+        {
+
+            in_ctrl_struct_ptr = (OsclAny **) oscl_malloc(iNumInputBuffers * sizeof(OsclAny *));
+
+            if (in_ctrl_struct_ptr == NULL)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                                (0, "PVMFOMXVideoDecNode::HandlePortReEnable() in_ctrl_struct_ptr == NULL"));
+
+                SetState(EPVMFNodeError);
+                ReportErrorEvent(PVMFErrNoMemory);
+                return PVMFErrNoMemory;
+            }
+        }
+
+        if (in_buff_hdr_ptr == NULL)
+        {
+
+            in_buff_hdr_ptr = (OsclAny **) oscl_malloc(iNumInputBuffers * sizeof(OsclAny *));
+
+            if (in_buff_hdr_ptr == NULL)
+            {
+                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
+                                (0, "PVMFOMXVideoDecNode::HandlePortReEnable()  in_buff_hdr_ptr == NULL"));
+
+                SetState(EPVMFNodeError);
+                ReportErrorEvent(PVMFErrNoMemory);
+                return PVMFErrNoMemory;
+            }
+        }
+
         if (!ProvideBuffersToComponent(iInBufMemoryPool, // allocator
                                        iInputAllocSize,	 // size to allocate from pool (hdr only or hdr+ buffer)
                                        iNumInputBuffers, // number of buffers
@@ -343,7 +408,7 @@
     return PVMFSuccess; // allow rescheduling of the node
 }
 ////////////////////////////////////////////////////////////////////////////////
-bool PVMFOMXVideoDecNode::NegotiateComponentParameters()
+bool PVMFOMXVideoDecNode::NegotiateComponentParameters(OMX_PTR aOutputParameters)
 {
     PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
                     (0, "PVMFOMXVideoDecNode::NegotiateComponentParameters() In"));
@@ -472,33 +537,17 @@
     PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
                     (0, "PVMFOMXVideoDecNode::NegotiateComponentParameters() Inport buffers %d,size %d", iNumInputBuffers, iOMXComponentInputBufferSize));
 
-    pvVideoConfigParserInputs aInputs;
-    pvVideoConfigParserOutputs aOutputs;
 
-    aInputs.inPtr = (uint8*)((PVMFOMXDecPort*)iInPort)->iTrackConfig;
-    aInputs.inBytes = (int32)((PVMFOMXDecPort*)iInPort)->iTrackConfigSize;
-    aInputs.iMimeType = ((PVMFOMXDecPort*)iInPort)->iFormat;
+    VideoOMXConfigParserOutputs *pOutputParameters;
 
-    PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
-                    (0, "PVMFOMXVideoDecNode::NegotiateComponentParameters() Calling video config parser - TrackConfig = %p, TrackConfigSize = %d, mimetype = %s", aInputs.inPtr, aInputs.inBytes, aInputs.iMimeType.getMIMEStrPtr()));
-
-
-    int16 status;
-    status = pv_video_config_parser(&aInputs, &aOutputs);
-    if (status != 0)
-    {
-        return false;
-    }
-
-    PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE,
-                    (0, "PVMFOMXVideoDecNode::NegotiateComponentParameters() pv config parser says width=%d and height=%d", aOutputs.width, aOutputs.height));
+    pOutputParameters = (VideoOMXConfigParserOutputs *)aOutputParameters;
 
 
     // set the width/height on INPUT port parameters (this may change during port reconfig)
-    if ((aOutputs.width != 0) && (aOutputs.height != 0))
+    if ((pOutputParameters->width != 0) && (pOutputParameters->height != 0))
     {
-        iParamPort.format.video.nFrameWidth = aOutputs.width;
-        iParamPort.format.video.nFrameHeight = aOutputs.height;
+        iParamPort.format.video.nFrameWidth = pOutputParameters->width;
+        iParamPort.format.video.nFrameHeight = pOutputParameters->height;
     }
 
     CONFIG_SIZE_AND_VERSION(iParamPort);
@@ -525,10 +574,10 @@
     // 1st frame is decoded, so read them from the output port.
     // otherwise, used Width/Height from the config parser utility
     // set the width/height based on port parameters (this may change during port reconfig)
-    if ((aOutputs.width != 0) && (aOutputs.height != 0) && iInPort && (((PVMFOMXDecPort*)iInPort)->iFormat != PVMF_MIME_H2631998 || ((PVMFOMXDecPort*)iInPort)->iFormat != PVMF_MIME_H2632000))
+    if ((pOutputParameters->width != 0) && (pOutputParameters->height != 0) && iInPort && (((PVMFOMXDecPort*)iInPort)->iFormat != PVMF_MIME_H2631998 || ((PVMFOMXDecPort*)iInPort)->iFormat != PVMF_MIME_H2632000))
     {
-        iYUVWidth  = aOutputs.width;
-        iYUVHeight = aOutputs.height;
+        iYUVWidth  = pOutputParameters->width;
+        iYUVHeight = pOutputParameters->height;
     }
     else
     {
@@ -2707,20 +2756,94 @@
             else
             {
                 pvVideoConfigParserInputs aInputs;
-                pvVideoConfigParserOutputs aOutputs;
+                OMXConfigParserInputs aInputParameters;
+                VideoOMXConfigParserOutputs aOutputParameters;
 
                 aInputs.inPtr = (uint8*)(aParameters->value.key_specific_value);
                 aInputs.inBytes = (int32)aParameters->capacity;
                 aInputs.iMimeType = iNodeConfig.iMimeType;
+                aInputParameters.inBytes = aInputs.inBytes;
+                aInputParameters.inPtr = aInputs.inPtr;
 
-                int16 status;
-                status = pv_video_config_parser(&aInputs, &aOutputs);
-                if (status != 0)
+                if (aInputs.iMimeType ==  PVMF_MIME_H264_VIDEO ||
+                        aInputs.iMimeType == PVMF_MIME_H264_VIDEO_MP4 ||
+                        aInputs.iMimeType == PVMF_MIME_H264_VIDEO_RAW)
+                {
+                    aInputParameters.cComponentRole = (OMX_STRING)"video_decoder.avc";
+                }
+                else if (aInputs.iMimeType ==  PVMF_MIME_M4V)
+                {
+                    aInputParameters.cComponentRole = (OMX_STRING)"video_decoder.mpeg4";
+                }
+                else if (aInputs.iMimeType ==  PVMF_MIME_H2631998 ||
+                         aInputs.iMimeType == PVMF_MIME_H2632000)
+                {
+                    aInputParameters.cComponentRole = (OMX_STRING)"video_decoder.h263";
+                }
+                else if (aInputs.iMimeType ==  PVMF_MIME_WMV)
+                {
+                    aInputParameters.cComponentRole = (OMX_STRING)"video_decoder.wmv";
+                }
+                else
+                {
+                    // Illegal codec specified.
+                    PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "%s::PVMFOMXVideoDecNode::DoCapConfigVerifyParameters() Input port format other then codec type", iName.Str()));
+
+                }
+
+
+                OMX_BOOL status = OMX_FALSE;
+                OMX_U32 num_comps = 0;
+                OMX_STRING *CompOfRole;
+                OMX_U32 ii;
+
+                // call once to find out the number of components that can fit the role
+
+                OMX_GetComponentsOfRole(aInputParameters.cComponentRole, &num_comps, NULL);
+
+                if (num_comps > 0)
+                {
+                    CompOfRole = (OMX_STRING *)oscl_malloc(num_comps * sizeof(OMX_STRING));
+                    for (ii = 0; ii < num_comps; ii++)
+                        CompOfRole[ii] = (OMX_STRING) oscl_malloc(PV_OMX_MAX_COMPONENT_NAME_LENGTH * sizeof(OMX_U8));
+
+                    // call 2nd time to get the component names
+                    OMX_GetComponentsOfRole(aInputParameters.cComponentRole, &num_comps, (OMX_U8 **)CompOfRole);
+                    for (ii = 0; ii < num_comps; ii++)
+                    {
+                        aInputParameters.cComponentName = CompOfRole[ii];
+                        status = OMXConfigParser(&aInputParameters, &aOutputParameters);
+                        if (status == OMX_TRUE)
+                        {
+                            break;
+                        }
+                        else
+                        {
+                            status = OMX_FALSE;
+                        }
+                    }
+
+                    // whether successful or not, need to free CompOfRoles
+                    for (ii = 0; ii < num_comps; ii++)
+                    {
+                        oscl_free(CompOfRole[ii]);
+                        CompOfRole[ii] = NULL;
+                    }
+                    oscl_free(CompOfRole);
+                }
+                else
+                {
+                    // if no component supports the role, nothing else to do
+                    return PVMFErrNotSupported;
+                }
+
+                if (status == OMX_FALSE)
                 {
                     return PVMFErrNotSupported;
                 }
-                iNewWidth = aOutputs.width;
-                iNewHeight = aOutputs.height;
+
+                iNewWidth = aOutputParameters.width;
+                iNewHeight = aOutputParameters.height;
 
                 return PVMFSuccess;
             }
diff --git a/nodes/pvomxvideodecnode/src/pvmf_omx_videodec_node.h b/nodes/pvomxvideodecnode/src/pvmf_omx_videodec_node.h
index d6bcf50..b8c4eaa 100644
--- a/nodes/pvomxvideodecnode/src/pvmf_omx_videodec_node.h
+++ b/nodes/pvomxvideodecnode/src/pvmf_omx_videodec_node.h
@@ -161,7 +161,7 @@
 
         bool InitDecoder(PVMFSharedMediaDataPtr&);
 
-        bool NegotiateComponentParameters();
+        bool NegotiateComponentParameters(OMX_PTR aOutputParameters);
         bool GetSetCodecSpecificInfo();
         bool QueueOutputBuffer(OsclSharedPtr<PVMFMediaDataImpl> &mediadataimplout, uint32 aDataLen);
 
diff --git a/nodes/pvprotocolenginenode/Android.mk b/nodes/pvprotocolenginenode/Android.mk
index a0d2653..4d05b54 100644
--- a/nodes/pvprotocolenginenode/Android.mk
+++ b/nodes/pvprotocolenginenode/Android.mk
@@ -6,12 +6,12 @@
  	src/pvmf_protocol_engine_node_common.cpp \
  	src/pvmf_protocol_engine_factory.cpp \
  	src/pvmf_protocol_engine_port.cpp \
- 	src/pvdl_config_file.cpp \
- 	src/pvmf_protocol_engine_download_common.cpp \
- 	src/pvmf_protocol_engine_node_download_common.cpp \
  	src/pvmf_protocol_engine_node_progressive_streaming.cpp \
  	src/pvmf_protocol_engine_progressive_download.cpp \
- 	src/pvmf_protocol_engine_node_progressive_download.cpp
+ 	src/pvmf_protocol_engine_node_progressive_download.cpp \
+ 	src/pvdl_config_file.cpp \
+ 	src/pvmf_protocol_engine_download_common.cpp \
+ 	src/pvmf_protocol_engine_node_download_common.cpp
 
 
 LOCAL_MODULE := libprotocolenginenode
@@ -27,7 +27,7 @@
 LOCAL_C_INCLUDES := \
 	$(PV_TOP)/nodes/pvprotocolenginenode/src \
  	$(PV_TOP)/nodes/pvprotocolenginenode/include \
- 	$(PV_TOP)/nodes/pvprotocolenginenode/config/linux_nj \
+ 	$(PV_TOP)/nodes/pvprotocolenginenode/config/android \
  	$(PV_TOP)/nodes/pvprotocolenginenode/config/linux \
  	$(PV_INCLUDES)
 
diff --git a/nodes/pvprotocolenginenode/config/linux_nj/pvmf_protocolengine_node_tunables.h b/nodes/pvprotocolenginenode/config/linux_nj/pvmf_protocolengine_node_tunables.h
deleted file mode 100644
index 9689c65..0000000
--- a/nodes/pvprotocolenginenode/config/linux_nj/pvmf_protocolengine_node_tunables.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/* ------------------------------------------------------------------
- * Copyright (C) 1998-2009 PacketVideo
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
- * express or implied.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- * -------------------------------------------------------------------
- */
-#ifndef PVMF_PROTOCOL_ENGINE_NODE_TUNABLES_H_INCLUDED
-#define PVMF_PROTOCOL_ENGINE_NODE_TUNABLES_H_INCLUDED
-
-#define PDL_HTTP_USER_AGENT			_STRLIT_CHAR("PVPLAYER 04.07.00.01")
-#define PDL_HTTP_VERSION_NUMBER		0 // 0 => Http Version1.0 ; 1 => Http Version1.1
-
-// macros for memory pool
-#define PVHTTPDOWNLOADOUTPUT_CONTENTDATA_POOLNUM 16
-#define PVHTTPSTREAMINGOUTPUT_CONTENTDATA_POOLNUM 1024
-#define PVHTTPDOWNLOADOUTPUT_MEDIADATA_CHUNKSIZE 128
-#ifndef PVHTTPDOWNLOADOUTPUT_CONTENTDATA_CHUNKSIZE
-#define PVHTTPDOWNLOADOUTPUT_CONTENTDATA_CHUNKSIZE 8000
-#endif
-
-// macros for timer
-#define DEFAULT_MAX_SERVER_INACTIVITY_DURATION_IN_SEC 60
-#define DEFAULT_MAX_SERVER_RESPONSE_DURATION_IN_SEC 60
-#define DEFAULT_KEEPALIVE_TIMEOUT_IN_SEC 60
-#define DEFAULT_MAX_SERVER_RESPONSE_DURATION_IN_SEC_FOR_STOPEOS_LOGGING 4
-#define DEFAULT_WALLCLOCK_TIMEOUT_IN_SEC 2
-#define DEFAULT_BUFFER_STATUS_CLOCK_TIMEOUT_IN_SEC 2
-#define DEFAULT_TIMER_VECTOR_RESERVE_NUMBER 8
-#define PVPROTOCOLENGINENODE_TIMER_FREQUENCY 1 // 1 means 1 sec, 1000 means 1msec
-
-// bitmask for http method for extension header
-#define BITMASK_HTTPGET 1
-#define BITMASK_HTTPPOST 2
-#define BITMASK_HTTPHEAD 4
-
-// macros for user-agent
-#define DEFAULT_DL_USER_AGNET			_STRLIT_CHAR("PVPlayer/4.0 (Beta release)")
-#define DEFAULT_MS_STREAMING_USER_AGENT _STRLIT_CHAR("NSPlayer/10.0.0.3646")
-
-// marcos for download algorithm pre-condition checks
-#define PVPROTOCOLENGINE_INIT_DOWNLOAD_TIME_THRESHOLD  1000 // 1000msec
-#define PVPROTOCOLENGINE_INIT_DOWNLOAD_SIZE_PERCENTAGE_THRESHOLD  10 // 10% of file size
-#define PVPROTOCOLENGINE_INIT_DOWNLOAD_SIZE_THRESHOLD  4096 // 4Kbytes
-#define PVPROTOCOLENGINE_INIT_DOWNLOAD_TIME_THRESHOLD_WITH_CLIPBITRATE  10 // 10sec
-#define PVPROTOCOLENGINE_JITTER_BUFFER_SIZE_BYTES  10240 // 10Kbytes
-#define PVPROTOCOLENGINE_JITTER_BUFFER_SIZE_TIME   4	// 4sec worth of data
-#define PVPROTOCOLENGINE_JITTER_BUFFER_SIZE_DLPERCENTAGE   15	// 15% of file size
-
-// marcos for the fixed-point calculation in auto-resume decision
-#define PVPROTOCOLENGINE_AUTO_RESUME_FIXED_CALCULATION_MAX_LIMIT_RIGHT_SHIFT_FACTOR  16 // 2^16=65536
-#define PVPROTOCOLENGINE_AUTO_RESUME_FIXED_CALCULATION_RIGHT_SHIFT 10
-
-// macros for download byte percentage calculation: downloadSize*100/fileSize
-#define PVPROTOCOLENGINE_DOWNLOAD_BYTE_PERCENTAGE_CONVERTION_100 100 // 100
-#define PVPROTOCOLENGINE_DOWNLOAD_BYTE_PERCENTAGE_DLSIZE_LIMIT_RIGHT_SHIFT_FACTOR   25 //2^25 =33554432 // 33554432 = 2^32 / 2^7 = 2^25
-#define PVPROTOCOLENGINE_DOWNLOAD_BYTE_PERCENTAGE_DLSIZE_RIGHTSHIFT_FACTOR 7 // right shift 7 bits, 2^7 > 100
-#define PVPROTOCOLENGINE_MINIMAL_BUFFERING_TIME_FOR_FASTTRACK  7000		// 7000msec
-
-// macros for duration calcuation: fileSize*1000/playback rate
-#define PVPROTOCOLENGINE_DOWNLOAD_DURATION_CALCULATION_LIMIT_RIGHT_SHIFT_FACTOR   22 //2^21 =4194304 
-#define PVPROTOCOLENGINE_DOWNLOAD_DURATION_CALCULATION_RIGHTSHIFT_FACTOR 10 // right shift 7 bits, 2^7 > 100
-
-
-
-// macros for misc stuff
-#define PVPROTOCOLENGINE_RESERVED_NUMBER_OF_FRAMES 4
-#define PROTOCOLENGINENODE_SPACE_ASCIICODE 0x20
-#define BUFFER_SIZE_FOR_ZERO_OUT_DATA_STREAM_OBJECT 10240
-#ifndef EVENT_HANDLER_TOTAL
-#define EVENT_HANDLER_TOTAL 9
-#endif
-
-#endif // PVMF_PROTOCOL_ENGINE_NODE_TUNABLES_H_INCLUDED
-
diff --git a/nodes/pvprotocolenginenode/include/pvmf_protocol_engine_node_extension.h b/nodes/pvprotocolenginenode/include/pvmf_protocol_engine_node_extension.h
index e6cb05f..fbf6031 100644
--- a/nodes/pvprotocolenginenode/include/pvmf_protocol_engine_node_extension.h
+++ b/nodes/pvprotocolenginenode/include/pvmf_protocol_engine_node_extension.h
@@ -41,6 +41,12 @@
 #ifndef OSCL_STRING_CONSTAINERS_H_INCLUDED
 #include "oscl_string_containers.h"
 #endif
+#ifndef PVMF_EVENT_HANDLING_H_INCLUDED
+#include "pvmf_event_handling.h"
+#endif
+#ifndef PVMF_PORT_INTERFACE_H_INCLUDED
+#include "pvmf_port_interface.h"
+#endif
 
 // default number of redirect trials
 #define PVPROTOCOLENGINE_DEFAULT_NUMBER_OF_REDIRECT_TRIALS 10
diff --git a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_common.cpp b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_common.cpp
index c4953f2..0a06270 100644
--- a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_common.cpp
+++ b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_common.cpp
@@ -19,11 +19,6 @@
 #include "pvmf_media_msg_format_ids.h" // for PVMF_MEDIA_CMD_EOS_FORMAT_ID
 #include "oscl_utf8conv.h" // for oscl_UnicodeToUTF8
 
-#define LOGINFODATAPATH(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG,iLogger,PVLOGMSG_INFO,m);
-#define PVMF_PROTOCOL_ENGINE_LOGINFODATAPATH(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG,iDataPathLogger,PVLOGMSG_INFO,m);
-#define PVMF_PROTOCOL_ENGINE_LOGERRINFODATAPATH(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG,iDataPathErrLogger,PVLOGMSG_INFO,m);
-
-
 ////////////////////////////////////////////////////////////////////////////////////
 //////	pvHttpDownloadInput implementation
 ////////////////////////////////////////////////////////////////////////////////////
diff --git a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_common.h b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_common.h
index 4dbab32..1fcfdb5 100644
--- a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_common.h
+++ b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_common.h
@@ -263,6 +263,14 @@
         {
             ;
         }
+        virtual uint32 getMediaDataLength()
+        {
+            return 0;
+        }
+        virtual uint32 getContenBitrate()
+        {
+            return 0;
+        }
 
         // user commands
         virtual void seek(const uint32 aSeekPosition)
@@ -301,7 +309,7 @@
                 iObserver(NULL),
                 iNeedGetResponsePreCheck(true)
         {
-            iLogger = PVLogger::GetLoggerObject("datapath.sourcenode.protocolenginenode");
+            iDataPathLogger = PVLogger::GetLoggerObject("datapath.sourcenode.protocolenginenode");
         }
 
         virtual ~ProtocolState()
@@ -309,7 +317,7 @@
             iComposer = NULL;
             iParser   = NULL;
             iObserver = NULL;
-            iLogger   = NULL;
+            iDataPathLogger = NULL;
         };
 
         virtual void reset()
@@ -401,7 +409,7 @@
         TimeValue iStartTime;
         bool iNeedGetResponsePreCheck;
         ProtocolEngineOutputDataSideInfo iDataSideInfo;
-        PVLogger *iLogger;
+        PVLogger *iDataPathLogger;
 };
 
 // This observer class is designed to notify protocol user (specifically, node) when one protocol state is completely finished, i.e.
@@ -597,11 +605,18 @@
         {
             return iCurrState->isCurrentStateOptional();    // optional state can be by-passed regardless of any error happened
         }
-
         void resetTotalHttpStreamingSize()
         {
             if (iParser) iParser->resetTotalHttpStreamingSize();
         }
+        uint32 getMediaDataLength()
+        {
+            return iCurrState->getMediaDataLength();    // only used in Shoutcast streaming
+        }
+        uint32 getContenBitrate()
+        {
+            return iCurrState->getContenBitrate();    // only used in Shoutcast streaming
+        }
 
         virtual void reset()
         {
diff --git a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_download_common.cpp b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_download_common.cpp
index 8e88123..3c4621e 100644
--- a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_download_common.cpp
+++ b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_download_common.cpp
@@ -17,10 +17,6 @@
  */
 #include "pvmf_protocol_engine_download_common.h"
 
-#define LOGINFODATAPATH(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG,iLogger,PVLOGMSG_INFO,m);
-#define PVMF_PROTOCOL_ENGINE_LOGINFODATAPATH(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG,iDataPathLogger,PVLOGMSG_INFO,m);
-#define PVMF_PROTOCOL_ENGINE_LOGERRINFODATAPATH(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG,iDataPathErrLogger,PVLOGMSG_INFO,m);
-
 ////////////////////////////////////////////////////////////////////////////////////
 //////	DownloadState related implementation
 ////////////////////////////////////////////////////////////////////////////////////
diff --git a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_download_common.h b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_download_common.h
index 97fb602..f3f5da9 100644
--- a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_download_common.h
+++ b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_download_common.h
@@ -22,6 +22,10 @@
 #include "pvmf_protocol_engine_common.h"
 #endif
 
+#ifndef PVDL_CONFIG_FILE_H_INCLUDED
+#include "pvdl_config_file.h"
+#endif
+
 class DownloadState : public ProtocolState
 {
     public:
diff --git a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_internal.h b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_internal.h
index 0290aef..c088823 100644
--- a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_internal.h
+++ b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_internal.h
@@ -15,50 +15,21 @@
  * and limitations under the License.
  * -------------------------------------------------------------------
  */
-#ifndef PVMF_PROTOCOLENGINE_PORT_H_INCLUDED
-#include "pvmf_protocol_engine_port.h"
-#endif
-
-#ifndef PVMF_MEMPOOL_H_INCLUDED
-#include "pvmf_mempool.h"
-#endif
-
-#ifndef OSCL_MEM_MEMPOOL_H_INCLUDED
-#include "oscl_mem_mempool.h"
-#endif
+#ifndef PVMF_PROTOCOL_ENGINE_INTERNAL_H_INCLUDED
+#define PVMF_PROTOCOL_ENGINE_INTERNAL_H_INCLUDED
 
 #ifndef PVMF_MEDIA_DATA_H_INCLUDED
 #include "pvmf_media_data.h"
 #endif
 
-#ifndef PVMF_SIMPLE_MEDIA_BUFFER_H_INCLUDED
-#include "pvmf_simple_media_buffer.h"
-#endif
-
-#ifndef PVMI_DATA_STREAM_INTERFACE_H_INCLUED
-#include "pvmi_data_stream_interface.h"
-#endif
-
 #ifndef OSCL_STR_PTR_LEN_H_INCLUDED
 #include "oscl_str_ptr_len.h"
 #endif
 
-#ifndef PVMF_MEDIA_CLOCK_H_INCLUDED
-#include "pvmf_media_clock.h"
-#endif
-
 #ifndef OSCL_TIME_H_INCLUDED
 #include "oscl_time.h"
 #endif
 
-#ifndef PVMF_FORMAT_PROGDOWNLOAD_SUPPORT_EXTENSION_H_INCLUDED
-#include "pvmf_format_progdownload_support_extension.h"
-#endif
-
-#ifndef PVDL_CONFIG_FILE_H_INCLUDED
-#include "pvdl_config_file.h"
-#endif
-
 #ifndef OSCL_STRING_CONSTAINERS_H_INCLUDED
 #include "oscl_string_utils.h"
 #endif
@@ -83,6 +54,26 @@
 #include "pvmf_protocol_engine_node_extension.h" // for class PVMFProtocolEngineNodeMSHTTPStreamingParams
 #endif
 
+#ifndef PVLOGGER_H_INCLUDED
+#include "pvlogger.h"
+#endif
+
+// log macros
+#define LOGERROR(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,iLogger,PVLOGMSG_ERR,m);
+#define LOGINFOHI(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG,iLogger,PVLOGMSG_INFO,m);
+#define LOGINFOMED(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_MLDBG,iLogger,PVLOGMSG_INFO,m);
+#define LOGINFOLOW(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG,iLogger,PVLOGMSG_INFO,m);
+#define LOGINFO(m) LOGINFOMED(m)
+#define LOGINFODATAPATH(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG,iDataPathLogger,PVLOGMSG_INFO,m);
+#define LOGERRORDATAPATH(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,iDataPathLogger,PVLOGMSG_ERR,m);
+#define LOGINFOCLOCK(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG,iClockLogger,PVLOGMSG_INFO,m);
+#define PVMF_PROTOCOL_ENGINE_LOGBIN(iPortLogger, m) PVLOGGER_LOGBIN(PVLOGMSG_INST_LLDBG, iPortLogger, PVLOGMSG_ERR, m);
+#define PVMF_PROTOCOL_ENGINE_LOGINFODATAPATH(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG,iDataPathLogger,PVLOGMSG_INFO,m);
+#define PVMF_PROTOCOL_ENGINE_LOGERRINFODATAPATH(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG,iDataPathErrLogger,PVLOGMSG_INFO,m);
+#define	NODEDATAPATHLOGGER_TAG "datapath.sourcenode.protocolenginenode"
+#define DATAPATHLOGGER_TAG "protocolenginenode.protocolengine"
+#define DATAPATHERRLOGGER_TAG "datapath.sourcenode.protocolenginenode"
+
 
 enum pvHttpProcessingMicroState
 {
@@ -844,3 +835,5 @@
         HttpParsingBasicObject *iParser;
 };
 
+#endif
+
diff --git a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node.h b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node.h
index dfc49d2..2cef4e5 100644
--- a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node.h
+++ b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node.h
@@ -365,7 +365,7 @@
         uint32 GetProtocolType(PVMFFormatType& aSourceFormat, OsclAny* aSourceData);
         bool CreateProtocolObjects(const uint32 aProtocolType);
         void DeleteProtocolObjects();
-        bool RecreateProtocolObjectsForProgressiveStreaming(OsclAny* aSourceData);
+        bool RecreateProtocolObjectsForProgressiveStreaming(const uint32 aProtocolType, OsclAny* aSourceData);
         ProtocolContainerFactory* CreateProtocolContainerFactory(const uint32 aProtocolType);
         bool SendPortMediaCommand(PVMFProtocolEnginePort *aPort, PVUid32 aCmdId, const bool isForLogging = false);
         void RerunForPostProcessAfterOutgoingMsgSent(PVMFProtocolEnginePort *aPort, PVMFSharedMediaMsgPtr &aMsg);
@@ -387,6 +387,7 @@
         friend class DownloadContainer;
         friend class ProgressiveDownloadContainer;
         friend class ProgressiveStreamingContainer;
+        friend class ShoutcastContainer;
         friend class FasttrackDownloadContainer;
         friend class MsHttpStreamingContainer;
         friend class EventReporter;
diff --git a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_common.cpp b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_common.cpp
index ebe43c6..949cbcb 100644
--- a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_common.cpp
+++ b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_common.cpp
@@ -2169,9 +2169,10 @@
     return true;
 }
 
-bool PVMFProtocolEngineNode::RecreateProtocolObjectsForProgressiveStreaming(OsclAny* aSourceData)
+bool PVMFProtocolEngineNode::RecreateProtocolObjectsForProgressiveStreaming(const uint32 aProtocolType, OsclAny* aSourceData)
 {
-    if (!iProtocolContainer->isStreamingPlayback()) return true;
+    if (!iProtocolContainer->isStreamingPlayback() ||
+            aProtocolType != (uint32)PVHTTPPROTOCOL_PROGRESSIVE_DOWNLOAD) return true;
 
     // in case of progressive streaming
     DeleteProtocolObjects();
@@ -2208,6 +2209,12 @@
             break;
 #endif
 
+#if defined(PV_PROTOCOL_ENGINE_NODE_SHOUTCAST_ENABLED)
+        case PVHTTPPROTOCOL_SHOUTCAST:
+            aFactory = OSCL_NEW(ShoutcastContainerFactory, ());
+            break;
+#endif
+
 
 #if defined(PV_PROTOCOL_ENGINE_NODE_WMHTTPSTREAMING_ENABLED)
         case PVHTTPPROTOCOL_MS_HTTP_STREAMING:
@@ -2270,26 +2277,31 @@
         OsclAny* aSourceData)
 {
     if ((aSourceFormat != PVMF_MIME_DATA_SOURCE_HTTP_URL) &&
-            (aSourceFormat != PVMF_MIME_DATA_SOURCE_PVX_FILE)) return PVMFErrNotSupported;
+            (aSourceFormat != PVMF_MIME_DATA_SOURCE_PVX_FILE) &&
+            (aSourceFormat != PVMF_MIME_DATA_SOURCE_SHOUTCAST_URL))
+        return PVMFErrNotSupported;
 
     // create protocol objects
-    if (!CreateProtocolObjects(GetProtocolType(aSourceFormat, aSourceData))) return PVMFErrNoMemory;
+    uint32 aProtocolType = GetProtocolType(aSourceFormat, aSourceData);
+    if (!CreateProtocolObjects(aProtocolType)) return PVMFErrNoMemory;
 
     // check and add source data
     if (!iProtocolContainer->addSourceData(aSourceData)) return PVMFFailure;
 
     // need to recreate protocol objects for progressive streaming based on source data
-    if (!RecreateProtocolObjectsForProgressiveStreaming(aSourceData)) return PVMFErrNoMemory;
+    if (!RecreateProtocolObjectsForProgressiveStreaming(aProtocolType, aSourceData)) return PVMFErrNoMemory;
 
-    // set download format
-    if (iInterfacingObjectContainer) iInterfacingObjectContainer->setDownloadFormat(aSourceFormat);
+    if (iInterfacingObjectContainer)
+    {
+        // set download format
+        iInterfacingObjectContainer->setDownloadFormat(aSourceFormat);
 
-    // set URI
-    if (!iInterfacingObjectContainer->getURIObject().setURI(aSourceURL)) return PVMFFailure;
+        // set URI
+        if (!iInterfacingObjectContainer->getURIObject().setURI(aSourceURL)) return PVMFFailure;
 
-
-    // create and set iCfgFile
-    if (!iProtocolContainer->createCfgFile(iInterfacingObjectContainer->getURIObject().getURI())) return PVMFFailure;
+        // create and set iCfgFile
+        if (!iProtocolContainer->createCfgFile(iInterfacingObjectContainer->getURIObject().getURI())) return PVMFFailure;
+    }
     return PVMFSuccess;
 }
 
@@ -2318,6 +2330,10 @@
     {
         return PVHTTPPROTOCOL_PROGRESSIVE_DOWNLOAD;
     }
+    else if (aSourceFormat == PVMF_MIME_DATA_SOURCE_SHOUTCAST_URL)
+    {
+        return PVHTTPPROTOCOL_SHOUTCAST;
+    }
 
     return 0;
 }
@@ -4058,6 +4074,7 @@
     alloc.deallocate(buf);
     return true;
 }
+
 void InterfacingObjectContainer::setNumBuffersInMediaDataPoolSMCalc(uint32 aVal)
 {
     iNumBuffersInMediaDataPoolSMCalc = aVal;
diff --git a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_common.h b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_common.h
index 936b161..347e1cb 100644
--- a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_common.h
+++ b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_common.h
@@ -228,6 +228,7 @@
 {
     PVHTTPPROTOCOL_PROGRESSIVE_DOWNLOAD = 0,
     PVHTTPPROTOCOL_PROGRESSIVE_STREAMING,
+    PVHTTPPROTOCOL_SHOUTCAST,
     PVHTTPPROTOCOL_FASTTRACK_DOWNLOAD,
     PVHTTPPROTOCOL_MS_HTTP_STREAMING
 };
@@ -257,6 +258,14 @@
 };
 #endif
 
+#if defined(PV_PROTOCOL_ENGINE_NODE_SHOUTCAST_ENABLED)
+class ShoutcastContainerFactory : public ProtocolContainerFactory
+{
+    public:
+        ProtocolContainer* create(PVMFProtocolEngineNode *aNode = NULL);
+};
+#endif
+
 
 #if defined(PV_PROTOCOL_ENGINE_NODE_WMHTTPSTREAMING_ENABLED)
 class MsHttpStreamingContainerFactory : public ProtocolContainerFactory
diff --git a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_download_common.cpp b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_download_common.cpp
index f30b1de..20e6869 100644
--- a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_download_common.cpp
+++ b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_download_common.cpp
@@ -557,6 +557,7 @@
             // in high bandwidth conditions, iProgDownloadSI gets set AFTER download is complete, then
             // need to check resume notification again if something is pending
             if (iDownloadComplete) checkResumeNotification(iDownloadComplete);
+            else checkSendingNotification();
             break;
 
         case DownloadControlSupportObjectType_ProgressInterface:
@@ -607,7 +608,8 @@
     //	(uint32)iPlaybackUnderflow, (uint32)iRequestResumeNotification, (uint32)aDownloadComplete));
 
     // short-cut: download complete
-    if (!checkDownloadCompleteForResumeNotification(aDownloadComplete))
+    // check sending file size, protocol info or download complete notification
+    if (!checkSendingNotification(aDownloadComplete))
     {
         LOGINFODATAPATH((0, "pvDownloadControl::checkResumeNotification()->checkDownloadCompleteForResumeNotification() return false, iProgDownloadSI=0x%x", iProgDownloadSI));
         return 0;
@@ -635,15 +637,13 @@
     return 0;
 }
 
-bool pvDownloadControl::checkDownloadCompleteForResumeNotification(const bool aDownloadComplete)
+bool pvDownloadControl::checkSendingNotification(const bool aDownloadComplete)
 {
     if (aDownloadComplete)
     {
         LOGINFODATAPATH((0, "pvDownloadControl::checkDownloadCompleteForResumeNotification()  Download is complete, final download rate = %dbps", (iProtocol->getDownloadRate() << 3)));
     }
-
     iDownloadComplete = aDownloadComplete;
-
     // update iFileSize to minimize dependency on protocol object and improve the efficiency
     updateFileSize();
 
@@ -652,6 +652,9 @@
     // set file size to parser node
     setFileSize(iFileSize);
 
+    // set protocol info to parser node if needed
+    setProtocolInfo();
+
     // send download complete notification to parser node
     if (aDownloadComplete) sendDownloadCompleteNotification();
 
diff --git a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_download_common.h b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_download_common.h
index ec6019e..8714dcf 100644
--- a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_download_common.h
+++ b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_download_common.h
@@ -23,6 +23,11 @@
 #include "pvmf_protocol_engine_node_common.h"
 #endif
 
+#ifndef PVMF_FORMAT_PROGDOWNLOAD_SUPPORT_EXTENSION_H_INCLUDED
+#include "pvmf_format_progdownload_support_extension.h"
+#endif
+
+
 ////////////////////////////////////////////////////////////////////////////////////
 //////	DownloadContainer
 ////////////////////////////////////////////////////////////////////////////////////
@@ -273,7 +278,7 @@
 
     protected:
         // called by checkResumeNotification()
-        bool checkDownloadCompleteForResumeNotification(const bool aDownloadComplete);
+        bool checkSendingNotification(const bool aDownloadComplete = false);
 
         // called by isResumePlayback()
         // with contraint: file size and clip duration are both available
@@ -295,6 +300,11 @@
         void setFileSize(const uint32 aFileSize);
         bool getPlaybackTimeFromEngineClock(uint32 &aPlaybackTime);
 
+        virtual void setProtocolInfo()
+        {
+            ;
+        }
+
     private:
         void updateFileSize();
         void clearBody();
diff --git a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_progressive_download.cpp b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_progressive_download.cpp
index 018e49d..132e5bf 100644
--- a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_progressive_download.cpp
+++ b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_progressive_download.cpp
@@ -20,23 +20,6 @@
 #include "pvmf_protocolengine_node_tunables.h"
 #include "pvmf_protocol_engine_progressive_download.h"
 
-#include "pvlogger.h"
-
-
-/**
-//Macros for calling PVLogger
-*/
-#define LOGERROR(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,iLogger,PVLOGMSG_ERR,m);
-#define LOGINFOHI(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG,iLogger,PVLOGMSG_INFO,m);
-#define LOGINFOMED(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_MLDBG,iLogger,PVLOGMSG_INFO,m);
-#define LOGINFOLOW(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG,iLogger,PVLOGMSG_INFO,m);
-#define LOGINFO(m) LOGINFOMED(m)
-#define LOGINFODATAPATH(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG,iDataPathLogger,PVLOGMSG_INFO,m);
-#define LOGERRORDATAPATH(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,iDataPathLogger,PVLOGMSG_ERR,m);
-#define LOGINFOCLOCK(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG,iClockLogger,PVLOGMSG_INFO,m);
-#define PVMF_PROTOCOL_ENGINE_LOGBIN(iPortLogger, m) PVLOGGER_LOGBIN(PVLOGMSG_INST_LLDBG, iPortLogger, PVLOGMSG_ERR, m);
-#define	NODEDATAPATHLOGGER_TAG "datapath.sourcenode.protocolenginenode"
-
 #define GET_10_PERCENT(x) ( ((x)>>3)-((x)>>6) ) // 1/8 - 1/64 = 0.109
 
 ////////////////////////////////////////////////////////////////////////////////////
diff --git a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_progressive_download.h b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_progressive_download.h
index f9f47e5..0e160a4 100644
--- a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_progressive_download.h
+++ b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_progressive_download.h
@@ -23,6 +23,9 @@
 #include "pvmf_protocol_engine_node_download_common.h"
 #endif
 
+#define DEFAULT_STATE_NUMBER_FOR_DOWNLOAD_GET_REQUEST 1 // for progressive streaming or shoutcast
+
+
 ////////////////////////////////////////////////////////////////////////////////////
 //////	ProgressiveDownloadContainer
 ////////////////////////////////////////////////////////////////////////////////////
diff --git a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_progressive_streaming.cpp b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_progressive_streaming.cpp
index 3180345..1268632 100644
--- a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_progressive_streaming.cpp
+++ b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_progressive_streaming.cpp
@@ -20,22 +20,6 @@
 #include "pvmf_protocol_engine_progressive_download.h"
 #include "pvmf_protocolengine_node_tunables.h"
 
-#include "pvlogger.h"
-
-/**
-//Macros for calling PVLogger
-*/
-#define LOGERROR(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,iLogger,PVLOGMSG_ERR,m);
-#define LOGINFOHI(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG,iLogger,PVLOGMSG_INFO,m);
-#define LOGINFOMED(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_MLDBG,iLogger,PVLOGMSG_INFO,m);
-#define LOGINFOLOW(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG,iLogger,PVLOGMSG_INFO,m);
-#define LOGINFO(m) LOGINFOMED(m)
-#define LOGINFODATAPATH(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG,iDataPathLogger,PVLOGMSG_INFO,m);
-#define LOGERRORDATAPATH(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,iDataPathLogger,PVLOGMSG_ERR,m);
-#define LOGINFOCLOCK(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG,iClockLogger,PVLOGMSG_INFO,m);
-#define PVMF_PROTOCOL_ENGINE_LOGBIN(iPortLogger, m) PVLOGGER_LOGBIN(PVLOGMSG_INST_LLDBG, iPortLogger, PVLOGMSG_ERR, m);
-#define	NODEDATAPATHLOGGER_TAG "datapath.sourcenode.protocolenginenode"
-
 #define IS_OVERFLOW_FOR_100x(x) ( (x)>>((sizeof((x))<<2)-PVPROTOCOLENGINE_DOWNLOAD_BYTE_PERCENTAGE_DLSIZE_RIGHTSHIFT_FACTOR) ) // (x)>>(32-7)=(x)>>25
 
 ////////////////////////////////////////////////////////////////////////////////////
diff --git a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_progressive_streaming.h b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_progressive_streaming.h
index 4e99c7e..cfbda7d 100644
--- a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_progressive_streaming.h
+++ b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_node_progressive_streaming.h
@@ -19,7 +19,7 @@
 #ifndef PVMF_PROTOCOLENGINE_NODE_PROGRESSIVE_STREAMING_H_INCLUDED
 #define PVMF_PROTOCOLENGINE_NODE_PROGRESSIVE_STREAMING_H_INCLUDED
 
-#ifndef PVMF_PROTOCOLENGINE_NODE_DOWNLOAD_COMMON_H_INCLUDED
+#ifndef PVMF_PROTOCOLENGINE_NODE_PROGRESSIVE_DOWNLOAD_H_INCLUDED
 #include "pvmf_protocol_engine_node_progressive_download.h"
 #endif
 
@@ -30,7 +30,7 @@
 class ProgressiveStreamingContainer : public ProgressiveDownloadContainer
 {
     public:
-        bool createProtocolObjects();
+        virtual bool createProtocolObjects();
         PVMFStatus doStop();
         PVMFStatus doSeek(PVMFProtocolEngineNodeCommand& aCmd);
         bool completeRepositionRequest();
@@ -43,14 +43,14 @@
         // constructor
         ProgressiveStreamingContainer(PVMFProtocolEngineNode *aNode = NULL);
 
-    private:
+    protected:
         // called by DoSeek()
         uint32 getSeekOffset(PVMFProtocolEngineNodeCommand& aCmd);
         PVMFStatus doSeekBody(uint32 aNewOffset);
         void updateDownloadControl(const bool isDownloadComplete = false);
         bool needToCheckResumeNotificationMaually();
 
-    private:
+    protected:
         bool iEnableInfoUpdate;
 };
 
diff --git a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_progressive_download.cpp b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_progressive_download.cpp
index 7b80b5a..b35eec7 100644
--- a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_progressive_download.cpp
+++ b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_progressive_download.cpp
@@ -17,11 +17,6 @@
  */
 #include "pvmf_protocol_engine_progressive_download.h"
 
-#define LOGINFODATAPATH(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG,iLogger,PVLOGMSG_INFO,m);
-#define PVMF_PROTOCOL_ENGINE_LOGINFODATAPATH(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG,iDataPathLogger,PVLOGMSG_INFO,m);
-#define PVMF_PROTOCOL_ENGINE_LOGERRINFODATAPATH(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG,iDataPathErrLogger,PVLOGMSG_INFO,m);
-
-
 //////	ProgressiveDownloadState_HEAD implementation ////////////////////////////
 void ProgressiveDownloadState_HEAD::setRequestBasics()
 {
diff --git a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_progressive_download.h b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_progressive_download.h
index 056660a..f8f1c7e 100644
--- a/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_progressive_download.h
+++ b/nodes/pvprotocolenginenode/src/pvmf_protocol_engine_progressive_download.h
@@ -22,6 +22,8 @@
 #include "pvmf_protocol_engine_download_common.h"
 #endif
 
+#define DEFAULT_STATE_NUMBER_FOR_DOWNLOAD_GET_REQUEST 1 // for progressive streaming or shoutcast
+
 
 class ProgressiveDownloadState_HEAD : public DownloadState
 {
@@ -48,7 +50,7 @@
 class ProgressiveDownloadState_GET : public DownloadState
 {
     public:
-        ProgressiveDownloadState_GET() : iSendEndOfMessageTruncate(false)
+        ProgressiveDownloadState_GET() : iSendEndOfMessageTruncate(false), iRangeHeaderSupported(true)
         {
             ;
         }
@@ -73,7 +75,8 @@
 
     protected:
         int32 processMicroStateGetResponsePreCheck();
-        bool setHeaderFields();
+        virtual bool setHeaderFields();
+        bool setRangeHeaderFields();
         // From HttpParsingBasicObjectObserver
         int32 OutputDataAvailable(OUTPUT_DATA_QUEUE *aOutputQueue, const bool isHttpHeader);
         void updateOutputDataQueue(OUTPUT_DATA_QUEUE *aOutputQueue);
@@ -95,20 +98,23 @@
         int32 checkContentInfoMatchingForResumeDownload();
         virtual int32 checkParsingStatus(int32 parsingStatus);
         int32 updateDownloadStatistics();
+
+    protected:
         bool iSendEndOfMessageTruncate;
+        bool iRangeHeaderSupported;
 };
 
 // Progressive Streaming is a special form of progressive download
 class ProgressiveStreamingState_GET : public ProgressiveDownloadState_GET
 {
     public:
-        void seek(const uint32 aSeekPosition)
+        virtual void seek(const uint32 aSeekPosition)
         {
             iCfgFile->SetCurrentFileSize(aSeekPosition);
             iNeedGetResponsePreCheck = true; // reset the parser
         }
 
-    private:
+    protected:
         int32 checkParsingStatus(int32 parsingStatus);
         void saveConfig()
         {
@@ -205,12 +211,12 @@
         ProgressiveStreaming(): ProgressiveDownload()
         {
 
-            OSCL_DELETE(iState[1]);
-            iState[1] = OSCL_NEW(ProgressiveStreamingState_GET, ());
+            OSCL_DELETE(iState[DEFAULT_STATE_NUMBER_FOR_DOWNLOAD_GET_REQUEST]);
+            iState[DEFAULT_STATE_NUMBER_FOR_DOWNLOAD_GET_REQUEST] = OSCL_NEW(ProgressiveStreamingState_GET, ());
             if (iParser) iParser->setNumRetry(MAX_NUM_EOS_MESSAGES_FOR_SAME_REQUEST + 1); // +1 for testing purpose (i.e., insert an EOS)
         }
 
-        void seek(const uint32 aSeekPosition)
+        virtual void seek(const uint32 aSeekPosition)
         {
             HttpBasedProtocol::seek(aSeekPosition);
 
diff --git a/nodes/pvsocketnode/include/pvmf_socket_port.h b/nodes/pvsocketnode/include/pvmf_socket_port.h
index 6328033..fd36c8a 100644
--- a/nodes/pvsocketnode/include/pvmf_socket_port.h
+++ b/nodes/pvsocketnode/include/pvmf_socket_port.h
@@ -41,9 +41,6 @@
 #ifndef PVMI_CONFIG_AND_CAPABILITY_UTILS_H_INCLUDED
 #include "pvmi_config_and_capability_utils.h"
 #endif
-#ifndef PVMF_STREAMING_BUFFER_ALLOCATORS_H_INCLUDED
-#include "pvmf_streaming_buffer_allocators.h"
-#endif
 #ifndef PVMI_PORT_CONFIG_KVP_H_INCLUDED
 #include "pvmi_port_config_kvp.h"
 #endif
diff --git a/nodes/streaming/jitterbuffernode/Android.mk b/nodes/streaming/jitterbuffernode/Android.mk
index cb3191e..da2be55 100644
--- a/nodes/streaming/jitterbuffernode/Android.mk
+++ b/nodes/streaming/jitterbuffernode/Android.mk
@@ -4,10 +4,7 @@
 LOCAL_SRC_FILES := \
 	src/pvmf_jitter_buffer_extension_interface.cpp \
  	src/pvmf_jitter_buffer_port.cpp \
- 	src/pvmf_jitter_buffer_impl.cpp \
- 	src/pvmf_rtcp_timer.cpp \
- 	src/pvmf_jitter_buffer_node.cpp \
- 	src/pvmf_jb_inactivity_timer.cpp
+ 	src/pvmf_jitter_buffer_node.cpp
 
 
 LOCAL_MODULE := libpvjitterbuffernode
@@ -27,7 +24,8 @@
  	$(PV_TOP)/nodes/streaming/streamingmanager/plugins/mshttp/config \
  	$(PV_TOP)/nodes/streaming/streamingmanager/include \
  	$(PV_TOP)/protocols/rtp/src \
- 	$(PV_TOP)/nodes/streaming/streamingmanager/config/3gpp \
+ 	$(PV_TOP)/nodes/streaming/common/include \
+ 	$(PV_TOP)/nodes/streaming/jitterbuffernode/jitterbuffer/common/include \
  	$(PV_INCLUDES)
 
 LOCAL_COPY_HEADERS_TO := $(PV_COPY_HEADERS_TO)
@@ -36,9 +34,6 @@
 	include/pvmf_jitter_buffer_ext_interface.h \
  	include/pvmf_jitter_buffer_internal.h \
  	include/pvmf_jitter_buffer_port.h \
- 	include/pvmf_jitter_buffer.h \
- 	include/pvmf_jitter_buffer_node.h \
- 	include/pvmf_rtcp_timer.h \
- 	include/pvmf_jb_inactivity_timer.h
+ 	include/pvmf_jitter_buffer_node.h
 
 include $(BUILD_STATIC_LIBRARY)
diff --git a/nodes/streaming/jitterbuffernode/build/make/jb_rtsp.mk b/nodes/streaming/jitterbuffernode/build/make/jb_rtsp.mk
deleted file mode 100644
index 5e10b6a..0000000
--- a/nodes/streaming/jitterbuffernode/build/make/jb_rtsp.mk
+++ /dev/null
@@ -1,3 +0,0 @@
-
-XINCDIRS += -I ../../../streamingmanager/config/3gpp
-
diff --git a/nodes/streaming/jitterbuffernode/build/make/local.mk b/nodes/streaming/jitterbuffernode/build/make/local.mk
index 78506aa..f94058b 100644
--- a/nodes/streaming/jitterbuffernode/build/make/local.mk
+++ b/nodes/streaming/jitterbuffernode/build/make/local.mk
@@ -6,31 +6,22 @@
 
 TARGET := pvjitterbuffernode
 
-
-
-
 XINCDIRS += ../../../common/include ../../../streamingmanager/plugins/mshttp/config ../../../streamingmanager/include ../../../../../protocols/rtp/src
-
-
+XINCDIRS += -I ../../../common/include
+XINCDIRS += -I ../../jitterbuffer/common/include
 
 SRCDIR := ../../src
 INCSRCDIR := ../../include
 
-SRCS := pvmf_jitter_buffer_extension_interface.cpp \
+# compose final src list for actual build
+SRCS = pvmf_jitter_buffer_extension_interface.cpp \
 	pvmf_jitter_buffer_port.cpp \
-	pvmf_jitter_buffer_impl.cpp \
-	pvmf_rtcp_timer.cpp \
-	pvmf_jitter_buffer_node.cpp \
-	pvmf_jb_inactivity_timer.cpp
+	pvmf_jitter_buffer_node.cpp 
 
-HDRS := pvmf_jitter_buffer_ext_interface.h \
+HDRS = pvmf_jitter_buffer_ext_interface.h \
 	pvmf_jitter_buffer_internal.h \
 	pvmf_jitter_buffer_port.h \
-	pvmf_jitter_buffer.h \
-	pvmf_jitter_buffer_node.h \
-	pvmf_rtcp_timer.h \
-	pvmf_jb_inactivity_timer.h
-
+	pvmf_jitter_buffer_node.h 
 
 include $(MK)/library.mk
 
diff --git a/nodes/streaming/jitterbuffernode/include/pvmf_jitter_buffer.h b/nodes/streaming/jitterbuffernode/include/pvmf_jitter_buffer.h
deleted file mode 100644
index 75e792a..0000000
--- a/nodes/streaming/jitterbuffernode/include/pvmf_jitter_buffer.h
+++ /dev/null
@@ -1,1412 +0,0 @@
-/* ------------------------------------------------------------------
- * Copyright (C) 1998-2009 PacketVideo
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
- * express or implied.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- * -------------------------------------------------------------------
- */
-#ifndef PVMF_JITTER_BUFFER_H_INCLUDED
-#define PVMF_JITTER_BUFFER_H_INCLUDED
-
-#ifndef OSCL_BASE_H_INCLUDED
-#include "oscl_base.h"
-#endif
-#ifndef OSCL_VECTOR_H_INCLUDED
-#include "oscl_vector.h"
-#endif
-#ifndef OSCL_STRING_CONTAINERS_H_INCLUDED
-#include "oscl_string_containers.h"
-#endif
-#ifndef OSCL_MEM_MEMPOOL_H_INCLUDED
-#include "oscl_mem_mempool.h"
-#endif
-#ifndef PVLOGGER_H_INCLUDED
-#include "pvlogger.h"
-#endif
-#ifndef PVMF_TIMESTAMP_H_INCLUDED
-#include "pvmf_timestamp.h"
-#endif
-#ifndef PVMF_MEDIA_DATA_H_INCLUDED
-#include "pvmf_media_data.h"
-#endif
-#ifndef PVMF_MEDIA_FRAG_GROUP_H_INCLUDED
-#include "pvmf_media_frag_group.h"
-#endif
-#ifndef PVMF_JITTER_BUFFER_EXT_INTERFACE_H_INCLUDED
-#include "pvmf_jitter_buffer_ext_interface.h"
-#endif
-#ifndef PVMF_JITTER_BUFFER_INTERNAL_H_INCLUDED
-#include "pvmf_jitter_buffer_internal.h"
-#endif
-#ifndef PVMF_SM_TUNABLES_H_INCLUDED
-#include "pvmf_sm_tunables.h"
-#endif
-#ifndef __MEDIA_CLOCK_CONVERTER_H
-#include "media_clock_converter.h"
-#endif
-#ifndef PVMF_MEDIA_MSG_FORMAT_IDS_H_INCLUDED
-#include "pvmf_media_msg_format_ids.h"
-#endif
-#ifndef PVMF_SM_CONFIG_H_INCLUDED
-#include "pvmf_sm_config.h"
-#endif
-
-#define PVMF_JITTER_BUFFER_ROLL_OVER_THRESHOLD_16BIT 2000
-#define PVMF_JITTER_BUFFER_ROLL_OVER_THRESHOLD_32BIT 20000
-
-/* RTP HEADER CONSTANTS */
-#define SUPPORTED_RTP_HEADER_VERSION 2
-#define RTP_FIXED_HEADER_SIZE        12
-#define RTP_HEADER_V_BIT_MASK   0xC0
-#define RTP_HEADER_V_BIT_OFFSET 6
-#define RTP_HEADER_P_BIT_MASK   0x20
-#define RTP_HEADER_P_BIT_OFFSET 5
-#define RTP_HEADER_X_BIT_MASK   0x10
-#define RTP_HEADER_X_BIT_OFFSET 4
-#define RTP_HEADER_CC_BIT_MASK  0x0F
-#define RTP_HEADER_M_BIT_MASK   0x80
-#define RTP_HEADER_M_BIT_OFFSET 7
-#define RTP_HEADER_PT_MASK      0x7F
-
-
-#define PVMF_JITTER_BUFFER_BUFFERING_STATUS_TIMER_ID 1
-
-enum PVMFJitterBufferDataState
-{
-    PVMF_JITTER_BUFFER_STATE_UNKNOWN,
-    PVMF_JITTER_BUFFER_READY,
-    PVMF_JITTER_BUFFER_IN_TRANSITION
-};
-
-enum PVMFJitterBufferTransportHeaderFormat
-{
-    PVMF_JITTER_BUFFER_TRANSPORT_HEADER_FORMAT_UNKNOWN,
-    PVMF_JITTER_BUFFER_TRANSPORT_HEADER_RTP,
-    PVMF_JITTER_BUFFER_TRANSPORT_HEADER_ASF
-};
-
-typedef enum
-{
-    PVMF_JITTER_BUFFER_ADD_ELEM_ERROR,
-    PVMF_JITTER_BUFFER_ADD_ELEM_ERR_LATE_PACKET,
-    PVMF_JITTER_BUFFER_ADD_ELEM_PACKET_OVERWRITE,
-    PVMF_JITTER_BUFFER_ADD_ELEM_SUCCESS,
-    PVMF_JITTER_BUFFER_ADD_ELEM_UNEXPECTED_DATA
-} PVMFJitterBufferAddElemStatus;
-
-typedef struct tagPVMFJitterBufferStats
-{
-    uint32 ssrc;
-    uint32 totalNumPacketsReceived;
-    uint32 totalNumPacketsRegistered;
-    uint32 totalNumPacketsRetrieved;
-    uint32 maxSeqNumReceived;
-    uint32 maxSeqNumRegistered;
-    uint32 totalPacketsLost;
-    uint32 seqNumBase;
-    uint32 currentOccupancy;
-    PVMFTimestamp maxTimeStampRegistered;
-    PVMFTimestamp maxTimeStampRetrieved;
-    PVMFTimestamp maxTimeStampRetrievedWithoutRTPOffset;
-    uint32 maxOccupancy;
-    uint32 lastRegisteredSeqNum;
-    uint32  lastRetrievedSeqNum;
-    uint32 totalNumBytesRecvd;
-    uint32 packetSizeInBytesLeftInBuffer;
-} PVMFJitterBufferStats;
-
-typedef struct tagPVMFRTPInfoParams
-{
-    tagPVMFRTPInfoParams()
-    {
-        seqNumBaseSet = false;
-        seqNum = 0;
-        rtpTimeBaseSet = false;
-        rtpTime = 0;
-        nptTimeBaseSet = false;
-        nptTimeInMS = 0;
-        rtpTimeScale = 0;
-        nptTimeInRTPTimeScale = 0;
-        isPlayAfterPause = false;
-    };
-
-    bool   seqNumBaseSet;
-    uint32 seqNum;
-    bool   rtpTimeBaseSet;
-    uint32 rtpTime;
-    uint32 nptTimeInMS;
-    bool   nptTimeBaseSet;
-    uint32 rtpTimeScale;
-    uint32 nptTimeInRTPTimeScale;
-    bool   isPlayAfterPause;
-} PVMFRTPInfoParams;
-
-class MediaCommandMsgHolder
-{
-    public:
-        MediaCommandMsgHolder()
-        {
-            iPreceedingMediaMsgSeqNumber = 0xFFFFFFFF;
-        };
-
-        MediaCommandMsgHolder(const MediaCommandMsgHolder& a)
-        {
-            iPreceedingMediaMsgSeqNumber = a.iPreceedingMediaMsgSeqNumber;
-            iCmdMsg = a.iCmdMsg ;
-        }
-
-        MediaCommandMsgHolder& operator=(const MediaCommandMsgHolder& a)
-        {
-            if (&a != this)
-            {
-                iPreceedingMediaMsgSeqNumber = a.iPreceedingMediaMsgSeqNumber;
-                iCmdMsg = a.iCmdMsg ;
-            }
-            return (*this);
-        }
-
-        uint32 iPreceedingMediaMsgSeqNumber;
-        PVMFSharedMediaMsgPtr iCmdMsg;
-};
-
-template<class Alloc>
-class PVMFDynamicCircularArray
-{
-    public:
-        PVMFDynamicCircularArray(const PvmfMimeString* aMimeType = NULL)
-        {
-            numElems = 0;
-            arraySize = 0;
-            maxSeqNumAdded = 0;
-            lastRetrievedSeqNum = 0;
-            lastRetrievedTS = 0;
-            readOffset = 0;
-            firstSeqNumAdded = 0;
-
-            sJitterBufferParams.ssrc = 0;
-            sJitterBufferParams.totalNumPacketsReceived = 0;
-            sJitterBufferParams.totalNumPacketsRegistered = 0;
-            sJitterBufferParams.totalNumPacketsRetrieved = 0;
-            sJitterBufferParams.maxSeqNumReceived = 0;
-            sJitterBufferParams.maxSeqNumRegistered = 0;
-            sJitterBufferParams.totalPacketsLost = 0;
-            sJitterBufferParams.seqNumBase = 0;
-            sJitterBufferParams.currentOccupancy = 0;
-            sJitterBufferParams.maxTimeStampRegistered = 0;
-            sJitterBufferParams.maxTimeStampRetrieved = 0;
-            sJitterBufferParams.maxTimeStampRetrievedWithoutRTPOffset = 0;
-            sJitterBufferParams.lastRegisteredSeqNum = 0;
-            sJitterBufferParams.lastRetrievedSeqNum = lastRetrievedSeqNum;
-            sJitterBufferParams.maxOccupancy = arraySize;
-            sJitterBufferParams.totalNumBytesRecvd = 0;
-            sJitterBufferParams.packetSizeInBytesLeftInBuffer = 0;
-
-            iLogger = PVLogger::GetLoggerObject("PVMFDynamicCircularArray");
-            iDataPathLoggerIn = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffer.in");
-            iDataPathLoggerOut = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffer.out");
-            if (aMimeType != NULL)
-            {
-                iMimeType = aMimeType->get_cstr();
-            }
-            iHeaderFormat = PVMF_JITTER_BUFFER_TRANSPORT_HEADER_FORMAT_UNKNOWN;
-            iBroadCastSession = false;
-        }
-
-        PVMFDynamicCircularArray(uint32 n,
-                                 const PvmfMimeString* aMimeType = NULL)
-        {
-            numElems = 0;
-            arraySize = n;
-            iMediaPtrVec.reserve(arraySize);
-            InitVector(arraySize);
-            maxSeqNumAdded = 0;
-            lastRetrievedSeqNum = 0;
-            lastRetrievedTS = 0;
-            readOffset = 0;
-            firstSeqNumAdded = 0;
-
-            sJitterBufferParams.ssrc = 0;
-            sJitterBufferParams.totalNumPacketsReceived = 0;
-            sJitterBufferParams.totalNumPacketsRegistered = 0;
-            sJitterBufferParams.totalNumPacketsRetrieved = 0;
-            sJitterBufferParams.maxSeqNumReceived = 0;
-            sJitterBufferParams.maxSeqNumRegistered = 0;
-            sJitterBufferParams.totalPacketsLost = 0;
-            sJitterBufferParams.seqNumBase = 0;
-            sJitterBufferParams.currentOccupancy = 0;
-            sJitterBufferParams.maxTimeStampRegistered = 0;
-            sJitterBufferParams.maxTimeStampRetrieved = 0;
-            sJitterBufferParams.maxTimeStampRetrievedWithoutRTPOffset = 0;
-            sJitterBufferParams.lastRegisteredSeqNum = 0;
-            sJitterBufferParams.lastRetrievedSeqNum = lastRetrievedSeqNum;
-            sJitterBufferParams.maxOccupancy = arraySize;
-            sJitterBufferParams.totalNumBytesRecvd = 0;
-            sJitterBufferParams.packetSizeInBytesLeftInBuffer = 0;
-
-            iLogger = PVLogger::GetLoggerObject("PVMFDynamicCircularArray");
-            iDataPathLoggerIn = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffer.in");
-            iDataPathLoggerOut = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffer.out");
-            if (aMimeType != NULL)
-            {
-                iMimeType = aMimeType->get_cstr();
-            }
-            iHeaderFormat = PVMF_JITTER_BUFFER_TRANSPORT_HEADER_FORMAT_UNKNOWN;
-            iBroadCastSession = false;
-        }
-
-        virtual ~PVMFDynamicCircularArray()
-        {
-            if (!iMediaPtrVec.empty())
-            {
-                typedef typename Oscl_Vector<PVMFSharedMediaDataPtr, Alloc>::iterator iterator_type;
-                iterator_type it;
-
-                for (it = iMediaPtrVec.begin(); it != iMediaPtrVec.end(); it++)
-                {
-                    if (it->GetRep() != NULL)
-                    {
-                        it->Unbind();
-                    }
-                }
-            }
-        }
-
-        void Clear()
-        {
-            typedef typename Oscl_Vector<PVMFSharedMediaDataPtr, Alloc>::iterator iterator_type;
-            iterator_type it;
-            for (it = iMediaPtrVec.begin(); it != iMediaPtrVec.end(); it++)
-            {
-                if (it->GetRep() != NULL)
-                {
-                    it->Unbind();
-                }
-            }
-            numElems = 0;
-            iMediaPtrVec.clear();
-
-            InitVector(arraySize);
-            maxSeqNumAdded = 0;
-            lastRetrievedSeqNum = 0;
-            lastRetrievedTS = 0;
-            readOffset = 0;
-            firstSeqNumAdded = 0;
-            sJitterBufferParams.currentOccupancy = 0;
-            sJitterBufferParams.packetSizeInBytesLeftInBuffer = 0;
-        }
-
-        void ResetJitterBufferStats()
-        {
-            sJitterBufferParams.ssrc = 0;
-            sJitterBufferParams.totalNumPacketsReceived = 0;
-            sJitterBufferParams.totalNumPacketsRegistered = 0;
-            sJitterBufferParams.totalNumPacketsRetrieved = 0;
-            sJitterBufferParams.maxSeqNumReceived = 0;
-            sJitterBufferParams.maxSeqNumRegistered = 0;
-            sJitterBufferParams.totalPacketsLost = 0;
-            sJitterBufferParams.seqNumBase = 0;
-            sJitterBufferParams.currentOccupancy = 0;
-            sJitterBufferParams.maxTimeStampRegistered = 0;
-            sJitterBufferParams.maxTimeStampRetrieved = 0;
-            sJitterBufferParams.maxTimeStampRetrievedWithoutRTPOffset = 0;
-            sJitterBufferParams.lastRetrievedSeqNum = lastRetrievedSeqNum;
-            sJitterBufferParams.maxOccupancy = arraySize;
-            sJitterBufferParams.totalNumBytesRecvd = 0;
-            sJitterBufferParams.lastRegisteredSeqNum = 0;
-            sJitterBufferParams.totalNumBytesRecvd = 0;
-            sJitterBufferParams.packetSizeInBytesLeftInBuffer = 0;
-        }
-
-        uint32 getNumElements()
-        {
-            return numElems;
-        }
-
-        uint32 getArraySize()
-        {
-            return arraySize;
-        }
-
-        void growCircularArray(uint32 newSize)
-        {
-            if (newSize > arraySize)
-            {
-                /*
-                 * This transfers the existing contents
-                 * as well
-                 */
-                iMediaPtrVec.reserve(newSize);
-                /* Initialize the new space */
-                InitVector((newSize - arraySize));
-                arraySize = newSize;
-            }
-        }
-
-        void setFirstSeqNumAdded(uint32 aFirstSeqNumAdded)
-        {
-            firstSeqNumAdded = aFirstSeqNumAdded;
-        }
-
-        PVMFJitterBufferAddElemStatus addElement(PVMFSharedMediaDataPtr& elem, uint32 aSeqNumBase)
-        {
-            PVMFJitterBufferAddElemStatus oRet = PVMF_JITTER_BUFFER_ADD_ELEM_SUCCESS;
-
-            sJitterBufferParams.totalNumPacketsReceived++;
-            sJitterBufferParams.ssrc = elem->getStreamID();
-            uint32 seqNum = elem->getSeqNum();
-            /* Get packet size */
-            uint32 size = 0;
-            uint32 numFragments = elem->getNumFragments();
-            for (uint32 i = 0; i < numFragments; i++)
-            {
-                OsclRefCounterMemFrag memFragIn;
-                elem->getMediaFragment(i, memFragIn);
-                size += memFragIn.getMemFrag().len;
-            }
-            sJitterBufferParams.totalNumBytesRecvd += size;
-            sJitterBufferParams.packetSizeInBytesLeftInBuffer += size;
-
-            /* If it is the first packet always register it */
-            if (seqNum != aSeqNumBase)
-            {
-                if (elem->getTimestamp() < lastRetrievedTS)
-                {
-                    if (seqNum > lastRetrievedSeqNum)
-                    {
-                        lastRetrievedSeqNum = seqNum;
-                        readOffset = (seqNum - aSeqNumBase) % arraySize;
-                    }
-                    return PVMF_JITTER_BUFFER_ADD_ELEM_ERROR;
-                }
-
-                /*
-                 * During ASF streaming this will happen if there is a backwards seek.
-                 */
-                if ((iHeaderFormat == PVMF_JITTER_BUFFER_TRANSPORT_HEADER_RTP) &&
-                        (iBroadCastSession == true))
-                {
-                    /*
-                     * This can happen when using prerecorded transport streams that loop
-                     * If this happens, just signal an unexpected data event
-                     */
-                    if (elem->getTimestamp() < sJitterBufferParams.maxTimeStampRegistered)
-                    {
-                        return PVMF_JITTER_BUFFER_ADD_ELEM_UNEXPECTED_DATA;
-                    }
-                }
-
-                if (seqNum <= lastRetrievedSeqNum)
-                {
-                    /*
-                     * check for seqnum roll over. For RTP packets, seqnum is 16 bits
-                     * therefore a typecast is needed before we check for rollover
-                     */
-                    if (iHeaderFormat == PVMF_JITTER_BUFFER_TRANSPORT_HEADER_RTP)
-                    {
-                        uint16 seqNum16 = (uint16)seqNum;
-                        uint16 lastRetrievedSeqNum16 = (uint16)(lastRetrievedSeqNum + 1);
-                        uint16 diff16 = (seqNum16 - lastRetrievedSeqNum16);
-                        if (diff16 > PVMF_JITTER_BUFFER_ROLL_OVER_THRESHOLD_16BIT)
-                        {
-                            /* too late - discard the packet */
-                            oRet = PVMF_JITTER_BUFFER_ADD_ELEM_ERR_LATE_PACKET;
-                            return (oRet);
-                        }
-                        else
-                        {
-                            /* Reset these variables to acct for seqnum rollover */
-                            sJitterBufferParams.maxSeqNumRegistered = seqNum;
-                            sJitterBufferParams.maxSeqNumReceived = seqNum;
-                            sJitterBufferParams.maxTimeStampRegistered = elem->getTimestamp();
-                        }
-                    }
-                    else
-                    {
-                        /* Seqnum is 32 bits, no typecase needed */
-                        if ((seqNum - lastRetrievedSeqNum) > PVMF_JITTER_BUFFER_ROLL_OVER_THRESHOLD_32BIT)
-                        {
-                            /* too late - discard the packet */
-                            oRet = PVMF_JITTER_BUFFER_ADD_ELEM_ERR_LATE_PACKET;
-                            return (oRet);
-                        }
-                        else
-                        {
-                            /* Reset these variables to acct for seqnum rollover */
-                            sJitterBufferParams.maxSeqNumRegistered = seqNum;
-                            sJitterBufferParams.maxSeqNumReceived = seqNum;
-                            sJitterBufferParams.maxTimeStampRegistered = elem->getTimestamp();
-                        }
-                    }
-                }
-            }
-
-            if (seqNum > sJitterBufferParams.maxSeqNumRegistered)
-            {
-                sJitterBufferParams.maxSeqNumReceived = seqNum;
-            }
-            uint32 offset = (seqNum - aSeqNumBase) % arraySize;
-
-            PVMFSharedMediaDataPtr currElem = iMediaPtrVec[offset];
-            if (currElem.GetRep() == NULL)
-            {
-                /* Register Packet */
-                iMediaPtrVec[offset] = elem;
-                numElems++;
-                sJitterBufferParams.totalNumPacketsRegistered++;
-                sJitterBufferParams.lastRegisteredSeqNum = seqNum;
-                if (seqNum > sJitterBufferParams.maxSeqNumRegistered)
-                {
-                    sJitterBufferParams.maxSeqNumRegistered = seqNum;
-                    sJitterBufferParams.maxTimeStampRegistered = elem->getTimestamp();
-                }
-                sJitterBufferParams.currentOccupancy = numElems;
-                return (oRet);
-            }
-            else if (currElem->getSeqNum() != seqNum)
-            {
-                PVMF_JBNODE_LOGDATATRAFFIC_IN((0, "JB OW: MimeType=%s, ReadOffset=%d, NumElemsLeft=%d, lastRetrievedSeqNum=%d, old seqNum=%d, new seqNum=%d",
-                                               iMimeType.get_cstr(),
-                                               readOffset,
-                                               numElems,
-                                               lastRetrievedSeqNum,
-                                               seqNum,
-                                               currElem->getSeqNum()));
-                /* Overwrite existing data */
-                currElem.Unbind();
-                /* Register Packet */
-                iMediaPtrVec[offset] = elem;
-                sJitterBufferParams.totalNumPacketsRegistered++;
-                sJitterBufferParams.lastRegisteredSeqNum = seqNum;
-                if (seqNum > sJitterBufferParams.maxSeqNumRegistered)
-                {
-                    sJitterBufferParams.maxSeqNumRegistered = seqNum;
-                    sJitterBufferParams.maxTimeStampRegistered = elem->getTimestamp();
-                }
-                sJitterBufferParams.currentOccupancy = numElems;
-                oRet = PVMF_JITTER_BUFFER_ADD_ELEM_PACKET_OVERWRITE;
-                return (oRet);
-            }
-            /* Duplicate Packet - Ignore */
-            return (oRet);
-        }
-
-        PVMFSharedMediaDataPtr retrieveElement()
-        {
-            PVMFSharedMediaDataPtr dataPkt;
-            uint32 count = 0;
-            while (dataPkt.GetRep() == NULL)
-            {
-                /* No data */
-                if (count > arraySize)
-                {
-                    dataPkt.Unbind();
-                    return dataPkt;
-                }
-                /* Wrap around */
-                if (readOffset >= arraySize)
-                {
-                    readOffset = 0;
-                }
-                dataPkt = iMediaPtrVec[readOffset];
-                readOffset++;
-                count++;
-            }
-            numElems--;
-            /* Mark the retrieved element location as free */
-            PVMFSharedMediaDataPtr retElem = iMediaPtrVec[readOffset-1];
-            retElem.Unbind();
-            iMediaPtrVec[readOffset-1] = retElem;
-            lastRetrievedSeqNum = (int32)(dataPkt.GetRep()->getSeqNum());
-            /* Check and register packet loss */
-            sJitterBufferParams.totalPacketsLost += (count - 1);
-            sJitterBufferParams.maxTimeStampRetrieved = dataPkt->getTimestamp();
-            sJitterBufferParams.currentOccupancy = numElems;
-            sJitterBufferParams.totalNumPacketsRetrieved++;
-            sJitterBufferParams.lastRetrievedSeqNum = lastRetrievedSeqNum;
-            /* Get packet size */
-            uint32 size = 0;
-            uint32 numFragments = dataPkt->getNumFragments();
-            for (uint32 i = 0; i < numFragments; i++)
-            {
-                OsclRefCounterMemFrag memFragIn;
-                dataPkt->getMediaFragment(i, memFragIn);
-                size += memFragIn.getMemFrag().len;
-            }
-            sJitterBufferParams.packetSizeInBytesLeftInBuffer -= size;
-            PVMF_JBNODE_LOGINFO((0, "PVMFDynamicCircularArray::retrieveElement: MimeType=%s, ReadOffset=%d, NumElemsLeft=%d, SeqNum=%d",
-                                 iMimeType.get_cstr(),
-                                 readOffset,
-                                 numElems,
-                                 lastRetrievedSeqNum));
-
-            return (dataPkt);
-        }
-
-        PVMFJitterBufferStats getStats()
-        {
-            return sJitterBufferParams;
-        }
-        PVMFJitterBufferStats* getStatsPtr()
-        {
-            return &sJitterBufferParams;
-        }
-
-        void peekNextElementTimeStamp(PVMFTimestamp& aTS,
-                                      uint32& aSeqNum)
-        {
-            PVMFSharedMediaDataPtr dataPkt;
-
-            uint32 peekOffset = readOffset;
-            uint32 count = 0;
-
-            while (dataPkt.GetRep() == NULL)
-            {
-                if (count > numElems)
-                {
-                    aTS = 0xFFFFFFFF;
-                }
-                if (peekOffset >= arraySize)
-                {
-                    peekOffset = 0;
-                }
-                dataPkt = iMediaPtrVec[peekOffset];
-                peekOffset++;
-                count++;
-            }
-            aTS = dataPkt.GetRep()->getTimestamp();
-            aSeqNum = dataPkt.GetRep()->getSeqNum();
-            return;
-        }
-        void peekMaxElementTimeStamp(PVMFTimestamp& aTS,
-                                     uint32& aSeqNum)
-        {
-            aTS = sJitterBufferParams.maxTimeStampRegistered;
-            aSeqNum = sJitterBufferParams.maxSeqNumRegistered;
-            return;
-        }
-
-        bool CheckCurrentReadPosition()
-        {
-            uint32 offset = readOffset;
-
-            if (offset >= arraySize)
-            {
-                offset = 0;
-            }
-
-            PVMFSharedMediaDataPtr dataPkt =
-                iMediaPtrVec[offset];
-
-            if (dataPkt.GetRep() == NULL)
-            {
-                return false;
-            }
-            return true;
-        }
-
-        bool CheckSpaceAvailability()
-        {
-            if (numElems < arraySize)
-            {
-                return true;
-            }
-            return false;
-        }
-
-        void setRTPInfoParams(PVMFRTPInfoParams rtpInfo)
-        {
-            sJitterBufferParams.seqNumBase = rtpInfo.seqNum;
-        }
-
-        PVMFSharedMediaDataPtr getElementAt(uint32 aIndex)
-        {
-            if (aIndex > arraySize) OSCL_LEAVE(OsclErrArgument);
-            return (iMediaPtrVec[aIndex]);
-        }
-
-        void AddElementAt(PVMFSharedMediaDataPtr aMediaPtr,
-                          uint32 aIndex)
-        {
-            if (aIndex > arraySize) OSCL_LEAVE(OsclErrArgument);
-            iMediaPtrVec[aIndex] = aMediaPtr;
-        }
-
-        void PurgeElementsWithSeqNumsLessThan(uint32 aSeqNum, uint32& aPrevSeqNumBaseOut)
-        {
-            if (!iMediaPtrVec.empty())
-            {
-                if (aSeqNum < lastRetrievedSeqNum)
-                {
-                    typedef typename Oscl_Vector<PVMFSharedMediaDataPtr, Alloc>::iterator iterator_type;
-                    iterator_type it;
-                    for (it = iMediaPtrVec.begin(); it != iMediaPtrVec.end(); it++)
-                    {
-                        if (it->GetRep() != NULL)
-                        {
-                            /* Get packet size */
-                            uint32 size = 0;
-                            uint32 numFragments = it->GetRep()->getNumFragments();
-                            for (uint32 i = 0; i < numFragments; i++)
-                            {
-                                OsclRefCounterMemFrag memFragIn;
-                                it->GetRep()->getMediaFragment(i, memFragIn);
-                                size += memFragIn.getMemFrag().len;
-                            }
-                            sJitterBufferParams.packetSizeInBytesLeftInBuffer -= size;
-                            it->Unbind();
-                        }
-                    }
-                    numElems = 0;
-                    /* If after purging all elements, we want to determine the TS of the previous element
-                     * (with DeterminePrevTimeStampPeek()), it will give as false information if the
-                     * seqnum has wrapped around. So because of that, we set aPrevSeqNumBaseOut to be smaller
-                     * than the current seqnum.
-                     */
-                    aPrevSeqNumBaseOut = aSeqNum - 1;
-
-                }
-                else if (aSeqNum > lastRetrievedSeqNum)
-                {
-                    /*
-                     * Start from last retrieved seq num and offset it by
-                     * first seq number added
-                     * This guarantees that we deallocate in the allocation
-                     * sequence.
-                     */
-                    uint32 startoffset = ((lastRetrievedSeqNum - firstSeqNumAdded) + 1) % arraySize;
-
-                    PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "PVMFDynamicCircularArray::PurgeElementsWithSeqNumsLessThan: MimeType=%s, SeqNum=%d, StartOffset=%d, ArraySize=%d",
-                                                    iMimeType.get_cstr(),
-                                                    aSeqNum,
-                                                    startoffset,
-                                                    arraySize));
-
-                    for (uint32 i = 0; i < aSeqNum - (lastRetrievedSeqNum + 1); i++)
-                    {
-                        uint32 offset = (startoffset + i) % arraySize;
-                        /* Mark the retrieved element location as free */
-                        PVMFSharedMediaDataPtr elem = iMediaPtrVec[offset];
-                        if (elem.GetRep() != NULL)
-                        {
-                            if (elem->getSeqNum() < aSeqNum)
-                            {
-                                /* Get packet size */
-                                uint32 size = 0;
-                                uint32 numFragments = elem->getNumFragments();
-                                for (uint32 i = 0; i < numFragments; i++)
-                                {
-                                    OsclRefCounterMemFrag memFragIn;
-                                    elem->getMediaFragment(i, memFragIn);
-                                    size += memFragIn.getMemFrag().len;
-                                }
-                                sJitterBufferParams.packetSizeInBytesLeftInBuffer -= size;
-                                elem.Unbind();
-                                iMediaPtrVec[offset] = elem;
-                                numElems--;
-                            }
-                        }
-                    }
-                }
-            }
-            /* To prevent us from registering any old packets */
-            lastRetrievedSeqNum = aSeqNum - 1;
-            sJitterBufferParams.lastRetrievedSeqNum = lastRetrievedSeqNum;
-            sJitterBufferParams.currentOccupancy = numElems;
-
-            SetReadOffset(aSeqNum);
-        }
-
-        void PurgeElementsWithTimestampLessThan(PVMFTimestamp aTS)
-        {
-            if (!iMediaPtrVec.empty())
-            {
-                while (numElems > 0)
-                {
-                    /* Wrap around */
-                    if (readOffset >= arraySize)
-                    {
-                        readOffset = 0;
-                    }
-                    PVMFSharedMediaDataPtr dataPkt = iMediaPtrVec[readOffset];
-                    if (dataPkt.GetRep() != NULL)
-                    {
-                        PVMF_JBNODE_LOGDATATRAFFIC_IN((0, "JB Purge: MimeType=%s, ReadOffset=%d, NumElemsLeft=%d, lastRetrievedSeqNum=%d, seqNum=%d",
-                                                       iMimeType.get_cstr(),
-                                                       readOffset,
-                                                       numElems,
-                                                       lastRetrievedSeqNum,
-                                                       dataPkt->getSeqNum()));
-                        PVMFTimestamp tmpTS = dataPkt.GetRep()->getTimestamp();
-                        if (tmpTS >= aTS)
-                            break;
-
-                        /* Get packet size */
-                        uint32 size = 0;
-                        uint32 numFragments = dataPkt->getNumFragments();
-                        for (uint32 i = 0; i < numFragments; i++)
-                        {
-                            OsclRefCounterMemFrag memFragIn;
-                            dataPkt->getMediaFragment(i, memFragIn);
-                            size += memFragIn.getMemFrag().len;
-                        }
-                        sJitterBufferParams.packetSizeInBytesLeftInBuffer -= size;
-                        (iMediaPtrVec[readOffset]).Unbind();
-                        numElems--;
-                    }
-                    readOffset++;
-                }
-            }
-            /* To prevent us from registering any old packets */
-            lastRetrievedTS = aTS;
-            sJitterBufferParams.currentOccupancy = numElems;
-        }
-
-        void SetReadOffset(uint32 aSeqNum)
-        {
-            readOffset = (aSeqNum - firstSeqNumAdded) % arraySize;
-        }
-
-        void setPacketHeaderFormat(PVMFJitterBufferTransportHeaderFormat aHeaderFormat)
-        {
-            iHeaderFormat = aHeaderFormat;
-        }
-
-        void SetBroadCastSession()
-        {
-            iBroadCastSession = true;
-        }
-
-    private:
-        Oscl_Vector<PVMFSharedMediaDataPtr, Alloc> iMediaPtrVec;
-
-        uint32 numElems;
-        uint32 arraySize;
-        uint32 readOffset;
-        bool iBroadCastSession;
-
-        void InitVector(uint32 size)
-        {
-            for (uint32 i = 0; i < size; i++)
-            {
-                PVMFSharedMediaDataPtr sharedMediaPtr;
-                iMediaPtrVec.push_back(sharedMediaPtr);
-            }
-        }
-
-        uint32 lastRetrievedSeqNum;
-        PVMFTimestamp lastRetrievedTS;
-        uint32 maxSeqNumAdded;
-        uint32 firstSeqNumAdded;
-
-        /* buffer statistics related params */
-        PVMFJitterBufferStats sJitterBufferParams;
-        PVLogger* iLogger;
-        PVLogger *iDataPathLoggerIn;
-        PVLogger *iDataPathLoggerOut;
-        OSCL_HeapString<PVMFJitterBufferNodeAllocator> iMimeType;
-
-        PVMFJitterBufferTransportHeaderFormat iHeaderFormat;
-};
-
-typedef enum
-{
-    PVMF_JITTER_BUFFER_ADD_PKT_ERROR,
-    PVMF_JITTER_BUFFER_ADD_PKT_SUCCESS,
-    PVMF_JITTER_BUFFER_ADD_PKT_UNEXPECTED_DATA,
-    PVMF_JITTER_BUFFER_ADD_PKT_EOS_REACHED
-} PVMFJitterBufferAddPktStatus;
-
-class PVMFJitterBufferObserver
-{
-    public:
-        virtual ~PVMFJitterBufferObserver() {}
-
-        virtual void JitterBufferFreeSpaceAvailable(OsclAny* aContext) = 0;
-        virtual void EstimatedServerClockUpdated(OsclAny* aContext) = 0;
-};
-
-class PVMFJitterBuffer
-{
-    public:
-        virtual ~PVMFJitterBuffer() {}
-
-        virtual void SetEstimatedServerClock(PVMFMediaClock* aEstServClock) = 0;
-        virtual bool ParsePacketHeader(PVMFSharedMediaDataPtr& inDataPacket,
-                                       PVMFSharedMediaDataPtr& outDataPacket,
-                                       uint32 aFragIndex = 0) = 0;
-        virtual PVMFJitterBufferAddPktStatus addPacket(PVMFSharedMediaDataPtr& dataPacket) = 0;
-        virtual PVMFSharedMediaDataPtr retrievePacket() = 0;
-        virtual PVMFJitterBufferStats getJitterBufferStats() = 0;
-        virtual void FlushJitterBuffer() = 0;
-        virtual void ResetJitterBuffer() = 0;
-        virtual void setSSRC(uint32 aSSRC) = 0;
-        virtual void setRTPInfoParams(PVMFRTPInfoParams rtpInfoParams, bool oPlayAfterASeek) = 0;
-        virtual bool CheckSpaceAvailability() = 0;
-        virtual bool CheckForMemoryAvailability() = 0;
-        virtual bool CheckCurrentReadPosition() = 0;
-        virtual PVMFTimestamp peekNextElementTimeStamp() = 0;
-        virtual PVMFTimestamp peekMaxElementTimeStamp() = 0;
-        virtual bool IsEmpty() = 0;
-        virtual void SetEOS(bool aVal) = 0;
-        virtual bool GetEOS() = 0;
-        virtual uint32 getInterArrivalJitter() = 0;
-        virtual void setPlayRange(int32 aStartTimeInMS, int32 aStopTimeInMS) = 0;
-        virtual bool CheckForHighWaterMark() = 0;
-        virtual bool CheckForLowWaterMark() = 0;
-        virtual bool CheckNumElements() = 0;
-        virtual void PurgeElementsWithSeqNumsLessThan(uint32 aSeqNum, uint32 aPlayerClockMS) = 0;
-        virtual void PurgeElementsWithTimestampLessThan(PVMFTimestamp aTS) = 0;
-        virtual bool NotifyFreeSpaceAvailable(PVMFJitterBufferObserver* aObserver,
-                                              OsclAny* aContext) = 0;
-        virtual bool NotifyServerClockUpdates(PVMFJitterBufferObserver* aObserver,
-                                              OsclAny* aContext) = 0;
-        virtual bool CancelServerClockNotificationUpdates() = 0;
-        virtual void SetInPlaceProcessingMode(bool aInPlaceProcessingMode) = 0;
-        virtual bool addMediaCommand(PVMFSharedMediaMsgPtr& aMediaCmd) = 0;
-        virtual bool CheckForPendingCommands(PVMFSharedMediaMsgPtr& aCmdMsg) = 0;
-        virtual void SetAdjustedTSInMS(PVMFTimestamp aAdjustedTS) = 0;
-        virtual bool GetRTPTimeStampOffset(uint32& aTimeStampOffset) = 0;
-        virtual void   SetRTPTimeStampOffset(uint32 newTSBase) = 0;
-        virtual PVMFSharedMediaDataPtr& GetFirstDataPacket(void) = 0;
-        virtual void AdjustRTPTimeStamp() = 0;
-        virtual void SetBroadCastSession() = 0;
-};
-
-class PVMFJitterBufferImpl : public PVMFJitterBuffer,
-            public OsclMemPoolFixedChunkAllocatorObserver
-{
-    public:
-        PVMFJitterBufferImpl(const PvmfMimeString* aMimeType = NULL,
-                             bool aInPlaceProcessing = true);
-        virtual ~PVMFJitterBufferImpl();
-
-        void SetEstimatedServerClock(PVMFMediaClock* aEstServClock)
-        {
-            iEstimatedServerClock = aEstServClock;
-        }
-
-        PVMFJitterBufferAddPktStatus addPacket(PVMFSharedMediaDataPtr& dataPacket);
-
-        PVMFSharedMediaDataPtr retrievePacket();
-
-        PVMFJitterBufferStats getJitterBufferStats()
-        {
-            return (iJitterBuffer->getStats());
-        }
-
-        void FlushJitterBuffer()
-        {
-            iFirstDataPackets.clear();
-            iJitterBuffer->Clear();
-            iJitterBuffer->ResetJitterBufferStats();
-            iRTPInfoParamsVec.clear();
-        };
-
-        void ResetJitterBuffer();
-
-        void setSSRC(uint32 aSSRC)
-        {
-            PVMF_JBNODE_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferImpl::setSSRC: Setting SSRCFromSetUpResponse - MimeType=%s, SSRC=%d", iMimeType.get_cstr(), aSSRC));
-            oSSRCFromSetUpResponseAvailable = true;
-            SSRCFromSetUpResponse = aSSRC;
-            SSRCLock = aSSRC;
-        }
-
-        void setRTPInfoParams(PVMFRTPInfoParams rtpInfo, bool oPlayAfterASeek)
-        {
-            iJitterBuffer->setRTPInfoParams(rtpInfo);
-            PVMFRTPInfoParams iRTPInfoParams;
-            iRTPInfoParams.seqNumBaseSet = rtpInfo.seqNumBaseSet;
-            if (rtpInfo.seqNumBaseSet == true)
-            {
-                iRTPInfoParams.seqNum = rtpInfo.seqNum;
-            }
-            iRTPInfoParams.rtpTimeBaseSet = rtpInfo.rtpTimeBaseSet;
-            if (rtpInfo.rtpTimeBaseSet == true)
-            {
-                iRTPInfoParams.rtpTime = rtpInfo.rtpTime;
-            }
-            iRTPInfoParams.rtpTimeScale = rtpInfo.rtpTimeScale;
-            iRTPTimeScale = rtpInfo.rtpTimeScale;
-            iEstServClockMediaClockConvertor.set_timescale(iRTPTimeScale);
-            iMediaClockConvertor.set_timescale(1000);
-            iMediaClockConvertor.set_clock_other_timescale(0, iRTPInfoParams.rtpTimeScale);
-            iRTPInfoParams.nptTimeBaseSet = rtpInfo.nptTimeBaseSet;
-            if (iRTPInfoParams.nptTimeBaseSet == true)
-            {
-                iRTPInfoParams.nptTimeInMS = rtpInfo.nptTimeInMS;
-                iMediaClockConvertor.update_clock(iRTPInfoParams.nptTimeInMS);
-                iRTPInfoParams.nptTimeInRTPTimeScale =
-                    iMediaClockConvertor.get_converted_ts(iRTPInfoParams.rtpTimeScale);
-            }
-            /* In case this is the first rtp info set TS calc variables */
-            if (iRTPInfoParamsVec.size() == 0)
-            {
-                if (iRTPInfoParams.rtpTimeBaseSet)
-                {
-                    iPrevTSOut = iRTPInfoParams.rtpTime;
-                    iPrevTSIn = iRTPInfoParams.rtpTime;
-                    iPrevAdjustedRTPTS = iRTPInfoParams.rtpTime;
-
-                    if (iPlayListRTPTimeBaseSet == false)
-                    {
-                        iPlayListRTPTimeBaseSet = true;
-                        iPlayListRTPTimeBase = iRTPInfoParams.rtpTime;
-                    }
-                }
-                else
-                {
-                    /* Use the value from the first packet */
-                    if (seqNumLock)
-                    {
-                        iPrevTSOut = seqLockTimeStamp;
-                        iPrevTSIn = seqLockTimeStamp;
-                        iPrevAdjustedRTPTS = seqLockTimeStamp;
-                    }
-                }
-
-                if (iRTPInfoParams.seqNumBaseSet)
-                {
-                    iPrevSeqNumBaseOut = iRTPInfoParams.seqNum;
-                    iPrevSeqNumBaseIn = iRTPInfoParams.seqNum;
-                }
-                else
-                {
-                    /* Use the value from the first packet */
-                    if (seqNumLock)
-                    {
-                        iPrevSeqNumBaseOut = iFirstSeqNum;
-                        iPrevSeqNumBaseIn = iFirstSeqNum;
-                    }
-                }
-                /* Initialize the variables used for ts calculation between pause and resume */
-                if (iRTPInfoParams.nptTimeBaseSet)
-                {
-                    iPrevNptTimeInRTPTimeScale = iRTPInfoParams.nptTimeInRTPTimeScale;
-                    isPrevNptTimeSet = true;
-                }
-                if (iRTPInfoParams.rtpTimeBaseSet)
-                {
-                    iPrevRtpTimeBase = iRTPInfoParams.rtpTime;
-                    isPrevRtpTimeSet = true;
-                }
-            }
-            else
-            {
-                iRTPInfoParams.isPlayAfterPause = !oPlayAfterASeek;
-            }
-            if (iRTPInfoParams.rtpTimeBaseSet)
-            {
-                iPrevAdjustedRTPTS = iRTPInfoParams.rtpTime;
-            }
-            iRTPInfoParamsVec.push_back(iRTPInfoParams);
-        }
-
-        bool IsEmpty()
-        {
-            uint32 elems = iJitterBuffer->getNumElements();
-            if (elems == 0)
-            {
-                return true;
-            }
-            return false;
-        };
-
-        bool CheckSpaceAvailability()
-        {
-            if (iJitterBuffer)
-            {
-                return (iJitterBuffer->CheckSpaceAvailability());
-            }
-            return false;
-        }
-
-        bool CheckForMemoryAvailability()
-        {
-
-            if (iInPlaceProcessing == false)
-            {
-                if (iMediaDataGroupAlloc)
-                {
-                    return (iMediaDataGroupAlloc->IsMsgAvailable());
-                }
-                return false;
-            }
-            else
-            {
-                return true;
-            }
-        };
-
-        bool CheckCurrentReadPosition()
-        {
-            return iJitterBuffer->CheckCurrentReadPosition();
-        };
-
-        bool CheckNumElements()
-        {
-            if (iJitterBuffer->getNumElements() > 0)
-            {
-                return true;
-            }
-            else
-            {
-                return false;
-            }
-        };
-
-        PVMFTimestamp peekNextElementTimeStamp();
-        PVMFTimestamp peekMaxElementTimeStamp();
-        void SetEOS(bool aVal)
-        {
-            oEOS = aVal;
-        }
-
-        bool GetEOS()
-        {
-            return (oEOS);
-        }
-
-        uint32 getInterArrivalJitter()
-        {
-            return iInterArrivalJitter;
-        }
-
-        bool ParsePacketHeader(PVMFSharedMediaDataPtr& inDataPacket,
-                               PVMFSharedMediaDataPtr& outDataPacket,
-                               uint32 aFragIndex = 0);
-
-        bool ParseRTPHeader(PVMFSharedMediaDataPtr& rtpPacket,
-                            PVMFSharedMediaDataPtr& dataPacket,
-                            uint32 aFragIndex = 0);
-
-
-        bool Allocate(OsclSharedPtr<PVMFMediaDataImpl>& mediaDataOut);
-
-        bool CreateMediaData(PVMFSharedMediaDataPtr& dataPacket, OsclSharedPtr<PVMFMediaDataImpl>& mediaDataOut);
-
-        void setPlayRange(int32 aStartTimeInMS, int32 aStopTimeInMS)
-        {
-            iStartTimeInMS = aStartTimeInMS;
-            iStopTimeInMS = aStopTimeInMS;
-        }
-
-        bool CheckForHighWaterMark()
-        {
-            PVMFJitterBufferStats stats = iJitterBuffer->getStats();
-            uint32 currOccupancy = stats.currentOccupancy;
-            uint32 maxOccupancy = stats.maxOccupancy;
-
-            PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferImpl::CheckForHighWaterMark: CurrOccupancy = %d", currOccupancy));
-            if (currOccupancy >=
-                    maxOccupancy*DEFAULT_JITTER_BUFFER_HIGH_WATER_MARK)
-            {
-                return true;
-            }
-            return false;
-        }
-
-        bool CheckForLowWaterMark()
-        {
-            PVMFJitterBufferStats stats = iJitterBuffer->getStats();
-            uint32 currOccupancy = stats.currentOccupancy;
-            uint32 maxOccupancy = stats.maxOccupancy;
-
-            PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferImpl::CheckForLowWaterMark: CurrOccupancy = %d", currOccupancy));
-            if (currOccupancy <=
-                    maxOccupancy*DEFAULT_JITTER_BUFFER_LOW_WATER_MARK)
-            {
-                return true;
-            }
-            return false;
-        }
-
-        void PurgeElementsWithSeqNumsLessThan(uint32 aSeqNum, uint32 aPlayerClockMS);
-        void PurgeElementsWithTimestampLessThan(PVMFTimestamp aTS);
-
-        bool NotifyServerClockUpdates(PVMFJitterBufferObserver* aObserver,
-                                      OsclAny* aContext)
-        {
-            iServerClockUpdateNotificationObserver = aObserver;
-            iServerClockUpdateNotificationObserverContext = aContext;
-            return true;
-        }
-
-        bool CancelServerClockNotificationUpdates()
-        {
-            iServerClockUpdateNotificationObserver = NULL;
-            iServerClockUpdateNotificationObserverContext = NULL;
-            return true;
-        }
-
-        bool NotifyFreeSpaceAvailable(PVMFJitterBufferObserver* aObserver,
-                                      OsclAny* aContext)
-        {
-            iObserver = aObserver;
-            iObserverContext = aContext;
-            if (iMediaDataGroupAlloc)
-            {
-                iMediaDataGroupAlloc->notifyfreechunkavailable(*this);
-                return true;
-            }
-            return false;
-        }
-
-        void freechunkavailable(OsclAny*)
-        {
-            if (iObserver)
-            {
-                iObserver->JitterBufferFreeSpaceAvailable(iObserverContext);
-            }
-        }
-
-        void SetInPlaceProcessingMode(bool aInPlaceProcessingMode);
-
-        bool addMediaCommand(PVMFSharedMediaMsgPtr& aMediaCmd)
-        {
-            PVMFJitterBufferStats stats = getJitterBufferStats();
-            MediaCommandMsgHolder cmdHolder;
-            cmdHolder.iPreceedingMediaMsgSeqNumber = stats.lastRegisteredSeqNum;
-            cmdHolder.iCmdMsg = aMediaCmd;
-            iMediaCmdVec.push_back(cmdHolder);
-            return true;
-        }
-
-        bool CheckForPendingCommands(PVMFSharedMediaMsgPtr& aCmdMsg)
-        {
-            /*
-             * Parse the command queue to see if it is time to send out
-             * any pending ones. if last retrieved seq num is same as
-             * the seq num of media msg that preceeds this cmd, then
-             * it is time to send this cmd out
-             */
-            PVMFJitterBufferStats stats = getJitterBufferStats();
-            Oscl_Vector<MediaCommandMsgHolder, OsclMemAllocator>::iterator it;
-            for (it = iMediaCmdVec.begin(); it != iMediaCmdVec.end(); it++)
-            {
-                if (it->iCmdMsg->getFormatID() == PVMF_MEDIA_CMD_BOS_FORMAT_ID)
-                {
-                    aCmdMsg = it->iCmdMsg;
-                    iMediaCmdVec.erase(it);
-                    return true;
-                }
-                if (it->iPreceedingMediaMsgSeqNumber == stats.lastRetrievedSeqNum)
-                {
-                    aCmdMsg = it->iCmdMsg;
-                    iMediaCmdVec.erase(it);
-                    return true;
-                }
-            }
-            return false;
-        }
-
-        void SetAdjustedTSInMS(PVMFTimestamp aAdjustedTSInMS)
-        {
-            // convert adjustedTS to RTP Timescale
-            uint32 in_wrap_count = 0;
-            MediaClockConverter clockConvertor;
-            clockConvertor.set_timescale(1000);
-            clockConvertor.set_clock(aAdjustedTSInMS, in_wrap_count);
-            uint32 adjustedTSInRTPTS = clockConvertor.get_converted_ts(iRTPTimeScale);
-            iMonotonicTimeStamp = adjustedTSInRTPTS;
-            PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferImpl::SetAdjustedTS(): adjustedTSInRTPTS=%d, iMonotonicTS=%d", adjustedTSInRTPTS, Oscl_Int64_Utils::get_uint64_lower32(iMonotonicTimeStamp)));
-
-        }
-        bool GetRTPTimeStampOffset(uint32& aTimeStampOffset)
-        {
-            if (seqNumLock)
-                aTimeStampOffset = seqLockTimeStamp;
-
-            return seqNumLock;
-        }
-
-        void   SetRTPTimeStampOffset(uint32 newTSBase)
-        {
-            // This function must be used only to offset the RTP TB
-            // for broadcast streaming.
-            // Based on that, the following is assumed:
-            // 1) seqLockTimeStamp is valid
-            // 2) newTSBase <= seqLockTimeStamp
-
-            iMonotonicTimeStamp += (seqLockTimeStamp - newTSBase);
-            iMaxAdjustedRTPTS += (seqLockTimeStamp - newTSBase);
-        }
-
-        PVMFSharedMediaDataPtr& GetFirstDataPacket(void)
-        {
-            return firstDataPacket;
-        }
-
-
-        void AdjustRTPTimeStamp()
-        {
-            // By the time this function is called, iMonotonicTimeStamp should be already normalized
-            // with the corresponding values from other jitterbuffers
-            iMaxAdjustedRTPTS = Oscl_Int64_Utils::get_uint64_lower32(iMonotonicTimeStamp);
-            UpdateEstimatedServerClock(true);
-        }
-
-        void SetBroadCastSession()
-        {
-            iBroadCastSession = true;
-            if (iJitterBuffer != NULL)
-            {
-                iJitterBuffer->SetBroadCastSession();
-            }
-        }
-
-    private:
-        void UpdateInterArrivalJitter(PVMFTimestamp currPacketTS);
-        PVMFRTPInfoParams *FindRTPInfoParams(uint32 aSeqNum)
-        {
-            if (iRTPInfoParamsVec.size() == 1)
-            {
-                return (iRTPInfoParamsVec.begin());
-            }
-
-            PVMFRTPInfoParams* retVal = NULL;
-            Oscl_Vector<PVMFRTPInfoParams, PVMFJitterBufferNodeAllocator>::iterator it;
-
-            for (it = iRTPInfoParamsVec.begin();
-                    it != iRTPInfoParamsVec.end();
-                    it++)
-            {
-                if (it->seqNum <= aSeqNum)
-                {
-                    retVal = it;
-                }
-            }
-            return retVal;
-        }
-
-        void CheckForRTPTimeAndRTPSeqNumberBase()
-        {
-            if (iRTPInfoParamsVec.size() > 0)
-            {
-                Oscl_Vector<PVMFRTPInfoParams, PVMFJitterBufferNodeAllocator>::iterator it;
-                it = iRTPInfoParamsVec.begin();
-                if (it->rtpTimeBaseSet == false)
-                {
-                    /* Use the value from the first packet */
-                    if (seqNumLock)
-                    {
-                        iPrevTSOut = seqLockTimeStamp;
-                        iPrevTSIn = seqLockTimeStamp;
-                        iPrevAdjustedRTPTS = seqLockTimeStamp;
-                    }
-                }
-                if (it->seqNumBaseSet == false)
-                {
-                    /* Use the value from the first packet */
-                    if (seqNumLock)
-                    {
-                        iPrevSeqNumBaseOut = iFirstSeqNum;
-                        iPrevSeqNumBaseIn = iFirstSeqNum;
-                    }
-                }
-            }
-        }
-
-        void DeterminePrevTimeStamp(uint32);
-        void DeterminePrevTimeStampPeek(uint32, PVMFTimestamp&);
-        void ComputeMaxAdjustedRTPTS();
-        void UpdateEstimatedServerClock(bool oFreshStart = false);
-        void UpdateEstimatedServerClockDiscrete(bool oFreshStart = false);
-
-        bool   oFirstPacket;
-        bool   seqNumLock;
-        bool   oEOS;
-        uint32 SSRCLock;
-        bool   oSSRCFromSetUpResponseAvailable;
-        uint32 SSRCFromSetUpResponse;
-        uint32 iFirstSeqNum;
-
-        PVMFSharedMediaDataPtr firstDataPacket;
-        Oscl_Vector<PVMFSharedMediaDataPtr, PVMFJitterBufferNodeAllocator> iFirstDataPackets;
-
-        typedef PVMFDynamicCircularArray<PVMFJitterBufferNodeAllocator> PVMFDynamicCircularArrayType;
-
-        PVMFDynamicCircularArrayType* iJitterBuffer;
-
-        typedef OsclMemPoolFixedChunkAllocator PoolMemAlloc;
-        PVMFMediaFragGroupCombinedAlloc<PoolMemAlloc>* iMediaDataGroupAlloc;
-        PoolMemAlloc* iMediaDataImplMemPool;
-        PoolMemAlloc* iMediaMsgMemPool;
-
-        Oscl_Vector<PVMFRTPInfoParams, PVMFJitterBufferNodeAllocator> iRTPInfoParamsVec;
-
-        MediaClockConverter iMediaClockConvertor;
-        PVMFTimestamp seqLockTimeStamp;
-        PVLogger *iLogger;
-        PVLogger *iDataPathLoggerIn;
-        PVLogger *iDataPathLoggerOut;
-        PVLogger *iClockLogger;
-        PVLogger *iClockLoggerRebuff;
-
-        OSCL_HeapString<PVMFJitterBufferNodeAllocator> iMimeType;
-
-        uint32 iPrevPacketRecvTime;
-        PVMFTimestamp iPrevPacketTS;
-        double iInterArrivalJitterD;
-        int32  iInterArrivalJitter;
-
-        PVMFMediaClock *iPacketArrivalClock;
-        PVMFTimebase_Tickcount iPacketArrivalTimeBase;
-
-        int32 iStartTimeInMS;
-        int32 iStopTimeInMS;
-
-        uint64 iMonotonicTimeStamp;
-        PVMFTimestamp  iPrevTSOut;
-        uint32 iPrevSeqNumBaseOut;
-
-        PVMFTimestamp iMaxAdjustedRTPTS;
-        PVMFTimestamp iPrevAdjustedRTPTS;
-        PVMFTimestamp iPrevTSIn;
-        uint32 iPrevSeqNumBaseIn;
-
-        PVMFMediaClock* iEstimatedServerClock;
-        PVMFTimebase_Tickcount iTickCount;
-        uint32 iRTPTimeScale;
-        MediaClockConverter iEstServClockMediaClockConvertor;
-        PVMFJitterBufferObserver* iObserver;
-        OsclAny* iObserverContext;
-
-        // RTP Timebase for playlists
-        uint32 iPlayListRTPTimeBase;
-        bool iPlayListRTPTimeBaseSet;
-
-        bool iInPlaceProcessing;
-
-        PVMFJitterBufferTransportHeaderFormat iHeaderFormat;
-
-        /* ASF Related */
-        uint32 iSeqNum;
-        bool iFirstASFPacketAfterRepos;
-
-        /* Media Command related */
-        Oscl_Vector<MediaCommandMsgHolder, OsclMemAllocator> iMediaCmdVec;
-
-        PVMFJitterBufferObserver* iServerClockUpdateNotificationObserver;
-        OsclAny* iServerClockUpdateNotificationObserverContext;
-
-        bool iBroadCastSession;
-        bool   isPrevNptTimeSet;
-        uint32 iPrevNptTimeInRTPTimeScale;
-        bool   isPrevRtpTimeSet;
-        uint32 iPrevRtpTimeBase;
-};
-
-#endif
-
-
diff --git a/nodes/streaming/jitterbuffernode/include/pvmf_jitter_buffer_ext_interface.h b/nodes/streaming/jitterbuffernode/include/pvmf_jitter_buffer_ext_interface.h
index 2c00af4..2b0364a 100644
--- a/nodes/streaming/jitterbuffernode/include/pvmf_jitter_buffer_ext_interface.h
+++ b/nodes/streaming/jitterbuffernode/include/pvmf_jitter_buffer_ext_interface.h
@@ -18,85 +18,51 @@
 #ifndef PVMF_JITTER_BUFFER_EXT_INTERFACE_H_INCLUDED
 #define PVMF_JITTER_BUFFER_EXT_INTERFACE_H_INCLUDED
 
-#ifndef OSCL_REFCOUNTER_MEMFRAG_H_INCLUDED
-#include "oscl_refcounter_memfrag.h"
+#ifndef PVMF_PORT_BASE_IMPL_H_INCLUDED
+#include "pvmf_port_base_impl.h"
 #endif
-#ifndef OSCL_STRING_CONTAINERS_H_INCLUDED
-#include "oscl_string_containers.h"
-#endif
-#ifndef PVMF_MEDIA_CLOCK_H_INCLUDED
-#include "pvmf_media_clock.h"
-#endif
-#ifndef PV_UUID_H_INCLUDED
-#include "pv_uuid.h"
-#endif
-#ifndef PV_INTERFACE_H
-#include "pv_interface.h"
-#endif
-#ifndef PVMF_PORT_INTERFACE_H_INCLUDED
-#include "pvmf_port_interface.h"
-#endif
-#ifndef RTSP_TIME_FORMAT_H
-#include "rtsp_time_formats.h"
-#endif
-#ifndef PVMF_STREAMING_BUFFER_ALLOCATORS_H_INCLUDED
-#include "pvmf_streaming_buffer_allocators.h"
-#endif
+
 #ifndef PVMF_SM_TUNABLES_H_INCLUDED
 #include "pvmf_sm_tunables.h"
 #endif
-#ifndef PVMF_SM_CONFIG_H_INCLUDED
-#include "pvmf_sm_config.h"
+
+#ifndef RTSP_TIME_FORMAT_H
+#include "rtsp_time_formats.h"
 #endif
 
-class PvmfPortBaseImpl;
-//memory allocator type for this node.
-typedef OsclMemAllocator PVMFJitterBufferNodeAllocator;
+#ifndef PVMF_JITTER_BUFFER_COMMON_TYPES_H_INCLUDED
+#include "pvmf_jitter_buffer_common_types.h"
+#endif
 
-class PVMFSharedSocketDataBufferAlloc;
+class PVMFMediaClock;
+class OsclMemPoolResizableAllocator;
+///////////////////////////////////////////////////////////////////////////////
+//Common data structures for all configs
+///////////////////////////////////////////////////////////////////////////////
 
-enum PVMFJitterBufferFireWallPacketFormat
-{
-    PVMF_JB_FW_PKT_FORMAT_RTP,
-    PVMF_JB_FW_PKT_FORMAT_PV
-};
 
-class PVMFJitterBufferFireWallPacketInfo
-{
-    public:
-        PVMFJitterBufferFireWallPacketInfo()
-        {
-            iServerRoundTripDelayInMS =
-                PVMF_JITTER_BUFFER_NODE_FIREWALL_PKT_DEFAULT_SERVER_RESPONSE_TIMEOUT_IN_MS;
-            iNumAttempts =
-                PVMF_JITTER_BUFFER_NODE_DEFAULT_FIREWALL_PKT_ATTEMPTS;
-            iFormat = PVMF_JB_FW_PKT_FORMAT_RTP;
-        };
+///////////////////////////////////////////////////////////////////////////////
+//ASF based streaming specific data structures
+///////////////////////////////////////////////////////////////////////////////
 
-        virtual ~PVMFJitterBufferFireWallPacketInfo()
-        {
-        };
-
-        uint32 iServerRoundTripDelayInMS;
-        uint32 iNumAttempts;
-        PVMFJitterBufferFireWallPacketFormat iFormat;
-};
-
+///////////////////////////////////////////////////////////////////////////////
+//Class PVMFJitterBufferExtensionInterface
+///////////////////////////////////////////////////////////////////////////////
 class PVMFJitterBufferExtensionInterface : public PVInterface
 {
     public:
-        OSCL_IMPORT_REF virtual void setRTCPIntervalInMicroSecs(uint32 aRTCPInterval) = 0;
+        OSCL_IMPORT_REF virtual void setRTCPIntervalInMicroSecs(uint32 aRTCPInterval) = 0;	//Not used as of now
         OSCL_IMPORT_REF virtual bool setPortParams(PVMFPortInterface* aPort,
                 uint32 aTimeScale,
                 uint32 aBitRate,
                 OsclRefCounterMemFrag& aConfig,
                 bool aRateAdaptation = false,
                 uint32 aRateAdaptationFeedBackFrequency = 0) = 0;
-        OSCL_IMPORT_REF virtual bool setPlayRange(int32 aStartTimeInMS,
+        OSCL_IMPORT_REF virtual bool setPlayRange(int32 aStartTimeInMS,//called when the start of the session controller completes
                 int32 aStopTimeInMS,
                 bool oPlayAfterASeek,
                 bool aStopTimeAvailable = true) = 0;
-        OSCL_IMPORT_REF virtual void setPlayBackThresholdInMilliSeconds(uint32 threshold) = 0;
+        OSCL_IMPORT_REF virtual void setPlayBackThresholdInMilliSeconds(uint32 threshold) = 0;	//Not used as of now [replace with wait for OOO timeout]
         OSCL_IMPORT_REF virtual void setJitterBufferRebufferingThresholdInMilliSeconds(uint32 aThreshold) = 0;
         OSCL_IMPORT_REF virtual void getJitterBufferRebufferingThresholdInMilliSeconds(uint32& aThreshold) = 0;
         OSCL_IMPORT_REF virtual void setJitterBufferDurationInMilliSeconds(uint32 duration) = 0;
@@ -111,7 +77,7 @@
 
         OSCL_IMPORT_REF virtual void setClientPlayBackClock(PVMFMediaClock* clientClock) = 0;
         OSCL_IMPORT_REF virtual bool PrepareForRepositioning(bool oUseExpectedClientClockVal = false,
-                uint32 aExpectedClientClockVal = 0) = 0;
+                uint32 aExpectedClientClockVal = 0) = 0;	//called for RTSP based streaming only
         OSCL_IMPORT_REF virtual bool setPortSSRC(PVMFPortInterface* aPort, uint32 aSSRC) = 0;
         OSCL_IMPORT_REF virtual bool setPortRTPParams(PVMFPortInterface* aPort,
                 bool   aSeqNumBasePresent,
@@ -148,10 +114,10 @@
 
         OSCL_IMPORT_REF virtual bool NotifyAutoPauseComplete() = 0;
         OSCL_IMPORT_REF virtual bool NotifyAutoResumeComplete() = 0;
-        OSCL_IMPORT_REF virtual PVMFStatus SetTransportType(PVMFPortInterface* aPort,
-                OSCL_String& aTransportType) = 0;
+        OSCL_IMPORT_REF virtual PVMFStatus SetInputMediaHeaderPreParsed(PVMFPortInterface* aPort,
+                bool aHeaderPreParsed) = 0;
         OSCL_IMPORT_REF virtual PVMFStatus HasSessionDurationExpired(bool& aExpired) = 0;
-        OSCL_IMPORT_REF virtual bool PurgeElementsWithNPTLessThan(NptTimeFormat &aNPTTime) = 0;
+        OSCL_IMPORT_REF virtual bool PurgeElementsWithNPTLessThan(NptTimeFormat& aNPTTime) = 0;
 
         OSCL_IMPORT_REF virtual void SetBroadCastSession() = 0;
         OSCL_IMPORT_REF virtual void DisableFireWallPackets() = 0;
diff --git a/nodes/streaming/jitterbuffernode/include/pvmf_jitter_buffer_internal.h b/nodes/streaming/jitterbuffernode/include/pvmf_jitter_buffer_internal.h
index 77fa626..05a3d7a 100644
--- a/nodes/streaming/jitterbuffernode/include/pvmf_jitter_buffer_internal.h
+++ b/nodes/streaming/jitterbuffernode/include/pvmf_jitter_buffer_internal.h
@@ -34,28 +34,26 @@
 /**
  * Macros for calling PVLogger
  */
-#define PVMF_JBNODE_LOGERROR(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,iLogger,PVLOGMSG_ERR,m);
-#define PVMF_JBNODE_LOGWARNING(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,iLogger,PVLOGMSG_WARNING,m);
-#define PVMF_JBNODE_LOGINFOHI(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG,iLogger,PVLOGMSG_INFO,m);
-#define PVMF_JBNODE_LOGINFOMED(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_MLDBG,iLogger,PVLOGMSG_INFO,m);
-#define PVMF_JBNODE_LOGINFOLOW(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG,iLogger,PVLOGMSG_INFO,m);
+#define PVMF_JBNODE_LOGERROR(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipLogger,PVLOGMSG_ERR,m);
+#define PVMF_JBNODE_LOGWARNING(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipLogger,PVLOGMSG_WARNING,m);
+#define PVMF_JBNODE_LOGINFOHI(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG,ipLogger,PVLOGMSG_INFO,m);
+#define PVMF_JBNODE_LOGINFOMED(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_MLDBG,ipLogger,PVLOGMSG_INFO,m);
+#define PVMF_JBNODE_LOGINFOLOW(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG,ipLogger,PVLOGMSG_INFO,m);
 #define PVMF_JBNODE_LOGINFO(m) PVMF_JBNODE_LOGINFOMED(m)
-#define PVMF_JBNODE_LOGDATATRAFFIC(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,iDataPathLogger,PVLOGMSG_INFO,m);
-#define PVMF_JBNODE_LOGDATATRAFFIC_IN(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,iDataPathLoggerIn,PVLOGMSG_INFO,m);
-#define PVMF_JBNODE_LOGDATATRAFFIC_IN_E(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,iDataPathLoggerIn,PVLOGMSG_ERR,m);
-#define PVMF_JBNODE_LOGDATATRAFFIC_OUT(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,iDataPathLoggerOut,PVLOGMSG_INFO,m);
-#define PVMF_JBNODE_LOGDATATRAFFIC_OUT_E(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,iDataPathLoggerOut,PVLOGMSG_ERR,m);
-#define PVMF_JBNODE_LOGCLOCK(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,iClockLogger,PVLOGMSG_INFO,m);
-#define PVMF_JBNODE_LOGCLOCK_SESSION_DURATION(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,iClockLoggerSessionDuration,PVLOGMSG_INFO,m);
-#define PVMF_JBNODE_LOGCLOCK_REBUFF(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,iClockLoggerRebuff,PVLOGMSG_INFO,m);
-#define PVMF_JBNODE_LOGDIAGNOSTICS(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_PROF,iDiagnosticsLogger,PVLOGMSG_INFO,m);
-#define PVMF_JBNODE_LOGDATATRAFFIC_FLOWCTRL(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,iDataPathLoggerFlowCtrl,PVLOGMSG_INFO,m);
-#define PVMF_JBNODE_LOGDATATRAFFIC_FLOWCTRL_E(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,iDataPathLoggerFlowCtrl,PVLOGMSG_ERR,m);
-#define PVMF_JBNODE_LOG_RTCP(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,iDataPathLoggerRTCP,PVLOGMSG_INFO,m);
-#define PVMF_JBNODE_LOG_RTCP_ERR(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,iDataPathLoggerRTCP,PVLOGMSG_ERR,m);
-#define PVMF_JBNODE_LOG_FW(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,iDataPathLoggerFireWall,PVLOGMSG_INFO,m);
-#define PVMF_JBNODE_LOG_EVENTS_CLOCK(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_MLDBG,iJBEventsClockLogger ,PVLOGMSG_INFO,m);
-#define PVMF_JBNODE_LOG_RTCP_AVSYNC(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,iRTCPAVSyncLogger,PVLOGMSG_INFO,m);
+#define PVMF_JBNODE_LOGDATATRAFFIC(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipDataPathLogger,PVLOGMSG_INFO,m);
+#define PVMF_JBNODE_LOGDATATRAFFIC_IN(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipDataPathLoggerIn,PVLOGMSG_INFO,m);
+#define PVMF_JBNODE_LOGDATATRAFFIC_IN_E(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipDataPathLoggerIn,PVLOGMSG_ERR,m);
+#define PVMF_JBNODE_LOGDATATRAFFIC_OUT(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipDataPathLoggerOut,PVLOGMSG_INFO,m);
+#define PVMF_JBNODE_LOGDATATRAFFIC_OUT_E(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipDataPathLoggerOut,PVLOGMSG_ERR,m);
+#define PVMF_JBNODE_LOGCLOCK(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipClockLogger,PVLOGMSG_INFO,m);
+#define PVMF_JBNODE_LOGCLOCK_SESSION_DURATION(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipClockLoggerSessionDuration,PVLOGMSG_INFO,m);
+#define PVMF_JBNODE_LOGCLOCK_REBUFF(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipClockLoggerRebuff,PVLOGMSG_INFO,m);
+#define PVMF_JBNODE_LOGDIAGNOSTICS(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_PROF,ipDiagnosticsLogger,PVLOGMSG_INFO,m);
+#define PVMF_JBNODE_LOGDATATRAFFIC_FLOWCTRL(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipDataPathLoggerFlowCtrl,PVLOGMSG_INFO,m);
+#define PVMF_JBNODE_LOGDATATRAFFIC_FLOWCTRL_E(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipDataPathLoggerFlowCtrl,PVLOGMSG_ERR,m);
+#define PVMF_JBNODE_LOG_RTCP_DATAPATH(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipDataPathLoggerRTCP,PVLOGMSG_ERR,m);
+#define PVMF_JBNODE_LOG_EVENTS_CLOCK(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_MLDBG,ipJBEventsClockLogger ,PVLOGMSG_INFO,m);
+#define PVMF_JBNODE_LOG_RTCP_AVSYNC(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipRTCPAVSyncLogger,PVLOGMSG_INFO,m);
 
 #define PVMF_JITTER_BUFFER_NEW(auditCB,T,params,ptr)\
 {\
@@ -81,7 +79,7 @@
 #define PVMF_JITTER_BUFFER_INTERNAL_CMDQ_SIZE 20
 
 //Node command type.
-typedef PVMFGenericNodeCommand<PVMFJitterBufferNodeAllocator> PVMFJitterBufferNodeCommandBase;
+typedef PVMFGenericNodeCommand<OsclMemAllocator> PVMFJitterBufferNodeCommandBase;
 
 class PVMFJitterBufferNodeCommand : public PVMFJitterBufferNodeCommandBase
 {
@@ -108,7 +106,7 @@
 };
 
 //Command queue type
-typedef PVMFNodeCommandQueue<PVMFJitterBufferNodeCommand, PVMFJitterBufferNodeAllocator> PVMFJitterBufferNodeCmdQ;
+typedef PVMFNodeCommandQueue<PVMFJitterBufferNodeCommand, OsclMemAllocator> PVMFJitterBufferNodeCmdQ;
 
 typedef struct tagPVMFJBCommandContext
 {
@@ -124,7 +122,7 @@
 class PVMFJitterBufferNode;
 
 class PVMFJitterBufferExtensionInterfaceImpl :
-            public PVInterfaceImpl<PVMFJitterBufferNodeAllocator>,
+            public PVInterfaceImpl<OsclMemAllocator>,
             public PVMFJitterBufferExtensionInterface
 {
     public:
@@ -183,11 +181,11 @@
 
         void addRef()
         {
-            PVInterfaceImpl<PVMFJitterBufferNodeAllocator>::addRef();
+            PVInterfaceImpl<OsclMemAllocator>::addRef();
         }
         void removeRef()
         {
-            PVInterfaceImpl<PVMFJitterBufferNodeAllocator>::removeRef();
+            PVInterfaceImpl<OsclMemAllocator>::removeRef();
         }
         bool queryInterface(const PVUuid& uuid, PVInterface*& iface)
         {
@@ -219,8 +217,8 @@
 
         OSCL_IMPORT_REF bool NotifyAutoResumeComplete();
 
-        OSCL_IMPORT_REF PVMFStatus SetTransportType(PVMFPortInterface* aPort,
-                OSCL_String& aTransportType);
+        OSCL_IMPORT_REF PVMFStatus SetInputMediaHeaderPreParsed(PVMFPortInterface* aPort,
+                bool aHeaderPreParsed);
 
         OSCL_IMPORT_REF PVMFStatus HasSessionDurationExpired(bool& aExpired);
         OSCL_IMPORT_REF bool PurgeElementsWithNPTLessThan(NptTimeFormat &aNPTTime);
diff --git a/nodes/streaming/jitterbuffernode/include/pvmf_jitter_buffer_node.h b/nodes/streaming/jitterbuffernode/include/pvmf_jitter_buffer_node.h
index df33062..468e378 100644
--- a/nodes/streaming/jitterbuffernode/include/pvmf_jitter_buffer_node.h
+++ b/nodes/streaming/jitterbuffernode/include/pvmf_jitter_buffer_node.h
@@ -17,7 +17,6 @@
  */
 #ifndef PVMF_JITTER_BUFFER_NODE_H_INCLUDED
 #define PVMF_JITTER_BUFFER_NODE_H_INCLUDED
-
 #ifndef OSCL_EXCLUSIVE_PTR_H_INCLUDED
 #include "oscl_exclusive_ptr.h"
 #endif
@@ -48,17 +47,16 @@
 #ifndef PVMF_JITTER_BUFFER_INTERNAL_H_INCLUDED
 #include "pvmf_jitter_buffer_internal.h"
 #endif
-#ifndef PVMF_RTCP_TIMER_H_INCLUDED
-#include "pvmf_rtcp_timer.h"
-#endif
 #ifndef PVMF_SM_NODE_EVENTS_H_INCLUDED
 #include "pvmf_sm_node_events.h"
 #endif
-#ifndef PVMF_JB_INACTIVITY_TIMER_H_INCLUDED
-#include "pvmf_jb_inactivity_timer.h"
+
+#ifndef PVMF_JB_JITTERBUFFERMISC_H_INCLUDED
+#include "pvmf_jb_jitterbuffermisc.h"
 #endif
-#ifndef PVMF_SM_CONFIG_H_INCLUDED
-#include "pvmf_sm_config.h"
+
+#ifndef PVMF_MEDIA_CMD_H_INCLUDED
+#include "pvmf_media_cmd.h"
 #endif
 
 ///////////////////////////////////////////////
@@ -94,55 +92,39 @@
 };
 
 class PVLogger;
-
-class PVMFMediaClockNotificationsIntfContext
-{
-    public:
-        PVMFMediaClockNotificationsIntfContext(): iClockNotificationIntf(NULL), iContext(NULL) {}
-        void SetContext(PVMFMediaClockNotificationsInterface* aClockNotificationsInterface, OsclAny* aContext)
-        {
-            iClockNotificationIntf = aClockNotificationsInterface;
-            iContext = aContext;
-        }
-        const OsclAny* GetContextData() const
-        {
-            return iContext;
-        }
-
-        const PVMFMediaClockNotificationsInterface* GetMediaClockNotificationsInterface() const
-        {
-            return  iClockNotificationIntf;
-        }
-
-    private:
-        PVMFMediaClockNotificationsInterface* iClockNotificationIntf;
-        OsclAny* iContext;
-};
+class PVMFJitterBufferExtensionInterfaceImpl;
+class PVMFJitterBufferConstructParams;
+class JitterBufferFactory;
 
 class PVMFJitterBufferNode : public PVInterface,
             public PVMFNodeInterface,
             public OsclActiveObject,
-            public PVMFNodeErrorEventObserver,
-            public PVMFNodeInfoEventObserver,
-            public PVMFNodeCmdStatusObserver,
-            public PvmfRtcpTimerObserver,
-            public PvmfJBSessionDurationTimerObserver,
             public PVMFJitterBufferObserver,
-            public PVMFMediaClockStateObserver,
-            public OsclMemPoolResizableAllocatorMemoryObserver,
-            public PVMFMediaClockNotificationsObs
+            public PVMFJitterBufferMiscObserver,
+            public PVMFJBEventNotifierObserver,
+            public PVMFMediaClockStateObserver
 {
     public:
-        OSCL_IMPORT_REF PVMFJitterBufferNode(int32 aPriority);
+        OSCL_IMPORT_REF PVMFJitterBufferNode(int32 aPriority, JitterBufferFactory* aJBFactory);			//may be provide static func for creation and make the ctor private
         OSCL_IMPORT_REF virtual ~PVMFJitterBufferNode();
 
+        //Overrides from PVInterface
+        virtual void addRef()
+        {
+        }
+        virtual void removeRef()
+        {
+        }
+        virtual bool queryInterface(const PVUuid& uuid, PVInterface*& iface);
+
+        //Overrides from PVMFNodeInterface
         OSCL_IMPORT_REF PVMFStatus ThreadLogon();
         OSCL_IMPORT_REF PVMFStatus ThreadLogoff();
         OSCL_IMPORT_REF PVMFStatus GetCapability(PVMFNodeCapability& aNodeCapability);
         OSCL_IMPORT_REF PVMFPortIter* GetPorts(const PVMFPortFilter* aFilter = NULL);
         OSCL_IMPORT_REF PVMFCommandId QueryUUID(PVMFSessionId,
                                                 const PvmfMimeString& aMimeType,
-                                                Oscl_Vector< PVUuid, PVMFJitterBufferNodeAllocator >& aUuids,
+                                                Oscl_Vector< PVUuid, OsclMemAllocator >& aUuids,
                                                 bool aExactUuidsOnly = false,
                                                 const OsclAny* aContext = NULL);
         OSCL_IMPORT_REF PVMFCommandId QueryInterface(PVMFSessionId,
@@ -175,162 +157,149 @@
         OSCL_IMPORT_REF PVMFCommandId CancelCommand(PVMFSessionId,
                 PVMFCommandId aCmdId,
                 const OsclAny* aContextData = NULL);
+        void HandlePortActivity(const PVMFPortActivity& aActivity);   //from PVMFPortActivityHandler
 
-        /**
-         * Handle an error event that has been generated.
-         *
-         * @param "aEvent" "The event to be handled."
-         */
-        virtual void HandleNodeErrorEvent(const PVMFAsyncEvent& aEvent)
-        {
-            OSCL_UNUSED_ARG(aEvent);
-        }
-        /**
-         * Handle an informational event that has been generated.
-         *
-         * @param "aEvent" "The event to be handled."
-         */
-        virtual void HandleNodeInformationalEvent(const PVMFAsyncEvent& aEvent)
-        {
-            OSCL_UNUSED_ARG(aEvent);
-        }
-        /**
-         * Handle an event that has been generated.
-         *
-         * @param "aResponse"	"The response to a previously issued command."
-         */
-        virtual void NodeCommandCompleted(const PVMFCmdResp& aResponse)
-        {
-            OSCL_UNUSED_ARG(aResponse);
-        }
+        //Overrides from PVMFJitterBufferObserver
+        virtual void JitterBufferFreeSpaceAvailable(OsclAny* aContext);
+        virtual void ProcessJBInfoEvent(PVMFAsyncEvent& aEvent);
+        virtual void PacketReadyToBeRetrieved(OsclAny* aContext);
+        virtual void EndOfStreamSignalled(OsclAny* aContext);
 
-        //from PVMFPortActivityHandler
-        void HandlePortActivity(const PVMFPortActivity& aActivity);
-        //from PVMFMediaClockStateObserver
+        //PVMFJitterBufferMiscObserver
+        virtual void MessageReadyToSend(PVMFPortInterface*& aPort, PVMFSharedMediaMsgPtr& aMessage);
+        virtual void MediaReceivingChannelPrepared(bool aStatus);
+        virtual void ProcessRTCPControllerEvent(PVMFAsyncEvent& aEvent);
+        virtual void SessionSessionExpired();
+
+
+        //Overrides from PVMFJBEventNotifierObserver
+        virtual void ProcessCallback(CLOCK_NOTIFICATION_INTF_TYPE aClockNotificationInterfaceType, uint32 aCallBkId, const OsclAny* aContext, PVMFStatus aStatus);
+
+        //Override from PVMFMediaClockStateObserver
         virtual void ClockStateUpdated();
-        // Need to set jb state to ready when handing 404, 415 response
-        virtual void UpdateJitterBufferState();
-        void NotificationsInterfaceDestroyed();
-
-        virtual void addRef()
-        {
-        }
-        virtual void removeRef()
-        {
-        }
-        virtual bool queryInterface(const PVUuid& uuid, PVInterface*& iface)
-        {
-            iface = NULL;
-            if (uuid == PVUuid(PVMF_JITTERBUFFERNODE_EXTENSIONINTERFACE_UUID))
-            {
-                if (!iExtensionInterface)
-                {
-                    PVMFJitterBufferNodeAllocator alloc;
-                    int32 err;
-                    OsclAny*ptr = NULL;
-                    OSCL_TRY(err,
-                             ptr = alloc.ALLOCATE(sizeof(PVMFJitterBufferExtensionInterfaceImpl));
-                            );
-                    if (err != OsclErrNone || !ptr)
-                    {
-                        PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::queryInterface: Error - Out of memory"));
-                        OSCL_LEAVE(OsclErrNoMemory);
-                    }
-                    iExtensionInterface =
-                        OSCL_PLACEMENT_NEW(ptr, PVMFJitterBufferExtensionInterfaceImpl(this));
-                }
-                return (iExtensionInterface->queryInterface(uuid, iface));
-            }
-            else
-            {
-                return false;
-            }
-        }
-        virtual bool PrepareForPlaylistSwitch();
+        virtual void NotificationsInterfaceDestroyed();
 
     private:
-        bool RTCPByeRcvd();
-        //from OsclActiveObject
+        //Overrides from OsclActiveObject
         void Run();
         void DoCancel();
 
-        /**
-         * Process a port activity. This method is called by Run to process a port activity.
-         *
-         */
+        //Extension interface functions implemented in Node
+        virtual void SetRTCPIntervalInMicroSecs(uint32 aRTCPInterval);	//Not used as of now
+        virtual bool SetPortParams(PVMFPortInterface* aPort,
+                                   uint32 aTimeScale,
+                                   uint32 aBitRate,
+                                   OsclRefCounterMemFrag& aConfig,
+                                   bool aRateAdaptation = false,
+                                   uint32 aRateAdaptationFeedBackFrequency = 0);
+        virtual bool SetPlayRange(int32 aStartTimeInMS,
+                                  int32 aStopTimeInMS,
+                                  bool oPlayAfterASeek,
+                                  bool aStopTimeAvailable = true);
+        virtual void SetPlayBackThresholdInMilliSeconds(uint32 threshold);	//Not used as of now [replace with wait for OOO timeout]
+        virtual void SetJitterBufferRebufferingThresholdInMilliSeconds(uint32 aThreshold);
+        virtual void GetJitterBufferRebufferingThresholdInMilliSeconds(uint32& aThreshold);
+        virtual void SetJitterBufferDurationInMilliSeconds(uint32 duration);
+        virtual void GetJitterBufferDurationInMilliSeconds(uint32& duration);
+        virtual void SetEarlyDecodingTimeInMilliSeconds(uint32 duration);
+        virtual void SetBurstThreshold(float burstThreshold);
+        //While in buffering/start state, Jitter Buffer node expects its upstream peer node to send media msg at its input port in duration < inactivity duration
+        virtual void SetMaxInactivityDurationForMediaInMs(uint32 duration);
+        virtual void GetMaxInactivityDurationForMediaInMs(uint32& duration);
+
+        virtual void SetClientPlayBackClock(PVMFMediaClock* clientClock);
+        virtual bool PrepareForRepositioning(bool oUseExpectedClientClockVal = false,
+                                             uint32 aExpectedClientClockVal = 0);	//called for RTSP based streaming only
+        virtual bool SetPortSSRC(PVMFPortInterface* aPort, uint32 aSSRC);
+        virtual bool SetPortRTPParams(PVMFPortInterface* aPort,
+                                      bool   aSeqNumBasePresent,
+                                      uint32 aSeqNumBase,
+                                      bool   aRTPTimeBasePresent,
+                                      uint32 aRTPTimeBase,
+                                      bool   aNPTTimeBasePresent,
+                                      uint32 aNPTInMS,
+                                      bool oPlayAfterASeek = false);
+        virtual bool SetPortRTCPParams(PVMFPortInterface* aPort,
+                                       int aNumSenders,
+                                       uint32 aRR,
+                                       uint32 aRS);
+        virtual PVMFTimestamp GetActualMediaDataTSAfterSeek();
+        virtual PVMFTimestamp GetMaxMediaDataTS();
+
+        virtual PVMFStatus SetServerInfo(PVMFJitterBufferFireWallPacketInfo& aServerInfo);
+        virtual PVMFStatus NotifyOutOfBandEOS();
+        virtual PVMFStatus SendBOSMessage(uint32 aStramID);
+
+        virtual void SetJitterBufferChunkAllocator(OsclMemPoolResizableAllocator* aDataBufferAllocator, const PVMFPortInterface* aPort);
+
+        virtual void SetJitterBufferMemPoolInfo(const PvmfPortBaseImpl* aPort, uint32 aSize, uint32 aResizeSize, uint32 aMaxNumResizes, uint32 aExpectedNumberOfBlocksPerBuffer);
+        virtual void GetJitterBufferMemPoolInfo(const PvmfPortBaseImpl* aPort, uint32& aSize, uint32& aResizeSize, uint32& aMaxNumResizes, uint32& aExpectedNumberOfBlocksPerBuffer) const ;
+
+        virtual void SetSharedBufferResizeParams(uint32 maxNumResizes, uint32 resizeSize);
+        virtual void GetSharedBufferResizeParams(uint32& maxNumResizes, uint32& resizeSize);
+
+        virtual bool ClearJitterBuffer(PVMFPortInterface* aPort,
+                                       uint32 aSeqNum);
+        virtual void FlushJitterBuffer();
+
+
+        virtual PVMFStatus SetInputMediaHeaderPreParsed(PVMFPortInterface* aPort,
+                bool aHeaderPreParsed);
+
+        virtual PVMFStatus HasSessionDurationExpired(bool& aExpired);
+        virtual bool PurgeElementsWithNPTLessThan(NptTimeFormat& aNPTTime);
+
+        virtual void SetBroadCastSession();
+        virtual void DisableFireWallPackets();
+        virtual void UpdateJitterBufferState();
+        virtual void StartOutputPorts();
+        virtual void StopOutputPorts();
+
+        bool SetPortParams(PVMFPortInterface* aPort,
+                           uint32 aTimeScale,
+                           uint32 aBitRate,
+                           OsclRefCounterMemFrag& aConfig,
+                           bool aRateAdaptation,
+                           uint32 aRateAdaptationFeedBackFrequency,
+                           uint aMaxNumBuffResizes, uint aBuffResizeSize);
+        bool SetPortParams(PVMFPortInterface* aPort,
+                           uint32 aTimeScale,
+                           uint32 aBitRate,
+                           OsclRefCounterMemFrag& aConfig,
+                           bool aRateAdaptation,
+                           uint32 aRateAdaptationFeedBackFrequency,
+                           bool aUserSpecifiedBuffParams,
+                           uint aMaxNumBuffResizes = 0, uint aBuffResizeSize = 0);
+        bool PrepareForPlaylistSwitch();
+
+        //Async command handling functions
+        void DoQueryUuid(PVMFJitterBufferNodeCommand&);
+        void DoQueryInterface(PVMFJitterBufferNodeCommand&);
+        void DoRequestPort(PVMFJitterBufferNodeCommand&);
+        void DoReleasePort(PVMFJitterBufferNodeCommand&);
+        void DoInit(PVMFJitterBufferNodeCommand&);
+        void DoPrepare(PVMFJitterBufferNodeCommand& aCmd);
+        void CompletePrepare();
+        void CancelPrepare();
+        void DoStart(PVMFJitterBufferNodeCommand&);
+        void CompleteStart();
+        void CancelStart();
+
+        //Utility functions
+        void Construct();
+        void ResetNodeParams(bool aReleaseMemory = true);
         bool ProcessPortActivity(PVMFJitterBufferPortParams*);
-
-        /**
-         * Retrieve and process an incoming message from a port.
-         */
         PVMFStatus ProcessIncomingMsg(PVMFJitterBufferPortParams*);
-        PVMFStatus ProcessIncomingMsgRTP(PVMFJitterBufferPortParams*,
-                                         PVMFSharedMediaMsgPtr&);
-
-        /**
-         * Process an outgoing message of a the specified port by sending the message to
-         * the receiving side.
-         */
         PVMFStatus ProcessOutgoingMsg(PVMFJitterBufferPortParams*);
-
         void QueuePortActivity(PVMFJitterBufferPortParams*,
                                const PVMFPortActivity&);
-
         bool CheckForPortRescheduling();
         bool CheckForPortActivityQueues();
 
-        /**
-         * Queue holding port activity. Only incoming and outgoing msg activity are
-         * put on the queue.  For each port, there should only be at most one activity
-         * of each type on the queue.
-         */
-        Oscl_Vector<PVMFPortActivity, PVMFJitterBufferNodeAllocator> iPortActivityQueue;
-
-        PVMFPortVector<PVMFJitterBufferPort, PVMFJitterBufferNodeAllocator> iPortVector;
-
-        /*
-         * Queue holding port params - one per every port
-         */
-        Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator> iPortParamsQueue;
-
         bool getPortContainer(PVMFPortInterface* aPort,
                               PVMFJitterBufferPortParams*& aPortParams);
 
-        PVMFJitterBufferNodeCmdQ iInputCommands;
-        PVMFJitterBufferNodeCmdQ iCurrentCommand;
-        PVMFNodeCapability iCapability;
-        PVLogger *iLogger;
-        PVLogger *iDataPathLogger;
-        PVLogger *iDataPathLoggerIn;
-        PVLogger *iDataPathLoggerOut;
-        PVLogger *iDataPathLoggerFlowCtrl;
-        PVLogger *iDataPathLoggerRTCP;
-        PVLogger *iDataPathLoggerFireWall;
-        PVLogger *iClockLogger;
-        PVLogger *iClockLoggerSessionDuration;
-        PVLogger *iClockLoggerRebuff;
-        PVLogger *iJBEventsClockLogger;
-        PVLogger *iRTCPAVSyncLogger;
-        uint32 iStreamID;
 
-        PVMFJitterBufferExtensionInterfaceImpl *iExtensionInterface;
-
-        /*
-         * Jitter buffer related params
-         */
-        PVMFMediaClock *iClientPlayBackClock;
-        PVMFMediaClock *iEstimatedServerClock;
-        PVMFTimebase_Tickcount iEstimatedServerClockTimeBase;
-
-        uint32    iJitterBufferUnderFlowThresholdInMilliSeconds;
-        uint32    iPlayBackThresholdInMilliSeconds;
-        uint32    iEstimatedServerKeepAheadInMilliSeconds;
-        bool      oDelayEstablished;
-        bool      iOverflowFlag;
-
-        PVMFJBCommandContext iInternalCmdPool[PVMF_JITTER_BUFFER_INTERNAL_CMDQ_SIZE];
-
-        /** Command processing */
         PVMFCommandId QueueCommandL(PVMFJitterBufferNodeCommand&);
         void MoveCmdToCurrentQueue(PVMFJitterBufferNodeCommand& aCmd);
         bool ProcessCommand(PVMFJitterBufferNodeCommand&);
@@ -351,24 +320,10 @@
                                      OsclAny* aEventData = NULL);
         PVMFJBCommandContext* RequestNewInternalCmd();
 
-        void DoQueryUuid(PVMFJitterBufferNodeCommand&);
-        void DoQueryInterface(PVMFJitterBufferNodeCommand&);
-        void DoRequestPort(PVMFJitterBufferNodeCommand&);
-        void DoReleasePort(PVMFJitterBufferNodeCommand&);
-        void DoInit(PVMFJitterBufferNodeCommand&);
-        void DoPrepare(PVMFJitterBufferNodeCommand& aCmd);
-        void CompletePrepare();
-        void CancelPrepare();
-        void DoStart(PVMFJitterBufferNodeCommand&);
-        void CompleteStart();
-        void CancelStart();
-        bool oStartPending;
-        bool iPlayingAfterSeek;
-
         void DoStop(PVMFJitterBufferNodeCommand&);
         void DoFlush(PVMFJitterBufferNodeCommand&);
         bool FlushPending();
-        uint32 iPauseTime;
+
         void DoPause(PVMFJitterBufferNodeCommand&);
         void DoReset(PVMFJitterBufferNodeCommand&);
         void DoCancelAllCommands(PVMFJitterBufferNodeCommand&);
@@ -385,210 +340,26 @@
         void SetState(TPVMFNodeInterfaceState);
 
         void CleanUp();
-        void setClientPlayBackClock(PVMFMediaClock* clientClock)
-        {
-            //remove ourself as observer of old clock, if any.
-            if (iClientPlayBackClockNotificationsInf && iClientPlayBackClock)
-            {
-                iClientPlayBackClockNotificationsInf->RemoveClockStateObserver(*this);
-                iClientPlayBackClock->DestroyMediaClockNotificationsInterface(iClientPlayBackClockNotificationsInf);
-                iClientPlayBackClockNotificationsInf = NULL;
-            }
 
-            iClientPlayBackClock = clientClock;
-            if (iClientPlayBackClock)
-            {
-                PVMFStatus status = iClientPlayBackClock->ConstructMediaClockNotificationsInterface(iClientPlayBackClockNotificationsInf, *this);
-                if (PVMFSuccess != status || !iClientPlayBackClockNotificationsInf)
-                {
-                    iClientPlayBackClockNotificationsInf = NULL;
-                    OSCL_ASSERT(false);
-                }
-            }
 
-            //set ourself as observer of new clock.
-            if (iClientPlayBackClockNotificationsInf)
-                iClientPlayBackClockNotificationsInf->SetClockStateObserver(*this);
-        }
-
-        void setMaxInactivityDurationForMediaInMs(uint32 duration)
-        {
-            iMaxInactivityDurationForMediaInMs = duration;
-        }
-
-        void getMaxInactivityDurationForMediaInMs(uint32& duration)
-        {
-            duration = iMaxInactivityDurationForMediaInMs;
-        }
 
         friend class PVMFJitterBufferPort;
         friend class PVMFJitterBufferExtensionInterfaceImpl;
 
-        /*
-         * Jitter buffer related methods
-         */
+
+
         bool CheckStateForRegisteringRTPPackets();
-        PVMFJitterBufferDataState iJitterBufferState;
-        void StopOutputPorts()
-        {
-            oStopOutputPorts = true;
-        }
-        void StartOutputPorts()
-        {
-            oStopOutputPorts = false;
-        }
-        bool PrepareForRepositioning(bool oUseExpectedClientClockVal = false,
-                                     uint32 aExpectedClientClockVal = 0);
-        bool ClearJitterBuffer(PVMFPortInterface* aPort, uint32 aSeqNum);
-        void FlushJitterBuffer();
-        bool pauseEstimatedServerClock()
-        {
-            if (iEstimatedServerClock)
-            {
-                PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferNode::pauseEstimatedServerClock"));
-                iEstimatedServerClock->Pause();
-            }
-            StopOutputPorts();
-            return true;
-        }
-        bool StartEstimatedServerClock()
-        {
-            if (iEstimatedServerClock)
-            {
-                PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferNode::StartEstimatedServerClock"));
-                iEstimatedServerClock->Start();
-            }
-            RequestEventCallBack(JB_BUFFERING_DURATION_COMPLETE);
-            StartOutputPorts();
-            return true;
-        }
+
         bool NotifyAutoPauseComplete()
         {
-            if (iEstimatedServerClock)
-            {
-                PVMF_JBNODE_LOGDATATRAFFIC_FLOWCTRL((0, "PVMFJitterBufferNode::NotifyAutoPauseComplete"));
-                PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferNode::NotifyAutoPauseComplete"));
-                iEstimatedServerClock->Pause();
-            }
+
             return true;
         }
         bool NotifyAutoResumeComplete()
         {
-            if (iEstimatedServerClock)
-            {
-                PVMF_JBNODE_LOGDATATRAFFIC_FLOWCTRL((0, "PVMFJitterBufferNode::NotifyAutoResumeComplete"));
-                PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferNode::NotifyAutoResumeComplete"));
-                iEstimatedServerClock->Start();
-                /* NotifyAutoResumeComplete() is only called in case of HTTP streaming,
-                   therefore EstimatedServerClock has to be paused just after it is started */
-                iEstimatedServerClock->Pause();
-            }
+
             return true;
         }
-        bool oAutoPause;
-
-        bool setPortParams(PVMFPortInterface* aPort,
-                           uint32 aTimeScale,
-                           uint32 aBitRate,
-                           OsclRefCounterMemFrag& aConfig,
-                           bool aRateAdaptation = false,
-                           uint32 aRateAdaptationFeedBackFrequency = 0);
-        bool setPortParams(PVMFPortInterface* aPort,
-                           uint32 aTimeScale,
-                           uint32 aBitRate,
-                           OsclRefCounterMemFrag& aConfig,
-                           bool aRateAdaptation,
-                           uint32 aRateAdaptationFeedBackFrequency,
-                           uint aMaxNumBuffResizes, uint aBuffResizeSize);
-        bool setPortParams(PVMFPortInterface* aPort,
-                           uint32 aTimeScale,
-                           uint32 aBitRate,
-                           OsclRefCounterMemFrag& aConfig,
-                           bool aRateAdaptation,
-                           uint32 aRateAdaptationFeedBackFrequency,
-                           bool aUserSpecifiedBuffParams,
-                           uint aMaxNumBuffResizes = 0, uint aBuffResizeSize = 0);
-        bool setPortSSRC(PVMFPortInterface* aPort, uint32 aSSRC);
-        bool setPortRTPParams(PVMFPortInterface* aPort,
-                              bool   aSeqNumBasePresent,
-                              uint32 aSeqNumBase,
-                              bool   aRTPTimeBasePresent,
-                              uint32 aRTPTimeBase,
-                              bool   aNPTTimeBasePresent,
-                              uint32 aNPTInMS,
-                              bool oPlayAfterASeek = false);
-        bool setPortRTCPParams(PVMFPortInterface* aPort,
-                               int aNumSenders,
-                               uint32 aRR,
-                               uint32 aRS);
-        void ActivateTimer(PVMFJitterBufferPortParams* pPort);
-
-        PVMFStatus setServerInfo(PVMFJitterBufferFireWallPacketInfo& aServerInfo);
-        PVMFStatus SetTransportType(PVMFPortInterface* aPort,
-                                    OSCL_String& aTransportType);
-        bool PurgeElementsWithNPTLessThan(NptTimeFormat &aNPTTime);
-
-        void setPlayBackThresholdInMilliSeconds(uint32 threshold)
-        {
-            iPlayBackThresholdInMilliSeconds = threshold;
-        }
-        void setJitterBufferRebufferingThresholdInMilliSeconds(uint32 aThreshold)
-        {
-            if (aThreshold < iJitterBufferDurationInMilliSeconds)
-            {
-                iJitterBufferUnderFlowThresholdInMilliSeconds = aThreshold;
-            }
-        }
-        void getJitterBufferRebufferingThresholdInMilliSeconds(uint32& aThreshold)
-        {
-            aThreshold = iJitterBufferUnderFlowThresholdInMilliSeconds;
-        }
-        void setJitterBufferDurationInMilliSeconds(uint32 duration)
-        {
-            iJitterBufferDurationInMilliSeconds = duration;
-        }
-        void getJitterBufferDurationInMilliSeconds(uint32& duration)
-        {
-            duration = iJitterBufferDurationInMilliSeconds;
-        }
-
-        PVMFStatus HasSessionDurationExpired(bool& aExpired)
-        {
-            aExpired = false;
-            if (oSessionDurationExpired)
-            {
-                aExpired = true;
-                return PVMFSuccess;
-            }
-
-            Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-            for (it = iPortParamsQueue.begin();
-                    it != iPortParamsQueue.end();
-                    it++)
-            {
-                if (PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK == it->tag)
-                {
-                    if (it->iRTCPStats.oRTCPByeRecvd)
-                    {
-                        aExpired = true;
-                    }
-                    else
-                    {
-                        aExpired = false;
-                        return PVMFSuccess;
-                    }
-                }
-            }
-            oSessionDurationExpired = aExpired;
-            return PVMFSuccess;
-        }
-
-
-        void SetSharedBufferResizeParams(uint32 maxNumResizes, uint32 resizeSize);
-        void GetSharedBufferResizeParams(uint32& maxNumResizes, uint32& resizeSize);
-
-        void SetJitterBufferMemPoolInfo(const PvmfPortBaseImpl* aPort, uint32 aSize, uint32 aResizeSize, uint32 aMaxNumResizes, uint32 aExpectedNumberOfBlocksPerBuffer);
-        void GetJitterBufferMemPoolInfo(const PvmfPortBaseImpl* aPort, uint32& aSize, uint32& aResizeSize, uint32& aMaxNumResizes, uint32& aExpectedNumberOfBlocksPerBuffer) const;
 
         PVMFPortInterface* getPortCounterpart(PVMFPortInterface* aPort);
         bool CheckForSpaceInJitterBuffer(PVMFPortInterface* aPort);
@@ -606,24 +377,15 @@
         bool IsJitterBufferReady(PVMFJitterBufferPortParams*, uint32& aClockDiff);
         PVMFStatus SendData(PVMFPortInterface*);
         PVMFStatus CheckJitterBufferEmpty(bool& oEmpty);
-        void JitterBufferFreeSpaceAvailable(OsclAny* aContext);
-        void EstimatedServerClockUpdated(OsclAny* aContext);
-        bool setPlayRange(int32 aStartTimeInMS,
-                          int32 aStopTimeInMS,
-                          bool oPlayAfterASeek,
-                          bool aStopTimeAvailable = true);
-        int32 iPlayStartTimeInMS;
-        int32 iPlayStopTimeInMS;
-        bool  iPlayStopTimeAvailable;
-        uint32 iJitterDelayPercent;
-        bool  oSessionDurationExpired;
-        bool  oStopOutputPorts;
-        PVMFTimestamp getActualMediaDataTSAfterSeek();
-        PVMFTimestamp getMaxMediaDataTS();
+
+
+        void LogSessionDiagnostics();
+        void LogPortDiagnostics();
+
         PVMFStatus CheckForEOS();
         PVMFStatus GenerateAndSendEOSCommand(PVMFPortInterface* aPort);
-        PVMFStatus NotifyOutOfBandEOS();
-        PVMFStatus SendBOSMessage(uint32 aStramID);
+
+
         bool QueueBOSCommand(PVMFPortInterface* aPort);
 
         PVMFStatus SetInPlaceProcessingMode(PVMFPortInterface* aPort,
@@ -634,20 +396,20 @@
             {
                 return PVMFFailure;
             }
-            portParamsPtr->oInPlaceProcessing = aInPlaceProcessing;
-            if (portParamsPtr->iJitterBuffer != NULL)
+
+            if (portParamsPtr->ipJitterBuffer != NULL)
             {
-                portParamsPtr->iJitterBuffer->SetInPlaceProcessingMode(aInPlaceProcessing);
+                portParamsPtr->ipJitterBuffer->SetInPlaceProcessingMode(aInPlaceProcessing);
             }
             return PVMFSuccess;
         }
 
-        /*
-         * RTCP timer related methods
-         */
-        uint32 iRTCPIntervalInMicroSeconds;
-        void setRTCPIntervalInMicroSecs(uint32 aRTCPInterval);
-        OsclRand iRandGen;
+
+        OsclAny* AllocatePort();
+        bool PushPortToVect(PVMFJitterBufferPort*& aPort);
+        bool PushPortParamsToQ(PVMFJitterBufferPortParams*& aPortParams);
+
+        // 	PvmfRtcpTimer* iRTCPTimer;
         void RtcpTimerEvent(PvmfRtcpTimer* pTimer);
         uint32 CalcRtcpInterval(PVMFJitterBufferPortParams* pFeedbackPort);
         PVMFStatus ProcessIncomingRTCPReport(PVMFSharedMediaMsgPtr&,
@@ -667,30 +429,16 @@
         PVMFStatus ComposeAndSendRateAdaptationFeedBackPacket(PVMFJitterBufferPortParams*&,
                 PVMFJitterBufferPortParams*&);
 
-        PVMFMediaClock *iRTCPClock;
-        PVMFTimebase_Tickcount iRTCPClockTimeBase;
 
-        /*
-         * Session Duration timer related
-         */
-        bool iUseSessionDurationTimerForEOS;
-        PvmfJBSessionDurationTimer* iSessionDurationTimer;
-        uint32 iSessionDurationInMS;
+
+
         void PVMFJBSessionDurationTimerEvent();
         void ComputeCurrentSessionDurationMonitoringInterval();
 
-        /* firewall packet related */
-        void DisableFireWallPackets()
-        {
-            iDisableFireWallPackets = true;
-        };
 
         PVMFStatus CreateFireWallPacketMemAllocators(PVMFJitterBufferPortParams*);
         PVMFStatus DestroyFireWallPacketMemAllocators(PVMFJitterBufferPortParams*);
 
-        PVMFJitterBufferFireWallPacketInfo iFireWallPacketInfo;
-        bool iDisableFireWallPackets;
-
         PVMFStatus SendFireWallPackets();
 
         bool Allocate(PVMFJitterBufferPortParams* it, PVMFSharedMediaDataPtr& fireWallPkt, OsclSharedPtr<PVMFMediaDataImpl>& mediaDataImpl, const int size);
@@ -700,119 +448,90 @@
         void CheckForFireWallPacketAttempts(bool &aComplete);
         PVMFStatus DecodeFireWallPackets(PVMFSharedMediaDataPtr aPacket,
                                          PVMFJitterBufferPortParams* aPortParamsPtr);
+        void SetJitterBufferSize(uint32 aBufferSz);
+        void GetJitterBufferSize(uint32& aBufferSz) const;
+        void SetJitterBufferChunkAllocator(OsclMemPoolResizableAllocator* aDataBufferAllocator);
+        bool RequestEventCallBack(JB_NOTIFY_CALLBACK aEventType, uint32 aDelay = 0, OsclAny* aContext = NULL);
+        void CancelEventCallBack(JB_NOTIFY_CALLBACK aEventType, OsclAny* aContext = NULL);
+        void HandleEvent_IncomingMediaInactivityDurationExpired();
+        void HandleEvent_NotifyReportBufferingStatus();
+        void HandleEvent_JitterBufferBufferingDurationComplete();
 
         /* Bitstream thinning releated */
         void UpdateRebufferingStats(PVMFEventType aEventType);
-        uint32 iNumUnderFlow;
-        uint32 iUnderFlowStartByte;
-        uint32 iUnderFlowEndByte;
-        PVMFTimestamp iUnderFlowEndPacketTS;
-        uint32 iDataDurationAccumulatedWhileBuffering;
-        uint32 iEstimatedBitRate;
-        uint32 iStartBufferingTickCount;
-        uint32 iThinningIntervalMS;
-        uint32 iPrevBufferingStartPacketTs;
+        PVMFNodeCapability iCapability;
+        PVMFJitterBufferNodeCmdQ iInputCommands;
+        PVMFJitterBufferNodeCmdQ iCurrentCommand;
+        PVMFPortVector<PVMFJitterBufferPort, OsclMemAllocator> iPortVector;
+        Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator> iPortParamsQueue;
+        Oscl_Vector<PVMFPortActivity, OsclMemAllocator> iPortActivityQueue;
 
-        /* Diagnostic log related */
-        uint32 iNumRunL;
+        bool	oStartPending;
+        bool	oStopOutputPorts;
+        uint32	iPauseTime;
 
-        PVLogger* iDiagnosticsLogger;
-        bool iDiagnosticsLogged;
-        void LogSessionDiagnostics();
-        void LogPortDiagnostics();
+        PVMFMediaClock*	ipClientPlayBackClock;
 
+        bool	iMediaReceiveingChannelPrepared;
+
+        PVMFJitterBufferMisc*	ipJitterBufferMisc;
+
+        bool iBroadCastSession;
+
+        JitterBufferFactory* ipJitterBufferFactory;
+        /////////////////////////////////////////////////////////////////////////////
+        //Following variables are shared with the jitter buffers associated with the session and are passed by refernce
+        //Node should only observe these and initialize it, and modification to these are supposed to be done by the
+        //jitter buffer only
+        bool    iDelayEstablished;
+        uint32	iJitterDelayPercent;
+        PVMFJitterBufferDataState iJitterBufferState;
+
+        /////////////////////////////////////////////////////////////////////////////
+        //Extention interface
+        PVMFJitterBufferExtensionInterfaceImpl* ipExtensionInterface;
+        //Variables to persist info passed on by the extension interface
+        uint32 iRebufferingThreshold;
+        uint32 iJitterBufferDurationInMilliSeconds;
+        uint32 iMaxInactivityDurationForMediaInMs;
+        uint32 iEstimatedServerKeepAheadInMilliSeconds;
         /* resizable reallocator configuration */
         uint32 iJitterBufferSz;
         uint iMaxNumBufferResizes;
         uint iBufferResizeSize;
+        uint32 iBufferingStatusIntervalInMs;
 
-        void SetJitterBufferSize(uint32 aBufferSz);
-        void GetJitterBufferSize(uint32& aBufferSz) const;
-        void SetJitterBufferChunkAllocator(OsclMemPoolResizableAllocator* aDataBufferAllocator, const PVMFPortInterface* aPort);
-
-        // Broadcast related
-        inline void SetBroadCastSession()
-        {
-            iBroadCastSession = true;
-        };
-
-        bool ProcessRTCPSRforAVSync();
-        bool iRTCPBcastAVSyncProcessed;
-        bool iBroadCastSession;
-
-        /*
-        "hasAudioRTCP" and "hasVideoRTCP" are fundamentally different than
-        PVMFJitterBufferPortParams::iRTCPStats.oSRRecvd because the former
-        indicates if the port exists at all, and the latter indicate if
-        sender reports were received.  This distinction is important when the
-        jitter buffer is required to wait for the first RTCP sender reports
-        before returning data.
-        */
-        bool hasAudioRTCP;
-        bool hasVideoRTCP;
-        bool gotRTCPReports;
-        uint32 prevMinPercentOccupancy;
-        uint32 consecutiveLowBufferCount;
-
-        //These arrays map a steamID (VID or AUD) to an RTCP or RTP port index.
-        uint32 RTCPPortIndex [NUM_PVMF_STREAM_TYPES];
-        uint32 InputPortIndex[NUM_PVMF_STREAM_TYPES];
-        ////////////
-        PVMFMediaClock * iNonDecreasingClock;
-        PVMFMediaClockNotificationsInterface *iNonDecreasingClockNotificationsInf;
-
-        PVMFMediaClockNotificationsInterface *iClientPlayBackClockNotificationsInf;
-        PVMFMediaClockNotificationsInterface *iEstimatedClockNotificationsInf;
-
-
-        //Request callback contexts
-        PVMFMediaClockNotificationsIntfContext	iNonDecClkNotificationsInfContext;
-        PVMFMediaClockNotificationsIntfContext	iClientPlayBkClkNotificationsInfContext;
-        PVMFMediaClockNotificationsIntfContext	iEstimatedClockNotificationsInfContext;
-
-        PVMFTimebase_Tickcount iNonDecreasingClockTimeBase;
-
-        uint32 iMaxInactivityDurationForMediaInMs;
+        PVMFJitterBufferFireWallPacketInfo iFireWallPacketInfo;
+        bool iDisableFireWallPackets;
+        bool iPlayingAfterSeek;
+        ///////////////////////////////////////////////////////////////////////
+        //EventNotification tracking vars
+        PVMFJBEventNotifier*	ipEventNotifier;
         uint32 iIncomingMediaInactivityDurationCallBkId;
         bool   iIncomingMediaInactivityDurationCallBkPending;
-
-        uint32 iBufferingStatusIntervalInMs;
         uint32 iNotifyBufferingStatusCallBkId;
         bool   iNotifyBufferingStatusCallBkPending;
-
-        uint32 iJitterBufferDurationInMilliSeconds;
         uint32 iJitterBufferDurationCallBkId;
         bool   iJitterBufferDurationCallBkPending;
 
-        uint32 iMonitorReBufferingCallBkId;
-        bool   iMonitorReBufferingCallBkPending;
+        //////////////////////// Diagnostic log related  //////////////////////
+        bool iDiagnosticsLogged;
+        uint32 iNumRunL;
+        ///////////////////////////////////////////////////////////////////////
 
-        uint32 iSendFirewallPacketCallBkId;
-        bool   iSendFirewallPacketCallBkPending;
-
-        enum JB_NOTIFY_CALLBACK
-        {
-            JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED,
-            JB_NOTIFY_REPORT_BUFFERING_STATUS,
-            JB_BUFFERING_DURATION_COMPLETE,
-            JB_MONITOR_REBUFFERING,
-            JB_NOTIFY_SEND_FIREWALL_PACKET,
-            JB_NOTIFY_WAIT_FOR_OOO_PACKET_COMPLETE  //OOO->Out Of Order
-        };
-
-        bool RequestEventCallBack(JB_NOTIFY_CALLBACK aEventType, uint32 aDelay = 0, OsclAny* aContext = NULL);
-        bool RequestCallBack(PVMFMediaClockNotificationsInterface *& aEventNotificationInterface, uint32 aDelay, uint32& aCallBkId, bool& aCallBackStatusPending, OsclAny* aContext = NULL);
-        void CancelEventCallBack(JB_NOTIFY_CALLBACK aEventType, OsclAny* aContext = NULL);
-        void CancelCallBack(PVMFMediaClockNotificationsInterface *& aEventNotificationInterface, uint32& aCallBkId, bool& aCallBackStatusPending);
-        bool IsCallbackPending(JB_NOTIFY_CALLBACK aEventType, OsclAny* aContext = NULL);
-        void ProcessCallBack(uint32, PVTimeComparisonUtils::MediaTimeStatus, uint32, const OsclAny*, PVMFStatus);
-
-        void HandleEvent_IncomingMediaInactivityDurationExpired();
-        void HandleEvent_NotifyReportBufferingStatus();
-        void HandleEvent_JitterBufferBufferingDurationComplete();
-        void HandleEvent_MonitorReBuffering();
-        void HandleEvent_NotifySendFirewallPacket();
-        void HandleEvent_NotifyWaitForOOOPacketComplete(OsclAny* aContext);
+        ///////////////////////////////////////////////////////////////////////
+        //Loggers
+        PVLogger* ipLogger;
+        PVLogger* ipDataPathLogger;
+        PVLogger* ipDataPathLoggerIn;
+        PVLogger* ipDataPathLoggerOut;
+        PVLogger* ipDataPathLoggerFlowCtrl;
+        PVLogger* ipClockLogger;
+        PVLogger* ipClockLoggerSessionDuration;
+        PVLogger* ipClockLoggerRebuff;
+        PVLogger* ipDiagnosticsLogger;
+        PVLogger* ipJBEventsClockLogger;
+        ///////////////////////////////////////////////////////////////////////
 };
 #endif
 
diff --git a/nodes/streaming/jitterbuffernode/include/pvmf_jitter_buffer_port.h b/nodes/streaming/jitterbuffernode/include/pvmf_jitter_buffer_port.h
index 97ccd50..b864c3d 100644
--- a/nodes/streaming/jitterbuffernode/include/pvmf_jitter_buffer_port.h
+++ b/nodes/streaming/jitterbuffernode/include/pvmf_jitter_buffer_port.h
@@ -36,31 +36,23 @@
 #ifndef PVMI_CONFIG_AND_CAPABILITY_H_INCLUDED
 #include "pvmi_config_and_capability.h"
 #endif
-#ifndef PVMF_JITTER_BUFFER_H_INCLUDED
-#include "pvmf_jitter_buffer.h"
-#endif
 #ifndef __MEDIA_CLOCK_CONVERTER_H
 #include "media_clock_converter.h"
 #endif
-#ifndef PVMF_STREAMING_MANAGER_INTERNAL_H_INCLUDED
-#include "pvmf_jitter_buffer_internal.h"
-#endif
-#ifndef PVMF_STREAMING_BUFFER_ALLOCATORS_H_INCLUDED
-#include "pvmf_streaming_buffer_allocators.h"
-#endif
-#ifndef PVMF_RTCP_TIMER_H_INCLUDED
-#include "pvmf_rtcp_timer.h"
-#endif
 #ifndef PVMI_PORT_CONFIG_KVP_H_INCLUDED
 #include "pvmi_port_config_kvp.h"
 #endif
 
+#define PVMF_JB_PORT_OVERRIDE 1
+
+class PVMFJitterBuffer;
+
 //Default vector reserve size
 #define PVMF_JITTER_BUFFER_NODE_PORT_VECTOR_RESERVE 10
 
 // Capability mime strings
-#define PVMF_JITTER_BUFFER_PORT_SPECIFIC_ALLOCATOR "x-pvmf/pvmfstreaming/socketmemallocator"
-#define PVMF_JITTER_BUFFER_PORT_SPECIFIC_ALLOCATOR_VALTYPE "x-pvmf/pvmfstreaming/socketmemallocator;valtype=ksv"
+#define PVMF_JITTER_BUFFER_PORT_SPECIFIC_ALLOCATOR			"x-pvmf/pvmfstreaming/socketmemallocator"
+#define PVMF_JITTER_BUFFER_PORT_SPECIFIC_ALLOCATOR_VALTYPE  "x-pvmf/pvmfstreaming/socketmemallocator;valtype=ksv"
 
 /** Enumerated list of port tags supported by this port */
 typedef enum
@@ -68,174 +60,58 @@
     PVMF_JITTER_BUFFER_PORT_TYPE_UNKNOWN = -1,
     PVMF_JITTER_BUFFER_PORT_TYPE_INPUT = 0,
     PVMF_JITTER_BUFFER_PORT_TYPE_OUTPUT = 1,
+    //Feedback Port: Only used in case of RTSP based streaming to send feedback
+    //reports (RTCP reports) for the RTP session going on at the input port
     PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK = 2
 } PVMFJitterBufferNodePortTag;
 
-typedef enum
-{
-    PVMF_JITTER_BUFFER_PORT_TRANSPORT_TYPE_UNKNOWN = -1,
-    PVMF_JITTER_BUFFER_PORT_TRANSPORT_TYPE_RTP = 0,
-    PVMF_JITTER_BUFFER_PORT_TRANSPORT_TYPE_ASF = 1,
-    PVMF_JITTER_BUFFER_PORT_TRANSPORT_TYPE_RDT = 2
-} PVMFJitterBufferNodePortTransportType;
-
+class PVMFJitterBufferNode;
+class PVMFJitterBufferPort;
 class PVMFJitterBufferPortParams
 {
     public:
-        PVMFJitterBufferPortParams()
-        {
-            id = -1;
-            tag = PVMF_JITTER_BUFFER_PORT_TYPE_UNKNOWN;
-            iPort = NULL;
-            iJitterBuffer = NULL;
-            timeScale = 0;
-            iSocketAlloc = 0;
-            iStartTimeInMS = 0;
-            iStopTimeInMS = 0;
-            oUpStreamEOSRecvd = false;
-            oEOSReached = false;
-            iNumMediaMsgsRecvd = 0;
-            iNumMediaMsgsSent = 0;
-            oJitterBufferEmpty = false;
-            oRateAdaptation = false;
-            iRateAdaptationFeedBackFrequency = 0;
-            iRateAdaptationRTCPRRCount = 0;
-            iRateAdaptationFreeBufferSpaceInBytes = 0;
-            oProcessIncomingMessages = true;
-            oProcessOutgoingMessages = true;
-            oInPlaceProcessing = false;
-            iMediaDataAlloc = NULL;
-            iMediaDataImplAlloc = NULL;
-            iMediaMsgAlloc = NULL;
-            iBufferAlloc = NULL;
-            oFireWallPacketRecvd = false;
-            iFireWallPacketCount = 0;
-            SSRC = 0;
-            oMonitorForRemoteActivity = true;
-            bTransportHeaderPreParsed = false;
-            iInitialRtcp = true;
-            iLastMsgTimeStamp = 0;
-
-            iRTCPIntervalInMicroSeconds = 0;
-            iRTCPTimer = NULL;
-            avg_rtcp_size = 0.0;
-            numSenders = RR = RS = 0;
-            iInitialRtcp = true;
-
-            RtcpBwConfigured = false;
-            eTransportType = PVMF_JITTER_BUFFER_PORT_TRANSPORT_TYPE_UNKNOWN;
-
-            iWaitForOOOPacketCallBkId = 0;
-            iWaitForOOOPacketCallBkPending = false;
-        };
-
-        ~PVMFJitterBufferPortParams()
-        {
-        }
-
         void ResetParams()
         {
-            oUpStreamEOSRecvd = false;
-            oEOSReached = false;
-            oJitterBufferEmpty = false;
-            oProcessIncomingMessages = true;
-            oProcessOutgoingMessages = true;
-            oMonitorForRemoteActivity = true;
-            bTransportHeaderPreParsed = false;
-            RtcpBwConfigured = false;
-            avg_rtcp_size = 0.0;
-            iJitterBufferMemPoolInfo.Init();
+            iJitterBufferEmpty = false;
+            iProcessIncomingMessages = true;
+            iProcessOutgoingMessages = true;
+            iMonitorForRemoteActivity = true;
         };
 
-        int32                       id;
-        PVMFJitterBufferNodePortTag tag;
-        PVMFPortInterface* iPort;
-        PVMFJitterBuffer*  iJitterBuffer;
-        class JitterBufferMemPoolInfo
+        PVMFJitterBufferPortParams(PVMFJitterBufferPort& aPort): irPort(aPort)
         {
-            public:
-                JitterBufferMemPoolInfo(): iSize(0), iResizeSize(0), iMaxNumResizes(0), iExpectedNumberOfBlocksPerBuffer(0) {}
-                void Init(uint32 aSize = 0, uint32 aExpectedNumberOfBlocksPerBuffer = 0, uint32 aResizeSize = 0, uint32 aMaxNumResizes = 0)
-                {
-                    iSize = aSize;
-                    iResizeSize = aResizeSize;
-                    iMaxNumResizes = aMaxNumResizes;
-                    iExpectedNumberOfBlocksPerBuffer = aExpectedNumberOfBlocksPerBuffer;
-                }
-                uint32 iSize;
-                uint32 iResizeSize;
-                uint32 iMaxNumResizes;
-                uint32 iExpectedNumberOfBlocksPerBuffer;
-        };
-        JitterBufferMemPoolInfo iJitterBufferMemPoolInfo;
+            iId = -1;
+            iTag = PVMF_JITTER_BUFFER_PORT_TYPE_UNKNOWN;
 
-        void SetJitterBufferMemPoolInfo(uint32 aSize, uint32 aResizeSize, uint32 aMaxNumResizes, uint32 aExpectedNumberOfBlocksPerBuffer)
-        {
-            iJitterBufferMemPoolInfo.Init(aSize, aResizeSize, aMaxNumResizes, aExpectedNumberOfBlocksPerBuffer);
+            ipJitterBuffer = NULL;				//Only Input ports will have the jitter buffer associated with them
+            iTimeScale = 0;
+            iBitrate = 0;
+            iLastMsgTimeStamp = 0;
+            iNumMediaMsgsRecvd = 0;
+            iNumMediaMsgsSent = 0;
+            iJitterBufferEmpty = true;
+            iProcessIncomingMessages = true;
+            iProcessOutgoingMessages = true;
+            iCanReceivePktFromJB = false;
+            iMonitorForRemoteActivity = false;
         }
 
-        void GetJitterBufferMemPoolInfo(uint32& aSize, uint32& aResizeSize, uint32& aMaxNumResizes, uint32& aExpectedNumberOfBlocksPerBuffer) const
-        {
-            aSize = iJitterBufferMemPoolInfo.iSize;
-            aResizeSize = iJitterBufferMemPoolInfo.iResizeSize;
-            aMaxNumResizes = iJitterBufferMemPoolInfo.iMaxNumResizes;
-            aExpectedNumberOfBlocksPerBuffer = iJitterBufferMemPoolInfo.iExpectedNumberOfBlocksPerBuffer;
-        }
-
-        uint32             timeScale;
-        uint32             bitrate;
-        MediaClockConverter mediaClockConverter;
-        PVMFTimestamp iLastMsgTimeStamp;
-
-        bool bTransportHeaderPreParsed;
-
-        OSCL_HeapString<PVMFJitterBufferNodeAllocator> iTransportType;
-        PVMFJitterBufferNodePortTransportType eTransportType;
-        OSCL_HeapString<PVMFJitterBufferNodeAllocator> iMimeType;
-        PVMFSharedSocketDataBufferAlloc* iSocketAlloc;
-        OsclRefCounterMemFrag iTrackConfig;
-        PVMFRTCPStats iRTCPStats;
-        int32 iStartTimeInMS;
-        int32 iStopTimeInMS;
-        bool  oUpStreamEOSRecvd;
-        bool  oEOSReached;
-        uint32 iNumMediaMsgsRecvd;
-        uint32 iNumMediaMsgsSent;
-        bool  oJitterBufferEmpty;
-        bool  oRateAdaptation;
-        uint32 iRateAdaptationFeedBackFrequency;
-        uint32 iRateAdaptationRTCPRRCount;
-        uint32 iRateAdaptationFreeBufferSpaceInBytes;
-        bool oProcessIncomingMessages;
-        bool oProcessOutgoingMessages;
-        bool oInPlaceProcessing;
-        /* Firewall packet related - valid only for RTP ports */
-        /* allocator for memory fragment */
-        OsclMemPoolFixedChunkAllocator* iMediaDataAlloc;
-        /* allocator for media data impl */
-        PVMFSimpleMediaBufferCombinedAlloc* iMediaDataImplAlloc;
-        /* Memory pool for simple media data */
-        OsclMemPoolFixedChunkAllocator *iMediaMsgAlloc;
-        OsclMemPoolResizableAllocator* iBufferAlloc;
-        bool oFireWallPacketRecvd;
-        uint32 iFireWallPacketCount;
-        uint32 SSRC;
-        bool oMonitorForRemoteActivity;
-
-        // RTCP interval related
-        bool RtcpBwConfigured;
-        int numSenders;
-        uint32 RR;
-        uint32 RS;
-        bool iInitialRtcp;
-        float avg_rtcp_size;
-        uint32 iRTCPIntervalInMicroSeconds;
-        PvmfRtcpTimer* iRTCPTimer;
-        //There may be OOO packets in the jitter buffer associated with the port.
-        //We wait for some time for the missing packet before forwarding the available packet out of thr Jitter Buffer
-        uint32 iWaitForOOOPacketCallBkId;
-        bool   iWaitForOOOPacketCallBkPending;
-
+        int32                       iId;
+        PVMFJitterBufferNodePortTag iTag;
+        PVMFJitterBufferPort&		irPort;
+        PVMFJitterBuffer*			ipJitterBuffer;				//Only Input ports will have the jitter buffer associated with them
+        uint32						iTimeScale;
+        uint32						iBitrate;
+        MediaClockConverter			iMediaClockConverter;
+        PVMFTimestamp				iLastMsgTimeStamp;
+        uint32						iNumMediaMsgsRecvd;
+        uint32						iNumMediaMsgsSent;
+        bool						iJitterBufferEmpty;
+        bool						iProcessIncomingMessages;
+        bool						iProcessOutgoingMessages;
+        bool						iCanReceivePktFromJB;
+        bool						iMonitorForRemoteActivity;
+        OSCL_HeapString<OsclMemAllocator> iMimeType;
 };
 
 /**
@@ -257,7 +133,7 @@
          * @param aTag Port tag
          * @param aNode Container node
          */
-        PVMFJitterBufferPort(int32 aTag, PVMFNodeInterface* aNode, const char*);
+        PVMFJitterBufferPort(int32 aTag, PVMFJitterBufferNode& aNode, const char*);
 
         /**
          * Constructor that allows the node to configure the data queues of this port.
@@ -272,7 +148,7 @@
          * This value should be between 0 - 100.
          */
         PVMFJitterBufferPort(int32 aTag,
-                             PVMFNodeInterface* aNode,
+                             PVMFJitterBufferNode& aNode,
                              uint32 aInCapacity,
                              uint32 aInReserve,
                              uint32 aInThreshold,
@@ -342,58 +218,30 @@
             return 0;
         }
 
-        OsclSharedPtr<PVMFSharedSocketDataBufferAlloc> getPortDataAlloc()
+
+
+        PVMFJitterBufferPortParams* GetPortParams()
         {
-            return iPortDataAlloc;
+            return iPortParams;
         }
-
-        uint32 getAvailableBufferSpace(bool aFirstParentChunkOnly)
-        {
-            if (iBufferAlloc != NULL)
-            {
-                return (iBufferAlloc->getAvailableBufferSpace(aFirstParentChunkOnly));
-            }
-            else if (iBufferNoResizeAlloc != NULL)
-            {
-                return (iBufferNoResizeAlloc->getAvailableBufferSpace(aFirstParentChunkOnly));
-            }
-            else
-            {
-                //Error
-                return 0;
-            }
-        }
-
-        PVMFJitterBufferPortParams* iPortParams;
-        // Corresponding port paired with current port
-        PVMFJitterBufferPort*       iPortCounterpart;
-        // Parameters of port paired with current port (e.g. iPortCounterpart)
-        PVMFJitterBufferPortParams* iCounterpartPortParams;
-
         //overrides from PVMFPortInterface
         PVMFStatus QueueOutgoingMsg(PVMFSharedMediaMsgPtr aMsg);
         bool IsOutgoingQueueBusy();
-
     private:
         void Construct();
 
-        void pvmiSetPortAllocatorSync(PvmiCapabilityAndConfig *aPort,
-                                      const char* aFormatValType);
+        PVMFFormatType						iFormat;
+        PVMFJitterBufferNodePortTag			iPortType;
+        PVMFJitterBufferPortParams*			iPortParams;
+        // Corresponding port paired with current port
+        PVMFJitterBufferPort*				iPortCounterpart;
+        // Parameters of port paired with current port
+        PVMFJitterBufferPortParams*			iCounterpartPortParams;
 
-        PVMFSocketBufferAllocator* iBufferNoResizeAlloc;
-        PVMFSMSharedBufferAllocWithReSize* iBufferAlloc;
-        OsclSharedPtr<PVMFSharedSocketDataBufferAlloc> iPortDataAlloc;
-
-        PVLogger *iLogger;
-        PVMFFormatType iFormat;
-        PVMFJitterBufferNodePortTag iPortType;
-
-        bool iInPlaceDataProcessing;
-
-        PVMFJitterBufferNode* iJitterBufferNode;
+        PVMFJitterBufferNode&				irJitterBufferNode;
+        PVLogger*							ipLogger;
 
         friend class PVMFJitterBufferNode;
-        friend class Oscl_TAlloc<PVMFJitterBufferPort, PVMFJitterBufferNodeAllocator>;
         friend class PVMFJitterBufferExtensionInterfaceImpl;
 };
 
diff --git a/nodes/streaming/jitterbuffernode/include/pvmf_rtcp_timer.h b/nodes/streaming/jitterbuffernode/include/pvmf_rtcp_timer.h
deleted file mode 100644
index 3493ef2..0000000
--- a/nodes/streaming/jitterbuffernode/include/pvmf_rtcp_timer.h
+++ /dev/null
@@ -1,197 +0,0 @@
-/* ------------------------------------------------------------------
- * Copyright (C) 1998-2009 PacketVideo
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
- * express or implied.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- * -------------------------------------------------------------------
- */
-#ifndef PVMF_RTCP_TIMER_H_INCLUDED
-#define PVMF_RTCP_TIMER_H_INCLUDED
-
-#ifndef OSCL_BASE_H_INCLUDED
-#include "oscl_base.h"
-#endif
-#ifndef PVLOGGER_H_INCLUDED
-#include "pvlogger.h"
-#endif
-#ifndef OSCL_SCHEDULER_AO_H_INCLUDED
-#include "oscl_scheduler_ao.h"
-#endif
-#ifndef PVMF_RETURN_CODES_H_INCLUDED
-#include "pvmf_return_codes.h"
-#endif
-#ifndef PVMF_SIMPLE_MEDIA_BUFFER_H_INCLUDED
-#include "pvmf_simple_media_buffer.h"
-#endif
-#ifndef PVMF_MEDIA_DATA_H_INCLUDED
-#include "pvmf_media_data.h"
-#endif
-#ifndef PVMF_STREAMING_BUFFER_ALLOCATORS_H_INCLUDED
-#include "pvmf_streaming_buffer_allocators.h"
-#endif
-#ifndef PVMF_SM_TUNABLES_H_INCLUDED
-#include "pvmf_sm_tunables.h"
-#endif
-
-/*
-oscl_mem_aligned_size(sizeof(PVMFMediaData)) +
-oscl_mem_aligned_size(sizeof(OsclRefCounterDA)) +
-oscl_mem_aligned_size(sizeof(MediaDataCleanupDA)) +
-sizeof(PVMFMediaMsgHeader));
-*/
-#define PVMF_MEDIA_DATA_CLASS_SIZE 128
-
-/* RTCP Packet Mem Pool Allocator */
-class PVMFRTCPMemPool
-{
-    public:
-        PVMFRTCPMemPool(uint32 aNumRTCPBufs = DEFAULT_RTCP_MEM_POOL_BUFFERS)
-        {
-            iMediaDataMemPool = NULL;
-            iMediaDataMemPool = OSCL_NEW(OsclMemPoolFixedChunkAllocator, (aNumRTCPBufs, PVMF_MEDIA_DATA_CLASS_SIZE));
-        }
-
-        ~PVMFRTCPMemPool()
-        {
-            if (iMediaDataMemPool)
-            {
-                iMediaDataMemPool->removeRef();
-            }
-        }
-        OsclSharedPtr<PVMFMediaDataImpl> getMediaDataImpl(uint32 size)
-        {
-            return (iRTCPRRMsgBufAlloc->createSharedBuffer(size));
-        }
-
-        OsclSharedPtr<PVMFSharedSocketDataBufferAlloc> iRTCPRRMsgBufAlloc;
-        /* Memory pool for media data objects */
-        OsclMemPoolFixedChunkAllocator* iMediaDataMemPool;
-};
-
-class PVMFRTCPStats
-{
-    public:
-        PVMFRTCPStats()
-        {
-            lastSenderReportNTP = 0;
-            lastSenderReportRTP = 0;
-            lastSenderReportTS = 0;
-            lastSenderReportRecvTime = 0;
-            packetLossUptoThisRR = 0;
-            maxSeqNumReceivedUptoThisRR = 0;
-            lastRRGenTime = 0;
-            oSRRecvd = false;
-            oRTCPByeRecvd = false;
-        };
-
-        PVMFRTCPStats(const PVMFRTCPStats& aSrc)
-        {
-            lastSenderReportNTP = aSrc.lastSenderReportNTP;
-            lastSenderReportRTP = aSrc.lastSenderReportRTP;
-            lastSenderReportTS = aSrc.lastSenderReportTS;
-            lastSenderReportRecvTime = aSrc.lastSenderReportRecvTime;
-            packetLossUptoThisRR = aSrc.packetLossUptoThisRR;
-            maxSeqNumReceivedUptoThisRR = aSrc.maxSeqNumReceivedUptoThisRR;
-            lastRRGenTime = aSrc.lastRRGenTime;
-            oSRRecvd = aSrc.oSRRecvd;
-            oRTCPByeRecvd = aSrc.oRTCPByeRecvd;
-        };
-
-        PVMFRTCPStats& operator=(const PVMFRTCPStats& a)
-        {
-            if (&a != this)
-            {
-                lastSenderReportNTP = a.lastSenderReportNTP;
-                lastSenderReportRTP = a.lastSenderReportRTP;
-                lastSenderReportTS = a.lastSenderReportTS;
-                lastSenderReportRecvTime = a.lastSenderReportRecvTime;
-                packetLossUptoThisRR = a.packetLossUptoThisRR;
-                maxSeqNumReceivedUptoThisRR = a.maxSeqNumReceivedUptoThisRR;
-                lastRRGenTime = a.lastRRGenTime;
-                oSRRecvd = a.oSRRecvd;
-                oRTCPByeRecvd = a.oRTCPByeRecvd;
-            }
-            return *this;
-        };
-
-        /* these are for feedback statistics. */
-        uint64	lastSenderReportNTP;
-        uint32	lastSenderReportRTP;
-        uint32	lastSenderReportTS;
-        uint64	lastSenderReportRecvTime;
-        int32	packetLossUptoThisRR;
-        int32   maxSeqNumReceivedUptoThisRR;
-        uint64	lastRRGenTime;
-        bool    oSRRecvd;
-        bool    oRTCPByeRecvd;
-};
-
-
-class PvmfRtcpTimer;
-
-/**
- * Observer class for the rtcp timer AO
- */
-class PvmfRtcpTimerObserver
-{
-    public:
-        virtual ~PvmfRtcpTimerObserver() {}
-        /**
-         * A timer event, indicating that the RTCP timer has expired.
-         */
-        virtual void RtcpTimerEvent(PvmfRtcpTimer* pTimer) = 0;
-};
-
-/**
- * RTCP timer object to Jitter Buffer node. This object generates events at
- * specified RTCP time intervals
- */
-class PvmfRtcpTimer : public OsclTimerObject
-{
-    public:
-        PvmfRtcpTimer(PvmfRtcpTimerObserver* aObserver);
-
-        virtual ~PvmfRtcpTimer();
-
-        /** Start RTCP Timer */
-        PVMFStatus Start();
-
-        /** Reset RTCP Timer */
-        PVMFStatus setRTCPInterval(uint32 rtcpTimeIntervalInMicroSecs);
-
-        /** Stop Timer events */
-        PVMFStatus Stop();
-
-        PVMFRTCPMemPool* getRTCPBuffAlloc()
-        {
-            return &iRTCPBufAlloc;
-        }
-
-    private:
-        void Run();
-
-        OsclSharedPtr<PVMFSharedSocketDataBufferAlloc> createRTCPRRBufAllocReSize();
-
-        uint32 iRTCPTimeIntervalInMicroSecs;
-        PvmfRtcpTimerObserver* iObserver;
-        PVLogger* iLogger;
-        bool iStarted;
-
-        PVMFRTCPMemPool iRTCPBufAlloc;
-        PVMFSMSharedBufferAllocWithReSize* iBufAlloc;
-};
-#endif // PVMF_RTCP_TIMER_H_INCLUDED
-
-
-
-
diff --git a/nodes/streaming/jitterbuffernode/jitterbuffer/common/Android.mk b/nodes/streaming/jitterbuffernode/jitterbuffer/common/Android.mk
new file mode 100644
index 0000000..4f1fea5
--- /dev/null
+++ b/nodes/streaming/jitterbuffernode/jitterbuffer/common/Android.mk
@@ -0,0 +1,43 @@
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := \
+	src/pvmf_jb_event_notifier.cpp \
+ 	src/pvmf_jb_firewall_pkts_impl.cpp \
+ 	src/pvmf_jb_jitterbuffermisc.cpp \
+ 	src/pvmf_jb_session_duration_timer.cpp \
+ 	src/pvmf_jitter_buffer_impl.cpp \
+ 	src/pvmf_rtcp_proto_impl.cpp \
+ 	src/pvmf_rtcp_timer.cpp
+
+
+LOCAL_MODULE := libpvjitterbuffer
+
+LOCAL_CFLAGS :=  $(PV_CFLAGS)
+
+
+
+LOCAL_STATIC_LIBRARIES := 
+
+LOCAL_SHARED_LIBRARIES := 
+
+LOCAL_C_INCLUDES := \
+	$(PV_TOP)/nodes/streaming/jitterbuffernode/jitterbuffer/common/src \
+ 	$(PV_TOP)/nodes/streaming/jitterbuffernode/jitterbuffer/common/include \
+ 	$(PV_TOP)/nodes/common/include \
+ 	$(PV_TOP)/nodes/streaming/streamingmanager/plugins/mshttp/config \
+ 	$(PV_TOP)/nodes/streaming/streamingmanager/include \
+ 	$(PV_TOP)/protocols/rtp/src \
+ 	$(PV_TOP)/nodes/streaming/common/include \
+ 	$(PV_INCLUDES)
+
+LOCAL_COPY_HEADERS_TO := $(PV_COPY_HEADERS_TO)
+
+LOCAL_COPY_HEADERS := \
+	include/pvmf_jb_event_notifier.h \
+ 	include/pvmf_jb_jitterbuffermisc.h \
+ 	include/pvmf_jitter_buffer.h \
+ 	include/pvmf_jitter_buffer_common_types.h \
+ 	include/pvmf_jitter_buffer_factory.h
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/nodes/streaming/jitterbuffernode/jitterbuffer/common/build/make/local.mk b/nodes/streaming/jitterbuffernode/jitterbuffer/common/build/make/local.mk
new file mode 100644
index 0000000..a88e91b
--- /dev/null
+++ b/nodes/streaming/jitterbuffernode/jitterbuffer/common/build/make/local.mk
@@ -0,0 +1,34 @@
+# Get the current local path as the first operation
+LOCAL_PATH := $(call get_makefile_dir)
+
+# Clear out the variables used in the local makefiles
+include $(MK)/clear.mk
+
+TARGET := pvjitterbuffer
+
+XCXXFLAGS += $(FLAG_COMPILE_WARNINGS_AS_ERRORS)
+
+# Added this to for osclconfig.h
+XINCDIRS += -I ../../../../../../common/include -I ../../../../../streamingmanager/plugins/mshttp/config -I ../../../../../streamingmanager/include -I ../../../../../../../protocols/rtp/src
+XINCDIRS += -I ../../../../../common/include
+
+SRCDIR := ../../src
+INCSRCDIR := ../../include
+
+# compose final src list for actual build
+SRCS = pvmf_jb_event_notifier.cpp \
+	 pvmf_jb_firewall_pkts_impl.cpp \
+	 pvmf_jb_jitterbuffermisc.cpp \
+	 pvmf_jb_session_duration_timer.cpp \
+	 pvmf_jitter_buffer_impl.cpp \
+	 pvmf_rtcp_proto_impl.cpp \
+	 pvmf_rtcp_timer.cpp
+
+HDRS = pvmf_jb_event_notifier.h \
+	pvmf_jb_jitterbuffermisc.h \
+	pvmf_jitter_buffer.h \
+	pvmf_jitter_buffer_common_types.h \
+	pvmf_jitter_buffer_factory.h 
+
+include $(MK)/library.mk
+
diff --git a/nodes/streaming/jitterbuffernode/jitterbuffer/common/include/pvmf_jb_event_notifier.h b/nodes/streaming/jitterbuffernode/jitterbuffer/common/include/pvmf_jb_event_notifier.h
new file mode 100644
index 0000000..30dae85
--- /dev/null
+++ b/nodes/streaming/jitterbuffernode/jitterbuffer/common/include/pvmf_jb_event_notifier.h
@@ -0,0 +1,195 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#ifndef PVMF_JB_EVENT_NOTIFIER_H
+#define PVMF_JB_EVENT_NOTIFIER_H
+
+#ifndef OSCL_BASE_H_INCLUDED
+#include "oscl_base.h"
+#endif
+
+#ifndef PVLOGGER_H_INCLUDED
+#include "pvlogger.h"
+#endif
+
+#ifndef PVMF_MEDIA_CLOCK_H_INCLUDED
+#include "pvmf_media_clock.h"
+#endif
+
+#ifndef PVMF_JITTER_BUFFER_COMMON_INTERNAL_H
+#include "pvmf_jitter_buffer_common_internal.h"
+#endif
+
+enum CLOCK_NOTIFICATION_INTF_TYPE
+{
+    CLOCK_NOTIFICATION_INTF_TYPE_UNKNOWN,
+    CLOCK_NOTIFICATION_INTF_TYPE_NONDECREASING,
+    CLOCK_NOTIFICATION_INTF_TYPE_CLIENTPLAYBACK,
+    CLOCK_NOTIFICATION_INTF_TYPE_ESTIMATEDSERVER
+};
+
+class PVMFJBEventNotifierObserver
+{
+    public:
+        virtual void ProcessCallback(CLOCK_NOTIFICATION_INTF_TYPE aClockNotificationInterfaceType, uint32 aCallBkId, const OsclAny* aContext, PVMFStatus aStatus) = 0;
+};
+class PVMFJBEventNotificationRequestInfo;
+class PVMFJBEventNotifierRequestInfo
+{
+    public:
+        PVMFJBEventNotifierRequestInfo(): ipRequestInfo(NULL)
+                , iCallBackId(0) {}
+        PVMFJBEventNotificationRequestInfo*	ipRequestInfo;
+        uint32	iCallBackId;
+};
+
+class NonDecClkNotificationInterfaceObserver: public PVMFMediaClockNotificationsObs
+{
+    public:
+        NonDecClkNotificationInterfaceObserver(Oscl_Vector<PVMFJBEventNotifierRequestInfo*, OsclMemAllocator>& aJBEvntNtfrRequestInfoVectNonDecClk)
+                : irJBEvntNtfrRequestInfoVectNonDecClk(aJBEvntNtfrRequestInfoVectNonDecClk)
+        {
+            ipLogger = PVLogger::GetLoggerObject("PVMFJBEventNotifier");
+        }
+        void ProcessCallBack(uint32 aCallBackID, PVTimeComparisonUtils::MediaTimeStatus aTimerAccuracy, uint32 aDelta, const OsclAny* aContextData, PVMFStatus aStatus);
+        virtual void NotificationsInterfaceDestroyed();
+    private:
+        Oscl_Vector<PVMFJBEventNotifierRequestInfo*, OsclMemAllocator>& irJBEvntNtfrRequestInfoVectNonDecClk;
+        PVLogger* ipLogger;
+};
+
+class EstimatedSrvrClkNotificationInterfaceObserver: public PVMFMediaClockNotificationsObs
+{
+    public:
+        EstimatedSrvrClkNotificationInterfaceObserver(Oscl_Vector<PVMFJBEventNotifierRequestInfo*, OsclMemAllocator>& aJBEvntNtfrRequestInfoVectEstimatedServClk)
+                : irJBEvntNtfrRequestInfoVectEstimatedServClk(aJBEvntNtfrRequestInfoVectEstimatedServClk)
+        {
+            ipLogger = PVLogger::GetLoggerObject("PVMFJBEventNotifier");
+        }
+        void ProcessCallBack(uint32 aCallBackID, PVTimeComparisonUtils::MediaTimeStatus aTimerAccuracy, uint32 aDelta, const OsclAny* aContextData, PVMFStatus aStatus);
+        virtual void NotificationsInterfaceDestroyed();
+    private:
+        Oscl_Vector<PVMFJBEventNotifierRequestInfo*, OsclMemAllocator>& irJBEvntNtfrRequestInfoVectEstimatedServClk;
+        PVLogger* ipLogger;
+};
+
+class ClientPlaybackClkNotificationInterfaceObserver: public PVMFMediaClockNotificationsObs
+{
+    public:
+        ClientPlaybackClkNotificationInterfaceObserver(Oscl_Vector<PVMFJBEventNotifierRequestInfo*, OsclMemAllocator>& aJBEvntNtfrRequestInfoVectClientPlaybackClk):
+                irJBEvntNtfrRequestInfoVectClientPlaybackClk(aJBEvntNtfrRequestInfoVectClientPlaybackClk)
+        {
+            ipLogger = PVLogger::GetLoggerObject("PVMFJBEventNotifier");
+        }
+        void ProcessCallBack(uint32 aCallBackID, PVTimeComparisonUtils::MediaTimeStatus aTimerAccuracy, uint32 aDelta, const OsclAny* aContextData, PVMFStatus aStatus);
+        virtual void NotificationsInterfaceDestroyed();
+    private:
+        Oscl_Vector<PVMFJBEventNotifierRequestInfo*, OsclMemAllocator>& irJBEvntNtfrRequestInfoVectClientPlaybackClk;
+        PVLogger* ipLogger;
+};
+
+class PVMFJBEventNotificationRequestInfo
+{
+    public:
+        PVMFJBEventNotificationRequestInfo(CLOCK_NOTIFICATION_INTF_TYPE aClockNotificationsIntfType, PVMFJBEventNotifierObserver* aObserver, OsclAny* aContext = NULL)
+                : iClockNotificationIntfType(aClockNotificationsIntfType)
+                , ipObserver(aObserver)
+                , ipContext(aContext)
+        {
+        }
+
+        PVMFJBEventNotificationRequestInfo(const PVMFJBEventNotificationRequestInfo& aJBNotificationReqinfo)
+        {
+            iClockNotificationIntfType = aJBNotificationReqinfo.iClockNotificationIntfType;
+            ipObserver = aJBNotificationReqinfo.ipObserver;
+            ipContext = aJBNotificationReqinfo.ipContext;
+        }
+
+        const OsclAny* GetContextData() const
+        {
+            return ipContext;
+        }
+
+        CLOCK_NOTIFICATION_INTF_TYPE GetMediaClockNotificationsInterfaceType() const
+        {
+            return  iClockNotificationIntfType;
+        }
+
+        PVMFJBEventNotifierObserver* GetObserver() const
+        {
+            return ipObserver;
+        }
+
+    private:
+        CLOCK_NOTIFICATION_INTF_TYPE iClockNotificationIntfType;
+        PVMFJBEventNotifierObserver* ipObserver;
+        const OsclAny* ipContext;
+};
+
+class PVMFJBEventNotifier
+{
+    public:
+        OSCL_IMPORT_REF static PVMFJBEventNotifier* New(PVMFMediaClock& aNonDecreasingClock, PVMFMediaClock& aClientPlaybackClock, PVMFMediaClock& aEstimatedServerClock);
+        OSCL_IMPORT_REF bool RequestCallBack(const PVMFJBEventNotificationRequestInfo& aNotificationRequestInfo, uint32 aDelay, uint32& aCallBkId);
+        OSCL_IMPORT_REF bool RequestAbsoluteTimeCallBack(const PVMFJBEventNotificationRequestInfo& aNotificationRequestInfo, uint32 aAbsoluteTime, uint32& aCallBkId);
+        OSCL_IMPORT_REF void CancelCallBack(const PVMFJBEventNotificationRequestInfo& aNotificationRequestInfo, uint32 aCallBkId);
+        OSCL_IMPORT_REF void CancelAllPendingCallbacks(CLOCK_NOTIFICATION_INTF_TYPE aType, PVMFJBEventNotifierObserver* aObserver = NULL);
+        OSCL_IMPORT_REF void CancelAllPendingCallbacks();
+        OSCL_IMPORT_REF ~PVMFJBEventNotifier();
+    private:
+        /**
+
+        */
+        PVMFJBEventNotifier(PVMFMediaClock& aNonDecreasingClock, PVMFMediaClock& aClientPlaybackClock, PVMFMediaClock& aEstimatedServerClock)
+                : irNonDecreasingClock(aNonDecreasingClock)
+                , irClientPlaybackClock(aClientPlaybackClock)
+                , irEstimatedServerClock(aEstimatedServerClock)
+                , ipNonDecreasingClockNotificationsInf(NULL)
+                , ipClientPlayBackClockNotificationsInf(NULL)
+                , ipEstimatedClockNotificationsInf(NULL)
+                , ipNonDecreasingClkNotificationInterfaceObserver(NULL)
+                , ipClientPlaybackClkNotificationInterfaceObserver(NULL)
+                , ipEstimatedSrvrClkNotificationInterfaceObserver(NULL)
+        {}
+
+        //Can leave: Yes
+        //Possible leave code (s): OsclErrNoMemory
+        void Construct();
+        void CleanUp();
+        void CancelCallBack(CLOCK_NOTIFICATION_INTF_TYPE aType, PVMFJBEventNotifierObserver* aObserver, uint32& aCallBkId);
+
+        PVMFMediaClock&	irNonDecreasingClock;
+        PVMFMediaClock&	irClientPlaybackClock;
+        PVMFMediaClock&	irEstimatedServerClock;
+
+        //Notification interfaces
+        PVMFMediaClockNotificationsInterface* ipNonDecreasingClockNotificationsInf;
+        PVMFMediaClockNotificationsInterface* ipClientPlayBackClockNotificationsInf;
+        PVMFMediaClockNotificationsInterface* ipEstimatedClockNotificationsInf;
+
+        NonDecClkNotificationInterfaceObserver*	ipNonDecreasingClkNotificationInterfaceObserver;
+        ClientPlaybackClkNotificationInterfaceObserver* ipClientPlaybackClkNotificationInterfaceObserver;
+        EstimatedSrvrClkNotificationInterfaceObserver* ipEstimatedSrvrClkNotificationInterfaceObserver;
+
+        //Todo: Need to consider data structure for efficeincy of removing elements in between (linked list?)
+        Oscl_Vector<PVMFJBEventNotifierRequestInfo*, OsclMemAllocator> iJBEvntNtfrRequestInfoVectEstimatedServClk;
+        Oscl_Vector<PVMFJBEventNotifierRequestInfo*, OsclMemAllocator> iJBEvntNtfrRequestInfoVectClientPlaybackClk;
+        Oscl_Vector<PVMFJBEventNotifierRequestInfo*, OsclMemAllocator> iJBEvntNtfrRequestInfoVectNonDecClk;
+
+        PVLogger* ipLogger;
+};
+#endif
diff --git a/nodes/streaming/jitterbuffernode/jitterbuffer/common/include/pvmf_jb_firewall_pkts_impl.h b/nodes/streaming/jitterbuffernode/jitterbuffer/common/include/pvmf_jb_firewall_pkts_impl.h
new file mode 100644
index 0000000..46125d1
--- /dev/null
+++ b/nodes/streaming/jitterbuffernode/jitterbuffer/common/include/pvmf_jb_firewall_pkts_impl.h
@@ -0,0 +1,158 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#ifndef PVMF_JB_FIREWALL_PKTS_IMPL_H_INCLUDED
+#define PVMF_JB_FIREWALL_PKTS_IMPL_H_INCLUDED
+
+#ifndef OSCL_BASE_H_INCLUDED
+#include "oscl_base.h"
+#endif
+#ifndef OSCL_VECTOR_H_INCLUDED
+#include "oscl_vector.h"
+#endif
+#ifndef OSCL_STRING_CONTAINERS_H_INCLUDED
+#include "oscl_string_containers.h"
+#endif
+#ifndef PVMF_RETURN_CODES_H_INCLUDED
+#include "pvmf_return_codes.h"
+#endif
+#ifndef OSCL_MEM_MEMPOOL_H_INCLUDED
+#include "oscl_mem_mempool.h"
+#endif
+
+#ifndef PVMF_SIMPLE_MEDIA_BUFFER_H_INCLUDED
+#include "pvmf_simple_media_buffer.h"
+#endif
+
+#ifndef PVMF_MEDIA_MSG_H_INCLUDED
+#include "pvmf_media_msg.h"
+#endif
+
+#ifndef PVMF_MEDIA_DATA_H_INCLUDED
+#include "pvmf_media_data.h"
+#endif
+
+#ifndef PVLOGGER_H_INCLUDED
+#include "pvlogger.h"
+#endif
+
+#ifndef PVMF_SM_TUNABLES_H_INCLUDED
+#include "pvmf_sm_tunables.h"
+#endif
+
+#ifndef PVMF_JITTER_BUFFER_COMMON_TYPES_H_INCLUDED
+#include "pvmf_jitter_buffer_common_types.h"
+#endif
+
+#ifndef PVMF_JB_EVENT_NOTIFIER_H
+#include "pvmf_jb_event_notifier.h"
+#endif
+
+/* Firewall packet related */
+#define PVMF_DEFAULT_FIREWALL_PKT_ATTEMPTS 3
+#define PVMF_MAX_FIREWALL_PKT_SIZE       8
+#define PVMF_MAX_RTP_FIREWALL_PKT_SIZE   12
+#define PVMF_FIREWALL_PKT_MEMPOOL_SIZE   256
+#define PVMF_FIREWALL_PKT_DEFAULT_SERVER_RESPONSE_TIMEOUT_IN_MS 1000
+class PVMFJBEventNotifier;
+///////////////////////////////////////////////////////////////////////////////
+//PVMFFireWallPacketFormat
+///////////////////////////////////////////////////////////////////////////////
+enum PVMFFireWallPacketFormat
+{
+    PVMF_FW_PKT_FORMAT_RTP,
+    PVMF_FW_PKT_FORMAT_PV
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//PVMFJitterBufferFireWallPacketInfo
+///////////////////////////////////////////////////////////////////////////////
+
+class PVFirewallPacketExchanger
+{
+    public:
+        static PVFirewallPacketExchanger* New(const RTPSessionInfoForFirewallExchange& aRTPSessionInfo);
+        ~PVFirewallPacketExchanger();
+        bool ComposeFirewallPacket(PVMFJitterBufferFireWallPacketFormat aFormat, uint32 aPacketCnt, PVMFPortInterface*& aRTPJitterBufferPort, PVMFSharedMediaMsgPtr& aSharedMediaMsg);
+        bool IsFirewallPacketResponseValid(PVMFSharedMediaMsgPtr& aMsg);//not implementated as of now
+        bool DecodeFirewallPacketResponse(PVMFSharedMediaMsgPtr& aMsg);//not implementated as of now
+    private:
+        PVFirewallPacketExchanger(const RTPSessionInfoForFirewallExchange& aRTPSessionInfo)
+        {
+            iRTPSessionInfoForFirewallExchange.ipRTPDataJitterBufferPort = aRTPSessionInfo.ipRTPDataJitterBufferPort;
+            iRTPSessionInfoForFirewallExchange.iSSRC = aRTPSessionInfo.iSSRC;
+            ipMediaDataAlloc	=	NULL;
+            ipMediaDataImplAlloc	=	NULL;
+            ipMediaMsgAlloc	=	NULL;
+        }
+        void Construct();
+        void CreateMemAllocators();
+        void DestroyMemoryAllocators();
+        bool Allocate(PVMFSharedMediaDataPtr& aFireWallPkt, OsclSharedPtr<PVMFMediaDataImpl>& aMediaDataImpl, const int aSize);
+
+        //Mem allocators
+        /* allocator for memory fragment */
+        OsclMemPoolFixedChunkAllocator* ipMediaDataAlloc;
+        /* allocator for media data impl */
+        PVMFSimpleMediaBufferCombinedAlloc* ipMediaDataImplAlloc;
+        /* Memory pool for simple media data */
+        OsclMemPoolFixedChunkAllocator* ipMediaMsgAlloc;
+
+        RTPSessionInfoForFirewallExchange	iRTPSessionInfoForFirewallExchange;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//PVFirewallPacketExchanger
+///////////////////////////////////////////////////////////////////////////////
+class PVMFJitterBufferMiscObserver;
+
+class PVFirewallPacketExchangeImpl: public PVMFJBEventNotifierObserver
+{
+    public:
+        OSCL_IMPORT_REF static PVFirewallPacketExchangeImpl* New(PVMFJitterBufferFireWallPacketInfo& aFireWallPacketExchangeInfo, PVMFJBEventNotifier& aEventNotifier, PVMFJitterBufferMiscObserver* aObserver);
+        OSCL_IMPORT_REF ~PVFirewallPacketExchangeImpl();
+        OSCL_IMPORT_REF void SetRTPSessionInfoForFirewallExchange(const RTPSessionInfoForFirewallExchange& aRTPSessionInfo);
+        OSCL_IMPORT_REF PVMFStatus InitiateFirewallPacketExchange();
+        OSCL_IMPORT_REF PVMFStatus CancelFirewallPacketExchange();
+        void ProcessCallback(CLOCK_NOTIFICATION_INTF_TYPE aClockNotificationInterfaceType, uint32 aCallBkId, const OsclAny* aContext, PVMFStatus aStatus);
+    private:
+        PVFirewallPacketExchangeImpl(PVMFJitterBufferFireWallPacketInfo& aFireWallPacketExchangeInfo, PVMFJBEventNotifier& aEventNotifier, PVMFJitterBufferMiscObserver* aObserver)
+                : irEventNotifier(aEventNotifier)
+                , ipObserver(aObserver)
+        {
+            iFireWallPacketExchangeInfo.iServerRoundTripDelayInMS = aFireWallPacketExchangeInfo.iServerRoundTripDelayInMS;
+            iFireWallPacketExchangeInfo.iNumAttempts = aFireWallPacketExchangeInfo.iNumAttempts;
+            iFireWallPacketExchangeInfo.iFormat = aFireWallPacketExchangeInfo.iFormat;
+            iCallBackId = 0;
+            iCallBackPending = false;
+            iNumAttemptsDone = 0;
+        }
+        void Construct();
+        void SendFirewallPackets();
+
+        uint32 iCallBackId;
+        bool iCallBackPending;
+        uint32 iNumAttemptsDone;
+
+        PVMFJBEventNotifier&	irEventNotifier;
+        PVMFJitterBufferMiscObserver*	ipObserver;
+        PVMFJitterBufferFireWallPacketInfo iFireWallPacketExchangeInfo;
+        Oscl_Vector<PVFirewallPacketExchanger*, OsclMemAllocator> iFirewallPacketExchangers;
+        PVLogger*	ipDataPathLoggerFireWall;
+};
+
+#endif//end of PVMF_JB_FIREWALL_PKTS_IMPL_H_INCLUDED
diff --git a/nodes/streaming/jitterbuffernode/jitterbuffer/common/include/pvmf_jb_jitterbuffermisc.h b/nodes/streaming/jitterbuffernode/jitterbuffer/common/include/pvmf_jb_jitterbuffermisc.h
new file mode 100644
index 0000000..077ddc5
--- /dev/null
+++ b/nodes/streaming/jitterbuffernode/jitterbuffer/common/include/pvmf_jb_jitterbuffermisc.h
@@ -0,0 +1,241 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#ifndef PVMF_JB_JITTERBUFFERMISC_H_INCLUDED
+#define PVMF_JB_JITTERBUFFERMISC_H_INCLUDED
+
+#ifndef PVMF_MEDIA_CLOCK_H_INCLUDED
+#include "pvmf_media_clock.h"
+#endif
+
+#ifndef PVMF_JB_EVENT_NOTIFIER_H
+#include "pvmf_jb_event_notifier.h"
+#endif
+
+#ifndef PVMF_JB_SESSION_DURATION_TIMER_H_INCLUDED
+#include "pvmf_jb_session_duration_timer.h"
+#endif
+
+#ifndef OSCL_MEM_H_INCLUDED
+#include "oscl_mem.h"
+#endif
+
+#ifndef PVMF_RTCP_PROTO_IMPL_H_INCLUDED
+#include "pvmf_rtcp_proto_impl.h"
+#endif
+
+#ifndef PVMFFIREWALLPKTS_H_INCLUDED
+#include "pvmf_jb_firewall_pkts_impl.h"
+#endif
+
+#ifndef PVMF_JITTER_BUFFER_PORT_H_INCLUDED
+#include "pvmf_jitter_buffer_port.h"
+#endif
+
+#ifndef RTSP_TIME_FORMAT_H
+#include "rtsp_time_formats.h"
+#endif
+
+class PVLogger;
+
+class PVMFJitterBufferMiscObserver
+{
+    public:
+        virtual void MessageReadyToSend(PVMFPortInterface*& aPort, PVMFSharedMediaMsgPtr& aMessage) = 0;
+        virtual void MediaReceivingChannelPrepared(bool aStatus) = 0;
+        virtual void ProcessRTCPControllerEvent(PVMFAsyncEvent& aEvent) = 0;
+        virtual void SessionSessionExpired() = 0;
+};
+
+class PVMFJitterBufferMisc: public PVRTCPProtoImplementorObserver
+            , public PVMFJBEventNotifierObserver
+            , public PvmfJBSessionDurationTimerObserver
+{
+    public:
+        OSCL_IMPORT_REF static PVMFJitterBufferMisc* New(PVMFJitterBufferMiscObserver* aObserver, PVMFMediaClock& aClientPlaybackClock, Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>& aPortParamsQueue);
+        OSCL_IMPORT_REF virtual ~PVMFJitterBufferMisc();
+        OSCL_IMPORT_REF void StreamingSessionStarted();
+        OSCL_IMPORT_REF void StreamingSessionStopped();
+        OSCL_IMPORT_REF void StreamingSessionPaused();
+        OSCL_IMPORT_REF void StreamingSessionBufferingStart();
+        OSCL_IMPORT_REF void StreamingSessionBufferingEnd();
+
+        OSCL_IMPORT_REF void SetBroadcastSession();
+
+        OSCL_IMPORT_REF void ResetEstimatedServerClock();
+
+        OSCL_IMPORT_REF bool PrepareForRepositioning(bool oUseExpectedClientClockVal, uint32 aExpectedClientClockVal);
+        OSCL_IMPORT_REF bool PurgeElementsWithNPTLessThan(NptTimeFormat &aNPTTime);
+
+        OSCL_IMPORT_REF bool IsSessionExpired();
+
+        OSCL_IMPORT_REF void Prepare();
+        OSCL_IMPORT_REF void Reset();
+
+        OSCL_IMPORT_REF PVMFStatus PrepareMediaReceivingChannel();
+        OSCL_IMPORT_REF PVMFStatus CancelMediaReceivingChannelPreparation();
+
+        OSCL_IMPORT_REF PVMFStatus ProcessFeedbackMessage(PVMFJitterBufferPortParams& aParam, PVMFSharedMediaMsgPtr aMsg);
+        OSCL_IMPORT_REF void SetRateAdaptationInfo(PVMFPortInterface* aPort, bool aRateAdaptation, uint32 aRateAdaptationFeedBackFrequency, uint32 aRateAdaptationFreeBufferSpaceInBytes = 0);
+        OSCL_IMPORT_REF void SetRTCPIntervalInMicroSecs(uint32 aRTCPInterval);
+        OSCL_IMPORT_REF bool SetPortRTCPParams(PVMFPortInterface* aPort, int aNumSenders, uint32 aRR, uint32 aRS);
+        OSCL_IMPORT_REF bool ResetSession();
+        OSCL_IMPORT_REF bool SetSessionDurationExpired();
+
+        OSCL_IMPORT_REF void MediaReceivingChannelPreparationRequired(bool aRequired);
+        OSCL_IMPORT_REF PVMFMediaClock& GetEstimatedServerClock();
+        OSCL_IMPORT_REF PVMFJBEventNotifier* GetEventNotifier();
+
+        OSCL_IMPORT_REF bool SetPlayRange(int32 aStartTimeInMS,
+                                          int32 aStopTimeInMS,
+                                          bool aPlayAfterASeek,
+                                          bool aStopTimeAvailable);
+
+        OSCL_IMPORT_REF bool SetPortSSRC(PVMFPortInterface* aPort, uint32 aSSRC);
+
+        OSCL_IMPORT_REF uint32 GetEstimatedServerClockValue();
+
+        OSCL_IMPORT_REF bool PlayStopTimeAvailable() const;
+
+        OSCL_IMPORT_REF void SetServerInfo(PVMFJitterBufferFireWallPacketInfo& aServerInfo);
+
+        OSCL_IMPORT_REF PVMFTimestamp GetMaxMediaDataTS();
+        OSCL_IMPORT_REF PVMFTimestamp GetActualMediaDataTSAfterSeek();
+
+        OSCL_IMPORT_REF void SetMediaClockConverter(PVMFPortInterface* apPort, MediaClockConverter* apMediaClockConverter);
+        OSCL_IMPORT_REF void ProcessFirstPacketAfterSeek();
+
+        void ProcessCallback(CLOCK_NOTIFICATION_INTF_TYPE aClockNotificationInterfaceType, uint32 aCallBkId, const OsclAny* aContext, PVMFStatus aStatus);
+        virtual void PVMFJBSessionDurationTimerEvent();
+        PVMFStatus RTCPPacketReceived(RTCPPacketType aPacketType, PVRTCPChannelController* aController);
+        PVMFStatus RTCPReportReadyToSend(PVMFPortInterface*& aPort, PVMFSharedMediaMsgPtr& aMessage);
+        PVMFStatus ProcessInfoEvent(PVMFAsyncEvent& aEvent);
+        void LogClientAndEstimatedServerClock(PVLogger* aLogger);
+
+    private:
+        PVMFJitterBufferMisc(PVMFJitterBufferMiscObserver* aObserver, PVMFMediaClock& aClientPlaybackClock, Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>& aPortParamsQueue):
+                irClientPlaybackClock(aClientPlaybackClock)
+                , ipObserver(aObserver)
+                , irPortParamsQueue(aPortParamsQueue)
+                , ipSessionDurationTimer(NULL)
+                , ipEventNotifier(NULL)
+                , ipRTCPProtoImplementator(NULL)
+                , ipFireWallPacketExchangerImpl(NULL)
+                , ipEstimatedServerClock(NULL)
+                , ipWallClock(NULL)
+                , ipNonDecreasingClock(NULL)
+                , ipJBEventsClockLogger(NULL)
+                , ipClockLoggerSessionDuration(NULL)
+                , ipClockLogger(NULL)
+                , ipDataPathLoggerIn(NULL)
+                , ipDataPathLoggerOut(NULL)
+                , ipDataPathLoggerRTCP(NULL)
+                , ipLogger(NULL)
+        {
+            ResetParams(false);
+        }
+
+        void Construct();
+        bool CreateProtocolObjects();
+        bool LookupRTCPChannelParams(PVMFPortInterface* rtpPort, PVMFPortInterface*& rtcpPort, PVMFJitterBuffer*& rtpPktJitterBuffer);
+        bool LocateFeedBackPort(PVMFJitterBufferPortParams*& aInputPortParamsPtr, PVMFJitterBufferPortParams*& aFeedBackPortParamsPtr);
+        bool FirewallPacketExchangerRequired() const;
+        bool RTCPProtocolImplementorRequired() const;
+
+        void ResetParams(bool aReleaseMemory = true);
+        void ComputeCurrentSessionDurationMonitoringInterval()
+        {
+            /* Restart the session duration timer after accounting for any elapsed time */
+            uint64 elapsedTime = ipSessionDurationTimer->GetMonitoringIntervalElapsed();
+            uint32 elapsedTime32 = Oscl_Int64_Utils::get_uint64_lower32(elapsedTime);
+            ipSessionDurationTimer->UpdateElapsedSessionDuration(elapsedTime32);
+            uint32 totalSessionDuration = ipSessionDurationTimer->getSessionDurationInMS();
+            uint32 elapsedSessionDuration = ipSessionDurationTimer->GetElapsedSessionDurationInMS();
+            uint32 interval = (totalSessionDuration - elapsedSessionDuration);
+            if (interval > PVMF_JITTER_BUFFER_NODE_SESSION_DURATION_MONITORING_INTERVAL_MAX_IN_MS)
+            {
+                interval = PVMF_JITTER_BUFFER_NODE_SESSION_DURATION_MONITORING_INTERVAL_MAX_IN_MS;
+            }
+            ipSessionDurationTimer->setCurrentMonitoringIntervalInMS(interval);
+            PVMF_JB_LOGCLOCK_SESSION_DURATION((0, "PVMFJBN::ComputeCurrentSessionDurationMonitoringInterval - TotalDuration=%d, ElapsedDuration=%d, CurrMonitoringInterval=%d", totalSessionDuration, elapsedSessionDuration, interval));
+        }
+
+        PVMFMediaClock&		irClientPlaybackClock;		//Reference to the client playback clock passed on by its observer.
+        PVMFJitterBufferMiscObserver*	ipObserver;
+        Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>& irPortParamsQueue;
+
+        Oscl_Vector<RTPSessionInfoForFirewallExchange, OsclMemAllocator> iRTPExchangeInfosForFirewallExchange;
+        struct RateAdapatationInfo
+        {
+            RateAdapatationInfo(): iPort(NULL) {}
+            PVMFPortInterface* iPort;
+            RTPRateAdaptationInfo iRateAdapatationInfo;
+        };
+        Oscl_Vector<RateAdapatationInfo, OsclMemAllocator> iRateAdaptationInfos;
+
+        struct RTCPParams
+        {
+            RTCPParams(): iFeedbackPort(NULL), iNumSenders(0), iRR(0), iRS(0) {}
+            PVMFPortInterface* iFeedbackPort;
+            int iNumSenders;
+            uint32 iRR;
+            uint32 iRS;
+        };
+        Oscl_Vector<RTCPParams, OsclMemAllocator> iRTCPParamsVect;
+
+        //Sesion Info
+        uint32	iSessionDuration;
+        bool	iStreamingSessionExpired;
+        bool	iPlayDurationAvailable;
+        bool	iBroadcastSession;
+
+        bool UseSessionDurationTimerForEOS();
+        bool iUseSessionDurationTimerForEOS;
+
+        uint32  iPlayStartTimeInMS;
+        uint32  iPlayStopTimeInMS;
+        bool	iPlayStopTimeAvailable;
+
+        bool	iFireWallPacketsExchangeEnabled;
+
+        bool   iEstimatedServerClockUpdateCallbackPending;
+        uint32 iEstimatedServerClockUpdateCallbackId;
+
+        PvmfJBSessionDurationTimer*		ipSessionDurationTimer;
+        PVMFJBEventNotifier*			ipEventNotifier;
+        PVRTCPProtoImplementor*			ipRTCPProtoImplementator;
+        PVFirewallPacketExchangeImpl*	ipFireWallPacketExchangerImpl;
+
+        PVMFMediaClock*		ipEstimatedServerClock;		//Estimation of the estimated server clock.
+        PVMFMediaClock*		ipWallClock;				//A continously increasing clock.
+        PVMFMediaClock*		ipNonDecreasingClock;		//Always increasing clock but may not be continous (may get pasued in between depending on the state of the streaming session)
+        PVMFTimebase_Tickcount iEstimatedServerClockTimeBase;
+        PVMFTimebase_Tickcount iWallClockTimeBase;
+        PVMFTimebase_Tickcount iNonDecreasingTimeBase;
+
+        PVLogger* ipJBEventsClockLogger;
+        PVLogger* ipRTCPDataPathLoggerIn;
+        PVLogger* ipClockLoggerSessionDuration;
+        PVLogger* ipClockLoggerRebuff;
+        PVLogger* ipClockLogger;
+        PVLogger* ipDataPathLoggerIn;
+        PVLogger* ipDataPathLoggerOut;
+        PVLogger* ipDataPathLoggerRTCP;
+        PVLogger* ipLogger;
+};
+
+#endif
diff --git a/nodes/streaming/jitterbuffernode/include/pvmf_jb_inactivity_timer.h b/nodes/streaming/jitterbuffernode/jitterbuffer/common/include/pvmf_jb_session_duration_timer.h
similarity index 94%
rename from nodes/streaming/jitterbuffernode/include/pvmf_jb_inactivity_timer.h
rename to nodes/streaming/jitterbuffernode/jitterbuffer/common/include/pvmf_jb_session_duration_timer.h
index 80be5a1..318657a 100644
--- a/nodes/streaming/jitterbuffernode/include/pvmf_jb_inactivity_timer.h
+++ b/nodes/streaming/jitterbuffernode/jitterbuffer/common/include/pvmf_jb_session_duration_timer.h
@@ -15,8 +15,8 @@
  * and limitations under the License.
  * -------------------------------------------------------------------
  */
-#ifndef PVMF_JB_INACTIVITY_TIMER_H_INCLUDED
-#define PVMF_JB_INACTIVITY_TIMER_H_INCLUDED
+#ifndef PVMF_JB_SESSION_DURATION_TIMER_H_INCLUDED
+#define PVMF_JB_SESSION_DURATION_TIMER_H_INCLUDED
 
 #ifndef OSCL_BASE_H_INCLUDED
 #include "oscl_base.h"
@@ -138,7 +138,7 @@
         uint32 iSessionDurationInMS;
         uint32 iElapsedSessionDurationInMS;
         PvmfJBSessionDurationTimerObserver* iObserver;
-        PVLogger* iLogger;
+        PVLogger* ipLogger;
         bool iStarted;
 
         PVMFMediaClock iClock;
@@ -150,11 +150,11 @@
         uint32 iEstimatedServClockValAtLastCancel;
         uint32 iExpectedEstimatedServClockValAtSessionEnd;
 
-        PVLogger *iClockLoggerSessionDuration;
+        PVLogger *ipClockLoggerSessionDuration;
 };
 
 
-#endif // PVMF_JB_INACTIVITY_TIMER_H_INCLUDED
+#endif // PVMF_JB_SESSION_DURATION_TIMER_H_INCLUDED
 
 
 
diff --git a/nodes/streaming/jitterbuffernode/jitterbuffer/common/include/pvmf_jitter_buffer.h b/nodes/streaming/jitterbuffernode/jitterbuffer/common/include/pvmf_jitter_buffer.h
new file mode 100644
index 0000000..788af4d
--- /dev/null
+++ b/nodes/streaming/jitterbuffernode/jitterbuffer/common/include/pvmf_jitter_buffer.h
@@ -0,0 +1,1297 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#ifndef PVMF_JITTER_BUFFER_H_INCLUDED
+#define PVMF_JITTER_BUFFER_H_INCLUDED
+
+#ifndef OSCL_BASE_H_INCLUDED
+#include "oscl_base.h"
+#endif
+#ifndef OSCL_VECTOR_H_INCLUDED
+#include "oscl_vector.h"
+#endif
+#ifndef OSCL_STRING_CONTAINERS_H_INCLUDED
+#include "oscl_string_containers.h"
+#endif
+#ifndef OSCL_MEM_MEMPOOL_H_INCLUDED
+#include "oscl_mem_mempool.h"
+#endif
+#ifndef PVLOGGER_H_INCLUDED
+#include "pvlogger.h"
+#endif
+#ifndef PVMF_TIMESTAMP_H_INCLUDED
+#include "pvmf_timestamp.h"
+#endif
+#ifndef PVMF_MEDIA_DATA_H_INCLUDED
+#include "pvmf_media_data.h"
+#endif
+#ifndef PVMF_MEDIA_FRAG_GROUP_H_INCLUDED
+#include "pvmf_media_frag_group.h"
+#endif
+#ifndef PVMF_SM_TUNABLES_H_INCLUDED
+#include "pvmf_sm_tunables.h"
+#endif
+#ifndef __MEDIA_CLOCK_CONVERTER_H
+#include "media_clock_converter.h"
+#endif
+#ifndef PVMF_MEDIA_MSG_FORMAT_IDS_H_INCLUDED
+#include "pvmf_media_msg_format_ids.h"
+#endif
+
+#ifndef PVMF_EVENT_HANDLING_H_INCLUDED
+#include "pvmf_event_handling.h"
+#endif
+
+#ifndef PVMF_JITTER_BUFFER_COMMON_TYPES_H_INCLUDED
+#include "pvmf_jitter_buffer_common_types.h"
+#endif
+
+#ifndef PVMF_MEDIA_CLOCK_H_INCLUDED
+#include "pvmf_media_clock.h"
+#endif
+
+#ifndef PVMF_JITTER_BUFFER_COMMON_INTERNAL_H
+#include "pvmf_jitter_buffer_common_internal.h"
+#endif
+#ifndef OSCL_DLL_H_INCLUDED
+#include "oscl_dll.h"
+#endif
+
+#ifndef PVMF_JB_EVENT_NOTIFIER_H
+#include "pvmf_jb_event_notifier.h"
+#endif
+
+#ifndef PVMF_FORMAT_TYPE_H_INCLUDED
+#include "pvmf_format_type.h"
+#endif
+
+class PVMFSMSharedBufferAllocWithReSize;
+
+
+class PVMFJitterBufferStats
+{
+    public:
+        PVMFJitterBufferStats()
+        {
+            ResetStats();
+        }
+
+        void ResetStats()
+        {
+            totalNumPacketsReceived = 0;
+            totalNumPacketsRegistered = 0;
+            totalPacketsLost = 0;
+            totalNumPacketsRetrieved = 0;
+            //Timestamp info
+            maxTimeStampRegistered = 0;
+            maxTimeStampRetrieved = 0;
+
+            //Occupancy related
+            maxOccupancy = 0;
+            currentOccupancy = 0;
+            totalNumBytesRecvd = 0;
+            packetSizeInBytesLeftInBuffer = 0;
+
+            //Seq num info
+            maxSeqNumReceived = 0;
+            maxSeqNumRegistered = 0;
+            lastRegisteredSeqNum = 0;
+            lastRetrievedSeqNum = 0;
+            seqNumBase = 0;
+
+            maxTimeStampRetrievedWithoutRTPOffset = 0;
+            ssrc = 0;
+        }
+
+        //Packet info
+        uint32 totalNumPacketsReceived;
+        uint32 totalNumPacketsRegistered;
+        uint32 totalPacketsLost;
+        uint32 totalNumPacketsRetrieved;
+
+        //Timestamp info
+        PVMFTimestamp maxTimeStampRegistered;
+        PVMFTimestamp maxTimeStampRetrieved;
+
+        //Occupancy related
+        uint32 maxOccupancy;
+        uint32 currentOccupancy;
+        uint32 totalNumBytesRecvd;
+        uint32 packetSizeInBytesLeftInBuffer;
+
+        //Seq num info
+        uint32 maxSeqNumReceived;
+        uint32 maxSeqNumRegistered;
+        uint32 lastRegisteredSeqNum;
+        uint32 lastRetrievedSeqNum;
+        uint32 seqNumBase;
+
+        PVMFTimestamp maxTimeStampRetrievedWithoutRTPOffset;
+        uint32 ssrc;
+};
+
+class MediaCommandMsgHolder
+{
+    public:
+        MediaCommandMsgHolder()
+        {
+            iPreceedingMediaMsgSeqNumber = 0xFFFFFFFF;
+        };
+
+        MediaCommandMsgHolder(const MediaCommandMsgHolder& a)
+        {
+            iPreceedingMediaMsgSeqNumber = a.iPreceedingMediaMsgSeqNumber;
+            iCmdMsg = a.iCmdMsg ;
+        }
+
+        MediaCommandMsgHolder& operator=(const MediaCommandMsgHolder& a)
+        {
+            if (&a != this)
+            {
+                iPreceedingMediaMsgSeqNumber = a.iPreceedingMediaMsgSeqNumber;
+                iCmdMsg = a.iCmdMsg ;
+            }
+            return (*this);
+        }
+
+        uint32 iPreceedingMediaMsgSeqNumber;
+        PVMFSharedMediaMsgPtr iCmdMsg;
+};
+
+typedef enum
+{
+    PVMF_JITTER_BUFFER_ADD_ELEM_ERROR,
+    PVMF_JITTER_BUFFER_ADD_ELEM_PACKET_OVERWRITE,
+    PVMF_JITTER_BUFFER_ADD_ELEM_SUCCESS
+} PVMFJitterBufferAddElemStatus;
+
+template<class Alloc>
+class PVMFDynamicCircularArray
+{
+    public:
+        PVMFDynamicCircularArray()
+        {
+            iNumElems = 0;
+            iArraySize = 0;
+            iMaxSeqNumAdded = 0;
+            iLastRetrievedSeqNum = 0;
+            iLastRetrievedTS = 0;
+            iReadOffset = 0;
+            iFirstSeqNumAdded = 0;
+
+            ipLogger = PVLogger::GetLoggerObject("PVMFDynamicCircularArray");
+            ipDataPathLoggerIn = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffer.in");
+            ipDataPathLoggerOut = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffer.out");
+        }
+
+        PVMFDynamicCircularArray(uint32 n)
+        {
+            iNumElems = 0;
+            iArraySize = n;
+            iMaxSeqNumAdded = 0;
+            iLastRetrievedSeqNum = 0;
+            iLastRetrievedTS = 0;
+            iReadOffset = 0;
+            iFirstSeqNumAdded = 0;
+
+            iMediaPtrVec.reserve(iArraySize);
+            InitVector(iArraySize);
+
+            ipLogger = PVLogger::GetLoggerObject("PVMFDynamicCircularArray");
+            ipDataPathLoggerIn = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffer.in");
+            ipDataPathLoggerOut = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffer.out");
+        }
+
+        virtual ~PVMFDynamicCircularArray()
+        {
+            if (!iMediaPtrVec.empty())
+            {
+                typedef typename Oscl_Vector<PVMFSharedMediaDataPtr, Alloc>::iterator iterator_type;
+                iterator_type it;
+
+                for (it = iMediaPtrVec.begin(); it != iMediaPtrVec.end(); it++)
+                {
+                    if (it->GetRep() != NULL)
+                    {
+                        it->Unbind();
+                    }
+                }
+            }
+        }
+
+        void Clear()
+        {
+            PVMF_JB_LOGINFO((0, "PVMFDynamicCircularArray::Clear - Cleared Jitter Buffer"));
+            typedef typename Oscl_Vector<PVMFSharedMediaDataPtr, Alloc>::iterator iterator_type;
+            iterator_type it;
+            for (it = iMediaPtrVec.begin(); it != iMediaPtrVec.end(); it++)
+            {
+                if (it->GetRep() != NULL)
+                {
+                    it->Unbind();
+                }
+            }
+            iNumElems = 0;
+            iMediaPtrVec.clear();
+            InitVector(iArraySize);
+
+            iMaxSeqNumAdded = 0;
+            iLastRetrievedSeqNum = 0;
+            iLastRetrievedTS = 0;
+            iReadOffset = 0;
+            iFirstSeqNumAdded = 0;
+            iJitterBufferStats.currentOccupancy = 0;
+            iJitterBufferStats.packetSizeInBytesLeftInBuffer = 0;
+        }
+
+        void ResetJitterBufferStats()
+        {
+            iJitterBufferStats.ResetStats();
+        }
+
+        uint32 getNumElements()
+        {
+            return iNumElems;
+        }
+
+        uint32 getArraySize()
+        {
+            return iArraySize;
+        }
+
+        void growCircularArray(uint32 newSize)
+        {
+            if (newSize > iArraySize)
+            {
+                /*
+                 * This transfers the existing contents
+                 * as well
+                 */
+                iMediaPtrVec.reserve(newSize);
+                /* Initialize the new space */
+                InitVector((newSize - iArraySize));
+                iArraySize = newSize;
+            }
+        }
+
+        void setFirstSeqNumAdded(uint32 aFirstSeqNumAdded)
+        {
+            iFirstSeqNumAdded = aFirstSeqNumAdded;
+        }
+
+        //validations on timestamp and seqnum has to be done by the user of the dynamic circular array.
+        PVMFJitterBufferAddElemStatus addElement(PVMFSharedMediaDataPtr& elem, uint32 aSeqNumBase)
+        {
+            PVMFJitterBufferAddElemStatus oRet = PVMF_JITTER_BUFFER_ADD_ELEM_SUCCESS;
+
+            iJitterBufferStats.totalNumPacketsReceived++;
+            iJitterBufferStats.ssrc = elem->getStreamID();
+            uint32 seqNum = elem->getSeqNum();
+            /* Get packet size */
+            uint32 size = 0;
+            uint32 numFragments = elem->getNumFragments();
+            for (uint32 i = 0; i < numFragments; i++)
+            {
+                OsclRefCounterMemFrag memFragIn;
+                elem->getMediaFragment(i, memFragIn);
+                size += memFragIn.getMemFrag().len;
+            }
+            iJitterBufferStats.totalNumBytesRecvd += size;
+            iJitterBufferStats.packetSizeInBytesLeftInBuffer += size;
+
+            //Assumptions:
+            //- Validations based on ts and SeqNum are performed by the calling code,
+            //- By the time the code flows at this point we had already resetted the
+            //  maxSeqNumRegistered to rolled over value in the derived implementation
+
+            if (seqNum > iJitterBufferStats.maxSeqNumRegistered)
+            {
+                iJitterBufferStats.maxSeqNumReceived = seqNum;
+            }
+            uint32 offset = (seqNum - aSeqNumBase) % iArraySize;
+
+            PVMFSharedMediaDataPtr currElem = iMediaPtrVec[offset];
+            if (currElem.GetRep() == NULL)
+            {
+                /* Register Packet */
+                iMediaPtrVec[offset] = elem;
+                iNumElems++;
+                iJitterBufferStats.totalNumPacketsRegistered++;
+                iJitterBufferStats.lastRegisteredSeqNum = seqNum;
+                if (seqNum > iJitterBufferStats.maxSeqNumRegistered)
+                {
+                    iJitterBufferStats.maxSeqNumRegistered = seqNum;
+                    iJitterBufferStats.maxTimeStampRegistered = elem->getTimestamp();
+                }
+                iJitterBufferStats.currentOccupancy = iNumElems;
+                PVMF_JB_LOGDATATRAFFIC_IN((0, "AddElement seqNum %d iNumElems %d", seqNum, iNumElems));
+                return (oRet);
+            }
+            else if (currElem->getSeqNum() != seqNum)
+            {
+                PVMF_JB_LOGDATATRAFFIC_IN((0, "[0x%x] JB OW: iReadOffset=%d, iNumElemsLeft=%d, iLastRetrievedSeqNum=%d, old seqNum=%d, new seqNum=%d",
+                                           this,
+                                           iReadOffset,
+                                           iNumElems,
+                                           iLastRetrievedSeqNum,
+                                           seqNum,
+                                           currElem->getSeqNum()));
+                /* Overwrite existing data */
+                currElem.Unbind();
+                /* Register Packet */
+                iMediaPtrVec[offset] = elem;
+                iJitterBufferStats.totalNumPacketsRegistered++;
+                iJitterBufferStats.lastRegisteredSeqNum = seqNum;
+                if (seqNum > iJitterBufferStats.maxSeqNumRegistered)
+                {
+                    iJitterBufferStats.maxSeqNumRegistered = seqNum;
+                    iJitterBufferStats.maxTimeStampRegistered = elem->getTimestamp();
+                }
+                iJitterBufferStats.currentOccupancy = iNumElems;
+                oRet = PVMF_JITTER_BUFFER_ADD_ELEM_PACKET_OVERWRITE;
+                return (oRet);
+            }
+            else
+            {
+                PVMF_JB_LOGDATATRAFFIC_IN((0, "[0x%x]Duplicate packet iNumElems %d", this, iNumElems));
+            }
+            /* Duplicate Packet - Ignore */
+            return (oRet);
+        }
+
+        PVMFSharedMediaDataPtr retrieveElement()
+        {
+            PVMFSharedMediaDataPtr dataPkt;
+            uint32 count = 0;
+            while (dataPkt.GetRep() == NULL)
+            {
+                /* No data */
+                if (count > iArraySize)
+                {
+                    dataPkt.Unbind();
+                    return dataPkt;
+                }
+                /* Wrap around */
+                if (iReadOffset >= iArraySize)
+                {
+                    iReadOffset = 0;
+                }
+                dataPkt = iMediaPtrVec[iReadOffset];
+                if (dataPkt.GetRep() == NULL)
+                {
+                    PVMF_JB_LOGDATATRAFFIC_IN_E((0, "[0x%x] Hole in Jb at index %u", this, iReadOffset));
+                }
+                iReadOffset++;
+                count++;
+            }
+
+            iNumElems--;
+            /* Mark the retrieved element location as free */
+            PVMFSharedMediaDataPtr retElem = iMediaPtrVec[iReadOffset-1];
+            retElem.Unbind();
+            iMediaPtrVec[iReadOffset-1] = retElem;
+            iLastRetrievedSeqNum = (int32)(dataPkt.GetRep()->getSeqNum());
+            /* Check and register packet loss */
+            iJitterBufferStats.totalPacketsLost += (count - 1);
+            iJitterBufferStats.maxTimeStampRetrieved = dataPkt->getTimestamp();
+            iJitterBufferStats.currentOccupancy = iNumElems;
+            iJitterBufferStats.totalNumPacketsRetrieved++;
+            iJitterBufferStats.lastRetrievedSeqNum = iLastRetrievedSeqNum;
+            /* Get packet size */
+            uint32 size = 0;
+            uint32 numFragments = dataPkt->getNumFragments();
+            for (uint32 i = 0; i < numFragments; i++)
+            {
+                OsclRefCounterMemFrag memFragIn;
+                dataPkt->getMediaFragment(i, memFragIn);
+                size += memFragIn.getMemFrag().len;
+            }
+            iJitterBufferStats.packetSizeInBytesLeftInBuffer -= size;
+            PVMF_JB_LOGDATATRAFFIC_OUT((0, "[0x%x]PVMFDynamicCircularArray::retrieveElement: iReadOffset=%d, iNumElemsLeft=%d, SeqNum=%d",
+                                        this,
+                                        iReadOffset,
+                                        iNumElems,
+                                        iLastRetrievedSeqNum));
+
+            return (dataPkt);
+        }
+
+        PVMFJitterBufferStats& getStats()
+        {
+            return iJitterBufferStats;
+        }
+
+        PVMFJitterBufferStats* getStatsPtr()
+        {
+            return &iJitterBufferStats;
+        }
+
+        void peekNextElementTimeStamp(PVMFTimestamp& aTS,
+                                      uint32& aSeqNum)
+        {
+            PVMFSharedMediaDataPtr dataPkt;
+
+            uint32 peekOffset = iReadOffset;
+            uint32 count = 0;
+
+            while (dataPkt.GetRep() == NULL)
+            {
+                if (count > iNumElems)
+                {
+                    aTS = 0xFFFFFFFF;
+                }
+                if (peekOffset >= iArraySize)
+                {
+                    peekOffset = 0;
+                }
+                dataPkt = iMediaPtrVec[peekOffset];
+                peekOffset++;
+                count++;
+            }
+            aTS = dataPkt.GetRep()->getTimestamp();
+            aSeqNum = dataPkt.GetRep()->getSeqNum();
+            return;
+        }
+
+        void peekMaxElementTimeStamp(PVMFTimestamp& aTS,
+                                     uint32& aSeqNum)
+        {
+            aTS = iJitterBufferStats.maxTimeStampRegistered;
+            aSeqNum = iJitterBufferStats.maxSeqNumRegistered;
+            return;
+        }
+
+        bool CheckCurrentReadPosition()
+        {
+            uint32 offset = iReadOffset;
+
+            if (offset >= iArraySize)
+            {
+                offset = 0;
+            }
+
+            PVMFSharedMediaDataPtr dataPkt =
+                iMediaPtrVec[offset];
+
+            if (dataPkt.GetRep() == NULL)
+            {
+                return false;
+            }
+            return true;
+        }
+
+        bool CheckSpaceAvailability(uint32 aNumElements = 1)
+        {
+            if ((iArraySize - iNumElems) > aNumElements)
+            {
+                return true;
+            }
+            return false;
+        }
+
+        void setSeqNumBase(uint32 aSeqNum)
+        {
+            iJitterBufferStats.seqNumBase = aSeqNum;
+        }
+
+        //setRTPInfoParams replaced by setSeqNumBase
+
+        PVMFSharedMediaDataPtr getElementAt(uint32 aIndex)
+        {
+            if (aIndex > iArraySize) OSCL_LEAVE(OsclErrArgument);
+            return (iMediaPtrVec[aIndex]);
+        }
+
+        void AddElementAt(PVMFSharedMediaDataPtr aMediaPtr,
+                          uint32 aIndex)
+        {
+            if (aIndex > iArraySize) OSCL_LEAVE(OsclErrArgument);
+            iMediaPtrVec[aIndex] = aMediaPtr;
+        }
+
+        void PurgeElementsWithSeqNumsLessThan(uint32 aSeqNum, uint32 aPrevSeqNumBaseOut)
+        {
+            PVMF_JB_LOGINFO((0, "PVMFDynamicCircularArray::PurgeElementsWithSeqNumsLessThan SeqNum %d aPrevSeqNumBaseOut %d", aSeqNum, aPrevSeqNumBaseOut));
+            if (!iMediaPtrVec.empty())
+            {
+                if (aSeqNum < iLastRetrievedSeqNum)
+                {
+                    typedef typename Oscl_Vector<PVMFSharedMediaDataPtr, Alloc>::iterator iterator_type;
+                    iterator_type it;
+                    for (it = iMediaPtrVec.begin(); it != iMediaPtrVec.end(); it++)
+                    {
+                        if (it->GetRep() != NULL)
+                        {
+                            /* Get packet size */
+                            uint32 size = 0;
+                            uint32 numFragments = it->GetRep()->getNumFragments();
+                            for (uint32 i = 0; i < numFragments; i++)
+                            {
+                                OsclRefCounterMemFrag memFragIn;
+                                it->GetRep()->getMediaFragment(i, memFragIn);
+                                size += memFragIn.getMemFrag().len;
+                            }
+                            iJitterBufferStats.packetSizeInBytesLeftInBuffer -= size;
+                            it->Unbind();
+                        }
+                    }
+                    iNumElems = 0;
+                    /* If after purging all elements, we want to determine the TS of the previous element
+                     * (with DeterminePrevTimeStampPeek()), it will give as false information if the
+                     * seqnum has wrapped around. So because of that, we set aPrevSeqNumBaseOut to be smaller
+                     * than the current seqnum (RIO-4021).
+                     */
+                    aPrevSeqNumBaseOut = aSeqNum - 1;
+
+                }
+                else if (aSeqNum > iLastRetrievedSeqNum)
+                {
+                    /*
+                     * Start from last retrieved seq num and offset it by
+                     * first seq number added
+                     * This guarantees that we deallocate in the allocation
+                     * sequence.
+                     */
+                    uint32 startoffset = ((iLastRetrievedSeqNum - iFirstSeqNumAdded) + 1) % iArraySize;
+
+                    PVMF_JB_LOGDATATRAFFIC_OUT((0, "[0x%x]PVMFDynamicCircularArray::PurgeElementsWithSeqNumsLessThan:  SeqNum=%d, StartOffset=%d, iArraySize=%d",
+                                                this,
+                                                aSeqNum,
+                                                startoffset,
+                                                iArraySize));
+
+                    for (uint32 i = 0; i < aSeqNum - (iLastRetrievedSeqNum + 1); i++)
+                    {
+                        uint32 offset = (startoffset + i) % iArraySize;
+                        /* Mark the retrieved element location as free */
+                        PVMFSharedMediaDataPtr elem = iMediaPtrVec[offset];
+                        if (elem.GetRep() != NULL)
+                        {
+                            if (elem->getSeqNum() < aSeqNum)
+                            {
+                                /* Get packet size */
+                                uint32 size = 0;
+                                uint32 numFragments = elem->getNumFragments();
+                                for (uint32 i = 0; i < numFragments; i++)
+                                {
+                                    OsclRefCounterMemFrag memFragIn;
+                                    elem->getMediaFragment(i, memFragIn);
+                                    size += memFragIn.getMemFrag().len;
+                                }
+                                iJitterBufferStats.packetSizeInBytesLeftInBuffer -= size;
+                                elem.Unbind();
+                                iMediaPtrVec[offset] = elem;
+                                iNumElems--;
+                            }
+                        }
+                    }
+                }
+            }
+            /* To prevent us from registering any old packets */
+            iLastRetrievedSeqNum = aSeqNum - 1;
+            iJitterBufferStats.lastRetrievedSeqNum = iLastRetrievedSeqNum;
+            iJitterBufferStats.currentOccupancy = iNumElems;
+            SetReadOffset(aSeqNum);
+        }
+
+        void PurgeElementsWithTimestampLessThan(PVMFTimestamp aTS)
+        {
+            if (!iMediaPtrVec.empty())
+            {
+                while (iNumElems > 0)
+                {
+                    /* Wrap around */
+                    if (iReadOffset >= iArraySize)
+                    {
+                        iReadOffset = 0;
+                    }
+                    PVMFSharedMediaDataPtr dataPkt = iMediaPtrVec[iReadOffset];
+                    if (dataPkt.GetRep() != NULL)
+                    {
+                        PVMF_JB_LOGDATATRAFFIC_IN((0, "[0x%x]JB Purge:ReadOffset=%d, NumElemsLeft=%d, lastRetrievedSeqNum=%d, seqNum=%d",
+                                                   this,
+                                                   iReadOffset,
+                                                   iNumElems,
+                                                   iLastRetrievedSeqNum,
+                                                   dataPkt->getSeqNum()));
+                        PVMFTimestamp tmpTS = dataPkt.GetRep()->getTimestamp();
+                        if (tmpTS >= aTS)
+                            break;
+
+                        /* Get packet size */
+                        uint32 size = 0;
+                        uint32 numFragments = dataPkt->getNumFragments();
+                        for (uint32 i = 0; i < numFragments; i++)
+                        {
+                            OsclRefCounterMemFrag memFragIn;
+                            dataPkt->getMediaFragment(i, memFragIn);
+                            size += memFragIn.getMemFrag().len;
+                        }
+                        iJitterBufferStats.packetSizeInBytesLeftInBuffer -= size;
+                        (iMediaPtrVec[iReadOffset]).Unbind();
+                        iNumElems--;
+                    }
+                    iReadOffset++;
+                }
+            }
+            /* To prevent us from registering any old packets */
+            iLastRetrievedTS = aTS;
+            iJitterBufferStats.currentOccupancy = iNumElems;
+        }
+
+        void SetReadOffset(uint32 aSeqNum)
+        {
+            iReadOffset = (aSeqNum - iFirstSeqNumAdded) % iArraySize;
+        }
+
+    private:
+        void InitVector(uint32 size)
+        {
+            for (uint32 i = 0; i < size; i++)
+            {
+                PVMFSharedMediaDataPtr sharedMediaPtr;
+                iMediaPtrVec.push_back(sharedMediaPtr);
+            }
+        }
+
+        uint32 iNumElems;
+        uint32 iArraySize;
+
+        uint32 iReadOffset;
+        uint32 iLastRetrievedSeqNum;
+        PVMFTimestamp iLastRetrievedTS;
+        uint32 iMaxSeqNumAdded;
+        uint32 iFirstSeqNumAdded;
+
+        PVMFJitterBufferStats iJitterBufferStats;
+        Oscl_Vector<PVMFSharedMediaDataPtr, Alloc> iMediaPtrVec;
+
+        PVLogger* ipLogger;
+        PVLogger* ipDataPathLoggerIn;
+        PVLogger* ipDataPathLoggerOut;
+};
+
+class PVMFJitterBufferObserver
+{
+    public:
+        virtual ~PVMFJitterBufferObserver() {}
+        virtual void JitterBufferFreeSpaceAvailable(OsclAny* aContext) = 0;
+        virtual void ProcessJBInfoEvent(PVMFAsyncEvent& aEvent) = 0;
+        virtual void PacketReadyToBeRetrieved(OsclAny* aContext) = 0;
+        virtual void EndOfStreamSignalled(OsclAny* aContext) = 0;
+};
+
+class PVMFJitterBuffer
+{
+    public:
+        virtual ~PVMFJitterBuffer() {}
+        /**
+        	This API will be called when Streaming will be started, i.e. when
+        	we are attempting to set up the transport for communication with the server
+        	(firewall packet xchange) So, the jitter buffer should be in a state to
+        	start accepting the *valid* packets from the server.
+        	This API will start/initialize the estimation of the server clock
+        	aka estimated server clock.
+        	Can Leave: No
+        */
+        virtual void StreamingSessionStarted() = 0;
+
+        /**
+        	This API will be called when Streaming will be paused, i.e. we expect the server to stop
+        	sending the data. Because of async nature of the SDK, there may be possibility of receiving
+        	some data from the server. So, Jb will continue to accept any valid data.
+        	Can Leave: No
+        */
+        virtual void StreamingSessionPaused() = 0;
+
+        /**
+        	This API will be called when Streaming session is considered terminated (from server/client),
+        	Jb will not accept any packet from the server after this call and will flush itself.
+        	Can Leave: No
+        */
+        virtual void StreamingSessionStopped() = 0;
+
+        /**
+        	To have smooth playback, jitter buffer needs to have sufficient amount of data ahead of the
+        	current playback position. As data flows out of the jitter buffer, the occupancy of the jitter
+        	buffer will decrease. To order to have sufficient data in it, jitter buffer will go into
+        	rebuffering once differnce between the estimated server clock and playback clock becomes
+        	less than *RebufferingThreshold*. The value of this "RebufferingThreshold" is
+        	initialized/modified by this API.
+        	params:
+        	aRebufferingThresholdInMilliSeconds:[in] uint32
+        	Can Leave: No
+        	Constraint:
+        	This value ought to be less than "Delay/Duration" specified by "SetDurationInMilliSeconds" API
+        */
+        virtual void SetRebufferingThresholdInMilliSeconds(uint32 aRebufferingThresholdInMilliSeconds) = 0;
+
+        /**
+        	To have smooth playback, before letting any data out of it, jitter buffer accumulates sufficient
+        	amount of data ahead of the current playback position.
+        	The amoount of data that Jb should acculate is discated by this API.
+        	"aDuration" specifies the amount of data(in millisec) Jb should accumuate before letting any data out of it.
+        	params:
+        	aDuration:[in] uint32
+        	Can Leave: No
+        	Constraint:
+        	This value ought to be more than "RebufferingThreshold" specified by "SetRebufferingThresholdInMilliSeconds" API
+        */
+        virtual void SetDurationInMilliSeconds(uint32 aDuration) = 0;
+
+        /**
+        	This API will reset any EOS flag signalled by the user of the JB.
+        	This will reinitialize the streaming segment.
+        	Jitter buffer will go into transition state and will remian in that state unless
+        	SetPlayRange API is called on it.
+        	Jitter buffer will neither accept nor let out any packet out of it.
+        	Can Leave: No
+        	Constraint: N/A
+        */
+        virtual void PrepareForRepositioning() = 0;
+
+        /**
+        	Provides the observer with the mime type of the data that is persisted in JB.
+        */
+        virtual const char* GetMimeType() const = 0;
+
+        /**
+        	Will let the observer of JB the current state of the JB.
+        	Can Leave: No
+        	Constraint: N/A
+        */
+        virtual PVMFJitterBufferDataState GetState() const = 0;
+
+        /**
+        	This API will set the state of the Jitter buffer.
+        	Param(s):[in] aState
+        	Can Leave: No
+        	Constraint: N/A
+        */
+        virtual void SetJitterBufferState(PVMFJitterBufferDataState aState) = 0;
+
+        /**
+        	Jitter buffer maintains the pointers to the chunks of the data retrieved from the server.
+        	The chunks of memory that are used to persist the data retrieved from the server are allocated
+        	by the allocator created in some other component (in socket node for RTSP and the HTTP streaming)
+        	Jitter buffer need to know the occupancy of the memory pool for saving itself from overflowing.
+        	SetJitterBufferChunkAllocator provides jitter buffer the access to the allocator that allocates
+        	chunks for persisting the media.
+        	Param(s):[in] aDataBufferAllocator
+        	Can Leave: No
+        	Constraint: N/A
+        */
+        virtual void SetJitterBufferChunkAllocator(OsclMemPoolResizableAllocator* aDataBufferAllocator) = 0;
+
+        /**
+        	This API provides the info about the memory pool that is allocated for persisting the media
+        	from the server.
+        	Param(s):[in] uint32 aSize				- Size of memory pool
+                     [in] uint32 aResizeSize		- If Jb needed to be extented, this will specify the mempool
+        											  chunk that will be added up to the existing mempool.
+                     [in] uint32 aMaxNumResizes		- Specifies the max number of times memory chunks of size
+        											  "aResizeSize" can be appended to the mempool.
+                     [in] uint32 aExpectedNumberOfBlocksPerBuffer	- Specifies the estimated max number of chunks
+        											  of media that are expected to be in the Jitter buffer at
+        											  any instant of time.
+        	Can Leave: No
+        	Constraint: N/A
+        */
+        virtual void SetJitterBufferMemPoolInfo(uint32 aSize,
+                                                uint32 aResizeSize,
+                                                uint32 aMaxNumResizes,
+                                                uint32 aExpectedNumberOfBlocksPerBuffer) = 0;
+
+        /**
+        	This API provides the let the observer of JB know about the memory pool stats that is allocated
+        	for persisting the media received from the server.
+        	Param(s):[out] uint32 aSize				- Size of memory pool
+                     [out] uint32 aResizeSize		- If Jb needed to be extented, this will specify the mempool
+        											  chunk that will be added up to the existing mempool.
+                     [out] uint32 aMaxNumResizes		- Specifies the max number of times memory chunks of size
+        											  "aResizeSize" can be appended to the mempool.
+                     [out] uint32 aExpectedNumberOfBlocksPerBuffer	- Specifies the estimated max number of chunks
+        											  of media that are expected to be in the Jitter buffer at
+        											  any instant of time.
+        	Can Leave: No
+        	Constraint: N/A
+        */
+        virtual void GetJitterBufferMemPoolInfo(uint32& aSize,
+                                                uint32& aResizeSize,
+                                                uint32& aMaxNumResizes,
+                                                uint32& aExpectedNumberOfBlocksPerBuffer) const  = 0;
+
+
+        /**
+        	Registers the packet with the jitter buffer.
+        	If inplace processing is false, then each fragment in the media msg is treated as a separate packet
+        	and is internally wrapped in separate media msg by this functions and persisted in the jitter buffer.
+        	This method may fail with the return value PVMF_JITTER_BUFFER_ADD_PKT_INSUFFICIENT_MEMORY
+        	In this case, the user of the jitter buffer is expected to make async call NotifyFreeSpaceAvailable
+        	call with the jitter buffer and wait for JitterBufferFreeSpaceAvailable callback before
+        	requesting to register the packet again.
+        	Param(s):[in] PVMFSharedMediaMsgPtr& aMsg - Media msg to be registered with the JB
+        	Can Leave: No
+        	Constraint: N/A
+        */
+        virtual PVMFJitterBufferRegisterMediaMsgStatus RegisterMediaMsg(PVMFSharedMediaMsgPtr& aMsg) = 0;
+
+        /**
+        	Specifies the initialization of new streaming segement.
+        */
+        virtual bool QueueBOSCommand(uint32 aStreamId) = 0;
+
+        /**
+        	Specifies the termination of the streaming.
+        	Param(s):[out] PVMFSharedMediaMsgPtr& aMsg - Cmd Msg signifying EOS
+        			 [out] aCmdPacket: 	aMsg is considered to be valid if aCmdPacket is true
+        	Can Leave: No
+        	Constraint: N/A
+        */
+        virtual PVMFStatus GenerateAndSendEOSCommand(PVMFSharedMediaMsgPtr& aMediaOutMsg, bool& aCmdPacket) = 0;
+
+        /**
+        	Specifies if sufficient amount of data is available with the jitter buffer.
+        	Delay is considered to be established:
+        		- If estimated server clock is ahead of playback clock by duration specified by
+        		"SetDurationInMilliSeconds"
+        		- or, EOS is signalled by the user of the JB
+        		- and JB is not in *transition* state.
+
+        	Param(s):[out] uint32& aClockDiff - Difference between the estimated server clock and client playback clock
+        	Can Leave: No
+        	Constraint: N/A
+
+        */
+        virtual bool IsDelayEstablished(uint32& aClockDiff) = 0;
+
+        /**
+        	This API will provide the user of the Jitter buffer with the media msg from the Jitter buffer.
+        	The packet retrieved from Jb can be
+        	- media packet
+        	- command packet
+        	Param(s):[out] PVMFSharedMediaMsgPtr& aMediaMsgPtr - Media data retrieved from the jitter buffer
+        			 [out] bool& aCmdPacket - retrieved pkt from Jb is command packet
+        	Can Leave: No
+        	Constraint: N/A
+        	Return value:PVMFStatus [PVMFSuccess/PVMFErrNotReady]
+        			PVMFSuccess: If it is possible to retieve the media msg from the JB
+        			PVMFErrNotReady: If packet cannot be retrieved from the Jb as of now.
+        			User is Jb is expected to requet a callback via NotifyCanRetrievePacket API to get notification
+        			about the readiness of JB to send out the packet.
+        */
+        virtual PVMFStatus RetrievePacket(PVMFSharedMediaMsgPtr& aMediaMsgPtr, bool& aCmdPacket) = 0;
+
+        virtual PVMFStatus SetInputPacketHeaderPreparsed(bool aPreParsed) = 0;
+
+        /**
+        	Request the JB to signal when user can retrieve the packet from it.
+        */
+        virtual void NotifyCanRetrievePacket() = 0;
+
+        /**
+        	Cancel the previously made request(if any) with the jitter buffer.
+        */
+        virtual void CancelNotifyCanRetrievePacket() = 0;
+
+
+        /**
+        	Returns the PVMFJitterBufferStats structure.
+        */
+        virtual PVMFJitterBufferStats& getJitterBufferStats() = 0;
+
+        /**
+        	Cleans up the jitter buffer. All the data in the Jb is considered invalid and
+        */
+        virtual void FlushJitterBuffer() = 0;
+
+        /**
+        */
+        virtual void ResetJitterBuffer() = 0;
+
+
+        /**
+        	This function returns the mts of the next packet that is expected to be retrieved
+        	from the jitter buffer.
+        */
+        virtual PVMFTimestamp peekNextElementTimeStamp() = 0;
+
+        /**
+
+        */
+        virtual PVMFTimestamp peekMaxElementTimeStamp() = 0;
+
+        /**
+        	Returns true if there is no media in the JB to be retrieved.
+        	else returns false
+        */
+        virtual bool IsEmpty() = 0;
+
+        /**
+        	Signals that EOS is received, and no media data is expected anymore.
+        */
+        virtual void SetEOS(bool aVal) = 0;
+
+        /**
+        	Checks if EOS is received.
+        */
+        virtual bool GetEOS() = 0;
+
+        /**
+        	This function is used to specify the play range, i.e. session params for the
+        	current streaming segment
+        */
+        virtual void SetPlayRange(int32 aStartTimeInMS, bool aPlayAfterSeek, bool aStopTimeAvailable = false, int32 aStopTimeInMS = 0) = 0;
+
+
+        /**
+        */
+        virtual void PurgeElementsWithSeqNumsLessThan(uint32 aSeqNum, uint32 aPlayerClockMS) = 0;
+
+        /**
+        */
+        virtual void PurgeElementsWithTimestampLessThan(PVMFTimestamp aTS) = 0;
+
+        /**
+        	Sets the mode of processing the input packets.
+        	If "aInPlaceProcessing" boolean if set to true means that media msg wrappers
+        	that carry the RTP packets from upstream node can be reused.
+        	If "aInPlaceProcessing" boolean if set to false, then inside "RegisterPacket"
+        	We allocate a new media msg wrapper and transfer the memory fragments from "inputDataPacket"
+        	to "dataPacket".
+        	If there are multiple media packets in "inputDataPacket" then we have to allocate new
+        	media msg wrappers for each one of these. So "aInPlaceProcessing" cannot be true if
+        	downstream node packs multiple media packets in a single media msg.
+        */
+        virtual void SetInPlaceProcessingMode(bool aInPlaceProcessingMode) = 0;
+
+        /**
+        */
+        virtual bool addMediaCommand(PVMFSharedMediaMsgPtr& aMediaCmd) = 0;
+
+        /**
+        */
+        virtual void SetAdjustedTSInMS(PVMFTimestamp aAdjustedTS) = 0;
+
+        /**
+        */
+        virtual void SetBroadCastSession() = 0;
+
+        /**
+        	This function is only implemented for RTSP based streaming to set the source identifier.
+        */
+        virtual void setSSRC(uint32 aSSRC) = 0;
+
+        /**
+        	This function is only implemented for RTSP based streaming to get the source identifier.
+        */
+        virtual uint32 GetSSRC() const = 0;
+
+        /**
+        	This function is specific to the RTSP based streaming.
+        	This is used to set the RTP info.
+        	RTP info is genreally obtained in response to the play request sent to the 3GPP server
+        */
+        /**
+        */
+        virtual void AdjustRTPTimeStamp() = 0;
+
+        virtual void setRTPInfoParams(PVMFRTPInfoParams rtpInfoParams, bool oPlayAfterASeek) = 0;
+
+        virtual PVMFRTPInfoParams& GetRTPInfoParams() = 0;
+
+        /**
+        	This functiosn is RTSP streaming specific and is used to detrmine the interarriavl jitter
+        */
+        virtual uint32 getInterArrivalJitter() = 0;
+
+        /**
+        */
+        virtual bool GetRTPTimeStampOffset(uint32& aTimeStampOffset) = 0;
+
+
+        /**
+        */
+        virtual void SetRTPTimeStampOffset(uint32 newTSBase) = 0;
+
+        /**
+        */
+        virtual PVMFSharedMediaDataPtr& GetFirstDataPacket(void) = 0;
+
+        /**
+        */
+        virtual bool NotifyFreeSpaceAvailable() = 0;
+
+        virtual void SetTrackConfig(OsclRefCounterMemFrag& aConfig) = 0;
+        virtual void SetMediaClockConverter(MediaClockConverter* aConverter) = 0;
+        virtual void SetTimeScale(uint32 aTimeScale) = 0;
+        virtual uint32 GetTimeScale() const = 0;
+        virtual void SetEarlyDecodingTimeInMilliSeconds(uint32 duration) = 0;
+        virtual void SetBurstThreshold(float burstThreshold) = 0;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// Contains implementation of functions common to all streaming types
+///////////////////////////////////////////////////////////////////////////////
+typedef enum
+{
+    PVMF_JB_ERR_INSUFFICIENT_MEM_TO_PACKETIZE,
+    PVMF_JB_ERR_INVALID_CONFIGURATION,
+    PVMF_JB_ERR_CORRUPT_HDR,
+    PVMF_JB_ERR_TRUNCATED_HDR,
+    PVMF_JB_ERR_UNEXPECTED_PKT,
+    PVMF_JB_ERR_LATE_PACKET,
+    PVMF_JB_ERR_NO_PACKET,
+    PVMF_JB_PACKET_PARSING_SUCCESS
+} PVMFJBPacketParsingAndStatUpdationStatus;
+
+class PVMFJitterBufferImpl : public PVMFJitterBuffer
+            , public OsclMemPoolFixedChunkAllocatorObserver
+            , public PVMFJBEventNotifierObserver
+{
+    public:
+        OSCL_IMPORT_REF virtual ~PVMFJitterBufferImpl();
+        OSCL_IMPORT_REF virtual void StreamingSessionStarted();
+        OSCL_IMPORT_REF virtual void StreamingSessionPaused();
+        OSCL_IMPORT_REF virtual void StreamingSessionStopped();
+        OSCL_IMPORT_REF virtual void SetRebufferingThresholdInMilliSeconds(uint32 aRebufferingThresholdInMilliSeconds);
+        OSCL_IMPORT_REF virtual void SetDurationInMilliSeconds(uint32 aDuration);
+        OSCL_IMPORT_REF void PrepareForRepositioning();
+        OSCL_IMPORT_REF PVMFJitterBufferDataState GetState() const;
+        OSCL_IMPORT_REF virtual void SetJitterBufferState(PVMFJitterBufferDataState aState);
+        OSCL_IMPORT_REF virtual void SetJitterBufferChunkAllocator(OsclMemPoolResizableAllocator* aDataBufferAllocator);
+        OSCL_IMPORT_REF virtual const char* GetMimeType() const;
+        OSCL_IMPORT_REF virtual PVMFJitterBufferRegisterMediaMsgStatus RegisterMediaMsg(PVMFSharedMediaMsgPtr& msg);
+        OSCL_IMPORT_REF bool QueueBOSCommand(uint32 aStreamId);
+        OSCL_IMPORT_REF void SetInPlaceProcessingMode(bool aInPlaceProcessingMode);
+        OSCL_IMPORT_REF PVMFStatus GenerateAndSendEOSCommand(PVMFSharedMediaMsgPtr& aMediaOutMsg, bool& aCmdPacket);
+        OSCL_IMPORT_REF virtual void NotifyCanRetrievePacket();
+        OSCL_IMPORT_REF virtual void CancelNotifyCanRetrievePacket();
+        OSCL_IMPORT_REF virtual PVMFStatus RetrievePacket(PVMFSharedMediaMsgPtr& aMediaMsgPtr, bool& aCmdPacket);
+        OSCL_IMPORT_REF virtual PVMFStatus SetInputPacketHeaderPreparsed(bool aPreParsed);
+        OSCL_IMPORT_REF virtual PVMFJitterBufferStats& getJitterBufferStats();
+        OSCL_IMPORT_REF virtual PVMFTimestamp peekNextElementTimeStamp();
+        OSCL_IMPORT_REF virtual PVMFTimestamp peekMaxElementTimeStamp();
+        OSCL_IMPORT_REF bool IsEmpty();
+        OSCL_IMPORT_REF void SetEOS(bool aVal);
+        OSCL_IMPORT_REF bool GetEOS();
+        OSCL_IMPORT_REF void SetPlayRange(int32 aStartTimeInMS, bool aPlayAfterSeek, bool aStopTimeAvailable = false, int32 aStopTimeInMS = 0);
+        OSCL_IMPORT_REF bool CheckForHighWaterMark();
+        OSCL_IMPORT_REF bool CheckForLowWaterMark();
+        OSCL_IMPORT_REF bool CheckNumElements();
+        OSCL_IMPORT_REF bool addMediaCommand(PVMFSharedMediaMsgPtr& aMediaCmd);
+        OSCL_IMPORT_REF virtual bool GetPendingCommand(PVMFSharedMediaMsgPtr& aCmdMsg);
+        OSCL_IMPORT_REF virtual bool HasPendingCommand();
+        OSCL_IMPORT_REF void SetAdjustedTSInMS(PVMFTimestamp aAdjustedTSInMS);
+        OSCL_IMPORT_REF virtual void SetBroadCastSession();
+        OSCL_IMPORT_REF virtual PVMFRTPInfoParams& GetRTPInfoParams();
+        OSCL_IMPORT_REF bool GetRTPTimeStampOffset(uint32& aTimeStampOffset);
+        OSCL_IMPORT_REF bool NotifyFreeSpaceAvailable();
+        OSCL_IMPORT_REF void freechunkavailable(OsclAny*);
+        OSCL_IMPORT_REF virtual void FlushJitterBuffer();
+        OSCL_IMPORT_REF virtual void ResetJitterBuffer();
+        OSCL_IMPORT_REF bool CheckSpaceAvailability(PVMFSharedMediaMsgPtr& aMsg);
+        OSCL_IMPORT_REF bool CheckSpaceAvailability();
+        OSCL_IMPORT_REF void setSSRC(uint32 aSSRC);
+        OSCL_IMPORT_REF uint32 GetSSRC() const;
+        OSCL_IMPORT_REF virtual void SetJitterBufferMemPoolInfo(uint32 aSize,
+                uint32 aResizeSize,
+                uint32 aMaxNumResizes,
+                uint32 aExpectedNumberOfBlocksPerBuffer);
+        OSCL_IMPORT_REF void GetJitterBufferMemPoolInfo(uint32& aSize, uint32& aResizeSize, uint32& aMaxNumResizes, uint32& aExpectedNumberOfBlocksPerBuffer) const;
+        OSCL_IMPORT_REF virtual void SetTrackConfig(OsclRefCounterMemFrag& aConfig);
+        OSCL_IMPORT_REF virtual void SetMediaClockConverter(MediaClockConverter* aConverter);
+        OSCL_IMPORT_REF virtual void SetTimeScale(uint32 aTimeScale);
+        OSCL_IMPORT_REF virtual uint32 GetTimeScale() const ;
+        OSCL_IMPORT_REF bool IsDelayEstablished(uint32& aClockDiff);
+    protected:
+
+        OSCL_IMPORT_REF void LogClientAndEstimatedServerClock(PVLogger*& aLogger);
+        OSCL_IMPORT_REF bool RequestEventCallBack(JB_NOTIFY_CALLBACK aEventType, uint32 aDelay = 0, OsclAny* aContext = NULL);
+        OSCL_IMPORT_REF void CancelEventCallBack(JB_NOTIFY_CALLBACK aEventType, OsclAny* aContext = NULL);
+        OSCL_IMPORT_REF bool IsCallbackPending(JB_NOTIFY_CALLBACK aEventType, OsclAny* aContext);
+        OSCL_IMPORT_REF void ProcessCallback(CLOCK_NOTIFICATION_INTF_TYPE aClockNotificationInterfaceType, uint32 aCallBkId, const OsclAny* aContext, PVMFStatus aStatus);
+
+        OSCL_IMPORT_REF PVMFJitterBufferImpl(const PVMFJitterBufferConstructParams& aJBCreationData);
+
+        typedef enum
+        {
+            STREAMINGSTATE_UNKNOWN,
+            STREAMINGSTATE_STARTED,
+            STREAMINGSTATE_PAUSED,
+            STREAMINGSTATE_STOPPED
+        }StreamingState;
+
+
+        virtual bool IsSeqTsValidForPkt(uint32 aSeqNum, uint32 aTs, PVMFJitterBufferStats& jbStats) = 0;
+        OSCL_IMPORT_REF virtual uint32 GetNumOfPackets(PVMFSharedMediaMsgPtr& aMsg) const;
+        OSCL_IMPORT_REF virtual void ReportJBInfoEvent(PVMFAsyncEvent& aEvent);
+        OSCL_IMPORT_REF virtual PVMFSharedMediaDataPtr RetrievePacketPayload();
+
+        OSCL_IMPORT_REF void Construct();
+        OSCL_IMPORT_REF bool Allocate(OsclSharedPtr<PVMFMediaDataImpl>& mediaDataOut);
+        OSCL_IMPORT_REF bool CreateMediaData(PVMFSharedMediaDataPtr& dataPacket, OsclSharedPtr<PVMFMediaDataImpl>& mediaDataOut);
+
+        //pure virtuals to be overridden by the derived implementation
+        virtual PVMFJBPacketParsingAndStatUpdationStatus ParsePacketHeaderAndUpdateJBStats(PVMFSharedMediaDataPtr& inDataPacket,
+                PVMFSharedMediaDataPtr& outDataPacket,
+                uint32 aFragIndex = 0) = 0;
+        virtual void EOSCmdReceived() = 0;
+        virtual void DeterminePrevTimeStampPeek(uint32 aSeqNum,
+                                                PVMFTimestamp& aPrevTS) = 0;
+
+        virtual void ComputeMaxAdjustedRTPTS() = 0;
+        virtual void CheckForRTPTimeAndRTPSeqNumberBase() = 0;
+        virtual bool CanRetrievePacket(PVMFSharedMediaMsgPtr& aMediaOutMsg, bool& aCmdPacket) = 0;
+        virtual bool CanRetrievePacket() = 0;
+        virtual void DeterminePrevTimeStamp(uint32 aSeqNum) = 0;
+        OSCL_IMPORT_REF virtual PVMFStatus PerformFlowControl(bool aIncomingMedia);
+        uint32 iSeqNum;
+        class JitterBufferMemPoolInfo
+        {
+            public:
+                JitterBufferMemPoolInfo(): iSize(0), iResizeSize(0), iMaxNumResizes(0), iExpectedNumberOfBlocksPerBuffer(0) {}
+                void Init(uint32 aSize = 0, uint32 aExpectedNumberOfBlocksPerBuffer = 0, uint32 aResizeSize = 0, uint32 aMaxNumResizes = 0)
+                {
+                    iSize = aSize;
+                    iResizeSize = aResizeSize;
+                    iMaxNumResizes = aMaxNumResizes;
+                    iExpectedNumberOfBlocksPerBuffer = aExpectedNumberOfBlocksPerBuffer;
+                }
+                uint32 iSize;
+                uint32 iResizeSize;
+                uint32 iMaxNumResizes;
+                uint32 iExpectedNumberOfBlocksPerBuffer;
+        };
+        JitterBufferMemPoolInfo iJitterBufferMemPoolInfo;
+        PVMFSharedMediaDataPtr firstDataPacket;
+        Oscl_Vector<PVMFSharedMediaDataPtr, OsclMemAllocator> iFirstDataPackets;
+
+        StreamingState	  iStreamingState;
+        bool	iPlayingAfterSeek;
+        bool	iReportCanRetrievePacket;
+
+        bool	iInPlaceProcessing;
+        bool	iOnePacketPerFragment;
+        bool	iOnePacketPerMediaMsg;
+
+        uint32 iLastPacketOutTs;
+
+        bool iOverflowFlag;
+        /* Media Command related */
+        Oscl_Vector<MediaCommandMsgHolder, OsclMemAllocator> iMediaCmdVec;
+        //Allocators [Will be created only when PVMFJitterBufferImpl::iInPlaceProcessing == false]
+        PVMFMediaFragGroupCombinedAlloc<OsclMemPoolFixedChunkAllocator>* iMediaDataGroupAlloc;
+        OsclMemPoolFixedChunkAllocator* iMediaDataImplMemPool;
+        OsclMemPoolFixedChunkAllocator* iMediaMsgMemPool;
+
+        int32 iStartTimeInMS;
+        int32 iStopTimeInMS;
+        bool iPlayStopTimeAvailable;
+        bool	iBroadCastSession;
+
+        PVMFTimestamp iMaxAdjustedRTPTS;
+
+        bool	iSessionDurationExpired;
+        uint32	iDurationInMilliSeconds;
+        uint32	iRebufferingThresholdInMilliSeconds;
+
+        uint64 iMonotonicTimeStamp;
+        uint32 iFirstSeqNum;
+        typedef PVMFDynamicCircularArray<OsclMemAllocator> PVMFDynamicCircularArrayType;
+        PVMFDynamicCircularArrayType* iJitterBuffer;
+        Oscl_Vector<PVMFRTPInfoParams, OsclMemAllocator> iRTPInfoParamsVec;
+        bool	iEOSSignalled;
+        bool	iEOSSent;
+        uint32 iStreamID;
+        PVMFTimestamp iMaxAdjustedTS; //[iMaxAdjustedRTPTS]
+        PVMFTimestamp iPrevAdjustedTS;//[iPrevAdjustedRTPTS]
+        PVMFMediaClock& irEstimatedServerClock;
+        PVMFMediaClock& irClientPlayBackClock;
+        PVMFJBEventNotifier& irJBEventNotifier;
+        OSCL_HeapString<OsclMemAllocator> irMimeType;
+        bool&	irDelayEstablished;
+        uint32&	irJitterDelayPercent;
+        PVMFJitterBufferDataState&	irDataState;
+        bool iInProcessingMode;
+        bool iHeaderPreParsed;
+
+        uint32 iRTPTimeScale;
+        PVMFTimestamp  iPrevTSOut;
+        MediaClockConverter iEstServClockMediaClockConvertor;
+        PVMFJitterBufferObserver* const iObserver;
+        OsclAny* const iObserverContext;
+
+        bool   seqNumLock;
+
+        uint32 iInterArrivalJitter;
+        bool   oFirstPacket;
+
+        OsclRefCounterMemFrag		iTrackConfig;
+        uint32 iTimeScale;
+        MediaClockConverter*		ipMediaClockConverter;
+
+        uint32 SSRCLock;
+        bool   oSSRCFromSetUpResponseAvailable;
+        uint32 SSRCFromSetUpResponse;
+
+        uint32 iPrevSeqNumBaseOut;
+        PVMFTimestamp seqLockTimeStamp;
+
+        PVMFTimestamp iPrevAdjustedRTPTS;
+        PVMFTimestamp iPrevTSIn;
+        uint32 iPrevSeqNumBaseIn;
+
+        OsclMemPoolResizableAllocator* iBufferAlloc;
+        uint32 prevMinPercentOccupancy;
+        uint32 consecutiveLowBufferCount;
+        uint32 iNumUnderFlow;
+
+        bool   iMonitorReBufferingCallBkPending;
+        bool   iWaitForOOOPacketCallBkPending;
+        bool   iJitterBufferDurationCallBkPending;
+
+        uint32 iWaitForOOOPacketCallBkId;
+        uint32 iMonitorReBufferingCallBkId;
+        uint32 iJitterBufferDurationCallBkId;
+
+        PVLogger* ipLogger;
+        PVLogger* ipClockLoggerSessionDuration;
+        PVLogger* ipDataPathLogger;
+        PVLogger* ipMaxRTPTsLogger;
+        PVLogger* ipDataPathLoggerIn;
+        PVLogger* ipDataPathLoggerOut;
+        PVLogger* ipClockLogger;
+        PVLogger* ipClockLoggerRebuff;
+        PVLogger* ipDataPathLoggerFlowCtrl;
+        PVLogger* ipJBEventsClockLogger;
+        PVLogger* ipRTCPDataPathLoggerIn;
+        PVLogger* ipRTCPDataPathLoggerOut;
+    private:
+        void CreateAllocators();
+        void DestroyAllocators();
+        PVMFJitterBufferRegisterMediaMsgStatus AddPacket(PVMFSharedMediaDataPtr& aDataPacket);
+        OSCL_IMPORT_REF virtual PVMFJitterBufferRegisterMediaMsgStatus RegisterCmdPacket(PVMFSharedMediaMsgPtr& aMediaCmd);
+        OSCL_IMPORT_REF virtual bool CanRegisterMediaMsg();
+        PVMFJitterBufferRegisterMediaMsgStatus RegisterDataPacket(PVMFSharedMediaDataPtr& aDataPacket);
+        void ResetParams(bool aReleaseMemory = true);
+        void HandleEvent_MonitorReBuffering(const OsclAny* aContext);
+        void HandleEvent_NotifyWaitForOOOPacketComplete(const OsclAny* aContext);
+        void HandleEvent_JitterBufferBufferingDurationComplete();
+};
+
+#endif
diff --git a/nodes/streaming/jitterbuffernode/jitterbuffer/common/include/pvmf_jitter_buffer_common_internal.h b/nodes/streaming/jitterbuffernode/jitterbuffer/common/include/pvmf_jitter_buffer_common_internal.h
new file mode 100644
index 0000000..7694d63
--- /dev/null
+++ b/nodes/streaming/jitterbuffernode/jitterbuffer/common/include/pvmf_jitter_buffer_common_internal.h
@@ -0,0 +1,63 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#ifndef PVMF_JITTER_BUFFER_COMMON_INTERNAL_H
+#define PVMF_JITTER_BUFFER_COMMON_INTERNAL_H
+
+//Logging macros
+#define PVMF_JB_LOGERROR(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipLogger,PVLOGMSG_ERR,m);
+#define PVMF_JB_LOGWARNING(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipLogger,PVLOGMSG_WARNING,m);
+#define PVMF_JB_LOGINFOHI(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG,ipLogger,PVLOGMSG_INFO,m);
+#define PVMF_JB_LOGINFOMED(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_MLDBG,ipLogger,PVLOGMSG_INFO,m);
+#define PVMF_JB_LOGINFOLOW(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG,ipLogger,PVLOGMSG_INFO,m);
+#define PVMF_JB_LOGINFO(m) PVMF_JB_LOGINFOMED(m)
+#define PVMF_JB_LOGDATATRAFFIC(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipDataPathLogger,PVLOGMSG_INFO,m);
+#define PVMF_JB_LOGDATATRAFFIC_IN(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipDataPathLoggerIn,PVLOGMSG_INFO,m);
+#define PVMF_JB_LOGDATATRAFFIC_IN_E(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipDataPathLoggerIn,PVLOGMSG_ERR,m);
+#define PVMF_JB_LOGDATATRAFFIC_OUT(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipDataPathLoggerOut,PVLOGMSG_INFO,m);
+#define PVMF_JB_LOGDATATRAFFIC_OUT_E(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipDataPathLoggerOut,PVLOGMSG_ERR,m);
+#define PVMF_JB_LOGCLOCK(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipClockLogger,PVLOGMSG_INFO,m);
+#define PVMF_JB_LOGMAXRTPTS(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipMaxRTPTsLogger,PVLOGMSG_INFO,m);
+#define PVMF_JB_LOGCLOCK_SESSION_DURATION(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipClockLoggerSessionDuration,PVLOGMSG_INFO,m);
+#define PVMF_JB_LOGCLOCK_REBUFF(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipClockLoggerRebuff,PVLOGMSG_INFO,m);
+#define PVMF_JB_LOGDIAGNOSTICS(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_PROF,ipDiagnosticsLogger,PVLOGMSG_INFO,m);
+#define PVMF_JB_LOGDATATRAFFIC_FLOWCTRL(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipDataPathLoggerFlowCtrl,PVLOGMSG_INFO,m);
+#define PVMF_JB_LOGDATATRAFFIC_FLOWCTRL_E(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipDataPathLoggerFlowCtrl,PVLOGMSG_ERR,m);
+
+#define PVMF_JB_LOG_RTCP(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipRTCPLogger,PVLOGMSG_INFO,m);
+#define PVMF_JB_LOG_RTCP_ERR(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipRTCPLogger,PVLOGMSG_ERR,m);
+#define PVMF_JB_LOG_RTCPDATATRAFFIC_IN(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipRTCPDataPathLoggerIn,PVLOGMSG_INFO,m);
+#define PVMF_JB_LOG_RTCPDATATRAFFIC_OUT(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipRTCPDataPathLoggerOut,PVLOGMSG_INFO,m);
+#define PVMF_JB_LOG_RTCPDATATRAFFIC_IN_E(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipRTCPDataPathLoggerIn,PVLOGMSG_ERR,m);
+
+#define PVMF_JB_LOG_FW(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipDataPathLoggerFireWall,PVLOGMSG_INFO,m);
+#define PVMF_JB_LOG_EVENTS_CLOCK(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_MLDBG,ipJBEventsClockLogger ,PVLOGMSG_INFO,m);
+#define PVMF_JB_LOG_RTCP_AVSYNC(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipRTCPAVSyncLogger,PVLOGMSG_INFO,m);
+#define PVMF_JB_LOGCLOCK_SESSION_DURATION(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipClockLoggerSessionDuration,PVLOGMSG_INFO,m);
+#define PVMF_JB_LOGEVENTNOTIFIER(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,ipLogger,PVLOGMSG_INFO,m);
+
+#if (PVLOGGER_INST_LEVEL > PVLOGMSG_INST_LLDBG)
+#define LOGCLIENTANDESTIMATEDSERVCLK_DATAPATH LogClientAndEstimatedServerClock(ipDataPathLoggerIn)
+#define LOGCLIENTANDESTIMATEDSERVCLK_DATAPATH_OUT LogClientAndEstimatedServerClock(ipDataPathLoggerOut)
+#define LOGCLIENTANDESTIMATEDSERVCLK_REBUFF LogClientAndEstimatedServerClock(ipClockLoggerRebuff)
+#else
+#define LOGCLIENTANDESTIMATEDSERVCLK_DATAPATH
+#define LOGCLIENTANDESTIMATEDSERVCLK_REBUFF
+#define LOGCLIENTANDESTIMATEDSERVCLK_DATAPATH_OUT
+#endif
+
+#endif
diff --git a/nodes/streaming/jitterbuffernode/jitterbuffer/common/include/pvmf_jitter_buffer_common_types.h b/nodes/streaming/jitterbuffernode/jitterbuffer/common/include/pvmf_jitter_buffer_common_types.h
new file mode 100644
index 0000000..b9bd29a
--- /dev/null
+++ b/nodes/streaming/jitterbuffernode/jitterbuffer/common/include/pvmf_jitter_buffer_common_types.h
@@ -0,0 +1,252 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#ifndef PVMF_JITTER_BUFFER_COMMON_TYPES_H_INCLUDED
+#define PVMF_JITTER_BUFFER_COMMON_TYPES_H_INCLUDED
+
+#ifndef OSCL_BASE_H_INCLUDED
+#include "oscl_base.h"
+#endif
+
+#ifndef OSCL_STRING_CONTAINERS_H_INCLUDED
+#include "oscl_string_containers.h"
+#endif
+
+#ifndef PVMF_SM_TUNABLES_H_INCLUDED
+#include "pvmf_sm_tunables.h"
+#endif
+
+//Jitter buffer node specific leave codes
+#define JBPacketRegistrationConfigurationCorrupted	1000
+
+
+enum PVMFJitterBufferDataState
+{
+    PVMF_JITTER_BUFFER_STATE_UNKNOWN,
+    PVMF_JITTER_BUFFER_READY,
+    PVMF_JITTER_BUFFER_IN_TRANSITION
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//Specific to RTP streaming session
+///////////////////////////////////////////////////////////////////////////////
+typedef struct tagPVMFRTPInfoParams
+{
+    tagPVMFRTPInfoParams()
+    {
+        seqNumBaseSet = false;
+        seqNum = 0;
+        rtpTimeBaseSet = false;
+        rtpTime = 0;
+        nptTimeBaseSet = false;
+        nptTimeInMS = 0;
+        rtpTimeScale = 0;
+        nptTimeInRTPTimeScale = 0;
+        isPlayAfterPause = false;
+    };
+
+    bool   seqNumBaseSet;
+    uint32 seqNum;
+    bool   rtpTimeBaseSet;
+    uint32 rtpTime;
+    uint32 nptTimeInMS;
+    bool   nptTimeBaseSet;
+    uint32 rtpTimeScale;
+    uint32 nptTimeInRTPTimeScale;
+    bool   isPlayAfterPause;
+} PVMFRTPInfoParams;
+
+///////////////////////////////////////////////////////////////////////////////
+//RTSP based streaming specific data structures
+///////////////////////////////////////////////////////////////////////////////
+enum PVMFJitterBufferFireWallPacketFormat
+{
+    PVMF_JB_FW_PKT_FORMAT_RTP,
+    PVMF_JB_FW_PKT_FORMAT_PV
+};
+
+class PVMFJitterBufferFireWallPacketInfo
+{
+    public:
+        PVMFJitterBufferFireWallPacketInfo()
+        {
+            iServerRoundTripDelayInMS =
+                PVMF_JITTER_BUFFER_NODE_FIREWALL_PKT_DEFAULT_SERVER_RESPONSE_TIMEOUT_IN_MS;
+            iNumAttempts =
+                PVMF_JITTER_BUFFER_NODE_DEFAULT_FIREWALL_PKT_ATTEMPTS;
+            iFormat = PVMF_JB_FW_PKT_FORMAT_RTP;
+        };
+
+        virtual ~PVMFJitterBufferFireWallPacketInfo()
+        {
+        };
+
+        uint32 iServerRoundTripDelayInMS;
+        uint32 iNumAttempts;
+        PVMFJitterBufferFireWallPacketFormat iFormat;
+};
+
+
+typedef enum
+{
+    PVMF_JB_REGISTER_MEDIA_MSG_ERR_UNKNOWN,
+    PVMF_JB_REGISTER_MEDIA_MSG_ERR_CORRUPT_PACKET,
+    PVMF_JB_REGISTER_MEDIA_MSG_ERR_LATE_MSG,
+    PVMF_JB_BUFFER_REGISTER_MEDIA_MSG_ERR_CONFIG_NOT_SUPPORTED,
+    PVMF_JB_REGISTER_MEDIA_MSG_FAILURE_JB_FULL,
+    PVMF_JB_REGISTER_MEDIA_MSG_FAILURE_INSUFFICIENT_MEMORY_FOR_PACKETIZATION,
+    PVMF_JB_REGISTER_MEDIA_MSG_ERR_UNEXPECTED_DATA,
+    PVMF_JB_REGISTER_MEDIA_MSG_ERR_EOS_SIGNALLED,
+    PVMF_JB_REGISTER_MEDIA_MSG_ERR_INVALID_HEADER,
+    PVMF_JB_REGISTER_MEDIA_MSG_SUCCESS
+} PVMFJitterBufferRegisterMediaMsgStatus;
+
+class PVMFJBEventNotifier;
+class PVMFMediaClock;
+
+enum JB_NOTIFY_CALLBACK
+{
+    JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED,
+    JB_NOTIFY_REPORT_BUFFERING_STATUS,
+    JB_BUFFERING_DURATION_COMPLETE,
+    JB_MONITOR_REBUFFERING,
+    JB_NOTIFY_SEND_FIREWALL_PACKET,
+    JB_NOTIFY_WAIT_FOR_OOO_PACKET_COMPLETE  //OOO->Out Of Order
+};
+
+class PVMFJitterBufferObserver;
+///////////////////////////////////////////////////////////////////////////////
+//PVMFJitterBufferConstructParams
+///////////////////////////////////////////////////////////////////////////////
+class PVMFJitterBufferConstructParams
+{
+    public:
+        PVMFJitterBufferConstructParams(PVMFMediaClock& aEstimatedServerClock
+                                        , PVMFMediaClock& aClientPlaybackClock
+                                        , OSCL_HeapString<OsclMemAllocator>& aMimeType
+                                        , PVMFJBEventNotifier& aJBEventNotifier
+                                        , bool& aDelayEstablished
+                                        , uint32& aJitterDelayPercent
+                                        , PVMFJitterBufferDataState& aJitterBufferDataState
+                                        , PVMFJitterBufferObserver* const aObserver
+                                        , OsclAny* const aContext)
+                : irEstimatedServerClock(aEstimatedServerClock)
+                , irClientPlaybackClock(aClientPlaybackClock)
+                , irMimeType(aMimeType)
+                , irJBEventNotifier(aJBEventNotifier)
+                , irDelayEstablished(aDelayEstablished)
+                , irJitterDelayPercent(aJitterDelayPercent)
+                , irJitterBufferState(aJitterBufferDataState)
+                , ipObserver(aObserver)
+                , ipContextData(aContext)
+        {}
+
+        PVMFMediaClock&	GetEstimatedServerClock() const
+        {
+            return irEstimatedServerClock;
+        }
+
+        PVMFMediaClock&	GetClientPlaybackClock() const
+        {
+            return irClientPlaybackClock;
+        }
+
+        OSCL_HeapString<OsclMemAllocator>&	GetMimeType() const
+        {
+            return irMimeType;
+        }
+
+        bool& GetDelayEstablishStatus() const
+        {
+            return irDelayEstablished;
+        }
+
+        uint32& GetJBDelayPercent() const
+        {
+            return irJitterDelayPercent;
+        }
+
+        PVMFJBEventNotifier& GetEventNotifier() const
+        {
+            return irJBEventNotifier;
+        }
+
+        PVMFJitterBufferObserver* const GetJBObserver() const
+        {
+            return ipObserver;
+        }
+
+        OsclAny* const	GetContextData() const
+        {
+            return ipContextData;
+        }
+
+        PVMFJitterBufferDataState& GetJitterBufferState() const
+        {
+            return irJitterBufferState;
+        }
+
+    private:
+        PVMFMediaClock&	irEstimatedServerClock;
+        PVMFMediaClock&	irClientPlaybackClock;
+        OSCL_HeapString<OsclMemAllocator>& irMimeType;
+        PVMFJBEventNotifier&	irJBEventNotifier;
+        bool& irDelayEstablished;
+        uint32& irJitterDelayPercent;
+        PVMFJitterBufferDataState&	irJitterBufferState;
+        PVMFJitterBufferObserver *const	ipObserver;
+        OsclAny* const	ipContextData;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//RTPSessionInfoForFirewallExchange
+///////////////////////////////////////////////////////////////////////////////
+class PVMFPortInterface;
+class RTPSessionInfoForFirewallExchange
+{
+    public:
+        RTPSessionInfoForFirewallExchange(): ipRTPDataJitterBufferPort(NULL), iSSRC(0) {}
+        RTPSessionInfoForFirewallExchange(const RTPSessionInfoForFirewallExchange& aRTPSessionInfo)
+        {
+            ipRTPDataJitterBufferPort = aRTPSessionInfo.ipRTPDataJitterBufferPort;
+            iSSRC = aRTPSessionInfo.iSSRC;
+        }
+        RTPSessionInfoForFirewallExchange(PVMFPortInterface* aInputPort, uint32 aSSRC): ipRTPDataJitterBufferPort(aInputPort)
+                , iSSRC(aSSRC) {}
+
+        PVMFPortInterface* ipRTPDataJitterBufferPort;
+        uint32 iSSRC;
+};
+
+/**
+ * An enumeration of info codes from PVMFJitterBufferNode
+ **/
+typedef enum
+{
+    PVMFJitterBufferNodeInfoEventStart = 8192,
+    PVMFJitterBufferNodeJitterBufferFull,
+    PVMFJitterBufferNodeTrackEOSReached,
+    PVMFJitterBufferNodeExcercisingPortFlowControl,
+    PVMFJitterBufferNodeRTCPBYERecvd,
+    PVMFJitterBufferNodeJitterBufferLowWaterMarkReached,
+    PVMFJitterBufferNodeJitterBufferHighWaterMarkReached,
+    PVMFJitterBufferNodeStreamThinningRecommended,
+    PVMFJitterBufferNodeRTCPDataProcessed,
+    PVMFJitterBufferNodeInfoEventEnd
+} PVMFJitterBufferNodeInfoEventType;
+
+#endif
diff --git a/nodes/streaming/jitterbuffernode/jitterbuffer/common/include/pvmf_jitter_buffer_factory.h b/nodes/streaming/jitterbuffernode/jitterbuffer/common/include/pvmf_jitter_buffer_factory.h
new file mode 100644
index 0000000..4b40444
--- /dev/null
+++ b/nodes/streaming/jitterbuffernode/jitterbuffer/common/include/pvmf_jitter_buffer_factory.h
@@ -0,0 +1,36 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#ifndef PVMF_JITTER_BUFFER_FACTORY_H
+#define PVMF_JITTER_BUFFER_FACTORY_H
+
+#ifndef OSCL_BASE_MACROS_H_INCLUDED
+#include "oscl_base_macros.h"
+#endif
+
+class PVMFJitterBuffer;
+class PVMFJitterBufferConstructParams;
+
+class JitterBufferFactory
+{
+    public:
+        virtual PVMFJitterBuffer* Create(const PVMFJitterBufferConstructParams& aJBCreationData) = 0;
+
+        virtual void Destroy(PVMFJitterBuffer*& aJitterBuffer)  = 0;
+};
+
+#endif
diff --git a/nodes/streaming/jitterbuffernode/jitterbuffer/common/include/pvmf_rtcp_proto_impl.h b/nodes/streaming/jitterbuffernode/jitterbuffer/common/include/pvmf_rtcp_proto_impl.h
new file mode 100644
index 0000000..3f6ca5f
--- /dev/null
+++ b/nodes/streaming/jitterbuffernode/jitterbuffer/common/include/pvmf_rtcp_proto_impl.h
@@ -0,0 +1,367 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#ifndef PVMF_RTCP_PROTO_IMPL_H_INCLUDED
+#define PVMF_RTCP_PROTO_IMPL_H_INCLUDED
+
+#ifndef OSCL_BASE_H_INCLUDED
+#include "oscl_base.h"
+#endif
+#ifndef OSCL_VECTOR_H_INCLUDED
+#include "oscl_vector.h"
+#endif
+#ifndef OSCL_STRING_CONTAINERS_H_INCLUDED
+#include "oscl_string_containers.h"
+#endif
+#ifndef PVMF_RETURN_CODES_H_INCLUDED
+#include "pvmf_return_codes.h"
+#endif
+#ifndef PVMF_MEDIA_MSG_H_INCLUDED
+#include "pvmf_media_msg.h"
+#endif
+
+#ifndef PVMF_SIMPLE_MEDIA_BUFFER_H_INCLUDED
+#include "pvmf_simple_media_buffer.h"
+#endif
+#ifndef PVMF_MEDIA_DATA_H_INCLUDED
+#include "pvmf_media_data.h"
+#endif
+#ifndef PVMF_SM_TUNABLES_H_INCLUDED
+#include "pvmf_sm_tunables.h"
+#endif
+
+#ifndef PVMF_JITTER_BUFFER_H_INCLUDED
+#include "pvmf_jitter_buffer.h"
+#endif
+
+#ifndef PVMF_RTCP_TIMER_H_INCLUDED
+#include "pvmf_rtcp_timer.h"
+#endif
+
+#ifndef PVMF_JB_EVENT_NOTIFIER_H
+#include "pvmf_jb_event_notifier.h"
+#endif
+
+#ifndef OSCL_RAND_H_INCLUDED
+#include "oscl_rand.h"
+#endif
+
+#ifndef RTCP_H
+#include "rtcp.h"
+#endif
+
+#ifndef PVLOGGER_H_INCLUDED
+#include "pvlogger.h"
+#endif
+
+#ifndef PVMF_RESIZABLE_SIMPLE_MEDIAMSG_H_INCLUDED
+#include "pvmf_resizable_simple_mediamsg.h"
+#endif
+
+#ifndef PVMF_PORT_INTERFACE_H_INCLUDED
+#include "pvmf_port_interface.h"
+#endif
+
+//May be can add a separate config file
+#define MAX_RTCP_SOURCES 31
+#define MAX_RTCP_BLOCK_SIZE 512
+#define DEFAULT_RTCP_MEM_POOL_BUFFERS 4
+#define RTCP_RAND_SEED 666
+
+#define MIN_RTSP_SERVER_INACTIVITY_TIMEOUT_IN_SEC	1
+#define MAX_RTSP_SERVER_INACTIVITY_TIMEOUT_IN_SEC	300
+
+// RTCP INTERVAL related
+#define DEFAULT_RTCP_INTERVAL_USEC 1000000
+#define DEFAULT_RTCP_INTERVAL_SEC  1
+#define RTCP_FIXED_INTERVAL_MODE   1
+#define PVMF_MEDIA_DATA_CLASS_SIZE 128
+
+///////////////////////////////////////////////////////////////////////////////
+//PVMFRTCPStats
+///////////////////////////////////////////////////////////////////////////////
+class PVMFRTCPStats
+{
+    public:
+        PVMFRTCPStats()
+        {
+            Reset();
+        }
+
+        PVMFRTCPStats(const PVMFRTCPStats& aSrc)
+        {
+            lastSenderReportNTP = aSrc.lastSenderReportNTP;
+            lastSenderReportRTP = aSrc.lastSenderReportRTP;
+            lastSenderReportTS = aSrc.lastSenderReportTS;
+            lastSenderReportRecvTime = aSrc.lastSenderReportRecvTime;
+            packetLossUptoThisRR = aSrc.packetLossUptoThisRR;
+            maxSeqNumRecievedUptoThisRR = aSrc.maxSeqNumRecievedUptoThisRR;
+            lastRRGenTime = aSrc.lastRRGenTime;
+            iLastSenderReportSSRC = aSrc.iLastSenderReportSSRC;
+            avg_rtcp_compound_pkt_size = aSrc.avg_rtcp_compound_pkt_size;
+            oSRRecvd = aSrc.oSRRecvd;
+            oRTCPByeRecvd = aSrc.oRTCPByeRecvd;
+        };
+
+        PVMFRTCPStats& operator=(const PVMFRTCPStats& a)
+        {
+            if (&a != this)
+            {
+                lastSenderReportNTP = a.lastSenderReportNTP;
+                lastSenderReportRTP = a.lastSenderReportRTP;
+                lastSenderReportTS = a.lastSenderReportTS;
+                lastSenderReportRecvTime = a.lastSenderReportRecvTime;
+                packetLossUptoThisRR = a.packetLossUptoThisRR;
+                maxSeqNumRecievedUptoThisRR = a.maxSeqNumRecievedUptoThisRR;
+                lastRRGenTime = a.lastRRGenTime;
+                iLastSenderReportSSRC = a.iLastSenderReportSSRC;
+                avg_rtcp_compound_pkt_size = a.avg_rtcp_compound_pkt_size;
+                oSRRecvd = a.oSRRecvd;
+                oRTCPByeRecvd = a.oRTCPByeRecvd;
+            }
+            return *this;
+        }
+
+        void Reset()
+        {
+            lastSenderReportNTP = 0;
+            lastSenderReportRTP = 0;
+            lastSenderReportTS = 0;
+            lastSenderReportRecvTime = 0;
+            packetLossUptoThisRR = 0;
+            maxSeqNumRecievedUptoThisRR = 0;
+            lastRRGenTime = 0;
+            iLastSenderReportSSRC = 0;
+            avg_rtcp_compound_pkt_size = 0;
+            oSRRecvd = false;
+            oRTCPByeRecvd = false;
+        }
+
+
+
+        uint64	lastSenderReportNTP;
+        uint32	lastSenderReportRTP;
+        uint32	lastSenderReportTS;
+        uint64	lastSenderReportRecvTime;
+        int32	packetLossUptoThisRR;
+        int32   maxSeqNumRecievedUptoThisRR;
+        uint64	lastRRGenTime;
+        uint32  iLastSenderReportSSRC;
+        float	avg_rtcp_compound_pkt_size;
+        bool    oSRRecvd;
+        bool    oRTCPByeRecvd;
+};
+
+class RTPRateAdaptationInfo
+{
+    public:
+        RTPRateAdaptationInfo(): iRateAdaptation(false)
+                , iRateAdaptationFeedBackFrequency(0)
+                , iRateAdaptationRTCPRRCount(0)
+                , iRateAdaptationFreeBufferSpaceInBytes(0)
+        {
+        }
+        bool	iRateAdaptation;
+        uint32	iRateAdaptationFeedBackFrequency;
+        uint32	iRateAdaptationRTCPRRCount;
+        uint32	iRateAdaptationFreeBufferSpaceInBytes;
+};
+
+class PVRTCPChannelController;
+///////////////////////////////////////////////////////////////////////////////
+//PVRTCPChannelControllerObserver
+///////////////////////////////////////////////////////////////////////////////
+class PVRTCPChannelControllerObserver
+{
+    public:
+        virtual PVMFStatus RTCPSRReveived(PVRTCPChannelController* channelController) = 0;
+        virtual PVMFStatus RTCPByeReceived(PVRTCPChannelController* channelController) = 0;
+        virtual PVMFStatus RTCPRRReadyToSend(PVMFPortInterface*& aPort, PVMFSharedMediaMsgPtr& aMessage) = 0;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//PVRTCPChannelController
+///////////////////////////////////////////////////////////////////////////////
+class PVRTCPChannelController: public PvmfRtcpTimerObserver
+{
+    public:
+        static PVRTCPChannelController* New(PVRTCPChannelControllerObserver* aObserver, PVMFJitterBuffer& aRTPJitterBuffer, PVMFPortInterface* aFeedbackPort, PVMFMediaClock& aClientPlaybackClock, PVMFMediaClock& aRTCPClock);
+        ~PVRTCPChannelController();
+
+        void Reset();
+
+        PVMFJitterBuffer& GetJitterBuffer()
+        {
+            return irRTPDataJitterBuffer;
+        }
+
+        void StartRTCPMessageExchange();
+        void PauseRTCPMessageExchange();
+        void StopRTCPMessageExchange();
+
+        void SetRateAdaptation(bool aRateAdaptation, uint32 aRateAdaptationFeedBackFrequency, uint32 aRateAdaptationFreeBufferSpaceInBytes);
+        void SetRTCPIntervalInMicroSecs(uint32 aRTCPInterval);
+        bool SetPortRTCPParams(int aNumSenders, uint32 aRR, uint32 aRS)
+        {
+            iNumSenders = aNumSenders;
+            iRR = aRR;
+            iRS = aRS;
+            iRtcpBwConfigured = true;
+            return true;
+        }
+        PVMFStatus ProcessRTCPReport(PVMFSharedMediaMsgPtr& aMsg);
+        bool CheckAssociatedFeedbackPort(const PVMFPortInterface* aFeedbackPort)const
+        {
+            return (ipFeedbackPort == aFeedbackPort);
+        }
+
+        void SetMediaClockConverter(MediaClockConverter* aClockConverter)
+        {
+            ipMediaClockConverter = aClockConverter;
+        }
+
+        void Prepare(bool aAfterSeek)
+        {
+            if (aAfterSeek)
+            {
+                iRTCPStats.oRTCPByeRecvd = false;
+            }
+            if (iRtcpBwConfigured && (iRR == 0))
+            {
+                ipRTCPTimer->setRTCPInterval(0);
+                return;
+            }
+        }
+
+        const PVMFRTCPStats& GetRTCPStats()
+        {
+            return iRTCPStats;
+        }
+
+        virtual void RtcpTimerEvent();
+    private:
+        void Construct();
+        PVRTCPChannelController(PVRTCPChannelControllerObserver* aObserver, PVMFJitterBuffer& aRTPJitterBuffer, PVMFPortInterface* aFeedbackPort, PVMFMediaClock& aClientPlaybackClock, PVMFMediaClock& aRTCPClock);
+        PVRTCPChannelController& operator =(const PVRTCPChannelController&);
+        PVRTCPChannelController(const PVRTCPChannelController&);
+        void ResetParams(bool aMemoryCleanUp = false);
+        PVMFStatus ComposeFeedBackPacket();
+        uint32 CalcRtcpInterval();
+        PVMFStatus GenerateRTCPRR();
+        PVMFResizableSimpleMediaMsgAlloc*	CreateRTCPRRBufAllocReSize();
+
+        PVRTCPChannelControllerObserver*	ipObserver;
+        PVMFJitterBuffer&					irRTPDataJitterBuffer;
+        PVMFPortInterface*					ipFeedbackPort;
+        PVMFMediaClock&						irClientPlayBackClock;
+        PVMFMediaClock&						irRTCPClock;
+
+        RTPRateAdaptationInfo				iRTPChannelRateAdaptationInfo;
+        PVMFRTCPStats						iRTCPStats;
+        int									iNumSenders;
+        uint32								iRR;
+        uint32								iRS;
+        bool								iRtcpBwConfigured;
+        bool								iInitialRTCPIntervalComputation;
+        uint32								iRTCPIntervalInMicroSeconds;
+        bool								iInitialRTCPPacket;
+        PvmfRtcpTimer*						ipRTCPTimer;
+        OsclRand							iRandGen;
+        MediaClockConverter*				ipMediaClockConverter;
+
+        PVLogger*							ipRTCPDataPathLoggerIn;
+        PVLogger*							ipRTCPDataPathLoggerOut;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//PVRTCPProtoImplementorObserver
+///////////////////////////////////////////////////////////////////////////////
+class PVRTCPProtoImplementorObserver
+{
+    public:
+        virtual PVMFStatus RTCPPacketReceived(RTCPPacketType aPacketType, PVRTCPChannelController* aController) = 0;
+        virtual PVMFStatus RTCPReportReadyToSend(PVMFPortInterface*& aPort, PVMFSharedMediaMsgPtr& aMessage) = 0;
+        virtual PVMFStatus ProcessInfoEvent(PVMFAsyncEvent& aEvent) = 0;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+//PVRTCPProtoImplementor
+///////////////////////////////////////////////////////////////////////////////
+class PVRTCPProtoImplementor: public PVRTCPChannelControllerObserver
+{
+    public:
+        OSCL_IMPORT_REF static PVRTCPProtoImplementor* New(PVMFMediaClock& aClientPlayBackClock, PVMFMediaClock& aRTCPClock, PVRTCPProtoImplementorObserver* aObs, bool aBroadcastSession);
+        OSCL_IMPORT_REF ~PVRTCPProtoImplementor();
+
+        OSCL_EXPORT_REF void AddPVRTCPChannelController(PVRTCPChannelController* aPVRTCPChannelController);
+        OSCL_EXPORT_REF void RemoveAllRTCPChannelControllers();
+        OSCL_EXPORT_REF PVRTCPChannelController* GetRTCPChannelController(const PVMFPortInterface* aPort) const;
+
+        OSCL_IMPORT_REF void StartRTCPMessageExchange();
+        OSCL_IMPORT_REF void PauseRTCPMessageExchange();
+        OSCL_IMPORT_REF void StopRTCPMessageExchange();
+
+        OSCL_IMPORT_REF void Reset();
+
+        OSCL_IMPORT_REF PVMFStatus ProcessRTCPReport(PVMFPortInterface* aFeedbackPort, PVMFSharedMediaMsgPtr& aMsg);
+        OSCL_IMPORT_REF void SetRTCPIntervalInMicroSecs(uint32 aRTCPInterval);
+        OSCL_IMPORT_REF bool SetPortRTCPParams(PVMFPortInterface* aPort, int aNumSenders, uint32 aRR, uint32 aRS);
+
+        OSCL_IMPORT_REF void Prepare(bool aPlayAfterSeek);
+
+
+        bool RTCPByeReceivedOnAllControllers()
+        {
+            PVRTCPChannelController* rtcpChannelController = NULL;
+            Oscl_Vector<PVRTCPChannelController*, OsclMemAllocator>::iterator iter;
+            for (iter = iPVRTCPChannelController.begin(); iter !=  iPVRTCPChannelController.end(); iter++)
+            {
+                rtcpChannelController = *iter;
+                if (!(rtcpChannelController->GetRTCPStats().oRTCPByeRecvd))
+                {
+
+                    return false;
+                }
+            }
+            return true;
+        }
+
+        //Implementation of PVRTCPChannelControllerObserver
+        PVMFStatus RTCPSRReveived(PVRTCPChannelController* aChannelController);
+        PVMFStatus RTCPByeReceived(PVRTCPChannelController* aChannelController);
+        PVMFStatus RTCPRRReadyToSend(PVMFPortInterface*& aPort, PVMFSharedMediaMsgPtr& aMessage);
+    private:
+        PVRTCPProtoImplementor(PVMFMediaClock& aClientPlayBackClock, PVMFMediaClock& aRTCPClock, PVRTCPProtoImplementorObserver* aObs, bool aBroadcastSession);
+        void ResetParams(bool aMemoryCleanUp = false);
+        bool ProcessRTCPSRforAVSync();
+        void Construct();
+
+        const bool						iBroadcastSession;
+        PVMFMediaClock&					irClientPlayBackClock;
+        PVMFMediaClock&					irRTCPClock;
+        PVRTCPProtoImplementorObserver*	ipObserver;
+
+        bool							iPerformRTCPBasedAVSync;
+        bool							iRTCPAVSyncProcessed;
+        bool							iPlayStopTimeAvailable;
+        Oscl_Vector<PVRTCPChannelController*, OsclMemAllocator>	iPVRTCPChannelController;
+
+        PVLogger*	ipRTCPDataPathLoggerIn;
+        PVLogger*	ipRTCPAVSyncLogger;
+};
+
+#endif
diff --git a/nodes/streaming/jitterbuffernode/jitterbuffer/common/include/pvmf_rtcp_timer.h b/nodes/streaming/jitterbuffernode/jitterbuffer/common/include/pvmf_rtcp_timer.h
new file mode 100644
index 0000000..8774335
--- /dev/null
+++ b/nodes/streaming/jitterbuffernode/jitterbuffer/common/include/pvmf_rtcp_timer.h
@@ -0,0 +1,135 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#ifndef PVMF_RTCP_TIMER_H_INCLUDED
+#define PVMF_RTCP_TIMER_H_INCLUDED
+
+#ifndef OSCL_BASE_H_INCLUDED
+#include "oscl_base.h"
+#endif
+#ifndef PVLOGGER_H_INCLUDED
+#include "pvlogger.h"
+#endif
+#ifndef OSCL_SCHEDULER_AO_H_INCLUDED
+#include "oscl_scheduler_ao.h"
+#endif
+#ifndef PVMF_RETURN_CODES_H_INCLUDED
+#include "pvmf_return_codes.h"
+#endif
+#ifndef PVMF_SIMPLE_MEDIA_BUFFER_H_INCLUDED
+#include "pvmf_simple_media_buffer.h"
+#endif
+#ifndef PVMF_MEDIA_DATA_H_INCLUDED
+#include "pvmf_media_data.h"
+#endif
+#ifndef PVMF_RESIZABLE_SIMPLE_MEDIAMSG_H_INCLUDED
+#include "pvmf_resizable_simple_mediamsg.h"
+#endif
+#ifndef PVMF_SM_TUNABLES_H_INCLUDED
+#include "pvmf_sm_tunables.h"
+#endif
+
+/*
+oscl_mem_aligned_size(sizeof(PVMFMediaData)) +
+oscl_mem_aligned_size(sizeof(OsclRefCounterDA)) +
+oscl_mem_aligned_size(sizeof(MediaDataCleanupDA)) +
+sizeof(PVMFMediaMsgHeader));
+*/
+#define PVMF_MEDIA_DATA_CLASS_SIZE 128
+
+/* RTCP Packet Mem Pool Allocator */
+class PVMFRTCPMemPool
+{
+    public:
+        PVMFRTCPMemPool(uint32 aNumRTCPBufs = DEFAULT_RTCP_MEM_POOL_BUFFERS): ipMediaDataMemPool(NULL)
+        {
+            ipMediaDataMemPool = OSCL_NEW(OsclMemPoolFixedChunkAllocator, (aNumRTCPBufs, PVMF_MEDIA_DATA_CLASS_SIZE));
+        }
+
+        ~PVMFRTCPMemPool()
+        {
+            if (ipMediaDataMemPool)
+            {
+                ipMediaDataMemPool->removeRef();
+            }
+        }
+
+        OsclSharedPtr<PVMFMediaDataImpl> GetMediaDataImpl(uint32 size)
+        {
+            return (ipRTCPRRMsgBufAlloc->allocate(size));
+        }
+
+        PVMFResizableSimpleMediaMsgAlloc* ipRTCPRRMsgBufAlloc;
+        /* Memory pool for media data objects */
+        OsclMemPoolFixedChunkAllocator* ipMediaDataMemPool;
+};
+
+class PvmfRtcpTimer;
+
+/**
+ * Observer class for the rtcp timer AO
+ */
+class PvmfRtcpTimerObserver
+{
+    public:
+        virtual ~PvmfRtcpTimerObserver() {}
+        /**
+         * A timer event, indicating that the RTCP timer has expired.
+         */
+        virtual void RtcpTimerEvent() = 0;
+};
+
+/**
+ * RTCP timer object to Jitter Buffer node. This object generates events at
+ * specified RTCP time intervals
+ */
+class PvmfRtcpTimer : public OsclTimerObject
+{
+    public:
+        PvmfRtcpTimer(PvmfRtcpTimerObserver* aObserver);
+
+        virtual ~PvmfRtcpTimer();
+
+        /** Start RTCP Timer */
+        PVMFStatus Start();
+
+        /** Reset RTCP Timer */
+        PVMFStatus setRTCPInterval(uint32 rtcpTimeIntervalInMicroSecs);
+
+        /** Stop Timer events */
+        PVMFStatus Stop();
+
+        PVMFRTCPMemPool* getRTCPBuffAlloc()
+        {
+            return &iRTCPBufAlloc;
+        }
+
+    private:
+        void Run();
+
+        PVMFResizableSimpleMediaMsgAlloc* createRTCPRRBufAllocReSize();
+
+        uint32 iRTCPTimeIntervalInMicroSecs;
+        PvmfRtcpTimerObserver* iObserver;
+        PVLogger* ipLogger;
+        bool iStarted;
+
+        PVMFRTCPMemPool iRTCPBufAlloc;
+        OsclMemPoolResizableAllocator* iBufAlloc;
+        PVMFResizableSimpleMediaMsgAlloc* iImplAlloc;
+};
+#endif // PVMF_RTCP_TIMER_H_INCLUDED
diff --git a/nodes/streaming/jitterbuffernode/jitterbuffer/common/src/pvmf_jb_event_notifier.cpp b/nodes/streaming/jitterbuffernode/jitterbuffer/common/src/pvmf_jb_event_notifier.cpp
new file mode 100644
index 0000000..ded56b7
--- /dev/null
+++ b/nodes/streaming/jitterbuffernode/jitterbuffer/common/src/pvmf_jb_event_notifier.cpp
@@ -0,0 +1,505 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#ifndef PVMF_JB_EVENT_NOTIFIER_H
+#include "pvmf_jb_event_notifier.h"
+#endif
+
+
+OSCL_EXPORT_REF PVMFJBEventNotifier* PVMFJBEventNotifier::New(PVMFMediaClock& aNonDecreasingClock, PVMFMediaClock& aClientPlaybackClock, PVMFMediaClock& aEstimatedServerClock)
+{
+    PVMFJBEventNotifier* ptr = NULL;
+    int32 err = OsclErrNone;
+    OSCL_TRY(err, ptr = OSCL_NEW(PVMFJBEventNotifier, (aNonDecreasingClock, aClientPlaybackClock, aEstimatedServerClock));
+             ptr->Construct(););
+    if (err != OsclErrNone && ptr)
+    {
+        OSCL_DELETE(ptr);
+        ptr = NULL;
+    }
+    return ptr;
+}
+
+void PVMFJBEventNotifier::Construct()
+{
+    ipLogger = PVLogger::GetLoggerObject("PVMFJBEventNotifier");
+    int32 err = OsclErrNone;
+    OSCL_TRY(err,
+
+             ipNonDecreasingClkNotificationInterfaceObserver = OSCL_NEW(NonDecClkNotificationInterfaceObserver, (iJBEvntNtfrRequestInfoVectNonDecClk));
+             ipClientPlaybackClkNotificationInterfaceObserver = OSCL_NEW(ClientPlaybackClkNotificationInterfaceObserver, (iJBEvntNtfrRequestInfoVectClientPlaybackClk));
+             ipEstimatedSrvrClkNotificationInterfaceObserver = OSCL_NEW(EstimatedSrvrClkNotificationInterfaceObserver, (iJBEvntNtfrRequestInfoVectEstimatedServClk));
+
+             irNonDecreasingClock.ConstructMediaClockNotificationsInterface(ipNonDecreasingClockNotificationsInf, *ipNonDecreasingClkNotificationInterfaceObserver);
+             irClientPlaybackClock.ConstructMediaClockNotificationsInterface(ipClientPlayBackClockNotificationsInf, *ipClientPlaybackClkNotificationInterfaceObserver);
+             irEstimatedServerClock.ConstructMediaClockNotificationsInterface(ipEstimatedClockNotificationsInf, *ipEstimatedSrvrClkNotificationInterfaceObserver);
+
+            );
+
+    if (err != OsclErrNone || ((NULL == ipNonDecreasingClockNotificationsInf) || (NULL == ipClientPlayBackClockNotificationsInf) || (NULL == ipEstimatedClockNotificationsInf)))
+    {
+        CleanUp();
+    }
+}
+
+OSCL_EXPORT_REF PVMFJBEventNotifier::~PVMFJBEventNotifier()
+{
+    CleanUp();
+}
+
+void PVMFJBEventNotifier::CleanUp()
+{
+    CancelAllPendingCallbacks();
+
+    PVMF_JB_LOGEVENTNOTIFIER((0, "Est clock Vect Size %d", iJBEvntNtfrRequestInfoVectEstimatedServClk.size()));
+    PVMF_JB_LOGEVENTNOTIFIER((0, "Client clock Vect Size %d", iJBEvntNtfrRequestInfoVectClientPlaybackClk.size()));
+    PVMF_JB_LOGEVENTNOTIFIER((0, "Non dec clock Vect Size %d", iJBEvntNtfrRequestInfoVectNonDecClk.size()));
+
+    if (ipEstimatedClockNotificationsInf)
+    {
+        irEstimatedServerClock.DestroyMediaClockNotificationsInterface(ipEstimatedClockNotificationsInf);
+        ipEstimatedClockNotificationsInf = NULL;
+    }
+
+    if (ipClientPlayBackClockNotificationsInf)
+    {
+        irClientPlaybackClock.DestroyMediaClockNotificationsInterface(ipClientPlayBackClockNotificationsInf);
+        ipClientPlayBackClockNotificationsInf = NULL;
+    }
+
+    if (ipNonDecreasingClockNotificationsInf)
+    {
+        irNonDecreasingClock.DestroyMediaClockNotificationsInterface(ipNonDecreasingClockNotificationsInf);
+        ipNonDecreasingClockNotificationsInf = NULL;
+    }
+
+    if (ipNonDecreasingClkNotificationInterfaceObserver)
+    {
+        OSCL_DELETE(ipNonDecreasingClkNotificationInterfaceObserver);
+    }
+
+    if (ipClientPlaybackClkNotificationInterfaceObserver)
+    {
+        OSCL_DELETE(ipClientPlaybackClkNotificationInterfaceObserver);
+    }
+
+    if (ipEstimatedSrvrClkNotificationInterfaceObserver)
+    {
+        OSCL_DELETE(ipEstimatedSrvrClkNotificationInterfaceObserver);
+    }
+}
+
+OSCL_EXPORT_REF bool PVMFJBEventNotifier::RequestCallBack(const PVMFJBEventNotificationRequestInfo& aNotificationRequestInfo, uint32 aDelay, uint32& aCallBkId)
+{
+    PVMF_JB_LOGEVENTNOTIFIER((0, "PVMFJBEventNotifier::RequestCallBack In - Interface type[%d] Observer[0x%x] aDelay[%d]", aNotificationRequestInfo.GetMediaClockNotificationsInterfaceType(), aNotificationRequestInfo.GetObserver() , aDelay));
+    bool retval = false;
+    CLOCK_NOTIFICATION_INTF_TYPE interfaceType = aNotificationRequestInfo.GetMediaClockNotificationsInterfaceType();
+    PVMFMediaClockNotificationsInterface* eventNotificationInterface = NULL;
+    PVMFMediaClockNotificationsObs* callbackObserver = NULL;
+    Oscl_Vector<PVMFJBEventNotifierRequestInfo*, OsclMemAllocator>* jbEvntNtfrRequestInfoVect = NULL;
+
+    switch (interfaceType)
+    {
+        case CLOCK_NOTIFICATION_INTF_TYPE_NONDECREASING:
+        {
+            //Make sure clock is in running state
+            if (irNonDecreasingClock.GetState() != PVMFMediaClock::RUNNING)
+            {
+                return false;
+            }
+
+            eventNotificationInterface = ipNonDecreasingClockNotificationsInf;
+            jbEvntNtfrRequestInfoVect = &iJBEvntNtfrRequestInfoVectNonDecClk;
+            callbackObserver = ipNonDecreasingClkNotificationInterfaceObserver;
+        }
+        break;
+        case CLOCK_NOTIFICATION_INTF_TYPE_CLIENTPLAYBACK:
+        {
+            //Make sure clock is in running state
+            if (irClientPlaybackClock.GetState() != PVMFMediaClock::RUNNING)
+            {
+                return false;
+            }
+            eventNotificationInterface  = ipClientPlayBackClockNotificationsInf;
+            jbEvntNtfrRequestInfoVect = &iJBEvntNtfrRequestInfoVectClientPlaybackClk;
+            callbackObserver = ipClientPlaybackClkNotificationInterfaceObserver;
+        }
+        break;
+        case CLOCK_NOTIFICATION_INTF_TYPE_ESTIMATEDSERVER:
+        {
+            //Make sure clock is in running state
+            if (irEstimatedServerClock.GetState() != PVMFMediaClock::RUNNING)
+            {
+                return false;
+            }
+            eventNotificationInterface = ipEstimatedClockNotificationsInf;
+            jbEvntNtfrRequestInfoVect = &iJBEvntNtfrRequestInfoVectEstimatedServClk;
+            callbackObserver = ipEstimatedSrvrClkNotificationInterfaceObserver;
+        }
+        break;
+        default:
+        {
+            OSCL_ASSERT(false);
+        }
+    }
+
+    if (eventNotificationInterface && callbackObserver && aDelay > 0)
+    {
+        const int32 toleranceWndForCallback = 0;
+        PVMFStatus status = eventNotificationInterface->SetCallbackDeltaTime(aDelay, //delta time in clock when callBack should be called
+                            toleranceWndForCallback,
+                            callbackObserver, //observer object to be called on timeout
+                            false, //no threadLock
+                            aNotificationRequestInfo.GetContextData(), //no context
+                            aCallBkId); //ID used to identify the timer for cancellation
+        if (PVMFSuccess != status)
+        {
+            OSCL_ASSERT(false);
+        }
+        else
+        {
+            //Replicate aNotificationRequestInfo
+            PVMFJBEventNotifierRequestInfo *notifierReqInfo = OSCL_NEW(PVMFJBEventNotifierRequestInfo, ());
+            if (notifierReqInfo)
+            {
+                PVMFJBEventNotificationRequestInfo*	obsRequestInfo = OSCL_NEW(PVMFJBEventNotificationRequestInfo, (aNotificationRequestInfo));
+                notifierReqInfo->ipRequestInfo = obsRequestInfo;
+                notifierReqInfo->iCallBackId = aCallBkId;
+                jbEvntNtfrRequestInfoVect->push_back(notifierReqInfo);
+                retval = true;
+            }
+            PVMF_JB_LOGEVENTNOTIFIER((0, "PVMFJBEventNotifier::RequestCallBack - Allocated at 0x%x", notifierReqInfo));
+        }
+    }
+    else
+    {
+        OSCL_ASSERT(false);
+    }
+
+    PVMF_JB_LOGEVENTNOTIFIER((0, "PVMFJBEventNotifier::RequestCallBack Out - retval[%d] Interface type[%d] Observer[0x%x] aDelay[%d], aCallBkId[%d]", retval, aNotificationRequestInfo.GetMediaClockNotificationsInterfaceType(), aNotificationRequestInfo.GetObserver() , aDelay, aCallBkId));
+    return retval;
+}
+
+OSCL_EXPORT_REF bool PVMFJBEventNotifier::RequestAbsoluteTimeCallBack(const PVMFJBEventNotificationRequestInfo& aNotificationRequestInfo, uint32 aAbsoluteTime, uint32& aCallBkId)
+{
+    PVMF_JB_LOGEVENTNOTIFIER((0, "PVMFJBEventNotifier::RequestAbsoluteTimeCallBack In - Interface type[%d] Observer[0x%x] aAbsoluteTime[%d]", aNotificationRequestInfo.GetMediaClockNotificationsInterfaceType(), aNotificationRequestInfo.GetObserver() , aAbsoluteTime));
+    bool retval = false;
+    CLOCK_NOTIFICATION_INTF_TYPE interfaceType = aNotificationRequestInfo.GetMediaClockNotificationsInterfaceType();
+    PVMFMediaClockNotificationsInterface* eventNotificationInterface = NULL;
+    PVMFMediaClockNotificationsObs* callbackObserver = NULL;
+    Oscl_Vector<PVMFJBEventNotifierRequestInfo*, OsclMemAllocator>* jbEvntNtfrRequestInfoVect = NULL;
+
+    switch (interfaceType)
+    {
+        case CLOCK_NOTIFICATION_INTF_TYPE_NONDECREASING:
+        {
+            //Make sure clock is in running state
+            if (irNonDecreasingClock.GetState() != PVMFMediaClock::RUNNING)
+            {
+                return false;
+            }
+
+            eventNotificationInterface = ipNonDecreasingClockNotificationsInf;
+            jbEvntNtfrRequestInfoVect = &iJBEvntNtfrRequestInfoVectNonDecClk;
+            callbackObserver = ipNonDecreasingClkNotificationInterfaceObserver;
+        }
+        break;
+        case CLOCK_NOTIFICATION_INTF_TYPE_CLIENTPLAYBACK:
+        {
+            //Make sure clock is in running state
+            if (irClientPlaybackClock.GetState() != PVMFMediaClock::RUNNING)
+            {
+                return false;
+            }
+            eventNotificationInterface  = ipClientPlayBackClockNotificationsInf;
+            jbEvntNtfrRequestInfoVect = &iJBEvntNtfrRequestInfoVectClientPlaybackClk;
+            callbackObserver = ipClientPlaybackClkNotificationInterfaceObserver;
+        }
+        break;
+        case CLOCK_NOTIFICATION_INTF_TYPE_ESTIMATEDSERVER:
+        {
+            //Make sure clock is in running state
+            if (irEstimatedServerClock.GetState() != PVMFMediaClock::RUNNING)
+            {
+                return false;
+            }
+            eventNotificationInterface = ipEstimatedClockNotificationsInf;
+            jbEvntNtfrRequestInfoVect = &iJBEvntNtfrRequestInfoVectEstimatedServClk;
+            callbackObserver = ipEstimatedSrvrClkNotificationInterfaceObserver;
+        }
+        break;
+        default:
+        {
+            OSCL_ASSERT(false);
+        }
+    }
+
+    if (eventNotificationInterface && callbackObserver && aAbsoluteTime > 0)
+    {
+        const int32 toleranceWndForCallback = 0;
+        PVMFStatus status = eventNotificationInterface->SetCallbackAbsoluteTime(aAbsoluteTime,
+                            toleranceWndForCallback,
+                            callbackObserver, //observer object to be called on timeout
+                            false, //no threadLock
+                            aNotificationRequestInfo.GetContextData(), //no context
+                            aCallBkId); //ID used to identify the timer for cancellation
+        if (PVMFSuccess != status)
+        {
+            OSCL_ASSERT(false);
+        }
+        else
+        {
+            //Replicate aNotificationRequestInfo
+            PVMFJBEventNotifierRequestInfo *notifierReqInfo = OSCL_NEW(PVMFJBEventNotifierRequestInfo, ());
+            if (notifierReqInfo)
+            {
+                PVMFJBEventNotificationRequestInfo*	obsRequestInfo = OSCL_NEW(PVMFJBEventNotificationRequestInfo, (aNotificationRequestInfo));
+                notifierReqInfo->ipRequestInfo = obsRequestInfo;
+                notifierReqInfo->iCallBackId = aCallBkId;
+                jbEvntNtfrRequestInfoVect->push_back(notifierReqInfo);
+                retval = true;
+            }
+        }
+    }
+    else
+    {
+        OSCL_ASSERT(false);
+    }
+
+    PVMF_JB_LOGEVENTNOTIFIER((0, "PVMFJBEventNotifier::RequestCallBack Out - retval[%d] Interface type[%d] Observer[0x%x] aAbsoluteTime[%d], aCallBkId[%d]", retval, aNotificationRequestInfo.GetMediaClockNotificationsInterfaceType(), aNotificationRequestInfo.GetObserver() , aAbsoluteTime, aCallBkId));
+    return retval;
+}
+
+OSCL_EXPORT_REF void PVMFJBEventNotifier::CancelCallBack(const PVMFJBEventNotificationRequestInfo& aNotificationRequestInfo, uint32 aCallBkId)
+{
+    PVMF_JB_LOGEVENTNOTIFIER((0, "PVMFJBEventNotifier::CancelCallBack In - Interface type[%d] Observer[0x%x] aCallBkId[%d]", aNotificationRequestInfo.GetMediaClockNotificationsInterfaceType(), aNotificationRequestInfo.GetObserver() , aCallBkId));
+    CancelCallBack(aNotificationRequestInfo.GetMediaClockNotificationsInterfaceType(), aNotificationRequestInfo.GetObserver(), aCallBkId);
+}
+
+void PVMFJBEventNotifier::CancelCallBack(CLOCK_NOTIFICATION_INTF_TYPE aType, PVMFJBEventNotifierObserver* aObserver, uint32& aCallBkId)
+{
+    OSCL_UNUSED_ARG(aObserver);
+    PVMFMediaClockNotificationsInterface* eventNotificationInterface = NULL;
+    Oscl_Vector<PVMFJBEventNotifierRequestInfo*, OsclMemAllocator>* jbEvntNtfrRequestInfoVect = NULL;
+
+    switch (aType)
+    {
+        case CLOCK_NOTIFICATION_INTF_TYPE_NONDECREASING:
+        {
+            eventNotificationInterface = ipNonDecreasingClockNotificationsInf;
+            jbEvntNtfrRequestInfoVect = &iJBEvntNtfrRequestInfoVectNonDecClk;
+        }
+        break;
+        case CLOCK_NOTIFICATION_INTF_TYPE_CLIENTPLAYBACK:
+        {
+            eventNotificationInterface  = ipClientPlayBackClockNotificationsInf;
+            jbEvntNtfrRequestInfoVect = &iJBEvntNtfrRequestInfoVectClientPlaybackClk;
+        }
+        break;
+        case CLOCK_NOTIFICATION_INTF_TYPE_ESTIMATEDSERVER:
+        {
+            eventNotificationInterface = ipEstimatedClockNotificationsInf;
+            jbEvntNtfrRequestInfoVect = &iJBEvntNtfrRequestInfoVectEstimatedServClk;
+        }
+        break;
+        default:
+        {
+            OSCL_ASSERT(false);
+        }
+    }
+
+    if (eventNotificationInterface && jbEvntNtfrRequestInfoVect)
+    {
+        eventNotificationInterface->CancelCallback(aCallBkId, false);
+        Oscl_Vector<PVMFJBEventNotifierRequestInfo*, OsclMemAllocator>::iterator iter;
+        if (jbEvntNtfrRequestInfoVect->size())
+        {
+            for (iter = jbEvntNtfrRequestInfoVect->end() - 1; iter >= jbEvntNtfrRequestInfoVect->begin(); iter--)
+            {
+                PVMFJBEventNotifierRequestInfo* eventNotifierReqinfo = *iter;
+                if (aCallBkId == eventNotifierReqinfo->iCallBackId)
+                {
+                    OSCL_DELETE(eventNotifierReqinfo->ipRequestInfo);
+                    OSCL_DELETE(eventNotifierReqinfo);
+                    PVMF_JB_LOGEVENTNOTIFIER((0, "PVMFJBEventNotifier::RequestCallBack - Dellocated at 0x%x", eventNotifierReqinfo));
+                    jbEvntNtfrRequestInfoVect->erase(iter);
+                    break;
+                }
+            }
+        }
+    }
+}
+
+OSCL_EXPORT_REF void PVMFJBEventNotifier::CancelAllPendingCallbacks(CLOCK_NOTIFICATION_INTF_TYPE aType, PVMFJBEventNotifierObserver* aObserver)
+{
+    Oscl_Vector<PVMFJBEventNotifierRequestInfo*, OsclMemAllocator>* jbEvntNtfrRequestInfoVect = NULL;
+    switch (aType)
+    {
+        case CLOCK_NOTIFICATION_INTF_TYPE_NONDECREASING:
+        {
+            jbEvntNtfrRequestInfoVect = &iJBEvntNtfrRequestInfoVectNonDecClk;
+        }
+        break;
+        case CLOCK_NOTIFICATION_INTF_TYPE_CLIENTPLAYBACK:
+        {
+            jbEvntNtfrRequestInfoVect = &iJBEvntNtfrRequestInfoVectClientPlaybackClk;
+        }
+        break;
+        case CLOCK_NOTIFICATION_INTF_TYPE_ESTIMATEDSERVER:
+        {
+            jbEvntNtfrRequestInfoVect = &iJBEvntNtfrRequestInfoVectEstimatedServClk;
+        }
+        break;
+        default:
+        {
+            OSCL_ASSERT(false);
+        }
+    }
+
+    if (jbEvntNtfrRequestInfoVect)
+    {
+        Oscl_Vector<PVMFJBEventNotifierRequestInfo*, OsclMemAllocator>::iterator iter;
+        if (jbEvntNtfrRequestInfoVect->size())
+        {
+            for (iter = jbEvntNtfrRequestInfoVect->end() - 1; iter >= jbEvntNtfrRequestInfoVect->begin(); iter--)
+            {
+                PVMFJBEventNotifierRequestInfo* ptr = *iter;
+                CancelCallBack(aType, aObserver, ptr->iCallBackId);
+            }
+        }
+    }
+}
+
+OSCL_EXPORT_REF void PVMFJBEventNotifier::CancelAllPendingCallbacks()
+{
+    CancelAllPendingCallbacks(CLOCK_NOTIFICATION_INTF_TYPE_NONDECREASING);
+    CancelAllPendingCallbacks(CLOCK_NOTIFICATION_INTF_TYPE_CLIENTPLAYBACK);
+    CancelAllPendingCallbacks(CLOCK_NOTIFICATION_INTF_TYPE_ESTIMATEDSERVER);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//NonDecClkNotificationInterfaceObserver
+///////////////////////////////////////////////////////////////////////////////
+void NonDecClkNotificationInterfaceObserver::ProcessCallBack(uint32 aCallBackID, PVTimeComparisonUtils::MediaTimeStatus aTimerAccuracy, uint32 aDelta, const OsclAny* aContextData, PVMFStatus aStatus)
+{
+    OSCL_UNUSED_ARG(aTimerAccuracy);
+    OSCL_UNUSED_ARG(aDelta);
+    bool found = false;
+    Oscl_Vector<PVMFJBEventNotifierRequestInfo*, OsclMemAllocator>::iterator iter;
+    PVMFJBEventNotifierRequestInfo* eventNotifierReqinfo = NULL;
+
+    for (iter = irJBEvntNtfrRequestInfoVectNonDecClk.begin(); iter != irJBEvntNtfrRequestInfoVectNonDecClk.end(); iter++)
+    {
+        eventNotifierReqinfo = *iter;
+        if (aCallBackID == eventNotifierReqinfo->iCallBackId)
+        {
+            found = true;
+            break;
+        }
+    }
+    if (found && eventNotifierReqinfo)
+    {
+
+        PVMFJBEventNotifierObserver* observer = eventNotifierReqinfo->ipRequestInfo->GetObserver();
+        OSCL_DELETE(eventNotifierReqinfo->ipRequestInfo);
+        OSCL_DELETE(eventNotifierReqinfo);
+        PVMF_JB_LOGEVENTNOTIFIER((0, "PVMFJBEventNotifier::RequestCallBack - Dellocated at 0x%x", eventNotifierReqinfo));
+        irJBEvntNtfrRequestInfoVectNonDecClk.erase(iter);
+        observer->ProcessCallback(CLOCK_NOTIFICATION_INTF_TYPE_NONDECREASING, aCallBackID, aContextData, aStatus);
+    }
+    else
+        OSCL_ASSERT(false);
+}
+
+void NonDecClkNotificationInterfaceObserver::NotificationsInterfaceDestroyed()
+{
+
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//ClientPlaybackClkNotificationInterfaceObserver
+///////////////////////////////////////////////////////////////////////////////
+void ClientPlaybackClkNotificationInterfaceObserver::ProcessCallBack(uint32 aCallBackID, PVTimeComparisonUtils::MediaTimeStatus aTimerAccuracy, uint32 aDelta, const OsclAny* aContextData, PVMFStatus aStatus)
+{
+    OSCL_UNUSED_ARG(aTimerAccuracy);
+    OSCL_UNUSED_ARG(aDelta);
+    bool found = false;
+    Oscl_Vector<PVMFJBEventNotifierRequestInfo*, OsclMemAllocator>::iterator iter;
+    PVMFJBEventNotifierRequestInfo* eventNotifierReqinfo = NULL;
+    for (iter = irJBEvntNtfrRequestInfoVectClientPlaybackClk.begin(); iter != irJBEvntNtfrRequestInfoVectClientPlaybackClk.end(); iter++)
+    {
+        eventNotifierReqinfo = *iter;
+        if (aCallBackID == eventNotifierReqinfo->iCallBackId)
+        {
+            found = true;
+            break;
+        }
+    }
+    if (found && eventNotifierReqinfo)
+    {
+        PVMFJBEventNotifierObserver* observer = eventNotifierReqinfo->ipRequestInfo->GetObserver();
+        OSCL_DELETE(eventNotifierReqinfo->ipRequestInfo);
+        OSCL_DELETE(eventNotifierReqinfo);
+        PVMF_JB_LOGEVENTNOTIFIER((0, "PVMFJBEventNotifier::RequestCallBack - Dellocated at 0x%x", eventNotifierReqinfo));
+        irJBEvntNtfrRequestInfoVectClientPlaybackClk.erase(iter);
+        observer->ProcessCallback(CLOCK_NOTIFICATION_INTF_TYPE_CLIENTPLAYBACK, aCallBackID, aContextData, aStatus);
+    }
+    else
+        OSCL_ASSERT(false);
+}
+
+void ClientPlaybackClkNotificationInterfaceObserver::NotificationsInterfaceDestroyed()
+{
+
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//EstimatedSrvrClkNotificationInterfaceObserver
+///////////////////////////////////////////////////////////////////////////////
+void EstimatedSrvrClkNotificationInterfaceObserver::ProcessCallBack(uint32 aCallBackID, PVTimeComparisonUtils::MediaTimeStatus aTimerAccuracy, uint32 aDelta, const OsclAny* aContextData, PVMFStatus aStatus)
+{
+    OSCL_UNUSED_ARG(aTimerAccuracy);
+    OSCL_UNUSED_ARG(aDelta);
+    bool found = false;
+    Oscl_Vector<PVMFJBEventNotifierRequestInfo*, OsclMemAllocator>::iterator iter;
+    PVMFJBEventNotifierRequestInfo* eventNotifierReqinfo = NULL;
+    for (iter = irJBEvntNtfrRequestInfoVectEstimatedServClk.begin(); iter != irJBEvntNtfrRequestInfoVectEstimatedServClk.end(); iter++)
+    {
+        eventNotifierReqinfo = *iter;
+        if (aCallBackID == eventNotifierReqinfo->iCallBackId)
+        {
+            found = true;
+            break;
+        }
+    }
+    if (found && eventNotifierReqinfo)
+    {
+        PVMFJBEventNotifierObserver* observer = eventNotifierReqinfo->ipRequestInfo->GetObserver();
+        OSCL_DELETE(eventNotifierReqinfo->ipRequestInfo);
+        OSCL_DELETE(eventNotifierReqinfo);
+        PVMF_JB_LOGEVENTNOTIFIER((0, "PVMFJBEventNotifier::RequestCallBack - Dellocated at 0x%x", eventNotifierReqinfo));
+        irJBEvntNtfrRequestInfoVectEstimatedServClk.erase(iter);
+        observer->ProcessCallback(CLOCK_NOTIFICATION_INTF_TYPE_ESTIMATEDSERVER, aCallBackID, aContextData, aStatus);
+    }
+    else
+        OSCL_ASSERT(false);
+}
+
+void EstimatedSrvrClkNotificationInterfaceObserver::NotificationsInterfaceDestroyed()
+{
+
+}
diff --git a/nodes/streaming/jitterbuffernode/jitterbuffer/common/src/pvmf_jb_firewall_pkts_impl.cpp b/nodes/streaming/jitterbuffernode/jitterbuffer/common/src/pvmf_jb_firewall_pkts_impl.cpp
new file mode 100644
index 0000000..bbf1f61
--- /dev/null
+++ b/nodes/streaming/jitterbuffernode/jitterbuffer/common/src/pvmf_jb_firewall_pkts_impl.cpp
@@ -0,0 +1,290 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#ifndef PVMF_JB_FIREWALL_PKTS_IMPL_H_INCLUDED
+#include "pvmf_jb_firewall_pkts_impl.h"
+#endif
+
+#ifndef OSCL_EXCEPTION_H_INCLUDED
+#include "oscl_exception.h"
+#endif
+
+#ifndef OSCL_BIN_STREAM_H_INCLUDED
+#include "oscl_bin_stream.h"
+#endif
+
+#ifndef PVMF_JB_JITTERBUFFERMISC_H_INCLUDED
+#include "pvmf_jb_jitterbuffermisc.h"
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//PVFirewallPacketExchanger
+///////////////////////////////////////////////////////////////////////////////
+PVFirewallPacketExchanger* PVFirewallPacketExchanger::New(const RTPSessionInfoForFirewallExchange& aRTPSessionInfo)
+{
+    int32 err = OsclErrNone;
+    PVFirewallPacketExchanger* pExchanger = NULL;
+    OSCL_TRY(err,
+             pExchanger = OSCL_NEW(PVFirewallPacketExchanger, (aRTPSessionInfo));
+             pExchanger->Construct();
+            );
+
+    if (pExchanger && OsclErrNone != err)
+    {
+        OSCL_DELETE(pExchanger);
+        pExchanger = NULL;
+    }
+
+    return pExchanger;
+}
+
+void PVFirewallPacketExchanger::Construct()
+{
+    CreateMemAllocators();
+}
+
+void PVFirewallPacketExchanger::CreateMemAllocators()
+{
+    ipMediaDataAlloc = OSCL_NEW(OsclMemPoolFixedChunkAllocator, (PVMF_JITTER_BUFFER_NODE_FIREWALL_PKT_MEMPOOL_SIZE));
+    ipMediaDataImplAlloc = OSCL_NEW(PVMFSimpleMediaBufferCombinedAlloc, (ipMediaDataAlloc));
+    ipMediaMsgAlloc = OSCL_NEW(OsclMemPoolFixedChunkAllocator, (PVMF_JITTER_BUFFER_NODE_FIREWALL_PKT_MEMPOOL_SIZE, PVMF_JITTER_BUFFER_NODE_MEDIA_MSG_SIZE));
+
+    if (!(ipMediaDataAlloc && ipMediaDataImplAlloc && ipMediaMsgAlloc))
+    {
+        OSCL_LEAVE(PVMFErrNoMemory);
+    }
+}
+
+PVFirewallPacketExchanger::~PVFirewallPacketExchanger()
+{
+    DestroyMemoryAllocators();
+}
+
+void PVFirewallPacketExchanger::DestroyMemoryAllocators()
+{
+    if (ipMediaMsgAlloc)
+    {
+        OSCL_DELETE(ipMediaMsgAlloc);
+        ipMediaMsgAlloc = NULL;
+    }
+
+    if (ipMediaDataImplAlloc)
+    {
+        OSCL_DELETE(ipMediaDataImplAlloc);
+        ipMediaDataImplAlloc = NULL;
+    }
+
+    if (ipMediaDataAlloc)
+    {
+        OSCL_DELETE(ipMediaDataAlloc);
+        ipMediaDataAlloc = NULL;
+    }
+}
+
+bool PVFirewallPacketExchanger::Allocate(PVMFSharedMediaDataPtr& aFireWallPkt, OsclSharedPtr<PVMFMediaDataImpl>& aMediaDataImpl, const int aSize)
+{
+    int32 err = OsclErrNone;
+    OSCL_TRY(err,
+             aMediaDataImpl = ipMediaDataImplAlloc->allocate(aSize);
+             aFireWallPkt = PVMFMediaData::createMediaData(aMediaDataImpl,
+                            ipMediaMsgAlloc);
+            );
+    if (err != OsclErrNone)
+    {
+        return false;
+    }
+    return true;
+}
+
+bool PVFirewallPacketExchanger::ComposeFirewallPacket(PVMFJitterBufferFireWallPacketFormat aFormat, uint32 aPacketCnt, PVMFPortInterface*& aRTPJitterBufferPort, PVMFSharedMediaMsgPtr& aSharedMediaMsg)
+{
+    PVMFSharedMediaMsgPtr fireWallMsg;
+    PVMFSharedMediaDataPtr fireWallPkt;
+    OsclSharedPtr<PVMFMediaDataImpl> mediaDataImpl;
+
+    if (aFormat == PVMF_JB_FW_PKT_FORMAT_PV)
+    {
+        bool retval = Allocate(fireWallPkt, mediaDataImpl, PVMF_JITTER_BUFFER_NODE_MAX_FIREWALL_PKT_SIZE);
+
+        if (retval == false)
+        {
+            return retval;
+        }
+
+        fireWallPkt->setMediaFragFilledLen(0, PVMF_JITTER_BUFFER_NODE_MAX_FIREWALL_PKT_SIZE);
+
+        OsclRefCounterMemFrag refCntMemFrag;
+        mediaDataImpl->getMediaFragment(0, refCntMemFrag);
+
+        OsclMemoryFragment memFrag = refCntMemFrag.getMemFrag();
+        OsclBinOStreamBigEndian outstream;
+
+        outstream.Attach(1, &memFrag);
+
+        outstream << aPacketCnt;
+        outstream << iRTPSessionInfoForFirewallExchange.iSSRC;
+    }
+    else
+    {
+        bool retval = Allocate(fireWallPkt, mediaDataImpl, PVMF_JITTER_BUFFER_NODE_MAX_RTP_FIREWALL_PKT_SIZE);
+
+        if (retval == false)
+        {
+            return retval;
+        }
+
+        fireWallPkt->setMediaFragFilledLen(0, PVMF_JITTER_BUFFER_NODE_MAX_RTP_FIREWALL_PKT_SIZE);
+
+        OsclRefCounterMemFrag refCntMemFrag;
+        mediaDataImpl->getMediaFragment(0, refCntMemFrag);
+
+        OsclMemoryFragment memFrag = refCntMemFrag.getMemFrag();
+        oscl_memset(memFrag.ptr, 0, memFrag.len);
+
+        OsclBinOStreamBigEndian outstream;
+        outstream.Attach(1, &memFrag);
+
+        //Skip to start of SSRC
+        outstream.seekFromCurrentPosition(8);
+
+        //fill in the SSRC
+        outstream << iRTPSessionInfoForFirewallExchange.iSSRC;
+    }
+
+    convertToPVMFMediaMsg(aSharedMediaMsg, fireWallPkt);
+
+    aRTPJitterBufferPort = iRTPSessionInfoForFirewallExchange.ipRTPDataJitterBufferPort;
+    return true;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//PVFirewallPacketExchangeImpl
+///////////////////////////////////////////////////////////////////////////////
+OSCL_EXPORT_REF PVFirewallPacketExchangeImpl* PVFirewallPacketExchangeImpl::New(PVMFJitterBufferFireWallPacketInfo& aFireWallPacketExchangeInfo, PVMFJBEventNotifier& aEventNotifier, PVMFJitterBufferMiscObserver* aObserver)
+{
+    int32 err = OsclErrNone;
+    PVFirewallPacketExchangeImpl* pFirewallpacketExchangeImpl = NULL;
+    OSCL_TRY(err,
+             pFirewallpacketExchangeImpl = OSCL_NEW(PVFirewallPacketExchangeImpl, (aFireWallPacketExchangeInfo, aEventNotifier, aObserver));
+             pFirewallpacketExchangeImpl->Construct();
+            );
+    if (OsclErrNone != err && pFirewallpacketExchangeImpl)
+    {
+        OSCL_DELETE(pFirewallpacketExchangeImpl);
+    }
+    return pFirewallpacketExchangeImpl;
+}
+
+void PVFirewallPacketExchangeImpl::Construct()
+{
+    ipDataPathLoggerFireWall = PVLogger::GetLoggerObject("PVFirewallPacketExchangeImpl");
+}
+
+OSCL_EXPORT_REF PVFirewallPacketExchangeImpl::~PVFirewallPacketExchangeImpl()
+{
+    Oscl_Vector<PVFirewallPacketExchanger*, OsclMemAllocator>::iterator iter;
+    for (iter = iFirewallPacketExchangers.begin(); iter != iFirewallPacketExchangers.end(); iter++)
+    {
+        OSCL_DELETE(*iter);
+        *iter = NULL;
+    }
+}
+
+OSCL_EXPORT_REF void PVFirewallPacketExchangeImpl::SetRTPSessionInfoForFirewallExchange(const RTPSessionInfoForFirewallExchange& aRTPSessionInfo)
+{
+    PVFirewallPacketExchanger* pFirewallPacketExchanger = PVFirewallPacketExchanger::New(aRTPSessionInfo);
+    if (pFirewallPacketExchanger)
+        iFirewallPacketExchangers.push_back(pFirewallPacketExchanger);
+}
+
+OSCL_EXPORT_REF PVMFStatus PVFirewallPacketExchangeImpl::InitiateFirewallPacketExchange()
+{
+    iNumAttemptsDone = 0;
+    if (iNumAttemptsDone < iFireWallPacketExchangeInfo.iNumAttempts)
+    {
+        SendFirewallPackets();
+    }
+    else
+    {
+        ipObserver->MediaReceivingChannelPrepared(true);
+    }
+    return PVMFSuccess;
+}
+
+OSCL_EXPORT_REF PVMFStatus PVFirewallPacketExchangeImpl::CancelFirewallPacketExchange()
+{
+    if (iCallBackPending)
+    {
+        PVMFJBEventNotificationRequestInfo requestInfo(CLOCK_NOTIFICATION_INTF_TYPE_NONDECREASING, this, NULL);
+        irEventNotifier.CancelCallBack(requestInfo, iCallBackId);
+        iCallBackId = 0;
+        iCallBackPending = false;
+    }
+    iNumAttemptsDone = 0;
+    return PVMFSuccess;
+}
+
+void PVFirewallPacketExchangeImpl::ProcessCallback(CLOCK_NOTIFICATION_INTF_TYPE aClockNotificationInterfaceType, uint32 aCallBkId, const OsclAny* aContext, PVMFStatus aStatus)
+{
+    OSCL_UNUSED_ARG(aClockNotificationInterfaceType);
+    OSCL_UNUSED_ARG(aContext);
+    if (PVMFSuccess == aStatus)
+    {
+        if (aCallBkId == iCallBackId)
+        {
+            iCallBackPending = false;
+            SendFirewallPackets();
+        }
+    }
+    else
+    {
+        //Log it <Assert?>
+    }
+}
+
+void PVFirewallPacketExchangeImpl::SendFirewallPackets()
+{
+    Oscl_Vector<PVFirewallPacketExchanger*, OsclMemAllocator>::iterator iter;
+    for (iter = iFirewallPacketExchangers.begin(); iter != iFirewallPacketExchangers.end(); iter++)
+    {
+        PVFirewallPacketExchanger* pFirewallpacketExchanger = *iter;
+        PVMFPortInterface* pPortInterface = NULL;
+        PVMFSharedMediaMsgPtr sharedMediaMsgPtr;
+        bool packetComposed = pFirewallpacketExchanger->ComposeFirewallPacket(iFireWallPacketExchangeInfo.iFormat, iNumAttemptsDone, pPortInterface, sharedMediaMsgPtr);
+        if (packetComposed)
+        {
+            ipObserver->MessageReadyToSend(pPortInterface, sharedMediaMsgPtr);
+        }
+        else
+        {
+            PVMF_JB_LOG_FW((0, "PVFirewallPacketExchangeImpl::SendFirewallPackets - packet composition failed"));
+            OSCL_LEAVE(PVMFErrNoResources);
+        }
+    }
+    ++iNumAttemptsDone;
+
+    if (iNumAttemptsDone < iFireWallPacketExchangeInfo.iNumAttempts)
+    {
+        PVMFJBEventNotificationRequestInfo requestInfo(CLOCK_NOTIFICATION_INTF_TYPE_NONDECREASING, this, NULL);
+        irEventNotifier.RequestCallBack(requestInfo, iFireWallPacketExchangeInfo.iServerRoundTripDelayInMS, iCallBackId);
+        iCallBackPending = true;
+    }
+    else
+    {
+        ipObserver->MediaReceivingChannelPrepared(true);
+    }
+}
diff --git a/nodes/streaming/jitterbuffernode/jitterbuffer/common/src/pvmf_jb_jitterbuffermisc.cpp b/nodes/streaming/jitterbuffernode/jitterbuffer/common/src/pvmf_jb_jitterbuffermisc.cpp
new file mode 100644
index 0000000..39d3eb3
--- /dev/null
+++ b/nodes/streaming/jitterbuffernode/jitterbuffer/common/src/pvmf_jb_jitterbuffermisc.cpp
@@ -0,0 +1,1187 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#ifndef PVMF_JB_JITTERBUFFERMISC_H_INCLUDED
+#include "pvmf_jb_jitterbuffermisc.h"
+#endif
+
+#ifndef PVMF_SM_NODE_EVENTS_H_INCLUDED
+#include "pvmf_sm_node_events.h"
+#endif
+
+#ifndef PVMF_BASIC_ERRORINFOMESSAGE_H_INCLUDED
+#include "pvmf_basic_errorinfomessage.h"
+#endif
+
+OSCL_EXPORT_REF PVMFJitterBufferMisc* PVMFJitterBufferMisc::New(PVMFJitterBufferMiscObserver* aObserver, PVMFMediaClock& aClientPlaybackClock, Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>& aPortParamsQueue)
+{
+    int32 err = OsclErrNone;
+    PVMFJitterBufferMisc* ptr = NULL;
+    OSCL_TRY(err, ptr = OSCL_NEW(PVMFJitterBufferMisc, (aObserver, aClientPlaybackClock, aPortParamsQueue));
+             ptr->Construct());
+    if (err != OsclErrNone)
+    {
+        ptr = NULL;
+    }
+    return ptr;
+}
+
+void PVMFJitterBufferMisc::Construct()
+{
+    ipJBEventsClockLogger = PVLogger::GetLoggerObject("jitterbuffernode.eventsclock");
+    ipRTCPDataPathLoggerIn = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffer.rtcp.in");
+    ipClockLoggerSessionDuration = PVLogger::GetLoggerObject("clock.streaming_manager.sessionduration");
+    ipClockLogger = PVLogger::GetLoggerObject("clock.jitterbuffernode");
+    ipDataPathLoggerIn = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffer.in");
+    ipDataPathLoggerOut = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffer.out");
+    ipDataPathLoggerRTCP = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffer.rtcp");
+    ipLogger = PVLogger::GetLoggerObject("PVMFJitterBufferMisc");
+    ipClockLoggerRebuff = PVLogger::GetLoggerObject("sourcenode.clock.rebuff");
+
+    CreateProtocolObjects();
+
+    ResetParams(false);
+
+    //Look for the input ports in the port vect
+    //Look for the corresponding input port and the jitter buffer associated with it
+    Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator iter_begin = irPortParamsQueue.begin();
+    Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator iter_end = irPortParamsQueue.end();
+    while (iter_begin != iter_end)
+    {
+        PVMFJitterBufferPortParams* portParams = *iter_begin;
+        if (PVMF_JITTER_BUFFER_PORT_TYPE_INPUT == portParams->iTag)//input port
+        {
+            PVMFPortInterface* feedbackPort = NULL;
+            PVMFJitterBuffer* jitterBuffer = NULL;
+            PVRTCPChannelController* rtcpChannelController = NULL;
+            if (LookupRTCPChannelParams(&portParams->irPort, feedbackPort, jitterBuffer))
+            {
+                rtcpChannelController = PVRTCPChannelController::New(ipRTCPProtoImplementator, *jitterBuffer, feedbackPort, irClientPlaybackClock, *ipWallClock);
+                ipRTCPProtoImplementator->AddPVRTCPChannelController(rtcpChannelController);
+            }
+        }
+        iter_begin++;
+    }
+}
+
+bool PVMFJitterBufferMisc::CreateProtocolObjects()
+{
+    uint32 start = 0;
+    bool overflowFlag = false;
+
+    ipEstimatedServerClock = OSCL_NEW(PVMFMediaClock, ());
+    ipEstimatedServerClock->SetClockTimebase(iEstimatedServerClockTimeBase);
+    if (ipEstimatedServerClock)
+    {
+        ipEstimatedServerClock->Stop();
+        ipEstimatedServerClock->SetStartTime32(start, PVMF_MEDIA_CLOCK_MSEC, overflowFlag);
+    }
+
+    ipWallClock = OSCL_NEW(PVMFMediaClock, ());
+    ipWallClock->SetClockTimebase(iWallClockTimeBase);
+    if (ipWallClock)
+    {
+        ipWallClock->SetStartTime32(start, PVMF_MEDIA_CLOCK_MSEC, overflowFlag);
+    }
+
+    ipNonDecreasingClock = OSCL_NEW(PVMFMediaClock, ());
+    ipNonDecreasingClock->SetClockTimebase(iNonDecreasingTimeBase);
+    if (ipNonDecreasingClock)
+    {
+        ipNonDecreasingClock->SetStartTime32(start, PVMF_MEDIA_CLOCK_MSEC, overflowFlag);
+    }
+
+    ipEventNotifier = PVMFJBEventNotifier::New(*ipNonDecreasingClock, irClientPlaybackClock, *ipEstimatedServerClock);
+
+    return true;
+}
+
+void PVMFJitterBufferMisc::ResetParams(bool aReleaseMemory)
+{
+    if (ipFireWallPacketExchangerImpl && aReleaseMemory)
+    {
+        OSCL_DELETE(ipFireWallPacketExchangerImpl);
+    }
+
+    ipFireWallPacketExchangerImpl = NULL;
+
+    iSessionDuration = 0;
+    iStreamingSessionExpired = false;
+    iPlayDurationAvailable = false;
+    iBroadcastSession = false;
+
+    iPlayStartTimeInMS = 0;
+    iPlayStopTimeInMS = 0;
+    iPlayStopTimeAvailable = false;
+
+
+    iFireWallPacketsExchangeEnabled = true;
+    iEstimatedServerClockUpdateCallbackId = 0;
+    iEstimatedServerClockUpdateCallbackPending = false;
+
+
+}
+
+OSCL_EXPORT_REF PVMFJitterBufferMisc::~PVMFJitterBufferMisc()
+{
+    ResetParams(true);
+    if (ipRTCPProtoImplementator)
+    {
+        ipRTCPProtoImplementator->RemoveAllRTCPChannelControllers();
+        OSCL_DELETE(ipRTCPProtoImplementator);
+    }
+
+    if (ipEventNotifier)
+    {
+        OSCL_DELETE(ipEventNotifier);
+    }
+
+    if (ipSessionDurationTimer)
+    {
+        OSCL_DELETE(ipSessionDurationTimer);
+    }
+
+    if (ipEstimatedServerClock)
+    {
+        OSCL_DELETE(ipEstimatedServerClock);
+    }
+
+    if (ipWallClock)
+    {
+        OSCL_DELETE(ipWallClock);
+    }
+
+    if (ipNonDecreasingClock)
+    {
+        OSCL_DELETE(ipNonDecreasingClock);
+    }
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferMisc::StreamingSessionStarted()
+{
+    //if not already started...
+    if (ipNonDecreasingClock)
+    {
+        ipNonDecreasingClock->Start();
+    }
+
+    if (ipWallClock)
+    {
+        //Starts if not already running, check for state
+        ipWallClock->Start();
+    }
+
+    //Estimated server is to be updated only by the jitter buffer.
+    Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator iter;
+    for (iter = irPortParamsQueue.begin(); iter != irPortParamsQueue.end() ; iter++)
+    {
+        PVMFJitterBufferPortParams* pPortParam = *iter;
+        if (pPortParam)
+        {
+            PVMFJitterBuffer* jitterBuffer = pPortParam->ipJitterBuffer;
+            if (jitterBuffer)
+            {
+                jitterBuffer->StreamingSessionStarted();
+            }
+        }
+    }
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferMisc::StreamingSessionStopped()
+{
+    Reset();
+    Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator iter;
+    for (iter = irPortParamsQueue.begin(); iter != irPortParamsQueue.end() ; iter++)
+    {
+        PVMFJitterBufferPortParams* pPortParam = *iter;
+        if (pPortParam)
+        {
+            PVMFJitterBuffer* jitterBuffer = pPortParam->ipJitterBuffer;
+            if (jitterBuffer)
+            {
+                jitterBuffer->StreamingSessionStopped();
+            }
+        }
+    }
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferMisc::StreamingSessionPaused()
+{
+    ipNonDecreasingClock->Pause();
+    ipEstimatedServerClock->Pause();
+    if (ipSessionDurationTimer)
+        ipSessionDurationTimer->Cancel();
+
+    Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator iter;
+    for (iter = irPortParamsQueue.begin(); iter != irPortParamsQueue.end() ; iter++)
+    {
+        PVMFJitterBufferPortParams* pPortParam = *iter;
+        if (pPortParam)
+        {
+            PVMFJitterBuffer* jitterBuffer = pPortParam->ipJitterBuffer;
+            if (jitterBuffer)
+            {
+                jitterBuffer->StreamingSessionPaused();
+            }
+        }
+    }
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferMisc::StreamingSessionBufferingStart()
+{
+    if (ipSessionDurationTimer)
+        ipSessionDurationTimer->Cancel();
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferMisc::StreamingSessionBufferingEnd()
+{
+    if (ipSessionDurationTimer)
+    {
+        ComputeCurrentSessionDurationMonitoringInterval();
+        ipSessionDurationTimer->Start();
+    }
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferMisc::SetBroadcastSession()
+{
+    iBroadcastSession = true;
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferMisc::ResetEstimatedServerClock()
+{
+    if (ipEstimatedServerClock)
+    {
+        uint32 start = 0;
+        ipEstimatedServerClock->Stop();
+        bool overflowFlag = false;
+        ipEstimatedServerClock->SetStartTime32(start, PVMF_MEDIA_CLOCK_MSEC, overflowFlag);
+    }
+}
+
+OSCL_EXPORT_REF bool PVMFJitterBufferMisc::PrepareForRepositioning(bool oUseExpectedClientClockVal, uint32 aExpectedClientClockVal)
+{
+    bool overflowFlag = false;
+
+    //A session will have three things
+    //Media channel		:	Valid for any type of streaming
+    //Feedback Channel	:	Valid for RTSP based streaming
+    //Session Info	:	Valid for any type of streaming
+
+    Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator it;
+    for (it = irPortParamsQueue.begin();
+            it != irPortParamsQueue.end();
+            it++)
+    {
+        PVMFJitterBufferPortParams* pPortParam = *it;
+        if (pPortParam->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
+        {
+            pPortParam->ipJitterBuffer->PrepareForRepositioning();
+        }
+    }
+
+    PVMFTimestamp ts = 0;
+    if (oUseExpectedClientClockVal)
+    {
+        ts = aExpectedClientClockVal;
+    }
+    else
+    {
+        //reset player clock
+        ts = GetActualMediaDataTSAfterSeek();
+    }
+
+    irClientPlaybackClock.Stop();
+    irClientPlaybackClock.SetStartTime32(ts,
+                                         PVMF_MEDIA_CLOCK_MSEC, overflowFlag);
+
+    LOGCLIENTANDESTIMATEDSERVCLK_DATAPATH;
+    LOGCLIENTANDESTIMATEDSERVCLK_DATAPATH_OUT;
+    LOGCLIENTANDESTIMATEDSERVCLK_REBUFF;
+
+    if (ipRTCPProtoImplementator)
+        ipRTCPProtoImplementator->Prepare(true);
+    iStreamingSessionExpired = false;
+
+    return true;
+}
+
+OSCL_EXPORT_REF bool PVMFJitterBufferMisc::PurgeElementsWithNPTLessThan(NptTimeFormat &aNPTTime)
+{
+    if (aNPTTime.npt_format != NptTimeFormat::NPT_SEC)
+    {
+        return false;
+    }
+
+    uint32 i;
+    for (i = 0; i < irPortParamsQueue.size(); i++)
+    {
+        PVMFJitterBufferPortParams* portParams = irPortParamsQueue[i];
+        portParams->irPort.ClearMsgQueues();
+    }
+
+    for (i = 0; i < irPortParamsQueue.size(); i++)
+    {
+        PVMFJitterBufferPortParams* portParams = irPortParamsQueue[i];
+        if (portParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
+        {
+            if (portParams->ipJitterBuffer != NULL)
+            {
+                //portParams.iJitterBuffer->FlushJitterBuffer();
+                PVMFTimestamp baseTS = 1000 * aNPTTime.npt_sec.sec + aNPTTime.npt_sec.milli_sec;
+
+                portParams->iMediaClockConverter.set_clock_other_timescale(baseTS, 1000);
+                baseTS = portParams->iMediaClockConverter.get_current_timestamp();
+                portParams->ipJitterBuffer->PurgeElementsWithTimestampLessThan(baseTS);
+            }
+        }
+    }
+
+    // Update client clock here to avoid premature buffer fullness
+    PVMFTimestamp ts = 1000 * aNPTTime.npt_sec.sec + aNPTTime.npt_sec.milli_sec;
+    bool overflowFlag = false;
+    irClientPlaybackClock.Stop();
+    irClientPlaybackClock.SetStartTime32(ts, PVMF_MEDIA_CLOCK_MSEC, overflowFlag);
+    return true;
+}
+
+OSCL_EXPORT_REF bool PVMFJitterBufferMisc::IsSessionExpired()
+{
+    return iStreamingSessionExpired;
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferMisc::Prepare()
+{
+    if (ipNonDecreasingClock)
+    {
+        ipNonDecreasingClock->Start();
+    }
+
+    if (ipWallClock)
+    {
+        //Starts if not already running, check for state
+        ipWallClock->Start();
+    }
+
+    if (UseSessionDurationTimerForEOS())
+    {
+        ipSessionDurationTimer = OSCL_NEW(PvmfJBSessionDurationTimer, (this));
+        if (ipSessionDurationTimer && ipEstimatedServerClock)
+        {
+            ipSessionDurationTimer->SetEstimatedServerClock(ipEstimatedServerClock);
+        }
+    }
+    if (RTCPProtocolImplementorRequired())
+    {
+        ipRTCPProtoImplementator = PVRTCPProtoImplementor::New(irClientPlaybackClock, *ipWallClock, this, iBroadcastSession);
+
+        //Set the rate adaptaton parmas if not already set
+        PVMFPortInterface* feedbackPort = NULL;
+        PVMFJitterBuffer* jitterBuffer = NULL;
+        Oscl_Vector<RateAdapatationInfo, OsclMemAllocator>::iterator iter;
+        for (iter = iRateAdaptationInfos.begin(); iter < iRateAdaptationInfos.end(); iter++)
+        {
+            RateAdapatationInfo rateAdaptationInfo = *iter;
+            feedbackPort = NULL;
+            jitterBuffer = NULL;
+            if (LookupRTCPChannelParams(rateAdaptationInfo.iPort, feedbackPort, jitterBuffer))
+            {
+                PVRTCPChannelController* rtcpChannelController = ipRTCPProtoImplementator->GetRTCPChannelController(feedbackPort);
+                if (rtcpChannelController)
+                {
+                    rtcpChannelController->SetRateAdaptation(rateAdaptationInfo.iRateAdapatationInfo.iRateAdaptation, rateAdaptationInfo.iRateAdapatationInfo.iRateAdaptationFeedBackFrequency, rateAdaptationInfo.iRateAdapatationInfo.iRateAdaptationFreeBufferSpaceInBytes);
+
+                }
+                else
+                {
+                    PVMFJitterBufferPort* rtpDataPort = OSCL_STATIC_CAST(PVMFJitterBufferPort*, rateAdaptationInfo.iPort);
+                    jitterBuffer = rtpDataPort->GetPortParams()->ipJitterBuffer;
+                    PVMFJitterBufferPortParams* rtpPortParams = rtpDataPort->GetPortParams();
+                    PVMFJitterBufferPortParams* feedbackPortParams = NULL;
+                    LocateFeedBackPort(rtpPortParams, feedbackPortParams);
+                    if (feedbackPortParams)
+                    {
+                        feedbackPort = &feedbackPortParams->irPort;
+                    }
+                    rtcpChannelController = PVRTCPChannelController::New(ipRTCPProtoImplementator, *jitterBuffer, feedbackPort, irClientPlaybackClock, *ipWallClock);
+                    rtcpChannelController->SetRateAdaptation(rateAdaptationInfo.iRateAdapatationInfo.iRateAdaptation, rateAdaptationInfo.iRateAdapatationInfo.iRateAdaptationFeedBackFrequency, rateAdaptationInfo.iRateAdapatationInfo.iRateAdaptationFreeBufferSpaceInBytes);
+                    ipRTCPProtoImplementator->AddPVRTCPChannelController(rtcpChannelController);
+                }
+            }
+        }
+
+        Oscl_Vector<RTCPParams, OsclMemAllocator>::iterator rtcpParamIter;
+        for (rtcpParamIter = iRTCPParamsVect.begin(); rtcpParamIter < iRTCPParamsVect.end(); rtcpParamIter++)
+        {
+            RTCPParams rtcpParams = *rtcpParamIter;
+            ipRTCPProtoImplementator->SetPortRTCPParams(rtcpParams.iFeedbackPort, rtcpParams.iNumSenders, rtcpParams.iRR, rtcpParams.iRS);
+        }
+
+        {
+            //Provide media clcok converter
+            Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator iter;
+            for (iter = irPortParamsQueue.begin(); iter != irPortParamsQueue.end() ; iter++)
+            {
+                PVMFJitterBufferPortParams* pPortParams = *iter;
+                if (pPortParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
+                {
+
+                    SetMediaClockConverter(&pPortParams->irPort, &pPortParams->iMediaClockConverter);
+                }
+            }
+        }
+    }
+
+    iRateAdaptationInfos.clear();
+    iRTCPParamsVect.clear();
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferMisc::Reset()
+{
+    if (ipEventNotifier)
+    {
+        ipEventNotifier->CancelAllPendingCallbacks();
+    }
+    if (ipSessionDurationTimer)
+    {
+        ipSessionDurationTimer->Stop();
+    }
+    if (ipRTCPProtoImplementator)
+    {
+        ipRTCPProtoImplementator->Reset();
+    }
+    if (ipFireWallPacketExchangerImpl)
+    {
+        ipFireWallPacketExchangerImpl->CancelFirewallPacketExchange();
+    }
+    if (ipEstimatedServerClock)
+    {
+        ipEstimatedServerClock->Stop();
+    }
+    if (ipWallClock)
+    {
+        ipWallClock->Stop();
+    }
+    if (ipNonDecreasingClock)
+    {
+        ipNonDecreasingClock->Stop();
+    }
+
+    iSessionDuration = 0;
+    iStreamingSessionExpired = true;
+    iPlayDurationAvailable = false;
+    iBroadcastSession = false;
+    iFireWallPacketsExchangeEnabled = true;
+}
+
+OSCL_EXPORT_REF PVMFStatus PVMFJitterBufferMisc::PrepareMediaReceivingChannel()
+{
+    if (ipFireWallPacketExchangerImpl && iFireWallPacketsExchangeEnabled)
+    {
+        ipFireWallPacketExchangerImpl->InitiateFirewallPacketExchange();
+        return PVMFPending;
+    }
+    else
+    {
+        if (!iFireWallPacketsExchangeEnabled)
+        {
+            ipObserver->MediaReceivingChannelPrepared(true);
+            return PVMFSuccess;
+        }
+        return PVMFPending;	//Wait for the SetServerInfo call
+    }
+}
+
+OSCL_EXPORT_REF PVMFStatus PVMFJitterBufferMisc::CancelMediaReceivingChannelPreparation()
+{
+    if (ipFireWallPacketExchangerImpl)
+        ipFireWallPacketExchangerImpl->CancelFirewallPacketExchange();
+    return PVMFSuccess;
+}
+
+bool PVMFJitterBufferMisc::FirewallPacketExchangerRequired() const
+{
+    if (iFireWallPacketsExchangeEnabled)
+    {
+        char mimeRequiredForFirewallPacketExchange[] = "rtp";
+        char mediaChannelMimeType[255] = {'0'};
+        Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator iter;
+        for (iter = irPortParamsQueue.begin(); iter != irPortParamsQueue.end(); iter++)
+        {
+            PVMFJitterBufferPortParams* pPortParams = *iter;
+            if (pPortParams && (pPortParams->ipJitterBuffer))
+            {
+                oscl_memset(mediaChannelMimeType, 0, sizeof(mediaChannelMimeType));
+                const char* tmpMediaChannelMimeType = pPortParams->ipJitterBuffer->GetMimeType();
+                const int32 mediaChannelMimeLen =  oscl_strlen(tmpMediaChannelMimeType);
+                if (tmpMediaChannelMimeType)
+                {
+                    for (int ii = 0; ii < mediaChannelMimeLen; ii++)
+                    {
+                        mediaChannelMimeType[ii] = oscl_tolower(tmpMediaChannelMimeType[ii]);
+                    }
+                    mediaChannelMimeType[mediaChannelMimeLen] = '\0';
+                }
+
+                if (oscl_strstr(mediaChannelMimeType, mimeRequiredForFirewallPacketExchange))
+                {
+                    return true;
+                }
+            }
+        }
+    }
+    return false;
+}
+
+bool PVMFJitterBufferMisc::RTCPProtocolImplementorRequired() const
+{
+    char mimeRequiredForRTCPSupport[] = "rtp";
+    char mediaChannelMimeType[255] = {'0'};
+    Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator iter;
+    for (iter = irPortParamsQueue.begin(); iter != irPortParamsQueue.end(); iter++)
+    {
+        PVMFJitterBufferPortParams* pPortParams = *iter;
+        if (pPortParams && (pPortParams->ipJitterBuffer))
+        {
+            oscl_memset(mediaChannelMimeType, 0, sizeof(mediaChannelMimeType));
+            const char* tmpMediaChannelMimeType = pPortParams->ipJitterBuffer->GetMimeType();
+            const int32 mediaChannelMimeLen =  oscl_strlen(tmpMediaChannelMimeType);
+            if (tmpMediaChannelMimeType)
+            {
+                for (int ii = 0; ii < mediaChannelMimeLen; ii++)
+                {
+                    mediaChannelMimeType[ii] = oscl_tolower(tmpMediaChannelMimeType[ii]);
+                }
+                mediaChannelMimeType[mediaChannelMimeLen] = '\0';
+            }
+
+            if (oscl_strstr(mediaChannelMimeType, mimeRequiredForRTCPSupport))
+            {
+                return true;
+            }
+        }
+    }
+    return false;//based on mime type
+}
+
+OSCL_EXPORT_REF PVMFStatus PVMFJitterBufferMisc::ProcessFeedbackMessage(PVMFJitterBufferPortParams& aParam, PVMFSharedMediaMsgPtr aMsg)
+{
+    PVMFStatus status = PVMFSuccess;
+    if (ipRTCPProtoImplementator)
+    {
+        status = ipRTCPProtoImplementator->ProcessRTCPReport(&aParam.irPort, aMsg);
+    }
+    else
+    {
+        status = PVMFFailure;
+    }
+    return status;
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferMisc::SetRateAdaptationInfo(PVMFPortInterface* aPort, bool aRateAdaptation, uint32 aRateAdaptationFeedBackFrequency, uint32 aRateAdaptationFreeBufferSpaceInBytes)
+{
+    //Persist it: We'll update it when RTCP controller will be prepared
+    RateAdapatationInfo rateAdadpatatinInfo;
+    rateAdadpatatinInfo.iPort = aPort;
+    rateAdadpatatinInfo.iRateAdapatationInfo.iRateAdaptation = aRateAdaptation;
+    rateAdadpatatinInfo.iRateAdapatationInfo.iRateAdaptationFeedBackFrequency = aRateAdaptationFeedBackFrequency;
+    rateAdadpatatinInfo.iRateAdapatationInfo.iRateAdaptationFreeBufferSpaceInBytes = aRateAdaptationFreeBufferSpaceInBytes;
+    iRateAdaptationInfos.push_back(rateAdadpatatinInfo);
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferMisc::SetRTCPIntervalInMicroSecs(uint32 aRTCPInterval)
+{
+    if (ipRTCPProtoImplementator)
+        ipRTCPProtoImplementator->SetRTCPIntervalInMicroSecs(aRTCPInterval);
+}
+
+OSCL_EXPORT_REF bool PVMFJitterBufferMisc::SetPortRTCPParams(PVMFPortInterface* aPort, int aNumSenders, uint32 aRR, uint32 aRS)
+{
+    bool retval = false;
+    if (ipRTCPProtoImplementator)
+        retval = ipRTCPProtoImplementator->SetPortRTCPParams(aPort, aNumSenders, aRR, aRS);
+    //retval eq to false implies rtcp controller doesnt exist as fo now for the port "aPort"
+    if (!retval)
+    {
+        RTCPParams rtcpParams;
+        rtcpParams.iFeedbackPort = aPort;
+        rtcpParams.iNumSenders = aNumSenders;
+        rtcpParams.iRR = aRR;
+        rtcpParams.iRS = aRS;
+        iRTCPParamsVect.push_back(rtcpParams);
+        retval = true;
+    }
+    return retval;
+}
+
+OSCL_EXPORT_REF bool PVMFJitterBufferMisc::ResetSession()
+{
+    iStreamingSessionExpired = false;
+    if (ipSessionDurationTimer)
+    {
+        ipSessionDurationTimer->Cancel();
+        ipSessionDurationTimer->Stop();
+    }
+    return true;
+}
+
+OSCL_EXPORT_REF bool PVMFJitterBufferMisc::SetSessionDurationExpired()
+{
+    iStreamingSessionExpired = true;
+    if (ipSessionDurationTimer)
+    {
+        ipSessionDurationTimer->Cancel();
+        ipSessionDurationTimer->Stop();
+    }
+
+    Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator it;
+    for (it = irPortParamsQueue.begin(); it != irPortParamsQueue.end(); it++)
+    {
+        PVMFJitterBufferPortParams* pPortParams = *it;
+
+        if (pPortParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
+        {
+            pPortParams->ipJitterBuffer->SetEOS(true);
+        }
+    }
+
+
+    uint32 timebase32 = 0;
+    uint32 clientClock32 = 0;
+    bool overflowFlag = false;
+    irClientPlaybackClock.GetCurrentTime32(clientClock32, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
+    timebase32 = 0;
+    uint32 estServClock32 = 0;
+    ipEstimatedServerClock->GetCurrentTime32(estServClock32, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
+
+    PVMF_JB_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferMisc::SetSessionDurationExpired- Estimated Server Clock [%d] Client Clock[%d]", estServClock32, clientClock32));
+    PVMF_JB_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferMisc::SetSessionDurationExpired- Estimated Server Clock [%d] Client Clock[%d]", estServClock32, clientClock32));
+
+    return true;
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferMisc::MediaReceivingChannelPreparationRequired(bool aRequired)
+{
+    iFireWallPacketsExchangeEnabled = aRequired;
+}
+
+OSCL_EXPORT_REF PVMFMediaClock& PVMFJitterBufferMisc::GetEstimatedServerClock()
+{
+    return *ipEstimatedServerClock;
+}
+
+OSCL_EXPORT_REF PVMFJBEventNotifier* PVMFJitterBufferMisc::GetEventNotifier()
+{
+    return ipEventNotifier;
+}
+
+OSCL_EXPORT_REF bool PVMFJitterBufferMisc::SetPlayRange(int32 aStartTimeInMS, int32 aStopTimeInMS, bool aPlayAfterASeek, bool aStopTimeAvailable)
+{
+    Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator iter;
+    for (iter = irPortParamsQueue.begin(); iter != irPortParamsQueue.end() ; iter++)
+    {
+        PVMFJitterBufferPortParams* pPortParam = *iter;
+        if (pPortParam && (PVMF_JITTER_BUFFER_PORT_TYPE_INPUT == pPortParam->iTag))
+        {
+            PVMFJitterBuffer* jitterBuffer = pPortParam->ipJitterBuffer;
+            if (jitterBuffer)
+            {
+                jitterBuffer->SetPlayRange(aStartTimeInMS, aPlayAfterASeek, aStopTimeAvailable, aStopTimeInMS);
+            }
+        }
+    }
+
+    //Configure the RTCP timer stuff
+    if (ipRTCPProtoImplementator)
+    {
+        ipRTCPProtoImplementator->Prepare(aPlayAfterASeek);
+        ipRTCPProtoImplementator->StartRTCPMessageExchange();
+    }
+
+    iPlayStartTimeInMS = aStartTimeInMS;
+    iPlayStopTimeInMS = aStopTimeInMS;
+    iPlayStopTimeAvailable = aStopTimeAvailable;
+
+    if (iPlayStopTimeAvailable == true)
+    {
+        /* Start Session Duration Timer only if stop duration is set */
+        if ((ipSessionDurationTimer) && (!iStreamingSessionExpired || (aPlayAfterASeek)))
+        {
+            ipSessionDurationTimer->Stop();
+            iStreamingSessionExpired = false;
+            ipSessionDurationTimer->setSessionDurationInMS(((iPlayStopTimeInMS - iPlayStartTimeInMS) + PVMF_EOS_TIMER_GAURD_BAND_IN_MS));
+            ComputeCurrentSessionDurationMonitoringInterval();
+            ipSessionDurationTimer->Start();
+        }
+    }
+
+    if (aPlayAfterASeek)
+    {
+        //Will eventually update the estimated server clock
+        //This call to "GetActualMediaDataTSAfterSeek" will normalize the ts's across the jitter buffers
+        //associated with the streaming session
+        GetActualMediaDataTSAfterSeek();
+        Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator iter;
+        for (iter = irPortParamsQueue.begin(); iter != irPortParamsQueue.end() ; iter++)
+        {
+            PVMFJitterBufferPortParams* pPortParams = *iter;
+            if (pPortParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
+            {
+                if (pPortParams->ipJitterBuffer != NULL)
+                {
+                    pPortParams->ipJitterBuffer->AdjustRTPTimeStamp();
+                }
+            }
+        }
+    }
+    return true;
+}
+
+OSCL_EXPORT_REF bool PVMFJitterBufferMisc::SetPortSSRC(PVMFPortInterface* aPort, uint32 aSSRC)
+{
+    //Update with the JB
+    Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator iter;
+    for (iter = irPortParamsQueue.begin(); iter != irPortParamsQueue.end() ; iter++)
+    {
+        PVMFJitterBufferPortParams* pPortParam = *iter;
+        if (pPortParam && ((&pPortParam->irPort) == aPort))
+        {
+            PVMFJitterBuffer* jitterBuffer = pPortParam->ipJitterBuffer;
+            if (jitterBuffer)
+            {
+                jitterBuffer->setSSRC(aSSRC);
+            }
+            break;
+        }
+    }
+    //update port's ssrc with the Firewall controller
+    RTPSessionInfoForFirewallExchange rtpSessioninfo(aPort, aSSRC);
+    iRTPExchangeInfosForFirewallExchange.push_back(rtpSessioninfo);
+    return true;
+}
+
+OSCL_EXPORT_REF uint32 PVMFJitterBufferMisc::GetEstimatedServerClockValue()
+{
+    uint32 serverClock32 = 0;
+    bool overflowFlag = false;
+    ipEstimatedServerClock->GetCurrentTime32(serverClock32, overflowFlag, PVMF_MEDIA_CLOCK_MSEC);
+    return serverClock32;
+}
+
+OSCL_EXPORT_REF bool PVMFJitterBufferMisc::PlayStopTimeAvailable() const
+{
+    return iPlayStopTimeAvailable;
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferMisc::SetServerInfo(PVMFJitterBufferFireWallPacketInfo& aServerInfo)
+{
+    if (iFireWallPacketsExchangeEnabled)
+    {
+        if (!ipFireWallPacketExchangerImpl)
+        {
+            //create it and start firewall packet exchange
+            ipFireWallPacketExchangerImpl = PVFirewallPacketExchangeImpl::New(aServerInfo, *ipEventNotifier, ipObserver);
+            Oscl_Vector<RTPSessionInfoForFirewallExchange, OsclMemAllocator>::iterator iter;
+            for (iter = iRTPExchangeInfosForFirewallExchange.begin(); iter != iRTPExchangeInfosForFirewallExchange.end(); iter++)
+            {
+                ipFireWallPacketExchangerImpl->SetRTPSessionInfoForFirewallExchange(*iter);
+            }
+            ipFireWallPacketExchangerImpl->InitiateFirewallPacketExchange();
+        }
+        else
+        {
+            OSCL_ASSERT(false);
+        }
+    }
+}
+
+OSCL_EXPORT_REF PVMFTimestamp PVMFJitterBufferMisc::GetMaxMediaDataTS()
+{
+    PVMFTimestamp mediaTS = 0;
+    uint32 in_wrap_count = 0;
+    uint32 i;
+
+    uint32 numOfJitterBuffers = 0;
+    for (i = 0; i < irPortParamsQueue.size(); i++)
+    {
+        PVMFJitterBufferPortParams* pPortParams = irPortParamsQueue[i];
+
+        if (pPortParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
+        {
+            if (pPortParams->ipJitterBuffer != NULL)
+            {
+                PVMFTimestamp ts =
+                    pPortParams->ipJitterBuffer->peekNextElementTimeStamp();
+                ++numOfJitterBuffers;
+                /*
+                 * Convert Time stamp to milliseconds
+                 */
+                pPortParams->iMediaClockConverter.set_clock(ts, in_wrap_count);
+                PVMFTimestamp converted_ts =
+                    pPortParams->iMediaClockConverter.get_converted_ts(1000);
+                if (converted_ts > mediaTS)
+                {
+                    mediaTS = converted_ts;
+                }
+            }
+        }
+    }
+
+    if (numOfJitterBuffers > 1)	//Need to normalize ts across jb's with the session (E.g. RTSP based streaming).
+    {
+        for (i = 0; i < irPortParamsQueue.size(); i++)
+        {
+            PVMFJitterBufferPortParams* pPortParams = irPortParamsQueue[i];
+
+            if (pPortParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
+            {
+                if (pPortParams->ipJitterBuffer != NULL)
+                {
+                    pPortParams->ipJitterBuffer->SetAdjustedTSInMS(mediaTS);
+                }
+            }
+        }
+    }
+
+    return mediaTS;
+}
+
+/* computes the max next ts of all tracks */
+OSCL_EXPORT_REF PVMFTimestamp PVMFJitterBufferMisc::GetActualMediaDataTSAfterSeek()
+{
+    PVMFTimestamp mediaTS = 0;
+    uint32 in_wrap_count = 0;
+    uint32 i;
+
+    uint32 numOfJitterBuffers = 0;
+    for (i = 0; i < irPortParamsQueue.size(); i++)
+    {
+        PVMFJitterBufferPortParams* pPortParams = irPortParamsQueue[i];
+
+        if (pPortParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
+        {
+            if (pPortParams->ipJitterBuffer != NULL)
+            {
+                PVMFTimestamp ts =
+                    pPortParams->ipJitterBuffer->peekNextElementTimeStamp();
+                ++numOfJitterBuffers;
+                /*
+                 * Convert Time stamp to milliseconds
+                 */
+                pPortParams->iMediaClockConverter.set_clock(ts, in_wrap_count);
+                PVMFTimestamp converted_ts =
+                    pPortParams->iMediaClockConverter.get_converted_ts(1000);
+                if (converted_ts > mediaTS)
+                {
+                    mediaTS = converted_ts;
+                }
+            }
+        }
+    }
+
+    if (numOfJitterBuffers > 1)	//Need to normalize ts across jb's with the session (E.g. RTSP based streaming).
+    {
+        for (i = 0; i < irPortParamsQueue.size(); i++)
+        {
+            PVMFJitterBufferPortParams* pPortParams = irPortParamsQueue[i];
+
+            if (pPortParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
+            {
+                if (pPortParams->ipJitterBuffer != NULL)
+                {
+                    pPortParams->ipJitterBuffer->SetAdjustedTSInMS(mediaTS);
+                }
+            }
+        }
+    }
+
+    return mediaTS;
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferMisc::SetMediaClockConverter(PVMFPortInterface* apPort, MediaClockConverter* apMediaClockConverter)
+{
+    PVMFPortInterface* feedbackPort = NULL;
+    PVMFJitterBuffer* jitterBuffer = NULL;
+    if (LookupRTCPChannelParams(apPort, feedbackPort, jitterBuffer))
+    {
+        PVRTCPChannelController* rtcpChannelController = ipRTCPProtoImplementator->GetRTCPChannelController(feedbackPort);
+        if (rtcpChannelController)
+        {
+            rtcpChannelController->SetMediaClockConverter(apMediaClockConverter);
+        }
+    }
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferMisc::ProcessFirstPacketAfterSeek()
+{
+    //This call to "GetActualMediaDataTSAfterSeek" will normalize the ts's across the jitter buffers
+    //associated with the streaming session
+    GetActualMediaDataTSAfterSeek();
+    Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator iter;
+    for (iter = irPortParamsQueue.begin(); iter != irPortParamsQueue.end() ; iter++)
+    {
+        PVMFJitterBufferPortParams* pPortParams = *iter;
+        if (pPortParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
+        {
+            if (pPortParams->ipJitterBuffer != NULL)
+            {
+                pPortParams->ipJitterBuffer->AdjustRTPTimeStamp();
+            }
+        }
+    }
+}
+
+PVMFStatus PVMFJitterBufferMisc::RTCPPacketReceived(RTCPPacketType aPacketType, PVRTCPChannelController* aController)
+{
+    PVMF_JB_LOG_RTCPDATATRAFFIC_IN_E((0, "PVMFJitterBufferMisc::RTCPPacketReceived -- iPlayStopTimeAvailable[%d]", iPlayStopTimeAvailable));
+    if (BYE_RTCP_PACKET == aPacketType && aController)
+    {
+        //for live streams, treat RTCP BYE as EOS
+        if (iPlayStopTimeAvailable == false)
+        {
+            PVMF_JB_LOGDATATRAFFIC_IN((0, "USING RTCP_BYE TO TRIGGER EOS: Mime=%s", aController->GetJitterBuffer().GetMimeType()));
+            PVMF_JB_LOGDATATRAFFIC_OUT((0, "USING RTCP_BYE TO TRIGGER EOS: Mime=%s", aController->GetJitterBuffer().GetMimeType()));
+            PVMF_JB_LOG_RTCPDATATRAFFIC_IN((0, "USING RTCP_BYE TO TRIGGER EOS: Mime=%s", aController->GetJitterBuffer().GetMimeType()));
+            SetSessionDurationExpired();
+            ipEstimatedServerClock->Pause();
+            ipWallClock->Pause();
+        }
+
+        if (ipRTCPProtoImplementator->RTCPByeReceivedOnAllControllers())
+        {
+            SetSessionDurationExpired();
+            ipEstimatedServerClock->Pause();
+            ipWallClock->Pause();
+        }
+
+        PVUuid eventuuid = PVMFJitterBufferNodeEventTypeUUID;
+        int32 infocode = PVMFJitterBufferNodeRTCPBYERecvd;
+
+        PVMFBasicErrorInfoMessage* eventmsg;
+        eventmsg = OSCL_NEW(PVMFBasicErrorInfoMessage, (infocode, eventuuid, NULL));
+        PVMFErrorInfoMessageInterface* interimPtr =
+            OSCL_STATIC_CAST(PVMFErrorInfoMessageInterface*, eventmsg);
+        PVMFAsyncEvent asyncevent(PVMFInfoEvent,
+                                  PVMFInfoRemoteSourceNotification,
+                                  NULL,
+                                  OSCL_STATIC_CAST(PVInterface*, interimPtr),
+                                  (OsclAny*)(aController->GetJitterBuffer().GetMimeType()),
+                                  NULL,
+                                  0);
+        ipObserver->ProcessRTCPControllerEvent(asyncevent);
+        eventmsg->removeRef();
+    }
+    return PVMFSuccess;
+}
+
+PVMFStatus PVMFJitterBufferMisc::RTCPReportReadyToSend(PVMFPortInterface*& aPort, PVMFSharedMediaMsgPtr& aMessage)
+{
+    ipObserver->MessageReadyToSend(aPort, aMessage);
+    return PVMFSuccess;
+}
+
+PVMFStatus PVMFJitterBufferMisc::ProcessInfoEvent(PVMFAsyncEvent& aEvent)
+{
+    ipObserver->ProcessRTCPControllerEvent(aEvent);
+    return PVMFSuccess;
+}
+
+void PVMFJitterBufferMisc::PVMFJBSessionDurationTimerEvent()
+{
+    PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::PVMFJBSessionDurationTimerEvent - Session Duration Timer Expired"));
+    PVMF_JB_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::PVMFJBSessionDurationTimerEvent - Session Duration Timer Expired"));
+    /* Check if the estimated server clock is past the expected value */
+    uint32 expectedEstServClockVal =
+        ipSessionDurationTimer->GetExpectedEstimatedServClockValAtSessionEnd();
+    uint32 timebase32 = 0;
+    uint32 estServClock = 0;
+    bool overflowFlag = false;
+
+
+    ipEstimatedServerClock->GetCurrentTime32(estServClock, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
+    PVMF_JB_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::PVMFJBSessionDurationTimerEvent - CurrEstServClock = %2d", estServClock));
+    PVMF_JB_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::PVMFJBSessionDurationTimerEvent - ExpectedEstServClock = %2d", expectedEstServClockVal));
+    if (estServClock >= expectedEstServClockVal)
+    {
+        PVMF_JB_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::PVMFJBSessionDurationTimerEvent estServClock[%d] expectedEstServClockVal[%d]", estServClock, expectedEstServClockVal));
+        PVMF_JB_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::PVMFJBSessionDurationTimerEvent - Session Duration Has Elapsed"));
+        iStreamingSessionExpired = true;
+        ipObserver->SessionSessionExpired();
+        /* Cancel clock update notifications */
+        Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator it;
+        for (it = irPortParamsQueue.begin(); it != irPortParamsQueue.end(); it++)
+        {
+            PVMFJitterBufferPortParams* pPortParams = *it;
+
+            if (pPortParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
+            {
+                pPortParams->ipJitterBuffer->SetEOS(true);
+            }
+        }
+        /* Pause Estimated server clock & RTCP Clock */
+        ipEstimatedServerClock->Pause();
+        ipWallClock->Pause();
+    }
+    else
+    {
+        /*
+         * Since we monitor the session duration in intervals, it is possible that this call back
+         * happens when one such interval expires
+         */
+        uint64 elapsedTime = ipSessionDurationTimer->GetMonitoringIntervalElapsed();
+        uint32 elapsedTime32 = Oscl_Int64_Utils::get_uint64_lower32(elapsedTime);
+        ipSessionDurationTimer->UpdateElapsedSessionDuration(elapsedTime32);
+        uint32 totalSessionDuration = ipSessionDurationTimer->getSessionDurationInMS();
+        uint32 elapsedSessionDurationInMS = ipSessionDurationTimer->GetElapsedSessionDurationInMS();
+        if (elapsedSessionDurationInMS < totalSessionDuration)
+        {
+            uint32 interval = (totalSessionDuration - elapsedSessionDurationInMS);
+            if (interval > PVMF_JITTER_BUFFER_NODE_SESSION_DURATION_MONITORING_INTERVAL_MAX_IN_MS)
+            {
+                interval = PVMF_JITTER_BUFFER_NODE_SESSION_DURATION_MONITORING_INTERVAL_MAX_IN_MS;
+            }
+            ipSessionDurationTimer->setCurrentMonitoringIntervalInMS(interval);
+            ipSessionDurationTimer->ResetEstimatedServClockValAtLastCancel();
+            PVMF_JB_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::PVMFJBSessionDurationTimerEvent - TotalDuration=%d, ElapsedDuration=%d, CurrMonitoringInterval=%d", totalSessionDuration, elapsedSessionDurationInMS, interval));
+        }
+        else
+        {
+            /*
+             * 1) Register for est serv clock update notifications on all jitter buffers
+             * 2) Reschedule the session duration timer
+             */
+            PVMF_JB_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::PVMFJBSessionDurationTimerEvent - Past Session End Time - Starting to monitor Estimated Server Clock expectedEstServClockVal%d estServClock %d", expectedEstServClockVal, estServClock));
+
+            uint64 diff = (expectedEstServClockVal - estServClock);
+            uint32 diff32 = Oscl_Int64_Utils::get_uint64_lower32(diff);
+
+            PVMFJBEventNotificationRequestInfo requestInfo(CLOCK_NOTIFICATION_INTF_TYPE_ESTIMATEDSERVER, this, NULL);
+
+            if (iEstimatedServerClockUpdateCallbackPending)
+            {
+                ipEventNotifier->CancelCallBack(requestInfo, iEstimatedServerClockUpdateCallbackId);
+                iEstimatedServerClockUpdateCallbackPending = false;
+            }
+
+            ipEventNotifier->RequestAbsoluteTimeCallBack(requestInfo, expectedEstServClockVal, iEstimatedServerClockUpdateCallbackId);
+            iEstimatedServerClockUpdateCallbackPending = true;
+
+            /*
+             * This is intentional. We do not expect the session duration and monitoring
+             * intervals to exceed the max timer limit of 32 mins
+             */
+            ipSessionDurationTimer->setSessionDurationInMS(diff32);
+            ipSessionDurationTimer->setCurrentMonitoringIntervalInMS(diff32);
+            ipSessionDurationTimer->ResetEstimatedServClockValAtLastCancel();
+            PVMF_JB_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::PVMFJBSessionDurationTimerEvent - ExpectedEstServClock=%d EstServClock=%d", Oscl_Int64_Utils::get_uint64_lower32(expectedEstServClockVal), Oscl_Int64_Utils::get_uint64_lower32(estServClock)));
+            PVMF_JB_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::PVMFJBSessionDurationTimerEvent - TotalDuration=%d, Interval=%d", diff32, diff32));
+        }
+        ipSessionDurationTimer->Start();
+    }
+    return;
+}
+
+void PVMFJitterBufferMisc::ProcessCallback(CLOCK_NOTIFICATION_INTF_TYPE aClockNotificationInterfaceType, uint32 aCallBkId, const OsclAny* aContext, PVMFStatus aStatus)
+{
+    OSCL_UNUSED_ARG(aClockNotificationInterfaceType);
+    OSCL_UNUSED_ARG(aContext);
+    if (aCallBkId == iEstimatedServerClockUpdateCallbackId && (PVMFSuccess == aStatus))
+    {
+        ipSessionDurationTimer->EstimatedServerClockUpdated();
+    }
+}
+
+bool PVMFJitterBufferMisc::UseSessionDurationTimerForEOS()
+{
+    char mimeForSessioDurationTmrNecessity[] = "rtp";
+    char mediaChannelMimeType[255] = {'0'};
+    Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator iter;
+    for (iter = irPortParamsQueue.begin(); iter != irPortParamsQueue.end(); iter++)
+    {
+        PVMFJitterBufferPortParams* pPortParams = *iter;
+        if (pPortParams && (pPortParams->ipJitterBuffer))
+        {
+            oscl_memset(mediaChannelMimeType, 0, sizeof(mediaChannelMimeType));
+            const char* tmpMediaChannelMimeType = pPortParams->ipJitterBuffer->GetMimeType();
+            const int32 mediaChannelMimeLen =  oscl_strlen(tmpMediaChannelMimeType);
+            if (tmpMediaChannelMimeType)
+            {
+                for (int ii = 0; ii < mediaChannelMimeLen; ii++)
+                {
+                    mediaChannelMimeType[ii] = oscl_tolower(tmpMediaChannelMimeType[ii]);
+                }
+                mediaChannelMimeType[mediaChannelMimeLen] = '\0';
+            }
+
+            if (oscl_strstr(mediaChannelMimeType, mimeForSessioDurationTmrNecessity))
+            {
+                return true;
+            }
+        }
+    }
+    return false;//based on mime type
+}
+
+void PVMFJitterBufferMisc::LogClientAndEstimatedServerClock(PVLogger* aLogger)
+{
+    uint32 timebase32 = 0;
+    uint32 clientClock32 = 0;
+    uint32 serverClock32 = 0;
+    bool overflowFlag = false;
+    irClientPlaybackClock.GetCurrentTime32(clientClock32, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
+
+    if (ipEstimatedServerClock)
+        ipEstimatedServerClock->GetCurrentTime32(serverClock32, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
+
+    PVLOGGER_LOGMSG(PVLOGMSG_INST_MLDBG, aLogger, PVLOGMSG_INFO, (0, "Value of Client Clock %d and value of Estimated Sever Clock %d", clientClock32, serverClock32));
+}
+
+bool PVMFJitterBufferMisc::LookupRTCPChannelParams(PVMFPortInterface* rtpPort, PVMFPortInterface*& rtcpPort, PVMFJitterBuffer*& rtpPktJitterBuffer)
+{
+    bool retval = false;
+    PVMFJitterBufferPort* jbInputPort = OSCL_STATIC_CAST(PVMFJitterBufferPort*, rtpPort);
+    PVMFJitterBufferPortParams* inputPortParams = jbInputPort->GetPortParams();
+    PVMFJitterBufferPortParams* feedbackPortParams = NULL;
+
+    if (LocateFeedBackPort(inputPortParams, feedbackPortParams))
+    {
+        rtcpPort = 	&feedbackPortParams->irPort;
+        rtpPktJitterBuffer = inputPortParams->ipJitterBuffer;
+        retval = true;
+    }
+    return retval;
+}
+
+bool PVMFJitterBufferMisc::LocateFeedBackPort(PVMFJitterBufferPortParams*& aInputPortParamsPtr, PVMFJitterBufferPortParams*& aFeedBackPortParamsPtr)
+{
+    uint32 inputPortId = aInputPortParamsPtr->iId;
+
+    /* Feedback port id must be inputPortId + 2 */
+
+    Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator it;
+
+    for (it = irPortParamsQueue.begin(); it != irPortParamsQueue.end(); it++)
+    {
+        PVMFJitterBufferPortParams* portParams = *it;
+        if ((portParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK) &&
+                ((int32)portParams->iId == (int32)inputPortId + 2))
+        {
+            aFeedBackPortParamsPtr = portParams;
+            return true;
+        }
+    }
+    return false;
+}
diff --git a/nodes/streaming/jitterbuffernode/src/pvmf_jb_inactivity_timer.cpp b/nodes/streaming/jitterbuffernode/jitterbuffer/common/src/pvmf_jb_session_duration_timer.cpp
similarity index 71%
rename from nodes/streaming/jitterbuffernode/src/pvmf_jb_inactivity_timer.cpp
rename to nodes/streaming/jitterbuffernode/jitterbuffer/common/src/pvmf_jb_session_duration_timer.cpp
index 0c8ca96..31b2c9e 100644
--- a/nodes/streaming/jitterbuffernode/src/pvmf_jb_inactivity_timer.cpp
+++ b/nodes/streaming/jitterbuffernode/jitterbuffer/common/src/pvmf_jb_session_duration_timer.cpp
@@ -16,14 +16,15 @@
  * -------------------------------------------------------------------
  */
 /**
- * @file pvmf_jb_inactivity_timer.cpp
- * @brief Inactivity timer to Jitter Buffer Node
+ * @file pvmf_jb_session_duration_timer.cpp
+ * @brief Session Duration timer to Jitter Buffer
  */
-#ifndef PVMF_JB_INACTIVITY_TIMER_H_INCLUDED
-#include "pvmf_jb_inactivity_timer.h"
+#ifndef PVMF_JB_SESSION_DURATION_TIMER_H_INCLUDED
+#include "pvmf_jb_session_duration_timer.h"
 #endif
-#ifndef PVMF_JITTER_BUFFER_INTERNAL_H_INCLUDED
-#include "pvmf_jitter_buffer_internal.h"
+
+#ifndef PVMF_JITTER_BUFFER_COMMON_INTERNAL_H
+#include "pvmf_jitter_buffer_common_internal.h"
 #endif
 
 ////////////////////////////////////////////////////////////////////////////
@@ -40,8 +41,8 @@
         iEstimatedServClockValAtLastCancel(0),
         iExpectedEstimatedServClockValAtSessionEnd(0)
 {
-    iLogger = PVLogger::GetLoggerObject("PvmfJBSessionDurationTimer");
-    iClockLoggerSessionDuration = PVLogger::GetLoggerObject("clock.streaming_manager.sessionduration");
+    ipLogger = PVLogger::GetLoggerObject("PvmfJBSessionDurationTimer");
+    ipClockLoggerSessionDuration = PVLogger::GetLoggerObject("clock.streaming_manager.sessionduration");
     AddToScheduler();
     iClock.SetClockTimebase(iClockTimeBase);
 }
@@ -57,10 +58,11 @@
 ////////////////////////////////////////////////////////////////////////////
 PVMFStatus PvmfJBSessionDurationTimer::Start()
 {
-    PVMF_JBNODE_LOGINFO((0, "PvmfJBSessionDurationTimer::Start"));
+    PVMF_JB_LOGINFO((0, "PvmfJBSessionDurationTimer::Start"));
+    PVMF_JB_LOGCLOCK_SESSION_DURATION((0, "PvmfJBSessionDurationTimer::Start"));
     if ((iSessionDurationInMS > 0) && (iCurrentMonitoringIntervalInMS > 0))
     {
-        PVMF_JBNODE_LOGCLOCK_SESSION_DURATION((0, "PvmfJBSessionDurationTimer::Start - SessionDurationInMS = %d", iSessionDurationInMS));
+        PVMF_JB_LOGCLOCK_SESSION_DURATION((0, "PvmfJBSessionDurationTimer::Start - SessionDurationInMS = %d", iSessionDurationInMS));
         iClock.Start();
         uint32 timebase32 = 0;
         iTimerStartTimeInMS = 0;
@@ -73,12 +75,12 @@
             iExpectedEstimatedServClockValAtSessionEnd = iEstimatedServClockValAtLastCancel;
             uint32 currEstServClk32;
             currEstServClk32 = iExpectedEstimatedServClockValAtSessionEnd;
-            PVMF_JBNODE_LOGCLOCK_SESSION_DURATION((0, "PvmfJBSessionDurationTimer::Start - CurrEstServClock  = %d", currEstServClk32));
+            PVMF_JB_LOGCLOCK_SESSION_DURATION((0, "PvmfJBSessionDurationTimer::Start - CurrEstServClock  = %d", currEstServClk32));
             uint32 remainingSessionDuration32 = 0;
             remainingSessionDuration32 = iSessionDurationInMS - iElapsedSessionDurationInMS;
             iExpectedEstimatedServClockValAtSessionEnd += remainingSessionDuration32;
 
-            PVMF_JBNODE_LOGCLOCK_SESSION_DURATION((0, "PvmfJBSessionDurationTimer::Start - ExpectedEstimatedServClockValAtSessionEnd = %d", iExpectedEstimatedServClockValAtSessionEnd));
+            PVMF_JB_LOGCLOCK_SESSION_DURATION((0, "PvmfJBSessionDurationTimer::Start - ExpectedEstimatedServClockValAtSessionEnd = %d", iExpectedEstimatedServClockValAtSessionEnd));
         }
         RunIfNotReady(iCurrentMonitoringIntervalInMS*1000);
         iStarted = true;
@@ -90,7 +92,8 @@
 ////////////////////////////////////////////////////////////////////////////
 PVMFStatus PvmfJBSessionDurationTimer::setSessionDurationInMS(uint32 duration)
 {
-    PVMF_JBNODE_LOGINFO((0, "PvmfJBSessionDurationTimer::setMaxInactivityDurationInMS"));
+    PVMF_JB_LOGINFO((0, "PvmfJBSessionDurationTimer::setMaxInactivityDurationInMS"));
+    PVMF_JB_LOGCLOCK_SESSION_DURATION((0, "PvmfJBSessionDurationTimer::setMaxInactivityDurationInMS"));
     iSessionDurationInMS = duration;
     iElapsedSessionDurationInMS = 0;
     return PVMFSuccess;
@@ -99,7 +102,8 @@
 ////////////////////////////////////////////////////////////////////////////
 PVMFStatus PvmfJBSessionDurationTimer::Stop()
 {
-    PVMF_JBNODE_LOGINFO((0, "PvmfJBSessionDurationTimer::Stop"));
+    PVMF_JB_LOGINFO((0, "PvmfJBSessionDurationTimer::Stop"));
+    PVMF_JB_LOGCLOCK_SESSION_DURATION((0, "PvmfJBSessionDurationTimer::Stop"));
     OsclTimerObject::Cancel();
     iStarted = false;
     iSessionDurationInMS = 0;
@@ -115,7 +119,8 @@
 ////////////////////////////////////////////////////////////////////////////
 PVMFStatus PvmfJBSessionDurationTimer::Cancel()
 {
-    PVMF_JBNODE_LOGINFO((0, "PvmfJBSessionDurationTimer::Cancel"));
+    PVMF_JB_LOGINFO((0, "PvmfJBSessionDurationTimer::Cancel"));
+    PVMF_JB_LOGCLOCK_SESSION_DURATION((0, "PvmfJBSessionDurationTimer::Cancel"));
     iStarted = false;
     uint32 timebase32 = 0;
     uint32 cancelTime = 0;
@@ -130,19 +135,16 @@
                                                 PVMF_MEDIA_CLOCK_MSEC, timebase32);
     }
 
-    PVMF_JBNODE_LOGCLOCK_SESSION_DURATION((0, "PvmfJBSessionDurationTimer::Cancel - EstimatedServClockValAtLastCancel = %d", iEstimatedServClockValAtLastCancel));
+    PVMF_JB_LOGCLOCK_SESSION_DURATION((0, "PvmfJBSessionDurationTimer::Cancel - EstimatedServClockValAtLastCancel = %d", iEstimatedServClockValAtLastCancel));
     iClock.Stop();
     iTimerStartTimeInMS = 0;
     OsclTimerObject::Cancel();
     return PVMFSuccess;
 }
 
+
 void PvmfJBSessionDurationTimer::EstimatedServerClockUpdated()
 {
-    /*
-     * Check if the estimated server clock has reached the expected value,
-     * if so, cancel the timer and report session duration complete
-     */
     if (iEstimatedServerClock != NULL)
     {
         uint32 timebase32 = 0;
@@ -151,8 +153,8 @@
 
         iEstimatedServerClock->GetCurrentTime32(estServClock, overflowFlag,
                                                 PVMF_MEDIA_CLOCK_MSEC, timebase32);
-        PVMF_JBNODE_LOGCLOCK_SESSION_DURATION((0, "PvmfJBSessionDurationTimer::EstimatedServerClockUpdated - CurrEstServClock = %2d", estServClock));
-        PVMF_JBNODE_LOGCLOCK_SESSION_DURATION((0, "PvmfJBSessionDurationTimer::EstimatedServerClockUpdated - ExpectedEstServClock = %2d", iExpectedEstimatedServClockValAtSessionEnd));
+        PVMF_JB_LOGCLOCK_SESSION_DURATION((0, "PvmfJBSessionDurationTimer::EstimatedServerClockUpdated - CurrEstServClock = %2d", estServClock));
+        PVMF_JB_LOGCLOCK_SESSION_DURATION((0, "PvmfJBSessionDurationTimer::EstimatedServerClockUpdated - ExpectedEstServClock = %2d", iExpectedEstimatedServClockValAtSessionEnd));
         if (estServClock >= iExpectedEstimatedServClockValAtSessionEnd)
         {
             this->Cancel();
@@ -164,14 +166,15 @@
 ////////////////////////////////////////////////////////////////////////////
 void PvmfJBSessionDurationTimer::Run()
 {
-    PVMF_JBNODE_LOGINFO((0, "PvmfJBSessionDurationTimer::Run"));
+    PVMF_JB_LOGINFO((0, "PvmfJBSessionDurationTimer::Run"));
+    PVMF_JB_LOGCLOCK_SESSION_DURATION((0, "PvmfJBSessionDurationTimer::Run"));
 
     if (!iStarted)
         return;
 
     if (!iObserver)
     {
-        PVMF_JBNODE_LOGERROR((0, "PvmfJBSessionDurationTimer::Run: Error - Observer not set"));
+        PVMF_JB_LOGERROR((0, "PvmfJBSessionDurationTimer::Run: Error - Observer not set"));
         return;
     }
 
diff --git a/nodes/streaming/jitterbuffernode/jitterbuffer/common/src/pvmf_jitter_buffer_impl.cpp b/nodes/streaming/jitterbuffernode/jitterbuffer/common/src/pvmf_jitter_buffer_impl.cpp
new file mode 100644
index 0000000..44b976d
--- /dev/null
+++ b/nodes/streaming/jitterbuffernode/jitterbuffer/common/src/pvmf_jitter_buffer_impl.cpp
@@ -0,0 +1,1668 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#ifndef PVMF_JITTER_BUFFER_H_INCLUDED
+#include "pvmf_jitter_buffer.h"
+#endif
+
+#ifndef PVMF_MEDIA_CMD_H_INCLUDED
+#include "pvmf_media_cmd.h"
+#endif
+
+// Define entry point for this DLL
+OSCL_DLL_ENTRY_POINT_DEFAULT()
+
+#define PVMF_JITTER_BUFFER_ROLL_OVER_THRESHOLD_16BIT 2000
+void PVMFJitterBufferImpl::ResetParams(bool aReleaseMemory)
+{
+    if (aReleaseMemory)
+    {
+        DestroyAllocators();
+        OSCL_DELETE(iJitterBuffer);
+        if (iBufferAlloc)
+            iBufferAlloc->removeRef();
+    }
+
+    iStreamingState = STREAMINGSTATE_UNKNOWN;
+    iSeqNum = 0;
+    iReportCanRetrievePacket = false;
+
+    iInPlaceProcessing = true;
+    iOnePacketPerFragment = true;
+    iOnePacketPerMediaMsg = true;
+
+    iLastPacketOutTs = 0;
+
+    iMediaDataGroupAlloc = NULL;
+    iMediaDataImplMemPool = NULL;
+    iMediaMsgMemPool = NULL;
+
+    iStartTimeInMS = 0;
+    iStopTimeInMS = 0;
+    iPlayStopTimeAvailable = 0;
+    iBroadCastSession = false;
+
+    iMaxAdjustedRTPTS = 0;
+
+    iSessionDurationExpired = false;
+    iDurationInMilliSeconds = 0;
+    iRebufferingThresholdInMilliSeconds = 0;
+
+    iMonotonicTimeStamp = 0;
+    iFirstSeqNum = 0;
+    iJitterBuffer = NULL;
+    iEOSSignalled = false;
+    iEOSSent = false;
+    iStreamID = 0;
+    iMaxAdjustedTS = 0;
+    iPrevAdjustedTS = 0;
+    iHeaderPreParsed = false;
+
+    iRTPTimeScale = 0;
+    iPrevTSOut = 0;
+
+    seqNumLock = false;
+
+    iInterArrivalJitter = 0;
+    oFirstPacket = false;
+
+
+    SSRCLock = 0;
+    oSSRCFromSetUpResponseAvailable = false;
+    SSRCFromSetUpResponse = 0;
+
+    iPrevSeqNumBaseOut = 0;
+    seqLockTimeStamp = 0;
+
+    iPrevAdjustedRTPTS = 0;
+    iPrevTSIn = 0;
+    iPrevSeqNumBaseIn = 0;
+
+    iBufferAlloc = NULL;
+    prevMinPercentOccupancy = 100;
+    consecutiveLowBufferCount = 0;
+    iNumUnderFlow = 0;
+
+    iWaitForOOOPacketCallBkId = 0;
+    iMonitorReBufferingCallBkId = 0;
+    iJitterBufferDurationCallBkId = 0;
+
+    iMonitorReBufferingCallBkPending = false;
+    iWaitForOOOPacketCallBkPending = false;
+    iJitterBufferDurationCallBkPending = false;
+
+    ipMediaClockConverter = NULL;
+    iTimeScale	= 0;
+}
+
+void PVMFJitterBufferImpl::DestroyAllocators()
+{
+    /* Destroy allocators if present */
+    if (iMediaDataGroupAlloc != NULL)
+    {
+        iMediaDataGroupAlloc->CancelFreeChunkAvailableCallback();
+        iMediaDataGroupAlloc->removeRef();
+        iMediaDataGroupAlloc = NULL;
+    }
+    if (iMediaDataImplMemPool != NULL)
+    {
+        iMediaDataImplMemPool->removeRef();
+        iMediaDataImplMemPool = NULL;
+    }
+    if (iMediaMsgMemPool != NULL)
+    {
+        iMediaMsgMemPool->removeRef();
+        iMediaMsgMemPool = NULL;
+    }
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferImpl::StreamingSessionStarted()
+{
+    iStreamingState	= STREAMINGSTATE_STARTED;
+    iNumUnderFlow = 0;
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferImpl::StreamingSessionPaused()
+{
+    iStreamingState	=	STREAMINGSTATE_PAUSED;
+    CancelEventCallBack(JB_NOTIFY_WAIT_FOR_OOO_PACKET_COMPLETE);
+    CancelEventCallBack(JB_MONITOR_REBUFFERING);
+    CancelEventCallBack(JB_BUFFERING_DURATION_COMPLETE);
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferImpl::StreamingSessionStopped()
+{
+    iStreamingState	=	STREAMINGSTATE_STOPPED;
+    CancelEventCallBack(JB_NOTIFY_WAIT_FOR_OOO_PACKET_COMPLETE);
+    CancelEventCallBack(JB_MONITOR_REBUFFERING);
+    CancelEventCallBack(JB_BUFFERING_DURATION_COMPLETE);
+    FlushJitterBuffer();
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferImpl::SetRebufferingThresholdInMilliSeconds(uint32 aRebufferingThresholdInMilliSeconds)
+{
+    iRebufferingThresholdInMilliSeconds = aRebufferingThresholdInMilliSeconds;
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferImpl::SetDurationInMilliSeconds(uint32 aDuration)
+{
+    iDurationInMilliSeconds = aDuration;
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferImpl::PrepareForRepositioning()
+{
+    irDataState = PVMF_JITTER_BUFFER_IN_TRANSITION;
+    iEOSSignalled = false;
+    iEOSSent = false;
+    irDelayEstablished = false;
+}
+
+OSCL_EXPORT_REF PVMFJitterBufferDataState PVMFJitterBufferImpl::GetState() const
+{
+    return irDataState;
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferImpl::SetJitterBufferState(PVMFJitterBufferDataState aState)
+{
+    irDataState = aState;
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferImpl::SetJitterBufferChunkAllocator(OsclMemPoolResizableAllocator* aDataBufferAllocator)
+{
+    iBufferAlloc = aDataBufferAllocator;
+    iBufferAlloc->addRef();
+}
+
+OSCL_EXPORT_REF const char* PVMFJitterBufferImpl::GetMimeType() const
+{
+    return irMimeType.get_cstr();
+}
+
+
+
+///////////////////////////////////////////////////////////////////////////////
+// Creation and cleanup functions
+///////////////////////////////////////////////////////////////////////////////
+
+OSCL_EXPORT_REF PVMFJitterBufferImpl::PVMFJitterBufferImpl(const PVMFJitterBufferConstructParams& aJBConstructParams)
+        : irEstimatedServerClock(aJBConstructParams.GetEstimatedServerClock())
+        , irClientPlayBackClock(aJBConstructParams.GetClientPlaybackClock())
+        , irJBEventNotifier(aJBConstructParams.GetEventNotifier())
+        , irMimeType(aJBConstructParams.GetMimeType())
+        , irDelayEstablished(aJBConstructParams.GetDelayEstablishStatus())
+        , irJitterDelayPercent(aJBConstructParams.GetJBDelayPercent())
+        , irDataState(aJBConstructParams.GetJitterBufferState())
+        , iObserver(aJBConstructParams.GetJBObserver())
+        , iObserverContext(aJBConstructParams.GetContextData())
+{
+    iMediaMsgMemPool = NULL;
+    iMediaDataImplMemPool = NULL;
+    iMediaDataGroupAlloc = NULL;
+
+    ipLogger = NULL;
+    ipClockLoggerSessionDuration = NULL;
+    ipDataPathLogger = NULL;
+    ipDataPathLoggerIn = NULL;
+    ipDataPathLoggerOut = NULL;
+    ipClockLogger = NULL;
+    ipRTCPDataPathLoggerIn = NULL;
+    ipRTCPDataPathLoggerOut = NULL;
+    ipClockLoggerRebuff = NULL;
+    ipDataPathLoggerFlowCtrl = NULL;
+    ipJBEventsClockLogger = NULL;
+
+    ResetParams(false);
+}
+
+
+
+OSCL_EXPORT_REF PVMFJitterBufferImpl::~PVMFJitterBufferImpl()
+{
+    ResetJitterBuffer();
+    ResetParams();
+    DestroyAllocators();
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferImpl::Construct()
+{
+    ipLogger = PVLogger::GetLoggerObject("JitterBuffer");
+    ipClockLoggerSessionDuration = PVLogger::GetLoggerObject("clock.streaming_manager.sessionduration");
+    ipDataPathLogger = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffer");
+    ipDataPathLoggerIn = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffer.in");
+    ipDataPathLoggerOut = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffer.out");
+    ipClockLogger = PVLogger::GetLoggerObject("clock.jitterbuffer");
+    ipRTCPDataPathLoggerIn = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffer.rtcp.in");
+    ipRTCPDataPathLoggerOut = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffer.rtcp.out");
+    ipMaxRTPTsLogger = PVLogger::GetLoggerObject("MaxRTPTs");
+    ipClockLoggerRebuff = PVLogger::GetLoggerObject("clock.jitterbuffernode.rebuffer");
+    ipDataPathLoggerFlowCtrl = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffer.flowctrl");
+    ipJBEventsClockLogger = PVLogger::GetLoggerObject("eventnotifier.PVMFJitterBufferImpl");
+
+    if (!iInPlaceProcessing)
+    {
+        CreateAllocators();
+    }
+
+    uint32 numNodes = 0;
+
+#if (PMVF_JITTER_BUFFER_NODE_USE_NO_RESIZE_ALLOC)
+    numNodes = PVMF_JB_NO_RESIZE_ALLOC_NUM_CHUNKS_RTP;
+#else
+    numNodes = DEFAULT_NUM_MEDIA_MSGS_IN_JITTER_BUFFER;
+#endif
+    iJitterBuffer = OSCL_NEW(PVMFDynamicCircularArrayType,
+                             (numNodes));
+
+
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Interface functions
+///////////////////////////////////////////////////////////////////////////////
+OSCL_EXPORT_REF PVMFJitterBufferRegisterMediaMsgStatus PVMFJitterBufferImpl::RegisterMediaMsg(PVMFSharedMediaMsgPtr& aMsg)
+{
+    PVMFJitterBufferRegisterMediaMsgStatus retval = PVMF_JB_REGISTER_MEDIA_MSG_SUCCESS;
+    PVMFSharedMediaDataPtr dataPacket;
+
+    if (aMsg->getFormatID() > PVMF_MEDIA_CMD_FORMAT_IDS_START)	//IsCmdMsg
+    {
+        RegisterCmdPacket(aMsg);
+    }
+    else
+    {
+        LOGCLIENTANDESTIMATEDSERVCLK_DATAPATH;
+        //1. Parse the header, and validate the packet
+        //2. Create the packet (if iInPlaceProcessing is false)
+        //3. Update statistics
+        //4. Register the packet
+        //5. Check for flow control [JB specific]
+        PVMFSharedMediaDataPtr inputDataPacket;
+        convertToPVMFMediaData(inputDataPacket, aMsg);
+        OsclSharedPtr<PVMFMediaDataImpl> mediaDataIn;
+        if (!inputDataPacket->getMediaDataImpl(mediaDataIn))
+        {
+            PVMF_JB_LOGERROR((0, "PVMFJitterBufferImpl::ProcessIncomingMsgRTP: corrupt input media msg"));
+            PVMF_JB_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferImpl::ProcessIncomingMsgRTP: corrupt input media msg"));
+            retval = PVMF_JB_REGISTER_MEDIA_MSG_ERR_CORRUPT_PACKET;
+        }
+        else
+        {
+            if (iOnePacketPerMediaMsg)
+            {
+                PVMFSharedMediaDataPtr dataPacket;
+                PVMFJBPacketParsingAndStatUpdationStatus status = ParsePacketHeaderAndUpdateJBStats(inputDataPacket, dataPacket);
+                if (PVMF_JB_PACKET_PARSING_SUCCESS == status)
+                {
+                    if (CanRegisterMediaMsg())
+                    {
+                        if (CheckSpaceAvailability())
+                        {
+                            retval = RegisterDataPacket(inputDataPacket);
+
+                        }
+                        else
+                        {
+                            retval = PVMF_JB_REGISTER_MEDIA_MSG_FAILURE_JB_FULL;
+                        }
+                    }
+                    else
+                    {
+                        if (dataPacket.GetRep())
+                        {
+#if (PVLOGGER_INST_LEVEL > PVLOGMSG_INST_LLDBG)
+                            PVMF_JB_LOGDATATRAFFIC_FLOWCTRL_E((0, "PVMFJitterBufferNode::ProcessIncomingMsgRTP: - Ignoring - Wrong State"
+                                                               "Size=%d, SSRC=%d", inputDataPacket->getFilledSize(), inputDataPacket->getStreamID()));
+                            PVMF_JB_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferNode::ProcessIncomingMsg: - Ignoring - Wrong State"
+                                                       "Size=%d, SSRC=%d", inputDataPacket->getFilledSize(), inputDataPacket->getStreamID()));
+                            PVMF_JB_LOGERROR((0, "PVMFJitterBufferNode::ProcessIncomingMsg: - Ignoring - Wrong State"
+                                              "Size=%d, SSRC=%d", inputDataPacket->getFilledSize(), inputDataPacket->getStreamID()));
+#endif
+                        }
+                        PVMF_JB_LOGERROR((0, "PVMFJitterBufferImpl::RegisterMediaMsg: Invalid State to accept any packet"));
+                        PVMF_JB_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferImpl::RegisterMediaMsg: Invalid State to accept any packet"));
+                        retval = PVMF_JB_REGISTER_MEDIA_MSG_ERR_CORRUPT_PACKET;
+                    }
+                }
+                else
+                {
+                    if (PVMF_JB_ERR_INSUFFICIENT_MEM_TO_PACKETIZE == status)
+                    {
+                        retval = PVMF_JB_REGISTER_MEDIA_MSG_FAILURE_INSUFFICIENT_MEMORY_FOR_PACKETIZATION;
+                    }
+                    if (PVMF_JB_ERR_INVALID_CONFIGURATION == status)
+                    {
+                        retval = PVMF_JB_BUFFER_REGISTER_MEDIA_MSG_ERR_CONFIG_NOT_SUPPORTED;
+                    }
+                    if ((PVMF_JB_ERR_CORRUPT_HDR == status) || (PVMF_JB_ERR_TRUNCATED_HDR == status))
+                    {
+                        retval = PVMF_JB_REGISTER_MEDIA_MSG_ERR_INVALID_HEADER;
+                    }
+                    if (PVMF_JB_ERR_UNEXPECTED_PKT == status)
+                    {
+                        retval = PVMF_JB_REGISTER_MEDIA_MSG_ERR_UNEXPECTED_DATA;
+                    }
+                    if (PVMF_JB_ERR_LATE_PACKET == status)
+                    {
+                        retval = PVMF_JB_REGISTER_MEDIA_MSG_ERR_LATE_MSG;
+                    }
+                    PVMF_JB_LOGERROR((0, "PVMFJitterBufferImpl::RegisterMediaMsg: ParsePacketHeader failed retval %d", retval));
+                }
+            }
+            else
+            {
+                if (iOnePacketPerFragment)
+                {
+                    const uint32 numOfFragments = inputDataPacket->getNumFragments();
+                    for (uint ii = 0; ii < numOfFragments ; ii++)
+                    {
+                        PVMFSharedMediaDataPtr dataPacket;
+                        PVMFJBPacketParsingAndStatUpdationStatus status = ParsePacketHeaderAndUpdateJBStats(inputDataPacket, dataPacket, ii);
+                        if (PVMF_JB_PACKET_PARSING_SUCCESS == status)
+                        {
+                            if (CanRegisterMediaMsg())
+                            {
+                                if (CheckSpaceAvailability())
+                                {
+                                    retval = RegisterDataPacket(dataPacket);
+                                }
+                                else
+                                {
+                                    retval = PVMF_JB_REGISTER_MEDIA_MSG_FAILURE_JB_FULL;
+                                }
+                            }
+                            else
+                            {
+                                if (dataPacket.GetRep())
+                                {
+#if (PVLOGGER_INST_LEVEL > PVLOGMSG_INST_LLDBG)
+                                    PVMF_JB_LOGDATATRAFFIC_FLOWCTRL_E((0, "PVMFJitterBufferNode::ProcessIncomingMsgRTP: - Ignoring - Wrong State"
+                                                                       "Size=%d, SSRC=%d", inputDataPacket->getFilledSize(), dataPacket->getStreamID()));
+                                    PVMF_JB_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferNode::ProcessIncomingMsg: - Ignoring - Wrong State"
+                                                               "Size=%d, SSRC=%d", inputDataPacket->getFilledSize(), dataPacket->getStreamID()));
+                                    PVMF_JB_LOGERROR((0, "PVMFJitterBufferNode::ProcessIncomingMsg: - Ignoring - Wrong State"
+                                                      "Size=%d, SSRC=%d", inputDataPacket->getFilledSize(), dataPacket->getStreamID()));
+#endif
+                                }
+                                PVMF_JB_LOGERROR((0, "PVMFJitterBufferImpl::RegisterMediaMsg: Invalid State to accept any packet"));
+                                PVMF_JB_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferImpl::RegisterMediaMsg: Invalid State to accept any packet"));
+                                retval = PVMF_JB_REGISTER_MEDIA_MSG_ERR_CORRUPT_PACKET;
+                            }
+                        }
+                        else
+                        {
+                            if (PVMF_JB_ERR_INSUFFICIENT_MEM_TO_PACKETIZE == status)
+                            {
+                                retval = PVMF_JB_REGISTER_MEDIA_MSG_FAILURE_INSUFFICIENT_MEMORY_FOR_PACKETIZATION;
+                            }
+                            if (PVMF_JB_ERR_INVALID_CONFIGURATION == status)
+                            {
+                                retval = PVMF_JB_BUFFER_REGISTER_MEDIA_MSG_ERR_CONFIG_NOT_SUPPORTED;
+                            }
+                            if ((PVMF_JB_ERR_CORRUPT_HDR == status) || (PVMF_JB_ERR_TRUNCATED_HDR == status))
+                            {
+                                retval = PVMF_JB_REGISTER_MEDIA_MSG_ERR_INVALID_HEADER;
+                            }
+                            if (PVMF_JB_ERR_UNEXPECTED_PKT == status)
+                            {
+                                retval = PVMF_JB_REGISTER_MEDIA_MSG_ERR_UNEXPECTED_DATA;
+                            }
+                            if (PVMF_JB_ERR_LATE_PACKET == status)
+                            {
+                                retval = PVMF_JB_REGISTER_MEDIA_MSG_ERR_LATE_MSG;
+                            }
+                            PVMF_JB_LOGERROR((0, "PVMFJitterBufferImpl::RegisterMediaMsg: ParsePacketHeader failed retval %d", retval));
+                        }
+                        if (retval == PVMF_JB_REGISTER_MEDIA_MSG_FAILURE_INSUFFICIENT_MEMORY_FOR_PACKETIZATION || retval == PVMF_JB_REGISTER_MEDIA_MSG_FAILURE_JB_FULL)
+                        {
+                            //Serious err.. drop the packets... May be leave and let the obs trap...?
+                            break;
+                        }
+                    }
+                }
+                else
+                {
+                    //invalid use case, not expected, cause exception(leave) here
+                    OSCL_LEAVE(JBPacketRegistrationConfigurationCorrupted);
+                }
+            }
+        }
+    }
+    return retval;
+}
+
+OSCL_EXPORT_REF PVMFStatus PVMFJitterBufferImpl::RetrievePacket(PVMFSharedMediaMsgPtr& aMediaMsgPtr, bool& aCmdPacket)
+{
+    aCmdPacket = false;
+    PVMFSharedMediaMsgPtr mediaMsg;
+    if (CanRetrievePacket(aMediaMsgPtr, aCmdPacket))
+    {
+        return PVMFSuccess;
+    }
+    else
+    {
+        return PVMFErrNotReady;
+    }
+}
+
+OSCL_EXPORT_REF PVMFStatus PVMFJitterBufferImpl::SetInputPacketHeaderPreparsed(bool aPreParsed)
+{
+    iHeaderPreParsed = aPreParsed;
+    return PVMFSuccess;
+}
+
+OSCL_EXPORT_REF PVMFJitterBufferStats& PVMFJitterBufferImpl::getJitterBufferStats()
+{
+    OSCL_ASSERT(iJitterBuffer);
+    return (iJitterBuffer->getStats());
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferImpl::FlushJitterBuffer()
+{
+    iFirstDataPackets.clear();
+    iJitterBuffer->Clear();
+    iJitterBuffer->ResetJitterBufferStats();
+    iRTPInfoParamsVec.clear();
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferImpl::ResetJitterBuffer()
+{
+    FlushJitterBuffer();
+    iJitterBuffer->ResetJitterBufferStats();
+
+    iRTPInfoParamsVec.clear();
+    iMonotonicTimeStamp = 0;
+    iPrevTSOut = 0;
+    iMaxAdjustedRTPTS = 0;
+}
+
+OSCL_EXPORT_REF PVMFTimestamp PVMFJitterBufferImpl::peekNextElementTimeStamp()
+{
+    if (iJitterBuffer->getNumElements() > 0)
+    {
+        PVMFTimestamp currTS;
+        PVMFTimestamp prevTS;
+        uint32 aSeqNum;
+        iJitterBuffer->peekNextElementTimeStamp(currTS, aSeqNum);
+        DeterminePrevTimeStampPeek(aSeqNum, prevTS);
+        uint64 ts64 = iMonotonicTimeStamp;
+        ts64 += (currTS - prevTS);
+        PVMFTimestamp adjTS =
+            (PVMFTimestamp)(Oscl_Int64_Utils::get_uint64_lower32(ts64));
+        return (adjTS);
+    }
+    else
+    {
+        PVMFTimestamp adjTS =
+            (PVMFTimestamp)(Oscl_Int64_Utils::get_uint64_lower32(iMonotonicTimeStamp));
+        return (adjTS);
+    }
+}
+
+OSCL_EXPORT_REF PVMFTimestamp PVMFJitterBufferImpl::peekMaxElementTimeStamp()
+{
+    if (iJitterBuffer->getNumElements() > 0)
+    {
+        PVMFTimestamp currTS;
+        PVMFTimestamp maxTS;
+        PVMFTimestamp prevTS;
+        uint32 aSeqNum;
+        iJitterBuffer->peekNextElementTimeStamp(currTS, aSeqNum);
+        DeterminePrevTimeStampPeek(aSeqNum, prevTS);
+        iJitterBuffer->peekMaxElementTimeStamp(maxTS, aSeqNum);
+        uint64 ts64 = iMonotonicTimeStamp;
+        ts64 += (maxTS - prevTS);
+        PVMFTimestamp adjTS =
+            (PVMFTimestamp)(Oscl_Int64_Utils::get_uint64_lower32(ts64));
+        return (adjTS);
+    }
+    else
+    {
+        PVMFTimestamp adjTS =
+            (PVMFTimestamp)(Oscl_Int64_Utils::get_uint64_lower32(iMonotonicTimeStamp));
+        return (adjTS);
+    }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+
+OSCL_EXPORT_REF PVMFJitterBufferRegisterMediaMsgStatus PVMFJitterBufferImpl::RegisterCmdPacket(PVMFSharedMediaMsgPtr& aMediaCmd)
+{
+    if (aMediaCmd->getFormatID() == PVMF_MEDIA_CMD_EOS_FORMAT_ID)
+    {
+        PVMF_JB_LOGERROR((0, "PVMFJitterBufferImpl::RegisterCmdPacket - EOS Received"));
+        PVMF_JB_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferImpl::RegisterCmdPacket - EOS Received"));
+        EOSCmdReceived();
+    }
+    else /* unknown command */
+    {
+        PVMF_JB_LOGERROR((0, "PVMFJitterBufferImpl::ProcessIncomingMsgRTP - Unknown Cmd Recvd"));
+        PVMF_JB_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferImpl::ProcessIncomingMsgRTP - Unknown Cmd Recvd"));
+        PVMFJitterBufferStats stats = getJitterBufferStats();
+        MediaCommandMsgHolder cmdHolder;
+        cmdHolder.iPreceedingMediaMsgSeqNumber = stats.lastRegisteredSeqNum;
+        cmdHolder.iCmdMsg = aMediaCmd;
+        iMediaCmdVec.push_back(cmdHolder);
+    }
+    return PVMF_JB_REGISTER_MEDIA_MSG_SUCCESS;
+}
+
+PVMFJitterBufferRegisterMediaMsgStatus PVMFJitterBufferImpl::RegisterDataPacket(PVMFSharedMediaDataPtr& aDataPacket)
+{
+    PVMFJitterBufferRegisterMediaMsgStatus retval = AddPacket(aDataPacket);
+    if (retval == PVMF_JB_REGISTER_MEDIA_MSG_SUCCESS)
+    {
+        PerformFlowControl(true);
+    }
+    uint32 aClockDiff = 0;
+    bool delayEstablished = IsDelayEstablished(aClockDiff);//To update delay percent
+    if (iReportCanRetrievePacket && delayEstablished)
+    {
+        //Check if delay is established
+        //There's no hole for for min threshold time
+        if (CanRetrievePacket())
+        {
+            iObserver->PacketReadyToBeRetrieved(iObserverContext);
+            iReportCanRetrievePacket = false;
+        }
+    }
+    return retval;
+}
+
+PVMFJitterBufferRegisterMediaMsgStatus PVMFJitterBufferImpl::AddPacket(PVMFSharedMediaDataPtr& aDataPacket)
+{
+    PVMFJitterBufferRegisterMediaMsgStatus retval = PVMF_JB_REGISTER_MEDIA_MSG_SUCCESS;
+    if (iEOSSent)
+    {
+        /* EOS received - do not register packet */
+        PVMF_JB_LOGWARNING((0, "0x%x PVMFJitterBufferImpl::addPacket: After EOS Reached!!!", this));
+        return PVMF_JB_REGISTER_MEDIA_MSG_ERR_EOS_SIGNALLED;
+    }
+
+    if (seqNumLock)
+    {
+        if (oSSRCFromSetUpResponseAvailable == false)
+        {
+            oSSRCFromSetUpResponseAvailable = true;
+            SSRCLock = aDataPacket->getStreamID();
+            PVMF_JB_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferImpl::addPacket: Ser No SSRC, set to 1st pkt SSRC %d", SSRCLock));
+        }
+        /* Filter based on SSRC */
+        if (aDataPacket->getStreamID() == SSRCLock)
+        {
+            PVMFJitterBufferAddElemStatus status;
+
+            status = iJitterBuffer->addElement(aDataPacket, iFirstSeqNum);
+            if (status == PVMF_JITTER_BUFFER_ADD_ELEM_SUCCESS)
+            {
+                PVMF_JB_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferImpl::addPacket: MimeType=%s TS=%u, SEQNUM= %d",
+                                           irMimeType.get_cstr(), aDataPacket->getTimestamp(), aDataPacket->getSeqNum()));
+
+                if (iRTPInfoParamsVec.size() > 0)
+                {
+                    /*
+                     * Calculate adjusted RTP TS - Will be used to update
+                     * the estimated server clock, if any only if some rtp-info
+                     * params have been set
+                     */
+                    ComputeMaxAdjustedRTPTS();
+                }
+            }
+            else if (status == PVMF_JITTER_BUFFER_ADD_ELEM_PACKET_OVERWRITE)
+            {
+                PVMF_JB_LOGDATATRAFFIC_IN_E((0, "PVMFJitterBufferImpl::addPacket - OverWrite: MimeType=%s TS=%d, SEQNUM= %d",
+                                             irMimeType.get_cstr(), aDataPacket->getTimestamp(), aDataPacket->getSeqNum()));
+                retval = PVMF_JB_REGISTER_MEDIA_MSG_ERR_UNKNOWN;
+            }
+        }
+    }
+    else
+    {
+        if (oSSRCFromSetUpResponseAvailable && (aDataPacket->getStreamID() != SSRCFromSetUpResponse))
+        {//discard packet
+            PVMF_JB_LOGERROR((0, "PVMFJitterBufferImpl::addPacket: ERROR wrong ssrc %d", aDataPacket->getStreamID()));
+            return PVMF_JB_REGISTER_MEDIA_MSG_SUCCESS;
+        }
+        // Add packet to temporary array
+        iFirstDataPackets.push_back(aDataPacket);
+
+        const uint cPktNeededForVote = 5;
+        if (iFirstDataPackets.size() < cPktNeededForVote)
+            return PVMF_JB_REGISTER_MEDIA_MSG_SUCCESS;
+
+        //Majortiy vote for SSRC first
+        //0 count; 1 ssrc; 2 seqbase; 3 timestamp; uint32 PVMFTimestamp;
+        uint32 my_ssrc[cPktNeededForVote][4];
+        for (uint32 i = 0; i < cPktNeededForVote; i++)
+            my_ssrc[i][0] = my_ssrc[i][1] = my_ssrc[i][2] = my_ssrc[i][3] = 0;
+
+        {
+            // 1. vote
+            for (uint32 i = 0; i < cPktNeededForVote; i++)
+            {
+                uint32 ssrc = iFirstDataPackets[i]->getStreamID();
+                for (uint32 j = 0; j < cPktNeededForVote; j++)
+                {
+                    if (my_ssrc[j][0] > 0)
+                    {
+                        if (ssrc ==  my_ssrc[j][1])
+                        {
+                            my_ssrc[j][0]++;
+                            if (iFirstDataPackets[i]->getSeqNum() < my_ssrc[j][2])
+                            {
+                                my_ssrc[j][2] = iFirstDataPackets[i]->getSeqNum();
+                                my_ssrc[j][3] = iFirstDataPackets[i]->getTimestamp();
+                            }
+                            break;
+                        }
+                    }
+                    else
+                    {
+                        my_ssrc[j][0]++; //my_ssrc[j][0]=1
+                        my_ssrc[j][1] = ssrc;
+                        my_ssrc[j][2] = iFirstDataPackets[i]->getSeqNum();
+                        my_ssrc[j][3] = iFirstDataPackets[i]->getTimestamp();
+                        break;
+                    }
+                }
+            }
+        }
+
+        {// 2. poll ssrc
+            uint32 first_ssrc_index = 0, second_ssrc_index = 1;
+            if (my_ssrc[0][0] < my_ssrc[1][0])
+            {
+                first_ssrc_index = 1;
+                second_ssrc_index = 0;
+            }
+            for (uint32 i = 2; i < cPktNeededForVote; i++)
+            {
+                if (my_ssrc[i][0] > first_ssrc_index)
+                {
+                    second_ssrc_index = first_ssrc_index;
+                    first_ssrc_index = i;
+                }
+                else if (my_ssrc[i][0] > second_ssrc_index)
+                {
+                    second_ssrc_index =  i;
+                }
+            }
+            if (my_ssrc[first_ssrc_index][0] <= my_ssrc[second_ssrc_index][0])
+            {
+                //got a tie. should rarely happen
+                //for now, just pick the first one
+                PVMF_JB_LOGERROR((0, "PVMFJitterBufferImpl::addPacket: ERROR first %d second %d", first_ssrc_index, second_ssrc_index));
+            }
+            SSRCLock = my_ssrc[first_ssrc_index][1];
+            seqNumLock = true;
+
+            //if we got RTPInfo by now, we should still use it
+            if (iRTPInfoParamsVec.size() > 0)
+            {
+                Oscl_Vector<PVMFRTPInfoParams, OsclMemAllocator>::iterator it;
+                it = iRTPInfoParamsVec.begin();
+                iFirstSeqNum = (it->seqNumBaseSet) ? it->seqNum : my_ssrc[first_ssrc_index][2];
+                seqLockTimeStamp = (it->rtpTimeBaseSet) ? it->rtpTime : my_ssrc[first_ssrc_index][3];
+            }
+            else
+            {
+                iFirstSeqNum = my_ssrc[first_ssrc_index][2];
+                seqLockTimeStamp = my_ssrc[first_ssrc_index][3];
+            }
+            // iFirstSeqNum must be initialized when we come here
+            iJitterBuffer->setFirstSeqNumAdded(iFirstSeqNum);
+            CheckForRTPTimeAndRTPSeqNumberBase();
+        }
+        // 3.throw away the pkt not belong to current session and register packets
+
+        bool bNoErr = true;
+        Oscl_Vector<PVMFSharedMediaDataPtr, OsclMemAllocator>::iterator it;
+        for (it = iFirstDataPackets.begin(); it != iFirstDataPackets.end();		it++)
+        {
+            if ((*it)->getStreamID() == SSRCLock)
+            {
+                //Validate the packet before trying to push
+
+                PVMFSharedMediaDataPtr& elem = *it;
+                uint32 seqNum = elem->getSeqNum();
+                PVMFTimestamp packetTs = elem->getTimestamp();
+
+                if (iFirstSeqNum != seqNum)
+                {
+                    PVMFJitterBufferStats& jbStats = getJitterBufferStats();
+
+                    if (iBroadCastSession == true)
+                    {
+                        /*
+                         * This can happen when using prerecorded transport streams that loop
+                         * If this happens, just signal an unexpected data event
+                         */
+                        if (packetTs < jbStats.maxTimeStampRegistered)
+                        {
+                            return PVMF_JB_REGISTER_MEDIA_MSG_ERR_UNEXPECTED_DATA;
+                        }
+                    }
+
+                    if (!IsSeqTsValidForPkt(seqNum, packetTs, jbStats))
+                    {
+                        return PVMF_JB_REGISTER_MEDIA_MSG_ERR_LATE_MSG;
+                    }
+                }
+
+                if (! iJitterBuffer->addElement(*it, iFirstSeqNum))
+                {
+                    PVMF_JB_LOGERROR((0, "PVMFJitterBufferImpl::addPacket: addElement failed"));
+                    bNoErr = false;
+                }
+                else
+                {
+                    PVMF_JB_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferImpl::addPacket: MimeType=%s TS=%d, SEQNUM= %d",
+                                               irMimeType.get_cstr(), (*it)->getTimestamp(), (*it)->getSeqNum()));
+                }
+            }
+        }
+
+        iFirstDataPackets.clear();
+        if (iRTPInfoParamsVec.size() > 0)
+        {
+            /*
+            * Calculate adjusted RTP TS - Will be used to update
+            * the estimated server clock, if any only if some rtp-info
+            * params have been set
+            	*/
+            ComputeMaxAdjustedRTPTS();
+        }
+
+        if (!bNoErr)
+            return PVMF_JB_REGISTER_MEDIA_MSG_ERR_UNKNOWN;
+
+    }
+
+    PVMFJitterBufferStats stats = getJitterBufferStats();
+    if (stats.totalPacketsLost > 0)
+    {
+        PVMF_JB_LOGWARNING((0, "Packet Loss: MimeType=%s, NumPacketsLost=%d", irMimeType.get_cstr(), stats.totalPacketsLost));
+    }
+    PVMF_JB_LOGINFO((0, "PVMFJitterBufferImpl::addPacket - JB Occup Stats - MimeType=%s, MaxSize=%d, CurrOccupany=%d", irMimeType.get_cstr(), iJitterBuffer->getArraySize(), iJitterBuffer->getNumElements()));
+    return retval;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//Prtected functions to implement the interface functions
+///////////////////////////////////////////////////////////////////////////////
+OSCL_EXPORT_REF bool PVMFJitterBufferImpl::CanRegisterMediaMsg()
+{
+    if ((STREAMINGSTATE_STARTED == iStreamingState) || (STREAMINGSTATE_PAUSED == iStreamingState))
+    {
+        return true;
+    }
+    return false;
+}
+
+void PVMFJitterBufferImpl::CreateAllocators()
+{
+    //Create allocators
+    iMediaMsgMemPool = OSCL_NEW(OsclMemPoolFixedChunkAllocator,
+                                (DEFAULT_NUM_MEDIA_MSGS_IN_JITTER_BUFFER));
+    iMediaDataImplMemPool = OSCL_NEW(OsclMemPoolFixedChunkAllocator,
+                                     (DEFAULT_NUM_MEDIA_MSGS_IN_JITTER_BUFFER));
+    iMediaDataGroupAlloc = OSCL_NEW(PVMFMediaFragGroupCombinedAlloc<OsclMemPoolFixedChunkAllocator>,
+                                    (DEFAULT_NUM_MEDIA_MSGS_IN_JITTER_BUFFER,
+                                     DEFAULT_NUM_FRAGMENTS_IN_MEDIA_MSG,
+                                     iMediaDataImplMemPool));
+    iMediaDataGroupAlloc->create();
+}
+
+OSCL_EXPORT_REF bool PVMFJitterBufferImpl::CreateMediaData(PVMFSharedMediaDataPtr& dataPacket, OsclSharedPtr<PVMFMediaDataImpl>& mediaDataOut)
+{
+    int32 err;
+
+    OSCL_TRY(err,
+             dataPacket = PVMFMediaData::createMediaData(mediaDataOut,
+                          iMediaMsgMemPool););
+
+    if (err != OsclErrNone)
+    {
+        return false;
+    }
+
+    return true;
+}
+OSCL_EXPORT_REF bool PVMFJitterBufferImpl::Allocate(OsclSharedPtr<PVMFMediaDataImpl>& mediaDataOut)
+{
+    int32 err;
+    OSCL_TRY(err,
+             mediaDataOut = iMediaDataGroupAlloc->allocate());
+
+    if (err != OsclErrNone)
+    {
+        return false;
+    }
+
+    // If there is no memory left return false
+    if (mediaDataOut.GetRep() == NULL)
+    {
+        return false;
+    }
+
+    return true;
+}
+
+OSCL_EXPORT_REF bool PVMFJitterBufferImpl::RequestEventCallBack(JB_NOTIFY_CALLBACK aEventType, uint32 aDelay, OsclAny* aContext)
+{
+    OSCL_UNUSED_ARG(aContext);
+    bool retval = false;
+    switch (aEventType)
+    {
+        case JB_NOTIFY_WAIT_FOR_OOO_PACKET_COMPLETE :
+        {
+            PVMFJBEventNotificationRequestInfo eventRequestInfo(CLOCK_NOTIFICATION_INTF_TYPE_ESTIMATEDSERVER, this, NULL);
+            retval = irJBEventNotifier.RequestCallBack(eventRequestInfo, aDelay, iWaitForOOOPacketCallBkId);
+            if (retval)
+            {
+                PVMF_JB_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::RequestEventCallBack In OOO CallBackId [%d] Mime %s", iWaitForOOOPacketCallBkId, irMimeType.get_cstr()));
+                iWaitForOOOPacketCallBkPending = true;
+            }
+        }
+        break;
+        case JB_MONITOR_REBUFFERING:
+        {
+            PVMFJBEventNotificationRequestInfo eventRequestInfo(CLOCK_NOTIFICATION_INTF_TYPE_CLIENTPLAYBACK, this, NULL);
+            retval = irJBEventNotifier.RequestCallBack(eventRequestInfo, aDelay, iMonitorReBufferingCallBkId);
+            if (retval)
+            {
+                PVMF_JB_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::RequestEventCallBack In Rebuffering CallBackId [%d] Mime %s", iMonitorReBufferingCallBkId, irMimeType.get_cstr()));
+                iMonitorReBufferingCallBkPending = true;
+            }
+        }
+        break;
+        case JB_BUFFERING_DURATION_COMPLETE:
+        {
+            PVMFJBEventNotificationRequestInfo eventRequestInfo(CLOCK_NOTIFICATION_INTF_TYPE_NONDECREASING, this, NULL);
+            retval = irJBEventNotifier.RequestCallBack(eventRequestInfo, iDurationInMilliSeconds, iJitterBufferDurationCallBkId);
+            if (retval)
+            {
+                iJitterBufferDurationCallBkPending = true;
+            }
+        }
+        break;
+        default:
+        {
+            //Log it
+        }
+    }
+
+    return retval;
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferImpl::CancelEventCallBack(JB_NOTIFY_CALLBACK aEventType, OsclAny* aContext)
+{
+    OSCL_UNUSED_ARG(aContext);
+    switch (aEventType)
+    {
+        case JB_NOTIFY_WAIT_FOR_OOO_PACKET_COMPLETE:
+        {
+            PVMFJBEventNotificationRequestInfo eventRequestInfo(CLOCK_NOTIFICATION_INTF_TYPE_ESTIMATEDSERVER, this, NULL);
+            irJBEventNotifier.CancelCallBack(eventRequestInfo, iWaitForOOOPacketCallBkId);
+            iWaitForOOOPacketCallBkPending = false;
+        }
+        break;
+        case JB_MONITOR_REBUFFERING:
+        {
+            PVMFJBEventNotificationRequestInfo eventRequestInfo(CLOCK_NOTIFICATION_INTF_TYPE_CLIENTPLAYBACK, this, NULL);
+            irJBEventNotifier.CancelCallBack(eventRequestInfo, iMonitorReBufferingCallBkId);
+            iMonitorReBufferingCallBkPending = false;
+        }
+        break;
+        case JB_BUFFERING_DURATION_COMPLETE:
+        {
+            PVMFJBEventNotificationRequestInfo eventRequestInfo(CLOCK_NOTIFICATION_INTF_TYPE_NONDECREASING, this, NULL);
+            irJBEventNotifier.CancelCallBack(eventRequestInfo, iJitterBufferDurationCallBkId);
+            iJitterBufferDurationCallBkPending = false;
+        }
+        break;
+
+        default:
+        {
+            //Log it
+        }
+    }
+    return;
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferImpl::ProcessCallback(CLOCK_NOTIFICATION_INTF_TYPE aClockNotificationInterfaceType, uint32 aCallBkId, const OsclAny* aContext, PVMFStatus aStatus)
+{
+    OSCL_UNUSED_ARG(aClockNotificationInterfaceType);
+    PVMF_JB_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::ProcessCallBack In CallBackId [%d] Mime %s", aCallBkId, irMimeType.get_cstr()));
+
+    if (PVMFSuccess == aStatus)
+    {
+        if (aCallBkId == iWaitForOOOPacketCallBkId)
+        {
+            iWaitForOOOPacketCallBkPending = false;
+            HandleEvent_NotifyWaitForOOOPacketComplete(aContext);
+        }
+
+        if (aCallBkId == iMonitorReBufferingCallBkId)
+        {
+            iMonitorReBufferingCallBkPending = false;
+            HandleEvent_MonitorReBuffering(aContext);
+        }
+        else if (aCallBkId == iJitterBufferDurationCallBkId)
+        {
+            iJitterBufferDurationCallBkPending = false;
+            HandleEvent_JitterBufferBufferingDurationComplete();
+        }
+    }
+    else
+    {
+        //Log it
+    }
+    PVMF_JB_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::ProcessCallBack Out"));
+}
+
+void PVMFJitterBufferImpl::HandleEvent_MonitorReBuffering(const OsclAny* aContext)
+{
+    OSCL_UNUSED_ARG(aContext);
+    uint32 timebase32 = 0;
+    uint32 estServerClock = 0;
+    uint32 clientClock = 0;
+    bool overflowFlag = false;
+    irEstimatedServerClock.GetCurrentTime32(estServerClock, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
+    irClientPlayBackClock.GetCurrentTime32(clientClock, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
+
+
+    PVMF_JB_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Check - EstServClock=%d", estServerClock));
+    PVMF_JB_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Check - ClientClock=%d", clientClock));
+
+    uint32 clockDiff;
+    IsDelayEstablished(clockDiff); //just to evaluate the rebuiffering condition.
+}
+
+void PVMFJitterBufferImpl::HandleEvent_NotifyWaitForOOOPacketComplete(const OsclAny* aContext)
+{
+    OSCL_UNUSED_ARG(aContext);
+    if (iReportCanRetrievePacket)
+    {
+        iObserver->PacketReadyToBeRetrieved(iObserverContext);
+    }
+}
+
+OSCL_EXPORT_REF bool PVMFJitterBufferImpl::IsCallbackPending(JB_NOTIFY_CALLBACK aEventType, OsclAny* aContext)
+{
+    bool*  callBackPending = NULL;
+    switch (aEventType)
+    {
+        case JB_MONITOR_REBUFFERING:
+        {
+            callBackPending = &iMonitorReBufferingCallBkPending;
+        }
+        break;
+        case JB_NOTIFY_WAIT_FOR_OOO_PACKET_COMPLETE:
+        {
+            callBackPending = &iWaitForOOOPacketCallBkPending;
+        }
+        break;
+        case JB_BUFFERING_DURATION_COMPLETE:
+        {
+            callBackPending = &iJitterBufferDurationCallBkPending;
+        }
+        break;
+        default:
+            OSCL_ASSERT(false);
+    }
+    // PVMF_JB_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::IsCallbackPending - Event Type[%d] CallBackPending [%d] aContext[0x%x]", aEventType, *callBackPending, aContext));
+    return *callBackPending;
+}
+
+OSCL_EXPORT_REF bool PVMFJitterBufferImpl::QueueBOSCommand(uint32 aStreamId)
+{
+    iStreamID = aStreamId;
+    PVMFSharedMediaCmdPtr sharedMediaCmdPtr = PVMFMediaCmd::createMediaCmd();
+    // Set the formatID, timestamp, sequenceNumber and streamID for the media message
+    sharedMediaCmdPtr->setFormatID(PVMF_MEDIA_CMD_BOS_FORMAT_ID);
+    uint32 seqNum = 0;
+    sharedMediaCmdPtr->setSeqNum(seqNum);
+    sharedMediaCmdPtr->setStreamID(iStreamID);
+
+    PVMFSharedMediaMsgPtr mediaMsgOut;
+    convertToPVMFMediaCmdMsg(mediaMsgOut, sharedMediaCmdPtr);
+
+
+    addMediaCommand(mediaMsgOut);
+
+    PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, ipLogger, PVLOGMSG_STACK_TRACE, (0, "PVMFJitterBufferNode::QueueBOSCommand() MIME=%s StreamID=%d", irMimeType.get_cstr(), iStreamID));
+    return true;
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferImpl::SetInPlaceProcessingMode(bool aInPlaceProcessingMode)
+{
+    iInPlaceProcessing = aInPlaceProcessingMode;
+    if (iInPlaceProcessing)
+    {
+        iOnePacketPerMediaMsg = true;
+    }
+    else
+    {
+        iOnePacketPerMediaMsg = false;
+    }
+
+    iOnePacketPerFragment = true;
+
+    if (iInPlaceProcessing == false)
+    {
+        CreateAllocators();
+    }
+    else
+    {
+        DestroyAllocators();
+    }
+}
+
+OSCL_EXPORT_REF PVMFStatus
+PVMFJitterBufferImpl::GenerateAndSendEOSCommand(PVMFSharedMediaMsgPtr& aMediaOutMsg, bool& aCmdPacket)
+{
+    PVMF_JB_LOGINFO((0, "PVMFJitterBufferNode::GenerateAndSendEOSCommand"));
+    PVMF_JB_LOG_RTCPDATATRAFFIC_OUT((0, "PVMFJitterBufferImpl::GenerateAndSendEOSCommand In Mime[%s]-", irMimeType.get_cstr()));
+
+    if (iEOSSent == false)
+    {
+        aCmdPacket = true;
+        PVMFSharedMediaCmdPtr sharedMediaCmdPtr =
+            PVMFMediaCmd::createMediaCmd();
+
+        sharedMediaCmdPtr->setFormatID(PVMF_MEDIA_CMD_EOS_FORMAT_ID);
+
+        sharedMediaCmdPtr->setStreamID(iStreamID);
+
+        convertToPVMFMediaCmdMsg(aMediaOutMsg, sharedMediaCmdPtr);
+
+        aMediaOutMsg->setTimestamp(iLastPacketOutTs);
+
+        uint32 timebase32 = 0;
+        uint32 clientClock32 = 0;
+        bool overflowFlag = false;
+
+        irClientPlayBackClock.GetCurrentTime32(clientClock32, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
+        timebase32 = 0;
+        uint32 estServClock32 = 0;
+        irEstimatedServerClock.GetCurrentTime32(estServClock32, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
+        PVMF_JB_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::GenerateAndSendEOSCommand: MimeType=%s, StreamID=%d",
+                                    irMimeType.get_cstr(),
+                                    aMediaOutMsg->getStreamID()));
+        PVMF_JB_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::GenerateAndSendEOSCommand: ClientClock=%d",
+                                    clientClock32));
+        PVMF_JB_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::GenerateAndSendEOSCommand: EstServClock=%d",
+                                    estServClock32));
+        PVMF_JB_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::GenerateAndSendEOSCommand: MimeType=%s, StreamID=%d",
+                                           irMimeType.get_cstr(),
+                                           aMediaOutMsg->getStreamID()));
+        PVMF_JB_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::GenerateAndSendEOSCommand: ClientClock=%d",
+                                           clientClock32));
+        PVMF_JB_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::GenerateAndSendEOSCommand: EstServClock=%d",
+                                           estServClock32));
+        iEOSSent = true;
+        return PVMFSuccess;
+    }
+    else
+    {
+        PVMF_JB_LOGINFO((0, "PVMFJitterBufferNode::GenerateAndSendEOSCommand - EOS already sent..."));
+    }
+
+    return PVMFSuccess;
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferImpl::NotifyCanRetrievePacket()
+{
+    PVMF_JB_LOGDATATRAFFIC_OUT_E((0, "PVMFJitterBufferImpl::NotifyCanRetrievePacket Mime %s", irMimeType.get_cstr()));
+    iReportCanRetrievePacket = true;
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferImpl::CancelNotifyCanRetrievePacket()
+{
+    iReportCanRetrievePacket = false;
+}
+
+OSCL_EXPORT_REF bool PVMFJitterBufferImpl::IsDelayEstablished(uint32& aClockDiff)
+{
+    aClockDiff = iDurationInMilliSeconds;
+    if (GetState() == PVMF_JITTER_BUFFER_IN_TRANSITION)
+    {
+        PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Jitter Buffer In Transition - Preparing for Seek"));
+        irDelayEstablished = false;
+        irJitterDelayPercent = 0;
+        return irDelayEstablished;
+    }
+
+    uint32 timebase32 = 0;
+    uint32 estServerClock = 0;
+    uint32 clientClock = 0;
+    bool overflowFlag = false;
+
+    irEstimatedServerClock.GetCurrentTime32(estServerClock, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
+    irClientPlayBackClock.GetCurrentTime32(clientClock, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
+
+    PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Check - EstServClock=%d", estServerClock));
+    PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Check - ClientClock=%d", clientClock));
+
+    if (iEOSSignalled)
+    {
+        /*
+        * No check needed - We are past the clip time, just play out the last
+        * bit in the jitter buffer
+        */
+        PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Session Duration Expired"));
+        if (irDelayEstablished == false)
+        {
+            /*
+            * Coming out of rebuffering in case we had gone into
+            * rebuffering just before
+            */
+            irJitterDelayPercent = 100;
+            PVMFAsyncEvent jbEvent(PVMFInfoEvent, PVMFInfoDataReady, NULL, NULL);
+            ReportJBInfoEvent(jbEvent);
+        }
+        irDelayEstablished = true;
+    }
+    else
+    {
+        if (estServerClock < clientClock)
+        {
+            /* Could happen during repositioning */
+            if (irDelayEstablished == true)
+            {
+                aClockDiff = 0;
+                irDelayEstablished = false;
+                irJitterDelayPercent = 0;
+                /* Start timer */
+                PVMFAsyncEvent jbEvent(PVMFInfoEvent, PVMFInfoUnderflow, NULL, NULL);
+                ReportJBInfoEvent(jbEvent);
+                PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Check - EstServClock=%d",
+                                  Oscl_Int64_Utils::get_uint64_lower32(estServerClock)));
+                PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Check - ClientClock=%d",
+                                  Oscl_Int64_Utils::get_uint64_lower32(clientClock)));
+                PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Estimated Serv Clock Less Than ClientClock!!!!"));
+                PVMF_JB_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Check - EstServClock=%d",
+                                         Oscl_Int64_Utils::get_uint64_lower32(estServerClock)));
+                PVMF_JB_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Check - ClientClock=%d",
+                                         Oscl_Int64_Utils::get_uint64_lower32(clientClock)));
+                PVMF_JB_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::IsJitterBufferReady - Estimated Serv Clock Less Than ClientClock!!!!"));
+            }
+            return irDelayEstablished;
+        }
+        const uint32 diff32ms = estServerClock - clientClock;
+        aClockDiff = diff32ms;
+        if (diff32ms >= iDurationInMilliSeconds)
+        {
+            uint32 jbSize = iBufferAlloc->getBufferSize();
+            uint32 largestContiguousFreeBlockSize = iBufferAlloc->getLargestContiguousFreeBlockSize();
+            uint32 minPercentOccupancy = 100;
+            if ((largestContiguousFreeBlockSize*100 / jbSize) < minPercentOccupancy)
+            {
+                minPercentOccupancy = (uint32)(largestContiguousFreeBlockSize * 100 / jbSize);
+            }
+
+            if ((prevMinPercentOccupancy < MIN_PERCENT_OCCUPANCY_THRESHOLD) && (minPercentOccupancy < MIN_PERCENT_OCCUPANCY_THRESHOLD))
+            {
+                consecutiveLowBufferCount++;
+            }
+            else
+            {
+                consecutiveLowBufferCount = 0;
+            }
+
+            prevMinPercentOccupancy = minPercentOccupancy;
+            PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - minPercentOccupancy=%d, consecutiveLowBufferCount=%d",
+                              minPercentOccupancy,
+                              consecutiveLowBufferCount));
+
+
+            if ((diff32ms > JITTER_BUFFER_DURATION_MULTIPLIER_THRESHOLD*iDurationInMilliSeconds) && !iOverflowFlag && (consecutiveLowBufferCount > CONSECUTIVE_LOW_BUFFER_COUNT_THRESHOLD))
+            {
+                iOverflowFlag = true;
+                PVMFAsyncEvent jbEvent(PVMFInfoEvent, PVMFInfoOverflow, NULL, NULL);
+                ReportJBInfoEvent(jbEvent);
+                PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady reporting PVMFInfoSourceOverflow"));
+            }
+
+            if (irDelayEstablished == false)
+            {
+                if (CheckNumElements())
+                {
+                    PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Cancelling Jitter Buffer Duration Timer"));
+                    irDelayEstablished = true;
+                    irJitterDelayPercent = 100;
+                    PVMFAsyncEvent jbEvent(PVMFInfoEvent, PVMFInfoDataReady, NULL, NULL);
+                    ReportJBInfoEvent(jbEvent);
+                    PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Established - EstServClock=%d", estServerClock));
+                    PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Established - ClientClock=%d",  clientClock));
+                    PVMF_JB_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Established - EstServClock=%d",
+                                             estServerClock));
+                    PVMF_JB_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Established - ClientClock=%d",
+                                             clientClock));
+                }
+                else
+                {
+                    irJitterDelayPercent = 0;
+                }
+            }
+            else
+            {
+                irJitterDelayPercent = 100;
+            }
+        }
+        else
+        {
+            /*
+            * Update the buffering percent - to be used while sending buffering
+            * status events, in case we go into rebuffering or if we are in buffering
+            * state.
+            */
+            irJitterDelayPercent = ((diff32ms * 100) / iDurationInMilliSeconds);
+            if (irDelayEstablished == true)
+            {
+                if (diff32ms <= iRebufferingThresholdInMilliSeconds)
+                {
+                    /* Implies that we are going into rebuffering */
+                    if (!iEOSSignalled)
+                    {
+                        irDelayEstablished = false;
+                        PVMFAsyncEvent jbEvent(PVMFInfoEvent, PVMFInfoUnderflow, NULL, NULL);
+                        ReportJBInfoEvent(jbEvent);
+                        LOGCLIENTANDESTIMATEDSERVCLK_REBUFF;
+                    }
+                    /* we are past the end of the clip, no more rebuffering */
+                    irClientPlayBackClock.Pause();
+                }
+            }
+            if (irDelayEstablished == false && CheckNumElements() == false)
+            {
+                irJitterDelayPercent = 0;
+            }
+            PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady: Delay Percent = %d", irJitterDelayPercent));
+        }
+        /* if we are not rebuffering check for flow control */
+        PerformFlowControl(false);
+    }
+    return (irDelayEstablished);
+}
+
+OSCL_EXPORT_REF PVMFSharedMediaDataPtr PVMFJitterBufferImpl::RetrievePacketPayload()
+{
+    PVMF_JB_LOGINFO((0, "PVMFJitterBufferImpl::retrievePacket - JB Occup Stats - MimeType=%s, MaxSize=%d, CurrOccupany=%d", irMimeType.get_cstr(), iJitterBuffer->getArraySize(), iJitterBuffer->getNumElements()));
+
+    PVMFSharedMediaDataPtr elem = iJitterBuffer->retrieveElement();
+    if (elem.GetRep() != NULL)
+    {
+        /*
+         * Adjust TimeStamp - Goal is to provide a monotonically increasing
+         * timestamp.
+         */
+        PVMFTimestamp currTS = elem->getTimestamp();
+        DeterminePrevTimeStamp(elem->getSeqNum());
+        iMonotonicTimeStamp += (currTS - iPrevTSOut);
+        PVMFTimestamp adjustedTS =
+            (PVMFTimestamp)(Oscl_Int64_Utils::get_uint64_lower32(iMonotonicTimeStamp));
+        elem->setTimestamp(adjustedTS);
+
+        PVMFJitterBufferStats* jbStatsPtr = iJitterBuffer->getStatsPtr();
+        jbStatsPtr->maxTimeStampRetrievedWithoutRTPOffset = adjustedTS;
+
+        PVMF_JB_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferImpl::retrievePacket: MimeType=%s, TS=%d, SEQNUM= %d",
+                                    irMimeType.get_cstr(),
+                                    elem->getTimestamp(),
+                                    elem->getSeqNum()));
+        iPrevTSOut = currTS;
+    }
+    return elem;
+}
+
+OSCL_EXPORT_REF bool PVMFJitterBufferImpl::IsEmpty()
+{
+    uint32 elems = iJitterBuffer->getNumElements();
+    if (elems == 0)
+    {
+        return true;
+    }
+    return false;
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferImpl::SetEOS(bool aVal)
+{
+    PVMF_JB_LOG_RTCPDATATRAFFIC_OUT((0, "PVMFJitterBufferImpl::SetEOS Mime[%s]", irMimeType.get_cstr()));
+    PVMF_JB_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferImpl::SetEOS Mime[%s]", irMimeType.get_cstr()));
+
+    if (aVal && !iEOSSignalled)
+    {
+        LOGCLIENTANDESTIMATEDSERVCLK_DATAPATH_OUT;
+        iEOSSignalled = aVal;
+        iObserver->EndOfStreamSignalled(iObserverContext);
+    }
+
+    if (iReportCanRetrievePacket)
+    {
+        if (CanRetrievePacket())
+        {
+            iObserver->PacketReadyToBeRetrieved(iObserverContext);
+        }
+    }
+}
+
+OSCL_EXPORT_REF bool PVMFJitterBufferImpl::GetEOS()
+{
+    return iEOSSignalled;
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferImpl::SetPlayRange(int32 aStartTimeInMS, bool aPlayAfterSeek, bool aStopTimeAvailable, int32 aStopTimeInMS)
+{
+    iStartTimeInMS = aStartTimeInMS;
+    if (aStopTimeAvailable)
+    {
+        iPlayStopTimeAvailable	= aStopTimeAvailable;
+        iStopTimeInMS = aStopTimeInMS;
+    }
+
+    if (aPlayAfterSeek)
+    {
+        iEOSSignalled = false;
+        iEOSSent = false;
+    }
+}
+
+OSCL_EXPORT_REF bool PVMFJitterBufferImpl::CheckForHighWaterMark()
+{
+    PVMFJitterBufferStats stats = iJitterBuffer->getStats();
+    uint32 currOccupancy = stats.currentOccupancy;
+    uint32 maxOccupancy = stats.maxOccupancy;
+
+    PVMF_JB_LOGINFO((0, "PVMFJitterBufferImpl::CheckForHighWaterMark: CurrOccupancy = %d", currOccupancy));
+    if (currOccupancy >=
+            maxOccupancy*DEFAULT_JITTER_BUFFER_HIGH_WATER_MARK)
+    {
+        return true;
+    }
+    return false;
+}
+
+OSCL_EXPORT_REF bool PVMFJitterBufferImpl::CheckForLowWaterMark()
+{
+    PVMFJitterBufferStats stats = iJitterBuffer->getStats();
+    uint32 currOccupancy = stats.currentOccupancy;
+    uint32 maxOccupancy = stats.maxOccupancy;
+
+    PVMF_JB_LOGINFO((0, "PVMFJitterBufferImpl::CheckForLowWaterMark: CurrOccupancy = %d", currOccupancy));
+    if (currOccupancy <=
+            maxOccupancy*DEFAULT_JITTER_BUFFER_LOW_WATER_MARK)
+    {
+        return true;
+    }
+    return false;
+}
+
+OSCL_EXPORT_REF bool PVMFJitterBufferImpl::CheckNumElements()
+{
+    if (iJitterBuffer->getNumElements() > 0)
+    {
+        return true;
+    }
+    else
+    {
+        return false;
+    }
+}
+
+OSCL_EXPORT_REF bool PVMFJitterBufferImpl::addMediaCommand(PVMFSharedMediaMsgPtr& aMediaCmd)
+{
+    MediaCommandMsgHolder cmdHolder;
+    cmdHolder.iPreceedingMediaMsgSeqNumber = getJitterBufferStats().lastRegisteredSeqNum;
+    cmdHolder.iCmdMsg = aMediaCmd;
+    iMediaCmdVec.push_back(cmdHolder);
+    return true;
+}
+
+OSCL_EXPORT_REF bool PVMFJitterBufferImpl::GetPendingCommand(PVMFSharedMediaMsgPtr& aCmdMsg)
+{
+    /*
+     * Parse the command queue to see if it is time to send out
+     * any pending ones. if last retrieved seq num is same as
+     * the seq num of media msg that preceeds this cmd, then
+     * it is time to send this cmd out
+     */
+    PVMFJitterBufferStats stats = getJitterBufferStats();
+    Oscl_Vector<MediaCommandMsgHolder, OsclMemAllocator>::iterator it;
+    for (it = iMediaCmdVec.begin(); it != iMediaCmdVec.end(); it++)
+    {
+        if (it->iCmdMsg->getFormatID() == PVMF_MEDIA_CMD_BOS_FORMAT_ID)
+        {
+            aCmdMsg = it->iCmdMsg;
+            iMediaCmdVec.erase(it);
+            return true;
+        }
+        if (it->iPreceedingMediaMsgSeqNumber == stats.lastRetrievedSeqNum)
+        {
+            aCmdMsg = it->iCmdMsg;
+            iMediaCmdVec.erase(it);
+            return true;
+        }
+    }
+    return false;
+}
+
+OSCL_EXPORT_REF bool PVMFJitterBufferImpl::HasPendingCommand()
+{
+    /*
+     * Parse the command queue to see if it is time to send out
+     * any pending ones. if last retrieved seq num is same as
+     * the seq num of media msg that preceeds this cmd, then
+     * it is time to send this cmd out
+     */
+    PVMFJitterBufferStats stats = getJitterBufferStats();
+    Oscl_Vector<MediaCommandMsgHolder, OsclMemAllocator>::iterator it;
+    for (it = iMediaCmdVec.begin(); it != iMediaCmdVec.end(); it++)
+    {
+        if (it->iCmdMsg->getFormatID() == PVMF_MEDIA_CMD_BOS_FORMAT_ID)
+        {
+            return true;
+        }
+        if (it->iPreceedingMediaMsgSeqNumber == stats.lastRetrievedSeqNum)
+        {
+            return true;
+        }
+    }
+    return false;
+}
+
+
+OSCL_EXPORT_REF void PVMFJitterBufferImpl::SetAdjustedTSInMS(PVMFTimestamp aAdjustedTSInMS)
+{
+    // convert adjustedTS to RTP Timescale
+    uint32 in_wrap_count = 0;
+    MediaClockConverter clockConvertor;
+    clockConvertor.set_timescale(1000);
+    clockConvertor.set_clock(aAdjustedTSInMS, in_wrap_count);
+    uint32 adjustedTSInRTPTS = clockConvertor.get_converted_ts(iRTPTimeScale);
+    iMonotonicTimeStamp = adjustedTSInRTPTS;
+    PVMF_JB_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferImpl::SetAdjustedTS(): adjustedTSInRTPTS=%d, iMonotonicTS=%d", adjustedTSInRTPTS, Oscl_Int64_Utils::get_uint64_lower32(iMonotonicTimeStamp)));
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferImpl::SetBroadCastSession()
+{
+    iBroadCastSession = true;
+}
+
+OSCL_EXPORT_REF PVMFRTPInfoParams& PVMFJitterBufferImpl::GetRTPInfoParams()
+{
+    return *iRTPInfoParamsVec.end();
+}
+
+OSCL_EXPORT_REF bool PVMFJitterBufferImpl::GetRTPTimeStampOffset(uint32& aTimeStampOffset)
+{
+    if (seqNumLock)
+        aTimeStampOffset = seqLockTimeStamp;
+
+    return seqNumLock;
+}
+
+OSCL_EXPORT_REF bool PVMFJitterBufferImpl::NotifyFreeSpaceAvailable()
+{
+    if (iMediaDataGroupAlloc)
+    {
+        iMediaDataGroupAlloc->notifyfreechunkavailable(*this);
+        return true;
+    }
+    return false;
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferImpl::freechunkavailable(OsclAny*)
+{
+    if (iObserver)
+    {
+        iObserver->JitterBufferFreeSpaceAvailable(iObserverContext);
+    }
+}
+
+
+
+OSCL_EXPORT_REF bool PVMFJitterBufferImpl::CheckSpaceAvailability(PVMFSharedMediaMsgPtr& aMsg)
+{
+    if (iJitterBuffer)
+    {
+        return (iJitterBuffer->CheckSpaceAvailability(GetNumOfPackets(aMsg)));
+    }
+    return false;
+}
+
+OSCL_EXPORT_REF bool PVMFJitterBufferImpl::CheckSpaceAvailability()
+{
+    return (iJitterBuffer->CheckSpaceAvailability());
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferImpl::setSSRC(uint32 aSSRC)
+{
+    PVMF_JB_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferImpl::setSSRC: Setting SSRCFromSetUpResponse - MimeType=%s, SSRC=%d", irMimeType.get_cstr(), aSSRC));
+    oSSRCFromSetUpResponseAvailable = true;
+    SSRCFromSetUpResponse = aSSRC;
+    SSRCLock = aSSRC;
+}
+
+OSCL_EXPORT_REF uint32 PVMFJitterBufferImpl::GetSSRC() const
+{
+    return SSRCLock;
+}
+
+/**
+*/
+//virtual bool CancelServerClockNotificationUpdates();
+
+
+OSCL_EXPORT_REF void PVMFJitterBufferImpl::SetJitterBufferMemPoolInfo(uint32 aSize,
+        uint32 aResizeSize,
+        uint32 aMaxNumResizes,
+        uint32 aExpectedNumberOfBlocksPerBuffer)
+{
+    iJitterBufferMemPoolInfo.Init(aSize, aResizeSize, aMaxNumResizes, aExpectedNumberOfBlocksPerBuffer);
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferImpl::GetJitterBufferMemPoolInfo(uint32& aSize, uint32& aResizeSize, uint32& aMaxNumResizes, uint32& aExpectedNumberOfBlocksPerBuffer) const
+{
+    aSize = iJitterBufferMemPoolInfo.iSize;
+    aResizeSize = iJitterBufferMemPoolInfo.iResizeSize;
+    aMaxNumResizes = iJitterBufferMemPoolInfo.iMaxNumResizes;
+    aExpectedNumberOfBlocksPerBuffer = iJitterBufferMemPoolInfo.iExpectedNumberOfBlocksPerBuffer;
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferImpl::SetTrackConfig(OsclRefCounterMemFrag& aConfig)
+{
+    iTrackConfig = aConfig;
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferImpl::SetTimeScale(uint32 aTimeScale)
+{
+    iTimeScale = aTimeScale;
+}
+
+OSCL_EXPORT_REF uint32 PVMFJitterBufferImpl::GetTimeScale() const
+{
+    return iTimeScale;
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferImpl::SetMediaClockConverter(MediaClockConverter* aConverter)
+{
+    ipMediaClockConverter = aConverter;
+}
+
+OSCL_EXPORT_REF PVMFStatus PVMFJitterBufferImpl::PerformFlowControl(bool aIncomingMedia)
+{
+    OSCL_UNUSED_ARG(aIncomingMedia);
+    return PVMFSuccess;
+}
+
+
+OSCL_EXPORT_REF void PVMFJitterBufferImpl::LogClientAndEstimatedServerClock(PVLogger*& aLogger)
+{
+    uint32 timebase32 = 0;
+    uint32 estServerClock = 0;
+    uint32 clientClock = 0;
+    bool overflowFlag = false;
+    irEstimatedServerClock.GetCurrentTime32(estServerClock, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
+    irClientPlayBackClock.GetCurrentTime32(clientClock, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
+    PVLOGGER_LOGMSG(PVLOGMSG_INST_REL, aLogger, PVLOGMSG_INFO, (0, "The value of estimated server clock is [%d] and client clock is [%d]", estServerClock, clientClock));
+}
+
+OSCL_EXPORT_REF uint32 PVMFJitterBufferImpl::GetNumOfPackets(PVMFSharedMediaMsgPtr& aMsg) const
+{
+    if (iOnePacketPerFragment)
+    {
+        PVMFSharedMediaDataPtr inputDataPacket;
+        convertToPVMFMediaData(inputDataPacket, aMsg);
+        return inputDataPacket->getNumFragments();
+    }
+    else
+        return 1;
+}
+
+OSCL_EXPORT_REF void PVMFJitterBufferImpl::ReportJBInfoEvent(PVMFAsyncEvent& aEvent)
+{
+    iObserver->ProcessJBInfoEvent(aEvent);
+}
+
+void PVMFJitterBufferImpl::HandleEvent_JitterBufferBufferingDurationComplete()
+{
+    PVMF_JB_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::HandleEvent_JitterBufferBufferingDurationComplete In"));
+
+    if (!irDelayEstablished)
+    {
+        uint32 aClockDiff = 0;
+        bool delayEstablished = IsDelayEstablished(aClockDiff);//To update delay percent
+        if (iReportCanRetrievePacket && delayEstablished)
+        {
+            //Check if delay is established
+            //There's no hole for for min threshold time
+            if (CanRetrievePacket())
+            {
+                iObserver->PacketReadyToBeRetrieved(iObserverContext);
+                iReportCanRetrievePacket = false;
+            }
+        }
+        else
+        {
+            RequestEventCallBack(JB_BUFFERING_DURATION_COMPLETE);
+        }
+    }
+
+    PVMF_JB_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::HandleEvent_JitterBufferBufferingDurationComplete Out"));
+}
diff --git a/nodes/streaming/jitterbuffernode/jitterbuffer/common/src/pvmf_rtcp_proto_impl.cpp b/nodes/streaming/jitterbuffernode/jitterbuffer/common/src/pvmf_rtcp_proto_impl.cpp
new file mode 100644
index 0000000..452854d
--- /dev/null
+++ b/nodes/streaming/jitterbuffernode/jitterbuffer/common/src/pvmf_rtcp_proto_impl.cpp
@@ -0,0 +1,972 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#ifndef PVMF_RTCP_PROTO_IMPL_H_INCLUDED
+#include "pvmf_rtcp_proto_impl.h"
+#endif
+
+#ifndef RTCP_DECODER_H
+#include "rtcp_decoder.h"
+#endif
+#ifndef RTCP_ENCODER_H
+#include "rtcp_encoder.h"
+#endif
+
+#ifndef OSCL_EXCLUSIVE_PTR_H_INCLUDED
+#include "oscl_exclusive_ptr.h"
+#endif
+
+#ifndef PVMF_SM_NODE_EVENTS_H_INCLUDED
+#include "pvmf_sm_node_events.h"
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+//PVRTCPChannelController Implementation
+///////////////////////////////////////////////////////////////////////////////
+PVRTCPChannelController* PVRTCPChannelController::New(PVRTCPChannelControllerObserver* aObserver, PVMFJitterBuffer& aRTPJitterBuffer, PVMFPortInterface* aFeedbackPort, PVMFMediaClock& aClientPlaybackClock, PVMFMediaClock& aRTCPClock)
+{
+    PVRTCPChannelController* rtcpChannelController = NULL;
+    int32 err = OsclErrNone;
+    OSCL_TRY(err, rtcpChannelController = OSCL_NEW(PVRTCPChannelController, (aObserver, aRTPJitterBuffer, aFeedbackPort, aClientPlaybackClock, aRTCPClock));
+             rtcpChannelController->Construct(););
+    if (err != OsclErrNone && rtcpChannelController)
+    {
+        OSCL_DELETE(rtcpChannelController);
+        rtcpChannelController = NULL;
+    }
+    return rtcpChannelController;
+}
+
+PVRTCPChannelController::PVRTCPChannelController(PVRTCPChannelControllerObserver* aObserver, PVMFJitterBuffer& aRTPJitterBuffer, PVMFPortInterface* aFeedbackPort, PVMFMediaClock& aClientPlaybackClock, PVMFMediaClock& aRTCPClock)
+        : ipObserver(aObserver)
+        , irRTPDataJitterBuffer(aRTPJitterBuffer)
+        , ipFeedbackPort(aFeedbackPort)
+        , irClientPlayBackClock(aClientPlaybackClock)
+        , irRTCPClock(aRTCPClock)
+{
+    ipRTCPDataPathLoggerIn = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffer.rtcp.in");
+    ipRTCPDataPathLoggerOut = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffer.rtcp.out");
+
+    ipRTCPTimer	=	NULL;
+    iRandGen.Seed(RTCP_RAND_SEED);
+    ResetParams();
+}
+
+void PVRTCPChannelController::ResetParams(bool aMemoryCleanUp)
+{
+    OSCL_UNUSED_ARG(aMemoryCleanUp);
+    iRTPChannelRateAdaptationInfo.iRateAdaptation = false;
+    iRTPChannelRateAdaptationInfo.iRateAdaptationFeedBackFrequency = 0;
+    iRTPChannelRateAdaptationInfo.iRateAdaptationRTCPRRCount = 0;
+    iRTPChannelRateAdaptationInfo.iRateAdaptationFreeBufferSpaceInBytes = 0;
+    iRTCPStats.Reset();
+    iNumSenders = 0;
+    iRR = 0;
+    iRS = 0;
+    iRtcpBwConfigured = false;
+    iInitialRTCPIntervalComputation = false;
+    iRTCPIntervalInMicroSeconds = DEFAULT_RTCP_INTERVAL_USEC;
+    iInitialRTCPPacket = true;
+    ipMediaClockConverter	=	NULL;
+}
+
+void PVRTCPChannelController::Construct()
+{
+    int32 err = OsclErrNone;
+    OSCL_TRY(err, ipRTCPTimer = OSCL_NEW(PvmfRtcpTimer, (this)););
+    if (err != OsclErrNone || !ipRTCPTimer)
+    {
+        OSCL_LEAVE(PVMFErrNoResources);
+    }
+
+}
+
+PVRTCPChannelController::~PVRTCPChannelController()
+{
+    Reset();
+    if (ipRTCPTimer)
+        OSCL_DELETE(ipRTCPTimer);
+}
+void PVRTCPChannelController::StartRTCPMessageExchange()
+{
+    //noop
+    iRTCPIntervalInMicroSeconds = CalcRtcpInterval();
+    ipRTCPTimer->setRTCPInterval(iRTCPIntervalInMicroSeconds);
+    ipRTCPTimer->Start();
+}
+
+void PVRTCPChannelController::PauseRTCPMessageExchange()
+{
+    if (ipRTCPTimer)
+        ipRTCPTimer->Cancel();
+}
+
+void PVRTCPChannelController::StopRTCPMessageExchange()
+{
+    if (ipRTCPTimer)
+        ipRTCPTimer->Cancel();
+}
+
+void PVRTCPChannelController::Reset()
+{
+    if (ipRTCPTimer)
+        ipRTCPTimer->Stop();
+    ResetParams(true);
+}
+
+void PVRTCPChannelController::SetRateAdaptation(bool aRateAdaptation, uint32 aRateAdaptationFeedBackFrequency, uint32 aRateAdaptationFreeBufferSpaceInBytes)
+{
+    iRTPChannelRateAdaptationInfo.iRateAdaptation = aRateAdaptation;
+    iRTPChannelRateAdaptationInfo.iRateAdaptationFeedBackFrequency = aRateAdaptationFeedBackFrequency;
+    iRTPChannelRateAdaptationInfo.iRateAdaptationFreeBufferSpaceInBytes = aRateAdaptationFreeBufferSpaceInBytes;
+}
+
+void PVRTCPChannelController::SetRTCPIntervalInMicroSecs(uint32 aRTCPInterval)
+{
+    iRTCPIntervalInMicroSeconds = aRTCPInterval;
+}
+
+PVMFStatus PVRTCPChannelController::ProcessRTCPReport(PVMFSharedMediaMsgPtr& aMsg)
+{
+    RTCP_Decoder rtcpDec;
+    RTCP_SR rtcpSR;
+    RTCP_BYE rtcpBye;
+    RTCP_Decoder::Error_t retval;
+    int32 max_array_size = MAX_RTCP_SOURCES;
+    RTCPPacketType array_of_packet_types[MAX_RTCP_SOURCES];
+    OsclMemoryFragment array_of_packets[MAX_RTCP_SOURCES];
+    int32 filled_size = 0;
+
+    PVMFSharedMediaDataPtr rtcpDataIn;
+    convertToPVMFMediaData(rtcpDataIn, aMsg);
+
+    const uint32 numFrags = rtcpDataIn->getNumFragments();
+
+    //Process each RTCP packet.
+    //Typically, only one is received at a time.
+    for (uint32 i = 0; i < numFrags; i++)
+    {
+        OsclRefCounterMemFrag memfrag;
+
+        //Get the next memory fragment from the media message.
+        if (rtcpDataIn->getMediaFragment(i, memfrag) == false)
+        {
+            return PVMFFailure;
+        }
+
+        //Get the pointer to the packet.
+        OsclMemoryFragment receivedMsg = memfrag.getMemFrag();
+
+        /* Find out what type of RTCP packet we have */
+        //This populates the variables "filled_size", "array_of_packet_types", and "array_of_packets"
+        //by breaking up compound RTCP packets into individual reports.
+        rtcpDec.scan_compound_packet(receivedMsg,
+                                     max_array_size,
+                                     filled_size,
+                                     array_of_packet_types,
+                                     array_of_packets);
+
+        // update packet size averages - we treat the compound packet
+        // as a single packet
+        iRTCPStats.avg_rtcp_compound_pkt_size = OSCL_STATIC_CAST(float, (receivedMsg.len + 15.0 * iRTCPStats.avg_rtcp_compound_pkt_size) / 16.0);
+
+        //Process each individual report.
+        for (int32 ii = 0; ii < filled_size; ii++)
+        {
+            /* Use the appropriate decoder */
+
+            //If the RTCP type indicates a Sender Report...
+            if (SR_RTCP_PACKET == array_of_packet_types[ii])
+            {
+                PVMF_JB_LOG_RTCPDATATRAFFIC_IN((0, "PVMFJitterBufferNode::ProcessIncomingRTCPReport - Sender Report"));
+                //Decode the Sender Report.
+                retval = rtcpDec.DecodeSR(array_of_packets[ii], rtcpSR);
+                if (RTCP_Decoder::FAIL == retval)
+                {
+                    return PVMFFailure;
+                }
+
+                uint32 tsOffset = 0;
+                if (irRTPDataJitterBuffer.GetRTPTimeStampOffset(tsOffset))
+                {
+                    if (rtcpSR.senderSSRC !=  irRTPDataJitterBuffer.GetSSRC())
+                    {
+                        PVMF_JB_LOG_RTCPDATATRAFFIC_IN((0, "PVRTCPChannelController::ProcessRTCPReport - RTCP ssrc %u JB SSRC %u RTCP report is invalid (from some other session), ignoring it", rtcpSR.senderSSRC, irRTPDataJitterBuffer.GetSSRC()));
+                        return PVMFSuccess;
+                    }
+                }
+
+                iRTCPStats.iLastSenderReportSSRC = rtcpSR.senderSSRC;
+
+                iRTCPStats.lastSenderReportTS =
+                    (rtcpSR.NTP_timestamp_high << 16) |
+                    ((rtcpSR.NTP_timestamp_low >> 16) & 0x0000ffff);
+
+                /*
+                 * Get RTCP Recv Time in milliseconds
+                 */
+                uint32 srRecvTime;
+                bool overflowFlag = false;
+                irRTCPClock.GetCurrentTime32(srRecvTime, overflowFlag, PVMF_MEDIA_CLOCK_MSEC);
+
+                iRTCPStats.lastSenderReportRecvTime = srRecvTime;
+
+                //Save the NTP and RTP timestamps for later calculations...
+                iRTCPStats.lastSenderReportNTP =
+                    (((uint64)rtcpSR.NTP_timestamp_high) << 32) + (uint64)rtcpSR.NTP_timestamp_low;
+                iRTCPStats.lastSenderReportRTP = rtcpSR.RTP_timestamp;
+                PVMF_JB_LOG_RTCPDATATRAFFIC_IN((0, "PVMFJitterBufferNode::ProcessIncomingRTCPReport - Sender Report TS iRTCPStats.lastSenderReportRTP %u, iRTCPStats.iLastSenderReportSSRC %u ", rtcpSR.RTP_timestamp, iRTCPStats.iLastSenderReportSSRC));
+                PVMF_JB_LOG_RTCPDATATRAFFIC_IN((0, "PVMFJitterBufferNode::ProcessIncomingRTCPReport - Sender Report NPT rtcpSR.NTP_timestamp_high %u rtcpSR.NTP_timestamp_low %u SR Ts %u ", rtcpSR.NTP_timestamp_high, rtcpSR.NTP_timestamp_low , iRTCPStats.lastSenderReportTS));
+
+                ipObserver->RTCPSRReveived(this);
+            }
+
+            //If the RTCP type is BYE, set the end-of-stream flag.
+            if (BYE_RTCP_PACKET == array_of_packet_types[ii])
+            {
+                PVMF_JB_LOG_RTCPDATATRAFFIC_IN_E((0, "PVMFJitterBufferNode::ProcessIncomingRTCPReport-  RTCP_BYE_RECVD: Mime=%s", irRTPDataJitterBuffer.GetMimeType()));
+                retval = rtcpDec.DecodeBYE(array_of_packets[ii], rtcpBye);
+                if (RTCP_Decoder::FAIL == retval)
+                {
+                    return PVMFFailure;
+                }
+                /* The packet is a RTCP BYE, set the end of stream flag */
+                else if (retval == RTCP_Decoder::RTCP_SUCCESS)
+                {
+                    iRTCPStats.oRTCPByeRecvd = true;
+                    ipObserver->RTCPByeReceived(this);
+                }
+            }
+
+            //All other RTCP types (Receiver Reports) are ignored.
+            iRTCPStats.oSRRecvd = true;
+        }
+    }
+    return PVMFSuccess;
+}
+
+uint32 PVRTCPChannelController::CalcRtcpInterval()
+{
+    float interval;
+
+#if RTCP_FIXED_INTERVAL_MODE
+    interval = DEFAULT_RTCP_INTERVAL_SEC;
+#else
+    float rtcp_min_time = iInitialRTCPIntervalComputation ? (float)DEFAULT_RTCP_INTERVAL_SEC / 2.0 :
+                          (float)DEFAULT_RTCP_INTERVAL_SEC;
+
+    if (iRtcpBwConfigured && (iRR > 0))
+    {
+        float divisor = (float)iRR;
+        if (iRR > iRS)
+        {
+            divisor = (float)iRS;
+        }
+        interval = iRTCPStats.avg_rtcp_compound_pkt_size * 8 *
+                   ((float)iNumSenders + 1) / divisor;
+
+        if (interval < rtcp_min_time)
+        {
+            interval = rtcp_min_time;
+        }
+    }
+    else
+    {
+        interval = rtcp_min_time;
+    }
+#endif
+
+    // generate a random number on [0, 1000)
+    uint32 n = iRandGen.Rand() % 1000;
+
+    // map the number onto the range [0.5, 1.5)
+    float window = OSCL_STATIC_CAST(float, (0.5 + ((float)n) / 1000.0));
+
+    // generate the actual interval, in seconds
+    float interval_scaled = OSCL_STATIC_CAST(float, interval * window / 1.21828);
+
+    // return the interval in microseconds
+    return (uint32)(interval_scaled * 1000000);
+}
+
+void PVRTCPChannelController::RtcpTimerEvent()
+{
+    if (iRTCPStats.oRTCPByeRecvd == false)
+    {
+        // timer reconsideration
+        uint32 timer = CalcRtcpInterval();
+        PVMF_JB_LOG_RTCPDATATRAFFIC_IN((0, "%x timer %d iRTCPIntervalInMicroSeconds %d", this, timer, iRTCPIntervalInMicroSeconds));
+        if (timer > iRTCPIntervalInMicroSeconds)
+        {
+            ipRTCPTimer->setRTCPInterval(timer - iRTCPIntervalInMicroSeconds);
+            ipRTCPTimer->Start();
+            iRTCPIntervalInMicroSeconds = timer;
+            return;
+        }
+        else
+        {
+            GenerateRTCPRR();
+        }
+    }
+}
+
+PVMFStatus PVRTCPChannelController::GenerateRTCPRR()
+{
+    if (ipFeedbackPort->IsOutgoingQueueBusy() == false)
+    {
+        ComposeFeedBackPacket();
+    }
+
+    /* Reschedule the RTCP timer for the next interval */
+    iRTCPIntervalInMicroSeconds = CalcRtcpInterval();
+    PVMF_JB_LOG_RTCPDATATRAFFIC_IN((0, "%x GeneratedRTCPRR", this));
+    ipRTCPTimer->setRTCPInterval(iRTCPIntervalInMicroSeconds);
+    ipRTCPTimer->Start();
+    return PVMFSuccess;
+}
+
+PVMFStatus PVRTCPChannelController::ComposeFeedBackPacket()
+{
+    uint32 senderSSRC;
+    RTCP_Encoder rtcpEncode;
+    RTCP_ReportBlock *reportBlock = NULL;
+    RTCP_RR *pRR = NULL;
+    OsclExclusivePtr<RTCP_RR> rtcpRRAutoPtr;
+
+    pRR = OSCL_NEW(RTCP_RR, (1));
+
+    if (NULL == pRR)
+    {
+        return PVMFErrNoMemory;
+    }
+    rtcpRRAutoPtr.set(pRR);
+
+    reportBlock = pRR->get_report_block(0);
+    if (NULL == reportBlock)
+    {
+        return PVMFErrNoMemory;
+    }
+
+    /* Get Jitter Buffer Stats from RTP port */
+    PVMFJitterBufferStats jbStats =
+        irRTPDataJitterBuffer.getJitterBufferStats();
+
+    /* Get InterArrivalJitter from RTP port */
+    uint32 interArrivalJitter =
+        irRTPDataJitterBuffer.getInterArrivalJitter();
+
+    uint32 sourceSSRC32 = jbStats.ssrc;
+    senderSSRC = (sourceSSRC32 >> 10) | (sourceSSRC32 << 22);
+
+    pRR->senderSSRC = senderSSRC;
+    rtcpEncode.SetSSRC(senderSSRC);
+    reportBlock->sourceSSRC = sourceSSRC32;
+
+    /* Compute packet loss fraction */
+    if (iRTCPStats.maxSeqNumRecievedUptoThisRR == 0)
+    {
+        iRTCPStats.maxSeqNumRecievedUptoThisRR =
+            jbStats.seqNumBase;
+    }
+    if (jbStats.maxSeqNumReceived -
+            iRTCPStats.maxSeqNumRecievedUptoThisRR)
+    {
+        reportBlock->fractionLost =
+            (int8)(((jbStats.totalPacketsLost - iRTCPStats.packetLossUptoThisRR) * 256) /
+                   (jbStats.maxSeqNumReceived - iRTCPStats.maxSeqNumRecievedUptoThisRR));
+    }
+    else
+    {
+        reportBlock->fractionLost = 0;
+    }
+
+    reportBlock->cumulativeNumberOfPacketsLost = jbStats.totalPacketsLost;
+    reportBlock->highestSequenceNumberReceived = jbStats.maxSeqNumReceived;
+    reportBlock->interarrivalJitter = interArrivalJitter;
+    reportBlock->lastSR = iRTCPStats.lastSenderReportTS;
+
+    if (iRTCPStats.oSRRecvd)
+    {
+        uint32 currRRGenTime;
+        bool overflowFlag = false;
+
+        irRTCPClock.GetCurrentTime32(currRRGenTime, overflowFlag, PVMF_MEDIA_CLOCK_MSEC);
+
+        uint32 lastSenderReportRecvTime = (uint32)
+                                          iRTCPStats.lastSenderReportRecvTime;
+
+        uint32 delaySinceLastSR64 =
+            (currRRGenTime - lastSenderReportRecvTime);
+
+        uint32 delaySinceLastSR32 = delaySinceLastSR64;
+
+        reportBlock->delaySinceLastSR = (delaySinceLastSR32 << 16) / 1000;
+
+        iRTCPStats.lastRRGenTime = currRRGenTime;
+    }
+
+    /* Update variables for the next RR cycle */
+    iRTCPStats.maxSeqNumRecievedUptoThisRR =
+        jbStats.maxSeqNumReceived;
+    iRTCPStats.packetLossUptoThisRR =
+        jbStats.totalPacketsLost;
+
+
+    PVMFSharedMediaDataPtr rtcpOut;
+    OsclSharedPtr<PVMFMediaDataImpl> mediaDataImpl;
+    PVMFRTCPMemPool* rtcpBufAlloc = ipRTCPTimer->getRTCPBuffAlloc();
+    if (!rtcpBufAlloc->ipMediaDataMemPool)
+    {
+        return PVMFErrNoMemory;
+    }
+    int32 err;
+
+    OSCL_TRY(err,
+             mediaDataImpl = rtcpBufAlloc->GetMediaDataImpl(MAX_RTCP_BLOCK_SIZE);
+             rtcpOut = PVMFMediaData::createMediaData(mediaDataImpl,
+                       (rtcpBufAlloc->ipMediaDataMemPool));
+            );
+
+    if (err != OsclErrNone)
+    {
+        return PVMFErrNoMemory;
+    }
+
+    /* Retrieve memory fragment to write to */
+    OsclRefCounterMemFrag refCtrMemFragOut;
+    rtcpOut->getMediaFragment(0, refCtrMemFragOut);
+
+    OsclMemoryFragment memFrag = refCtrMemFragOut.getMemFrag();
+    memFrag.len = MAX_RTCP_BLOCK_SIZE;
+
+    RTCP_APP *appPtr = NULL;
+    RTCP_APP App;
+
+    PVMF_JB_LOG_RTCPDATATRAFFIC_OUT((0, "RTCP_PKT: Mime=%s, MaxSNRecvd=%d, MaxTSRecvd=%d, MaxSNRet=%d, MaxTSRet=%d", irRTPDataJitterBuffer.GetMimeType(), jbStats.maxSeqNumReceived, jbStats.maxTimeStampRegistered, jbStats.lastRetrievedSeqNum, jbStats.maxTimeStampRetrieved));
+    /*
+     * If Rate Adaptation is enabled and we have received some RTP packets, then send NADU APP packet,
+     * if frequency criteria is met
+     */
+    if (iRTPChannelRateAdaptationInfo.iRateAdaptation && (jbStats.totalNumPacketsReceived > 0))
+    {
+        iRTPChannelRateAdaptationInfo.iRateAdaptationRTCPRRCount++;
+        if (iRTPChannelRateAdaptationInfo.iRateAdaptationRTCPRRCount ==
+                iRTPChannelRateAdaptationInfo.iRateAdaptationFeedBackFrequency)
+        {
+            oscl_memcpy(App.type, PSS0_APP_RTCP_NAME, oscl_strlen(PSS0_APP_RTCP_NAME));
+            App.ssrc = senderSSRC;
+            App.subtype = RTCP_NADU_APP_SUBTYPE;
+            App.pss0_app_data.sourcessrc = sourceSSRC32;
+            PVMFTimestamp converted_ts = 0;
+            //set playoutdelay to 0xffff by default, if JB is empty we will use this
+            uint32 diff32 = RTCP_NADU_APP_DEFAULT_PLAYOUT_DELAY;
+            uint32 clientClock32 = 0;
+            uint32 timebase32 = 0;
+            bool overflowFlag = false;
+
+            irClientPlayBackClock.GetCurrentTime32(clientClock32, overflowFlag,
+                                                   PVMF_MEDIA_CLOCK_MSEC,
+                                                   timebase32);
+            PVMFTimestamp tsOfNextPacketToBeDecoded = jbStats.maxTimeStampRetrievedWithoutRTPOffset;
+            if (jbStats.currentOccupancy > 0)
+            {
+                tsOfNextPacketToBeDecoded =
+                    irRTPDataJitterBuffer.peekNextElementTimeStamp();
+
+                uint32 in_wrap_count = 0;
+                /*
+                 * Convert Time stamp to milliseconds
+                 */
+                ipMediaClockConverter->set_clock(tsOfNextPacketToBeDecoded, in_wrap_count);
+                converted_ts =
+                    ipMediaClockConverter->get_converted_ts(1000);
+
+                //ts should be ahead of clock
+                //if not we are falling behind on one track, so set playout delay to zero
+                diff32 = 0;
+                bool clkEarly =
+                    PVTimeComparisonUtils::IsEarlier(clientClock32,
+                                                     converted_ts,
+                                                     diff32);
+                if (clkEarly == false)
+                {
+                    diff32 = 0;
+                }
+            }
+            else	//If Jb is empty we have some data in the pipeline that is sent out to the peer node.
+            {
+                diff32 = tsOfNextPacketToBeDecoded - clientClock32;
+            }
+
+            PVMF_JB_LOG_RTCPDATATRAFFIC_OUT((0, "RTCP_PKT: Mime=%s, RTP_TS=%d, C_CLOCK=%d, DIFF=%d", irRTPDataJitterBuffer.GetMimeType(), converted_ts, clientClock32, diff32));
+            App.pss0_app_data.playoutdelayinms = (uint16)diff32;
+            App.pss0_app_data.nsn = OSCL_STATIC_CAST(uint16, (jbStats.lastRetrievedSeqNum + 1));
+            if (0 == jbStats.lastRetrievedSeqNum)
+            {
+                App.pss0_app_data.nsn = OSCL_STATIC_CAST(uint16, jbStats.seqNumBase);
+            }
+            App.pss0_app_data.nun = RTCP_NADU_APP_DEFAULT_NUN;
+
+            uint32 fbsInBytes = 0;
+            if (jbStats.packetSizeInBytesLeftInBuffer < iRTPChannelRateAdaptationInfo.iRateAdaptationFreeBufferSpaceInBytes)
+            {
+                fbsInBytes =
+                    (iRTPChannelRateAdaptationInfo.iRateAdaptationFreeBufferSpaceInBytes - jbStats.packetSizeInBytesLeftInBuffer);
+            }
+            PVMF_JB_LOG_RTCPDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::ComposeAndSendFeedBackPacket: Total=%d, Occ=%d, freebufferspace = %d",
+                                             iRTPChannelRateAdaptationInfo.iRateAdaptationFreeBufferSpaceInBytes,
+                                             jbStats.packetSizeInBytesLeftInBuffer,
+                                             fbsInBytes));
+            App.pss0_app_data.freebufferspace = OSCL_STATIC_CAST(uint16, (fbsInBytes) / 64);
+            iRTPChannelRateAdaptationInfo.iRateAdaptationRTCPRRCount = 0;
+            appPtr = &App;
+            PVMF_JB_LOG_RTCPDATATRAFFIC_OUT((0, "NADU_PKT: Mime=%s, PDelay=%d, FBS_BYTES=%d, FBS=%d, NSN=%d",
+                                             irRTPDataJitterBuffer.GetMimeType(),
+                                             App.pss0_app_data.playoutdelayinms,
+                                             fbsInBytes,
+                                             App.pss0_app_data.freebufferspace,
+                                             App.pss0_app_data.nsn));
+        }
+    }
+    if (rtcpEncode.EncodeCompoundRR(*pRR,
+                                    memFrag,
+                                    appPtr) != RTCP_Encoder::RTCP_SUCCESS)
+    {
+        PVMF_JB_LOG_RTCPDATATRAFFIC_OUT((0, "0x%x PVMFJitterBufferNode::ComposeAndSendFeedBackPacket: EncodeCompoundRR failed", this));
+        return PVMFFailure;
+    }
+    rtcpOut->setMediaFragFilledLen(0, memFrag.len);
+
+
+    // update average packet length - treat compound packets as single
+    iRTCPStats.avg_rtcp_compound_pkt_size = OSCL_STATIC_CAST(float, (memFrag.len + 15.0 * iRTCPStats.avg_rtcp_compound_pkt_size) / 16.0);
+
+
+
+    PVMFSharedMediaMsgPtr rtcpMsg;
+    convertToPVMFMediaMsg(rtcpMsg, rtcpOut);
+
+    ipObserver->RTCPRRReadyToSend(ipFeedbackPort, rtcpMsg);
+
+    iInitialRTCPPacket = false;
+    return PVMFSuccess;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//PVRTCPProtoImplementor Implementation
+///////////////////////////////////////////////////////////////////////////////
+OSCL_EXPORT_REF PVRTCPProtoImplementor* PVRTCPProtoImplementor::New(PVMFMediaClock& aClientPlayBackClock, PVMFMediaClock& aRTCPClock, PVRTCPProtoImplementorObserver* aEventNotifier, bool aBroadcastSession)
+{
+    int32 err = OsclErrNone;
+    PVRTCPProtoImplementor*	pRtcpProtoImplementor = NULL;
+    OSCL_TRY(err, pRtcpProtoImplementor = OSCL_NEW(PVRTCPProtoImplementor, (aClientPlayBackClock, aRTCPClock, aEventNotifier, aBroadcastSession));
+             if (pRtcpProtoImplementor)
+{
+    pRtcpProtoImplementor->Construct();
+    }
+            );
+
+    if (OsclErrNone != err && pRtcpProtoImplementor)
+    {
+        if (pRtcpProtoImplementor)
+            OSCL_DELETE(pRtcpProtoImplementor);
+
+        pRtcpProtoImplementor = NULL;
+    }
+
+    return pRtcpProtoImplementor;
+}
+
+PVRTCPProtoImplementor::PVRTCPProtoImplementor(PVMFMediaClock& aClientPlayBackClock, PVMFMediaClock& aRTCPClock, PVRTCPProtoImplementorObserver*	aObserver, bool aBroadcastSession)
+        : iBroadcastSession(aBroadcastSession)
+        , irClientPlayBackClock(aClientPlayBackClock)
+        , irRTCPClock(aRTCPClock)
+        , ipObserver(aObserver)
+{
+    ipRTCPDataPathLoggerIn = NULL;
+    ipRTCPAVSyncLogger = NULL;
+    ResetParams();
+}
+
+void PVRTCPProtoImplementor::ResetParams(bool aMemoryCleanUp)
+{
+    OSCL_UNUSED_ARG(aMemoryCleanUp);
+    iPerformRTCPBasedAVSync = iBroadcastSession ? true : false;
+    iRTCPAVSyncProcessed =	false;
+    iPlayStopTimeAvailable = false;
+}
+
+void PVRTCPProtoImplementor::Construct()
+{
+    ipRTCPDataPathLoggerIn = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffer.rtcp.in");
+    ipRTCPAVSyncLogger = PVLogger::GetLoggerObject("PVRTCPProtoImplementor.rtcp.avsync");
+}
+
+OSCL_EXPORT_REF PVRTCPProtoImplementor::~PVRTCPProtoImplementor()
+{
+    Reset();
+}
+
+OSCL_EXPORT_REF void PVRTCPProtoImplementor::AddPVRTCPChannelController(PVRTCPChannelController* aPVRTCPChannelController)
+{
+    iPVRTCPChannelController.push_back(aPVRTCPChannelController);
+}
+
+OSCL_EXPORT_REF void PVRTCPProtoImplementor::RemoveAllRTCPChannelControllers()
+{
+    Oscl_Vector<PVRTCPChannelController*, OsclMemAllocator>::iterator iter;
+    for (iter = iPVRTCPChannelController.end() - 1; iter >= iPVRTCPChannelController.begin(); iter--)
+    {
+        OSCL_DELETE(*iter);
+    }
+    iPVRTCPChannelController.clear();
+}
+
+OSCL_EXPORT_REF PVRTCPChannelController* PVRTCPProtoImplementor::GetRTCPChannelController(const PVMFPortInterface* aPort) const
+{
+    PVRTCPChannelController* rtcpChannelController = NULL;
+    Oscl_Vector<PVRTCPChannelController*, OsclMemAllocator>::iterator iter;
+    for (iter = iPVRTCPChannelController.begin(); iter !=  iPVRTCPChannelController.end(); iter++)
+    {
+        PVRTCPChannelController* currRtcpChannelController = *iter;
+        if (currRtcpChannelController->CheckAssociatedFeedbackPort(aPort))
+        {
+            rtcpChannelController = currRtcpChannelController;
+            break;
+        }
+    }
+    return rtcpChannelController;
+}
+
+OSCL_EXPORT_REF void PVRTCPProtoImplementor::StartRTCPMessageExchange()
+{
+    Oscl_Vector<PVRTCPChannelController*, OsclMemAllocator>::iterator iter;
+    for (iter = iPVRTCPChannelController.begin(); iter !=  iPVRTCPChannelController.end(); iter++)
+    {
+        PVRTCPChannelController* rtcpChannelController = *iter;
+        rtcpChannelController->StartRTCPMessageExchange();
+    }
+}
+
+OSCL_EXPORT_REF void PVRTCPProtoImplementor::PauseRTCPMessageExchange()
+{
+    Oscl_Vector<PVRTCPChannelController*, OsclMemAllocator>::iterator iter;
+    for (iter = iPVRTCPChannelController.begin(); iter !=  iPVRTCPChannelController.end(); iter++)
+    {
+        PVRTCPChannelController* rtcpChannelController = *iter;
+        rtcpChannelController->PauseRTCPMessageExchange();
+    }
+}
+
+OSCL_EXPORT_REF void PVRTCPProtoImplementor::StopRTCPMessageExchange()
+{
+    Oscl_Vector<PVRTCPChannelController*, OsclMemAllocator>::iterator iter;
+    for (iter = iPVRTCPChannelController.begin(); iter !=  iPVRTCPChannelController.end(); iter++)
+    {
+        PVRTCPChannelController* rtcpChannelController = *iter;
+        rtcpChannelController->StopRTCPMessageExchange();
+    }
+}
+
+OSCL_EXPORT_REF void PVRTCPProtoImplementor::Reset()
+{
+    Oscl_Vector<PVRTCPChannelController*, OsclMemAllocator>::iterator iter;
+    for (iter = iPVRTCPChannelController.begin(); iter !=  iPVRTCPChannelController.end(); iter++)
+    {
+        PVRTCPChannelController* rtcpChannelController = *iter;
+        rtcpChannelController->Reset();
+    }
+    ResetParams(true);
+}
+
+OSCL_EXPORT_REF PVMFStatus PVRTCPProtoImplementor::ProcessRTCPReport(PVMFPortInterface* aFeedbackPort, PVMFSharedMediaMsgPtr& aMsg)
+{
+    PVMFStatus status = PVMFFailure;
+    PVRTCPChannelController* rtcpChannelController = GetRTCPChannelController(aFeedbackPort);
+    if (rtcpChannelController)
+    {
+        status = rtcpChannelController->ProcessRTCPReport(aMsg);
+    }
+    return status;
+}
+
+OSCL_EXPORT_REF void PVRTCPProtoImplementor::SetRTCPIntervalInMicroSecs(uint32 aRTCPInterval)
+{
+    Oscl_Vector<PVRTCPChannelController*, OsclMemAllocator>::iterator iter;
+    for (iter = iPVRTCPChannelController.begin(); iter !=  iPVRTCPChannelController.end(); iter++)
+    {
+        PVRTCPChannelController* rtcpChannelController = *iter;
+        rtcpChannelController->SetRTCPIntervalInMicroSecs(aRTCPInterval);
+    }
+}
+
+OSCL_EXPORT_REF bool PVRTCPProtoImplementor::SetPortRTCPParams(PVMFPortInterface* aPort, int aNumSenders, uint32 aRR, uint32 aRS)
+{
+    bool retval = false;
+    PVRTCPChannelController* rtcpChannelController = GetRTCPChannelController(aPort);
+    if (rtcpChannelController)
+    {
+        rtcpChannelController->SetPortRTCPParams(aNumSenders, aRR, aRS);
+        retval = true;
+    }
+    return retval;
+}
+
+OSCL_EXPORT_REF void PVRTCPProtoImplementor::Prepare(bool aPlayAfterSeek)
+{
+    Oscl_Vector<PVRTCPChannelController*, OsclMemAllocator>::iterator iter;
+    for (iter = iPVRTCPChannelController.begin(); iter != iPVRTCPChannelController.end(); iter++)
+    {
+        PVRTCPChannelController* pRTCPChannelController = *iter;
+        if (pRTCPChannelController)
+        {
+            pRTCPChannelController->Prepare(aPlayAfterSeek);
+        }
+    }
+}
+
+PVMFStatus PVRTCPProtoImplementor::RTCPSRReveived(PVRTCPChannelController* aChannelController)
+{
+    OSCL_UNUSED_ARG(aChannelController);
+    PVMFStatus status = PVMFSuccess;
+    if (iPerformRTCPBasedAVSync && !iRTCPAVSyncProcessed)
+    {
+        bool ret = ProcessRTCPSRforAVSync();
+        if (ret == false)
+        {
+            // No need to return error as perhaps there's not enough information yet
+            // to attempt a/v sync
+            return PVMFSuccess;
+        }
+    }
+    return status;
+}
+
+bool PVRTCPProtoImplementor::ProcessRTCPSRforAVSync()
+{
+    // The following criteria must hold before the RTCP SRs can be processed for a/v sync
+    // a) The Jitter Buffers of all tracks have received at least one packet
+    // b) At least one RTCP report has been received for each track
+    // c) The wall clock value of the RTCP SRs is not zero
+
+    // Check the criteria
+    for (uint32 ii = 0; ii < iPVRTCPChannelController.size(); ii++)
+    {
+        PVRTCPChannelController* rtcpChannelController = iPVRTCPChannelController[ii];
+        uint32 tsOffset = 0;
+        if (rtcpChannelController->GetJitterBuffer().GetRTPTimeStampOffset(tsOffset) == false)
+        {
+            return false;
+        }
+
+        if (rtcpChannelController->GetRTCPStats().lastSenderReportRecvTime == OSCL_STATIC_CAST(uint64, 0))
+        {
+            return false;
+        }
+
+        if (rtcpChannelController->GetRTCPStats().lastSenderReportNTP == OSCL_STATIC_CAST(uint64, 0))
+        {
+            return false;
+        }
+    }
+
+    // temporary vector to save the calculated init ntp for each track
+    Oscl_Vector<uint64, OsclMemAllocator> initNtpTracks;
+
+    // temporary vector to save the calculated rtp timebase of each track
+    Oscl_Vector<uint32, OsclMemAllocator> RTPTBArray;
+
+    // Initialize temporary vectors
+    int32 err = OsclErrNone;
+    OSCL_TRY(err, initNtpTracks.reserve(iPVRTCPChannelController.size()));
+    if (err != OsclErrNone)
+        return false;
+
+    OSCL_TRY(err, RTPTBArray.push_back(iPVRTCPChannelController.size()));
+    if (err != OsclErrNone)
+        return false;
+
+    for (uint32 tt = 0; tt < iPVRTCPChannelController.size(); tt++)
+    {
+        initNtpTracks.push_back(0);
+        RTPTBArray.push_back(0);
+    }
+
+
+    // Find the track whose first rtp packet correspond to the smallest NTP
+    uint32 lowestNTPIndex = 0;
+    uint64 lowestNTP = 0;
+    for (uint32 jj = 0; jj < iPVRTCPChannelController.size(); jj++)
+    {
+        uint32 firstRTP;
+        iPVRTCPChannelController[jj]->GetJitterBuffer().GetRTPTimeStampOffset(firstRTP);
+        uint32 timescale = iPVRTCPChannelController[jj]->GetJitterBuffer().GetTimeScale();
+        uint32 srRTP = iPVRTCPChannelController[jj]->GetRTCPStats().lastSenderReportRTP;
+        uint64 srNTP = iPVRTCPChannelController[jj]->GetRTCPStats().lastSenderReportNTP;
+
+        uint32 deltaRTP = 0;
+        if (srRTP >= firstRTP)
+        {
+            deltaRTP = srRTP - firstRTP;
+        }
+        else
+        {
+            deltaRTP = firstRTP - srRTP;
+        }
+
+        uint64 deltaRTPInNTPFormat = ((uint64) deltaRTP / (uint64)timescale) << 32;
+        deltaRTPInNTPFormat += ((uint64) deltaRTP % (uint64)timescale) * (uint64)0xFFFFFFFF / (uint64)timescale;
+
+        uint64 initNTP = 0;
+        if (srRTP >= firstRTP)
+        {
+            initNTP = srNTP - deltaRTPInNTPFormat;
+        }
+        else
+        {
+            initNTP = srNTP + deltaRTPInNTPFormat;
+        }
+
+
+        if (jj == 0)
+        {
+            lowestNTPIndex = jj;
+            lowestNTP = initNTP;
+        }
+        else
+            if (initNTP < lowestNTP)
+            {
+                lowestNTPIndex = jj;
+                lowestNTP = initNTP;
+            }
+
+        // Save the reference ntp value
+        initNtpTracks[jj] = initNTP;
+
+        PVMF_JB_LOG_RTCP_AVSYNC((0,
+                                 "PVMFJitterBufferNode::ProcessRTCPSRforAVSync(): srRTP=%d, firstRTP=%d, timescale=%d srNTPHigh=0x%x, srNTPLow=0x%x initNTPHigh=0x%x initNTPLow=0x%x deltaRTPHigh=0x%x deltaRTPLow=0x%x",
+                                 srRTP, firstRTP, timescale, Oscl_Int64_Utils::get_uint64_upper32(srNTP), Oscl_Int64_Utils::get_uint64_lower32(srNTP),
+                                 Oscl_Int64_Utils::get_uint64_upper32(initNTP), Oscl_Int64_Utils::get_uint64_lower32(initNTP),
+                                 Oscl_Int64_Utils::get_uint64_upper32(deltaRTPInNTPFormat), Oscl_Int64_Utils::get_uint64_lower32(deltaRTPInNTPFormat)));
+
+    }
+
+
+    // Calculate the new timebase for all tracks
+    for (uint32 kk = 0; kk < iPVRTCPChannelController.size(); kk++)
+    {
+
+        uint32 firstRTP;
+        iPVRTCPChannelController[kk]->GetJitterBuffer().GetRTPTimeStampOffset(firstRTP);
+
+        if (kk == lowestNTPIndex)
+        {
+            // Just set the RTP TB to the first rtp packet
+            RTPTBArray[kk] = firstRTP;
+        }
+        else
+        {
+            uint64 initNTP = initNtpTracks[kk];
+            uint32 timescale = iPVRTCPChannelController[kk]->GetJitterBuffer().GetTimeScale();
+
+            OSCL_ASSERT(lowestNTP <= initNTP);
+
+            uint64 deltaNTP = initNTP - lowestNTP;
+            uint32 deltaNTPInRTPUnits = OSCL_STATIC_CAST(uint32, ((deltaNTP * (uint64)timescale) + (uint64)0x80000000) >> 32);
+            uint32 rtpTimeBase = firstRTP - deltaNTPInRTPUnits;
+            RTPTBArray[kk] = rtpTimeBase;
+        }
+    }
+
+#if (PVLOGGER_INST_LEVEL > PVLOGMSG_INST_LLDBG)
+    // Log parameters
+    for (uint32 mm = 0; mm < iPVRTCPChannelController.size(); mm++)
+    {
+        uint32 firstRTP;
+        iPVRTCPChannelController[mm]->GetJitterBuffer().GetRTPTimeStampOffset(firstRTP);
+        uint32 timescale = iPVRTCPChannelController[mm]->GetJitterBuffer().GetTimeScale();
+        uint32 srRTP = iPVRTCPChannelController[mm]->GetRTCPStats().lastSenderReportRTP;
+        uint64 srNTP = iPVRTCPChannelController[mm]->GetRTCPStats().lastSenderReportNTP;
+        int32 delta = ((firstRTP - RTPTBArray[mm]) * 1000) / timescale;
+        uint32 srNTPHigh = Oscl_Int64_Utils::get_uint64_upper32(srNTP);
+        srNTP = srNTP & uint64(0xffffffff);
+        srNTP *= uint64(1000000);
+        srNTP += uint64(500000);
+        srNTP = srNTP / uint64(0xffffffff);
+        uint32 srNTPLow = Oscl_Int64_Utils::get_uint64_lower32(srNTP);
+
+        PVMF_JB_LOG_RTCP_AVSYNC((0,
+                                 "Stream %d: mime=%s timeScale=%uHz firstTS=%u RTCP.RTP=%u RTCP.NTP=%u.%06u newTB=%u delta=%dms\n",
+                                 mm,
+                                 iPVRTCPChannelController[mm]->GetJitterBuffer().GetMimeType(),
+                                 timescale,
+                                 firstRTP,
+                                 srRTP,
+                                 srNTPHigh,
+                                 srNTPLow,
+                                 RTPTBArray[mm],
+                                 delta
+                                )
+                               );
+
+    }
+#endif
+
+    // Adjust the RTP TB
+    for (uint32 ll = 0; ll < iPVRTCPChannelController.size(); ll++)
+    {
+        iPVRTCPChannelController[ll]->GetJitterBuffer().SetRTPTimeStampOffset(RTPTBArray[ll]);
+    }
+
+    //Notify SM plugin that RTP TB data is available for PVR purposes
+    // No need to create a public class to publish the format of the information sent in this event
+    // Just define this structure internally. The only client of this event is the SM broadcast
+    // plugin, so it's the only component that needs to be aware of this format
+    struct RTPTBInfoEventData
+    {
+        const PvmfMimeString* mimeType;
+        uint32 rtpTB;
+    };
+
+    for (uint32 nn = 0; nn < iPVRTCPChannelController.size(); nn++)
+    {
+        OSCL_HeapString<OsclMemAllocator> mimeStr(iPVRTCPChannelController[nn]->GetJitterBuffer().GetMimeType());
+
+        RTPTBInfoEventData infoData;
+        infoData.mimeType = &mimeStr;
+        infoData.rtpTB = RTPTBArray[nn];
+        PVMFAsyncEvent infoEvent(PVMFInfoEvent, PVMFJitterBufferNodeRTCPDataProcessed, NULL, (OsclAny*)(&infoData));
+        ipObserver->ProcessInfoEvent(infoEvent);
+    }
+
+    iRTCPAVSyncProcessed = true;
+    return true;
+}
+
+PVMFStatus PVRTCPProtoImplementor::RTCPByeReceived(PVRTCPChannelController* aChannelController)
+{
+    PVMF_JB_LOG_RTCPDATATRAFFIC_IN_E((0, "PVRTCPProtoImplementor::RTCPByeReceived for mime %s", aChannelController->GetJitterBuffer().GetMimeType()));
+    ipObserver->RTCPPacketReceived(BYE_RTCP_PACKET, aChannelController);
+    aChannelController->GetJitterBuffer().SetEOS(true);
+    return PVMFSuccess;
+}
+
+PVMFStatus PVRTCPProtoImplementor::RTCPRRReadyToSend(PVMFPortInterface*& aPort, PVMFSharedMediaMsgPtr& aMessage)
+{
+    ipObserver->RTCPReportReadyToSend(aPort, aMessage);
+    return PVMFSuccess;
+}
diff --git a/nodes/streaming/jitterbuffernode/jitterbuffer/common/src/pvmf_rtcp_timer.cpp b/nodes/streaming/jitterbuffernode/jitterbuffer/common/src/pvmf_rtcp_timer.cpp
new file mode 100644
index 0000000..f779151
--- /dev/null
+++ b/nodes/streaming/jitterbuffernode/jitterbuffer/common/src/pvmf_rtcp_timer.cpp
@@ -0,0 +1,133 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+/**
+ * @file pvmf_rtcp_timer.cpp
+ * @brief RTCP timer to Jitter Buffer Node
+ */
+#ifndef PVMF_RTCP_TIMER_H_INCLUDED
+#include "pvmf_rtcp_timer.h"
+#endif
+
+#ifndef PVMF_JITTER_BUFFER_COMMON_INTERNAL_H
+#include "pvmf_jitter_buffer_common_internal.h"
+#endif
+
+#define RTCP_HOLD_DATA_SIZE 2
+
+////////////////////////////////////////////////////////////////////////////
+PvmfRtcpTimer::PvmfRtcpTimer(PvmfRtcpTimerObserver* aObserver)
+        : OsclTimerObject(OsclActiveObject::EPriorityNominal, "PvmfRtcpTimer"),
+        iRTCPTimeIntervalInMicroSecs(DEFAULT_RTCP_INTERVAL_USEC),
+        iObserver(aObserver),
+        iStarted(false)
+{
+    iBufAlloc = NULL;
+    ipLogger = PVLogger::GetLoggerObject("PvmfRtcpTimer");
+    AddToScheduler();
+    iRTCPBufAlloc.ipRTCPRRMsgBufAlloc = createRTCPRRBufAllocReSize();
+}
+
+////////////////////////////////////////////////////////////////////////////
+PvmfRtcpTimer::~PvmfRtcpTimer()
+{
+    Stop();
+    if (iBufAlloc != NULL)
+    {
+        iBufAlloc->removeRef();
+        iBufAlloc = NULL;
+    }
+    if (iImplAlloc != NULL)
+    {
+        OSCL_DELETE(iImplAlloc);
+    }
+}
+
+////////////////////////////////////////////////////////////////////////////
+PVMFStatus PvmfRtcpTimer::Start()
+{
+    PVMF_JB_LOGINFO((0, "PvmfRtcpTimer::Start iRTCPTimeIntervalInMicroSecs Interval %d", iRTCPTimeIntervalInMicroSecs));
+    if (iRTCPTimeIntervalInMicroSecs > 0)
+    {
+        RunIfNotReady(iRTCPTimeIntervalInMicroSecs);
+        iStarted = true;
+        return PVMFSuccess;
+    }
+    else
+    {
+        return PVMFFailure;
+    }
+}
+
+////////////////////////////////////////////////////////////////////////////
+PVMFStatus PvmfRtcpTimer::setRTCPInterval(uint32 rtcpTimeIntervalInMicroSecs)
+{
+    PVMF_JB_LOGINFO((0, "PvmfRtcpTimer::ResetRTCPInterval"));
+    iRTCPTimeIntervalInMicroSecs = rtcpTimeIntervalInMicroSecs;
+    return PVMFSuccess;
+}
+
+////////////////////////////////////////////////////////////////////////////
+PVMFStatus PvmfRtcpTimer::Stop()
+{
+    PVMF_JB_LOGINFO((0, "PvmfRtcpTimer::Stop"));
+    Cancel();
+    iStarted = false;
+    return PVMFSuccess;
+}
+
+////////////////////////////////////////////////////////////////////////////
+void PvmfRtcpTimer::Run()
+{
+    PVMF_JB_LOGINFO((0, "PvmfRtcpTimer::Run"));
+
+    if (!iStarted)
+        return;
+
+    if (!iObserver)
+    {
+        PVMF_JB_LOGERROR((0, "PvmfRtcpTimer::Run: Error - Observer not set"));
+        return;
+    }
+
+    iObserver->RtcpTimerEvent();
+    /*
+     * Do not reschudule the AO here. Observer would reschedule this AO
+     * once it is done processing the timer event.
+     */
+}
+
+PVMFResizableSimpleMediaMsgAlloc*
+PvmfRtcpTimer::createRTCPRRBufAllocReSize()
+{
+    int32 leavecode = 0;
+
+    OSCL_TRY(leavecode,
+             iBufAlloc = OSCL_NEW(OsclMemPoolResizableAllocator, (DEFAULT_RTCP_SOCKET_MEM_POOL_SIZE_IN_BYTES, 1));
+             iImplAlloc = OSCL_NEW(PVMFResizableSimpleMediaMsgAlloc, (iBufAlloc));
+            );
+
+    if (leavecode || (!iBufAlloc) || (!iImplAlloc))
+    {
+        PVMF_JB_LOGERROR((0, "PvmfRtcpTimer::createRTCPRRBufAllocReSize: Error - Memory allocation failed"));
+        OSCL_LEAVE(OsclErrNoMemory);
+    }
+
+    iBufAlloc->enablenullpointerreturn();
+
+    return iImplAlloc;
+}
diff --git a/nodes/streaming/jitterbuffernode/jitterbuffer/rtp/Android.mk b/nodes/streaming/jitterbuffernode/jitterbuffer/rtp/Android.mk
new file mode 100644
index 0000000..ca0f6d9
--- /dev/null
+++ b/nodes/streaming/jitterbuffernode/jitterbuffer/rtp/Android.mk
@@ -0,0 +1,35 @@
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := \
+	src/pvmf_rtp_jitter_buffer_factory.cpp \
+ 	src/pvmf_rtp_jitter_buffer_impl.cpp
+
+
+LOCAL_MODULE := libpvjitterbufferrtp
+
+LOCAL_CFLAGS :=  $(PV_CFLAGS)
+
+
+
+LOCAL_STATIC_LIBRARIES := 
+
+LOCAL_SHARED_LIBRARIES := 
+
+LOCAL_C_INCLUDES := \
+	$(PV_TOP)/nodes/streaming/jitterbuffernode/jitterbuffer/rtp/src \
+ 	$(PV_TOP)/nodes/streaming/jitterbuffernode/jitterbuffer/rtp/include \
+ 	$(PV_TOP)/nodes/common/include \
+ 	$(PV_TOP)/nodes/streaming/streamingmanager/plugins/mshttp/config \
+ 	$(PV_TOP)/nodes/streaming/streamingmanager/include \
+ 	$(PV_TOP)/protocols/rtp/src \
+ 	$(PV_TOP)/nodes/streaming/common/include \
+ 	$(PV_TOP)/nodes/streaming/jitterbuffernode/jitterbuffer/common/include \
+ 	$(PV_INCLUDES)
+
+LOCAL_COPY_HEADERS_TO := $(PV_COPY_HEADERS_TO)
+
+LOCAL_COPY_HEADERS := \
+ 	include/pvmf_rtp_jitter_buffer_factory.h
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/nodes/streaming/jitterbuffernode/jitterbuffer/rtp/build/make/local.mk b/nodes/streaming/jitterbuffernode/jitterbuffer/rtp/build/make/local.mk
new file mode 100644
index 0000000..3a996c9
--- /dev/null
+++ b/nodes/streaming/jitterbuffernode/jitterbuffer/rtp/build/make/local.mk
@@ -0,0 +1,26 @@
+# Get the current local path as the first operation
+LOCAL_PATH := $(call get_makefile_dir)
+
+# Clear out the variables used in the local makefiles
+include $(MK)/clear.mk
+
+TARGET := pvjitterbufferrtp
+
+XCXXFLAGS += $(FLAG_COMPILE_WARNINGS_AS_ERRORS)
+
+# Added this to for osclconfig.h
+XINCDIRS += -I ../../../../../../common/include -I ../../../../../streamingmanager/plugins/mshttp/config -I ../../../../../streamingmanager/include -I ../../../../../../../protocols/rtp/src
+XINCDIRS += -I ../../../../../common/include
+XINCDIRS += -I ../../../common/include
+
+SRCDIR := ../../src
+INCSRCDIR := ../../include
+
+# compose final src list for actual build
+SRCS = 	pvmf_rtp_jitter_buffer_factory.cpp\
+		pvmf_rtp_jitter_buffer_impl.cpp
+
+HDRS =  pvmf_rtp_jitter_buffer_factory.h
+
+include $(MK)/library.mk
+
diff --git a/nodes/streaming/jitterbuffernode/jitterbuffer/rtp/include/pvmf_rtp_jitter_buffer_factory.h b/nodes/streaming/jitterbuffernode/jitterbuffer/rtp/include/pvmf_rtp_jitter_buffer_factory.h
new file mode 100644
index 0000000..c383e1d
--- /dev/null
+++ b/nodes/streaming/jitterbuffernode/jitterbuffer/rtp/include/pvmf_rtp_jitter_buffer_factory.h
@@ -0,0 +1,33 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#ifndef PVMF_RTP_JITTER_BUFFER_FACTORY_H_INCLUDED
+#define PVMF_RTP_JITTER_BUFFER_FACTORY_H_INCLUDED
+
+#ifndef PVMF_JITTER_BUFFER_FACTORY_H
+#include "pvmf_jitter_buffer_factory.h"
+#endif
+
+class RTPJitterBufferFactory: public JitterBufferFactory
+{
+    public:
+        OSCL_IMPORT_REF virtual PVMFJitterBuffer* Create(const PVMFJitterBufferConstructParams& aJBCreationData);
+        OSCL_IMPORT_REF virtual void Destroy(PVMFJitterBuffer*& aJitterBuffer);
+};
+#endif
+
+
diff --git a/nodes/streaming/jitterbuffernode/jitterbuffer/rtp/src/pvmf_rtp_jitter_buffer_factory.cpp b/nodes/streaming/jitterbuffernode/jitterbuffer/rtp/src/pvmf_rtp_jitter_buffer_factory.cpp
new file mode 100644
index 0000000..3e3548a
--- /dev/null
+++ b/nodes/streaming/jitterbuffernode/jitterbuffer/rtp/src/pvmf_rtp_jitter_buffer_factory.cpp
@@ -0,0 +1,35 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#ifndef PVMF_RTP_JITTER_BUFFER_FACTORY_H_INCLUDED
+#include "pvmf_rtp_jitter_buffer_factory.h"
+#endif
+
+#ifndef PVMF_RTP_JITTER_BUFFER_IMPL_H_INCLUDED
+#include "pvmf_rtp_jitter_buffer_impl.h"
+#endif
+
+OSCL_EXPORT_REF PVMFJitterBuffer* RTPJitterBufferFactory::Create(const PVMFJitterBufferConstructParams& aJBCreationData)
+{
+    return PVMFRTPJitterBufferImpl::New(aJBCreationData);
+}
+
+OSCL_EXPORT_REF void RTPJitterBufferFactory::Destroy(PVMFJitterBuffer*& aJitterBuffer)
+{
+    OSCL_DELETE(aJitterBuffer);
+    aJitterBuffer = NULL;
+}
diff --git a/nodes/streaming/jitterbuffernode/jitterbuffer/rtp/src/pvmf_rtp_jitter_buffer_impl.cpp b/nodes/streaming/jitterbuffernode/jitterbuffer/rtp/src/pvmf_rtp_jitter_buffer_impl.cpp
new file mode 100644
index 0000000..26680af
--- /dev/null
+++ b/nodes/streaming/jitterbuffernode/jitterbuffer/rtp/src/pvmf_rtp_jitter_buffer_impl.cpp
@@ -0,0 +1,1435 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#ifndef PVMF_JITTER_BUFFER_H_INCLUDED
+#include "pvmf_rtp_jitter_buffer_impl.h"
+#endif
+
+#ifndef OSCL_BYTE_ORDER_H_INCLUDED
+#include "oscl_byte_order.h"
+#endif
+
+#ifndef PVMF_SM_NODE_EVENTS_H_INCLUDED
+#include "pvmf_sm_node_events.h"
+#endif
+
+
+#ifndef PVMF_MEDIA_CMD_H_INCLUDED
+#include "pvmf_media_cmd.h"
+#endif
+
+// Define entry point for this DLL
+OSCL_DLL_ENTRY_POINT_DEFAULT()
+
+#define PVMF_JITTER_BUFFER_ROLL_OVER_THRESHOLD_16BIT 2000
+
+const int32 iEstimatedServerKeepAheadInMilliSeconds = 2000;
+
+/* RTP HEADER CONSTANTS */
+#define SUPPORTED_RTP_HEADER_VERSION	2
+#define RTP_FIXED_HEADER_SIZE			12
+#define RTP_HEADER_V_BIT_MASK			0xC0
+#define RTP_HEADER_V_BIT_OFFSET			6
+#define RTP_HEADER_P_BIT_MASK			0x20
+#define RTP_HEADER_P_BIT_OFFSET			5
+#define RTP_HEADER_X_BIT_MASK			0x10
+#define RTP_HEADER_X_BIT_OFFSET			4
+#define RTP_HEADER_CC_BIT_MASK			0x0F
+#define RTP_HEADER_M_BIT_MASK			0x80
+#define RTP_HEADER_M_BIT_OFFSET			7
+#define RTP_HEADER_PT_MASK				0x7F
+
+OSCL_EXPORT_REF PVMFJitterBuffer* PVMFRTPJitterBufferImpl::New(const PVMFJitterBufferConstructParams& aCreationData)
+{
+    PVMFRTPJitterBufferImpl* ptr = OSCL_NEW(PVMFRTPJitterBufferImpl, (aCreationData));
+    if (ptr)
+    {
+        ptr->Construct();
+    }
+    return ptr;
+}
+
+OSCL_EXPORT_REF PVMFRTPJitterBufferImpl::~PVMFRTPJitterBufferImpl()
+{
+    if (iPacketArrivalClock)
+    {
+        iPacketArrivalClock->Stop();
+        OSCL_DELETE(iPacketArrivalClock);
+    }
+
+    if (iBurstClock)
+    {
+        iBurstClock->Stop();
+        OSCL_DELETE(iBurstClock);
+    }
+}
+
+OSCL_EXPORT_REF void PVMFRTPJitterBufferImpl::StreamingSessionStarted()
+{
+    if (!iEOSSignalled)
+    {
+        irEstimatedServerClock.Start();
+        iBurstClock->Start();
+        CancelEventCallBack(JB_BUFFERING_DURATION_COMPLETE);
+        RequestEventCallBack(JB_BUFFERING_DURATION_COMPLETE);
+    }
+    PVMFJitterBufferImpl::StreamingSessionStarted();
+}
+
+PVMFRTPJitterBufferImpl::PVMFRTPJitterBufferImpl(const PVMFJitterBufferConstructParams& aCreationData): PVMFJitterBufferImpl(aCreationData)
+{
+    if (iInPlaceProcessing)
+    {
+        iOnePacketPerMediaMsg = true;
+    }
+    else
+    {
+        iOnePacketPerMediaMsg = false;
+    }
+
+    iOnePacketPerFragment = true;
+    iHeaderPreParsed = false;
+
+    seqNumLock = false;
+    iPrevPacketTS = 0;
+    isPrevNptTimeSet = false;
+    iPrevNptTimeInRTPTimeScale = 0;
+    iInterArrivalJitterD = 0;
+    iPrevPacketRecvTime = 0;
+    isPrevRtpTimeSet = false;
+    iPrevRtpTimeBase = 0;
+    iRTPTimeScale = 0;
+    iOverflowFlag = false;
+
+    iPlayListRTPTimeBase = 0;
+    iPlayListRTPTimeBaseSet = false;
+
+    iBurstDetect = false;
+    iBurstStartTimestamp = 0;
+    iEstServerClockBurstStartTimestamp = 0;
+    iRTPDataArrived = false;
+    iEarlyDecodingTime = 0;
+    iServerBurst = false;
+    iBurstThreshold = 1.5;
+    iBurstDetectDurationInMilliSec = 0;
+    iInitialBuffering = true;
+    iBurstClock = NULL;
+}
+
+void PVMFRTPJitterBufferImpl::Construct()
+{
+    iPacketArrivalClock = OSCL_NEW(PVMFMediaClock, ());
+    iPacketArrivalClock->SetClockTimebase(iPacketArrivalTimeBase);
+    iPacketArrivalClock->Start();
+    PVMFJitterBufferImpl::Construct();
+
+    iBurstClock = OSCL_NEW(PVMFMediaClock, ());
+    iBurstClock->SetClockTimebase(iBurstClockTimeBase);
+
+    bool overflowFlag = false;
+    uint32 start = 0;
+    iBurstClock->Stop();
+    iBurstClock->SetStartTime32(start, PVMF_MEDIA_CLOCK_MSEC, overflowFlag);
+}
+
+OSCL_EXPORT_REF void PVMFRTPJitterBufferImpl::ResetJitterBuffer()
+{
+    if (iInPlaceProcessing)
+    {
+        iOnePacketPerMediaMsg = true;
+    }
+    else
+    {
+        iOnePacketPerMediaMsg = false;
+    }
+
+    iOnePacketPerFragment = true;
+    iHeaderPreParsed = false;
+
+    seqNumLock = false;
+    iPrevPacketTS = 0;
+    isPrevNptTimeSet = false;
+    iPrevNptTimeInRTPTimeScale = 0;
+    iInterArrivalJitterD = 0;
+    iPrevPacketRecvTime = 0;
+    isPrevRtpTimeSet = false;
+    iPrevRtpTimeBase = 0;
+    iRTPTimeScale = 0;
+
+    iPlayListRTPTimeBaseSet = false;
+    iPlayListRTPTimeBase = 0;
+
+    iOverflowFlag = false;
+
+    iBurstDetect = false;
+    iBurstStartTimestamp = 0;
+    iEstServerClockBurstStartTimestamp = 0;
+    iRTPDataArrived = false;
+    iEarlyDecodingTime = 0;
+    iServerBurst = false;
+    iBurstThreshold = 1.5;
+    iBurstDetectDurationInMilliSec = 0;
+    iInitialBuffering = true;
+
+    if (iPacketArrivalClock)
+    {
+        iPacketArrivalClock->Reset();
+    }
+
+    if (iBurstClock)
+    {
+        iBurstClock->Reset();
+    }
+
+    PVMFJitterBufferImpl::ResetJitterBuffer();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+OSCL_EXPORT_REF void PVMFRTPJitterBufferImpl::AdjustRTPTimeStamp()
+{
+    // By the time this function is called, iMonotonicTimeStamp should be already normalized
+    // with the corresponding values from other jitterbuffers
+    iMaxAdjustedRTPTS = Oscl_Int64_Utils::get_uint64_lower32(iMonotonicTimeStamp);
+    UpdateEstimatedServerClock(true);
+}
+
+OSCL_EXPORT_REF void PVMFRTPJitterBufferImpl::setRTPInfoParams(PVMFRTPInfoParams rtpInfo, bool oPlayAfterASeek)
+{
+    iJitterBuffer->setSeqNumBase(rtpInfo.seqNum);
+    PVMFRTPInfoParams iRTPInfoParams;
+    iRTPInfoParams.seqNumBaseSet = rtpInfo.seqNumBaseSet;
+    if (rtpInfo.seqNumBaseSet == true)
+    {
+        iRTPInfoParams.seqNum = rtpInfo.seqNum;
+    }
+    iRTPInfoParams.rtpTimeBaseSet = rtpInfo.rtpTimeBaseSet;
+    if (rtpInfo.rtpTimeBaseSet == true)
+    {
+        iRTPInfoParams.rtpTime = rtpInfo.rtpTime;
+    }
+    iRTPInfoParams.rtpTimeScale = rtpInfo.rtpTimeScale;
+    iRTPTimeScale = rtpInfo.rtpTimeScale;
+    iEstServClockMediaClockConvertor.set_timescale(iRTPTimeScale);
+    iMediaClockConvertor.set_timescale(1000);
+    iMediaClockConvertor.set_clock_other_timescale(0, iRTPInfoParams.rtpTimeScale);
+    iRTPInfoParams.nptTimeBaseSet = rtpInfo.nptTimeBaseSet;
+    if (iRTPInfoParams.nptTimeBaseSet == true)
+    {
+        iRTPInfoParams.nptTimeInMS = rtpInfo.nptTimeInMS;
+        iMediaClockConvertor.update_clock(iRTPInfoParams.nptTimeInMS);
+        iRTPInfoParams.nptTimeInRTPTimeScale =
+            iMediaClockConvertor.get_converted_ts(iRTPInfoParams.rtpTimeScale);
+    }
+    /* In case this is the first rtp info set TS calc variables */
+    if (iRTPInfoParamsVec.size() == 0)
+    {
+        if (iRTPInfoParams.rtpTimeBaseSet)
+        {
+            iPrevTSOut = iRTPInfoParams.rtpTime;
+            iPrevTSIn = iRTPInfoParams.rtpTime;
+            iPrevAdjustedRTPTS = iRTPInfoParams.rtpTime;
+            if (iPlayListRTPTimeBaseSet == false)
+            {
+                iPlayListRTPTimeBaseSet = true;
+                iPlayListRTPTimeBase = iRTPInfoParams.rtpTime;
+            }
+
+        }
+        else
+        {
+            /* Use the value from the first packet */
+            if (seqNumLock)
+            {
+                iPrevTSOut = seqLockTimeStamp;
+                iPrevTSIn = seqLockTimeStamp;
+                iPrevAdjustedRTPTS = seqLockTimeStamp;
+            }
+        }
+
+        if (iRTPInfoParams.seqNumBaseSet)
+        {
+            iPrevSeqNumBaseOut = iRTPInfoParams.seqNum;
+            iPrevSeqNumBaseIn = iRTPInfoParams.seqNum;
+        }
+        else
+        {
+            /* Use the value from the first packet */
+            if (seqNumLock)
+            {
+                iPrevSeqNumBaseOut = iFirstSeqNum;
+                iPrevSeqNumBaseIn = iFirstSeqNum;
+            }
+        }
+        /* Initialize the variables used for ts calculation between pause and resume */
+        if (iRTPInfoParams.nptTimeBaseSet)
+        {
+            iPrevNptTimeInRTPTimeScale = iRTPInfoParams.nptTimeInRTPTimeScale;
+            isPrevNptTimeSet = true;
+        }
+        if (iRTPInfoParams.rtpTimeBaseSet)
+        {
+            iPrevRtpTimeBase = iRTPInfoParams.rtpTime;
+            isPrevRtpTimeSet = true;
+        }
+    }
+    else
+    {
+        iRTPInfoParams.isPlayAfterPause = !oPlayAfterASeek;
+    }
+    if (iRTPInfoParams.rtpTimeBaseSet)
+    {
+        iPrevAdjustedRTPTS = iRTPInfoParams.rtpTime;
+    }
+
+    if (oPlayAfterASeek)
+    {
+        //Clean everything in the vector before pushing new RTPInfo
+        iRTPInfoParamsVec.clear();
+    }
+
+    iRTPInfoParamsVec.push_back(iRTPInfoParams);
+}
+
+OSCL_EXPORT_REF uint32 PVMFRTPJitterBufferImpl::getInterArrivalJitter()
+{
+    return iInterArrivalJitter;
+}
+
+OSCL_EXPORT_REF void
+PVMFRTPJitterBufferImpl::PurgeElementsWithSeqNumsLessThan(uint32 aSeqNum,
+        uint32 aPlayerClockMS)
+{
+    iJitterBuffer->PurgeElementsWithSeqNumsLessThan(aSeqNum, iPrevSeqNumBaseOut);
+
+    {
+        iMaxAdjustedRTPTS =
+            Oscl_Int64_Utils::get_uint64_lower32(iMonotonicTimeStamp);
+        /*
+         * In case of 3GPP streaming this clock adjustment is performed
+         * at a later point, via the "AdjustRTPTimeStamp" API call from
+         * jitter buffer node.
+         */
+        OSCL_UNUSED_ARG(aPlayerClockMS);
+    }
+
+    PVMF_JB_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferImpl::PurgeElementsWithSeqNumsLessThan - SeqNum=%d",
+                               aSeqNum));
+}
+
+OSCL_EXPORT_REF void
+PVMFRTPJitterBufferImpl::PurgeElementsWithTimestampLessThan(PVMFTimestamp aTS)
+{
+    PVMFTimestamp rtpTS;
+    if (iPlayListRTPTimeBaseSet)
+    {
+        rtpTS = iPlayListRTPTimeBase + aTS;
+    }
+    else
+    {
+        rtpTS = aTS;
+    }
+
+    iJitterBuffer->PurgeElementsWithTimestampLessThan(rtpTS);
+    iMaxAdjustedRTPTS = aTS;
+    //iPrevAdjustedRTPTS = rtpTS;
+    UpdateEstimatedServerClock(true);
+    iMonotonicTimeStamp = aTS;
+    iPrevTSOut = rtpTS;
+    PVMF_JB_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferImpl::PurgeElementsWithTimestampLessThan - ntpTS=%u, rtpTS=%u",
+                               aTS, rtpTS));
+}
+
+/**
+*/
+OSCL_EXPORT_REF PVMFSharedMediaDataPtr& PVMFRTPJitterBufferImpl::GetFirstDataPacket(void)
+{
+    return firstDataPacket;
+}
+
+/**
+*/
+OSCL_EXPORT_REF bool PVMFRTPJitterBufferImpl::GetRTPTimeStampOffset(uint32& aTimeStampOffset)
+{
+    if (seqNumLock)
+        aTimeStampOffset = seqLockTimeStamp;
+
+    return seqNumLock;
+}
+
+/**
+*/
+OSCL_EXPORT_REF void  PVMFRTPJitterBufferImpl::SetRTPTimeStampOffset(uint32 newTSBase)
+{
+    // This function must be used only to offset the RTP TB
+    // for broadcast streaming.
+    // Based on that, the following is assumed:
+    // 1) seqLockTimeStamp is valid
+    // 2) newTSBase <= seqLockTimeStamp
+
+    iMonotonicTimeStamp += (seqLockTimeStamp - newTSBase);
+    iMaxAdjustedRTPTS += (seqLockTimeStamp - newTSBase);
+}
+
+
+
+/**
+*/
+OSCL_EXPORT_REF bool PVMFRTPJitterBufferImpl::NotifyFreeSpaceAvailable()
+{
+
+    if (iMediaDataGroupAlloc)
+    {
+        iMediaDataGroupAlloc->notifyfreechunkavailable(*this);
+        return true;
+    }
+    return false;
+}
+
+void PVMFRTPJitterBufferImpl::SetEarlyDecodingTimeInMilliSeconds(uint32 aDuration)
+{
+    if (aDuration > 0)
+    {
+        iBurstDetect = true;
+        iEarlyDecodingTime = aDuration;
+        iBurstDetectDurationInMilliSec = (aDuration / 2);
+    }
+    else
+    {
+        iBurstDetect = false;
+        iEarlyDecodingTime = 0;
+        iBurstDetectDurationInMilliSec = 0;
+    }
+}
+
+void PVMFRTPJitterBufferImpl::SetBurstThreshold(float aBurstThreshold)
+{
+    iBurstThreshold = aBurstThreshold;
+}
+
+
+bool PVMFRTPJitterBufferImpl::IsDelayEstablished(uint32& aClockDiff)
+{
+    aClockDiff = iDurationInMilliSeconds;
+    if (GetState() == PVMF_JITTER_BUFFER_IN_TRANSITION)
+    {
+        PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Jitter Buffer In Transition - Preparing for Seek"));
+        irDelayEstablished = false;
+        irJitterDelayPercent = 0;
+        return irDelayEstablished;
+    }
+
+    uint32 timebase32 = 0;
+    uint32 estServerClock = 0;
+    uint32 clientClock = 0;
+    bool overflowFlag = false;
+
+    irEstimatedServerClock.GetCurrentTime32(estServerClock, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
+    irClientPlayBackClock.GetCurrentTime32(clientClock, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
+
+    PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Check - EstServClock=%d", estServerClock));
+    PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Check - ClientClock=%d", clientClock));
+
+    if (iEOSSignalled)
+    {
+        /*
+        * No check needed - We are past the clip time, just play out the last
+        * bit in the jitter buffer
+        */
+        PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Session Duration Expired"));
+        if (irDelayEstablished == false)
+        {
+            /*
+            * Coming out of rebuffering in case we had gone into
+            * rebuffering just before
+            */
+            irJitterDelayPercent = 100;
+            PVMFAsyncEvent jbEvent(PVMFInfoEvent, PVMFInfoDataReady, NULL, NULL);
+            ReportJBInfoEvent(jbEvent);
+        }
+        irDelayEstablished = true;
+    }
+    else
+    {
+        if (estServerClock < clientClock)
+        {
+            /* Could happen during repositioning */
+            if (irDelayEstablished == true)
+            {
+                aClockDiff = 0;
+                irDelayEstablished = false;
+                irJitterDelayPercent = 0;
+                /* Start timer */
+                PVMFAsyncEvent jbEvent(PVMFInfoEvent, PVMFInfoUnderflow, NULL, NULL);
+                ReportJBInfoEvent(jbEvent);
+                PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Check - EstServClock=%d",
+                                  Oscl_Int64_Utils::get_uint64_lower32(estServerClock)));
+                PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Check - ClientClock=%d",
+                                  Oscl_Int64_Utils::get_uint64_lower32(clientClock)));
+                PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Estimated Serv Clock Less Than ClientClock!!!!"));
+                PVMF_JB_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Check - EstServClock=%d",
+                                         Oscl_Int64_Utils::get_uint64_lower32(estServerClock)));
+                PVMF_JB_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Check - ClientClock=%d",
+                                         Oscl_Int64_Utils::get_uint64_lower32(clientClock)));
+                PVMF_JB_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::IsJitterBufferReady - Estimated Serv Clock Less Than ClientClock!!!!"));
+            }
+            return irDelayEstablished;
+        }
+        const uint32 diff32ms = estServerClock - clientClock;
+        aClockDiff = diff32ms;
+
+        // Make sure RTP packets have arrived before starting burst measurement
+        if (iRTPDataArrived && iBurstDetect)
+        {
+            uint32 timebase32 = 0;
+            uint32 aCurrentRealTime = 0;
+            uint32 aRealTimeDelta = 0;
+            uint32 aServerClientClockDelta = 0;
+            float  aBurstRateSrvClnt = 0;
+            bool overFlowFlagBurst;
+
+            // Save burst start time only if its current value is 0
+            if (iBurstStartTimestamp == 0)
+            {
+                iBurstClock->GetCurrentTime32(iBurstStartTimestamp, overFlowFlagBurst, PVMF_MEDIA_CLOCK_MSEC, timebase32);
+                iEstServerClockBurstStartTimestamp = estServerClock;
+            }
+
+            // Find current real time
+            iBurstClock->GetCurrentTime32(aCurrentRealTime, overFlowFlagBurst, PVMF_MEDIA_CLOCK_MSEC, timebase32);
+
+            // Compute real time clk delta and est srv clk delta
+            aRealTimeDelta = aCurrentRealTime - iBurstStartTimestamp;
+
+            if (aRealTimeDelta >= iBurstDetectDurationInMilliSec)
+            {
+                // Est srv clk - client clk is used to calculate burst rate
+                if (!iInitialBuffering)
+                {
+                    aServerClientClockDelta = estServerClock - iEstServerClockBurstStartTimestamp;
+                }
+                else
+                {
+                    aServerClientClockDelta = diff32ms;
+                }
+
+                // Compute burst rate
+                if (aRealTimeDelta)
+                {
+                    aBurstRateSrvClnt = (float)(aServerClientClockDelta) /
+                                        (float)(aRealTimeDelta);
+                }
+
+                iBurstDetect = false;
+                if (aBurstRateSrvClnt > iBurstThreshold)
+                {
+                    iServerBurst = true;
+                }
+                PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Real time clk:: ref val: %2d,", iBurstStartTimestamp));
+                if (iInitialBuffering)
+                {
+                    PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - client clk:: ref val: %d", clientClock));
+                }
+                else
+                {
+                    PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - est srv:: ref val: %d", iEstServerClockBurstStartTimestamp));
+                }
+                PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - real time clk:: cur val: %2d", aCurrentRealTime));
+                PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - est srv clk:: cur val: %2d", estServerClock));
+                PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - real time delta: %2d", aRealTimeDelta));
+                PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - est srv client clk delta: %2d", aServerClientClockDelta));
+                PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - burst rate * 100: %d", (uint32)(100.0 * aBurstRateSrvClnt)));
+                PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - burst threshold * 100: %d", (uint32)(100.0 * iBurstThreshold)));
+            }
+        }
+        // Check if SM has set the early decoding flag. If true, and if burst rate exceeds threshold,
+        // signal buffering completion.
+        if (iServerBurst && iEarlyDecodingTime && (diff32ms >= iEarlyDecodingTime))
+        {
+            iServerBurst = false;
+            PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Cancelling Jitter Buffer Duration Timer"));
+            irDelayEstablished = true;
+            irJitterDelayPercent = 100;
+            PVMFAsyncEvent jbEvent(PVMFInfoEvent, PVMFInfoDataReady, NULL, NULL);
+            ReportJBInfoEvent(jbEvent);
+        }
+        else
+        {
+            if (diff32ms >= iDurationInMilliSeconds)
+            {
+                if (iBufferAlloc)
+                {
+                    uint32 jbSize = iBufferAlloc->getBufferSize();
+                    uint32 largestContiguousFreeBlockSize = iBufferAlloc->getLargestContiguousFreeBlockSize();
+                    uint32 minPercentOccupancy = 100;
+                    if ((largestContiguousFreeBlockSize*100 / jbSize) < minPercentOccupancy)
+                    {
+                        minPercentOccupancy = (uint32)(largestContiguousFreeBlockSize * 100 / jbSize);
+                    }
+
+                    if ((prevMinPercentOccupancy < MIN_PERCENT_OCCUPANCY_THRESHOLD) && (minPercentOccupancy < MIN_PERCENT_OCCUPANCY_THRESHOLD))
+                    {
+                        consecutiveLowBufferCount++;
+                    }
+                    else
+                    {
+                        consecutiveLowBufferCount = 0;
+                    }
+
+                    prevMinPercentOccupancy = minPercentOccupancy;
+                    PVMF_JB_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::IsJitterBufferReady - minPercentOccupancy=%d, consecutiveLowBufferCount=%d jbSize%d largestContiguousFreeBlockSize %d",
+                                             minPercentOccupancy,
+                                             consecutiveLowBufferCount, jbSize, largestContiguousFreeBlockSize));
+
+
+                    if ((diff32ms > JITTER_BUFFER_DURATION_MULTIPLIER_THRESHOLD*iDurationInMilliSeconds) && !iOverflowFlag && (consecutiveLowBufferCount > CONSECUTIVE_LOW_BUFFER_COUNT_THRESHOLD))
+                    {
+                        iOverflowFlag = true;
+                        PVMFAsyncEvent jbEvent(PVMFInfoEvent, PVMFInfoOverflow, NULL, NULL);
+                        ReportJBInfoEvent(jbEvent);
+                        PVMF_JB_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::IsJitterBufferReady - minPercentOccupancy=%d, consecutiveLowBufferCount=%d, diff32ms = %d, largestContiguousFreeBlockSize = %d",
+                                                 minPercentOccupancy,
+                                                 consecutiveLowBufferCount, diff32ms, largestContiguousFreeBlockSize));
+                        PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Established - EstServClock=%d", estServerClock));
+                        PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Established - ClientClock=%d",  clientClock));
+                        PVMF_JB_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Established - EstServClock=%d",
+                                                 estServerClock));
+                        PVMF_JB_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Established - ClientClock=%d",
+                                                 clientClock));
+                    }
+                }
+                if (irDelayEstablished == false)
+                {
+                    if (CheckNumElements())
+                    {
+                        PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Cancelling Jitter Buffer Duration Timer"));
+                        irDelayEstablished = true;
+                        irJitterDelayPercent = 100;
+                        PVMFAsyncEvent jbEvent(PVMFInfoEvent, PVMFInfoDataReady, NULL, NULL);
+                        ReportJBInfoEvent(jbEvent);
+                        PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Established - EstServClock=%d", estServerClock));
+                        PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Established - ClientClock=%d",  clientClock));
+                        PVMF_JB_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Established - EstServClock=%d",
+                                                 estServerClock));
+                        PVMF_JB_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Established - ClientClock=%d",
+                                                 clientClock));
+                    }
+                    else
+                    {
+                        irJitterDelayPercent = 0;
+                    }
+                }
+                else
+                {
+                    irJitterDelayPercent = 100;
+                }
+            }
+            else
+            {
+                /*
+                * Update the buffering percent - to be used while sending buffering
+                * status events, in case we go into rebuffering or if we are in buffering
+                * state.
+                */
+                irJitterDelayPercent = ((diff32ms * 100) / iDurationInMilliSeconds);
+                if (irDelayEstablished == true)
+                {
+                    if (diff32ms <= iRebufferingThresholdInMilliSeconds)
+                    {
+                        /* Implies that we are going into rebuffering */
+                        if (!iEOSSignalled)
+                        {
+                            irDelayEstablished = false;
+                            PVMFAsyncEvent jbEvent(PVMFInfoEvent, PVMFInfoUnderflow, NULL, NULL);
+                            ReportJBInfoEvent(jbEvent);
+                            LOGCLIENTANDESTIMATEDSERVCLK_REBUFF;
+                        }
+                        /* we are past the end of the clip, no more rebuffering */
+                        irClientPlayBackClock.Pause();
+                    }
+                }
+                if (irDelayEstablished == false && CheckNumElements() == false)
+                {
+                    irJitterDelayPercent = 0;
+                }
+                PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady: Delay Percent = %d", irJitterDelayPercent));
+            }
+        }
+        /* if we are not rebuffering check for flow control */
+        PerformFlowControl(false);
+    }
+    if (irDelayEstablished)
+    {
+        iInitialBuffering = false;
+    }
+    return (irDelayEstablished);
+}
+
+void PVMFRTPJitterBufferImpl::EOSCmdReceived()
+{
+    /*
+     * Check for upstream EOS. Set the boolean if it is. EOS from jitter buffer
+     * is sent when jitter buffer is all empty. We do not really expect EOS from
+     * upstream nodes in case of RTP processing. So ignore it.
+     */
+    PVMF_JB_LOGERROR((0, "PVMFRTPJitterBufferImpl::ProcessIncomingMsgRTP - Unexpected EOS"));
+    PVMF_JB_LOGDATATRAFFIC_IN((0, "PVMFRTPJitterBufferImpl::ProcessIncomingMsgRTP - Unexpected EOS"));
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////
+//_______________________________________________________________________________________________
+//00 01|02|03|04 05 06 07|08|09 10 11 12 13 14 15|16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31|
+//_______________________________________________________________________________________________
+// Ver |P |X |    CC     |M |         PT         |                 Sequence Number               |
+//_______________________________________________________________________________________________
+//                                     Timestamp												 |
+//_______________________________________________________________________________________________
+//                                      SSRC                                                     |
+//_______________________________________________________________________________________________
+//                                  CSRC [0..15] :::                                             |
+//_______________________________________________________________________________________________
+//////////////////////////////////////////////////////////////////////////////////////////////////
+PVMFJBPacketParsingAndStatUpdationStatus PVMFRTPJitterBufferImpl::ParsePacketHeaderAndUpdateJBStats(PVMFSharedMediaDataPtr& rtpPacketContainer,
+        PVMFSharedMediaDataPtr& aOutDataPacket,
+        uint32 aFragIndex)
+{
+    //Initial validations
+    OsclSharedPtr<PVMFMediaDataImpl> mediaDataIn;
+    if (!rtpPacketContainer->getMediaDataImpl(mediaDataIn))
+    {
+        return PVMF_JB_ERR_NO_PACKET;
+    }
+
+    uint32 SSRC = 0;
+    uint32 markerInfo = 0;
+    uint32 seqNum = 0;
+    PVMFTimestamp rtpTimeStamp  = 0;
+    OsclRefCounterMemFrag rtpPacket;
+    rtpPacketContainer->getMediaFragment(aFragIndex, rtpPacket);
+    uint8* rtpHeaderOffset = (uint8*)(rtpPacket.getMemFrag().ptr);
+    uint32 rtpPacketLenExcludingHeader = rtpPacket.getMemFrag().len;
+
+
+    if (!iHeaderPreParsed)     //RTP packet
+    {
+        //Validate the packet as per streaming requirements
+        //Update jitter buffer stats like, packet arrival latency
+        /* Get start of RTP packet */
+        uint8* rtpHeader    = (uint8*)(rtpPacket.getMemFrag().ptr);
+        uint32 rtpPacketLen = rtpPacket.getMemFrag().len;
+
+        /* is this a legal data packet? */
+        if (rtpPacketLen <= RTP_FIXED_HEADER_SIZE)
+        {
+            return PVMF_JB_ERR_TRUNCATED_HDR;
+        }
+
+
+        if (!iRTPDataArrived)
+        {
+            iRTPDataArrived = true;
+        }
+
+
+        /* Parse RTP version */
+        uint8  rtpVersion = (((*rtpHeader) & RTP_HEADER_V_BIT_MASK) >> RTP_HEADER_V_BIT_OFFSET);
+        if (rtpVersion != SUPPORTED_RTP_HEADER_VERSION)
+        {
+            PVMF_JB_LOGERROR((0, "0x%x RTPPacketHeaderParser::ParseRTPHeader: illegal rtp version", this));
+            return PVMF_JB_ERR_CORRUPT_HDR;
+        }
+
+        /* Check for padding */
+        uint8 pbit = (((*rtpHeader) & RTP_HEADER_P_BIT_MASK) >> RTP_HEADER_P_BIT_OFFSET);
+        uint8 numPaddingOctets = 0;
+        if (pbit)
+        {
+            numPaddingOctets = *(rtpHeader + (rtpPacketLen - 1));
+        }
+
+        /* Check for header extension */
+        uint8 xbit = (((*rtpHeader) & RTP_HEADER_X_BIT_MASK) >> RTP_HEADER_X_BIT_OFFSET);
+
+        /* Check for CSRC */
+        uint8 csrcCount = ((*rtpHeader) & RTP_HEADER_CC_BIT_MASK);
+
+        rtpHeader++;
+
+        /* Parse M bit */
+        uint8 mbit = (((*rtpHeader) & RTP_HEADER_M_BIT_MASK) >> RTP_HEADER_M_BIT_OFFSET);
+
+        rtpHeader++;
+
+        /* Parse sequence number */
+        uint16 seqNum16 = 0;
+        oscl_memcpy((char *)&seqNum16, rtpHeader, sizeof(seqNum16));
+        big_endian_to_host((char *)&seqNum16, sizeof(seqNum16));
+        seqNum = (uint32)seqNum16;
+        rtpHeader += 2;
+
+        /* Parse rtp time stamp */
+        uint32 ts32 = 0;
+        oscl_memcpy((char *)&ts32, rtpHeader, sizeof(ts32));
+        big_endian_to_host((char *)&ts32, sizeof(ts32));
+        rtpTimeStamp = (PVMFTimestamp)ts32;
+        rtpHeader += 4;
+
+        /* Parse SSRC */
+        uint32 ssrc32 = 0;
+        oscl_memcpy((char *)&ssrc32, rtpHeader, sizeof(ssrc32));
+        big_endian_to_host((char *)&ssrc32, sizeof(ssrc32));
+        SSRC = ssrc32;
+        rtpHeader += 4;
+
+        rtpPacketLen -= RTP_FIXED_HEADER_SIZE;
+
+        /* Check for CSRC list - If present skip over */
+        if (csrcCount)
+        {
+            if ((uint32)(csrcCount*4) > rtpPacketLen)
+            {
+                PVMF_JB_LOGERROR((0, "0x%x RTPPacketHeaderParser::ParseRTPHeader: Corrupt CSRC", this));
+                return PVMF_JB_ERR_CORRUPT_HDR;
+            }
+            rtpHeader += (csrcCount * 4);
+            rtpPacketLen -= (csrcCount * 4);
+        }
+
+        /* Check for extended RTP header - If present skip over */
+        if (xbit)
+        {
+            rtpHeader += 2;
+            uint16 len16 = 0;
+            oscl_memcpy((char *)&len16, rtpHeader, sizeof(len16));
+            big_endian_to_host((char *)&len16, sizeof(len16));
+            uint32 extensionHeaderLen = (uint32)len16;
+            rtpPacketLen -= 4;
+            if ((extensionHeaderLen*4) > rtpPacketLen)
+            {
+                PVMF_JB_LOGERROR((0, "0x%x RTPPacketHeaderParser::ParseRTPHeader: Corrupt Extended Header Length", this));
+                return PVMF_JB_ERR_CORRUPT_HDR;
+            }
+            rtpHeader += (extensionHeaderLen * 4);
+            rtpPacketLen -= (extensionHeaderLen * 4);
+        }
+
+        /* Ignore padding octets */
+        if (numPaddingOctets)
+        {
+            if ((uint32)numPaddingOctets > rtpPacketLen)
+            {
+                PVMF_JB_LOGERROR((0, "0x%x RTPPacketHeaderParser::ParseRTPHeader: Corrupt Padding Length", this));
+                return PVMF_JB_ERR_CORRUPT_HDR;
+            }
+            rtpPacketLen -= numPaddingOctets;
+        }
+
+        if (mbit == 1) markerInfo |= PVMF_MEDIA_DATA_MARKER_INFO_M_BIT;
+        rtpHeaderOffset = rtpHeader;
+        rtpPacketLenExcludingHeader = rtpPacketLen;
+    }
+    else
+    {
+        if (aFragIndex != 0)
+        {
+            return PVMF_JB_ERR_INVALID_CONFIGURATION;
+        }
+        rtpTimeStamp = rtpPacketContainer->getTimestamp();
+        seqNum = rtpPacketContainer->getSeqNum();
+        rtpTimeStamp = rtpPacketContainer->getTimestamp();
+        SSRC = rtpPacketContainer->getStreamID();
+        markerInfo = rtpPacketContainer->getMarkerInfo();
+    }
+
+    if (iInPlaceProcessing == false)
+    {
+        OsclSharedPtr<PVMFMediaDataImpl> mediaDataOut;
+        bool status = Allocate(mediaDataOut);
+        if (status == false)
+        {
+            PVMF_JB_LOGERROR((0, "0x%x RTPPacketHeaderParser::ParseRTPHeader: Jitter Buffer Full", this));
+            return PVMF_JB_ERR_INSUFFICIENT_MEM_TO_PACKETIZE;
+        }
+
+        OsclRefCounterMemFrag memFragOut(rtpPacket);
+        memFragOut.getMemFrag().ptr = rtpHeaderOffset;
+        memFragOut.getMemFrag().len = rtpPacketLenExcludingHeader;
+
+        mediaDataOut->appendMediaFragment(memFragOut);
+        mediaDataOut->setMarkerInfo(markerInfo);
+
+        bool retVal = CreateMediaData(aOutDataPacket, mediaDataOut);
+
+        if (retVal == false)
+        {
+            PVMF_JB_LOGERROR((0, "0x%x RTPPacketHeaderParser::ParseRTPHeader: Jitter Buffer Full", this));
+            return PVMF_JB_ERR_INSUFFICIENT_MEM_TO_PACKETIZE;
+        }
+
+        aOutDataPacket->setTimestamp(rtpTimeStamp);
+        aOutDataPacket->setStreamID(SSRC);
+        aOutDataPacket->setSeqNum(seqNum);
+    }
+    else
+    {
+        if (aFragIndex != 0)
+        {
+            return PVMF_JB_ERR_INVALID_CONFIGURATION;
+        }
+
+        rtpPacket.getMemFrag().ptr = rtpHeaderOffset;
+        rtpPacket.getMemFrag().len = rtpPacketLenExcludingHeader;
+        mediaDataIn->clearMediaFragments();
+        mediaDataIn->appendMediaFragment(rtpPacket);
+        rtpPacketContainer->setMarkerInfo(markerInfo);
+        rtpPacketContainer->setTimestamp(rtpTimeStamp);
+        rtpPacketContainer->setStreamID(SSRC);
+        rtpPacketContainer->setSeqNum(seqNum);
+    }
+
+    PVMF_JB_LOGDATATRAFFIC_IN((0, "RTPPacketHeaderParser::ParseRTPHeader: SSRC=%u, rtpSeqNum=%d, rtpTs=%u, rtpPacketLen=%d",
+                               SSRC, seqNum, rtpTimeStamp, rtpPacketLenExcludingHeader));
+
+
+    //Validate the packet for Ts, Seq num etc... <only if seq num is locked>
+    if (seqNumLock)
+    {
+        //First packet is always considered to be valid
+        if (iFirstSeqNum != seqNum)
+        {
+            PVMFJitterBufferStats& jbStats = getJitterBufferStats();
+
+            if (iBroadCastSession == true)
+            {
+                /*
+                 * This can happen when using prerecorded transport streams that loop
+                 * If this happens, just signal an unexpected data event
+                 */
+                if (rtpTimeStamp < jbStats.maxTimeStampRegistered)
+                {
+                    return PVMF_JB_ERR_UNEXPECTED_PKT;
+                }
+            }
+            if (!IsSeqTsValidForPkt(seqNum, rtpTimeStamp, jbStats))
+                return PVMF_JB_ERR_LATE_PACKET;
+        }
+    }
+
+    if (iInPlaceProcessing)
+    {
+        UpdatePacketArrivalStats(rtpPacketContainer);
+    }
+    else
+    {
+        UpdatePacketArrivalStats(aOutDataPacket);
+    }
+
+    return PVMF_JB_PACKET_PARSING_SUCCESS;
+}
+
+OSCL_EXPORT_REF bool PVMFRTPJitterBufferImpl::IsSeqTsValidForPkt(uint32 aSeqNum, uint32 rtpTimeStamp, PVMFJitterBufferStats& jbStats)
+{
+
+    //Validate the packet for
+    //- Late Packet <based on seqnum of the last packet sent out of JB>
+    //- Roll Over <based on max seqnum of the packet registered with the JB>
+    uint16 seqNum = (uint16)aSeqNum;
+
+    uint16 delta = 0;
+    uint16 referenceSeqNum = 0;
+    if (jbStats.totalNumPacketsRetrieved > 0)
+    {
+        referenceSeqNum = OSCL_STATIC_CAST(uint16, (jbStats.lastRetrievedSeqNum + 1));
+        if (IsSequenceNumEarlier(seqNum, referenceSeqNum, delta))
+        {
+            PVMF_JB_LOGDATATRAFFIC_IN_E((0, "PVMFRTPJitterBufferImpl::IsSeqTsValidForPkt - Late packet seqNum%u, Ts%u, LastRetrievedSeqNum%u, MaxSeqReg%u", seqNum, rtpTimeStamp, jbStats.lastRetrievedSeqNum, jbStats.maxSeqNumRegistered));
+            return false;
+        }
+    }
+
+    //Check for packet rollover <based on the max seq num registered with the jitter buffer>
+    delta = 0;
+    if ((seqNum < jbStats.maxSeqNumRegistered) && IsSequenceNumEarlier(OSCL_STATIC_CAST(uint16, jbStats.maxSeqNumRegistered), seqNum, delta))
+    {
+        PVMF_JB_LOGDATATRAFFIC_IN_E((0, "PVMFRTPJitterBufferImpl::IsSeqTsValidForPkt - Rollover seqNum%u, Ts%u, LastRetrievedSeqNum%u, MaxSeqReg%u", seqNum, rtpTimeStamp, jbStats.lastRetrievedSeqNum, jbStats.maxSeqNumRegistered));
+        /* Reset these variables to acct for seqnum rollover */
+        jbStats.maxSeqNumRegistered = seqNum;
+        jbStats.maxSeqNumReceived = seqNum;
+        jbStats.maxTimeStampRegistered = rtpTimeStamp;
+    }
+    return true;
+}
+
+void PVMFRTPJitterBufferImpl::UpdatePacketArrivalStats(PVMFSharedMediaDataPtr& aArrivedPacket)
+{
+    //Update interarrival jitter
+    /* D(i-1,i) = (RecvT(i) - RTP_TS(i)) -
+    			  (RecvT(i-1) - RTP_TS(i-1)) */
+
+    uint32 currPacketRecvTime32;
+    bool overflowFlag = false;
+    iPacketArrivalClock->GetCurrentTime32(currPacketRecvTime32, overflowFlag,
+                                          PVMF_MEDIA_CLOCK_MSEC);
+
+    const PVMFTimestamp rtpTimeStamp = aArrivedPacket->getTimestamp();
+    int32 ts_diff = rtpTimeStamp - iPrevPacketTS;
+    int32 arrival_diff = currPacketRecvTime32 - iPrevPacketRecvTime;
+
+    int32 arrivalJitter = ts_diff - arrival_diff;
+    if (ts_diff < arrival_diff)
+        arrivalJitter = arrival_diff - ts_diff;
+
+    PVMF_JB_LOGDATATRAFFIC_IN((0, "PVMFRTPJitterBufferImpl::UpdatePacketArrivalStats [%s] - new packet Ts %d prev packet ts %d , curr time %d prev time %d iInterArrivalJitterD %d", irMimeType.get_cstr(), rtpTimeStamp, iPrevPacketTS, currPacketRecvTime32, iPrevPacketRecvTime, iInterArrivalJitterD));
+
+    /* J(i) = J(i-1) + (ABS(D(i-1,i)) - J(i-1))/16.0 */
+    iInterArrivalJitterD += OSCL_STATIC_CAST(double, ((arrivalJitter - iInterArrivalJitterD) / 16.0));
+    /* Round up */
+    iInterArrivalJitter = (uint32)(iInterArrivalJitterD + 0.5);
+
+    /* Update variables */
+    iPrevPacketTS = rtpTimeStamp;
+    iPrevPacketRecvTime = currPacketRecvTime32;
+}
+
+bool PVMFRTPJitterBufferImpl::CanRetrievePacket()
+{
+    LOGCLIENTANDESTIMATEDSERVCLK_DATAPATH_OUT;
+
+    uint32 clockDiff;
+    bool delayEstablished = IsDelayEstablished(clockDiff);
+    if (!delayEstablished)
+    {
+        return false;
+    }
+    else
+    {
+        if (HasPendingCommand() == true)
+        {
+            return true;
+        }
+
+        PVMFJitterBufferStats stats = getJitterBufferStats();
+        if (stats.currentOccupancy > 0)
+        {
+            if (iJitterBuffer->CheckCurrentReadPosition() == false)
+            {
+                uint32 in_wrap_count = 0;
+                /*
+                 * Peek Next timestamp
+                 */
+                PVMFTimestamp ts = peekNextElementTimeStamp();
+
+                /*
+                 * Convert Time stamp to milliseconds
+                 */
+
+                ipMediaClockConverter->set_clock(ts, in_wrap_count);
+                PVMFTimestamp converted_ts =
+                    ipMediaClockConverter->get_converted_ts(1000);
+                /*
+                 * Get current client playback clock in milliseconds
+                 */
+                uint32 clientClock;
+                bool overflowFlag = false;
+
+                irClientPlayBackClock.GetCurrentTime32(clientClock, overflowFlag, PVMF_MEDIA_CLOCK_MSEC);
+
+
+                uint32 estimatedServClock = 0;
+                overflowFlag = false;
+                irEstimatedServerClock.GetCurrentTime32(estimatedServClock, overflowFlag, PVMF_MEDIA_CLOCK_MSEC);
+                uint32 delta = 0;
+                if (!iEOSSignalled && (PVTimeComparisonUtils::IsEarlier(estimatedServClock, converted_ts + iEstimatedServerKeepAheadInMilliSeconds, delta) && (delta > 0)))
+                {
+                    //hold the available data packet, and wait for hole in the JB due to OOO packet to be filled
+                    if (!IsCallbackPending(JB_NOTIFY_WAIT_FOR_OOO_PACKET_COMPLETE, NULL))
+                    {
+                        PVMF_JB_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::SendData Detected Hole in JB PeekTs[%d] clientClock[%d] , ClientClockState [%d], estimatedServClock[%d], EstimatedServClockState[%d], oSessionDurationExpired[%d] MimeStr[%s]", converted_ts, clientClock, irClientPlayBackClock.GetState(), estimatedServClock, irEstimatedServerClock.GetState(), iEOSSignalled, irMimeType.get_cstr()));
+                        RequestEventCallBack(JB_NOTIFY_WAIT_FOR_OOO_PACKET_COMPLETE , delta, NULL);
+                    }
+                    return false;
+                }
+            }
+            return true;
+        }
+        else
+        {
+            if (iEOSSignalled && !iEOSSent)
+            {
+                return true;
+            }
+            else
+            {
+                CancelEventCallBack(JB_MONITOR_REBUFFERING);
+                RequestEventCallBack(JB_MONITOR_REBUFFERING, (clockDiff - iRebufferingThresholdInMilliSeconds));
+                return false;
+            }
+        }
+    }
+}
+
+bool PVMFRTPJitterBufferImpl::CanRetrievePacket(PVMFSharedMediaMsgPtr& aMediaOutMsg, bool& aCmdPacket)
+{
+    aCmdPacket = false;
+    LOGCLIENTANDESTIMATEDSERVCLK_DATAPATH_OUT;
+
+    uint32 clockDiff = 0;
+    //There's data in the Jb and delay is established with no hole in the next read position ||
+    //JB is empty, EOS is already signalled, and EOS is not yet pushed out
+
+    bool delayEstablished = IsDelayEstablished(clockDiff);
+    if (!delayEstablished)
+    {
+        return false;
+    }
+    else
+    {
+        if (GetPendingCommand(aMediaOutMsg) == true)
+        {
+            aCmdPacket = true;
+            return true;
+        }
+
+        PVMFJitterBufferStats stats = getJitterBufferStats();
+        if (stats.currentOccupancy > 0)
+        {
+            if (iJitterBuffer->CheckCurrentReadPosition() == false)
+            {
+                uint32 in_wrap_count = 0;
+                /*
+                 * Peek Next timestamp
+                 */
+                PVMFTimestamp ts = peekNextElementTimeStamp();
+
+                /*
+                 * Convert Time stamp to milliseconds
+                 */
+                //todo mediaclockconverter
+
+                ipMediaClockConverter->set_clock(ts, in_wrap_count);
+                PVMFTimestamp converted_ts =
+                    ipMediaClockConverter->get_converted_ts(1000);
+                /*
+                 * Get current client playback clock in milliseconds
+                 */
+                uint32 clientClock;
+                bool overflowFlag = false;
+
+                irClientPlayBackClock.GetCurrentTime32(clientClock, overflowFlag, PVMF_MEDIA_CLOCK_MSEC);
+
+
+                uint32 estimatedServClock = 0;
+                overflowFlag = false;
+                irEstimatedServerClock.GetCurrentTime32(estimatedServClock, overflowFlag, PVMF_MEDIA_CLOCK_MSEC);
+                uint32 delta = 0;
+                if (!iEOSSignalled && (PVTimeComparisonUtils::IsEarlier(estimatedServClock, converted_ts + iEstimatedServerKeepAheadInMilliSeconds, delta) && (delta > 0)))
+                {
+                    //hold the available data packet, and wait for hole in the JB due to OOO packet to be filled
+                    if (!IsCallbackPending(JB_NOTIFY_WAIT_FOR_OOO_PACKET_COMPLETE, NULL))
+                    {
+                        PVMF_JB_LOGDATATRAFFIC_OUT_E((0, "PVMFJitterBufferNode::SendData Detected Hole in JB PeekTs[%d] clientClock[%d] , ClientClockState [%d], estimatedServClock[%d], EstimatedServClockState[%d], oSessionDurationExpired[%d] MimeStr[%s]", converted_ts, clientClock, irClientPlayBackClock.GetState(), estimatedServClock, irEstimatedServerClock.GetState(), iEOSSignalled, irMimeType.get_cstr()));
+                        PVMF_JB_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::SendData Detected Hole in JB PeekTs[%d] clientClock[%d] , ClientClockState [%d], estimatedServClock[%d], EstimatedServClockState[%d], oSessionDurationExpired[%d] MimeStr[%s]", converted_ts, clientClock, irClientPlayBackClock.GetState(), estimatedServClock, irEstimatedServerClock.GetState(), iEOSSignalled, irMimeType.get_cstr()));
+                        RequestEventCallBack(JB_NOTIFY_WAIT_FOR_OOO_PACKET_COMPLETE , delta, NULL);
+                    }
+                    return false;
+                }
+            }
+            //Retrieve element from JB
+            //Cancel pending sequencing OOO packet callback (if any)
+            if (IsCallbackPending(JB_NOTIFY_WAIT_FOR_OOO_PACKET_COMPLETE, NULL))
+            {
+                CancelEventCallBack(JB_NOTIFY_WAIT_FOR_OOO_PACKET_COMPLETE, NULL);
+            }
+            PVMFTimestamp ts;
+            uint32 converted_ts;
+            uint32 in_wrap_count = 0;
+
+            PVMFSharedMediaDataPtr mediaOut = RetrievePacketPayload();
+
+            if (mediaOut.GetRep() != NULL)
+            {
+                ts = mediaOut->getTimestamp();
+
+                ipMediaClockConverter->set_clock(ts, in_wrap_count);
+                converted_ts =
+                    ipMediaClockConverter->get_converted_ts(1000);
+                mediaOut->setTimestamp(converted_ts);
+                iLastPacketOutTs = converted_ts;
+                mediaOut->setFormatSpecificInfo(iTrackConfig);
+                convertToPVMFMediaMsg(aMediaOutMsg, mediaOut);
+            }
+
+            LOGCLIENTANDESTIMATEDSERVCLK_DATAPATH_OUT;
+            PVMF_JB_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::SendData: Mime=%s, SSRC=%d, TS=%d, SEQNUM= %d",
+                                        irMimeType.get_cstr(),
+                                        aMediaOutMsg->getStreamID(),
+                                        aMediaOutMsg->getTimestamp(),
+                                        aMediaOutMsg->getSeqNum()));
+
+            PVMF_JB_LOGDATATRAFFIC_FLOWCTRL((0, "PVMFJBNode::SendData:"
+                                             "MaxSNReg=%d, MaxTSReg=%u, LastSNRet=%d, LastTSRet=%u, NumMsgsInJB=%d",
+                                             stats.maxSeqNumRegistered, stats.maxTimeStampRegistered,
+                                             stats.lastRetrievedSeqNum, stats.maxTimeStampRetrieved,
+                                             (stats.maxSeqNumRegistered - stats.lastRetrievedSeqNum)));
+            return true;
+
+
+
+        }
+        else
+        {
+            if (iEOSSignalled && !iEOSSent)
+            {
+                GenerateAndSendEOSCommand(aMediaOutMsg, aCmdPacket);
+                iEOSSent = true;
+                return true;
+            }
+            else
+            {
+                if (!IsCallbackPending(JB_MONITOR_REBUFFERING, NULL) && !iEOSSent)
+                {
+                    RequestEventCallBack(JB_MONITOR_REBUFFERING, (clockDiff - iRebufferingThresholdInMilliSeconds));
+                }
+                return false;
+            }
+        }
+    }
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////
+//Utility functions
+//////////////////////////////////////////////////////////////////////////////////////////////////
+
+void PVMFRTPJitterBufferImpl::UpdateEstimatedServerClock(bool oFreshStart)
+{
+    uint32 rtpTSInMS;
+    uint32 currentTime32 = 0;
+    uint32 currentTimeBase32 = 0;
+    uint32 adjustTime32 = 0;
+    bool overflowFlag = false;
+
+    if (oFreshStart)
+    {
+        uint32 in_wrap_count = 0;
+        iEstServClockMediaClockConvertor.set_clock(iMaxAdjustedRTPTS, in_wrap_count);
+        rtpTSInMS = iEstServClockMediaClockConvertor.get_converted_ts(1000);
+        irEstimatedServerClock.Stop();
+
+        irEstimatedServerClock.SetStartTime32(rtpTSInMS,
+                                              PVMF_MEDIA_CLOCK_MSEC, overflowFlag);
+        irEstimatedServerClock.Start();
+        PVMF_JB_LOGCLOCK((0, "PVMFJitterBufferImpl::UpdateEstimatedServerClock - Setting start time - MaxAdjustedRTPTS=%u, StartTime=%d",
+                          iMaxAdjustedRTPTS, rtpTSInMS));
+    }
+    else
+    {
+        iEstServClockMediaClockConvertor.update_clock(iMaxAdjustedRTPTS);
+        rtpTSInMS = iEstServClockMediaClockConvertor.get_converted_ts(1000);
+        adjustTime32 = rtpTSInMS;
+        bool overflowFlag = false;
+        irEstimatedServerClock.GetCurrentTime32(currentTime32, overflowFlag,
+                                                PVMF_MEDIA_CLOCK_MSEC,
+                                                currentTimeBase32);
+
+        irEstimatedServerClock.AdjustClockTime32(currentTime32,
+                currentTimeBase32,
+                adjustTime32,
+                PVMF_MEDIA_CLOCK_MSEC,
+                overflowFlag);
+
+        irEstimatedServerClock.GetCurrentTime32(currentTime32, overflowFlag,
+                                                PVMF_MEDIA_CLOCK_MSEC,
+                                                currentTimeBase32);
+
+        PVMF_JB_LOGINFO((0, "PVMFJitterBufferImpl::UpdateEstimatedServerClock - Mime=%s",
+                         irMimeType.get_cstr()));
+        PVMF_JB_LOGINFO((0, "PVMFJitterBufferImpl::UpdateEstimatedServerClock - EstServClock=%d",
+                         currentTime32));
+        PVMF_JB_LOGINFO((0, "PVMFJitterBufferImpl::UpdateEstimatedServerClock - RTPTime32=%u",
+                         adjustTime32));
+        PVMF_JB_LOGINFO((0, "PVMFJitterBufferImpl::UpdateEstimatedServerClock - Adjusting Clock - iMaxAdjustedRTPTS=%u, currentTimeBase32=%d",
+                         iMaxAdjustedRTPTS, currentTimeBase32));
+    }
+
+}
+
+void PVMFRTPJitterBufferImpl::ComputeMaxAdjustedRTPTS()
+{
+    PVMFJitterBufferStats jbStats = getJitterBufferStats();
+
+    uint32 aSeqNum = jbStats.maxSeqNumReceived;
+    PVMFTimestamp aTS = jbStats.maxTimeStampRegistered;
+
+    PVMFRTPInfoParams* rtpInfoParams = FindRTPInfoParams(aSeqNum);
+    if (rtpInfoParams == NULL)
+    {
+        PVMF_JB_LOGERROR((0, "PVMFJitterBufferImpl::ComputeMaxAdjustedRTPTS: illegal seq number"));
+        OSCL_LEAVE(OsclErrArgument);
+    }
+
+    PVMF_JB_LOGINFO((0, "PVMFJitterBufferImpl::ComputeMaxAdjustedRTPTS - maxSeqNumReceived=%d, rtpInfoParams->seqNum=%d, iPrevSeqNumBaseIn=%d, Mime=%s",
+                     aSeqNum, rtpInfoParams->seqNum, iPrevSeqNumBaseIn, irMimeType.get_cstr()));
+
+    uint16 diff = 0;
+    if (rtpInfoParams->seqNumBaseSet && IsSequenceNumEarlier(OSCL_STATIC_CAST(uint16, iPrevSeqNumBaseIn), OSCL_STATIC_CAST(uint16, rtpInfoParams->seqNum), diff))
+    {
+        iPrevSeqNumBaseIn = rtpInfoParams->seqNum;
+        iPrevTSIn = rtpInfoParams->rtpTime;
+    }
+    iMaxAdjustedRTPTS += (aTS - iPrevAdjustedRTPTS);
+    iPrevAdjustedRTPTS = aTS;
+
+    PVMF_JB_LOGINFO((0, "PVMFJitterBufferImpl::ComputeMaxAdjustedRTPTS - maxTimeStampRegistered=%u, iPrevAdjustedRTPTS=%u, iMaxAdjustedRTPTS=%u, Mime=%s",
+                     aTS, iPrevAdjustedRTPTS, iMaxAdjustedRTPTS, irMimeType.get_cstr()));
+
+    UpdateEstimatedServerClock();
+}
+
+void PVMFRTPJitterBufferImpl::DeterminePrevTimeStampPeek(uint32 aSeqNum,
+        PVMFTimestamp& aPrevTS)
+{
+    PVMFRTPInfoParams* rtpInfoParams = FindRTPInfoParams(aSeqNum);
+    if (rtpInfoParams == NULL)
+    {
+        if (iRTPInfoParamsVec.size() == 0)
+        {
+            PVMF_JB_LOGWARNING((0, "PVMFJitterBufferImpl::DeterminePrevTimeStamp: RTPInfoVec Empty"));
+            /* Use the value from the first packet */
+            aPrevTS = seqLockTimeStamp;
+        }
+        else
+        {
+            PVMF_JB_LOGERROR((0, "PVMFJitterBufferImpl::DeterminePrevTimeStampPeek: illegal seq number"));
+            OSCL_LEAVE(OsclErrArgument);
+        }
+        return; // no need to continue here
+    }
+    else
+    {
+        uint16 diff32 = 0;
+        if (rtpInfoParams->seqNumBaseSet && IsSequenceNumEarlier(OSCL_STATIC_CAST(uint16, iPrevSeqNumBaseOut), OSCL_STATIC_CAST(uint16, rtpInfoParams->seqNum), diff32))
+        {
+            aPrevTS = rtpInfoParams->rtpTime;
+        }
+        else
+        {
+            aPrevTS = iPrevTSOut;
+        }
+    }
+
+}
+
+bool PVMFRTPJitterBufferImpl::IsSequenceNumEarlier(uint16 aSeqNumToComp, uint16 aBaseSeqNum, uint16& aDiff)
+{
+    aDiff = 0;
+    if (aSeqNumToComp < aBaseSeqNum)
+        return true;
+
+    aDiff = aSeqNumToComp - aBaseSeqNum;
+    if (aDiff < PVMF_JITTER_BUFFER_ROLL_OVER_THRESHOLD_16BIT)
+    {
+        return false;
+    }
+
+    return true;
+}
+
+PVMFStatus PVMFRTPJitterBufferImpl::PerformFlowControl(bool aIncomingPacket)
+{
+    OSCL_UNUSED_ARG(aIncomingPacket);
+    return PVMFSuccess;
+}
+
+void PVMFRTPJitterBufferImpl::DeterminePrevTimeStamp(uint32 aSeqNum)
+{
+
+    PVMFRTPInfoParams* rtpInfoParams = FindRTPInfoParams(aSeqNum);
+    if (rtpInfoParams == NULL)
+    {
+        if (iRTPInfoParamsVec.size() == 0)
+        {
+            PVMF_JB_LOGWARNING((0, "PVMFJitterBufferImpl::DeterminePrevTimeStamp: RTPInfoVec Empty"));
+            /* Use the value from the first packet */
+            iPrevTSOut = seqLockTimeStamp;
+            iPrevTSIn = seqLockTimeStamp;
+            iPrevAdjustedRTPTS = seqLockTimeStamp;
+            iPrevSeqNumBaseOut = iFirstSeqNum;
+            iPrevSeqNumBaseIn = iFirstSeqNum;
+
+            PVMF_JB_LOGERROR((0, "PVMFJitterBufferImpl::DeterminePrevTimeStamp: illegal seq number = %d", aSeqNum));
+            return;
+        }
+        else
+        {
+            PVMF_JB_LOGERROR((0, "PVMFJitterBufferImpl::DeterminePrevTimeStamp: illegal seq number = %d", aSeqNum));
+            OSCL_LEAVE(OsclErrArgument);
+        }
+    }
+    uint16 diff = 0;
+    if (rtpInfoParams->seqNumBaseSet && IsSequenceNumEarlier(OSCL_STATIC_CAST(uint16, iPrevSeqNumBaseOut), OSCL_STATIC_CAST(uint16, rtpInfoParams->seqNum), diff))
+    {
+        /* We need to adjust iMonotonicTimeStamp as well for resume */
+        if (rtpInfoParams->isPlayAfterPause && rtpInfoParams->nptTimeBaseSet && isPrevNptTimeSet && isPrevRtpTimeSet)
+        {
+            uint64 CurrNptTime, PrevNptTime;
+            Oscl_Int64_Utils::set_uint64(CurrNptTime, 0, rtpInfoParams->nptTimeInRTPTimeScale);
+            Oscl_Int64_Utils::set_uint64(PrevNptTime, 0, iPrevNptTimeInRTPTimeScale + iPrevTSOut - iPrevRtpTimeBase);
+            iMonotonicTimeStamp = iMonotonicTimeStamp + CurrNptTime - PrevNptTime;
+            PVMF_JB_LOGINFO((0, "PVMFJitterBufferImpl::DeterminePrevTimeStamp: TS adjustment for resume"
+                             "nptTimeInRTPTimeScale=%d, iPrevNptTimeInRTPTimeScale=%d, iPrevRtpTimeBase=%d, iPrevTSOut=%d", rtpInfoParams->nptTimeInRTPTimeScale, iPrevNptTimeInRTPTimeScale, iPrevRtpTimeBase, iPrevTSOut));
+        }
+        if (rtpInfoParams->nptTimeBaseSet)
+        {
+            iPrevNptTimeInRTPTimeScale = rtpInfoParams->nptTimeInRTPTimeScale;
+            isPrevNptTimeSet = true;
+        }
+        else
+        {
+            isPrevNptTimeSet = false;
+        }
+        if (rtpInfoParams->rtpTimeBaseSet)
+        {
+            iPrevRtpTimeBase = rtpInfoParams->rtpTime;
+            isPrevRtpTimeSet = true;
+        }
+        else
+        {
+            isPrevRtpTimeSet = false;
+        }
+        PVMF_JB_LOGINFO((0, "PVMFJitterBufferImpl::DeterminePrevTimeStamp: TS update for "
+                         "iPrevNptTimeInRTPTimeScale=%d, iPrevRtpTimeBase=%d", rtpInfoParams->nptTimeInRTPTimeScale, rtpInfoParams->rtpTime));
+        iPrevSeqNumBaseOut = rtpInfoParams->seqNum;
+        iPrevTSOut = rtpInfoParams->rtpTime;
+    }
+    PVMF_JB_LOGINFO((0, "PVMFJitterBufferImpl::DeterminePrevTimeStamp: RTPInfoSeqNum=%d, iPrevSeqNumBaseOut=%d, iPrevTSOut=%u",
+                     rtpInfoParams->seqNum, iPrevSeqNumBaseOut, iPrevTSOut));
+
+}
+
+void PVMFRTPJitterBufferImpl::ReportJBInfoEvent(PVMFAsyncEvent& aEvent)
+{
+    if (PVMFInfoUnderflow == aEvent.GetEventType())
+    {
+        CancelEventCallBack(JB_BUFFERING_DURATION_COMPLETE);
+        RequestEventCallBack(JB_BUFFERING_DURATION_COMPLETE);
+    }
+    else if (PVMFInfoDataReady == aEvent.GetEventType())
+    {
+        CancelEventCallBack(JB_BUFFERING_DURATION_COMPLETE);
+    }
+    PVMFJitterBufferImpl::ReportJBInfoEvent(aEvent);
+}
diff --git a/nodes/streaming/jitterbuffernode/jitterbuffer/rtp/src/pvmf_rtp_jitter_buffer_impl.h b/nodes/streaming/jitterbuffernode/jitterbuffer/rtp/src/pvmf_rtp_jitter_buffer_impl.h
new file mode 100644
index 0000000..2db33f8
--- /dev/null
+++ b/nodes/streaming/jitterbuffernode/jitterbuffer/rtp/src/pvmf_rtp_jitter_buffer_impl.h
@@ -0,0 +1,162 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#ifndef PVMF_RTP_JITTER_BUFFER_IMPL_H_INCLUDED
+#define PVMF_RTP_JITTER_BUFFER_IMPL_H_INCLUDED
+
+#ifndef PVMF_JITTER_BUFFER_H_INCLUDED
+#include "pvmf_jitter_buffer.h"
+#endif
+
+#ifndef PVMF_MEDIA_CLOCK_H_INCLUDED
+#include "pvmf_media_clock.h"
+#endif
+
+#ifndef PVMF_JITTER_BUFFER_COMMON_TYPES_H_INCLUDED
+#include "pvmf_jitter_buffer_common_types.h"
+#endif
+
+#define PVMF_JITTER_BUFFER_ROLL_OVER_THRESHOLD_16BIT 2000
+
+class PVMFRTPJitterBufferImpl: public PVMFJitterBufferImpl
+{
+    public:
+        OSCL_IMPORT_REF static PVMFJitterBuffer* New(const PVMFJitterBufferConstructParams& aCreationData);
+        OSCL_IMPORT_REF virtual ~PVMFRTPJitterBufferImpl();
+        OSCL_IMPORT_REF virtual void StreamingSessionStarted();
+        OSCL_IMPORT_REF virtual void ResetJitterBuffer();
+
+        OSCL_IMPORT_REF void AdjustRTPTimeStamp();
+        OSCL_IMPORT_REF virtual void setRTPInfoParams(PVMFRTPInfoParams rtpInfoParams, bool oPlayAfterASeek);
+        OSCL_IMPORT_REF uint32 getInterArrivalJitter();
+        OSCL_IMPORT_REF virtual void PurgeElementsWithSeqNumsLessThan(uint32 aSeqNum, uint32 aPlayerClockMS);
+        OSCL_IMPORT_REF virtual void PurgeElementsWithTimestampLessThan(PVMFTimestamp aTS);
+        OSCL_IMPORT_REF virtual PVMFSharedMediaDataPtr& GetFirstDataPacket(void);
+        OSCL_IMPORT_REF virtual bool GetRTPTimeStampOffset(uint32& aTimeStampOffset);
+        OSCL_IMPORT_REF virtual void  SetRTPTimeStampOffset(uint32 newTSBase);
+        OSCL_IMPORT_REF virtual bool NotifyFreeSpaceAvailable();
+        OSCL_IMPORT_REF virtual void SetEarlyDecodingTimeInMilliSeconds(uint32 duration);
+        OSCL_IMPORT_REF virtual void SetBurstThreshold(float burstThreshold);
+        OSCL_IMPORT_REF virtual bool IsDelayEstablished(uint32& aClockDiff);
+        OSCL_IMPORT_REF bool IsSeqTsValidForPkt(uint32 aSeqNum, uint32 aTs, PVMFJitterBufferStats& jbStats);
+
+    protected:
+        void Construct();
+        virtual bool CanRetrievePacket();
+        virtual bool CanRetrievePacket(PVMFSharedMediaMsgPtr& aMediaOutMsg, bool& aCmdPacket);
+        virtual PVMFJBPacketParsingAndStatUpdationStatus ParsePacketHeaderAndUpdateJBStats(PVMFSharedMediaDataPtr& inDataPacket,
+                PVMFSharedMediaDataPtr& outDataPacket,
+                uint32 aFragIndex = 0);
+        PVMFRTPJitterBufferImpl(const PVMFJitterBufferConstructParams& aCreationData);
+
+        //virtual uint32 GetNumOfPackets(PVMFSharedMediaMsgPtr& aMsg) const;
+        virtual void EOSCmdReceived();
+        void UpdateInterArrivalJitter(PVMFTimestamp currPacketTS);
+        void UpdateEstimatedServerClock(bool oFreshStart = false);
+
+        //PVMFJitterBufferRegisterMediaMsgStatus addPacket(PVMFSharedMediaDataPtr& aDataPacket);
+        virtual void CheckForRTPTimeAndRTPSeqNumberBase()
+        {
+            if (iRTPInfoParamsVec.size() > 0)
+            {
+                Oscl_Vector<PVMFRTPInfoParams, OsclMemAllocator>::iterator it;
+                it = iRTPInfoParamsVec.begin();
+                if (it->rtpTimeBaseSet == false)
+                {
+                    /* Use the value from the first packet */
+                    if (seqNumLock)
+                    {
+                        iPrevTSOut = seqLockTimeStamp;
+                        iPrevTSIn = seqLockTimeStamp;
+                        iPrevAdjustedRTPTS = seqLockTimeStamp;
+                    }
+                }
+                if (it->seqNumBaseSet == false)
+                {
+                    /* Use the value from the first packet */
+                    if (seqNumLock)
+                    {
+                        iPrevSeqNumBaseOut = iFirstSeqNum;
+                        iPrevSeqNumBaseIn = iFirstSeqNum;
+                    }
+                }
+            }
+        }
+
+        PVMFRTPInfoParams *FindRTPInfoParams(uint32 aSeqNum)
+        {
+            if (iRTPInfoParamsVec.size() == 1)
+            {
+                return (iRTPInfoParamsVec.begin());
+            }
+
+            PVMFRTPInfoParams* retVal = NULL;
+            Oscl_Vector<PVMFRTPInfoParams, OsclMemAllocator>::iterator it;
+
+
+            for (it = iRTPInfoParamsVec.begin();
+                    it < iRTPInfoParamsVec.end();
+                    it++)
+            {
+                if (it->seqNum <= aSeqNum)
+                {
+                    retVal = it;
+                }
+            }
+            return retVal;
+        }
+        bool IsSequenceNumEarlier(uint16 aSeqNumToComp, uint16 aBaseSeqNum, uint16& aDiff);
+        void ReportJBInfoEvent(PVMFAsyncEvent& aEvent);
+        void UpdatePacketArrivalStats(PVMFSharedMediaDataPtr& aArrivedPacket);
+        void DeterminePrevTimeStampPeek(uint32 aSeqNum,
+                                        PVMFTimestamp& aPrevTS);
+        void DeterminePrevTimeStamp(uint32 aSeqNum);
+        void ComputeMaxAdjustedRTPTS();
+        PVMFStatus PerformFlowControl(bool aIncomingPacket);
+
+        PVMFMediaClock* iPacketArrivalClock;
+        PVMFTimebase_Tickcount iPacketArrivalTimeBase;
+        PVMFTimestamp iPrevPacketTS;
+        double iInterArrivalJitterD;
+        uint32 iPrevPacketRecvTime;
+
+        //Burst detection variables:
+        bool			iBurstDetect;
+        uint32			iBurstStartTimestamp;
+        uint32			iEstServerClockBurstStartTimestamp;
+        PVMFMediaClock  *iBurstClock;				//may be wallclock owned by the jitterbuffer Misc can be used instead
+        PVMFTimebase_Tickcount iBurstClockTimeBase;
+        bool			iRTPDataArrived;
+        uint32			iEarlyDecodingTime;
+        bool			iServerBurst;
+        float			iBurstThreshold;
+        uint32			iBurstDetectDurationInMilliSec;
+        bool			iInitialBuffering;
+
+        uint32			iPlayListRTPTimeBase;
+        bool			iPlayListRTPTimeBaseSet;
+
+        bool   isPrevRtpTimeSet;
+        uint32 iPrevRtpTimeBase;
+        bool   isPrevNptTimeSet;
+        uint32 iPrevNptTimeInRTPTimeScale;
+        MediaClockConverter iMediaClockConvertor;
+
+};
+#endif
+
+
diff --git a/nodes/streaming/jitterbuffernode/src/pvmf_jitter_buffer_extension_interface.cpp b/nodes/streaming/jitterbuffernode/src/pvmf_jitter_buffer_extension_interface.cpp
index c8a364e..2f8fe0c 100644
--- a/nodes/streaming/jitterbuffernode/src/pvmf_jitter_buffer_extension_interface.cpp
+++ b/nodes/streaming/jitterbuffernode/src/pvmf_jitter_buffer_extension_interface.cpp
@@ -26,7 +26,7 @@
 #endif
 
 PVMFJitterBufferExtensionInterfaceImpl::PVMFJitterBufferExtensionInterfaceImpl(PVMFJitterBufferNode*c)
-        : PVInterfaceImpl<PVMFJitterBufferNodeAllocator>(PVUuid(PVMF_JITTERBUFFERNODE_EXTENSIONINTERFACE_UUID))
+        : PVInterfaceImpl<OsclMemAllocator>(PVUuid(PVMF_JITTERBUFFERNODE_EXTENSIONINTERFACE_UUID))
         , iContainer(c)
 {}
 
@@ -41,7 +41,7 @@
         bool aRateAdaptation,
         uint32 aRateAdaptationFeedBackFrequency)
 {
-    return (iContainer->setPortParams(aPort,
+    return (iContainer->SetPortParams(aPort,
                                       aTimeScale,
                                       aBitRate,
                                       aConfig,
@@ -52,67 +52,67 @@
 OSCL_EXPORT_REF
 void PVMFJitterBufferExtensionInterfaceImpl::setPlayBackThresholdInMilliSeconds(uint32 threshold)
 {
-    iContainer->setPlayBackThresholdInMilliSeconds(threshold);
+    iContainer->SetPlayBackThresholdInMilliSeconds(threshold);
 }
 
 OSCL_EXPORT_REF
 void PVMFJitterBufferExtensionInterfaceImpl::setJitterBufferRebufferingThresholdInMilliSeconds(uint32 aThreshold)
 {
-    iContainer->setJitterBufferRebufferingThresholdInMilliSeconds(aThreshold);
+    iContainer->SetJitterBufferRebufferingThresholdInMilliSeconds(aThreshold);
 }
 
 OSCL_EXPORT_REF
 void PVMFJitterBufferExtensionInterfaceImpl::getJitterBufferRebufferingThresholdInMilliSeconds(uint32& aThreshold)
 {
-    iContainer->getJitterBufferRebufferingThresholdInMilliSeconds(aThreshold);
+    iContainer->GetJitterBufferRebufferingThresholdInMilliSeconds(aThreshold);
 }
 
 OSCL_EXPORT_REF
 void PVMFJitterBufferExtensionInterfaceImpl::setJitterBufferDurationInMilliSeconds(uint32 duration)
 {
-    iContainer->setJitterBufferDurationInMilliSeconds(duration);
+    iContainer->SetJitterBufferDurationInMilliSeconds(duration);
 }
 
 OSCL_EXPORT_REF
 void PVMFJitterBufferExtensionInterfaceImpl::getJitterBufferDurationInMilliSeconds(uint32& duration)
 {
-    iContainer->getJitterBufferDurationInMilliSeconds(duration);
+    iContainer->GetJitterBufferDurationInMilliSeconds(duration);
 }
 
 OSCL_EXPORT_REF
 void PVMFJitterBufferExtensionInterfaceImpl::setEarlyDecodingTimeInMilliSeconds(uint32 duration)
 {
-    OSCL_UNUSED_ARG(duration);
+    iContainer->SetEarlyDecodingTimeInMilliSeconds(duration);
 }
 
 OSCL_EXPORT_REF
 void PVMFJitterBufferExtensionInterfaceImpl::setBurstThreshold(float burstThreshold)
 {
-    OSCL_UNUSED_ARG(burstThreshold);
+    iContainer->SetBurstThreshold(burstThreshold);
 }
 
 OSCL_EXPORT_REF
 void PVMFJitterBufferExtensionInterfaceImpl::setClientPlayBackClock(PVMFMediaClock* clientClock)
 {
-    iContainer->setClientPlayBackClock(clientClock);
+    iContainer->SetClientPlayBackClock(clientClock);
 }
 
 OSCL_EXPORT_REF
 void PVMFJitterBufferExtensionInterfaceImpl::setMaxInactivityDurationForMediaInMs(uint32 duration)
 {
-    iContainer->setMaxInactivityDurationForMediaInMs(duration);
+    iContainer->SetMaxInactivityDurationForMediaInMs(duration);
 }
 
 OSCL_EXPORT_REF
 void PVMFJitterBufferExtensionInterfaceImpl::getMaxInactivityDurationForMediaInMs(uint32& duration)
 {
-    iContainer->getMaxInactivityDurationForMediaInMs(duration);
+    iContainer->GetMaxInactivityDurationForMediaInMs(duration);
 }
 
 OSCL_EXPORT_REF
 void PVMFJitterBufferExtensionInterfaceImpl::setRTCPIntervalInMicroSecs(uint32 aRTCPInterval)
 {
-    iContainer->setRTCPIntervalInMicroSecs(aRTCPInterval);
+    iContainer->SetRTCPIntervalInMicroSecs(aRTCPInterval);
 }
 
 OSCL_EXPORT_REF
@@ -121,7 +121,7 @@
         bool oPlayAfterASeek,
         bool aStopTimeAvailable)
 {
-    return (iContainer->setPlayRange(aStartTimeInMS,
+    return (iContainer->SetPlayRange(aStartTimeInMS,
                                      aStopTimeInMS,
                                      oPlayAfterASeek,
                                      aStopTimeAvailable));
@@ -137,7 +137,7 @@
 OSCL_EXPORT_REF
 bool PVMFJitterBufferExtensionInterfaceImpl::setPortSSRC(PVMFPortInterface* aPort, uint32 aSSRC)
 {
-    return (iContainer->setPortSSRC(aPort, aSSRC));
+    return (iContainer->SetPortSSRC(aPort, aSSRC));
 }
 
 
@@ -151,7 +151,7 @@
         uint32 aNPTInMS,
         bool oPlayAfterASeek)
 {
-    return (iContainer->setPortRTPParams(aPort,
+    return (iContainer->SetPortRTPParams(aPort,
                                          aSeqNumBasePresent,
                                          aSeqNumBase,
                                          aRTPTimeBasePresent,
@@ -167,25 +167,25 @@
         uint32 aRR,
         uint32 aRS)
 {
-    return iContainer->setPortRTCPParams(aPort, aNumSenders, aRR, aRS);
+    return iContainer->SetPortRTCPParams(aPort, aNumSenders, aRR, aRS);
 }
 
 OSCL_EXPORT_REF
 PVMFTimestamp PVMFJitterBufferExtensionInterfaceImpl::getActualMediaDataTSAfterSeek()
 {
-    return (iContainer->getActualMediaDataTSAfterSeek());
+    return (iContainer->GetActualMediaDataTSAfterSeek());
 }
 
 OSCL_EXPORT_REF
 PVMFTimestamp PVMFJitterBufferExtensionInterfaceImpl::getMaxMediaDataTS()
 {
-    return (iContainer->getMaxMediaDataTS());
+    return (iContainer->GetMaxMediaDataTS());
 }
 
 OSCL_EXPORT_REF PVMFStatus
 PVMFJitterBufferExtensionInterfaceImpl::setServerInfo(PVMFJitterBufferFireWallPacketInfo& aServerInfo)
 {
-    return (iContainer->setServerInfo(aServerInfo));
+    return (iContainer->SetServerInfo(aServerInfo));
 }
 
 OSCL_EXPORT_REF PVMFStatus
@@ -237,10 +237,10 @@
 }
 
 OSCL_EXPORT_REF PVMFStatus
-PVMFJitterBufferExtensionInterfaceImpl::SetTransportType(PVMFPortInterface* aPort,
-        OSCL_String& aTransportType)
+PVMFJitterBufferExtensionInterfaceImpl::SetInputMediaHeaderPreParsed(PVMFPortInterface* aPort,
+        bool aHeaderPreParsed)
 {
-    return (iContainer->SetTransportType(aPort, aTransportType));
+    return (iContainer->SetInputMediaHeaderPreParsed(aPort, aHeaderPreParsed));
 }
 
 OSCL_EXPORT_REF PVMFStatus
diff --git a/nodes/streaming/jitterbuffernode/src/pvmf_jitter_buffer_impl.cpp b/nodes/streaming/jitterbuffernode/src/pvmf_jitter_buffer_impl.cpp
deleted file mode 100644
index 9cf47a3..0000000
--- a/nodes/streaming/jitterbuffernode/src/pvmf_jitter_buffer_impl.cpp
+++ /dev/null
@@ -1,1144 +0,0 @@
-/* ------------------------------------------------------------------
- * Copyright (C) 1998-2009 PacketVideo
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
- * express or implied.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- * -------------------------------------------------------------------
- */
-/**
- * @file pvmf_jitter_buffer_impl.cpp
- * @brief Jitter Buffer implementation
- */
-
-#ifndef OSCL_EXCLUSIVE_PTR_H_INCLUDED
-#include "oscl_exclusive_ptr.h"
-#endif
-#ifndef OSCL_BYTE_ORDER_H_INCLUDED
-#include "oscl_byte_order.h"
-#endif
-#ifndef PVMF_JITTER_BUFFER_H_INCLUDED
-#include "pvmf_jitter_buffer.h"
-#endif
-#ifndef PVMF_JITTER_BUFFER_INTERNAL_H_INCLUDED
-#include "pvmf_jitter_buffer_internal.h"
-#endif
-#ifndef PVMF_STREAMING_MEM_CONFIG_H_INCLUDED
-#include "pvmf_streaming_mem_config.h"
-#endif
-#ifndef OSCL_BIN_STREAM_H
-#include "oscl_bin_stream.h"
-#endif
-#ifndef PVMF_SM_CONFIG_H_INCLUDED
-#include "pvmf_sm_config.h"
-#endif
-
-PVMFJitterBufferImpl::PVMFJitterBufferImpl(const PvmfMimeString* aMimeType,
-        bool  aInPlaceProcessing)
-{
-    iLogger = NULL;
-    iDataPathLoggerIn = NULL;
-    iDataPathLoggerOut = NULL;
-    iClockLogger = NULL;
-    seqNumLock = false;
-    oEOS = false;
-    seqLockTimeStamp = 0;
-    SSRCLock = 0;
-    SSRCFromSetUpResponse = 0;
-    oSSRCFromSetUpResponseAvailable = false;
-    iMonotonicTimeStamp = 0;
-    iPrevTSIn = 0;
-    iPrevSeqNumBaseIn = 0;
-    iPrevTSOut = 0;
-    iPrevSeqNumBaseOut = 0;
-    iMaxAdjustedRTPTS = 0;
-    iPrevAdjustedRTPTS = 0;
-    iEstimatedServerClock = NULL;
-    iRTPTimeScale = 0;
-    iFirstSeqNum = 0;
-    iObserver = NULL;
-    iObserverContext = NULL;
-    iInPlaceProcessing = aInPlaceProcessing;
-    iMediaDataImplMemPool = NULL;
-    iMediaDataGroupAlloc = NULL;
-    iMediaMsgMemPool = NULL;
-    iServerClockUpdateNotificationObserver = NULL;
-
-    iInterArrivalJitterD = 0;
-    iPrevPacketTS = 0;
-    iPrevPacketRecvTime = 0;
-
-    iPlayListRTPTimeBaseSet = false;
-    iPlayListRTPTimeBase = 0;
-
-    isPrevNptTimeSet = false;
-    isPrevRtpTimeSet = false;
-    iPrevNptTimeInRTPTimeScale = 0;
-    iPrevRtpTimeBase = 0;
-
-    iLogger = PVLogger::GetLoggerObject("JitterBuffer");
-    iDataPathLoggerIn = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffer.in");
-    iDataPathLoggerOut = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffer.out");
-    iClockLogger = PVLogger::GetLoggerObject("clock.jitterbuffer");
-    iClockLoggerRebuff = PVLogger::GetLoggerObject("clock.jitterbuffernode.rebuffer");
-
-    iHeaderFormat = PVMF_JITTER_BUFFER_TRANSPORT_HEADER_FORMAT_UNKNOWN;
-    iSeqNum = 0;
-    iFirstASFPacketAfterRepos = true;
-
-    OSCL_StackString<8> rtp(_STRLIT_CHAR("RTP"));
-    const char* mime = aMimeType->get_cstr();
-    if (oscl_strncmp(mime, rtp.get_cstr(), 3) == 0)
-    {
-        iHeaderFormat = PVMF_JITTER_BUFFER_TRANSPORT_HEADER_RTP;
-    }
-    iBroadCastSession = false;
-
-    OsclExclusivePtr<PVMFMediaClock> arrivalClockAutoPtr;
-    PVMF_JITTER_BUFFER_NEW(NULL, PVMFMediaClock, (), iPacketArrivalClock);
-    arrivalClockAutoPtr.set(iPacketArrivalClock);
-
-    uint32 numNodes = 0;
-#if (PMVF_JITTER_BUFFER_NODE_USE_NO_RESIZE_ALLOC)
-    numNodes = PVMF_JB_NO_RESIZE_ALLOC_NUM_CHUNKS_RTP;
-#else
-    numNodes = DEFAULT_NUM_MEDIA_MSGS_IN_JITTER_BUFFER;
-#endif
-
-    OsclExclusivePtr<PVMFDynamicCircularArrayType> jitterBufferAutoPtr;
-    PVMF_JITTER_BUFFER_NEW(NULL,
-                           PVMFDynamicCircularArrayType,
-                           (numNodes, aMimeType),
-                           iJitterBuffer);
-
-    jitterBufferAutoPtr.set(iJitterBuffer) ;
-
-    iJitterBuffer->setPacketHeaderFormat(iHeaderFormat);
-
-    if (iInPlaceProcessing == false)
-    {
-        OsclExclusivePtr<PoolMemAlloc> mediaDataImplMemPoolAutoPtr;
-        typedef OsclMemPoolFixedChunkAllocator osclmempoolAllocType;
-        PVMF_JITTER_BUFFER_NEW(NULL,
-                               osclmempoolAllocType,
-                               (numNodes),
-                               iMediaDataImplMemPool);
-        mediaDataImplMemPoolAutoPtr.set(iMediaDataImplMemPool);
-
-        typedef PVMFMediaFragGroupCombinedAlloc<PoolMemAlloc> mediaFragGroupType;
-        OsclExclusivePtr<mediaFragGroupType> mediaDataGroupAutoPtr;
-        PVMF_JITTER_BUFFER_NEW(NULL,
-                               mediaFragGroupType,
-                               (numNodes,
-                                DEFAULT_NUM_FRAGMENTS_IN_MEDIA_MSG,
-                                iMediaDataImplMemPool),
-                               iMediaDataGroupAlloc);
-        mediaDataGroupAutoPtr.set(iMediaDataGroupAlloc);
-
-        iMediaDataGroupAlloc->create();
-
-        OsclExclusivePtr<PoolMemAlloc> mediaMsgMemPoolAutoPtr;
-        PVMF_JITTER_BUFFER_NEW(NULL,
-                               osclmempoolAllocType,
-                               (numNodes),
-                               iMediaMsgMemPool);
-        mediaMsgMemPoolAutoPtr.set(iMediaMsgMemPool);
-
-        mediaDataImplMemPoolAutoPtr.release();
-        mediaDataGroupAutoPtr.release();
-        mediaMsgMemPoolAutoPtr.release();
-    }
-
-    if (aMimeType != NULL)
-    {
-        iMimeType = aMimeType->get_cstr();
-    }
-
-    arrivalClockAutoPtr.release();
-    jitterBufferAutoPtr.release();
-
-    /* Start arrival clock */
-    iPacketArrivalClock->SetClockTimebase(iPacketArrivalTimeBase);
-    iPacketArrivalClock->Start();
-}
-
-PVMFJitterBufferImpl::~PVMFJitterBufferImpl()
-{
-    iLogger = NULL;
-    iDataPathLoggerIn = NULL;
-    iDataPathLoggerOut = NULL;
-    iClockLogger = NULL;
-    iClockLoggerRebuff = NULL;
-    iPacketArrivalClock->Stop();
-    iServerClockUpdateNotificationObserver = NULL;
-
-    PVMF_JITTER_BUFFER_TEMPLATED_DELETE(NULL, PVMFDynamicCircularArray<PVMFJitterBufferNodeAllocator>, PVMFDynamicCircularArray, iJitterBuffer);
-    PVMF_JITTER_BUFFER_DELETE(NULL, PVMFMediaClock, iPacketArrivalClock);
-
-    if (iInPlaceProcessing == false)
-    {
-        if (iMediaDataGroupAlloc != NULL)
-        {
-            iMediaDataGroupAlloc->CancelFreeChunkAvailableCallback();
-            iMediaDataGroupAlloc->removeRef();
-            iMediaDataGroupAlloc = NULL;
-        }
-        if (iMediaDataImplMemPool != NULL)
-        {
-            iMediaDataImplMemPool->removeRef();
-            iMediaDataImplMemPool = NULL;
-        }
-        if (iMediaMsgMemPool != NULL)
-        {
-            iMediaMsgMemPool->removeRef();
-            iMediaMsgMemPool = NULL;
-        }
-    }
-}
-
-void
-PVMFJitterBufferImpl::ResetJitterBuffer()
-{
-    FlushJitterBuffer();
-    iJitterBuffer->ResetJitterBufferStats();
-    oEOS = false;
-    iRTPInfoParamsVec.clear();
-    iPlayListRTPTimeBaseSet = false;
-    iPlayListRTPTimeBase = 0;
-    if (iHeaderFormat != PVMF_JITTER_BUFFER_TRANSPORT_HEADER_ASF)
-    {
-        seqNumLock = false;
-    }
-    iMonotonicTimeStamp = 0;
-    iPrevPacketTS = 0;
-    iPrevTSOut = 0;
-    iSeqNum = 0;
-    iMaxAdjustedRTPTS = 0;
-    isPrevNptTimeSet = false;
-    iPrevNptTimeInRTPTimeScale = 0;
-    isPrevRtpTimeSet = false;
-    iPrevRtpTimeBase = 0;
-    UpdateEstimatedServerClockDiscrete(true);
-    iFirstASFPacketAfterRepos = true;
-}
-
-PVMFJitterBufferAddPktStatus
-PVMFJitterBufferImpl::addPacket(PVMFSharedMediaDataPtr& dataPacket)
-{
-    if (oEOS)
-    {
-        /* EOS received - do not register packet */
-        PVMF_JBNODE_LOGWARNING((0, "0x%x PVMFJitterBufferImpl::addPacket: After EOS Reached!!!", this));
-        return PVMF_JITTER_BUFFER_ADD_PKT_EOS_REACHED;
-    }
-
-    if (seqNumLock)
-    {
-        if (oSSRCFromSetUpResponseAvailable == false)
-        {
-            oSSRCFromSetUpResponseAvailable = true;
-            SSRCLock = dataPacket->getStreamID();
-            PVMF_JBNODE_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferImpl::addPacket: Ser No SSRC, set to 1st pkt SSRC %d", SSRCLock));
-        }
-        /* Filter based on SSRC */
-        if (dataPacket->getStreamID() == SSRCLock)
-        {
-            PVMFJitterBufferAddElemStatus status;
-
-            status = iJitterBuffer->addElement(dataPacket, iFirstSeqNum);
-            if (status == PVMF_JITTER_BUFFER_ADD_ELEM_SUCCESS)
-            {
-                PVMF_JBNODE_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferImpl::addPacket: MimeType=%s TS=%u, SEQNUM= %d",
-                                               iMimeType.get_cstr(), dataPacket->getTimestamp(), dataPacket->getSeqNum()));
-
-                if (iRTPInfoParamsVec.size() > 0)
-                {
-                    /*
-                     * Calculate adjusted RTP TS - Will be used to update
-                     * the estimated server clock, if any only if some rtp-info
-                     * params have been set
-                     */
-                    ComputeMaxAdjustedRTPTS();
-                }
-            }
-            else if (status == PVMF_JITTER_BUFFER_ADD_ELEM_ERR_LATE_PACKET)
-            {
-                PVMF_JBNODE_LOGDATATRAFFIC_IN_E((0, "PVMFJitterBufferImpl::addPacket - Late: MimeType=%s TS=%d, SEQNUM= %d",
-                                                 iMimeType.get_cstr(), dataPacket->getTimestamp(), dataPacket->getSeqNum()));
-            }
-            else if (status == PVMF_JITTER_BUFFER_ADD_ELEM_PACKET_OVERWRITE)
-            {
-                PVMF_JBNODE_LOGDATATRAFFIC_IN_E((0, "PVMFJitterBufferImpl::addPacket - OverWrite: MimeType=%s TS=%d, SEQNUM= %d",
-                                                 iMimeType.get_cstr(), dataPacket->getTimestamp(), dataPacket->getSeqNum()));
-            }
-            else if (status == PVMF_JITTER_BUFFER_ADD_ELEM_UNEXPECTED_DATA)
-            {
-                PVMF_JBNODE_LOGDATATRAFFIC_IN_E((0, "PVMFJitterBufferImpl::addPacket - Unexpected: MimeType=%s TS=%d, SEQNUM= %d",
-                                                 iMimeType.get_cstr(), dataPacket->getTimestamp(), dataPacket->getSeqNum()));
-                return PVMF_JITTER_BUFFER_ADD_PKT_UNEXPECTED_DATA;
-            }
-
-            /* Calculate inter arrival jitter */
-            UpdateInterArrivalJitter(dataPacket->getTimestamp());
-        }
-    }
-    else
-    {
-        if (oSSRCFromSetUpResponseAvailable && (dataPacket->getStreamID() != SSRCFromSetUpResponse))
-        {//discard packet
-            PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferImpl::addPacket: ERROR wrong ssrc %d", dataPacket->getStreamID()));
-            return PVMF_JITTER_BUFFER_ADD_PKT_SUCCESS;
-        }
-        // Add packet to temporary array
-        iFirstDataPackets.push_back(dataPacket);
-
-        const uint cPktNeededForVote = 5;
-        if (iFirstDataPackets.size() < cPktNeededForVote)
-            return PVMF_JITTER_BUFFER_ADD_PKT_SUCCESS;
-
-        //Majortiy vote for SSRC first
-        //0 count; 1 ssrc; 2 seqbase; 3 timestamp; uint32 PVMFTimestamp;
-        uint32 my_ssrc[cPktNeededForVote][4];
-        for (uint32 i = 0; i < cPktNeededForVote; i++)
-            my_ssrc[i][0] = my_ssrc[i][1] = my_ssrc[i][2] = my_ssrc[i][3] = 0;
-
-        {
-            // 1. vote
-            for (uint32 i = 0; i < cPktNeededForVote; i++)
-            {
-                uint32 ssrc = iFirstDataPackets[i]->getStreamID();
-                for (uint32 j = 0; j < cPktNeededForVote; j++)
-                {
-                    if (my_ssrc[j][0] > 0)
-                    {
-                        if (ssrc ==  my_ssrc[j][1])
-                        {
-                            my_ssrc[j][0]++;
-                            if (iFirstDataPackets[i]->getSeqNum() < my_ssrc[j][2])
-                            {
-                                my_ssrc[j][2] = iFirstDataPackets[i]->getSeqNum();
-                                my_ssrc[j][3] = iFirstDataPackets[i]->getTimestamp();
-                            }
-                            break;
-                        }
-                    }
-                    else
-                    {
-                        my_ssrc[j][0]++; //my_ssrc[j][0]=1
-                        my_ssrc[j][1] = ssrc;
-                        my_ssrc[j][2] = iFirstDataPackets[i]->getSeqNum();
-                        my_ssrc[j][3] = iFirstDataPackets[i]->getTimestamp();
-                        break;
-                    }
-                }
-            }
-        }
-
-        {// 2. poll ssrc
-            uint32 first_ssrc_index = 0, second_ssrc_index = 1;
-            if (my_ssrc[0][0] < my_ssrc[1][0])
-            {
-                first_ssrc_index = 1;
-                second_ssrc_index = 0;
-            }
-            for (uint32 i = 2; i < cPktNeededForVote; i++)
-            {
-                if (my_ssrc[i][0] > first_ssrc_index)
-                {
-                    second_ssrc_index = first_ssrc_index;
-                    first_ssrc_index = i;
-                }
-                else if (my_ssrc[i][0] > second_ssrc_index)
-                {
-                    second_ssrc_index =  i;
-                }
-            }
-            if (my_ssrc[first_ssrc_index][0] <= my_ssrc[second_ssrc_index][0])
-            {
-                //got a tie. should rarely happen
-                //for now, just pick the first one
-                PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferImpl::addPacket: ERROR first %d second %d", first_ssrc_index, second_ssrc_index));
-            }
-            SSRCLock = my_ssrc[first_ssrc_index][1];
-            seqNumLock = true;
-
-            //if we got RTPInfo by now, we should still use it
-            if (iRTPInfoParamsVec.size() > 0)
-            {
-                Oscl_Vector<PVMFRTPInfoParams, PVMFJitterBufferNodeAllocator>::iterator it;
-                it = iRTPInfoParamsVec.begin();
-                iFirstSeqNum = (it->seqNumBaseSet) ? it->seqNum : my_ssrc[first_ssrc_index][2];
-                seqLockTimeStamp = (it->rtpTimeBaseSet) ? it->rtpTime : my_ssrc[first_ssrc_index][3];
-            }
-            else
-            {
-                iFirstSeqNum = my_ssrc[first_ssrc_index][2];
-                seqLockTimeStamp = my_ssrc[first_ssrc_index][3];
-            }
-            // iFirstSeqNum must be initialized when we come here
-            iJitterBuffer->setFirstSeqNumAdded(iFirstSeqNum);
-            CheckForRTPTimeAndRTPSeqNumberBase();
-        }
-        // 3.throw away the pkt not belong to current session and register packets
-
-        bool bNoErr = true;
-        Oscl_Vector<PVMFSharedMediaDataPtr, PVMFJitterBufferNodeAllocator>::iterator it;
-        for (it = iFirstDataPackets.begin(); it != iFirstDataPackets.end();		it++)
-        {
-            if ((*it)->getStreamID() == SSRCLock)
-            {
-                if (! iJitterBuffer->addElement(*it, iFirstSeqNum))
-                {
-                    PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferImpl::addPacket: addElement failed"));
-                    bNoErr = false;
-                }
-                else
-                {
-                    PVMF_JBNODE_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferImpl::addPacket: MimeType=%s TS=%d, SEQNUM= %d",
-                                                   iMimeType.get_cstr(), (*it)->getTimestamp(), (*it)->getSeqNum()));
-                }
-            }
-        }
-
-        iFirstDataPackets.clear();
-        // Calculate inter arrival jitter
-        UpdateInterArrivalJitter(dataPacket->getTimestamp());
-        if (iRTPInfoParamsVec.size() > 0)
-        {
-            /*
-            * Calculate adjusted RTP TS - Will be used to update
-            * the estimated server clock, if any only if some rtp-info
-            * params have been set
-            	*/
-            ComputeMaxAdjustedRTPTS();
-        }
-
-        if (!bNoErr)
-            return PVMF_JITTER_BUFFER_ADD_PKT_ERROR;
-
-    }
-
-    PVMFJitterBufferStats stats = getJitterBufferStats();
-    if (stats.totalPacketsLost > 0)
-    {
-        PVMF_JBNODE_LOGWARNING((0, "Packet Loss: MimeType=%s, NumPacketsLost=%d", iMimeType.get_cstr(), stats.totalPacketsLost));
-    }
-    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferImpl::addPacket - JB Occup Stats - MimeType=%s, MaxSize=%d, CurrOccupany=%d", iMimeType.get_cstr(), iJitterBuffer->getArraySize(), iJitterBuffer->getNumElements()));
-    return PVMF_JITTER_BUFFER_ADD_PKT_SUCCESS;
-}
-
-PVMFSharedMediaDataPtr PVMFJitterBufferImpl::retrievePacket()
-{
-    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferImpl::retrievePacket - JB Occup Stats - MimeType=%s, MaxSize=%d, CurrOccupany=%d", iMimeType.get_cstr(), iJitterBuffer->getArraySize(), iJitterBuffer->getNumElements()));
-
-    PVMFSharedMediaDataPtr elem = iJitterBuffer->retrieveElement();
-    if (elem.GetRep() != NULL)
-    {
-        /*
-         * Adjust TimeStamp - Goal is to provide a monotonically increasing
-         * timestamp.
-         */
-        PVMFTimestamp currTS = elem->getTimestamp();
-        DeterminePrevTimeStamp(elem->getSeqNum());
-        iMonotonicTimeStamp += (currTS - iPrevTSOut);
-        PVMFTimestamp adjustedTS =
-            (PVMFTimestamp)(Oscl_Int64_Utils::get_uint64_lower32(iMonotonicTimeStamp));
-        elem->setTimestamp(adjustedTS);
-
-        PVMFJitterBufferStats* jbStatsPtr = iJitterBuffer->getStatsPtr();
-        jbStatsPtr->maxTimeStampRetrievedWithoutRTPOffset = adjustedTS;
-
-        PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferImpl::retrievePacket: MimeType=%s, TS=%d, SEQNUM= %d",
-                                        iMimeType.get_cstr(),
-                                        elem->getTimestamp(),
-                                        elem->getSeqNum()));
-        iPrevTSOut = currTS;
-    }
-    return elem;
-}
-
-PVMFTimestamp PVMFJitterBufferImpl::peekNextElementTimeStamp()
-{
-    if (iJitterBuffer->getNumElements() > 0)
-    {
-        PVMFTimestamp currTS;
-        PVMFTimestamp prevTS;
-        uint32 aSeqNum;
-        iJitterBuffer->peekNextElementTimeStamp(currTS, aSeqNum);
-        DeterminePrevTimeStampPeek(aSeqNum, prevTS);
-        uint64 ts64 = iMonotonicTimeStamp;
-        ts64 += (currTS - prevTS);
-        PVMFTimestamp adjTS =
-            (PVMFTimestamp)(Oscl_Int64_Utils::get_uint64_lower32(ts64));
-        return (adjTS);
-    }
-    else
-    {
-        PVMFTimestamp adjTS =
-            (PVMFTimestamp)(Oscl_Int64_Utils::get_uint64_lower32(iMonotonicTimeStamp));
-        return (adjTS);
-    }
-}
-
-PVMFTimestamp PVMFJitterBufferImpl::peekMaxElementTimeStamp()
-{
-    if (iJitterBuffer->getNumElements() > 0)
-    {
-        PVMFTimestamp currTS;
-        PVMFTimestamp maxTS;
-        PVMFTimestamp prevTS;
-        uint32 aSeqNum;
-        iJitterBuffer->peekNextElementTimeStamp(currTS, aSeqNum);
-        DeterminePrevTimeStampPeek(aSeqNum, prevTS);
-        iJitterBuffer->peekMaxElementTimeStamp(maxTS, aSeqNum);
-        uint64 ts64 = iMonotonicTimeStamp;
-        ts64 += (maxTS - prevTS);
-        PVMFTimestamp adjTS =
-            (PVMFTimestamp)(Oscl_Int64_Utils::get_uint64_lower32(ts64));
-        return (adjTS);
-    }
-    else
-    {
-        PVMFTimestamp adjTS =
-            (PVMFTimestamp)(Oscl_Int64_Utils::get_uint64_lower32(iMonotonicTimeStamp));
-        return (adjTS);
-    }
-}
-
-void PVMFJitterBufferImpl::UpdateInterArrivalJitter(PVMFTimestamp currPacketTS)
-{
-    /* D(i-1,i) = (RecvT(i) - RTP_TS(i)) -
-    			  (RecvT(i-1) - RTP_TS(i-1)) */
-    uint32 currPacketRecvTime32;
-    bool overflowFlag = false;
-    iPacketArrivalClock->GetCurrentTime32(currPacketRecvTime32, overflowFlag,
-                                          PVMF_MEDIA_CLOCK_MSEC);
-
-    int32 ts_diff = currPacketTS - iPrevPacketTS;
-    int32 arrival_diff = currPacketRecvTime32 - iPrevPacketRecvTime;
-
-    int32 arrivalJitter = ts_diff - arrival_diff;
-    if (ts_diff < arrival_diff)
-        arrivalJitter = arrival_diff - ts_diff;
-
-    /* J(i) = J(i-1) + (ABS(D(i-1,i)) - J(i-1))/16.0 */
-    iInterArrivalJitterD += (arrivalJitter - iInterArrivalJitterD) / 16.0;
-    /* Round up */
-    iInterArrivalJitter = (uint32)(iInterArrivalJitterD + 0.5);
-
-    /* Update variables */
-    iPrevPacketTS = currPacketTS;
-    iPrevPacketRecvTime = currPacketRecvTime32;
-
-    return;
-}
-
-bool PVMFJitterBufferImpl::ParsePacketHeader(PVMFSharedMediaDataPtr& inDataPacket,
-        PVMFSharedMediaDataPtr& outDataPacket,
-        uint32 aFragIndex)
-{
-    if (iHeaderFormat == PVMF_JITTER_BUFFER_TRANSPORT_HEADER_RTP)
-    {
-        return (ParseRTPHeader(inDataPacket, outDataPacket, aFragIndex));
-    }
-    PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferImpl::ParsePacketHeader: Unknown Header Format"));
-    return false;
-}
-
-bool PVMFJitterBufferImpl::ParseRTPHeader(PVMFSharedMediaDataPtr& rtpPacket,
-        PVMFSharedMediaDataPtr& dataPacket,
-        uint32 aFragIndex)
-{
-    OsclSharedPtr<PVMFMediaDataImpl> mediaDataIn;
-    if (!rtpPacket->getMediaDataImpl(mediaDataIn))
-    {
-        PVMF_JBNODE_LOGERROR((0, "0x%x PVMFJitterBufferImpl::ParseRTPHeader: corrupt input media msg", this));
-        return false;
-    }
-
-    OsclRefCounterMemFrag memFragIn;
-    rtpPacket->getMediaFragment(aFragIndex, memFragIn);
-
-    /* Get start of RTP packet */
-    uint8* rtpHeader    = (uint8*)(memFragIn.getMemFrag().ptr);
-    uint32 rtpPacketLen = memFragIn.getMemFrag().len;
-
-    /* is this a legal data packet? */
-    if (rtpPacketLen <= RTP_FIXED_HEADER_SIZE)
-    {
-        PVMF_JBNODE_LOGERROR((0, "0x%x PVMFJitterBufferImpl::ParseRTPHeader: illegal pkt size", this));
-        return false;
-    }
-
-    /* Parse RTP version */
-    uint8  rtpVersion = (((*rtpHeader) & RTP_HEADER_V_BIT_MASK) >> RTP_HEADER_V_BIT_OFFSET);
-    if (rtpVersion != SUPPORTED_RTP_HEADER_VERSION)
-    {
-        PVMF_JBNODE_LOGERROR((0, "0x%x PVMFJitterBufferImpl::ParseRTPHeader: illegal rtp version", this));
-        return false;
-    }
-
-    /* Check for padding */
-    uint8 pbit = (((*rtpHeader) & RTP_HEADER_P_BIT_MASK) >> RTP_HEADER_P_BIT_OFFSET);
-    uint8 numPaddingOctets = 0;
-    if (pbit)
-    {
-        numPaddingOctets = *(rtpHeader + (rtpPacketLen - 1));
-    }
-
-    /* Check for header extension */
-    uint8 xbit = (((*rtpHeader) & RTP_HEADER_X_BIT_MASK) >> RTP_HEADER_X_BIT_OFFSET);
-
-    /* Check for CSRC */
-    uint8 csrcCount = ((*rtpHeader) & RTP_HEADER_CC_BIT_MASK);
-
-    rtpHeader++;
-
-    /* Parse M bit */
-    uint8 mbit = (((*rtpHeader) & RTP_HEADER_M_BIT_MASK) >> RTP_HEADER_M_BIT_OFFSET);
-
-    rtpHeader++;
-
-    /* Parse sequence number */
-    uint16 seqNum16 = 0;
-    oscl_memcpy((char *)&seqNum16, rtpHeader, sizeof(seqNum16));
-    big_endian_to_host((char *)&seqNum16, sizeof(seqNum16));
-    uint32 seqNum = (uint32)seqNum16;
-    rtpHeader += 2;
-
-    /* Parse rtp time stamp */
-    uint32 ts32 = 0;
-    oscl_memcpy((char *)&ts32, rtpHeader, sizeof(ts32));
-    big_endian_to_host((char *)&ts32, sizeof(ts32));
-    PVMFTimestamp rtpTimeStamp = (PVMFTimestamp)ts32;
-    rtpHeader += 4;
-
-    /* Parse SSRC */
-    uint32 ssrc32 = 0;
-    oscl_memcpy((char *)&ssrc32, rtpHeader, sizeof(ssrc32));
-    big_endian_to_host((char *)&ssrc32, sizeof(ssrc32));
-    uint32 SSRC = ssrc32;
-    rtpHeader += 4;
-
-    rtpPacketLen -= RTP_FIXED_HEADER_SIZE;
-
-    /* Check for CSRC list - If present skip over */
-    if (csrcCount)
-    {
-        if ((uint32)(csrcCount*4) > rtpPacketLen)
-        {
-            PVMF_JBNODE_LOGERROR((0, "0x%x PVMFJitterBufferImpl::ParseRTPHeader: Corrupt CSRC", this));
-            return false;
-        }
-        rtpHeader += (csrcCount * 4);
-        rtpPacketLen -= (csrcCount * 4);
-    }
-
-    /* Check for extended RTP header - If present skip over */
-    if (xbit)
-    {
-        rtpHeader += 2;
-        uint16 len16 = 0;
-        oscl_memcpy((char *)&len16, rtpHeader, sizeof(len16));
-        big_endian_to_host((char *)&len16, sizeof(len16));
-        uint32 extensionHeaderLen = (uint32)len16;
-        rtpPacketLen -= 4;
-        if ((extensionHeaderLen*4) > rtpPacketLen)
-        {
-            PVMF_JBNODE_LOGERROR((0, "0x%x PVMFJitterBufferImpl::ParseRTPHeader: Corrupt Extended Header Length", this));
-            return false;
-        }
-        rtpHeader += (extensionHeaderLen * 4);
-        rtpPacketLen -= (extensionHeaderLen * 4);
-    }
-
-    /* Ignore padding octets */
-    if (numPaddingOctets)
-    {
-        if ((uint32)numPaddingOctets > rtpPacketLen)
-        {
-            PVMF_JBNODE_LOGERROR((0, "0x%x PVMFJitterBufferImpl::ParseRTPHeader: Corrupt Padding Length", this));
-            return false;
-        }
-        rtpPacketLen -= numPaddingOctets;
-    }
-
-    if (iInPlaceProcessing == false)
-    {
-        OsclSharedPtr<PVMFMediaDataImpl> mediaDataOut;
-        PVMFStatus status;
-
-        status = Allocate(mediaDataOut);
-
-        if (status == false)
-        {
-            PVMF_JBNODE_LOGERROR((0, "0x%x PVMFJitterBufferImpl::ParseRTPHeader: Jitter Buffer Full", this));
-            return false;
-        }
-
-        OsclRefCounterMemFrag memFragOut(memFragIn);
-        memFragOut.getMemFrag().ptr = rtpHeader;
-        memFragOut.getMemFrag().len = rtpPacketLen;
-
-        mediaDataOut->appendMediaFragment(memFragOut);
-
-        uint32 markerInfo = 0;
-        if (mbit == 1) markerInfo |= PVMF_MEDIA_DATA_MARKER_INFO_M_BIT;
-        mediaDataOut->setMarkerInfo(markerInfo);
-
-        bool retVal;
-
-        retVal = CreateMediaData(dataPacket, mediaDataOut);
-
-        if (retVal == false)
-        {
-            PVMF_JBNODE_LOGERROR((0, "0x%x PVMFJitterBufferImpl::ParseRTPHeader: Jitter Buffer Full", this));
-            return false;
-        }
-
-
-        dataPacket->setTimestamp(rtpTimeStamp);
-        dataPacket->setStreamID(SSRC);
-        dataPacket->setSeqNum(seqNum);
-    }
-    else
-    {
-        memFragIn.getMemFrag().ptr = rtpHeader;
-        memFragIn.getMemFrag().len = rtpPacketLen;
-        mediaDataIn->clearMediaFragments();
-        mediaDataIn->appendMediaFragment(memFragIn);
-        uint32 markerInfo = 0;
-        if (mbit == 1) markerInfo |= PVMF_MEDIA_DATA_MARKER_INFO_M_BIT;
-        mediaDataIn->setMarkerInfo(markerInfo);
-
-        rtpPacket->setTimestamp(rtpTimeStamp);
-        rtpPacket->setStreamID(SSRC);
-        rtpPacket->setSeqNum(seqNum);
-    }
-
-    PVMF_JBNODE_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferImpl::ParseRTPHeader: SSRC=%u, rtpSeqNum=%d, rtpTs=%u, rtpPacketLen=%d",
-                                   SSRC, seqNum, rtpTimeStamp, rtpPacketLen));
-
-    return true;
-}
-
-bool PVMFJitterBufferImpl::CreateMediaData(PVMFSharedMediaDataPtr& dataPacket, OsclSharedPtr<PVMFMediaDataImpl>& mediaDataOut)
-{
-    int32 err;
-
-    OSCL_TRY(err,
-             dataPacket = PVMFMediaData::createMediaData(mediaDataOut,
-                          iMediaMsgMemPool););
-
-    if (err != OsclErrNone)
-    {
-        return false;
-    }
-
-    return true;
-}
-
-
-bool PVMFJitterBufferImpl::Allocate(OsclSharedPtr<PVMFMediaDataImpl>& mediaDataOut)
-{
-    int32 err;
-    OSCL_TRY(err,
-             mediaDataOut = iMediaDataGroupAlloc->allocate());
-
-    if (err != OsclErrNone)
-    {
-        return false;
-    }
-
-    // If there is no memory left return false
-    if (mediaDataOut.GetRep() == NULL)
-    {
-        return false;
-    }
-
-    return true;
-}
-
-
-void PVMFJitterBufferImpl::DeterminePrevTimeStampPeek(uint32 aSeqNum,
-        PVMFTimestamp& aPrevTS)
-{
-    if (iHeaderFormat == PVMF_JITTER_BUFFER_TRANSPORT_HEADER_RTP)
-    {
-        PVMFRTPInfoParams* rtpInfoParams = FindRTPInfoParams(aSeqNum);
-        if (rtpInfoParams == NULL)
-        {
-            if (iRTPInfoParamsVec.size() == 0)
-            {
-                PVMF_JBNODE_LOGWARNING((0, "PVMFJitterBufferImpl::DeterminePrevTimeStamp: RTPInfoVec Empty"));
-                /* Use the value from the first packet */
-                aPrevTS = seqLockTimeStamp;
-            }
-            else
-            {
-                PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferImpl::DeterminePrevTimeStampPeek: illegal seq number"));
-                OSCL_LEAVE(OsclErrArgument);
-            }
-            return; // no need to continue here
-        }
-        else
-        {
-            if (rtpInfoParams->seqNum > iPrevSeqNumBaseOut)
-            {
-                aPrevTS = rtpInfoParams->rtpTime;
-            }
-            else
-            {
-                aPrevTS = iPrevTSOut;
-            }
-        }
-    }
-    else
-    {
-        aPrevTS = iPrevTSOut;
-    }
-}
-
-void PVMFJitterBufferImpl::DeterminePrevTimeStamp(uint32 aSeqNum)
-{
-    if (iHeaderFormat == PVMF_JITTER_BUFFER_TRANSPORT_HEADER_RTP)
-    {
-        PVMFRTPInfoParams* rtpInfoParams = FindRTPInfoParams(aSeqNum);
-        if (rtpInfoParams == NULL)
-        {
-            if (iRTPInfoParamsVec.size() == 0)
-            {
-                PVMF_JBNODE_LOGWARNING((0, "PVMFJitterBufferImpl::DeterminePrevTimeStamp: RTPInfoVec Empty"));
-                /* Use the value from the first packet */
-                iPrevTSOut = seqLockTimeStamp;
-                iPrevTSIn = seqLockTimeStamp;
-                iPrevAdjustedRTPTS = seqLockTimeStamp;
-                iPrevSeqNumBaseOut = iFirstSeqNum;
-                iPrevSeqNumBaseIn = iFirstSeqNum;
-
-                PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferImpl::DeterminePrevTimeStamp: illegal seq number = %d", aSeqNum));
-                return;
-            }
-            else
-            {
-                PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferImpl::DeterminePrevTimeStamp: illegal seq number = %d", aSeqNum));
-                OSCL_LEAVE(OsclErrArgument);
-            }
-        }
-        if (rtpInfoParams->seqNum > iPrevSeqNumBaseOut)
-        {
-            /* We need to adjust iMonotonicTimeStamp as well for resume */
-            if (rtpInfoParams->isPlayAfterPause && rtpInfoParams->nptTimeBaseSet && isPrevNptTimeSet && isPrevRtpTimeSet)
-            {
-                uint64 CurrNptTime, PrevNptTime;
-                Oscl_Int64_Utils::set_uint64(CurrNptTime, 0, rtpInfoParams->nptTimeInRTPTimeScale);
-                Oscl_Int64_Utils::set_uint64(PrevNptTime, 0, iPrevNptTimeInRTPTimeScale + iPrevTSOut - iPrevRtpTimeBase);
-                iMonotonicTimeStamp = iMonotonicTimeStamp + CurrNptTime - PrevNptTime;
-                PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferImpl::DeterminePrevTimeStamp: TS adjustment for resume"
-                                     "nptTimeInRTPTimeScale=%d, iPrevNptTimeInRTPTimeScale=%d, iPrevRtpTimeBase=%d, iPrevTSOut=%d", rtpInfoParams->nptTimeInRTPTimeScale, iPrevNptTimeInRTPTimeScale, iPrevRtpTimeBase, iPrevTSOut));
-            }
-            if (rtpInfoParams->nptTimeBaseSet)
-            {
-                iPrevNptTimeInRTPTimeScale = rtpInfoParams->nptTimeInRTPTimeScale;
-                isPrevNptTimeSet = true;
-            }
-            else
-            {
-                isPrevNptTimeSet = false;
-            }
-            if (rtpInfoParams->rtpTimeBaseSet)
-            {
-                iPrevRtpTimeBase = rtpInfoParams->rtpTime;
-                isPrevRtpTimeSet = true;
-            }
-            else
-            {
-                isPrevRtpTimeSet = false;
-            }
-            PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferImpl::DeterminePrevTimeStamp: TS update for "
-                                 "iPrevNptTimeInRTPTimeScale=%d, iPrevRtpTimeBase=%d", rtpInfoParams->nptTimeInRTPTimeScale, rtpInfoParams->rtpTime));
-            iPrevSeqNumBaseOut = rtpInfoParams->seqNum;
-            iPrevTSOut = rtpInfoParams->rtpTime;
-        }
-        PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferImpl::DeterminePrevTimeStamp: RTPInfoSeqNum=%d, iPrevSeqNumBaseOut=%d, iPrevTSOut=%u",
-                             rtpInfoParams->seqNum, iPrevSeqNumBaseOut, iPrevTSOut));
-    }
-}
-
-void PVMFJitterBufferImpl::ComputeMaxAdjustedRTPTS()
-{
-    PVMFJitterBufferStats jbStats = getJitterBufferStats();
-
-    uint32 aSeqNum = jbStats.maxSeqNumReceived;
-    PVMFTimestamp aTS = jbStats.maxTimeStampRegistered;
-
-    PVMFRTPInfoParams* rtpInfoParams = FindRTPInfoParams(aSeqNum);
-    if (rtpInfoParams == NULL)
-    {
-        PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferImpl::ComputeMaxAdjustedRTPTS: illegal seq number"));
-        OSCL_LEAVE(OsclErrArgument);
-    }
-
-    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferImpl::ComputeMaxAdjustedRTPTS - maxSeqNumReceived=%d, rtpInfoParams->seqNum=%d, iPrevSeqNumBaseIn=%d, Mime=%s",
-                         aSeqNum, rtpInfoParams->seqNum, iPrevSeqNumBaseIn, iMimeType.get_cstr()));
-
-    if (rtpInfoParams->seqNum > iPrevSeqNumBaseIn)
-    {
-        iPrevSeqNumBaseIn = rtpInfoParams->seqNum;
-        iPrevTSIn = rtpInfoParams->rtpTime;
-    }
-    iMaxAdjustedRTPTS += (aTS - iPrevAdjustedRTPTS);
-    iPrevAdjustedRTPTS = aTS;
-
-    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferImpl::ComputeMaxAdjustedRTPTS - maxTimeStampRegistered=%u, iPrevAdjustedRTPTS=%u, iMaxAdjustedRTPTS=%u, Mime=%s",
-                         aTS, iPrevAdjustedRTPTS, iMaxAdjustedRTPTS, iMimeType.get_cstr()));
-
-    UpdateEstimatedServerClock();
-}
-
-void
-PVMFJitterBufferImpl::PurgeElementsWithSeqNumsLessThan(uint32 aSeqNum,
-        uint32 aPlayerClockMS)
-{
-    iJitterBuffer->PurgeElementsWithSeqNumsLessThan(aSeqNum, iPrevSeqNumBaseOut);
-
-    {
-        iMaxAdjustedRTPTS =
-            Oscl_Int64_Utils::get_uint64_lower32(iMonotonicTimeStamp);
-        /*
-         * In case of 3GPP streaming this clock adjustment is performed
-         * at a later point, via the "AdjustRTPTimeStamp" API call from
-         * jitter buffer node.
-         */
-        OSCL_UNUSED_ARG(aPlayerClockMS);
-    }
-
-    PVMF_JBNODE_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferImpl::PurgeElementsWithSeqNumsLessThan - SeqNum=%d",
-                                   aSeqNum));
-}
-
-void
-PVMFJitterBufferImpl::PurgeElementsWithTimestampLessThan(PVMFTimestamp aTS)
-{
-    PVMFTimestamp rtpTS;
-    if (iPlayListRTPTimeBaseSet)
-    {
-        rtpTS = iPlayListRTPTimeBase + aTS;
-    }
-    else
-    {
-        rtpTS = aTS;
-    }
-
-    iJitterBuffer->PurgeElementsWithTimestampLessThan(rtpTS);
-    iMaxAdjustedRTPTS = aTS;
-    //iPrevAdjustedRTPTS = rtpTS;
-    UpdateEstimatedServerClock(true);
-    iMonotonicTimeStamp = aTS;
-    iPrevTSOut = rtpTS;
-    PVMF_JBNODE_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferImpl::PurgeElementsWithTimestampLessThan - ntpTS=%u, rtpTS=%u",
-                                   aTS, rtpTS));
-}
-
-void PVMFJitterBufferImpl::UpdateEstimatedServerClock(bool oFreshStart)
-{
-    uint32 rtpTSInMS;
-    uint32 currentTime32 = 0;
-    uint32 currentTimeBase32 = 0;
-    uint32 adjustTime32 = 0;
-    bool overflowFlag = false;
-
-    if (oFreshStart)
-    {
-        uint32 in_wrap_count = 0;
-        iEstServClockMediaClockConvertor.set_clock(iMaxAdjustedRTPTS, in_wrap_count);
-        rtpTSInMS = iEstServClockMediaClockConvertor.get_converted_ts(1000);
-        iEstimatedServerClock->Stop();
-
-        iEstimatedServerClock->SetStartTime32(rtpTSInMS,
-                                              PVMF_MEDIA_CLOCK_MSEC, overflowFlag);
-        iEstimatedServerClock->Start();
-        PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferImpl::UpdateEstimatedServerClock - Setting start time - MaxAdjustedRTPTS=%u, StartTime=%d",
-                              iMaxAdjustedRTPTS, rtpTSInMS));
-    }
-    else
-    {
-        iEstServClockMediaClockConvertor.update_clock(iMaxAdjustedRTPTS);
-        rtpTSInMS = iEstServClockMediaClockConvertor.get_converted_ts(1000);
-        adjustTime32 = rtpTSInMS;
-        bool overflowFlag = false;
-        iEstimatedServerClock->GetCurrentTime32(currentTime32, overflowFlag,
-                                                PVMF_MEDIA_CLOCK_MSEC,
-                                                currentTimeBase32);
-        if (iHeaderFormat == PVMF_JITTER_BUFFER_TRANSPORT_HEADER_ASF)
-        {
-            if (currentTime32 > adjustTime32)
-            {
-                iEstimatedServerClock->Stop();
-                iEstimatedServerClock->SetStartTime32(adjustTime32, PVMF_MEDIA_CLOCK_MSEC, overflowFlag);
-                iEstimatedServerClock->Start();
-            }
-            else
-            {
-
-                iEstimatedServerClock->AdjustClockTime32(currentTime32,
-                        currentTimeBase32,
-                        adjustTime32,
-                        PVMF_MEDIA_CLOCK_MSEC,
-                        overflowFlag);
-            }
-        }
-        else
-        {
-            iEstimatedServerClock->AdjustClockTime32(currentTime32,
-                    currentTimeBase32,
-                    adjustTime32,
-                    PVMF_MEDIA_CLOCK_MSEC,
-                    overflowFlag);
-        }
-        iEstimatedServerClock->GetCurrentTime32(currentTime32, overflowFlag,
-                                                PVMF_MEDIA_CLOCK_MSEC,
-                                                currentTimeBase32);
-
-        PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferImpl::UpdateEstimatedServerClock - Mime=%s",
-                             iMimeType.get_cstr()));
-        PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferImpl::UpdateEstimatedServerClock - EstServClock=%d",
-                             currentTime32));
-        PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferImpl::UpdateEstimatedServerClock - RTPTime32=%u",
-                             adjustTime32));
-        PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferImpl::UpdateEstimatedServerClock - Adjusting Clock - iMaxAdjustedRTPTS=%u, currentTimeBase32=%d",
-                             iMaxAdjustedRTPTS, currentTimeBase32));
-    }
-    if (iServerClockUpdateNotificationObserver != NULL)
-    {
-        iServerClockUpdateNotificationObserver->EstimatedServerClockUpdated(iServerClockUpdateNotificationObserverContext);
-    }
-}
-
-void PVMFJitterBufferImpl::UpdateEstimatedServerClockDiscrete(bool oFreshStart)
-{
-    uint32 rtpTSInMS;
-    uint32 currentTime32 = 0;
-    uint32 currentTimeBase32 = 0;
-    uint32 adjustTime32 = 0;
-    bool overflowFlag = false;
-
-    if (oFreshStart)
-    {
-        uint32 in_wrap_count = 0;
-        iEstServClockMediaClockConvertor.set_clock(iMaxAdjustedRTPTS, in_wrap_count);
-        rtpTSInMS = iEstServClockMediaClockConvertor.get_converted_ts(1000);
-        iEstimatedServerClock->Stop();
-        iEstimatedServerClock->SetStartTime32(rtpTSInMS,
-                                              PVMF_MEDIA_CLOCK_MSEC, overflowFlag);
-        iEstimatedServerClock->Start();
-        iEstimatedServerClock->Pause();
-        PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferImpl::UpdateEstimatedServerClock - Setting start time - MaxAdjustedRTPTS=%d, StartTime=%d",
-                              iMaxAdjustedRTPTS, rtpTSInMS));
-    }
-    else
-    {
-        iEstServClockMediaClockConvertor.update_clock(iMaxAdjustedRTPTS);
-        rtpTSInMS = iEstServClockMediaClockConvertor.get_converted_ts(1000);
-        adjustTime32 = rtpTSInMS;
-        iEstimatedServerClock->GetCurrentTime32(currentTime32, overflowFlag,
-                                                PVMF_MEDIA_CLOCK_MSEC,
-                                                currentTimeBase32);
-        iEstimatedServerClock->Stop();
-        iEstimatedServerClock->SetStartTime32(adjustTime32, PVMF_MEDIA_CLOCK_MSEC, overflowFlag);
-        iEstimatedServerClock->Start();
-        iEstimatedServerClock->Pause();
-        iEstimatedServerClock->GetCurrentTime32(currentTime32, overflowFlag,
-                                                PVMF_MEDIA_CLOCK_MSEC,
-                                                currentTimeBase32);
-        PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferImpl::UpdateEstimatedServerClockDiscrete - Mime=%s",
-                             iMimeType.get_cstr()));
-        PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferImpl::UpdateEstimatedServerClockDiscrete - EstServClock=%2d",
-                             currentTime32));
-        PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferImpl::UpdateEstimatedServerClockDiscrete - RTPTime64=%2d",
-                             adjustTime32));
-        PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferImpl::UpdateEstimatedServerClockDiscrete - Adjusting Clock - iMaxAdjustedRTPTS=%d, currentTimeBase32=%2d",
-                             iMaxAdjustedRTPTS, currentTimeBase32));
-    }
-    if (iServerClockUpdateNotificationObserver != NULL)
-    {
-        iServerClockUpdateNotificationObserver->EstimatedServerClockUpdated(iServerClockUpdateNotificationObserverContext);
-    }
-}
-
-void PVMFJitterBufferImpl::SetInPlaceProcessingMode(bool aInPlaceProcessingMode)
-{
-    iInPlaceProcessing = aInPlaceProcessingMode;
-    if (iInPlaceProcessing == false)
-    {
-        /* Create allocators if not already present */
-        uint32 numNodes = 0;
-#if (PMVF_JITTER_BUFFER_NODE_USE_NO_RESIZE_ALLOC)
-        numNodes = PVMF_JB_NO_RESIZE_ALLOC_NUM_CHUNKS_RTP;
-#else
-        numNodes = DEFAULT_NUM_MEDIA_MSGS_IN_JITTER_BUFFER;
-#endif
-        if ((iMediaDataImplMemPool == NULL) && (iMediaDataGroupAlloc == NULL))
-        {
-            OsclExclusivePtr<PoolMemAlloc> mediaDataImplMemPoolAutoPtr;
-            typedef OsclMemPoolFixedChunkAllocator osclmempoolAllocType;
-            PVMF_JITTER_BUFFER_NEW(NULL,
-                                   osclmempoolAllocType,
-                                   (numNodes),
-                                   iMediaDataImplMemPool);
-            mediaDataImplMemPoolAutoPtr.set(iMediaDataImplMemPool);
-
-            typedef PVMFMediaFragGroupCombinedAlloc<PoolMemAlloc> mediaFragGroupType;
-            OsclExclusivePtr<mediaFragGroupType> mediaDataGroupAutoPtr;
-            PVMF_JITTER_BUFFER_NEW(NULL,
-                                   mediaFragGroupType,
-                                   (numNodes,
-                                    DEFAULT_NUM_FRAGMENTS_IN_MEDIA_MSG,
-                                    iMediaDataImplMemPool),
-                                   iMediaDataGroupAlloc);
-            mediaDataGroupAutoPtr.set(iMediaDataGroupAlloc);
-
-            iMediaDataGroupAlloc->create();
-
-            OsclExclusivePtr<PoolMemAlloc> mediaMsgMemPoolAutoPtr;
-            PVMF_JITTER_BUFFER_NEW(NULL,
-                                   osclmempoolAllocType,
-                                   (numNodes),
-                                   iMediaMsgMemPool);
-            mediaMsgMemPoolAutoPtr.set(iMediaMsgMemPool);
-
-            mediaDataImplMemPoolAutoPtr.release();
-            mediaDataGroupAutoPtr.release();
-            mediaMsgMemPoolAutoPtr.release();
-        }
-    }
-    else
-    {
-        /* Destroy allocators if present */
-        if (iMediaDataGroupAlloc != NULL)
-        {
-            iMediaDataGroupAlloc->removeRef();
-            iMediaDataGroupAlloc = NULL;
-        }
-        if (iMediaDataImplMemPool != NULL)
-        {
-            iMediaDataImplMemPool->removeRef();
-            iMediaDataImplMemPool = NULL;
-        }
-        if (iMediaMsgMemPool != NULL)
-        {
-            iMediaMsgMemPool->removeRef();
-            iMediaMsgMemPool = NULL;
-        }
-    }
-}
-
diff --git a/nodes/streaming/jitterbuffernode/src/pvmf_jitter_buffer_node.cpp b/nodes/streaming/jitterbuffernode/src/pvmf_jitter_buffer_node.cpp
index 8914c81..25df3eb 100644
--- a/nodes/streaming/jitterbuffernode/src/pvmf_jitter_buffer_node.cpp
+++ b/nodes/streaming/jitterbuffernode/src/pvmf_jitter_buffer_node.cpp
@@ -15,332 +15,232 @@
  * and limitations under the License.
  * -------------------------------------------------------------------
  */
+#ifndef PVMF_JB_JITTERBUFFERMISC_H_INCLUDED
+#include "pvmf_jitter_buffer_node.h"
+#endif
+
+#ifndef PVMF_JITTER_BUFFER_COMMON_TYPES_H_INCLUDED
+#include "pvmf_jitter_buffer_common_types.h"
+#endif
+
+
 #ifndef OSCL_EXCLUSIVE_PTR_H_INCLUDED
 #include "oscl_exclusive_ptr.h"
 #endif
+
 #ifndef PVMF_MEDIA_CLOCK_H_INCLUDED
 #include "pvmf_media_clock.h"
 #endif
+
 #ifndef __MEDIA_CLOCK_CONVERTER_H
 #include "media_clock_converter.h"
 #endif
+
 #ifndef PVMF_STREAMING_MANAGER_NODE_H_INCLUDED
 #include "pvmf_jitter_buffer_node.h"
 #endif
+
+#ifndef PVMF_JITTER_BUFFER_FACTORY_H
+#include "pvmf_jitter_buffer_factory.h"
+#endif
+
 #ifndef PVMF_MEDIA_DATA_H_INCLUDED
 #include "pvmf_media_data.h"
 #endif
+
 #ifndef PVMF_MEDIA_CMD_H_INCLUDED
 #include "pvmf_media_cmd.h"
 #endif
+
 #ifndef PVMF_MEDIA_MSG_FORMAT_IDS_H_INCLUDED
 #include "pvmf_media_msg_format_ids.h"
 #endif
+
 #ifndef PVLOGGER_H_INCLUDED
 #include "pvlogger.h"
 #endif
-#ifndef RTCP_DECODER_H
-#include "rtcp_decoder.h"
-#endif
-#ifndef RTCP_ENCODER_H
-#include "rtcp_encoder.h"
-#endif
+
 #ifndef PVMF_SM_TUNABLES_H_INCLUDED
 #include "pvmf_sm_tunables.h"
 #endif
+
 #ifndef PVMF_BASIC_ERRORINFOMESSAGE_H_INCLUDED
 #include "pvmf_basic_errorinfomessage.h"
 #endif
-#ifndef PVMF_ERRORINFOMESSAGE_EXTENSION_H_INCLUDED
-#include "pvmf_errorinfomessage_extension.h"
-#endif
+
 #ifndef OSCL_DLL_H_INCLUDED
 #include "oscl_dll.h"
 #endif
+
 #ifndef OSCL_MIME_STRING_UTILS_H
 #include "pv_mime_string_utils.h"
 #endif
+
 #ifndef OSCL_RAND_H_INCLUDED
 #include "oscl_rand.h"
 #endif
-#ifndef PVMF_SM_CONFIG_H_INCLUDED
-#include "pvmf_sm_config.h"
-#endif
 
 // Define entry point for this DLL
 OSCL_DLL_ENTRY_POINT_DEFAULT()
 
-#define PVMF_JBNODE_USE_BUFFER_SIZE_FOR_LOW_WATER_MARK
-
-//For perf logging and AO statistics.
-#if defined(NDEBUG)
-//no stats
-#define PVTICK uint32
-#define SET_TICK(tick)
-#define GET_TICKFREQ(tick)
-#define TICK_INT(tick1)
-#define TICKSTR ""
-#else
-//else use the oscl timer.
-#define PVTICK uint32
-#define SET_TICK(tick) tick=OsclTickCount::TickCount()
-#define GET_TICKFREQ(tick) tick=OsclTickCount::TickCountFrequency()
-#define TICK_INT(tick1) tick1
-#define TICKSTR "Ticks"
-#endif
-
-#if defined(NDEBUG)
-#define DIFF_TICK(tick1,diff)
-#else
-#define DIFF_TICK(tick1,diff) PVTICK _now;SET_TICK(_now);diff=TICK_INT(_now)-TICK_INT(tick1)
-#endif
-
-
-/**
- * Node Constructor & Destructor
- */
-OSCL_EXPORT_REF PVMFJitterBufferNode::PVMFJitterBufferNode(int32 aPriority)
-        : OsclActiveObject(aPriority, "JitterBufferNode")
+//Construction and Destruction
+OSCL_EXPORT_REF PVMFJitterBufferNode::PVMFJitterBufferNode(int32 aPriority,
+        JitterBufferFactory* aJBFactory): OsclActiveObject(aPriority, "JitterBufferNode")
 {
-    iStreamID = 0;
-    iLogger = NULL;
-    iDataPathLogger = NULL;
-    iDataPathLoggerIn = NULL;
-    iDataPathLoggerOut = NULL;
-    iClockLogger = NULL;
-    iClockLoggerSessionDuration = NULL;
-    iClockLoggerRebuff = NULL;
-    iDiagnosticsLogger = NULL;
-    iJBEventsClockLogger = NULL;
-    iExtensionInterface = NULL;
-    iClientPlayBackClock = NULL;
-    iClientPlayBackClockNotificationsInf = NULL;
-    iEstimatedServerClock = NULL;
-    iNonDecreasingClock = NULL;
-    iNonDecreasingClockNotificationsInf = NULL;
-
-    iIncomingMediaInactivityDurationCallBkId = 0;
-    iIncomingMediaInactivityDurationCallBkPending = false;
-
-    iNotifyBufferingStatusCallBkId = 0;
-    iNotifyBufferingStatusCallBkPending = false;
-
-    iJitterBufferDurationCallBkId = 0;
-    iJitterBufferDurationCallBkPending = false;
-
-    iMonitorReBufferingCallBkId = 0;
-    iMonitorReBufferingCallBkPending = false;
-
-    iSendFirewallPacketCallBkId = 0;
-    iSendFirewallPacketCallBkPending = false;
-
-
-    iRTCPClock = NULL;
-    iMaxInactivityDurationForMediaInMs = DEFAULT_MAX_INACTIVITY_DURATION_IN_MS;
-    iJitterBufferDurationInMilliSeconds = DEFAULT_JITTER_BUFFER_DURATION_IN_MS;
-    iJitterBufferUnderFlowThresholdInMilliSeconds = DEFAULT_JITTER_BUFFER_UNDERFLOW_THRESHOLD_IN_MS;
-    iPlayBackThresholdInMilliSeconds = DEFAULT_PLAY_BACK_THRESHOLD_IN_MS;
-    iEstimatedServerKeepAheadInMilliSeconds = DEFAULT_ESTIMATED_SERVER_KEEPAHEAD_FOR_OOO_SYNC_IN_MS;
-
-    oDelayEstablished = false;
-    oSessionDurationExpired = false;
-    oStopOutputPorts = true;
-    oAutoPause = false;
-    iRTCPIntervalInMicroSeconds = DEFAULT_RTCP_INTERVAL_USEC;
-    iPlayStartTimeInMS = 0;
-    iPlayStopTimeInMS = 0;
-    oStartPending = false;
-    iPlayingAfterSeek = false;
-    iJitterBufferState = PVMF_JITTER_BUFFER_READY;
-    iJitterDelayPercent = 0;
-    iDisableFireWallPackets = false;
-
-    iNumUnderFlow = 0;
-    iUseSessionDurationTimerForEOS = true;
-    iUnderFlowStartByte = 0;
-    iStartBufferingTickCount = 0;
-    iPrevBufferingStartPacketTs = 0;
-    iThinningIntervalMS = 0;
-
-    iExtensionInterface = NULL;
-    iNumRunL = 0;
-    iOverflowFlag = false;
-
-
-    iBroadCastSession = false;
-    iRTCPBcastAVSyncProcessed = false;
-
-    iBufferingStatusIntervalInMs =
-        (PVMF_JITTER_BUFFER_BUFFERING_STATUS_EVENT_CYCLES * 1000) / PVMF_JITTER_BUFFER_BUFFERING_STATUS_EVENT_FREQUENCY;
-
-    iMaxNumBufferResizes = DEFAULT_MAX_NUM_SOCKETMEMPOOL_RESIZES;
-    iBufferResizeSize = DEFAULT_MAX_SOCKETMEMPOOL_RESIZELEN_INPUT_PORT;
-
-    prevMinPercentOccupancy = 100;
-    consecutiveLowBufferCount = 0;
-    int32 err = OsclErrNone;
-    OSCL_TRY(err,
-             /*
-              * Create the input command queue.  Use a reserve to avoid lots of
-              * dynamic memory allocation
-              */
-             iInputCommands.Construct(PVMF_JITTER_BUFFER_NODE_COMMAND_ID_START,
-                                      PVMF_JITTER_BUFFER_VECTOR_RESERVE);
-
-             /*
-              * Create the "current command" queue.  It will only contain one
-              * command at a time, so use a reserve of 1
-              */
-             iCurrentCommand.Construct(0, 1);
-
-             /* Create the port vector */
-             iPortVector.Construct(PVMF_JITTER_BUFFER_NODE_PORT_VECTOR_RESERVE);
-
-             OsclExclusivePtr<PVMFMediaClock> estServClockAutoPtr;
-             OsclExclusivePtr<PVMFMediaClock> rtcpClockAutoPtr;
-             OsclExclusivePtr<PvmfRtcpTimer> rtcpTimerAutoPtr;
-             OsclExclusivePtr<PvmfJBSessionDurationTimer> sessionDurationTimerAutoPtr;
-             typedef OsclTimer<PVMFJitterBufferNodeAllocator> osclTimerType;
-
-             PVMF_JITTER_BUFFER_NEW(NULL, PVMFMediaClock, (), iEstimatedServerClock);
-             estServClockAutoPtr.set(iEstimatedServerClock);
-             iEstimatedServerClock->SetClockTimebase(iEstimatedServerClockTimeBase);
-
-             PVMF_JITTER_BUFFER_NEW(NULL, PVMFMediaClock, (), iNonDecreasingClock);
-             iNonDecreasingClock->SetClockTimebase(iNonDecreasingClockTimeBase);
-
-             PVMF_JITTER_BUFFER_NEW(NULL, PVMFMediaClock, (), iRTCPClock);
-             rtcpClockAutoPtr.set(iRTCPClock);
-             iRTCPClock->SetClockTimebase(iRTCPClockTimeBase);
-             PVMF_JITTER_BUFFER_NEW(NULL, PvmfJBSessionDurationTimer, (this), iSessionDurationTimer);
-             sessionDurationTimerAutoPtr.set(iSessionDurationTimer);
-             iSessionDurationTimer->SetEstimatedServerClock(iEstimatedServerClock);
-
-             if (iEstimatedServerClock)
-{
-    PVMFStatus status = iEstimatedServerClock->ConstructMediaClockNotificationsInterface(iEstimatedClockNotificationsInf, *this);
-        if (PVMFSuccess != status || !iEstimatedClockNotificationsInf)
-        {
-            iEstimatedClockNotificationsInf = NULL;
-            OSCL_ASSERT(false);
-        }
-    }
-
-    /*Construct the event clock notification intf, and start the event clock*/
-    if (iNonDecreasingClock)
-{
-    iNonDecreasingClock->ConstructMediaClockNotificationsInterface(iNonDecreasingClockNotificationsInf, *this);
-        if (NULL == iNonDecreasingClockNotificationsInf)
-        {
-            OSCL_ASSERT(false);
-        }
-        uint32 start = 0;
-        iNonDecreasingClock->Stop();
-        bool overflowFlag = false;
-        iNonDecreasingClock->SetStartTime32(start, PVMF_MEDIA_CLOCK_MSEC, overflowFlag);
-        iNonDecreasingClock->Start();
-    }
-
-    /*
-     * Set the node capability data.
-     * This node can support an unlimited number of ports.
-     */
+    //Initialize capability
     iCapability.iCanSupportMultipleInputPorts = true;
     iCapability.iCanSupportMultipleOutputPorts = true;
     iCapability.iHasMaxNumberOfPorts = false;
     iCapability.iMaxNumberOfPorts = 0;//no maximum
-    iCapability.iInputFormatCapability.push_back(PVMFFormatType(PVMF_MIME_RTP));
-    iCapability.iOutputFormatCapability.push_back(PVMFFormatType(PVMF_MIME_RTP));
+    iCapability.iInputFormatCapability.push_back(PVMF_MIME_RTP);
+    iCapability.iInputFormatCapability.push_back(PVMF_MIME_ASFFF);
+    iCapability.iInputFormatCapability.push_back(PVMF_MIME_RMFF);
+    iCapability.iOutputFormatCapability.push_back(PVMF_MIME_RTP);
+    iCapability.iOutputFormatCapability.push_back(PVMF_MIME_ASFFF);
+    //Jitter buffer factory
+    ipJitterBufferFactory	=	aJBFactory;
 
-    // seed the random number generator
-    iRandGen.Seed(RTCP_RAND_SEED);
+    //Initialize loggers
+    ipLogger = NULL;
+    ipDataPathLogger = NULL;
+    ipDataPathLoggerIn = NULL;
+    ipDataPathLoggerOut = NULL;
+    ipDataPathLoggerFlowCtrl = NULL;
+    ipClockLogger = NULL;
+    ipClockLoggerSessionDuration = NULL;
+    ipClockLoggerRebuff = NULL;
+    ipDiagnosticsLogger = NULL;
+    ipJBEventsClockLogger = NULL;
 
-    estServClockAutoPtr.release();
-    rtcpClockAutoPtr.release();
-    rtcpTimerAutoPtr.release();
-    sessionDurationTimerAutoPtr.release();
-            );
+    //Diagniostics related
+    iDiagnosticsLogged = false;
+    iNumRunL = 0;
 
-    if (err != OsclErrNone)
-    {
-        CleanUp();
-        OSCL_LEAVE(err);
-    }
-
+    Construct();
+    ResetNodeParams(false);
 }
 
-void PVMFJitterBufferNode::CleanUp()
+void PVMFJitterBufferNode::Construct()
 {
-    /* if a leave happened, cleanup and re-throw the error */
-    iInputCommands.clear();
-    iCurrentCommand.clear();
-    iPortVector.clear();
-    iCapability.iInputFormatCapability.clear();
-    iCapability.iOutputFormatCapability.clear();
-    OSCL_CLEANUP_BASE_CLASS(PVMFNodeInterface);
-    OSCL_CLEANUP_BASE_CLASS(OsclActiveObject);
-    return;
+    //creation and initialization of objects that need to be created on heap in the ctor is done here
+    iInputCommands.Construct(PVMF_JITTER_BUFFER_NODE_COMMAND_ID_START,
+                             PVMF_JITTER_BUFFER_VECTOR_RESERVE);
+    iCurrentCommand.Construct(0, 1);
+
+    iPortVector.Construct(PVMF_JITTER_BUFFER_NODE_PORT_VECTOR_RESERVE);
 }
 
-OSCL_EXPORT_REF PVMFJitterBufferNode::~PVMFJitterBufferNode()
+void PVMFJitterBufferNode::ResetNodeParams(bool aReleaseMemory)
 {
-    LogSessionDiagnostics();
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::ResetNodeParams In aReleaseMemory[%d]", aReleaseMemory));
+    //Session specific initializations and resetting
 
-    Cancel();
-    /* thread logoff */
-    if (IsAdded())
-        RemoveFromScheduler();
+    oStartPending = false;
+    oStopOutputPorts = true;
+    iPauseTime = 0;
+    ipClientPlayBackClock = NULL;
+    iMediaReceiveingChannelPrepared = false;
 
-    if (iExtensionInterface)
+    iBroadCastSession = false;
+
+    iDelayEstablished = false;
+    iJitterBufferState = PVMF_JITTER_BUFFER_READY;
+    iJitterDelayPercent = 0;
+
+    //Extension interface initializations
+    if (ipExtensionInterface && aReleaseMemory)
     {
-        iExtensionInterface->removeRef();
+        ipExtensionInterface->removeRef();
+    }
+    ipExtensionInterface = NULL;
+
+    //Variables to persist info passed on by the extension interface
+    iRebufferingThreshold = DEFAULT_JITTER_BUFFER_UNDERFLOW_THRESHOLD_IN_MS;
+    iJitterBufferDurationInMilliSeconds = DEFAULT_JITTER_BUFFER_DURATION_IN_MS;
+    iMaxInactivityDurationForMediaInMs = DEFAULT_MAX_INACTIVITY_DURATION_IN_MS;
+    iEstimatedServerKeepAheadInMilliSeconds = DEFAULT_ESTIMATED_SERVER_KEEPAHEAD_FOR_OOO_SYNC_IN_MS;
+
+    iJitterBufferSz = 0;
+    iMaxNumBufferResizes = DEFAULT_MAX_NUM_SOCKETMEMPOOL_RESIZES;
+    iBufferResizeSize = DEFAULT_MAX_SOCKETMEMPOOL_RESIZELEN_INPUT_PORT;
+    iBufferingStatusIntervalInMs =
+        (PVMF_JITTER_BUFFER_BUFFERING_STATUS_EVENT_CYCLES * 1000) / PVMF_JITTER_BUFFER_BUFFERING_STATUS_EVENT_FREQUENCY;
+
+    iDisableFireWallPackets = false;
+    //iPlayingAfterSeek = false;
+
+    //Event Notifier initialization/reseting
+    iIncomingMediaInactivityDurationCallBkId = 0;
+    iIncomingMediaInactivityDurationCallBkPending = false;
+    iNotifyBufferingStatusCallBkId = 0;
+    iNotifyBufferingStatusCallBkPending = false;
+
+
+    if (aReleaseMemory)
+    {
+        if (ipJitterBufferMisc)
+            OSCL_DELETE(ipJitterBufferMisc);
     }
 
-    iUseSessionDurationTimerForEOS = true;
+    ipJitterBufferMisc = NULL;
+    ipEventNotifier = NULL;
 
-    for (uint32 i = 0; i < iPortParamsQueue.size(); i++)
+
+    /* Clear queued messages in ports */
+    uint32 i;
+    for (i = 0; i < iPortVector.size(); i++)
     {
-        if (iPortParamsQueue[i].iBufferAlloc != NULL)
+        PVMFJitterBufferPortParams* pPortParams = NULL;
+        bool bRet = getPortContainer(iPortVector[i], pPortParams);
+        if (bRet)
         {
-            iPortParamsQueue[i].iBufferAlloc->CancelFreeMemoryAvailableCallback();
-            iPortParamsQueue[i].iBufferAlloc->removeRef();
-            iPortParamsQueue[i].iBufferAlloc = NULL;
+            if (pPortParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
+            {
+                pPortParams->ipJitterBuffer->ResetJitterBuffer();
+            }
+
+            pPortParams->ResetParams();
         }
+        iPortVector[i]->ClearMsgQueues();
     }
 
-    /* Cleanup allocated ports */
-    while (!iPortVector.empty())
-    {
-        /* delete corresponding port params */
-        Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
+    //Cleaning up of conatiner objects
+    /* delete corresponding port params */
 
+    if (aReleaseMemory)
+    {
+        //port vect and port params Q
+        Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator it;
         for (it = iPortParamsQueue.begin();
                 it != iPortParamsQueue.end();
                 it++)
         {
-            CancelEventCallBack(JB_NOTIFY_WAIT_FOR_OOO_PACKET_COMPLETE, it);
-            if (it->iPort == iPortVector.front())
-            {
-                if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-                {
-                    /* Delete the jitter buffer */
-                    PVMF_JITTER_BUFFER_DELETE(NULL,
-                                              PVMFJitterBufferImpl,
-                                              ((PVMFJitterBufferImpl*)(it->iJitterBuffer)));
-                    DestroyFireWallPacketMemAllocators(it);
-                }
-                else if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK)
-                {
+            PVMFJitterBufferPortParams* pPortParams = *it;
 
-                    PVMF_JITTER_BUFFER_DELETE(NULL, PvmfRtcpTimer, it->iRTCPTimer);
-                }
-                iPortParamsQueue.erase(it);
-                break;
+            if (pPortParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
+            {
+                if (ipJitterBufferFactory)
+                    ipJitterBufferFactory->Destroy(pPortParams->ipJitterBuffer);
             }
+
+            OSCL_DELETE(&pPortParams->irPort);
+            OSCL_DELETE(pPortParams);
         }
-        iPortVector.Erase(&iPortVector.front());
+        iPortParamsQueue.clear();
+        iPortVector.clear();
+        iPortVector.Reconstruct();
     }
 
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::ResetNodeParams Out -"));
+    return;
+}
+
+PVMFJitterBufferNode::~PVMFJitterBufferNode()
+{
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::~PVMFJitterBufferNode In"));
+    LogSessionDiagnostics();
+    ResetNodeParams();
+
     /*
      * Cleanup commands
      * The command queues are self-deleting, but we want to
@@ -355,75 +255,101 @@
         CommandComplete(iInputCommands, iInputCommands.front(), PVMFFailure);
     }
 
+    Cancel();
+    /* thread logoff */
+    if (IsAdded())
+        RemoveFromScheduler();
+    CleanUp();
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::~PVMFJitterBufferNode Out"));
+}
 
-    CancelEventCallBack(JB_MONITOR_REBUFFERING);
-    CancelEventCallBack(JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED);
-    PVMF_JITTER_BUFFER_DELETE(NULL, PvmfJBSessionDurationTimer, iSessionDurationTimer);
-    PVMF_JITTER_BUFFER_DELETE(NULL, PVMFMediaClock, iRTCPClock);
-    CancelEventCallBack(JB_NOTIFY_SEND_FIREWALL_PACKET);
-    CancelEventCallBack(JB_NOTIFY_REPORT_BUFFERING_STATUS);
+void PVMFJitterBufferNode::CleanUp()	//Reverse of Construct
+{
+    //noop
+}
 
+///////////////////////////////////////////////////////////////////////////////
+//Implementation of overrides from PVInterface
+///////////////////////////////////////////////////////////////////////////////
 
-    if ((NULL != iClientPlayBackClock) && (NULL != iClientPlayBackClockNotificationsInf))
+///////////////////////////////////////////////////////////////////////////////
+//Checks if the instance of PVMFJitterBufferExtensionInterfaceImpl is existing
+//If existing: Query from this interface if UUID mentioned is supported
+//If not existing: Instantiate PVMFJitterBufferExtensionInterfaceImpl
+//and query requested interface from the PVMFJitterBufferExtensionInterfaceImpl
+//Return Values:true/false
+//Leave Codes: OsclErrNoMemory
+//Leave Condition: If instance of PVMFJitterBufferExtensionInterfaceImpl cannot
+//be instantiated.
+///////////////////////////////////////////////////////////////////////////////
+bool PVMFJitterBufferNode::queryInterface(const PVUuid& uuid, PVInterface*& iface)
+{
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::queryInterface In"));
+    iface = NULL;
+    if (uuid == PVUuid(PVMF_JITTERBUFFERNODE_EXTENSIONINTERFACE_UUID))
     {
-        iClientPlayBackClockNotificationsInf->RemoveClockStateObserver(*this);
-        iClientPlayBackClock->DestroyMediaClockNotificationsInterface(iClientPlayBackClockNotificationsInf);
-        iClientPlayBackClockNotificationsInf = NULL;
-    }
-
-    if (NULL != iNonDecreasingClock)
-    {
-        if (NULL != iNonDecreasingClockNotificationsInf)
+        if (!ipExtensionInterface)
         {
-            iNonDecreasingClock->DestroyMediaClockNotificationsInterface(iNonDecreasingClockNotificationsInf);
-            iNonDecreasingClockNotificationsInf = NULL;
+            OsclMemAllocator alloc;
+            int32 err;
+            OsclAny*ptr = NULL;
+            OSCL_TRY(err,
+                     ptr = alloc.ALLOCATE(sizeof(PVMFJitterBufferExtensionInterfaceImpl));
+                    );
+            if (err != OsclErrNone || !ptr)
+            {
+                PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::queryInterface: Error - Out of memory"));
+                OSCL_LEAVE(OsclErrNoMemory);
+            }
+            ipExtensionInterface =
+                OSCL_PLACEMENT_NEW(ptr, PVMFJitterBufferExtensionInterfaceImpl(this));
         }
-        PVMF_JITTER_BUFFER_DELETE(NULL, PVMFMediaClock, iNonDecreasingClock);
-        iNonDecreasingClock = NULL;
+        return (ipExtensionInterface->queryInterface(uuid, iface));
     }
-
-    if (NULL != iEstimatedServerClock)
+    else
     {
-        if (NULL != iEstimatedClockNotificationsInf)
-        {
-            iEstimatedServerClock->DestroyMediaClockNotificationsInterface(iEstimatedClockNotificationsInf);
-            iEstimatedClockNotificationsInf = NULL;
-        }
-        PVMF_JITTER_BUFFER_DELETE(NULL, PVMFMediaClock, iEstimatedServerClock);
-        iEstimatedServerClock = NULL;
+        return false;
     }
 }
 
-/**
- * Public Node API implementation
- */
+///////////////////////////////////////////////////////////////////////////////
+//Implementation  of overrides from PVMFNodeInterface
+///////////////////////////////////////////////////////////////////////////////
 
-/**
- * Do thread-specific node creation and go to "Idle" state.
- */
+///////////////////////////////////////////////////////////////////////////////
+//Does thread-specific node creation and go to "Idle" state.
+//Creates logger objects
+//Adds the AO to the scheduler
+//Return values: PVMFSuccess/PVMFErrInvalidState
+//PVMFSuccess: If API call is successful and was made in EPVMFNodeCreated state
+//PVMFErrInvalidState: If API is called in the invalid state
+//Leave Codes: NA
+///////////////////////////////////////////////////////////////////////////////
 OSCL_EXPORT_REF PVMFStatus PVMFJitterBufferNode::ThreadLogon()
 {
-    PVMF_JBNODE_LOGINFO((0, "JitterBufferNode:ThreadLogon"));
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::ThreadLogon In"));
     PVMFStatus status;
+
     switch (iInterfaceState)
     {
         case EPVMFNodeCreated:
         {
             if (!IsAdded())
                 AddToScheduler();
-            iLogger = PVLogger::GetLoggerObject("JitterBufferNode");
-            iDataPathLogger = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffer");
-            iDataPathLoggerIn = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffer.in");
-            iDataPathLoggerOut = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffer.out");
-            iDataPathLoggerFireWall = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffer.fw");
-            iClockLogger = PVLogger::GetLoggerObject("clock.jitterbuffernode");
-            iClockLoggerSessionDuration = PVLogger::GetLoggerObject("clock.streaming_manager.sessionduration");
-            iClockLoggerRebuff = PVLogger::GetLoggerObject("clock.jitterbuffernode.rebuffer");
-            iDiagnosticsLogger = PVLogger::GetLoggerObject("pvplayerdiagnostics.streamingmanager");
-            iDataPathLoggerFlowCtrl = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffer.flowctrl");
-            iDataPathLoggerRTCP = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffer.rtcp");
-            iJBEventsClockLogger = PVLogger::GetLoggerObject("jitterbuffernode.eventsclock");
-            iRTCPAVSyncLogger = PVLogger::GetLoggerObject("jitterbuffernode.rtcpavsync");
+
+            ipLogger = PVLogger::GetLoggerObject("jitterbuffernode");
+            ipDataPathLogger = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffernode");
+            ipDataPathLoggerIn = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffernode.in");
+            ipDataPathLoggerOut = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffernode.out");
+            ipDataPathLoggerFlowCtrl = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffernode.flowctrl");
+
+            ipClockLogger = PVLogger::GetLoggerObject("clock.jitterbuffernode");
+            ipClockLoggerSessionDuration = PVLogger::GetLoggerObject("clock.streaming_manager.sessionduration");
+            ipClockLoggerRebuff = PVLogger::GetLoggerObject("clock.jitterbuffernode.rebuffer");
+
+            ipDiagnosticsLogger = PVLogger::GetLoggerObject("pvplayerdiagnostics.streamingmanager");
+            ipJBEventsClockLogger = PVLogger::GetLoggerObject("jitterbuffernode.eventsclock");
+
             iDiagnosticsLogged = false;
             SetState(EPVMFNodeIdle);
             status = PVMFSuccess;
@@ -434,56 +360,41 @@
             break;
     }
 
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::ThreadLogon Out retval - %d", status));
     return status;
 }
 
-/**
- * Do thread-specific node cleanup and go to "Created" state.
- */
+///////////////////////////////////////////////////////////////////////////////
+//Does thread-specific node cleanup and go to "Created" state.
+//Releases logger objects
+//Removes the AO to the scheduler
+//Return values: PVMFSuccess/PVMFErrInvalidState
+//PVMFSuccess: If API call is successful and was made in EPVMFNodeIdle state
+//PVMFErrInvalidState: If API is called in the invalid state
+//Leave Codes: NA
+///////////////////////////////////////////////////////////////////////////////
 OSCL_EXPORT_REF PVMFStatus PVMFJitterBufferNode::ThreadLogoff()
 {
-    PVMF_JBNODE_LOGINFO((0, "JitterBufferNode:ThreadLogoff"));
-    PVMFStatus status;
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::ThreadLogoff In"));
+    PVMFStatus status = PVMFFailure;
+
     switch (iInterfaceState)
     {
         case EPVMFNodeIdle:
         {
-            /* Cancel any outstanding timers */
-            CancelEventCallBack(JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED);
-            if (iSessionDurationTimer)
-            {
-                iSessionDurationTimer->Cancel();
-            }
-
-            Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-            for (it = iPortParamsQueue.begin();
-                    it != iPortParamsQueue.end();
-                    it++)
-            {
-                if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK)
-                {
-                    if (it->iRTCPTimer != NULL)
-                        it->iRTCPTimer->Cancel();
-                }
-                CancelEventCallBack(JB_NOTIFY_WAIT_FOR_OOO_PACKET_COMPLETE, it);
-            }
-            CancelEventCallBack(JB_MONITOR_REBUFFERING);
-            CancelEventCallBack(JB_NOTIFY_REPORT_BUFFERING_STATUS);
-            CancelEventCallBack(JB_NOTIFY_SEND_FIREWALL_PACKET);
+            ResetNodeParams();
+            ipLogger = NULL;
+            ipDataPathLogger = NULL;
+            ipDataPathLoggerIn = NULL;
+            ipDataPathLoggerOut = NULL;
+            ipClockLogger = NULL;
+            ipClockLoggerSessionDuration = NULL;
+            ipDiagnosticsLogger = NULL;
+            ipDataPathLoggerFlowCtrl = NULL;
             if (IsAdded())
             {
                 RemoveFromScheduler();
             }
-            iLogger = NULL;
-            iDataPathLogger = NULL;
-            iDataPathLoggerIn = NULL;
-            iDataPathLoggerOut = NULL;
-            iDataPathLoggerFireWall = NULL;
-            iClockLogger = NULL;
-            iClockLoggerSessionDuration = NULL;
-            iDiagnosticsLogger = NULL;
-            iDataPathLoggerFlowCtrl = NULL;
-            iDataPathLoggerRTCP = NULL;
             SetState(EPVMFNodeCreated);
             status = PVMFSuccess;
         }
@@ -496,38 +407,49 @@
     return status;
 }
 
-/**
- * retrieve node capabilities.
- */
+///////////////////////////////////////////////////////////////////////////////
+//Retrieves node capabilities.
+//Decides supported input/output formats and provides node capabilities
+//Return values: PVMFSuccess/PVMFErrInvalidState
+//PVMFSuccess: If API call is successful
+//If Input/Output format could not be determined
+//Leave Codes: NA
+///////////////////////////////////////////////////////////////////////////////
 OSCL_EXPORT_REF PVMFStatus PVMFJitterBufferNode::GetCapability(PVMFNodeCapability& aNodeCapability)
 {
-    PVMF_JBNODE_LOGINFO((0, "JitterBufferNode:GetCapability"));
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::GetCapability In"));
     aNodeCapability = iCapability;
     return PVMFSuccess;
 }
 
-/**
- * retrieve a port iterator.
- */
+///////////////////////////////////////////////////////////////////////////////
+//Retrives a port iterator.
+//Can Leave:No
+//Return values: PVMFSuccess/PVMFErrInvalidState
+//PVMFSuccess - If API call is successful
+////////////////////////////////////////////////////////////////////////////////
 OSCL_EXPORT_REF PVMFPortIter* PVMFJitterBufferNode::GetPorts(const PVMFPortFilter* aFilter)
 {
-    PVMF_JBNODE_LOGINFO((0, "JitterBufferNode:GetPorts"));
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::GetPorts"));
     OSCL_UNUSED_ARG(aFilter);//port filter is not implemented.
     iPortVector.Reset();
     return &iPortVector;
 }
 
-/**
- * Queue an asynchronous node command
- */
-OSCL_EXPORT_REF PVMFCommandId
-PVMFJitterBufferNode::QueryUUID(PVMFSessionId s,
-                                const PvmfMimeString& aMimeType,
-                                Oscl_Vector<PVUuid, OsclMemAllocator>& aUuids,
-                                bool aExactUuidsOnly,
-                                const OsclAny* aContext)
+///////////////////////////////////////////////////////////////////////////////
+//Retrives a port iterator.
+//Can Leave:No
+//Return values: PVMFSuccess/PVMFErrInvalidState
+//PVMFSuccess - If API call is successful
+//PVMFErrInvalidState - If API is called in the invalid state
+////////////////////////////////////////////////////////////////////////////////
+OSCL_EXPORT_REF PVMFCommandId PVMFJitterBufferNode::QueryUUID(PVMFSessionId s,
+        const PvmfMimeString& aMimeType,
+        Oscl_Vector< PVUuid, OsclMemAllocator >& aUuids,
+        bool aExactUuidsOnly ,
+        const OsclAny* aContext)
 {
-    PVMF_JBNODE_LOGINFO((0, "JitterBufferNode:QueryUUID"));
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::QueryUUID"));
     PVMFJitterBufferNodeCommand cmd;
     cmd.PVMFJitterBufferNodeCommandBase::Construct(s,
             PVMF_JITTER_BUFFER_NODE_QUERYUUID,
@@ -538,14 +460,10 @@
     return QueueCommandL(cmd);
 }
 
-/**
- * Queue an asynchronous node command
- */
-OSCL_EXPORT_REF PVMFCommandId
-PVMFJitterBufferNode::QueryInterface(PVMFSessionId s,
-                                     const PVUuid& aUuid,
-                                     PVInterface*& aInterfacePtr,
-                                     const OsclAny* aContext)
+OSCL_EXPORT_REF PVMFCommandId PVMFJitterBufferNode::QueryInterface(PVMFSessionId s,
+        const PVUuid& aUuid,
+        PVInterface*& aInterfacePtr,
+        const OsclAny* aContext)
 {
     PVMF_JBNODE_LOGINFO((0, "JitterBufferNode:QueryInterface"));
     PVMFJitterBufferNodeCommand cmd;
@@ -557,14 +475,10 @@
     return QueueCommandL(cmd);
 }
 
-/**
- * Queue an asynchronous node command
- */
-OSCL_EXPORT_REF PVMFCommandId
-PVMFJitterBufferNode::RequestPort(PVMFSessionId s,
-                                  int32 aPortTag,
-                                  const PvmfMimeString* aPortConfig,
-                                  const OsclAny* aContext)
+OSCL_EXPORT_REF PVMFCommandId PVMFJitterBufferNode::RequestPort(PVMFSessionId s,
+        int32 aPortTag,
+        const PvmfMimeString* aPortConfig,
+        const OsclAny* aContext)
 {
     PVMF_JBNODE_LOGINFO((0, "JitterBufferNode:RequestPort"));
     PVMFJitterBufferNodeCommand cmd;
@@ -576,13 +490,9 @@
     return QueueCommandL(cmd);
 }
 
-/**
- * Queue an asynchronous node command
- */
-OSCL_EXPORT_REF PVMFCommandId
-PVMFJitterBufferNode::ReleasePort(PVMFSessionId s,
-                                  PVMFPortInterface& aPort,
-                                  const OsclAny* aContext)
+OSCL_EXPORT_REF PVMFCommandId PVMFJitterBufferNode::ReleasePort(PVMFSessionId s,
+        PVMFPortInterface& aPort,
+        const OsclAny* aContext)
 {
     PVMF_JBNODE_LOGINFO((0, "JitterBufferNode:ReleasePort"));
     PVMFJitterBufferNodeCommand cmd;
@@ -593,9 +503,6 @@
     return QueueCommandL(cmd);
 }
 
-/**
- * Queue an asynchronous node command
- */
 OSCL_EXPORT_REF PVMFCommandId PVMFJitterBufferNode::Init(PVMFSessionId s,
         const OsclAny* aContext)
 {
@@ -607,9 +514,6 @@
     return QueueCommandL(cmd);
 }
 
-/**
- * Queue an asynchronous node command
- */
 OSCL_EXPORT_REF PVMFCommandId PVMFJitterBufferNode::Prepare(PVMFSessionId s,
         const OsclAny* aContext)
 {
@@ -621,12 +525,8 @@
     return QueueCommandL(cmd);
 }
 
-/**
- * Queue an asynchronous node command
- */
-OSCL_EXPORT_REF PVMFCommandId
-PVMFJitterBufferNode::Start(PVMFSessionId s,
-                            const OsclAny* aContext)
+OSCL_EXPORT_REF PVMFCommandId PVMFJitterBufferNode::Start(PVMFSessionId s,
+        const OsclAny* aContext)
 {
     PVMF_JBNODE_LOGINFO((0, "JitterBufferNode:Start"));
     PVMFJitterBufferNodeCommand cmd;
@@ -636,12 +536,8 @@
     return QueueCommandL(cmd);
 }
 
-/**
- * Queue an asynchronous node command
- */
-OSCL_EXPORT_REF PVMFCommandId
-PVMFJitterBufferNode::Stop(PVMFSessionId s,
-                           const OsclAny* aContext)
+OSCL_EXPORT_REF PVMFCommandId PVMFJitterBufferNode::Stop(PVMFSessionId s,
+        const OsclAny* aContext)
 {
     PVMF_JBNODE_LOGINFO((0, "JitterBufferNode:Stop"));
     PVMFJitterBufferNodeCommand cmd;
@@ -651,12 +547,8 @@
     return QueueCommandL(cmd);
 }
 
-/**
- * Queue an asynchronous node command
- */
-OSCL_EXPORT_REF PVMFCommandId
-PVMFJitterBufferNode::Flush(PVMFSessionId s,
-                            const OsclAny* aContext)
+OSCL_EXPORT_REF PVMFCommandId PVMFJitterBufferNode::Flush(PVMFSessionId s,
+        const OsclAny* aContext)
 {
     PVMF_JBNODE_LOGINFO((0, "JitterBufferNode:Flush"));
     PVMFJitterBufferNodeCommand cmd;
@@ -666,12 +558,8 @@
     return QueueCommandL(cmd);
 }
 
-/**
- * Queue an asynchronous node command
- */
-OSCL_EXPORT_REF PVMFCommandId
-PVMFJitterBufferNode::Pause(PVMFSessionId s,
-                            const OsclAny* aContext)
+OSCL_EXPORT_REF PVMFCommandId PVMFJitterBufferNode::Pause(PVMFSessionId s,
+        const OsclAny* aContext)
 {
     PVMF_JBNODE_LOGINFO((0, "JitterBufferNode:Pause"));
     PVMFJitterBufferNodeCommand cmd;
@@ -681,12 +569,8 @@
     return QueueCommandL(cmd);
 }
 
-/**
- * Queue an asynchronous node command
- */
-OSCL_EXPORT_REF PVMFCommandId
-PVMFJitterBufferNode::Reset(PVMFSessionId s,
-                            const OsclAny* aContext)
+OSCL_EXPORT_REF PVMFCommandId PVMFJitterBufferNode::Reset(PVMFSessionId s,
+        const OsclAny* aContext)
 {
     PVMF_JBNODE_LOGINFO((0, "JitterBufferNode:Reset"));
     PVMFJitterBufferNodeCommand cmd;
@@ -696,41 +580,900 @@
     return QueueCommandL(cmd);
 }
 
-/**
- * Queue an asynchronous node command
- */
-OSCL_EXPORT_REF PVMFCommandId
-PVMFJitterBufferNode::CancelAllCommands(PVMFSessionId s,
-                                        const OsclAny* aContext)
+OSCL_EXPORT_REF PVMFCommandId PVMFJitterBufferNode::CancelAllCommands(PVMFSessionId s,
+        const OsclAny* aContextData)
 {
     PVMF_JBNODE_LOGINFO((0, "JitterBufferNode:CancelAllCommands"));
     PVMFJitterBufferNodeCommand cmd;
     cmd.PVMFJitterBufferNodeCommandBase::Construct(s,
             PVMF_JITTER_BUFFER_NODE_CANCELALLCOMMANDS,
-            aContext);
+            aContextData);
     return QueueCommandL(cmd);
 }
 
-/**
- * Queue an asynchronous node command
- */
-OSCL_EXPORT_REF PVMFCommandId PVMFJitterBufferNode::CancelCommand(PVMFSessionId s, PVMFCommandId aCmdId, const OsclAny* aContext)
+OSCL_EXPORT_REF PVMFCommandId PVMFJitterBufferNode::CancelCommand(PVMFSessionId s,
+        PVMFCommandId aCmdId,
+        const OsclAny* aContextData)
 {
     PVMF_JBNODE_LOGINFO((0, "JitterBufferNode:CancelCommand"));
     PVMFJitterBufferNodeCommand cmd;
     cmd.PVMFJitterBufferNodeCommandBase::Construct(s,
             PVMF_JITTER_BUFFER_NODE_CANCELCOMMAND,
             aCmdId,
-            aContext);
+            aContextData);
     return QueueCommandL(cmd);
 }
 
-/**
- * This routine is called by various command APIs to queue an
- * asynchronous command for processing by the command handler AO.
- * This function may leave if the command can't be queued due to
- * memory allocation failure.
- */
+void PVMFJitterBufferNode::HandlePortActivity(const PVMFPortActivity& aActivity)
+{
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::PortActivity: port=0x%x, type=%d",
+                         aActivity.iPort, aActivity.iType));
+
+    PVMFJitterBufferPortParams* portParamsPtr = NULL;
+    PVMFJitterBufferPort* jbPort = OSCL_STATIC_CAST(PVMFJitterBufferPort*, aActivity.iPort);
+    portParamsPtr = jbPort->iPortParams;
+
+    if (aActivity.iType != PVMF_PORT_ACTIVITY_DELETED)
+    {
+        if (portParamsPtr == NULL)
+        {
+            ReportErrorEvent(PVMFErrPortProcessing, (OsclAny*)(aActivity.iPort));
+            PVMF_JBNODE_LOGERROR((0, "0x%x PVMFJitterBufferNode::HandlePortActivity - getPortContainer Failed", this));
+            return;
+        }
+    }
+
+    /*
+     * A port is reporting some activity or state change.  This code
+     * figures out whether we need to queue a processing event
+     * for the AO, and/or report a node event to the observer.
+     */
+
+    switch (aActivity.iType)
+    {
+        case PVMF_PORT_ACTIVITY_CREATED:
+            /*
+             * Report port created info event to the node.
+             */
+            ReportInfoEvent(PVMFInfoPortCreated, (OsclAny*)aActivity.iPort);
+            break;
+
+        case PVMF_PORT_ACTIVITY_DELETED:
+            /*
+             * Report port deleted info event to the node.
+             */
+            ReportInfoEvent(PVMFInfoPortDeleted, (OsclAny*)aActivity.iPort);
+            break;
+
+        case PVMF_PORT_ACTIVITY_CONNECT:
+            //nothing needed.
+            break;
+
+        case PVMF_PORT_ACTIVITY_DISCONNECT:
+        {
+            if (ipJitterBufferMisc)
+            {
+                LogSessionDiagnostics();
+                ipJitterBufferMisc->StreamingSessionStopped();
+            }
+        }
+        break;
+
+        case PVMF_PORT_ACTIVITY_OUTGOING_MSG:
+        {
+            if (portParamsPtr->iProcessOutgoingMessages)
+            {
+                /*
+                 * An outgoing message was queued on this port.
+                 * All ports have outgoing messages
+                 * in this node
+                 */
+                QueuePortActivity(portParamsPtr, aActivity);
+            }
+        }
+        break;
+
+        case PVMF_PORT_ACTIVITY_INCOMING_MSG:
+        {
+            /*
+             * An outgoing message was queued on this port.
+             * Only input and feedback ports have incoming messages
+             * in this node
+             */
+            int32 portTag = portParamsPtr->iTag;
+            switch (portTag)
+            {
+                case PVMF_JITTER_BUFFER_PORT_TYPE_INPUT:
+                case PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK:
+                    if (portParamsPtr->iProcessIncomingMessages)
+                    {
+                        QueuePortActivity(portParamsPtr, aActivity);
+                    }
+                    break;
+
+                default:
+                    OSCL_ASSERT(false);
+                    break;
+            }
+        }
+        break;
+
+        case PVMF_PORT_ACTIVITY_OUTGOING_QUEUE_BUSY:
+        {
+            int32 portTag = portParamsPtr->iTag;
+            switch (portTag)
+            {
+                case PVMF_JITTER_BUFFER_PORT_TYPE_INPUT:
+                    /*
+                     * We typically use incoming port's outgoing q
+                     * only in case of 3GPP streaming, wherein we
+                     * send firewall packets. If it is busy, it does
+                     * not stop us from registering incoming data pkts.
+                     * so do nothing.
+                     */
+                    break;
+
+                case PVMF_JITTER_BUFFER_PORT_TYPE_OUTPUT:
+                {
+                    /*
+                     * This implies that this output port cannot accept any more
+                     * msgs on its outgoing queue. This would usually imply that
+                     * the corresponding input port must stop processing messages,
+                     * however in case of jitter buffer the input and output ports
+                     * are separated by a huge jitter buffer. Therefore continue
+                     * to process the input.
+                     */
+                }
+                break;
+
+                case PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK:
+                    portParamsPtr->iProcessIncomingMessages = false;
+                    break;
+
+                default:
+                    OSCL_ASSERT(false);
+                    break;
+            }
+        }
+        break;
+
+        case PVMF_PORT_ACTIVITY_OUTGOING_QUEUE_READY:
+        {
+            int32 portTag = portParamsPtr->iTag;
+            /*
+             * Outgoing queue was previously busy, but is now ready.
+             * We may need to schedule new processing events depending
+             * on the port type.
+             */
+            switch (portTag)
+            {
+                case PVMF_JITTER_BUFFER_PORT_TYPE_INPUT:
+                    /*
+                     * We never did anything in PVMF_PORT_ACTIVITY_OUTGOING_QUEUE_BUSY
+                     * so do nothing
+                     */
+                    break;
+
+                case PVMF_JITTER_BUFFER_PORT_TYPE_OUTPUT:
+                {
+                    /*
+                     * This implies that this output port can accept more
+                     * msgs on its outgoing queue. This implies that the corresponding
+                     * input port can start processing messages again.
+                     */
+                    PVMFJitterBufferPort* jbPort = OSCL_STATIC_CAST(PVMFJitterBufferPort*, aActivity.iPort);
+                    PVMFJitterBufferPortParams* inPortParams = jbPort->iCounterpartPortParams;
+                    if (inPortParams != NULL)
+                    {
+                        inPortParams->iProcessIncomingMessages = true;
+                    }
+                    else
+                    {
+                        OSCL_ASSERT(false);
+                    }
+                }
+                break;
+
+                case PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK:
+                    portParamsPtr->iProcessIncomingMessages = true;
+                    break;
+
+                default:
+                    OSCL_ASSERT(false);
+                    break;
+            }
+            if (IsAdded())
+            {
+                RunIfNotReady();
+            }
+        }
+        break;
+
+        case PVMF_PORT_ACTIVITY_CONNECTED_PORT_BUSY:
+        {
+            /*
+             * The connected port has become busy (its incoming queue is
+             * busy).
+             */
+            int32 portTag = portParamsPtr->iTag;
+            switch (portTag)
+            {
+                case PVMF_JITTER_BUFFER_PORT_TYPE_INPUT:
+                    break;
+
+                case PVMF_JITTER_BUFFER_PORT_TYPE_OUTPUT:
+                {
+                    /*
+                     * This implies that this output port cannot send any more
+                     * msgs from its outgoing queue. It should stop processing
+                     * messages till the connect port is ready.
+                     */
+                    portParamsPtr->iProcessOutgoingMessages = false;
+                }
+                break;
+
+                case PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK:
+                    portParamsPtr->iProcessOutgoingMessages = false;
+                    break;
+
+                default:
+                    OSCL_ASSERT(false);
+                    break;
+            }
+        }
+        break;
+
+        case PVMF_PORT_ACTIVITY_CONNECTED_PORT_READY:
+        {
+            /*
+             * The connected port has transitioned from Busy to Ready.
+             * It's time to start processing messages outgoing again.
+             */
+            int32 portTag = portParamsPtr->iTag;
+            switch (portTag)
+            {
+                case PVMF_JITTER_BUFFER_PORT_TYPE_INPUT:
+                    break;
+
+                case PVMF_JITTER_BUFFER_PORT_TYPE_OUTPUT:
+                    /*
+                     * This implies that this output port can now send
+                     * msgs from its outgoing queue. It can start processing
+                     * messages now.
+                     */
+                    portParamsPtr->iProcessOutgoingMessages = true;
+                    break;
+
+                case PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK:
+                    portParamsPtr->iProcessOutgoingMessages = true;
+                    break;
+
+                default:
+                    OSCL_ASSERT(false);
+                    break;
+            }
+            if (IsAdded())
+            {
+                RunIfNotReady();
+            }
+        }
+        break;
+
+        default:
+            break;
+    }
+}
+
+/////////////////////////////////////////////////////
+// Port Processing routines
+/////////////////////////////////////////////////////
+void PVMFJitterBufferNode::QueuePortActivity(PVMFJitterBufferPortParams* aPortParams,
+        const PVMFPortActivity &aActivity)
+{
+    OSCL_UNUSED_ARG(aPortParams);
+    OSCL_UNUSED_ARG(aActivity);
+
+    if (IsAdded())
+    {
+        /*
+         * wake up the AO to process the port activity event.
+         */
+        RunIfNotReady();
+    }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//Extension interfaces function implementation
+///////////////////////////////////////////////////////////////////////////////
+void PVMFJitterBufferNode::SetRTCPIntervalInMicroSecs(uint32 aRTCPInterval)
+{
+    OSCL_UNUSED_ARG(aRTCPInterval);
+}
+
+bool PVMFJitterBufferNode::SetPortParams(PVMFPortInterface* aPort,
+        uint32 aTimeScale,
+        uint32 aBitRate,
+        OsclRefCounterMemFrag& aConfig,
+        bool aRateAdaptation,
+        uint32 aRateAdaptationFeedBackFrequency)
+{
+    return SetPortParams(aPort, aTimeScale, aBitRate, aConfig, aRateAdaptation,
+                         aRateAdaptationFeedBackFrequency, false);
+}
+
+bool PVMFJitterBufferNode::SetPlayRange(int32 aStartTimeInMS,
+                                        int32 aStopTimeInMS,
+                                        bool aPlayAfterASeek,
+                                        bool aStopTimeAvailable)
+{
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::SetPlayRange In StartTime[%d], StopTime[%d] StopTimeValid[%d] PlayingAfterSeek[%d]", aStartTimeInMS, aStopTimeInMS, aStopTimeAvailable, aPlayAfterASeek));
+    ipJitterBufferMisc->SetPlayRange(aStartTimeInMS, aStopTimeInMS, aPlayAfterASeek, aStopTimeAvailable);
+    return true;
+}
+
+void PVMFJitterBufferNode::SetPlayBackThresholdInMilliSeconds(uint32 aThreshold)
+{
+    OSCL_UNUSED_ARG(aThreshold);
+}
+
+void PVMFJitterBufferNode::SetJitterBufferRebufferingThresholdInMilliSeconds(uint32 aThreshold)
+{
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::SetJitterBufferRebufferingThresholdInMilliSeconds Threshhold[%d]", aThreshold));
+    if (aThreshold < iJitterBufferDurationInMilliSeconds)
+    {
+        iRebufferingThreshold = aThreshold;
+        Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator it;
+        for (it = iPortParamsQueue.begin(); it != iPortParamsQueue.end(); it++)
+        {
+            PVMFJitterBufferPortParams* pPortParams = *it;
+            if ((pPortParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT))
+            {
+                PVMFJitterBuffer* jitterBuffer = pPortParams->ipJitterBuffer;
+                if (jitterBuffer)
+                {
+                    jitterBuffer->SetRebufferingThresholdInMilliSeconds(aThreshold);
+                }
+            }
+        }
+    }
+}
+
+void PVMFJitterBufferNode::GetJitterBufferRebufferingThresholdInMilliSeconds(uint32& aThreshold)
+{
+    aThreshold = iRebufferingThreshold;
+}
+
+void PVMFJitterBufferNode::SetJitterBufferDurationInMilliSeconds(uint32 aDuration)
+{
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::SetJitterBufferDurationInMilliSeconds Duration [%d]", aDuration));
+    uint32 duration = iJitterBufferDurationInMilliSeconds;
+    if (aDuration > iRebufferingThreshold)
+    {
+        duration = aDuration;
+        iJitterBufferDurationInMilliSeconds = duration;
+    }
+
+    Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator it;
+    for (it = iPortParamsQueue.begin(); it != iPortParamsQueue.end(); it++)
+    {
+        PVMFJitterBufferPortParams* pPortParams  = *it;
+        if ((pPortParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT))
+        {
+            PVMFJitterBuffer* jitterBuffer = pPortParams->ipJitterBuffer;
+            if (jitterBuffer)
+            {
+                jitterBuffer->SetDurationInMilliSeconds(duration);
+            }
+        }
+    }
+}
+
+void PVMFJitterBufferNode::GetJitterBufferDurationInMilliSeconds(uint32& duration)
+{
+    duration = iJitterBufferDurationInMilliSeconds;
+}
+
+void PVMFJitterBufferNode::SetEarlyDecodingTimeInMilliSeconds(uint32 duration)
+{
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::SetEarlyDecodingTimeInMilliSeconds - Early Decoding Time [%d]", duration));
+    Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator iter;
+    for (iter = iPortParamsQueue.begin(); iter != iPortParamsQueue.end(); iter++)
+    {
+        PVMFJitterBufferPortParams* pPortParams = *iter;
+        if (pPortParams && (pPortParams->ipJitterBuffer) && (PVMF_JITTER_BUFFER_PORT_TYPE_INPUT == pPortParams->iTag))
+        {
+            pPortParams->ipJitterBuffer->SetEarlyDecodingTimeInMilliSeconds(duration);
+        }
+    }
+}
+
+void PVMFJitterBufferNode::SetBurstThreshold(float burstThreshold)
+{
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::SetBurstThreshold burstThreshold[%f]", burstThreshold));
+    Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator iter;
+    for (iter = iPortParamsQueue.begin(); iter != iPortParamsQueue.end(); iter++)
+    {
+        PVMFJitterBufferPortParams* pPortParams = *iter;
+        if (pPortParams && (pPortParams->ipJitterBuffer) && (PVMF_JITTER_BUFFER_PORT_TYPE_INPUT == pPortParams->iTag))
+        {
+            pPortParams->ipJitterBuffer->SetBurstThreshold(burstThreshold);
+        }
+    }
+}
+
+void PVMFJitterBufferNode::SetMaxInactivityDurationForMediaInMs(uint32 aDuration)
+{
+    iMaxInactivityDurationForMediaInMs = aDuration;
+}
+
+void PVMFJitterBufferNode::GetMaxInactivityDurationForMediaInMs(uint32& aDuration)
+{
+    aDuration = iMaxInactivityDurationForMediaInMs;
+}
+
+void PVMFJitterBufferNode::SetClientPlayBackClock(PVMFMediaClock* aClientClock)
+{
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::SetClientPlayBackClock %x", aClientClock));
+    //remove ourself as observer of old clock, if any.
+    //Todo: Repetition should make sence only after call to Reset function.
+    ipClientPlayBackClock = aClientClock;
+}
+
+bool PVMFJitterBufferNode::PrepareForRepositioning(bool oUseExpectedClientClockVal ,
+        uint32 aExpectedClientClockVal)
+{
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::PrepareForRepositioning oUseExpectedClientClockVal[%d], aExpectedClientClockVal[%d]", oUseExpectedClientClockVal, aExpectedClientClockVal));
+    iJitterBufferState = PVMF_JITTER_BUFFER_IN_TRANSITION;
+    ipJitterBufferMisc->PrepareForRepositioning(oUseExpectedClientClockVal, aExpectedClientClockVal);
+    return true;
+}
+
+bool PVMFJitterBufferNode::SetPortSSRC(PVMFPortInterface* aPort, uint32 aSSRC)
+{
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::SetPortSSRC aPort[%x], aSSRC[%d]", aPort, aSSRC));
+    return ipJitterBufferMisc->SetPortSSRC(aPort, aSSRC);
+}
+
+bool PVMFJitterBufferNode::SetPortRTPParams(PVMFPortInterface* aPort,
+        bool   aSeqNumBasePresent,
+        uint32 aSeqNumBase,
+        bool   aRTPTimeBasePresent,
+        uint32 aRTPTimeBase,
+        bool   aNPTTimeBasePresent,
+        uint32 aNPTInMS,
+        bool oPlayAfterASeek)
+{
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::SetPortRTPParams In Port - 0x%x", aPort));
+    uint32 i;
+    //The above method is called only during 3GPP repositioning, however, since the aPort param in the signature
+    // takes care only of the input port, the output port msg queues aren't cleared.
+    // As a result ClearMsgQueues need to be called explicity on all the ports.
+    //The oPlayAfterASeek check is necessary since the clearing of msg queues has to be carried out only during repositioning,
+    // not otherwise
+    if (oPlayAfterASeek)
+    {
+        for (i = 0; i < iPortParamsQueue.size(); i++)
+        {
+            PVMFJitterBufferPortParams* pPortParams = iPortParamsQueue[i];
+            pPortParams->irPort.ClearMsgQueues();
+        }
+    }
+    for (i = 0; i < iPortParamsQueue.size(); i++)
+    {
+        PVMFJitterBufferPortParams* pPortParams = iPortParamsQueue[i];
+
+        if (&pPortParams->irPort == aPort)
+        {
+            if (pPortParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
+            {
+                if (pPortParams->ipJitterBuffer != NULL)
+                {
+                    PVMFRTPInfoParams rtpInfoParams;
+                    rtpInfoParams.seqNumBaseSet = aSeqNumBasePresent;
+                    rtpInfoParams.seqNum = aSeqNumBase;
+                    rtpInfoParams.rtpTimeBaseSet = aRTPTimeBasePresent;
+                    rtpInfoParams.rtpTime = aRTPTimeBase;
+                    rtpInfoParams.nptTimeBaseSet = aNPTTimeBasePresent;
+                    rtpInfoParams.nptTimeInMS = aNPTInMS;
+                    rtpInfoParams.rtpTimeScale = pPortParams->iTimeScale;
+                    pPortParams->ipJitterBuffer->setRTPInfoParams(rtpInfoParams, oPlayAfterASeek);
+                    /* In case this is after a reposition purge the jitter buffer */
+                    if (oPlayAfterASeek)
+                    {
+                        uint32 timebase32 = 0;
+                        uint32 clientClock32 = 0;
+                        bool overflowFlag = false;
+                        if (ipClientPlayBackClock != NULL)
+                            ipClientPlayBackClock->GetCurrentTime32(clientClock32, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
+#if (PVLOGGER_INST_LEVEL > PVLOGMSG_INST_LLDBG)
+
+                        PVMF_JBNODE_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::setPortRTPParams - Purging Upto SeqNum =%d", aSeqNumBase));
+                        PVMF_JBNODE_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::setPortRTPParams - Before Purge - ClientClock=%d",
+                                                     clientClock32));
+#endif
+                        pPortParams->ipJitterBuffer->PurgeElementsWithSeqNumsLessThan(aSeqNumBase,
+                                clientClock32);
+#if (PVLOGGER_INST_LEVEL > PVLOGMSG_INST_LLDBG)
+                        PVMF_JBNODE_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::setPortRTPParams - After Purge - ClientClock=%d",
+                                                     clientClock32));
+#endif
+                        /*
+                         * Since we flushed the jitter buffer, set it to ready state,
+                         * reset the delay flag
+                         */
+                        iDelayEstablished = false;
+                        iJitterBufferState = PVMF_JITTER_BUFFER_READY;
+                        //iPlayingAfterSeek = true;
+                    }
+                }
+                return true;
+            }
+        }
+    }
+    return false;
+}
+
+bool PVMFJitterBufferNode::SetPortRTCPParams(PVMFPortInterface* aPort,
+        int aNumSenders,
+        uint32 aRR,
+        uint32 aRS)
+{
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::SetPortRTCPParams aPort - [0x%x]", aPort));
+    return ipJitterBufferMisc->SetPortRTCPParams(aPort, aNumSenders, aRR, aRS);
+}
+
+PVMFTimestamp PVMFJitterBufferNode::GetActualMediaDataTSAfterSeek()
+{
+    return ipJitterBufferMisc->GetActualMediaDataTSAfterSeek();
+}
+
+PVMFTimestamp PVMFJitterBufferNode::GetMaxMediaDataTS()
+{
+    return ipJitterBufferMisc->GetMaxMediaDataTS();
+}
+
+PVMFStatus PVMFJitterBufferNode::SetServerInfo(PVMFJitterBufferFireWallPacketInfo& aServerInfo)
+{
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::SetServerInfo In"));
+    if (iDisableFireWallPackets == false)
+    {
+        ipJitterBufferMisc->SetServerInfo(aServerInfo);
+    }
+    else
+    {
+        PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::setServerInfo: FW Pkts Disabled"));
+        if (iCurrentCommand.size() > 0)
+        {
+            if (iCurrentCommand.front().iCmd == PVMF_JITTER_BUFFER_NODE_PREPARE)
+            {
+                /* No firewall packet exchange - Complete Prepare */
+                CompletePrepare();
+            }
+        }
+    }
+    return PVMFSuccess;
+}
+
+PVMFStatus PVMFJitterBufferNode::NotifyOutOfBandEOS()
+{
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::NotifyOutOfBandEOS In"));
+    // Ignore Out Of Band EOS for any Non Live stream
+    if (ipJitterBufferMisc && (!ipJitterBufferMisc->PlayStopTimeAvailable()))
+    {
+        if (iJitterBufferState != PVMF_JITTER_BUFFER_IN_TRANSITION)
+        {
+            ipJitterBufferMisc->SetSessionDurationExpired();
+            CancelEventCallBack(JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED);
+            PVMF_JBNODE_LOGDATATRAFFIC((0, "PVMFJitterBufferNode::NotifyOutOfBandEOS - Out Of Band EOS Recvd"));
+            PVMF_JBNODE_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::NotifyOutOfBandEOS - Out Of Band EOS Recvd"));
+        }
+        else
+        {
+            PVMF_JBNODE_LOGDATATRAFFIC((0, "PVMFJitterBufferNode::NotifyOutOfBandEOS - Ignoring Out Of Band EOS in Transition State"));
+            PVMF_JBNODE_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::NotifyOutOfBandEOS - Ignoring Out Of Band EOS in Transition State"));
+        }
+    }
+    else
+    {
+        PVMF_JBNODE_LOGDATATRAFFIC((0, "PVMFJitterBufferNode::NotifyOutOfBandEOS - Ignoring Out Of Band EOS for Non Live Stream"));
+        PVMF_JBNODE_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::NotifyOutOfBandEOS - Ignoring Out Of Band EOS for Non Live Stream"));
+    }
+    return PVMFSuccess;
+}
+
+PVMFStatus PVMFJitterBufferNode::SendBOSMessage(uint32 aStreamID)
+{
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::SendBOSMessage In"));
+    Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator it;
+    for (it = iPortParamsQueue.begin();
+            it != iPortParamsQueue.end();
+            it++)
+    {
+        PVMFJitterBufferPortParams* pPortParams = *it;
+        if (pPortParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
+        {
+            if (pPortParams->ipJitterBuffer)
+            {
+                pPortParams->ipJitterBuffer->QueueBOSCommand(aStreamID);
+            }
+        }
+    }
+    PVMF_JBNODE_LOGDATATRAFFIC((0, "PVMFJitterBufferNode::SendBOSMessage - BOS Recvd"));
+    return PVMFSuccess;
+}
+
+void PVMFJitterBufferNode::SetJitterBufferChunkAllocator(OsclMemPoolResizableAllocator*
+        aDataBufferAllocator, const PVMFPortInterface* aPort)
+{
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::SetJitterBufferChunkAllocator -aPort 0x%x", aPort));
+    PVMFJitterBufferPort* port = OSCL_STATIC_CAST(PVMFJitterBufferPort*, aPort);
+    if (port->iPortParams->ipJitterBuffer)
+    {
+        port->iPortParams->ipJitterBuffer->SetJitterBufferChunkAllocator(aDataBufferAllocator);
+    }
+}
+
+void PVMFJitterBufferNode::SetJitterBufferMemPoolInfo(const PvmfPortBaseImpl* aPort,
+        uint32 aSize,
+        uint32 aResizeSize,
+        uint32 aMaxNumResizes,
+        uint32 aExpectedNumberOfBlocksPerBuffer)
+{
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::SetJitterBufferMemPoolInfo Port 0x%x", aPort));
+    PVMFJitterBufferPort* port = OSCL_STATIC_CAST(PVMFJitterBufferPort*, aPort);
+    if (port->iPortParams->ipJitterBuffer)
+    {
+        port->iPortParams->ipJitterBuffer->SetJitterBufferMemPoolInfo(aSize, aResizeSize, aMaxNumResizes, aExpectedNumberOfBlocksPerBuffer);
+    }
+}
+
+void PVMFJitterBufferNode::GetJitterBufferMemPoolInfo(const PvmfPortBaseImpl* aPort,
+        uint32& aSize,
+        uint32& aResizeSize,
+        uint32& aMaxNumResizes,
+        uint32& aExpectedNumberOfBlocksPerBuffer) const
+{
+    PVMFJitterBufferPort* port = OSCL_STATIC_CAST(PVMFJitterBufferPort*, aPort);
+    if (port->iPortParams->ipJitterBuffer)
+    {
+        port->iPortParams->ipJitterBuffer->GetJitterBufferMemPoolInfo(aSize, aResizeSize, aMaxNumResizes, aExpectedNumberOfBlocksPerBuffer);
+    }
+}
+
+void PVMFJitterBufferNode::SetSharedBufferResizeParams(uint32 maxNumResizes,
+        uint32 resizeSize)
+{
+    // make sure we're in a state that makes sense
+    OSCL_ASSERT((iInterfaceState == EPVMFNodeCreated) ||
+                (iInterfaceState == EPVMFNodeIdle) ||
+                (iInterfaceState == EPVMFNodeInitialized));
+
+    iMaxNumBufferResizes = maxNumResizes;
+    iBufferResizeSize = resizeSize;
+}
+
+void PVMFJitterBufferNode::GetSharedBufferResizeParams(uint32& maxNumResizes,
+        uint32& resizeSize)
+{
+    maxNumResizes = iMaxNumBufferResizes;
+    resizeSize = iBufferResizeSize;
+}
+
+bool PVMFJitterBufferNode::ClearJitterBuffer(PVMFPortInterface* aPort,
+        uint32 aSeqNum)
+{
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::ClearJitterBuffer Port 0x%x aSeqNum[%d]", aPort, aSeqNum));
+    /* Typically called only for HTTP streaming sessions */
+    Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator it;
+    for (it = iPortParamsQueue.begin(); it != iPortParamsQueue.end(); it++)
+    {
+        PVMFJitterBufferPortParams* pPortParams = *it;
+        pPortParams->irPort.ClearMsgQueues();
+    }
+
+    for (it = iPortParamsQueue.begin(); it != iPortParamsQueue.end(); it++)
+    {
+        PVMFJitterBufferPortParams* pPortParams = *it;
+        if (&pPortParams->irPort == aPort && (pPortParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT) && (pPortParams->ipJitterBuffer != NULL))
+        {
+            uint32 timebase32 = 0;
+            uint32 clientClock32 = 0;
+            bool overflowFlag = false;
+            if (ipClientPlayBackClock != NULL)
+                ipClientPlayBackClock->GetCurrentTime32(clientClock32, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
+            pPortParams->ipJitterBuffer->PurgeElementsWithSeqNumsLessThan(aSeqNum,
+                    clientClock32);
+            ipJitterBufferMisc->ResetSession();
+            iJitterBufferState = PVMF_JITTER_BUFFER_READY;
+            return true;
+        }
+    }
+    return false;
+}
+
+void PVMFJitterBufferNode::FlushJitterBuffer()
+{
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::FlushJitterBuffer In"));
+    for (uint32 i = 0; i < iPortParamsQueue.size(); i++)
+    {
+        PVMFJitterBufferPortParams* pPortParams = iPortParamsQueue[i];
+        if (pPortParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
+        {
+            if (pPortParams->ipJitterBuffer != NULL)
+            {
+                pPortParams->ipJitterBuffer->FlushJitterBuffer();
+            }
+        }
+    }
+}
+
+PVMFStatus PVMFJitterBufferNode::SetInputMediaHeaderPreParsed(PVMFPortInterface* aPort,
+        bool aHeaderPreParsed)
+{
+    PVMFStatus status = PVMFFailure;
+    PVMFJitterBufferPort *port = OSCL_STATIC_CAST(PVMFJitterBufferPort*, aPort);
+    if (port)
+    {
+        PVMFJitterBufferPortParams* portParams = port->GetPortParams();
+        if (portParams && portParams->ipJitterBuffer)
+        {
+            status = portParams->ipJitterBuffer->SetInputPacketHeaderPreparsed(aHeaderPreParsed);
+        }
+    }
+    return status;
+}
+
+PVMFStatus PVMFJitterBufferNode::HasSessionDurationExpired(bool& aExpired)
+{
+    aExpired = ipJitterBufferMisc->IsSessionExpired();
+    PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::HasSessionDurationExpired %d", aExpired));
+    return PVMFSuccess;
+}
+
+bool PVMFJitterBufferNode::PurgeElementsWithNPTLessThan(NptTimeFormat &aNPTTime)
+{
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::PurgeElementsWithNPTLessThan"));
+    bool retval = false;
+
+    if (ipJitterBufferMisc)
+    {
+        retval = ipJitterBufferMisc->PurgeElementsWithNPTLessThan(aNPTTime);
+    }
+
+    iJitterBufferState = PVMF_JITTER_BUFFER_READY;
+
+    return retval;
+}
+
+void PVMFJitterBufferNode::SetBroadCastSession()
+{
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::SetBroadCastSession"));
+    iBroadCastSession = true;
+    if (ipJitterBufferMisc)
+    {
+        ipJitterBufferMisc->SetBroadcastSession();
+    }
+}
+
+void PVMFJitterBufferNode::DisableFireWallPackets()
+{
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::DisableFireWallPackets"));
+    if (ipJitterBufferMisc)
+        ipJitterBufferMisc->MediaReceivingChannelPreparationRequired(false);
+}
+
+void PVMFJitterBufferNode::UpdateJitterBufferState()
+{
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::UpdateJitterBufferState"));
+    Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator iter;
+    for (iter = iPortParamsQueue.begin(); iter != iPortParamsQueue.end(); iter ++)
+    {
+        PVMFJitterBufferPortParams* ptr = *iter;
+        if (PVMF_JITTER_BUFFER_PORT_TYPE_INPUT == ptr->iTag)
+        {
+            ptr->ipJitterBuffer->SetJitterBufferState(PVMF_JITTER_BUFFER_READY);
+        }
+    }
+    iDelayEstablished = true;
+}
+
+void PVMFJitterBufferNode::StartOutputPorts()
+{
+    oStopOutputPorts = false;
+}
+
+void PVMFJitterBufferNode::StopOutputPorts()
+{
+    oStopOutputPorts = true;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//Used for the implementation of extension interface functions
+///////////////////////////////////////////////////////////////////////////////
+bool
+PVMFJitterBufferNode::SetPortParams(PVMFPortInterface* aPort,
+                                    uint32 aTimeScale,
+                                    uint32 aBitRate,
+                                    OsclRefCounterMemFrag& aConfig,
+                                    bool aRateAdaptation,
+                                    uint32 aRateAdaptationFeedBackFrequency,
+                                    uint aMaxNumBuffResizes, uint aBuffResizeSize)
+{
+    return SetPortParams(aPort, aTimeScale, aBitRate, aConfig, aRateAdaptation,
+                         aRateAdaptationFeedBackFrequency, true,
+                         aMaxNumBuffResizes, aBuffResizeSize);
+}
+bool
+PVMFJitterBufferNode::SetPortParams(PVMFPortInterface* aPort,
+                                    uint32 aTimeScale,
+                                    uint32 aBitRate,
+                                    OsclRefCounterMemFrag& aConfig,
+                                    bool aRateAdaptation,
+                                    uint32 aRateAdaptationFeedBackFrequency,
+                                    bool aUserSpecifiedBuffParams,
+                                    uint aMaxNumBuffResizes, uint aBuffResizeSize)
+{
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::SetPortParams"));
+    OSCL_UNUSED_ARG(aUserSpecifiedBuffParams);
+    uint32 ii;
+    for (ii = 0; ii < iPortParamsQueue.size(); ii++)
+    {
+        PVMFJitterBufferPortParams* pPortParams = iPortParamsQueue[ii];
+
+        if (&pPortParams->irPort == aPort)
+        {
+            pPortParams->iTimeScale = aTimeScale;
+            pPortParams->iMediaClockConverter.set_timescale(aTimeScale);
+            pPortParams->iBitrate = aBitRate;
+            if (pPortParams->ipJitterBuffer)
+            {
+                pPortParams->ipJitterBuffer->SetTrackConfig(aConfig);
+                pPortParams->ipJitterBuffer->SetTimeScale(aTimeScale);
+                pPortParams->ipJitterBuffer->SetMediaClockConverter(&pPortParams->iMediaClockConverter);
+            }
+
+
+            /* Compute buffer size based on bitrate and jitter duration*/
+            uint32 sizeInBytes = 0;
+            if (((int32)iJitterBufferDurationInMilliSeconds > 0) &&
+                    ((int32)aBitRate > 0))
+            {
+                uint32 byteRate = aBitRate / 8;
+                uint32 overhead = (byteRate * PVMF_JITTER_BUFFER_NODE_MEM_POOL_OVERHEAD) / 100;
+                uint32 durationInSec = iJitterBufferDurationInMilliSeconds / 1000;
+                sizeInBytes = ((byteRate + overhead) * durationInSec);
+                if (sizeInBytes < MIN_RTP_SOCKET_MEM_POOL_SIZE_IN_BYTES)
+                {
+                    sizeInBytes = MIN_RTP_SOCKET_MEM_POOL_SIZE_IN_BYTES;
+                }
+                sizeInBytes += (2 * MAX_SOCKET_BUFFER_SIZE);
+            }
+
+            if (pPortParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
+            {
+                PVMFJitterBuffer* jitterBuffer = NULL;
+                jitterBuffer = pPortParams->ipJitterBuffer;
+
+                if (jitterBuffer)
+                {
+                    pPortParams->ipJitterBuffer->SetJitterBufferMemPoolInfo(sizeInBytes, aBuffResizeSize, aMaxNumBuffResizes, 3000);
+                }
+
+                if (ipJitterBufferMisc)
+                    ipJitterBufferMisc->SetRateAdaptationInfo(&pPortParams->irPort, aRateAdaptation, aRateAdaptationFeedBackFrequency, sizeInBytes);
+            }
+
+            iPortParamsQueue[ii] = pPortParams;
+            return true;
+        }
+    }
+    return false;
+}
+
+// This routine is called by various command APIs to queue an
+// asynchronous command for processing by the command handler AO.
+// This function may leave if the command can't be queued due to
+// memory allocation failure.
 PVMFCommandId PVMFJitterBufferNode::QueueCommandL(PVMFJitterBufferNodeCommand& aCmd)
 {
     PVMFCommandId id;
@@ -745,17 +1488,626 @@
     return id;
 }
 
+///////////////////////////////////////////////////////////////////////////////
+//OsclActiveObject Implementation
+///////////////////////////////////////////////////////////////////////////////
 /**
- * Asynchronous Command processing routines.
- * These routines are all called under the AO.
- */
+  * This AO handles both API commands and port activity.
+  * The AO will either process one command or service one connected
+  * port per call.  It will re-schedule itself and run continuously
+  * until it runs out of things to do.
+  */
+void PVMFJitterBufferNode::Run()
+{
+    iNumRunL++;
+    /*
+     * Process commands.
+     */
+    if (!iInputCommands.empty())
+    {
+        if (ProcessCommand(iInputCommands.front()))
+        {
+            /*
+             * note: need to check the state before re-scheduling
+             * since the node could have been reset in the ProcessCommand
+             * call.
+             */
+            if (iInterfaceState != EPVMFNodeCreated)
+            {
+                if (IsAdded())
+                {
+                    RunIfNotReady();
+                }
+            }
+            return;
+        }
+    }
+
+    /*
+     * Process port activity
+     */
+    if (((iInterfaceState == EPVMFNodeInitialized) ||
+            (iInterfaceState == EPVMFNodePrepared) ||
+            (iInterfaceState == EPVMFNodeStarted)  ||
+            (iInterfaceState == EPVMFNodePaused)) ||
+            FlushPending())
+    {
+        uint32 i;
+        for (i = 0; i < iPortVector.size(); i++)
+        {
+            PVMFJitterBufferPortParams* portContainerPtr =
+                iPortVector[i]->iPortParams;
+
+            if (portContainerPtr == NULL)
+            {
+                if (!getPortContainer(iPortVector[i], portContainerPtr))
+                {
+                    PVMF_JBNODE_LOGERROR((0, "0x%x PVMFJitterBufferNode::Run: Error - getPortContainer failed", this));
+                    return;
+                }
+                iPortVector[i]->iPortParams = portContainerPtr;
+            }
+
+            ProcessPortActivity(portContainerPtr);
+        }
+
+        if (CheckForPortRescheduling())
+        {
+            if (IsAdded())
+            {
+                /*
+                 * Re-schedule since there is atleast one port that needs processing
+                 */
+                RunIfNotReady();
+            }
+            return;
+        }
+    }
+
+    /*
+     * If we get here we did not process any ports or commands.
+     * Check for completion of a flush command...
+     */
+    if (FlushPending() && (!CheckForPortActivityQueues()))
+    {
+        uint32 i;
+        /*
+         * Debug check-- all the port queues should be empty at
+         * this point.
+         */
+        for (i = 0;i < iPortVector.size();i++)
+        {
+            if (iPortVector[i]->IncomingMsgQueueSize() > 0 ||
+                    iPortVector[i]->OutgoingMsgQueueSize() > 0)
+            {
+                OSCL_ASSERT(false);
+            }
+        }
+        /*
+         * Flush is complete.  Go to prepared state.
+         */
+        SetState(EPVMFNodePrepared);
+        /*
+         * resume port input so the ports can be re-started.
+         */
+        for (i = 0;i < iPortVector.size();i++)
+        {
+            iPortVector[i]->ResumeInput();
+        }
+        CommandComplete(iCurrentCommand, iCurrentCommand.front(), PVMFSuccess);
+        if (IsAdded())
+        {
+            RunIfNotReady();
+        }
+    }
+    return;
+}
+
+void PVMFJitterBufferNode::DoCancel()
+{
+    /*
+     * the base class cancel operation is sufficient.
+     */
+    OsclActiveObject::DoCancel();
+}
+
+bool PVMFJitterBufferNode::ProcessPortActivity(PVMFJitterBufferPortParams* aPortParams)
+{
+    if (!aPortParams)
+    {
+        return false;
+    }
+
+    PVMFStatus status = PVMFSuccess;
+    switch (aPortParams->iTag)
+    {
+        case PVMF_JITTER_BUFFER_PORT_TYPE_OUTPUT:
+        {
+            if ((aPortParams->iProcessOutgoingMessages) &&
+                    (aPortParams->irPort.OutgoingMsgQueueSize() > 0))
+            {
+                status = ProcessOutgoingMsg(aPortParams);
+            }
+            /*
+             * Send data out of jitter buffer as long as there's:
+             *  - more data to send
+             *  - outgoing queue isn't in a Busy state.
+             *  - ports are not paused
+             */
+            PVMFJitterBufferPort* outPort = OSCL_STATIC_CAST(PVMFJitterBufferPort*, &aPortParams->irPort);
+            PVMFJitterBufferPortParams* inPortParamsPtr = outPort->iCounterpartPortParams;
+            if (aPortParams->iProcessOutgoingMessages)
+            {
+                if ((oStopOutputPorts == false) && (inPortParamsPtr->iCanReceivePktFromJB))
+                {
+                    SendData(OSCL_STATIC_CAST(PVMFPortInterface*, &inPortParamsPtr->irPort));
+                }
+            }
+        }
+        break;
+
+        case PVMF_JITTER_BUFFER_PORT_TYPE_INPUT:
+        {
+            PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::ProcessPortActivity: input port- aPortParams->iProcessIncomingMessages %d aPortParams->iPort->IncomingMsgQueueSize()  %d" ,
+                                 aPortParams->iProcessIncomingMessages, aPortParams->irPort.IncomingMsgQueueSize()));
+            if ((aPortParams->iProcessIncomingMessages) &&
+                    (aPortParams->irPort.IncomingMsgQueueSize() > 0))
+            {
+                status = ProcessIncomingMsg(aPortParams);
+            }
+            if ((aPortParams->iProcessOutgoingMessages) &&
+                    (aPortParams->irPort.OutgoingMsgQueueSize() > 0))
+            {
+                status = ProcessOutgoingMsg(aPortParams);
+            }
+        }
+        break;
+
+        case PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK:
+        {
+            PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::ProcessPortActivity: - aPortParams->iProcessIncomingMessages %d aPortParams->iPort->IncomingMsgQueueSize()  %d" ,
+                                 aPortParams->iProcessIncomingMessages, aPortParams->irPort.IncomingMsgQueueSize()));
+
+            if ((aPortParams->iProcessIncomingMessages) &&
+                    (aPortParams->irPort.IncomingMsgQueueSize() > 0))
+            {
+                status = ProcessIncomingMsg(aPortParams);
+            }
+            if ((aPortParams->iProcessOutgoingMessages) &&
+                    (aPortParams->irPort.OutgoingMsgQueueSize() > 0))
+            {
+                status = ProcessOutgoingMsg(aPortParams);
+            }
+        }
+        break;
+
+        default:
+            break;
+    }
+
+    /*
+     * Report any unexpected failure in port processing...
+     * (the InvalidState error happens when port input is suspended,
+     * so don't report it.)
+     */
+    if (status != PVMFErrBusy
+            && status != PVMFSuccess
+            && status != PVMFErrInvalidState)
+    {
+        PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ProcessPortActivity: Error - ProcessPortActivity failed. port=0x%x",
+                              &aPortParams->irPort));
+        ReportErrorEvent(PVMFErrPortProcessing, (OsclAny*)(&aPortParams->irPort));
+    }
+
+    /*
+     * return true if we processed an activity...
+     */
+    return (status != PVMFErrBusy);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//Processing of incoming msg
+///////////////////////////////////////////////////////////////////////////////
+PVMFStatus PVMFJitterBufferNode::ProcessIncomingMsg(PVMFJitterBufferPortParams* aPortParams)
+{
+    PVUuid eventuuid = PVMFJitterBufferNodeEventTypeUUID;
+    PVMFPortInterface* aPort = &aPortParams->irPort;
+
+    PVMF_JBNODE_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferNode::ProcessIncomingMsg: %s Tag %d", aPortParams->iMimeType.get_cstr(), aPortParams->iTag));
+
+    aPortParams->iNumMediaMsgsRecvd++;
+
+    if (aPortParams->iMonitorForRemoteActivity == true)
+    {
+        CancelEventCallBack(JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED);
+        RequestEventCallBack(JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED);
+    }
+
+    switch (aPortParams->iTag)
+    {
+        case PVMF_JITTER_BUFFER_PORT_TYPE_INPUT:
+        {
+            /* Parse packet header - mainly to retrieve time stamp */
+            PVMFJitterBuffer* jitterBuffer = aPortParams->ipJitterBuffer;
+            if (jitterBuffer == NULL)
+            {
+                PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ProcessIncomingMsg: findJitterBuffer failed"));
+                int32 errcode = PVMFJitterBufferNodeUnableToRegisterIncomingPacket;
+                ReportErrorEvent(PVMFErrArgument, (OsclAny*)(aPort), &eventuuid, &errcode);
+                return PVMFErrArgument;
+            }
+
+            /*
+             * Incoming message recvd on the input port.
+             * Dequeue the message
+             */
+            PVMFSharedMediaMsgPtr msg;
+            PVMFStatus status = aPort->DequeueIncomingMsg(msg);
+            if (status != PVMFSuccess)
+            {
+                ReportErrorEvent(PVMFErrPortProcessing, (OsclAny*)(aPort));
+                PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ProcessIncomingMsg: Error - INPUT PORT - DequeueIncomingMsg failed"));
+                return status;
+            }
+
+            PVMFJitterBufferRegisterMediaMsgStatus regStatus = jitterBuffer->RegisterMediaMsg(msg);
+            switch (regStatus)
+            {
+
+                case PVMF_JB_REGISTER_MEDIA_MSG_SUCCESS:
+                {
+                    PVMF_JBNODE_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferNode::ProcessIncomingMsg: Packet registered successfully Mime %s", aPortParams->iMimeType.get_cstr()));
+                }
+                break;
+                case PVMF_JB_REGISTER_MEDIA_MSG_FAILURE_JB_FULL:
+                {
+                    aPortParams->iProcessIncomingMessages = false;
+                    jitterBuffer->NotifyFreeSpaceAvailable();
+                    int32 infocode = PVMFJitterBufferNodeJitterBufferFull;
+                    ReportInfoEvent(PVMFInfoOverflow, (OsclAny*)(aPort), &eventuuid, &infocode);
+                    PVMF_JBNODE_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferNode::ProcessIncomingMsg: Jitter Buffer full"));
+                    PVMF_JBNODE_LOGDATATRAFFIC_FLOWCTRL_E((0, "PVMFJitterBufferNode::ProcessIncomingMsg: Jitter Buffer full"));
+                    return PVMFErrBusy;
+                }
+                break;
+                case PVMF_JB_REGISTER_MEDIA_MSG_FAILURE_INSUFFICIENT_MEMORY_FOR_PACKETIZATION:
+                {
+                    aPortParams->iProcessIncomingMessages = false;
+                    jitterBuffer->NotifyFreeSpaceAvailable();
+                    return PVMFErrBusy;
+                }
+                break;
+                case PVMF_JB_REGISTER_MEDIA_MSG_ERR_CORRUPT_PACKET:
+                {
+                    PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ProcessIncomingMsg: unable to register packet"));
+                    int32 errcode = PVMFJitterBufferNodeUnableToRegisterIncomingPacket;
+                    ReportErrorEvent(PVMFErrArgument, (OsclAny*)(aPort), &eventuuid, &errcode);
+                    return PVMFErrArgument;
+                }
+                case PVMF_JB_REGISTER_MEDIA_MSG_ERR_EOS_SIGNALLED:
+                {
+                    PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ProcessIncomingMsg: data received after signalling EOS"));
+                }
+                break;
+                default:
+                {
+                    PVMF_JBNODE_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferNode::ProcessIncomingMsg: Packet could not be registered Register packet returned status %d", regStatus));
+                    PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ProcessIncomingMsg: Packet could not be registered Register packet returned status %d", regStatus));
+                }
+            }
+            SendData(aPort);
+        }
+        break;
+
+        case PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK:
+        {
+            /*
+            * Incoming RTCP reports - recvd on the input port.
+            * Dequeue the message - Need to fully implement
+            * RTCP
+            */
+            PVMFSharedMediaMsgPtr msg;
+            PVMFStatus status = aPort->DequeueIncomingMsg(msg);
+            if (status != PVMFSuccess)
+            {
+                ReportErrorEvent(PVMFErrPortProcessing, (OsclAny*)(aPort));
+                PVMF_JBNODE_LOGERROR((0, "0x%x PVMFJitterBufferNode::ProcessIncomingMsg: Error - FB PORT - DequeueIncomingMsg failed", this));
+                return status;
+            }
+            status = ipJitterBufferMisc->ProcessFeedbackMessage(*aPortParams, msg);
+            PVMF_JBNODE_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferNode::ProcessIncomingMsg: Feedback Packet registered with status code status %d", status));
+        }
+        break;
+
+        default:
+        {
+            ReportErrorEvent(PVMFErrPortProcessing, (OsclAny*)(aPort));
+            PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ProcessIncomingMsg - Invalid Port Tag"));
+            return PVMFFailure;
+        }
+    }
+    return (PVMFSuccess);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//Processing of outgoing msg
+///////////////////////////////////////////////////////////////////////////////
+PVMFStatus PVMFJitterBufferNode::ProcessOutgoingMsg(PVMFJitterBufferPortParams* aPortParams)
+{
+    PVMFPortInterface* aPort = &aPortParams->irPort;
+    /*
+     * Called by the AO to process one message off the outgoing
+     * message queue for the given port.  This routine will
+     * try to send the data to the connected port.
+     */
+    PVMF_JBNODE_LOGINFO((0, "0x%x PVMFJitterBufferNode::ProcessOutgoingMsg: aPort=0x%x", this, aPort));
+
+    /*
+     * If connected port is busy, the outgoing message cannot be process. It will be
+     * queued to be processed again after receiving PORT_ACTIVITY_CONNECTED_PORT_READY
+     * from this port.
+     */
+    if (aPort->IsConnectedPortBusy())
+    {
+        PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "0x%x PVMFJitterBufferNode::ProcessOutgoingMsg: Connected port is busy", this));
+        aPortParams->iProcessOutgoingMessages = false;
+        return PVMFErrBusy;
+    }
+
+    PVMFStatus status = PVMFSuccess;
+
+    status = aPort->Send();
+    if (status == PVMFErrBusy)
+    {
+        PVMF_JBNODE_LOGDATATRAFFIC((0, "PVMFJitterBufferNode::ProcessOutgoingMsg: Connected port goes into busy state"));
+        aPortParams->iProcessOutgoingMessages = false;
+    }
+    else
+    {
+        aPortParams->iNumMediaMsgsSent++;
+    }
+    return status;
+}
+
+PVMFStatus
+PVMFJitterBufferNode::SendData(PVMFPortInterface* aPort)
+{
+    PVMFJitterBufferPort* jbPort =
+        OSCL_STATIC_CAST(PVMFJitterBufferPort*, aPort);
+
+    PVMFPortInterface* outputPort = jbPort->iPortCounterpart;
+    PVMFJitterBufferPortParams* portParamsPtr = jbPort->iPortParams;
+    PVMFJitterBufferPortParams* outPortParamsPtr = jbPort->iCounterpartPortParams;
+    PVMFJitterBuffer* jitterBuffer = portParamsPtr->ipJitterBuffer;
+
+    PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::SendData In %s", outPortParamsPtr->iMimeType.get_cstr())) ;
+
+    if (!(portParamsPtr->iCanReceivePktFromJB))
+    {
+        PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::SendData - Cant retrieve pkt from JB"));
+        return PVMFFailure;
+    }
+
+    if (outPortParamsPtr->irPort.IsOutgoingQueueBusy())
+    {
+        outPortParamsPtr->iProcessOutgoingMessages = false;
+        PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::SendData - Port found to be busy %s", outPortParamsPtr->iMimeType.get_cstr())) ;
+        return PVMFErrBusy;
+    }
+
+    if (oStopOutputPorts)
+    {
+        PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::SendData from Mime[%s] Output ports Stopped--", jbPort->iPortParams->iMimeType.get_cstr()));
+        return PVMFSuccess;
+    }
+
+    PVMFSharedMediaMsgPtr mediaOutMsg;
+    bool cmdPacket = false;
+    PVMFStatus status = jbPort->iPortParams->ipJitterBuffer->RetrievePacket(mediaOutMsg, cmdPacket);
+    while (PVMFSuccess == status)
+    {
+        if (!cmdPacket)
+        {
+            //media msg
+            outPortParamsPtr->iLastMsgTimeStamp = mediaOutMsg->getTimestamp();
+        }
+
+        status = outputPort->QueueOutgoingMsg(mediaOutMsg);
+
+        PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::SendData from Mime[%s] MediaMsg SeqNum[%d], Ts[%d]", jbPort->iPortParams->iMimeType.get_cstr(), mediaOutMsg->getSeqNum(), mediaOutMsg->getTimestamp()));
+
+        if (outPortParamsPtr->irPort.IsOutgoingQueueBusy())
+        {
+            outPortParamsPtr->iProcessOutgoingMessages = false;
+            PVMFJitterBufferStats stats = jbPort->iPortParams->ipJitterBuffer->getJitterBufferStats();
+            PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "Send Data Mime %s stats.currentOccupancy[%d], stats.maxSeqNumRegistered[%d], stats.lastRetrievedSeqNum[%d] stats.maxTimeStampRetrievedWithoutRTPOffset[%d] SendOut Pkt[%d]", jbPort->iPortParams->iMimeType.get_cstr(), stats.currentOccupancy, stats.maxSeqNumRegistered, stats.lastRetrievedSeqNum, stats.maxTimeStampRetrievedWithoutRTPOffset, outPortParamsPtr->iNumMediaMsgsSent));
+            return PVMFErrBusy;
+        }
+        status = jbPort->iPortParams->ipJitterBuffer->RetrievePacket(mediaOutMsg, cmdPacket);
+    }
+
+    if (PVMFErrNotReady == status)
+    {
+        PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::SendData from Mime[%s] JB not ready", jbPort->iPortParams->iMimeType.get_cstr()));
+
+
+        uint32 currentTime32 = 0;
+        uint32 currentTimeBase32 = 0;
+        bool overflowFlag = false;
+        ipJitterBufferMisc->GetEstimatedServerClock().GetCurrentTime32(currentTime32,
+                overflowFlag,
+                PVMF_MEDIA_CLOCK_MSEC,
+                currentTimeBase32);
+
+
+        PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::SendData - Estimated serv clock %d", currentTime32));
+        currentTime32 = 0;
+        currentTimeBase32 = 0;
+        ipClientPlayBackClock->GetCurrentTime32(currentTime32,
+                                                overflowFlag,
+                                                PVMF_MEDIA_CLOCK_MSEC,
+                                                currentTimeBase32);
+        PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::SendData - Client serv clock %d", currentTime32));
+
+
+        PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::SendData - Occupancy is %d delayestablish %d", jbPort->iPortParams->ipJitterBuffer->getJitterBufferStats().currentOccupancy, iDelayEstablished));
+
+        portParamsPtr->iCanReceivePktFromJB = false;
+        jitterBuffer->NotifyCanRetrievePacket();
+        return PVMFErrNotReady;
+    }
+
+    return status;
+}
+
+bool PVMFJitterBufferNode::CheckForPortRescheduling()
+{
+    //This method is only called from JB Node AO's Run.
+    //Purpose of this method is to determine whether the node
+    //needs scheduling based on any outstanding port activities
+    //Here is the scheduling criteria for different port types:
+    //a) PVMF_JITTER_BUFFER_PORT_TYPE_INPUT - If there are incoming
+    //msgs waiting in incoming msg queue then node needs scheduling,
+    //as long oProcessIncomingMessages is true. This boolean stays true
+    //as long we can register packets in JB. If JB is full this boolean
+    //is made false (when CheckForSpaceInJitterBuffer() returns false)
+    //and is once again made true in JitterBufferFreeSpaceAvailable() callback.
+    //We also use the input port briefly as a bidirectional port in case of
+    //RTSP streaming to do firewall packet exchange. So if there are outgoing
+    //msgs and oProcessOutgoingMessages is true then node needs scheduling.
+    //b) PVMF_JITTER_BUFFER_PORT_TYPE_OUTPUT - As long as:
+    //	- there are msgs in outgoing queue
+    //	- oProcessOutgoingMessages is true
+    //	- and as long as there is data in JB and we are not in buffering
+    //then node needs scheduling.
+    //c) PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK - As long as:
+    //	- there are msgs in incoming queue and oProcessIncomingMessages is true
+    //	- there are msgs in outgoing queue and oProcessOutgoingMessages is true
+    uint32 i;
+    for (i = 0; i < iPortVector.size(); i++)
+    {
+        PVMFJitterBufferPortParams* portContainerPtr = iPortVector[i]->iPortParams;
+        if (portContainerPtr == NULL)
+        {
+            PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::CheckForPortRescheduling: Error - GetPortContainer failed"));
+            return false;
+        }
+        if (portContainerPtr->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
+        {
+            if (portContainerPtr->irPort.IncomingMsgQueueSize() > 0)
+            {
+                if (portContainerPtr->iProcessIncomingMessages)
+                {
+                    /*
+                     * Found a port that has outstanding activity and
+                     * is not busy.
+                     */
+                    return true;
+                }
+            }
+            if (portContainerPtr->irPort.OutgoingMsgQueueSize() > 0)
+            {
+                if (portContainerPtr->iProcessOutgoingMessages)
+                {
+                    /*
+                     * Found a port that has outstanding activity and
+                     * is not busy.
+                     */
+                    return true;
+                }
+            }
+        }
+        else if (portContainerPtr->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_OUTPUT)
+        {
+            PVMFJitterBufferPort* jbPort =
+                OSCL_STATIC_CAST(PVMFJitterBufferPort*, &portContainerPtr->irPort);
+            PVMFJitterBufferPortParams* inPortParamsPtr = jbPort->iCounterpartPortParams;
+            if ((portContainerPtr->irPort.OutgoingMsgQueueSize() > 0) ||
+                    (inPortParamsPtr->iCanReceivePktFromJB))
+            {
+                if ((portContainerPtr->iProcessOutgoingMessages) && (oStopOutputPorts == false))
+                {
+                    /*
+                     * Found a port that has outstanding activity and
+                     * is not busy.
+                     */
+                    return true;
+                }
+            }
+        }
+        else if (portContainerPtr->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK)
+        {
+            if (portContainerPtr->irPort.IncomingMsgQueueSize() > 0)
+            {
+                if (portContainerPtr->iProcessIncomingMessages)
+                {
+                    /*
+                     * Found a port that has outstanding activity and
+                     * is not busy.
+                     */
+                    return true;
+                }
+            }
+            if (portContainerPtr->irPort.OutgoingMsgQueueSize() > 0)
+            {
+                if (portContainerPtr->iProcessOutgoingMessages)
+                {
+                    /*
+                     * Found a port that has outstanding activity and
+                     * is not busy.
+                     */
+                    return true;
+                }
+            }
+        }
+    }
+    /*
+     * No port processing needed - either all port activity queues are empty
+     * or the ports are backed up due to flow control.
+     */
+    return false;
+}
+
+bool PVMFJitterBufferNode::CheckForPortActivityQueues()
+{
+    uint32 i;
+    for (i = 0; i < iPortVector.size(); i++)
+    {
+        PVMFJitterBufferPortParams* portContainerPtr = NULL;
+
+        if (!getPortContainer(iPortVector[i], portContainerPtr))
+        {
+            PVMF_JBNODE_LOGERROR((0, "0x%x PVMFJitterBufferNode::CheckForPortActivityQueues: Error - GetPortContainer failed", this));
+            return false;
+        }
+
+        if ((portContainerPtr->irPort.IncomingMsgQueueSize() > 0) ||
+                (portContainerPtr->irPort.OutgoingMsgQueueSize() > 0))
+        {
+            /*
+             * Found a port that still has an outstanding activity.
+             */
+            return true;
+        }
+    }
+
+    return false;
+}
 
 /**
- * Called by the command handler AO to process a command from
- * the input queue.
- * Return true if a command was processed, false if the command
- * processor is busy and can't process another command now.
+ * A routine to tell if a flush operation is in progress.
  */
+bool PVMFJitterBufferNode::FlushPending()
+{
+    return (iCurrentCommand.size() > 0
+            && iCurrentCommand.front().iCmd == PVMF_JITTER_BUFFER_NODE_FLUSH);
+}
+
+// Called by the command handler AO to process a command from
+// the input queue.
+// Return true if a command was processed, false if the command
+// processor is busy and can't process another command now.
+
 bool PVMFJitterBufferNode::ProcessCommand(PVMFJitterBufferNodeCommand& aCmd)
 {
     /*
@@ -832,9 +2184,20 @@
     return true;
 }
 
-/**
- * The various command handlers call this when a command is complete.
- */
+void
+PVMFJitterBufferNode::MoveCmdToCurrentQueue(PVMFJitterBufferNodeCommand& aCmd)
+{
+    int32 err;
+    OSCL_TRY(err, iCurrentCommand.StoreL(aCmd););
+    if (err != OsclErrNone)
+    {
+        CommandComplete(iInputCommands, aCmd, PVMFErrNoMemory);
+        return;
+    }
+    iInputCommands.Erase(&aCmd);
+    return;
+}
+
 void PVMFJitterBufferNode::CommandComplete(PVMFJitterBufferNodeCmdQ& aCmdQ,
         PVMFJitterBufferNodeCommand& aCmd,
         PVMFStatus aStatus,
@@ -955,182 +2318,24 @@
     }
 }
 
-void
-PVMFJitterBufferNode::MoveCmdToCurrentQueue(PVMFJitterBufferNodeCommand& aCmd)
-{
-    int32 err;
-    OSCL_TRY(err, iCurrentCommand.StoreL(aCmd););
-    if (err != OsclErrNone)
-    {
-        CommandComplete(iInputCommands, aCmd, PVMFErrNoMemory);
-        return;
-    }
-    iInputCommands.Erase(&aCmd);
-    return;
-}
-
-/**
- * Called by the command handler AO to do the node Reset.
- */
-void PVMFJitterBufferNode::DoReset(PVMFJitterBufferNodeCommand& aCmd)
-{
-    PVMF_JBNODE_LOGERROR((0, "JitterBufferNode:DoReset %d", iInterfaceState));
-
-    LogSessionDiagnostics();
-
-    /* This node allows a reset from any idle or error state */
-    switch (iInterfaceState)
-    {
-        case EPVMFNodeStarted:
-        case EPVMFNodePaused:
-        {
-            CancelEventCallBack(JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED);
-            CancelEventCallBack(JB_MONITOR_REBUFFERING);
-            /* Stop session duration timer */
-            iSessionDurationTimer->Stop();
-            /* Stop RTCP Timer */
-            Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-            for (it = iPortParamsQueue.begin();
-                    it != iPortParamsQueue.end();
-                    it++)
-            {
-                if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK)
-                {
-                    if (it->iRTCPTimer != NULL)
-                        it->iRTCPTimer->Stop();
-                }
-                CancelEventCallBack(JB_NOTIFY_WAIT_FOR_OOO_PACKET_COMPLETE, it);
-            }
-
-            CancelEventCallBack(JB_NOTIFY_SEND_FIREWALL_PACKET);
-            /* Pause Estimated Server Clock */
-            PVMFStatus aStatus = PVMFSuccess;
-            if (iEstimatedServerClock)
-            {
-                iEstimatedServerClock->Pause();
-            }
-            if (iRTCPClock)
-            {
-                iRTCPClock->Pause();
-            }
-            /* Clear queued messages in ports */
-            uint32 i;
-            for (i = 0; i < iPortVector.size(); i++)
-            {
-                PVMFJitterBufferPortParams* portParams = NULL;
-                bool bRet = getPortContainer(iPortVector[i], portParams);
-                if (bRet)
-                {
-                    if (portParams->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-                    {
-                        portParams->iJitterBuffer->ResetJitterBuffer();
-                    }
-
-                    portParams->ResetParams();
-                }
-                iPortVector[i]->ClearMsgQueues();
-            }
-
-            if (aStatus == PVMFSuccess)
-            {
-                /* Reset State Variables */
-                oDelayEstablished = false;
-                oSessionDurationExpired = false;
-                oStopOutputPorts = true;
-                oAutoPause = false;
-                oStartPending = false;
-                iJitterBufferState = PVMF_JITTER_BUFFER_READY;
-                iJitterDelayPercent = 0;
-            }
-        }
-        /* Intentional fall thru */
-        case EPVMFNodeCreated:
-        case EPVMFNodeIdle:
-        case EPVMFNodeInitialized:
-        case EPVMFNodePrepared:
-        case EPVMFNodeError:
-        {
-            /* Stop Estimated Server Clock */
-            if (iEstimatedServerClock)
-            {
-                iEstimatedServerClock->Stop();
-            }
-            if (iRTCPClock)
-            {
-                iRTCPClock->Stop();
-            }
-            /* delete all ports and notify observer */
-            while (!iPortVector.empty())
-            {
-                iPortVector.Erase(&iPortVector.front());
-            }
-
-            for (uint32 i = 0; i < iPortParamsQueue.size(); i++)
-            {
-                if (iPortParamsQueue[i].iBufferAlloc != NULL)
-                {
-                    iPortParamsQueue[i].iBufferAlloc->CancelFreeMemoryAvailableCallback();
-                    iPortParamsQueue[i].iBufferAlloc->removeRef();
-                    iPortParamsQueue[i].iBufferAlloc = NULL;
-                }
-            }
-
-            /* delete port params */
-            Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-            while (!iPortParamsQueue.empty())
-            {
-                it = iPortParamsQueue.begin();
-                if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-                {
-                    /* Delete the jitter buffer */
-                    PVMF_JITTER_BUFFER_DELETE(NULL,
-                                              PVMFJitterBufferImpl,
-                                              ((PVMFJitterBufferImpl*)(it->iJitterBuffer)));
-                    DestroyFireWallPacketMemAllocators(it);
-                }
-                else if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK)
-                {
-
-                    PVMF_JITTER_BUFFER_DELETE(NULL, PvmfRtcpTimer, it->iRTCPTimer);
-                }
-                iPortParamsQueue.erase(it);
-            }
-            /* restore original port vector reserve */
-            iPortVector.Reconstruct();
-            iUseSessionDurationTimerForEOS = true;
-            SetState(EPVMFNodeIdle);
-            CommandComplete(iInputCommands, aCmd, PVMFSuccess);
-        }
-        iNonDecreasingClock->Stop();
-        break;
-
-        default:
-            CommandComplete(iInputCommands, aCmd, PVMFErrInvalidState);
-            break;
-    }
-}
-
-/**
- * Called by the command handler AO to do the Query UUID
- */
+///////////////////////////////////////////////////////////////////////////////
+//Called by the command handler AO to do the Query UUID
+///////////////////////////////////////////////////////////////////////////////
 void PVMFJitterBufferNode::DoQueryUuid(PVMFJitterBufferNodeCommand& aCmd)
 {
-    /* This node supports Query UUID from any state */
+    // This node supports Query UUID from any state
     OSCL_String* mimetype;
     Oscl_Vector<PVUuid, OsclMemAllocator> *uuidvec;
     bool exactmatch;
     aCmd.PVMFJitterBufferNodeCommandBase::Parse(mimetype, uuidvec, exactmatch);
 
-    /*
-     * Try to match the input mimetype against any of
-     * the custom interfaces for this node
-     */
+    // Try to match the input mimetype against any of
+    // the custom interfaces for this node
 
-    /*
-     * Match against custom interface1...
-     * also match against base mimetypes for custom interface1,
-     * unless exactmatch is set.
-     */
+    // Match against custom interface1...
+    // also match against base mimetypes for custom interface1,
+    // unless exactmatch is set.
+
     if (*mimetype == PVMF_JITTERBUFFER_CUSTOMINTERFACE_MIMETYPE
             || (!exactmatch && *mimetype == PVMF_JITTERBUFFER_MIMETYPE)
             || (!exactmatch && *mimetype == PVMF_JITTERBUFFER_BASEMIMETYPE))
@@ -1141,21 +2346,21 @@
     CommandComplete(iInputCommands, aCmd, PVMFSuccess);
 }
 
-/**
- * Called by the command handler AO to do the Query Interface.
- */
+///////////////////////////////////////////////////////////////////////////////
+//Called by the command handler AO to do the Query Interface.
+///////////////////////////////////////////////////////////////////////////////
 void PVMFJitterBufferNode::DoQueryInterface(PVMFJitterBufferNodeCommand& aCmd)
 {
-    /* This node supports Query Interface from any state */
+    //This node supports Query Interface from any state
     PVUuid* uuid;
     PVInterface** ptr;
     aCmd.PVMFJitterBufferNodeCommandBase::Parse(uuid, ptr);
 
     if (*uuid == PVUuid(PVMF_JITTERBUFFERNODE_EXTENSIONINTERFACE_UUID))
     {
-        if (!iExtensionInterface)
+        if (!ipExtensionInterface)
         {
-            PVMFJitterBufferNodeAllocator alloc;
+            OsclMemAllocator alloc;
             int32 err;
             OsclAny*ptr = NULL;
             OSCL_TRY(err,
@@ -1167,10 +2372,10 @@
                 CommandComplete(iInputCommands, aCmd, PVMFErrNoMemory);
                 return;
             }
-            iExtensionInterface =
+            ipExtensionInterface =
                 OSCL_PLACEMENT_NEW(ptr, PVMFJitterBufferExtensionInterfaceImpl(this));
         }
-        if (iExtensionInterface->queryInterface(*uuid, *ptr))
+        if (ipExtensionInterface->queryInterface(*uuid, *ptr))
         {
             CommandComplete(iInputCommands, aCmd, PVMFSuccess);
         }
@@ -1181,51 +2386,55 @@
     }
     else
     {
-        /* not supported */
+        // not supported
         *ptr = NULL;
         CommandComplete(iInputCommands, aCmd, PVMFErrNotSupported);
     }
 }
 
-/**
- * Called by the command handler AO to do the port request
- */
+///////////////////////////////////////////////////////////////////////////////
+// Called by the command handler AO to do the port request
+// Decides the type of requested port
+// Reserve space in port vector for the new port
+// Instantiate the port and push it in the port vector
+// Populate portparms for tag (port type), jitterbuffer, port, iId,
+//
+///////////////////////////////////////////////////////////////////////////////
 void PVMFJitterBufferNode::DoRequestPort(PVMFJitterBufferNodeCommand& aCmd)
 {
-    /* This node supports port request from any state */
+    // This node supports port request from any state
     PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::DoRequestPort"));
 
-    /* retrieve port tag*/
+    // retrieve port tag
     int32 tag;
     OSCL_String* mimetype;
     aCmd.PVMFJitterBufferNodeCommandBase::Parse(tag, mimetype);
 
-    PVMFJitterBufferPortParams portParams;
-    /*
-     * Input ports have tags: 0, 3, 6, ...
-     * Output ports have tags: 1, 4, 7, ...
-     * Feedback ports have tags: 2, 5, 8, ...
-     */
+    PVMFJitterBufferNodePortTag jitterbufferPortTag = PVMF_JITTER_BUFFER_PORT_TYPE_INPUT;
+
     if (tag % 3)
     {
         if (tag % 3 == 1)
         {
-            portParams.tag = PVMF_JITTER_BUFFER_PORT_TYPE_OUTPUT;
+            jitterbufferPortTag = PVMF_JITTER_BUFFER_PORT_TYPE_OUTPUT;
         }
         else if (tag % 3 == 2)
         {
-            portParams.tag = PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK;
-            PVMF_JITTER_BUFFER_NEW(NULL, PvmfRtcpTimer, (this), (portParams.iRTCPTimer));
+            jitterbufferPortTag = PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK;
         }
     }
     else
     {
-        portParams.tag = PVMF_JITTER_BUFFER_PORT_TYPE_INPUT;
+        jitterbufferPortTag = PVMF_JITTER_BUFFER_PORT_TYPE_INPUT;
     }
 
+    // Input ports have tags: 0, 3, 6, ...
+    // Output ports have tags: 1, 4, 7, ...
+    // Feedback ports have tags: 2, 5, 8, ...
+
     //set port name for datapath logging.
     OSCL_StackString<20> portname;
-    switch (portParams.tag)
+    switch (jitterbufferPortTag)
     {
         case PVMF_JITTER_BUFFER_PORT_TYPE_OUTPUT:
             portname = "JitterBufOut";
@@ -1239,14 +2448,13 @@
             //portname="JitterBufIn";
             break;
         default:
+            // avoid compiler warning
             break;
     }
 
-    /* Allocate a new port */
-    OsclAny *ptr = NULL;
-    int32 err;
-    OSCL_TRY(err, ptr = iPortVector.Allocate(););
-    if (err != OsclErrNone || !ptr)
+    // Allocate a new port
+    OsclAny *ptr = AllocatePort();
+    if (!ptr)
     {
         PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::DoRequestPort: Error - iPortVector Out of memory"));
         CommandComplete(iInputCommands, aCmd, PVMFErrNoMemory);
@@ -1254,57 +2462,47 @@
     }
 
     OsclExclusivePtr<PVMFJitterBufferPort> portAutoPtr;
+    PVMFJitterBufferPort* port = NULL;
+
     OsclExclusivePtr<PVMFJitterBuffer> jitterBufferAutoPtr;
 
-    PVMFJitterBufferPort* port = NULL;
-    PVMFJitterBufferImpl* jbPtr = NULL;
-
-    /*
-     * create base port with default settings
-     */
-    port = OSCL_PLACEMENT_NEW(ptr, PVMFJitterBufferPort(tag, this, portname.get_str()));
+    // create base port with default settings
+    port = OSCL_PLACEMENT_NEW(ptr, PVMFJitterBufferPort(tag, *this, portname.get_str()));
     portAutoPtr.set(port);
 
     /* Add the port to the port vector. */
-    OSCL_TRY(err, iPortVector.AddL(port););
-    if (err != OsclErrNone)
+    if (!PushPortToVect(port))
     {
         CommandComplete(iInputCommands, aCmd, PVMFErrNoMemory);
         return;
     }
 
-    portParams.iJitterBuffer = NULL;
-    portParams.iPort = port;
-    portParams.id = tag;
-    OSCL_StackString<8> rtp(_STRLIT_CHAR("RTP"));
+    PVMFJitterBufferPortParams* pPortParams = OSCL_NEW(PVMFJitterBufferPortParams, (*port));
+    pPortParams->iTag = jitterbufferPortTag;
+    PVMFJitterBuffer* jbPtr = NULL;
+    pPortParams->ipJitterBuffer = NULL;
+    pPortParams->iId = tag;
     if (mimetype != NULL)
     {
-        if (oscl_strncmp(mimetype->get_cstr(), rtp.get_cstr(), 3) == 0)
-        {
-            portParams.iTransportType = rtp;
-            portParams.eTransportType = PVMF_JITTER_BUFFER_PORT_TRANSPORT_TYPE_RTP;
-        }
-        portParams.iMimeType = mimetype->get_str();
+        pPortParams->iMimeType = mimetype->get_str();
     }
 
-    /*
-     * create jitter buffer if input port
-     */
-    if (portParams.tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
+    // create jitter buffer if input port
+    if (pPortParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
     {
-        PVMF_JITTER_BUFFER_NEW(NULL, PVMFJitterBufferImpl, (mimetype), jbPtr);
+        PVMFJitterBufferConstructParams jbConstructParams(ipJitterBufferMisc->GetEstimatedServerClock(), *ipClientPlayBackClock, pPortParams->iMimeType, *ipJitterBufferMisc->GetEventNotifier(), iDelayEstablished, iJitterDelayPercent, iJitterBufferState, this, port);
+        jbPtr = ipJitterBufferFactory->Create(jbConstructParams);
+        if (jbPtr)
+            jbPtr->SetDurationInMilliSeconds(iJitterBufferDurationInMilliSeconds);
         jitterBufferAutoPtr.set(jbPtr);
-        portParams.iJitterBuffer = jbPtr;
-        jbPtr->SetEstimatedServerClock(iEstimatedServerClock);
-        CreateFireWallPacketMemAllocators(&portParams);
+        pPortParams->ipJitterBuffer = jbPtr;
         if (iBroadCastSession == true)
         {
             jbPtr->SetBroadCastSession();
         }
     }
 
-    OSCL_TRY(err, iPortParamsQueue.push_back(portParams););
-    if (err != OsclErrNone)
+    if (!PushPortParamsToQ(pPortParams))
     {
         PVMF_JBNODE_LOGERROR((0, "0x%x PVMFJitterBufferNode::DoRequestPort: Error - iPortParamsQueue.push_back() failed", this));
         CommandComplete(iInputCommands, aCmd, PVMFErrNoMemory);
@@ -1314,13 +2512,13 @@
 
     // Update the iPortParams for all existing ports since adding a new Port Parameters element might
     // have caused reallocation of the vector elements.
-    Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
+    Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator it;
     for (it = iPortParamsQueue.begin();
             it != iPortParamsQueue.end();
             it++)
     {
-        PVMFJitterBufferPortParams* portParametersPtr = it;
-        PVMFJitterBufferPort* portPtr = OSCL_REINTERPRET_CAST(PVMFJitterBufferPort*, portParametersPtr->iPort);
+        PVMFJitterBufferPortParams* portParametersPtr = *it;
+        PVMFJitterBufferPort* portPtr = OSCL_REINTERPRET_CAST(PVMFJitterBufferPort*, &portParametersPtr->irPort);
         portPtr->iPortParams = portParametersPtr;
 
         // Update also the port counterpart and port counterpart parameters
@@ -1346,10 +2544,45 @@
     portAutoPtr.release();
     jitterBufferAutoPtr.release();
 
+
     /* Return the port pointer to the caller. */
     CommandComplete(iInputCommands, aCmd, PVMFSuccess, (OsclAny*)port);
 }
 
+OsclAny* PVMFJitterBufferNode::AllocatePort()
+{
+    OsclAny *ptr = NULL;
+    int32 err;
+    OSCL_TRY(err, ptr = iPortVector.Allocate(););
+    if (err != OsclErrNone)
+    {
+        ptr = NULL;
+    }
+    return ptr;
+}
+
+bool PVMFJitterBufferNode::PushPortToVect(PVMFJitterBufferPort*& aPort)
+{
+    int32 err;
+    OSCL_TRY(err, iPortVector.AddL(aPort););
+    if (err != OsclErrNone)
+    {
+        return false;
+    }
+    return true;
+}
+
+bool PVMFJitterBufferNode::PushPortParamsToQ(PVMFJitterBufferPortParams*& aPortParams)
+{
+    int32 err;
+    OSCL_TRY(err, iPortParamsQueue.push_back(aPortParams););
+    if (err != OsclErrNone)
+    {
+        return false;
+    }
+    return true;
+}
+
 /**
  * Called by the command handler AO to do the port release
  */
@@ -1358,6 +2591,8 @@
     /*This node supports release port from any state*/
 
     /* Find the port in the port vector */
+    ResetNodeParams();
+
     PVMFPortInterface* p = NULL;
     aCmd.PVMFJitterBufferNodeCommandBase::Parse(p);
 
@@ -1367,28 +2602,19 @@
     if (portPtr)
     {
         /* delete corresponding port params */
-        Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
+        Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator it;
 
         for (it = iPortParamsQueue.begin();
                 it != iPortParamsQueue.end();
                 it++)
         {
-            if (it->iPort == iPortVector.front())
+            PVMFJitterBufferPortParams* pPortParams = *it;
+            if (&pPortParams->irPort == iPortVector.front())
             {
-                if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
+                if (pPortParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
                 {
-                    /* Delete the jitter buffer */
-                    PVMF_JITTER_BUFFER_DELETE(NULL,
-                                              PVMFJitterBufferImpl,
-                                              ((PVMFJitterBufferImpl*)(it->iJitterBuffer)));
-                    DestroyFireWallPacketMemAllocators(it);
+                    ipJitterBufferFactory->Destroy(pPortParams->ipJitterBuffer);
                 }
-                else if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK)
-                {
-
-                    PVMF_JITTER_BUFFER_DELETE(NULL, PvmfRtcpTimer, it->iRTCPTimer);
-                }
-
                 iPortParamsQueue.erase(it);
                 break;
             }
@@ -1405,22 +2631,32 @@
     }
 }
 
-/**
- * Called by the command handler AO to do the node Init
- */
+///////////////////////////////////////////////////////////////////////////////
+// Called by the command handler AO to initialize the node
+// Decides the type of requested port
+// Reserve space in port vector for the new port
+// Instantiate the port and push it in the port vector
+// Populate portparms for tag (port type), jitterbuffer, port, iId,
+//
+///////////////////////////////////////////////////////////////////////////////
 void PVMFJitterBufferNode::DoInit(PVMFJitterBufferNodeCommand& aCmd)
 {
     PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::DoInit"));
     switch (iInterfaceState)
     {
         case EPVMFNodeIdle:
-            /*
-             * this node doesn't need to do anything to get ready
-             * to prepare.
-             */
-            if (PVMFMediaClock::RUNNING != iNonDecreasingClock->GetState())
+            if (ipJitterBufferMisc)
             {
-                iNonDecreasingClock->Start(); //JB node may would have been paused -> reset -> Init
+                ipJitterBufferMisc->Reset();
+                OSCL_DELETE(ipJitterBufferMisc);
+                ipJitterBufferMisc = NULL;
+            }
+            ipJitterBufferMisc = PVMFJitterBufferMisc::New(this, *ipClientPlayBackClock, iPortParamsQueue);
+            if (ipJitterBufferMisc)
+            {
+                ipEventNotifier = ipJitterBufferMisc->GetEventNotifier();
+                if (iBroadCastSession == true)
+                    ipJitterBufferMisc->SetBroadcastSession();
             }
 
             SetState(EPVMFNodeInitialized);
@@ -1474,25 +2710,26 @@
                     }
                 }
             }
-            /* initialize the estimated server clock */
-            if (iEstimatedServerClock)
-            {
-                uint32 start = 0;
-                iEstimatedServerClock->Stop();
-                bool overflowFlag = false;
-                iEstimatedServerClock->SetStartTime32(start, PVMF_MEDIA_CLOCK_MSEC, overflowFlag);
-            }
-            if (iDisableFireWallPackets == false)
+
+            ipJitterBufferMisc->Prepare();
+            PVMFStatus status = ipJitterBufferMisc->PrepareMediaReceivingChannel();
+            if (PVMFPending == status)
             {
                 MoveCmdToCurrentQueue(aCmd);
-                /* Wait for firewall packet exchange, if any (wait of setServerInfo Call) */
             }
             else
             {
-                PVMF_JBNODE_LOG_FW((0, "PVMFJitterBufferNode::DoPrepare: FW Pkts Disabled"));
-                /* Complete prepare */
-                SetState(EPVMFNodePrepared);
-                CommandComplete(iInputCommands, aCmd, PVMFSuccess);
+                if (PVMFSuccess == status)
+                {
+                    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::DoPrepare: FW Pkts Disabled"));
+                    /* Complete prepare */
+                    SetState(EPVMFNodePrepared);
+                    CommandComplete(iInputCommands, aCmd, PVMFSuccess);
+                }
+                else
+                {
+                    CommandComplete(iInputCommands, aCmd, status);
+                }
             }
         }
         break;
@@ -1508,57 +2745,14 @@
     PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::CompletePrepare"));
     SetState(EPVMFNodePrepared);
     PVMFJitterBufferNodeCommand cmd = iCurrentCommand.front();
-    if (iDisableFireWallPackets == false)
-    {
-        CancelEventCallBack(JB_NOTIFY_SEND_FIREWALL_PACKET);
-
-        bool oFireWallPacketExchangeComplete = true;
-        Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-
-        for (it = iPortParamsQueue.begin();
-                it != iPortParamsQueue.end();
-                it++)
-        {
-            if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-            {
-                if (it->oFireWallPacketRecvd == false)
-                {
-                    oFireWallPacketExchangeComplete = false;
-                }
-            }
-        }
-        PVUuid eventuuid = PVMFJitterBufferNodeEventTypeUUID;
-        int32 errcode = PVMFJitterBufferNodeFirewallPacketExchangeFailed;
-        if (iCurrentCommand.size() > 0)
-        {
-            if (oFireWallPacketExchangeComplete == false)
-            {
-                /* Signal streaming manager in case it wants to attempt protocol rollover */
-                CommandComplete(cmd, PVMFSuccess, NULL, &eventuuid, &errcode);
-            }
-            else
-            {
-                CommandComplete(cmd, PVMFSuccess);
-            }
-            iCurrentCommand.Erase(&iCurrentCommand.front());
-        }
-    }
-    else
-    {
-        // need this check so we don't seg fault
-        // will this delete ever be necessary? this method is used synchronously
-        if (iCurrentCommand.size() > 0)
-        {
-            CommandComplete(cmd, PVMFSuccess);
-            iCurrentCommand.Erase(&iCurrentCommand.front());
-        }
-    }
+    CommandComplete(cmd, PVMFSuccess);
+    iCurrentCommand.Erase(&iCurrentCommand.front());
     return;
 }
 
 void PVMFJitterBufferNode::CancelPrepare()
 {
-    CancelEventCallBack(JB_NOTIFY_SEND_FIREWALL_PACKET);
+    ipJitterBufferMisc->CancelMediaReceivingChannelPreparation();
     PVMFJitterBufferNodeCommand cmd = iCurrentCommand.front();
     CommandComplete(cmd, PVMFErrCancelled);
     iCurrentCommand.Erase(&iCurrentCommand.front());
@@ -1577,52 +2771,57 @@
         case EPVMFNodePrepared:
         case EPVMFNodePaused:
         {
-            if (PVMFMediaClock::RUNNING != iNonDecreasingClock->GetState())
-            {
-                iNonDecreasingClock->Start();
-            }
+            ipJitterBufferMisc->StreamingSessionStarted();
             /* Diagnostic logging */
             iDiagnosticsLogged = false;
-            /* If auto paused, implies jitter buffer is not empty */
-            if (oAutoPause == false)
+            iMediaReceiveingChannelPrepared = true;
+
+            if (iInterfaceState == EPVMFNodePaused)
             {
-                if (oSessionDurationExpired == false)
+                uint32 currticks = OsclTickCount::TickCount();
+                uint32 startTime = OsclTickCount::TicksToMsec(currticks);
+                uint32 diff = (startTime - iPauseTime);
+                if (diff > PVMF_JITTER_BUFFER_NODE_FIREWALL_PKT_DEFAULT_PAUSE_DURATION_IN_MS)
                 {
-                    RequestEventCallBack(JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED);
-                    StartEstimatedServerClock();
-
-                }
-                /* Start RTCP Clock */
-                iRTCPClock->Start();
-
-                if (iInterfaceState == EPVMFNodePaused)
-                {
-                    if (iDisableFireWallPackets == false)
+                    if (PVMFPending == ipJitterBufferMisc->PrepareMediaReceivingChannel())
                     {
-                        uint32 currticks = OsclTickCount::TickCount();
-                        uint32 startTime = OsclTickCount::TicksToMsec(currticks);
-                        uint32 diff = (startTime - iPauseTime);
-                        if (diff > PVMF_JITTER_BUFFER_NODE_FIREWALL_PKT_DEFAULT_PAUSE_DURATION_IN_MS)
-                        {
-                            ResetFireWallPacketInfoAndResend();
-                        }
+                        iMediaReceiveingChannelPrepared = false;
                     }
                 }
+            }
 
-                if ((oDelayEstablished == false) ||
-                        (iJitterBufferState == PVMF_JITTER_BUFFER_IN_TRANSITION))
+            if (!ipJitterBufferMisc->IsSessionExpired())
+                RequestEventCallBack(JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED);
+
+            /* If auto paused, implies jitter buffer is not empty */
+            if ((iDelayEstablished == false) ||
+                    (iJitterBufferState == PVMF_JITTER_BUFFER_IN_TRANSITION))
+            {
+
+                Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator iter;
+                for (iter = iPortParamsQueue.begin(); iter != iPortParamsQueue.end(); iter++)
                 {
-                    /* Counter for intelligent streaming is reset at Start or setPlaybackRange*/
-                    iNumUnderFlow = 0;
-                    /* Start Buffering Status Timer */
-                    RequestEventCallBack(JB_NOTIFY_REPORT_BUFFERING_STATUS);
-                    /*
-                     * Move start to current msg queue where it would stay
-                     * jitter buffer is full.
-                     */
+                    PVMFJitterBufferPortParams* pPortParams = *iter;
+                    if (pPortParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
+                    {
+                        pPortParams->ipJitterBuffer->NotifyCanRetrievePacket();
+                    }
+                }
+                /*
+                 * Move start to current msg queue where it would stay
+                 * jitter buffer is full.
+                 */
+                oStartPending = true;
+                MoveCmdToCurrentQueue(aCmd);
+                ReportInfoEvent(PVMFInfoBufferingStart);
+                RequestEventCallBack(JB_NOTIFY_REPORT_BUFFERING_STATUS);
+            }
+            else
+            {
+                if (false == iMediaReceiveingChannelPrepared)
+                {
                     oStartPending = true;
                     MoveCmdToCurrentQueue(aCmd);
-                    ReportInfoEvent(PVMFInfoBufferingStart);
                 }
                 else
                 {
@@ -1634,24 +2833,6 @@
                     CommandComplete(iInputCommands, aCmd, PVMFSuccess);
                 }
             }
-            else
-            {
-                if (iInterfaceState == EPVMFNodePaused)
-                {
-                    uint32 currticks = OsclTickCount::TickCount();
-                    uint32 startTime = OsclTickCount::TicksToMsec(currticks);
-                    uint32 diff = (startTime - iPauseTime);
-                    if (diff > PVMF_JITTER_BUFFER_NODE_FIREWALL_PKT_DEFAULT_PAUSE_DURATION_IN_MS)
-                    {
-                        ResetFireWallPacketInfoAndResend();
-                    }
-                }
-                oStartPending = false;
-                SetState(EPVMFNodeStarted);
-                /* Enable Output Ports */
-                StartOutputPorts();
-                CommandComplete(iInputCommands, aCmd, PVMFSuccess);
-            }
         }
         break;
 
@@ -1666,6 +2847,10 @@
 void PVMFJitterBufferNode::CompleteStart()
 {
     PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::CompleteStart"));
+    PVMF_JBNODE_LOGDATATRAFFIC((0, "PVMFJitterBufferNode::CompleteStart"));
+
+    if (!iMediaReceiveingChannelPrepared)
+        return;
 
     PVMFJitterBufferNodeCommand aCmd = iCurrentCommand.front();
     if (iJitterBufferState == PVMF_JITTER_BUFFER_READY)
@@ -1682,10 +2867,14 @@
                 /* Enable Output Ports */
                 StartOutputPorts();
                 /* Enable remote activity monitoring */
-                Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
+                Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator it;
                 for (it = iPortParamsQueue.begin(); it != iPortParamsQueue.end(); it++)
                 {
-                    it->oMonitorForRemoteActivity = true;
+                    PVMFJitterBufferPortParams* pPortParams = *it;
+                    if (pPortParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
+                    {
+                        pPortParams->iMonitorForRemoteActivity = true;
+                    }
                 }
                 CommandComplete(aCmd, PVMFSuccess);
                 /* Erase the command from the current queue */
@@ -1714,34 +2903,9 @@
 
 void PVMFJitterBufferNode::CancelStart()
 {
-    CancelEventCallBack(JB_BUFFERING_DURATION_COMPLETE);
-    CancelEventCallBack(JB_NOTIFY_REPORT_BUFFERING_STATUS);
-    CancelEventCallBack(JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED);
-    /* Stop session duration timer */
-    iSessionDurationTimer->Stop();
-    /* Stop RTCP Timer */
-    Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-    for (it = iPortParamsQueue.begin();
-            it != iPortParamsQueue.end();
-            it++)
-    {
-        if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK)
-        {
-            if (it->iRTCPTimer != NULL)
-                it->iRTCPTimer->Stop();
-        }
-    }
+    if (ipJitterBufferMisc)
+        ipJitterBufferMisc->Reset();
 
-    CancelEventCallBack(JB_NOTIFY_SEND_FIREWALL_PACKET);
-    /* Pause Estimated Server Clock */
-    if (iEstimatedServerClock)
-    {
-        iEstimatedServerClock->Pause();
-    }
-    if (iRTCPClock)
-    {
-        iRTCPClock->Pause();
-    }
     PVMFJitterBufferNodeCommand aCmd = iCurrentCommand.front();
     oStartPending = false;
     CommandComplete(aCmd, PVMFErrCancelled);
@@ -1750,60 +2914,32 @@
     return;
 }
 
-/**
- * Called by the command handler AO to do the node Stop
- */
 void PVMFJitterBufferNode::DoStop(PVMFJitterBufferNodeCommand& aCmd)
 {
     PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::DoStop"));
     LogSessionDiagnostics();
+    PVMFStatus aStatus = PVMFSuccess;
 
     switch (iInterfaceState)
     {
         case EPVMFNodeStarted:
         case EPVMFNodePaused:
         {
-            CancelEventCallBack(JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED);
-            /* Stop session duration timer */
-            iSessionDurationTimer->Stop();
-            /* Stop RTCP Timer */
-            Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-            for (it = iPortParamsQueue.begin();
-                    it != iPortParamsQueue.end();
-                    it++)
-            {
-                if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK)
-                {
-                    if (it->iRTCPTimer != NULL)
-                        it->iRTCPTimer->Stop();
-                }
-                CancelEventCallBack(JB_NOTIFY_WAIT_FOR_OOO_PACKET_COMPLETE, it);
-                it->iRTCPStats.oRTCPByeRecvd = false;
-            }
-            CancelEventCallBack(JB_NOTIFY_SEND_FIREWALL_PACKET);
-            /* Pause Estimated Server Clock */
-            PVMFStatus aStatus = PVMFSuccess;
-            if (iEstimatedServerClock)
-            {
-                iEstimatedServerClock->Pause();
-            }
-            if (iRTCPClock)
-            {
-                iRTCPClock->Pause();
-            }
+            if (ipJitterBufferMisc)
+                ipJitterBufferMisc->StreamingSessionStopped();
+
             /* Clear queued messages in ports */
-            uint32 i;
-            for (i = 0; i < iPortVector.size(); i++)
+            for (uint32 i = 0; i < iPortVector.size(); i++)
             {
-                PVMFJitterBufferPortParams* portParams = NULL;
-                bool bRet = getPortContainer(iPortVector[i], portParams);
+                PVMFJitterBufferPortParams* pPortParams = NULL;
+                bool bRet = getPortContainer(iPortVector[i], pPortParams);
                 if (bRet)
                 {
-                    if (portParams->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
+                    if (pPortParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
                     {
-                        portParams->iJitterBuffer->ResetJitterBuffer();
+                        pPortParams->ipJitterBuffer->ResetJitterBuffer();
                     }
-                    portParams->ResetParams();
+                    pPortParams->ResetParams();
                 }
                 iPortVector[i]->ClearMsgQueues();
             }
@@ -1811,10 +2947,10 @@
             if (aStatus == PVMFSuccess)
             {
                 /* Reset State Variables */
-                oDelayEstablished = false;
-                oSessionDurationExpired = false;
+                iDelayEstablished = false;
+                if (ipJitterBufferMisc)
+                    ipJitterBufferMisc->SetSessionDurationExpired();
                 oStopOutputPorts = true;
-                oAutoPause = false;
                 oStartPending = false;
                 iJitterBufferState = PVMF_JITTER_BUFFER_READY;
                 iJitterDelayPercent = 0;
@@ -1824,7 +2960,7 @@
             }
             CommandComplete(iInputCommands, aCmd, aStatus);
         }
-        iNonDecreasingClock->Stop();
+
         break;
 
         default:
@@ -1838,60 +2974,10 @@
  */
 void PVMFJitterBufferNode::DoFlush(PVMFJitterBufferNodeCommand& aCmd)
 {
-    switch (iInterfaceState)
-    {
-        case EPVMFNodeStarted:
-        case EPVMFNodePaused:
-        {
-            /*
-             * the flush is asynchronous.  move the command from
-             * the input command queue to the current command, where
-             * it will remain until the flush completes.
-             */
-            int32 err;
-            OSCL_TRY(err, iCurrentCommand.StoreL(aCmd););
-            if (err != OsclErrNone)
-            {
-                CommandComplete(iInputCommands, aCmd, PVMFErrNoMemory);
-                return;
-            }
-            iInputCommands.Erase(&aCmd);
-
-            /* Notify all ports to suspend their input */
-            for (uint32 i = 0;i < iPortVector.size();i++)
-                iPortVector[i]->SuspendInput();
-
-            PVMFStatus status = PVMFSuccess;
-            /* Stop Estimated Server Clock */
-            if (iEstimatedServerClock)
-            {
-                if (!(iEstimatedServerClock->Stop()))
-                {
-                    status = PVMFFailure;
-                    PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::DoFlush: Error - iEstimatedServerClock->Stop failed"));
-                }
-            }
-            CommandComplete(iInputCommands, aCmd, status);
-        }
-        break;
-
-        default:
-            CommandComplete(iInputCommands, aCmd, PVMFErrInvalidState);
-            break;
-    }
+    OSCL_UNUSED_ARG(aCmd);
 }
 
 /**
- * A routine to tell if a flush operation is in progress.
- */
-bool PVMFJitterBufferNode::FlushPending()
-{
-    return (iCurrentCommand.size() > 0
-            && iCurrentCommand.front().iCmd == PVMF_JITTER_BUFFER_NODE_FLUSH);
-}
-
-
-/**
  * Called by the command handler AO to do the node Pause
  */
 void PVMFJitterBufferNode::DoPause(PVMFJitterBufferNodeCommand& aCmd)
@@ -1904,76 +2990,32 @@
         {
             uint32 currticks = OsclTickCount::TickCount();
             iPauseTime = OsclTickCount::TicksToMsec(currticks);
+            ipJitterBufferMisc->StreamingSessionPaused();
             SetState(EPVMFNodePaused);
-            pauseEstimatedServerClock();
-            /* Cancel session duration timer */
-            iSessionDurationTimer->Cancel();
+            StopOutputPorts();
             CancelEventCallBack(JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED);
             CancelEventCallBack(JB_NOTIFY_REPORT_BUFFERING_STATUS);
-            Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-            for (it = iPortParamsQueue.begin();
-                    it != iPortParamsQueue.end();
-                    it++)
-            {
-                CancelEventCallBack(JB_NOTIFY_WAIT_FOR_OOO_PACKET_COMPLETE, it);
-            }
-            iNonDecreasingClock->Pause();
+            PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::DoPause Success"));
             CommandComplete(iInputCommands, aCmd, PVMFSuccess);
         }
         break;
 
         default:
+            PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::DoPause PVMFErrInvalidState iInterfaceState %d", iInterfaceState));
             CommandComplete(iInputCommands, aCmd, PVMFErrInvalidState);
             break;
     }
 }
 
 /**
- * Called by the command handler AO to do the Cancel All
+ * Called by the command handler AO to do the node Reset.
  */
-void PVMFJitterBufferNode::DoCancelAllCommands(PVMFJitterBufferNodeCommand& aCmd)
+void PVMFJitterBufferNode::DoReset(PVMFJitterBufferNodeCommand& aCmd)
 {
-    /* first cancel the current command if any */
-    if (!iCurrentCommand.empty())
-    {
-        if (iCurrentCommand.front().iCmd == PVMF_JITTER_BUFFER_NODE_PREPARE)
-        {
-            CancelPrepare();
-        }
-        else if (iCurrentCommand.front().iCmd == PVMF_JITTER_BUFFER_NODE_START)
-        {
-            CancelStart();
-        }
-        else
-        {
-            OSCL_ASSERT(false);
-        }
-    }
-    /* next cancel all queued commands */
-    {
-        /* start at element 1 since this cancel command is element 0. */
-        while (iInputCommands.size() > 1)
-            CommandComplete(iInputCommands, iInputCommands[1], PVMFErrCancelled);
-    }
-
-    uint32 i;
-    for (i = 0; i < iPortVector.size(); i++)
-    {
-        PVMFJitterBufferPortParams* portParams = NULL;
-        bool bRet = getPortContainer(iPortVector[i], portParams);
-        if (bRet)
-        {
-            if (portParams->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-            {
-                portParams->iJitterBuffer->ResetJitterBuffer();
-            }
-            portParams->ResetParams();
-        }
-        iPortVector[i]->ClearMsgQueues();
-    }
-
-
-    /* finally, report cancel complete.*/
+    PVMF_JBNODE_LOGERROR((0, "JitterBufferNode:DoReset %d", iInterfaceState));
+    LogSessionDiagnostics();
+    ResetNodeParams();
+    SetState(EPVMFNodeIdle);
     CommandComplete(iInputCommands, aCmd, PVMFSuccess);
 }
 
@@ -2017,784 +3059,531 @@
 }
 
 /**
- * Called by the command handler AO on RTCP timer expiry to
- * generate RTCP reports
+ * Called by the command handler AO to do the Cancel All
  */
-PVMFStatus PVMFJitterBufferNode::GenerateRTCPRR(PVMFJitterBufferPortParams* pFeedbackPort)
+void PVMFJitterBufferNode::DoCancelAllCommands(PVMFJitterBufferNodeCommand& aCmd)
 {
-    PVMFJitterBufferPortParams* pInputPort;
-    PVUuid eventuuid = PVMFJitterBufferNodeEventTypeUUID;
-    int32 errcode = PVMFJitterBufferNodeRTCPRRGenerationFailed;
-
-    // find the input port
-    if (!LocateInputPortForFeedBackPort(pFeedbackPort, pInputPort))
+    /* first cancel the current command if any */
+    if (!iCurrentCommand.empty())
     {
-        return PVMFFailure;
-    }
-
-    // check the port status
-    if (pFeedbackPort->iPort->IsConnected())
-    {
-        if (pFeedbackPort->iPort->IsOutgoingQueueBusy() == false)
+        if (iCurrentCommand.front().iCmd == PVMF_JITTER_BUFFER_NODE_PREPARE)
         {
-            PVMFStatus status = ComposeAndSendFeedBackPacket(pInputPort, pFeedbackPort);
-            if ((status != PVMFSuccess) && (status != PVMFErrNoMemory))
-            {
-                PVMF_JBNODE_LOGERROR((0, "0x%x PVMFJitterBufferNode::GenerateRTCPRR: ComposeAndSendFeedBackPacket failed", this));
-                ReportErrorEvent(PVMFErrProcessing, NULL, &eventuuid, &errcode);
-                return PVMFFailure;
-            }
+            CancelPrepare();
+        }
+        else if (iCurrentCommand.front().iCmd == PVMF_JITTER_BUFFER_NODE_START)
+        {
+            CancelStart();
         }
         else
         {
-            PVMF_JBNODE_LOGERROR((0, "0x%x PVMFJitterBufferNode::GenerateRTCPRR: Feedback Port - Outgoing queue full"));
-            //Don't do ReportErrorEvent because the case where RTCP reader reports
-            //are backed up is not sufficient reason to report a critical error to
-            //the application layer.
-            return PVMFFailure;
+            OSCL_ASSERT(false);
         }
     }
-
-    /* Reschedule the RTCP timer for the next interval */
-    pFeedbackPort->iRTCPIntervalInMicroSeconds = CalcRtcpInterval(pFeedbackPort);
-    pFeedbackPort->iRTCPTimer->RunIfNotReady(pFeedbackPort->iRTCPIntervalInMicroSeconds);
-    return PVMFSuccess;
-}
-
-bool
-PVMFJitterBufferNode::LocateFeedBackPort(PVMFJitterBufferPortParams*& aInputPortParamsPtr,
-        PVMFJitterBufferPortParams*& aFeedBackPortParamsPtr)
-{
-    uint32 inputPortId = aInputPortParamsPtr->id;
-
-    /* Feedback port id must be inputPortId + 2 */
-
-    Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-
-    for (it = iPortParamsQueue.begin(); it != iPortParamsQueue.end(); it++)
+    /* next cancel all queued commands */
     {
-        if ((it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK) &&
-                ((int32)it->id == (int32)inputPortId + 2))
-        {
-            aFeedBackPortParamsPtr = it;
-            return true;
-        }
+        /* start at element 1 since this cancel command is element 0. */
+        while (iInputCommands.size() > 1)
+            CommandComplete(iInputCommands, iInputCommands[1], PVMFErrCancelled);
     }
-    return false;
-}
 
-uint32
-PVMFJitterBufferNode::CalcRtcpInterval(PVMFJitterBufferPortParams* pFeedbackPort)
-{
-    float interval;
-
-#if RTCP_FIXED_INTERVAL_MODE
-    OSCL_UNUSED_ARG(pFeedbackPort);
-    interval = DEFAULT_RTCP_INTERVAL_SEC;
-#else
-    float rtcp_min_time = pFeedbackPort->iInitialRtcp ? (float)DEFAULT_RTCP_INTERVAL_SEC / 2.0 :
-                          (float)DEFAULT_RTCP_INTERVAL_SEC;
-
-    if (pFeedbackPort->RtcpBwConfigured && (pFeedbackPort->RR > 0))
+    uint32 i;
+    for (i = 0; i < iPortVector.size(); i++)
     {
-        float divisor = (float)pFeedbackPort->RR;
-        if (pFeedbackPort->RR > pFeedbackPort->RS)
+        PVMFJitterBufferPortParams* pPortParams = NULL;
+        bool bRet = getPortContainer(iPortVector[i], pPortParams);
+        if (bRet)
         {
-            divisor = (float)pFeedbackPort->RS;
-        }
-        interval = pFeedbackPort->avg_rtcp_size * 8 *
-                   ((float)pFeedbackPort->numSenders + 1) / divisor;
-
-        if (interval < rtcp_min_time)
-        {
-            interval = rtcp_min_time;
-        }
-    }
-    else
-    {
-        interval = rtcp_min_time;
-    }
-#endif
-
-    // generate a random number on [0, 1000)
-    uint32 n = iRandGen.Rand() % 1000;
-
-    // map the number onto the range [0.5, 1.5)
-    float window = 0.5 + ((float)n) / 1000.0;
-
-    // generate the actual interval, in seconds
-    float interval_scaled = interval * window / 1.21828;
-
-    // return the interval in microseconds
-    return (uint32)(interval_scaled * 1000000);
-}
-
-bool
-PVMFJitterBufferNode::LocateInputPortForFeedBackPort(PVMFJitterBufferPortParams*& aFeedBackPortParamsPtr,
-        PVMFJitterBufferPortParams*& aInputPortParamsPtr)
-{
-    int32 feedBackPortId = aFeedBackPortParamsPtr->id;
-
-    /* Input port id must be feedBackPortId - 2 */
-
-    Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-
-    for (it = iPortParamsQueue.begin(); it != iPortParamsQueue.end(); it++)
-    {
-        if ((it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT) &&
-                ((feedBackPortId - 2) == it->id))
-        {
-            aInputPortParamsPtr = it;
-            return true;
-        }
-    }
-    return false;
-}
-/*
- * Called on incoming feedback port activity
- */
-PVMFStatus
-PVMFJitterBufferNode::ProcessIncomingRTCPReport(PVMFSharedMediaMsgPtr& aMsg,
-        PVMFJitterBufferPortParams* aPortParamsPtr)
-{
-    RTCP_Decoder rtcpDec;
-    RTCP_SR rtcpSR;
-    RTCP_BYE rtcpBye;
-    RTCP_Decoder::Error_t retval;
-    int32 max_array_size = MAX_RTCP_SOURCES;
-    RTCPPacketType array_of_packet_types[MAX_RTCP_SOURCES];
-    OsclMemoryFragment array_of_packets[MAX_RTCP_SOURCES];
-    int32 filled_size = 0;
-
-    PVMFSharedMediaDataPtr rtcpDataIn;
-    convertToPVMFMediaData(rtcpDataIn, aMsg);
-
-    uint32 numFrags = rtcpDataIn->getNumFragments();
-
-    //Process each RTCP packet.
-    //Typically, only one is received at a time.
-    for (uint32 i = 0; i < numFrags; i++)
-    {
-        OsclRefCounterMemFrag memfrag;
-
-        //Get the next memory fragment from the media message.
-        if (rtcpDataIn->getMediaFragment(i, memfrag) == false)
-        {
-            return PVMFFailure;
-        }
-
-        //Get the pointer to the packet.
-        OsclMemoryFragment receivedMsg = memfrag.getMemFrag();
-
-        /* Find out what type of RTCP packet we have */
-        //This populates the variables "filled_size", "array_of_packet_types", and "array_of_packets"
-        //by breaking up compound RTCP packets into individual reports.
-        rtcpDec.scan_compound_packet(receivedMsg,
-                                     max_array_size,
-                                     filled_size,
-                                     array_of_packet_types,
-                                     array_of_packets);
-
-        // update packet size averages - we treat the compound packet
-        // as a single packet
-        aPortParamsPtr->avg_rtcp_size = (receivedMsg.len + 15.0 * aPortParamsPtr->avg_rtcp_size) / 16.0;
-
-        //Process each individual report.
-        for (int32 ii = 0; ii < filled_size; ii++)
-        {
-            /* Use the appropriate decoder */
-
-            //If the RTCP type indicates a Sender Report...
-            if (SR_RTCP_PACKET == array_of_packet_types[ii])
+            if (pPortParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
             {
-                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVMFJitterBufferNode::ProcessIncomingRTCPReport - Sender Report"));
-
-                //Decode the Sender Report.
-                retval = rtcpDec.DecodeSR(array_of_packets[ii], rtcpSR);
-                if (RTCP_Decoder::FAIL == retval)
-                {
-                    return PVMFFailure;
-                }
-
-                aPortParamsPtr->iRTCPStats.lastSenderReportTS =
-                    (rtcpSR.NTP_timestamp_high << 16) |
-                    ((rtcpSR.NTP_timestamp_low >> 16) & 0x0000ffff);
-
-                /*
-                 * Get RTCP Recv Time in milliseconds
-                 */
-                uint32 srRecvTime;
-                bool overflowFlag = false;
-                iRTCPClock->GetCurrentTime32(srRecvTime, overflowFlag, PVMF_MEDIA_CLOCK_MSEC);
-
-                aPortParamsPtr->iRTCPStats.lastSenderReportRecvTime = srRecvTime;
-
-                //Save the NTP and RTP timestamps for later calculations...
-                aPortParamsPtr->iRTCPStats.lastSenderReportNTP =
-                    (((uint64)rtcpSR.NTP_timestamp_high) << 32) + (uint64)rtcpSR.NTP_timestamp_low;
-                aPortParamsPtr->iRTCPStats.lastSenderReportRTP = rtcpSR.RTP_timestamp;
-
-                if (iBroadCastSession && !iRTCPBcastAVSyncProcessed)
-                {
-                    bool ret = ProcessRTCPSRforAVSync();
-                    if (ret == false)
-                    {
-                        // No need to return error as perhaps there's not enough information yet
-                        // to attempt a/v sync
-                        return PVMFSuccess;
-                    }
-                }
-
+                pPortParams->ipJitterBuffer->ResetJitterBuffer();
             }
-
-            //If the RTCP type is BYE, set the end-of-stream flag.
-            if (BYE_RTCP_PACKET == array_of_packet_types[ii])
-            {
-                PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVMFJitterBufferNode::ProcessIncomingRTCPReport - BYE"));
-
-                PVMF_JBNODE_LOG_RTCP_ERR((0, "RTCP_BYE_RECVD: Mime=%s", aPortParamsPtr->iMimeType.get_cstr()));
-
-                //for live streams, treat RTCP BYE as EOS
-                if (iPlayStopTimeAvailable == false)
-                {
-                    PVMF_JBNODE_LOGDATATRAFFIC_IN((0, "USING RTCP_BYE TO TRIGGER EOS: Mime=%s", aPortParamsPtr->iMimeType.get_cstr()));
-                    PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "USING RTCP_BYE TO TRIGGER EOS: Mime=%s", aPortParamsPtr->iMimeType.get_cstr()));
-                    PVMF_JBNODE_LOG_RTCP_ERR((0, "USING RTCP_BYE TO TRIGGER EOS: Mime=%s", aPortParamsPtr->iMimeType.get_cstr()));
-                    oSessionDurationExpired = true;
-                    CancelEventCallBack(JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED);
-                    /* Cancel clock update notifications */
-                    Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-                    for (it = iPortParamsQueue.begin(); it != iPortParamsQueue.end(); it++)
-                    {
-                        CancelEventCallBack(JB_NOTIFY_WAIT_FOR_OOO_PACKET_COMPLETE, it);
-                        if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-                        {
-                            if (it->iJitterBuffer != NULL)
-                            {
-                                it->iJitterBuffer->CancelServerClockNotificationUpdates();
-                            }
-                            else
-                            {
-                                OSCL_ASSERT(false);
-                            }
-                        }
-                    }
-                    /* Pause Estimated server clock & RTCP Clock */
-                    iEstimatedServerClock->Pause();
-                    iRTCPClock->Pause();
-                    if (IsAdded())
-                    {
-                        RunIfNotReady();
-                    }
-                }
-
-                retval = rtcpDec.DecodeBYE(array_of_packets[ii], rtcpBye);
-                if (RTCP_Decoder::FAIL == retval)
-                {
-                    return PVMFFailure;
-                }
-                /* The packet is a RTCP BYE, set the end of stream flag */
-                else if (retval == RTCP_Decoder::RTCP_SUCCESS)
-                {
-                    if (aPortParamsPtr->iRTCPStats.oRTCPByeRecvd == false)
-                    {
-                        PVMFJitterBufferPortParams* inputPortParamsPtr = NULL;
-                        if (LocateInputPortForFeedBackPort(aPortParamsPtr,
-                                                           inputPortParamsPtr) == false)
-                        {
-                            return PVMFFailure;
-                        }
-                        aPortParamsPtr->iRTCPStats.oRTCPByeRecvd = true;
-
-                        PVUuid eventuuid = PVMFJitterBufferNodeEventTypeUUID;
-                        int32 infocode = PVMFJitterBufferNodeRTCPBYERecvd;
-                        ReportInfoEvent(PVMFInfoRemoteSourceNotification,
-                                        (OsclAny*)(inputPortParamsPtr->iMimeType.get_cstr()),
-                                        &eventuuid,
-                                        &infocode);
-                        PVMF_JBNODE_LOG_RTCP_ERR((0, "RTCP_BYE_PROCESSED: Mime=%s", aPortParamsPtr->iMimeType.get_cstr()));
-                    }
-                }
-            }
-
-            //All other RTCP types (Receiver Reports) are ignored.
-
-            aPortParamsPtr->iRTCPStats.oSRRecvd = true;
+            pPortParams->ResetParams();
         }
+        iPortVector[i]->ClearMsgQueues();
     }
-    return PVMFSuccess;
+
+
+    /* finally, report cancel complete.*/
+    CommandComplete(iInputCommands, aCmd, PVMFSuccess);
 }
 
-
-
-
-PVMFStatus
-PVMFJitterBufferNode::ComposeAndSendFeedBackPacket(PVMFJitterBufferPortParams*& aInputPortParamsPtr,
-        PVMFJitterBufferPortParams*& aFeedBackPortParamsPtr)
+PVMFPortInterface*
+PVMFJitterBufferNode::getPortCounterpart(PVMFPortInterface* aPort)
 {
-    uint32 senderSSRC;
-    RTCP_Encoder rtcpEncode;
-    RTCP_ReportBlock *reportBlock = NULL;
-    RTCP_RR *pRR = NULL;
-    OsclExclusivePtr<RTCP_RR> rtcpRRAutoPtr;
-
-    pRR = OSCL_NEW(RTCP_RR, (1));
-
-    if (NULL == pRR)
-    {
-        return PVMFErrNoMemory;
-    }
-    rtcpRRAutoPtr.set(pRR);
-
-    reportBlock = pRR->get_report_block(0);
-    if (NULL == reportBlock)
-    {
-        return PVMFErrNoMemory;
-    }
-
-    /* Get Jitter Buffer Stats from RTP port */
-    PVMFJitterBufferStats jbStats =
-        aInputPortParamsPtr->iJitterBuffer->getJitterBufferStats();
-
-    /* Get InterArrivalJitter from RTP port */
-    uint32 interArrivalJitter =
-        aInputPortParamsPtr->iJitterBuffer->getInterArrivalJitter();
-
-    uint32 sourceSSRC32 = jbStats.ssrc;
-    senderSSRC = (sourceSSRC32 >> 10) | (sourceSSRC32 << 22);
-
-    pRR->senderSSRC = senderSSRC;
-    rtcpEncode.SetSSRC(senderSSRC);
-    reportBlock->sourceSSRC = sourceSSRC32;
-
-    /* Compute packet loss fraction */
-    if (aFeedBackPortParamsPtr->iRTCPStats.maxSeqNumReceivedUptoThisRR == 0)
-    {
-        aFeedBackPortParamsPtr->iRTCPStats.maxSeqNumReceivedUptoThisRR =
-            jbStats.seqNumBase;
-    }
-    if (jbStats.maxSeqNumReceived -
-            aFeedBackPortParamsPtr->iRTCPStats.maxSeqNumReceivedUptoThisRR)
-    {
-        reportBlock->fractionLost =
-            (int8)(((jbStats.totalPacketsLost - aFeedBackPortParamsPtr->iRTCPStats.packetLossUptoThisRR) * 256) /
-                   (jbStats.maxSeqNumReceived - aFeedBackPortParamsPtr->iRTCPStats.maxSeqNumReceivedUptoThisRR));
-    }
-    else
-    {
-        reportBlock->fractionLost = 0;
-    }
-
-    reportBlock->cumulativeNumberOfPacketsLost = jbStats.totalPacketsLost;
-    reportBlock->highestSequenceNumberReceived = jbStats.maxSeqNumReceived;
-    reportBlock->interarrivalJitter = interArrivalJitter;
-    reportBlock->lastSR = aFeedBackPortParamsPtr->iRTCPStats.lastSenderReportTS;
-
-    if (aFeedBackPortParamsPtr->iRTCPStats.oSRRecvd)
-    {
-        uint32 currRRGenTime;
-        bool overflowFlag = false;
-
-        iRTCPClock->GetCurrentTime32(currRRGenTime, overflowFlag, PVMF_MEDIA_CLOCK_MSEC);
-
-        uint32 lastSenderReportRecvTime = (uint32)
-                                          aFeedBackPortParamsPtr->iRTCPStats.lastSenderReportRecvTime;
-
-        uint32 delaySinceLastSR64 =
-            (currRRGenTime - lastSenderReportRecvTime);
-
-        uint32 delaySinceLastSR32 = delaySinceLastSR64;
-
-        reportBlock->delaySinceLastSR = (delaySinceLastSR32 << 16) / 1000;
-
-        aFeedBackPortParamsPtr->iRTCPStats.lastRRGenTime = currRRGenTime;
-    }
-
-    /* Update variables for the next RR cycle */
-    aFeedBackPortParamsPtr->iRTCPStats.maxSeqNumReceivedUptoThisRR =
-        jbStats.maxSeqNumReceived;
-    aFeedBackPortParamsPtr->iRTCPStats.packetLossUptoThisRR =
-        jbStats.totalPacketsLost;
-
-    PVMFJitterBufferPort* jbRTCPPort =
-        (PVMFJitterBufferPort*)aFeedBackPortParamsPtr->iPort;
-    PVMFSharedMediaDataPtr rtcpOut;
-    OsclSharedPtr<PVMFMediaDataImpl> mediaDataImpl;
-    PVMFRTCPMemPool* rtcpBufAlloc = aFeedBackPortParamsPtr->iRTCPTimer->getRTCPBuffAlloc();
-    if (!rtcpBufAlloc->iMediaDataMemPool)
-    {
-        return PVMFErrNoMemory;
-    }
-    int32 err;
-
-    OSCL_TRY(err,
-             mediaDataImpl = rtcpBufAlloc->getMediaDataImpl(MAX_RTCP_BLOCK_SIZE);
-             rtcpOut = PVMFMediaData::createMediaData(mediaDataImpl,
-                       (rtcpBufAlloc->iMediaDataMemPool));
-            );
-
-    if (err != OsclErrNone)
-    {
-        return PVMFErrNoMemory;
-    }
-
-    /* Retrieve memory fragment to write to */
-    OsclRefCounterMemFrag refCtrMemFragOut;
-    rtcpOut->getMediaFragment(0, refCtrMemFragOut);
-
-    OsclMemoryFragment memFrag = refCtrMemFragOut.getMemFrag();
-    memFrag.len = MAX_RTCP_BLOCK_SIZE;
-
-    RTCP_APP *appPtr = NULL;
-    RTCP_APP App;
-
-    PVMF_JBNODE_LOG_RTCP((0, "RTCP_PKT: Mime=%s, MaxSNRecvd=%d, MaxTSRecvd=%d, MaxSNRet=%d, MaxTSRet=%d", aInputPortParamsPtr->iMimeType.get_cstr(), jbStats.maxSeqNumReceived, jbStats.maxTimeStampRegistered, jbStats.lastRetrievedSeqNum, jbStats.maxTimeStampRetrieved));
+    uint32 ii;
     /*
-     * If Rate Adaptation is enabled and we have received some RTP packets, then send NADU APP packet,
-     * if frequency criteria is met
+     * Get port params
      */
-    if (aInputPortParamsPtr->oRateAdaptation && (jbStats.totalNumPacketsReceived > 0))
+    for (ii = 0; ii < iPortParamsQueue.size(); ii++)
     {
-        aInputPortParamsPtr->iRateAdaptationRTCPRRCount++;
-        if (aInputPortParamsPtr->iRateAdaptationRTCPRRCount ==
-                aInputPortParamsPtr->iRateAdaptationFeedBackFrequency)
+        if (&iPortParamsQueue[ii]->irPort == aPort)
         {
-            oscl_memcpy(App.type, PSS0_APP_RTCP_NAME, oscl_strlen(PSS0_APP_RTCP_NAME));
-            App.ssrc = senderSSRC;
-            App.subtype = RTCP_NADU_APP_SUBTYPE;
-            App.pss0_app_data.sourcessrc = sourceSSRC32;
-            PVMFTimestamp converted_ts = 0;
-            //set playoutdelay to 0xffff by default, if JB is empty we will use this
-            uint32 diff32 = RTCP_NADU_APP_DEFAULT_PLAYOUT_DELAY;
-            uint32 clientClock32 = 0;
-            uint32 timebase32 = 0;
-            bool overflowFlag = false;
+            break;
+        }
+    }
+    if (ii >= iPortParamsQueue.size())
+    {
+        return NULL;
+    }
 
-            if (iClientPlayBackClock != NULL)
-                iClientPlayBackClock->GetCurrentTime32(clientClock32, overflowFlag,
-                                                       PVMF_MEDIA_CLOCK_MSEC,
-                                                       timebase32);
-            if (jbStats.currentOccupancy > 0)
+    PVMFJitterBufferNodePortTag tag = iPortParamsQueue[ii]->iTag;
+    int32 id = iPortParamsQueue[ii]->iId;
+    uint32 jj;
+
+    /* Even numbered ports are input ports */
+    if (tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
+    {
+        for (jj = 0; jj < iPortParamsQueue.size(); jj++)
+        {
+            if ((id + 1) == iPortParamsQueue[jj]->iId)
             {
-                PVMFTimestamp tsOfNextPacketToBeDecoded = jbStats.maxTimeStampRetrievedWithoutRTPOffset;
-                tsOfNextPacketToBeDecoded =
-                    aInputPortParamsPtr->iJitterBuffer->peekNextElementTimeStamp();
+                return (&iPortParamsQueue[jj]->irPort);
+            }
+        }
+    }
+    /* odd numbered ports are output ports */
+    else if (tag == PVMF_JITTER_BUFFER_PORT_TYPE_OUTPUT)
+    {
+        for (jj = 0; jj < iPortParamsQueue.size(); jj++)
+        {
+            if ((id - 1) == iPortParamsQueue[jj]->iId)
+            {
+                return (&iPortParamsQueue[jj]->irPort);
 
-                uint32 in_wrap_count = 0;
-                /*
-                 * Convert Time stamp to milliseconds
-                 */
-                aInputPortParamsPtr->mediaClockConverter.set_clock(tsOfNextPacketToBeDecoded, in_wrap_count);
-                converted_ts =
-                    aInputPortParamsPtr->mediaClockConverter.get_converted_ts(1000);
 
-                //ts should be ahead of clock
-                //if not we are falling behind on one track, so set playout delay to zero
-                diff32 = 0;
-                bool clkEarly =
-                    PVTimeComparisonUtils::IsEarlier(clientClock32,
-                                                     converted_ts,
-                                                     diff32);
-                if (clkEarly == false)
+            }
+        }
+    }
+    return NULL;
+}
+
+
+
+
+///////////////////////////////////////////////////////////////////////////////
+//Jitter Buffer Extension Interface Implementation
+///////////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+//OsclActiveObject
+///////////////////////////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////////////////////////
+//PVMFJitterBufferObserver Implementation
+///////////////////////////////////////////////////////////////////////////////
+void PVMFJitterBufferNode::JitterBufferFreeSpaceAvailable(OsclAny* aContext)
+{
+    PVMFPortInterface* port = OSCL_STATIC_CAST(PVMFPortInterface*, aContext);
+    PVMFJitterBufferPort* jbPort = OSCL_STATIC_CAST(PVMFJitterBufferPort*, port);
+    PVMFJitterBufferPortParams* portParams = jbPort->iPortParams;
+    if (portParams)
+        portParams->iProcessIncomingMessages = true;
+
+    if (IsAdded())
+    {
+        RunIfNotReady();
+    }
+}
+
+void PVMFJitterBufferNode::ProcessJBInfoEvent(PVMFAsyncEvent& aEvent)
+{
+    PVMF_JBNODE_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::ProcessJBInfoEvent: Event Type [%d]", aEvent.GetEventType()));
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::ProcessJBInfoEvent Event: Type [%d]", aEvent.GetEventType()));
+    switch (aEvent.GetEventType())
+    {
+        case PVMFInfoUnderflow:
+        {
+            RequestEventCallBack(JB_NOTIFY_REPORT_BUFFERING_STATUS);
+            if (oStartPending == false)
+            {
+                UpdateRebufferingStats(PVMFInfoUnderflow);
+                ipJitterBufferMisc->StreamingSessionBufferingStart();
+                ReportInfoEvent(PVMFInfoUnderflow);
+                ReportInfoEvent(PVMFInfoBufferingStart);
+                ReportInfoEvent(PVMFInfoBufferingStatus);
+            }
+        }
+        break;
+        case PVMFInfoDataReady:
+        {
+            UpdateRebufferingStats(PVMFInfoDataReady);
+            ReportInfoEvent(PVMFInfoBufferingStatus);
+            ReportInfoEvent(PVMFInfoDataReady);
+            ReportInfoEvent(PVMFInfoBufferingComplete);
+            CancelEventCallBack(JB_NOTIFY_REPORT_BUFFERING_STATUS);
+
+            Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator it;
+            for (it = iPortParamsQueue.begin(); it != iPortParamsQueue.end(); it++)
+            {
+                PVMFJitterBufferPortParams* pPortParams = *it;
+                if (pPortParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
                 {
-                    diff32 = 0;
+                    pPortParams->iCanReceivePktFromJB = true;
+                    pPortParams->ipJitterBuffer->CancelNotifyCanRetrievePacket();
+                    PVMFJitterBufferStats stats = pPortParams->ipJitterBuffer->getJitterBufferStats();
+                    PVMF_JBNODE_LOGDATATRAFFIC((0, "Mime %s stats.currentOccupancy[%d], stats.maxSeqNumRegistered[%d], stats.lastRetrievedSeqNum[%d] stats.maxTimeStampRetrievedWithoutRTPOffset[%d]", pPortParams->iMimeType.get_cstr(), stats.currentOccupancy, stats.maxSeqNumRegistered, stats.lastRetrievedSeqNum, stats.maxTimeStampRetrievedWithoutRTPOffset));
                 }
             }
-            PVMF_JBNODE_LOG_RTCP((0, "RTCP_PKT: Mime=%s, RTP_TS=%d, C_CLOCK=%d, DIFF=%d, RE-BUF=%d", aInputPortParamsPtr->iMimeType.get_cstr(), converted_ts, clientClock32, diff32, oDelayEstablished));
-            App.pss0_app_data.playoutdelayinms = (uint16)diff32;
-            App.pss0_app_data.nsn = (jbStats.lastRetrievedSeqNum + 1);
-            if (0 == jbStats.lastRetrievedSeqNum)
-            {
-                App.pss0_app_data.nsn = jbStats.seqNumBase;
-            }
-            App.pss0_app_data.nun = RTCP_NADU_APP_DEFAULT_NUN;
 
-            uint32 fbsInBytes = 0;
-            if (jbStats.packetSizeInBytesLeftInBuffer < aInputPortParamsPtr->iRateAdaptationFreeBufferSpaceInBytes)
+            if (oStartPending)
             {
-                fbsInBytes =
-                    (aInputPortParamsPtr->iRateAdaptationFreeBufferSpaceInBytes - jbStats.packetSizeInBytesLeftInBuffer);
+                CompleteStart();
             }
-            PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::ComposeAndSendFeedBackPacket: Total=%d, Occ=%d, freebufferspace = %d",
-                                 aInputPortParamsPtr->iRateAdaptationFreeBufferSpaceInBytes,
-                                 jbStats.packetSizeInBytesLeftInBuffer,
-                                 fbsInBytes));
-            App.pss0_app_data.freebufferspace = (fbsInBytes) / 64;
-            aInputPortParamsPtr->iRateAdaptationRTCPRRCount = 0;
-            appPtr = &App;
-            PVMF_JBNODE_LOG_RTCP((0, "NADU_PKT: Mime=%s, PDelay=%d, FBS_BYTES=%d, FBS=%d, NSN=%d",
-                                  aInputPortParamsPtr->iMimeType.get_cstr(),
-                                  App.pss0_app_data.playoutdelayinms,
-                                  fbsInBytes,
-                                  App.pss0_app_data.freebufferspace,
-                                  App.pss0_app_data.nsn));
+            else
+            {
+                ipJitterBufferMisc->StreamingSessionBufferingEnd();
+
+            }
+        }
+        break;
+        case PVMFInfoOverflow:
+        {
+            ReportInfoEvent(PVMFInfoOverflow);
+        }
+        break;
+        case PVMFJitterBufferNodeJitterBufferLowWaterMarkReached:
+        {
+            Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator iter;
+            for (iter = iPortParamsQueue.begin(); iter != iPortParamsQueue.end(); iter++)
+            {
+                PVMFJitterBufferPortParams* pPortParams = *iter;
+                if (pPortParams->iMonitorForRemoteActivity == false)
+                {
+                    pPortParams->iMonitorForRemoteActivity = true;
+                    RequestEventCallBack(JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED);
+                }
+
+            }
+            ReportInfoEvent(PVMFJitterBufferNodeJitterBufferLowWaterMarkReached);
+        }
+        break;
+        case PVMFJitterBufferNodeJitterBufferHighWaterMarkReached:
+        {
+            Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator iter;
+            for (iter = iPortParamsQueue.begin(); iter != iPortParamsQueue.end(); iter++)
+            {
+                PVMFJitterBufferPortParams* pPortParams = *iter;
+                if (pPortParams->iMonitorForRemoteActivity == true)
+                {
+                    pPortParams->iMonitorForRemoteActivity = false;
+                    CancelEventCallBack(JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED);
+                }
+            }
+            ReportInfoEvent(PVMFJitterBufferNodeJitterBufferHighWaterMarkReached);
+        }
+        break;
+        case PVMFJitterBufferNodeStreamThinningRecommended:
+        {
+            PVMFNodeInterface::ReportInfoEvent(aEvent);
+        }
+        break;
+        default:
+        {
+            //noop
         }
     }
-    if (rtcpEncode.EncodeCompoundRR(*pRR,
-                                    memFrag,
-                                    appPtr) != RTCP_Encoder::RTCP_SUCCESS)
-    {
-        PVMF_JBNODE_LOGERROR((0, "0x%x PVMFJitterBufferNode::ComposeAndSendFeedBackPacket: EncodeCompoundRR failed", this));
-        return PVMFFailure;
-    }
-    rtcpOut->setMediaFragFilledLen(0, memFrag.len);
 
-
-    // update average packet length - treat compound packets as single
-    aFeedBackPortParamsPtr->avg_rtcp_size = (memFrag.len + 15.0 * aFeedBackPortParamsPtr->avg_rtcp_size) / 16.0;
-
-
-    PVMFSharedMediaMsgPtr rtcpMsg;
-    convertToPVMFMediaMsg(rtcpMsg, rtcpOut);
-
-    PVMFStatus status = jbRTCPPort->QueueOutgoingMsg(rtcpMsg);
-    if (status != PVMFSuccess)
-    {
-        PVMF_JBNODE_LOGERROR((0, "0x%x PVMFJitterBufferNode::ComposeAndSendFeedBackPacket: Error - output queue busy", this));
-    }
-    PVMF_JBNODE_LOG_RTCP((0, "PVMFJitterBufferNode - SENT RTCP RR - TrackMimeType = %s", aInputPortParamsPtr->iMimeType.get_cstr()));
-    aFeedBackPortParamsPtr->iInitialRtcp = false;
-    return status;
 }
 
-bool PVMFJitterBufferNode::ProcessRTCPSRforAVSync()
+void PVMFJitterBufferNode::PacketReadyToBeRetrieved(OsclAny* aContext)
 {
-    // The following criteria must hold before the RTCP SRs can be processed for a/v sync
-    // a) The Jitter Buffers of all tracks have received at least one packet
-    // b) At least one RTCP report has been received for each track
-    // c) The wall clock value of the RTCP SRs is not zero
-
-    // temporary vectors to save the indexes of rtcp and input ports
-    Oscl_Vector<uint32, PVMFJitterBufferNodeAllocator> indexesRTCPPort;
-    Oscl_Vector<uint32, PVMFJitterBufferNodeAllocator> indexesInputPort;
-
-    // Check the criteria
-    for (uint32 ii = 0; ii < iPortParamsQueue.size(); ii++)
+    if (aContext)
     {
-        PVMFJitterBufferPortParams& portParams = iPortParamsQueue[ii];
-        if (portParams.tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
+        PVMFJitterBufferPort* port = OSCL_REINTERPRET_CAST(PVMFJitterBufferPort*, aContext);
+        PVMFJitterBufferPortParams* portparams = port->GetPortParams();
+        if (portparams)
         {
-            // make sure the JB has received data
-            uint32 tsOffset = 0;
-            if (portParams.iJitterBuffer->GetRTPTimeStampOffset(tsOffset) == false)
-                return false;
-
-            // Save the index for later processing
-            int32 err = OsclErrNone;
-            OSCL_TRY(err, indexesInputPort.push_back(ii));
-            if (err != OsclErrNone)
-                return false;
-        }
-        else
-            if (portParams.tag == PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK)
-            {
-                // make sure we have an RTCP report available
-                if (portParams.iRTCPStats.lastSenderReportRecvTime == OSCL_STATIC_CAST(uint64, 0))
-                    return false;
-
-                // RTCP SR must have valid clock wall vale
-                if (portParams.iRTCPStats.lastSenderReportNTP == OSCL_STATIC_CAST(uint64, 0))
-                    return false;
-
-                // Save the index for later processing
-                int32 err = OsclErrNone;
-                OSCL_TRY(err, indexesRTCPPort.push_back(ii));
-                if (err != OsclErrNone)
-                    return false;
-
-            }
-    }
-
-    // for each feedback port there must be an input port
-    OSCL_ASSERT(indexesRTCPPort.size() == indexesInputPort.size());
-
-    // temporary vector to save the calculated init ntp for each track
-    Oscl_Vector<uint64, PVMFJitterBufferNodeAllocator> initNtpTracks;
-
-    // temporary vector to save the calculated rtp timebase of each track
-    Oscl_Vector<uint32, PVMFJitterBufferNodeAllocator> RTPTBArray;
-
-    // Initialize temporary vectors
-    int32 err = OsclErrNone;
-    OSCL_TRY(err, initNtpTracks.reserve(indexesRTCPPort.size()));
-    if (err != OsclErrNone)
-        return false;
-
-    OSCL_TRY(err, RTPTBArray.push_back(indexesRTCPPort.size()));
-    if (err != OsclErrNone)
-        return false;
-
-    for (uint32 tt = 0; tt < indexesRTCPPort.size(); tt++)
-    {
-        initNtpTracks.push_back(0);
-        RTPTBArray.push_back(0);
-    }
-
-
-    // Find the track whose first rtp packet correspond to the smallest NTP
-    uint32 lowestNTPIndex = 0;
-    uint64 lowestNTP = 0;
-    for (uint32 jj = 0; jj < indexesRTCPPort.size(); jj++)
-    {
-        PVMFJitterBufferPortParams& inputPortParams = iPortParamsQueue[indexesInputPort[jj]];
-        PVMFJitterBufferPortParams& rtcpPortParams = iPortParamsQueue[indexesRTCPPort[jj]];
-
-        uint32 firstRTP;
-        inputPortParams.iJitterBuffer->GetRTPTimeStampOffset(firstRTP);
-        uint32 timescale = inputPortParams.timeScale;
-        uint32 srRTP = rtcpPortParams.iRTCPStats.lastSenderReportRTP;
-        uint64 srNTP = rtcpPortParams.iRTCPStats.lastSenderReportNTP;
-
-        uint32 deltaRTP = 0;
-        if (srRTP >= firstRTP)
-        {
-            deltaRTP = srRTP - firstRTP;
-        }
-        else
-        {
-            deltaRTP = firstRTP - srRTP;
-        }
-
-        uint64 deltaRTPInNTPFormat = ((uint64) deltaRTP / (uint64)timescale) << 32;
-        deltaRTPInNTPFormat += ((uint64) deltaRTP % (uint64)timescale) * (uint64)0xFFFFFFFF / (uint64)timescale;
-
-        uint64 initNTP = 0;
-        if (srRTP >= firstRTP)
-        {
-            initNTP = srNTP - deltaRTPInNTPFormat;
-        }
-        else
-        {
-            initNTP = srNTP + deltaRTPInNTPFormat;
-        }
-
-
-        if (jj == 0)
-        {
-            lowestNTPIndex = jj;
-            lowestNTP = initNTP;
-        }
-        else
-            if (initNTP < lowestNTP)
-            {
-                lowestNTPIndex = jj;
-                lowestNTP = initNTP;
-            }
-
-        // Save the reference ntp value
-        initNtpTracks[jj] = initNTP;
-
-        PVMF_JBNODE_LOG_RTCP_AVSYNC((0,
-                                     "PVMFJitterBufferNode::ProcessRTCPSRforAVSync(): srRTP=%d, firstRTP=%d, timescale=%d srNTPHigh=0x%x, srNTPLow=0x%x initNTPHigh=0x%x initNTPLow=0x%x deltaRTPHigh=0x%x deltaRTPLow=0x%x",
-                                     srRTP, firstRTP, timescale, Oscl_Int64_Utils::get_uint64_upper32(srNTP), Oscl_Int64_Utils::get_uint64_lower32(srNTP),
-                                     Oscl_Int64_Utils::get_uint64_upper32(initNTP), Oscl_Int64_Utils::get_uint64_lower32(initNTP),
-                                     Oscl_Int64_Utils::get_uint64_upper32(deltaRTPInNTPFormat), Oscl_Int64_Utils::get_uint64_lower32(deltaRTPInNTPFormat)));
-
-    }
-
-
-    // Calculate the new timebase for all tracks
-    for (uint32 kk = 0; kk < indexesRTCPPort.size(); kk++)
-    {
-        PVMFJitterBufferPortParams& inputPortParams = iPortParamsQueue[indexesInputPort[kk]];
-        uint32 firstRTP;
-        inputPortParams.iJitterBuffer->GetRTPTimeStampOffset(firstRTP);
-
-        if (kk == lowestNTPIndex)
-        {
-            // Just set the RTP TB to the first rtp packet
-            RTPTBArray[kk] = firstRTP;
-        }
-        else
-        {
-            uint64 initNTP = initNtpTracks[kk];
-            uint32 timescale = inputPortParams.timeScale;
-
-            OSCL_ASSERT(lowestNTP <= initNTP);
-
-            uint64 deltaNTP = initNTP - lowestNTP;
-            uint32 deltaNTPInRTPUnits = ((deltaNTP * (uint64)timescale) + (uint64)0x80000000) >> 32;
-            uint32 rtpTimeBase = firstRTP - deltaNTPInRTPUnits;
-            RTPTBArray[kk] = rtpTimeBase;
+            PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::PacketReadyToBeRetrieved for mime type %s", portparams->iMimeType.get_cstr()));
+            portparams->iCanReceivePktFromJB = true;
         }
     }
-
-#if (PVLOGGER_INST_LEVEL > PVLOGMSG_INST_LLDBG)
-    // Log parameters
-    for (uint32 mm = 0; mm < indexesRTCPPort.size(); mm++)
-    {
-        PVMFJitterBufferPortParams& inputPortParams = iPortParamsQueue[indexesInputPort[mm]];
-        PVMFJitterBufferPortParams& rtcpPortParams = iPortParamsQueue[indexesRTCPPort[mm]];
-
-        uint32 firstRTP;
-        inputPortParams.iJitterBuffer->GetRTPTimeStampOffset(firstRTP);
-        uint32 timescale = inputPortParams.timeScale;
-        uint32 srRTP = rtcpPortParams.iRTCPStats.lastSenderReportRTP;
-        uint64 srNTP = rtcpPortParams.iRTCPStats.lastSenderReportNTP;
-        int32 delta = ((firstRTP - RTPTBArray[mm]) * 1000) / timescale;
-        uint32 srNTPHigh = Oscl_Int64_Utils::get_uint64_upper32(srNTP);
-        srNTP = srNTP & uint64(0xffffffff);
-        srNTP *= uint64(1000000);
-        srNTP += uint64(500000);
-        srNTP = srNTP / uint64(0xffffffff);
-        uint32 srNTPLow = Oscl_Int64_Utils::get_uint64_lower32(srNTP);
-
-        PVMF_JBNODE_LOG_RTCP_AVSYNC((0,
-                                     "Stream %d: mime=%s timeScale=%uHz firstTS=%u RTCP.RTP=%u RTCP.NTP=%u.%06u newTB=%u delta=%dms\n",
-                                     mm,
-                                     inputPortParams.iMimeType.get_cstr(),
-                                     timescale,
-                                     firstRTP,
-                                     srRTP,
-                                     srNTPHigh,
-                                     srNTPLow,
-                                     RTPTBArray[mm],
-                                     delta
-                                    )
-                                   );
-
-    }
-#endif
-
-    // Adjust the RTP TB
-    for (uint32 ll = 0; ll < indexesInputPort.size(); ll++)
-    {
-        PVMFJitterBufferPortParams& inputPortParams = iPortParamsQueue[indexesInputPort[ll]];
-        inputPortParams.iJitterBuffer->SetRTPTimeStampOffset(RTPTBArray[ll]);
-    }
-
-    //Notify SM plugin that RTP TB data is available for PVR purposes
-    // No need to create a public class to publish the format of the information sent in this event
-    // Just define this structure internally. The only client of this event is the SM broadcast
-    // plugin, so it's the only component that needs to be aware of this format
-    struct RTPTBInfoEventData
-    {
-        const PvmfMimeString* mimeType;
-        uint32 rtpTB;
-    };
-
-    for (uint32 nn = 0; nn < indexesInputPort.size(); nn++)
-    {
-        PVMFJitterBufferPortParams& inputPortParams = iPortParamsQueue[indexesInputPort[nn]];
-        RTPTBInfoEventData infoData;
-        infoData.mimeType = &(inputPortParams.iMimeType);
-        infoData.rtpTB = RTPTBArray[nn];
-        ReportInfoEvent(PVMFJitterBufferNodeRTCPDataProcessed, (OsclAny*)(&infoData));
-    }
-
-
-
-
-    iRTCPBcastAVSyncProcessed = true;
-    return true;
 }
 
+void PVMFJitterBufferNode::EndOfStreamSignalled(OsclAny* aContext)
+{
+    if (aContext)
+    {
+        PVLogger* ipDataPathLoggerRTCP = PVLogger::GetLoggerObject("datapath.sourcenode.jitterbuffer.rtcp");
+        PVMF_JBNODE_LOG_RTCP_DATAPATH((0, "PVMFJitterBufferNode::EndOfStreamSignalled"));
+        PVMFJitterBufferPort* port = OSCL_REINTERPRET_CAST(PVMFJitterBufferPort*, aContext);
+        PVMFJitterBufferPortParams* portparams = port->GetPortParams();
+        if (portparams)
+        {
+            RunIfNotReady();
+        }
+    }
+}
 
+void PVMFJitterBufferNode::UpdateRebufferingStats(PVMFEventType aEventType)
+{
+    if (aEventType == PVMFInfoUnderflow)
+    {
+        Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator it;
+        for (it = iPortParamsQueue.begin();
+                it != iPortParamsQueue.end();
+                it++)
+        {
+            PVMFJitterBufferPortParams* pJitterBufferPortParams = *it;
+            if (pJitterBufferPortParams->iMonitorForRemoteActivity == false)
+            {
+                pJitterBufferPortParams->iMonitorForRemoteActivity = true;
+                CancelEventCallBack(JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED);
+                RequestEventCallBack(JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED);
+            }
+        }
 
+        PVMF_JBNODE_LOGDATATRAFFIC_FLOWCTRL_E((0, "PVMFJitterBufferNode::UpdateRebufferingStats: Sending Auto Resume"));
+    }
 
-/////////////////////////////////////////////////////
-// Event reporting routines.
-/////////////////////////////////////////////////////
+}
+///////////////////////////////////////////////////////////////////////////////
+//PVMFJitterBufferMiscObserver
+///////////////////////////////////////////////////////////////////////////////
+void PVMFJitterBufferNode::MessageReadyToSend(PVMFPortInterface*& aPort, PVMFSharedMediaMsgPtr& aMessage)
+{
+    PVMF_JBNODE_LOGINFO((0, "0x%x PVMFJitterBufferNode::MessageReadyToSend: aPort=0x%x", this, aPort));
+
+    PVMFJitterBufferPort* jitterbufferPort = OSCL_STATIC_CAST(PVMFJitterBufferPort*, aPort);
+
+    //Kind of messages received here
+    //RTCP reports
+    //Firewall packets
+    //We do not expect port to go in busy state at firewall port and if somehow port used for sending rtcp messages
+    //is in busy state, or gets into busy state, we just ignore it and discard the message
+    PVMFStatus status = PVMFSuccess;
+    aPort->QueueOutgoingMsg(aMessage);
+    status = aPort->Send();
+    if (status == PVMFSuccess)
+    {
+        jitterbufferPort->iPortParams->iNumMediaMsgsSent++;
+    }
+    return;
+}
+
+void PVMFJitterBufferNode::MediaReceivingChannelPrepared(bool aStatus)
+{
+    //ignore the status param.
+    OSCL_UNUSED_ARG(aStatus);
+    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::MediaRecvChannelPrerared In"));
+    iMediaReceiveingChannelPrepared = true;
+    if (iCurrentCommand.size())
+    {
+        PVMFJitterBufferNodeCommand& cmd = iCurrentCommand.front();
+        if (PVMF_JITTER_BUFFER_NODE_PREPARE == cmd.iCmd)
+        {
+            CompletePrepare();
+        }
+        if (PVMF_JITTER_BUFFER_NODE_START == cmd.iCmd)
+        {
+            CompleteStart();
+        }
+    }
+}
+
+void PVMFJitterBufferNode::ProcessRTCPControllerEvent(PVMFAsyncEvent& aEvent)
+{
+    PVMFNodeInterface::ReportInfoEvent(aEvent);
+}
+
+void PVMFJitterBufferNode::SessionSessionExpired()
+{
+
+    CancelEventCallBack(JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//PVMFJBEventNotifierObserver implementation
+///////////////////////////////////////////////////////////////////////////////
+void PVMFJitterBufferNode::ProcessCallback(CLOCK_NOTIFICATION_INTF_TYPE aClockNotificationInterfaceType, uint32 aCallBkId, const OsclAny* aContext, PVMFStatus aStatus)
+{
+    OSCL_UNUSED_ARG(aClockNotificationInterfaceType);
+    OSCL_UNUSED_ARG(aContext);
+    PVMF_JBNODE_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::ProcessCallBack In CallBackId [%d] ", aCallBkId));
+
+    if (PVMFSuccess == aStatus)
+    {
+        if (aCallBkId == iIncomingMediaInactivityDurationCallBkId)
+        {
+            iIncomingMediaInactivityDurationCallBkPending = false;
+            HandleEvent_IncomingMediaInactivityDurationExpired();
+        }
+        else if (aCallBkId == iNotifyBufferingStatusCallBkId)
+        {
+            iNotifyBufferingStatusCallBkPending = false;
+            HandleEvent_NotifyReportBufferingStatus();
+        }
+    }
+    else
+    {
+
+        //Log it
+    }
+    PVMF_JBNODE_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::ProcessCallBack Out"));
+}
+
+void PVMFJitterBufferNode::HandleEvent_IncomingMediaInactivityDurationExpired()
+{
+    PVMF_JBNODE_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::HandleEvent_IncomingMediaInactivityDurationExpired In"));
+
+    PVUuid eventuuid = PVMFJitterBufferNodeEventTypeUUID;
+    int32 errcode = PVMFJitterBufferNodeRemoteInactivityTimerExpired;
+
+    PVMF_JB_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::HandleEvent_IncomingMediaInactivityDurationExpired- iCurrentCommand.size()[%d]", iCurrentCommand.size()));
+    if (iCurrentCommand.size() > 0)
+    {
+        PVMFJitterBufferNodeCommand cmd = iCurrentCommand.front();
+        CommandComplete(cmd, PVMFFailure, NULL, &eventuuid, &errcode);
+        iCurrentCommand.Erase(&iCurrentCommand.front());
+    }
+    else
+    {
+        ReportInfoEvent(PVMFErrTimeout, NULL, &eventuuid, &errcode);
+        ipJitterBufferMisc->SetSessionDurationExpired();
+        if (IsAdded())
+        {
+            RunIfNotReady();
+        }
+    }
+
+    PVMF_JBNODE_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::HandleEvent_IncomingMediaInactivityDurationExpired Out"));
+}
+
+void PVMFJitterBufferNode::HandleEvent_NotifyReportBufferingStatus()
+{
+    PVMF_JBNODE_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::HandleEvent_NotifyReportBufferingStatus In"));
+    if (iDelayEstablished == false)
+    {
+        /*
+         * Check to see if the session duration has expired
+         */
+        if (ipJitterBufferMisc->IsSessionExpired())
+        {
+            PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferNode::TimeoutOccurred - Session Duration Expired"));
+            /* Force out of rebuffering */
+            Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator it;
+            for (it = iPortParamsQueue.begin();
+                    it != iPortParamsQueue.end();
+                    it++)
+            {
+                PVMFJitterBufferPortParams* pPortParams = *it;
+                if (pPortParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
+                {
+                    SendData(&(pPortParams->irPort));
+                }
+            }
+            if (IsAdded())
+            {
+                RunIfNotReady();
+            }
+        }
+        else
+        {
+            ReportInfoEvent(PVMFInfoBufferingStatus);
+            RequestEventCallBack(JB_NOTIFY_REPORT_BUFFERING_STATUS);
+        }
+    }
+    PVMF_JBNODE_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::HandleEvent_NotifyReportBufferingStatus Out"));
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//Utility functions
+///////////////////////////////////////////////////////////////////////////////
+
+bool
+PVMFJitterBufferNode::getPortContainer(PVMFPortInterface* aPort,
+                                       PVMFJitterBufferPortParams*& aPortParamsPtr)
+{
+    Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator it;
+
+    for (it = iPortParamsQueue.begin();
+            it != iPortParamsQueue.end();
+            it++)
+    {
+        PVMFJitterBufferPortParams* pPortParams = *it;
+        if (&pPortParams->irPort == aPort)
+        {
+            aPortParamsPtr = *it;
+            return true;
+        }
+    }
+    return false;
+}
+
+bool PVMFJitterBufferNode::RequestEventCallBack(JB_NOTIFY_CALLBACK aEventType, uint32 aDelay, OsclAny* aContext)
+{
+    OSCL_UNUSED_ARG(aDelay);
+    OSCL_UNUSED_ARG(aContext);
+    bool retval = false;
+    switch (aEventType)
+    {
+        case JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED:
+        {
+            PVMFJBEventNotificationRequestInfo eventRequestInfo(CLOCK_NOTIFICATION_INTF_TYPE_NONDECREASING, this, NULL);
+            retval = ipEventNotifier->RequestCallBack(eventRequestInfo, iMaxInactivityDurationForMediaInMs, iIncomingMediaInactivityDurationCallBkId);
+            if (retval)
+            {
+                iIncomingMediaInactivityDurationCallBkPending = true;
+            }
+        }
+        break;
+        case JB_NOTIFY_REPORT_BUFFERING_STATUS:
+        {
+            if (iNotifyBufferingStatusCallBkPending)
+            {
+                CancelEventCallBack(JB_NOTIFY_REPORT_BUFFERING_STATUS);
+            }
+            PVMFJBEventNotificationRequestInfo eventRequestInfo(CLOCK_NOTIFICATION_INTF_TYPE_NONDECREASING, this, NULL);
+            retval = ipEventNotifier->RequestCallBack(eventRequestInfo, iBufferingStatusIntervalInMs, iNotifyBufferingStatusCallBkId);
+            if (retval)
+            {
+                iNotifyBufferingStatusCallBkPending = true;
+            }
+        }
+        break;
+
+        default:
+        {
+            //Log it
+        }
+    }
+    return retval;
+}
+
+void PVMFJitterBufferNode::CancelEventCallBack(JB_NOTIFY_CALLBACK aEventType, OsclAny* aContext)
+{
+    OSCL_UNUSED_ARG(aContext);
+    switch (aEventType)
+    {
+        case JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED:
+        {
+            if (iIncomingMediaInactivityDurationCallBkPending)
+            {
+                PVMFJBEventNotificationRequestInfo eventRequestInfo(CLOCK_NOTIFICATION_INTF_TYPE_NONDECREASING, this, NULL);
+                ipEventNotifier->CancelCallBack(eventRequestInfo, iIncomingMediaInactivityDurationCallBkId);
+                iIncomingMediaInactivityDurationCallBkPending = false;
+            }
+        }
+        break;
+        case JB_NOTIFY_REPORT_BUFFERING_STATUS:
+        {
+            if (iNotifyBufferingStatusCallBkPending)
+            {
+                PVMFJBEventNotificationRequestInfo eventRequestInfo(CLOCK_NOTIFICATION_INTF_TYPE_NONDECREASING, this, NULL);
+                ipEventNotifier->CancelCallBack(eventRequestInfo, iNotifyBufferingStatusCallBkId);
+                iNotifyBufferingStatusCallBkPending = false;
+            }
+        }
+        break;
+
+        default:
+        {
+            //Log it
+        }
+    }
+    return;
+}
+
 void PVMFJitterBufferNode::SetState(TPVMFNodeInterfaceState s)
 {
     PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode:SetState %d", s));
@@ -2852,22 +3641,6 @@
                                   8);
         PVMFNodeInterface::ReportInfoEvent(asyncevent);
     }
-    else if (aEventType == PVMFJitterBufferNodeStreamThinningRecommended)
-    {
-        uint8 localbuffer[12];
-        oscl_memset(localbuffer, 0, 12);
-        localbuffer[0] = 1;
-        oscl_memcpy(&localbuffer[4], &iUnderFlowEndPacketTS, sizeof(uint32));
-        oscl_memcpy(&localbuffer[8], &iEstimatedBitRate, sizeof(uint32));
-        PVMFAsyncEvent asyncevent(PVMFInfoEvent,
-                                  aEventType,
-                                  NULL,
-                                  NULL,
-                                  aEventData,
-                                  localbuffer,
-                                  12);
-        PVMFNodeInterface::ReportInfoEvent(asyncevent);
-    }
     else if (aEventUUID && aEventCode)
     {
         PVMFBasicErrorInfoMessage* eventmsg;
@@ -2890,1481 +3663,6 @@
     }
 }
 
-/////////////////////////////////////////////////////
-// Port Processing routines
-/////////////////////////////////////////////////////
-void PVMFJitterBufferNode::QueuePortActivity(PVMFJitterBufferPortParams* aPortParams,
-        const PVMFPortActivity &aActivity)
-{
-    OSCL_UNUSED_ARG(aPortParams);
-    OSCL_UNUSED_ARG(aActivity);
-
-    if (IsAdded())
-    {
-        /*
-         * wake up the AO to process the port activity event.
-         */
-        RunIfNotReady();
-    }
-}
-
-void PVMFJitterBufferNode::HandlePortActivity(const PVMFPortActivity &aActivity)
-{
-    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::PortActivity: port=0x%x, type=%d",
-                         aActivity.iPort, aActivity.iType));
-
-    PVMFJitterBufferPortParams* portParamsPtr = NULL;
-    PVMFJitterBufferPort* jbPort = OSCL_STATIC_CAST(PVMFJitterBufferPort*, aActivity.iPort);
-    portParamsPtr = jbPort->iPortParams;
-
-    if (aActivity.iType != PVMF_PORT_ACTIVITY_DELETED)
-    {
-        if (portParamsPtr == NULL)
-        {
-            ReportErrorEvent(PVMFErrPortProcessing, (OsclAny*)(aActivity.iPort));
-            PVMF_JBNODE_LOGERROR((0, "0x%x PVMFJitterBufferNode::HandlePortActivity - getPortContainer Failed", this));
-            return;
-        }
-    }
-
-    /*
-     * A port is reporting some activity or state change.  This code
-     * figures out whether we need to queue a processing event
-     * for the AO, and/or report a node event to the observer.
-     */
-
-    switch (aActivity.iType)
-    {
-        case PVMF_PORT_ACTIVITY_CREATED:
-            /*
-             * Report port created info event to the node.
-             */
-            ReportInfoEvent(PVMFInfoPortCreated, (OsclAny*)aActivity.iPort);
-            break;
-
-        case PVMF_PORT_ACTIVITY_DELETED:
-            /*
-             * Report port deleted info event to the node.
-             */
-            ReportInfoEvent(PVMFInfoPortDeleted, (OsclAny*)aActivity.iPort);
-            break;
-
-        case PVMF_PORT_ACTIVITY_CONNECT:
-            //nothing needed.
-            break;
-
-        case PVMF_PORT_ACTIVITY_DISCONNECT:
-        {
-            /*
-             * flush the associated jitter buffer if a port is disconnected.
-             */
-            if (portParamsPtr->iJitterBuffer != NULL)
-            {
-                PVMF_JBNODE_LOGDATATRAFFIC_FLOWCTRL((0, "PVMFJitterBufferNode::HandlePortActivity - CancelDeallocationNotifications"));
-                for (uint32 i = 0; i < iPortParamsQueue.size(); i++)
-                {
-                    if (iPortParamsQueue[i].iBufferAlloc != NULL)
-                    {
-                        iPortParamsQueue[i].iBufferAlloc->CancelFreeMemoryAvailableCallback();
-                        iPortParamsQueue[i].iBufferAlloc->removeRef();
-                        iPortParamsQueue[i].iBufferAlloc = NULL;
-                    }
-                }
-                portParamsPtr->iJitterBuffer->FlushJitterBuffer();
-            }
-        }
-        break;
-
-        case PVMF_PORT_ACTIVITY_OUTGOING_MSG:
-        {
-            if (portParamsPtr->oProcessOutgoingMessages)
-            {
-                /*
-                 * An outgoing message was queued on this port.
-                 * All ports have outgoing messages
-                 * in this node
-                 */
-                QueuePortActivity(portParamsPtr, aActivity);
-            }
-        }
-        break;
-
-        case PVMF_PORT_ACTIVITY_INCOMING_MSG:
-        {
-            /*
-             * An outgoing message was queued on this port.
-             * Only input and feedback ports have incoming messages
-             * in this node
-             */
-            int32 portTag = portParamsPtr->tag;
-            switch (portTag)
-            {
-                case PVMF_JITTER_BUFFER_PORT_TYPE_INPUT:
-                case PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK:
-                    if (portParamsPtr->oProcessIncomingMessages)
-                    {
-                        QueuePortActivity(portParamsPtr, aActivity);
-                    }
-                    break;
-
-                default:
-                    OSCL_ASSERT(false);
-                    break;
-            }
-        }
-        break;
-
-        case PVMF_PORT_ACTIVITY_OUTGOING_QUEUE_BUSY:
-        {
-            int32 portTag = portParamsPtr->tag;
-            switch (portTag)
-            {
-                case PVMF_JITTER_BUFFER_PORT_TYPE_INPUT:
-                    /*
-                     * We typically use incoming port's outgoing q
-                     * only in case of 3GPP streaming, wherein we
-                     * send firewall packets. If it is busy, it does
-                     * not stop us from registering incoming data pkts.
-                     * so do nothing.
-                     */
-                    break;
-
-                case PVMF_JITTER_BUFFER_PORT_TYPE_OUTPUT:
-                {
-                    /*
-                     * This implies that this output port cannot accept any more
-                     * msgs on its outgoing queue. This would usually imply that
-                     * the corresponding input port must stop processing messages,
-                     * however in case of jitter buffer the input and output ports
-                     * are separated by a huge jitter buffer. Therefore continue
-                     * to process the input.
-                     */
-                }
-                break;
-
-                case PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK:
-                    portParamsPtr->oProcessIncomingMessages = false;
-                    break;
-
-                default:
-                    OSCL_ASSERT(false);
-                    break;
-            }
-        }
-        break;
-
-        case PVMF_PORT_ACTIVITY_OUTGOING_QUEUE_READY:
-        {
-            int32 portTag = portParamsPtr->tag;
-            /*
-             * Outgoing queue was previously busy, but is now ready.
-             * We may need to schedule new processing events depending
-             * on the port type.
-             */
-            switch (portTag)
-            {
-                case PVMF_JITTER_BUFFER_PORT_TYPE_INPUT:
-                    /*
-                     * We never did anything in PVMF_PORT_ACTIVITY_OUTGOING_QUEUE_BUSY
-                     * so do nothing
-                     */
-                    break;
-
-                case PVMF_JITTER_BUFFER_PORT_TYPE_OUTPUT:
-                {
-                    /*
-                     * This implies that this output port can accept more
-                     * msgs on its outgoing queue. This implies that the corresponding
-                     * input port can start processing messages again.
-                     */
-                    PVMFJitterBufferPort* jbPort = OSCL_STATIC_CAST(PVMFJitterBufferPort*, aActivity.iPort);
-                    PVMFJitterBufferPortParams* inPortParams = jbPort->iCounterpartPortParams;
-                    if (inPortParams != NULL)
-                    {
-                        inPortParams->oProcessIncomingMessages = true;
-                    }
-                    else
-                    {
-                        OSCL_ASSERT(false);
-                    }
-                }
-                break;
-
-                case PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK:
-                    portParamsPtr->oProcessIncomingMessages = true;
-                    break;
-
-                default:
-                    OSCL_ASSERT(false);
-                    break;
-            }
-            if (IsAdded())
-            {
-                RunIfNotReady();
-            }
-        }
-        break;
-
-        case PVMF_PORT_ACTIVITY_CONNECTED_PORT_BUSY:
-        {
-            /*
-             * The connected port has become busy (its incoming queue is
-             * busy).
-             */
-            int32 portTag = portParamsPtr->tag;
-            switch (portTag)
-            {
-                case PVMF_JITTER_BUFFER_PORT_TYPE_INPUT:
-                    break;
-
-                case PVMF_JITTER_BUFFER_PORT_TYPE_OUTPUT:
-                {
-                    /*
-                     * This implies that this output port cannot send any more
-                     * msgs from its outgoing queue. It should stop processing
-                     * messages till the connect port is ready.
-                     */
-                    portParamsPtr->oProcessOutgoingMessages = false;
-                }
-                break;
-
-                case PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK:
-                    portParamsPtr->oProcessOutgoingMessages = false;
-                    break;
-
-                default:
-                    OSCL_ASSERT(false);
-                    break;
-            }
-        }
-        break;
-
-        case PVMF_PORT_ACTIVITY_CONNECTED_PORT_READY:
-        {
-            /*
-             * The connected port has transitioned from Busy to Ready.
-             * It's time to start processing messages outgoing again.
-             */
-            int32 portTag = portParamsPtr->tag;
-            switch (portTag)
-            {
-                case PVMF_JITTER_BUFFER_PORT_TYPE_INPUT:
-                    break;
-
-                case PVMF_JITTER_BUFFER_PORT_TYPE_OUTPUT:
-                    /*
-                     * This implies that this output port can now send
-                     * msgs from its outgoing queue. It can start processing
-                     * messages now.
-                     */
-                    portParamsPtr->oProcessOutgoingMessages = true;
-                    break;
-
-                case PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK:
-                    portParamsPtr->oProcessOutgoingMessages = true;
-                    break;
-
-                default:
-                    OSCL_ASSERT(false);
-                    break;
-            }
-            if (IsAdded())
-            {
-                RunIfNotReady();
-            }
-        }
-        break;
-
-        default:
-            break;
-    }
-}
-
-/*
- * called by the AO to process a port activity message
- */
-bool PVMFJitterBufferNode::ProcessPortActivity(PVMFJitterBufferPortParams* aPortParams)
-{
-    PVMFStatus status = PVMFSuccess;
-    switch (aPortParams->tag)
-    {
-        case PVMF_JITTER_BUFFER_PORT_TYPE_OUTPUT:
-        {
-            if ((aPortParams->oProcessOutgoingMessages) &&
-                    (aPortParams->iPort->OutgoingMsgQueueSize() > 0))
-            {
-                status = ProcessOutgoingMsg(aPortParams);
-            }
-            /*
-             * Send data out of jitter buffer as long as there's:
-             *  - more data to send
-             *  - outgoing queue isn't in a Busy state.
-             *  - ports are not paused
-             */
-            PVMFJitterBufferPort* jbPort = OSCL_STATIC_CAST(PVMFJitterBufferPort*, aPortParams->iPort);
-            if (aPortParams->oProcessOutgoingMessages)
-            {
-                if (oStopOutputPorts == false)
-                {
-                    SendData(OSCL_STATIC_CAST(PVMFPortInterface*, jbPort->iPortCounterpart));
-                }
-            }
-        }
-        break;
-
-        case PVMF_JITTER_BUFFER_PORT_TYPE_INPUT:
-        {
-            PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::ProcessPortActivity: input port- aPortParams->oProcessIncomingMessages %d aPortParams->iPort->IncomingMsgQueueSize()  %d" ,
-                                 aPortParams->oProcessIncomingMessages, aPortParams->iPort->IncomingMsgQueueSize()));
-            if ((aPortParams->oProcessIncomingMessages) &&
-                    (aPortParams->iPort->IncomingMsgQueueSize() > 0))
-            {
-                status = ProcessIncomingMsg(aPortParams);
-            }
-            if ((aPortParams->oProcessOutgoingMessages) &&
-                    (aPortParams->iPort->OutgoingMsgQueueSize() > 0))
-            {
-                status = ProcessOutgoingMsg(aPortParams);
-            }
-        }
-        break;
-
-        case PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK:
-        {
-            PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::ProcessPortActivity: - aPortParams->oProcessIncomingMessages %d aPortParams->iPort->IncomingMsgQueueSize()  %d" ,
-                                 aPortParams->oProcessIncomingMessages, aPortParams->iPort->IncomingMsgQueueSize()));
-
-            if ((aPortParams->oProcessIncomingMessages) &&
-                    (aPortParams->iPort->IncomingMsgQueueSize() > 0))
-            {
-                status = ProcessIncomingMsg(aPortParams);
-            }
-            if ((aPortParams->oProcessOutgoingMessages) &&
-                    (aPortParams->iPort->OutgoingMsgQueueSize() > 0))
-            {
-                status = ProcessOutgoingMsg(aPortParams);
-            }
-        }
-        break;
-
-        default:
-            break;
-    }
-
-    /*
-     * Report any unexpected failure in port processing...
-     * (the InvalidState error happens when port input is suspended,
-     * so don't report it.)
-     */
-    if (status != PVMFErrBusy
-            && status != PVMFSuccess
-            && status != PVMFErrInvalidState)
-    {
-        PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ProcessPortActivity: Error - ProcessPortActivity failed. port=0x%x",
-                              aPortParams->iPort));
-        ReportErrorEvent(PVMFErrPortProcessing, (OsclAny*)(aPortParams->iPort));
-    }
-
-    /*
-     * return true if we processed an activity...
-     */
-    return (status != PVMFErrBusy);
-}
-
-/////////////////////////////////////////////////////
-PVMFStatus PVMFJitterBufferNode::ProcessIncomingMsg(PVMFJitterBufferPortParams* aPortParams)
-{
-    PVUuid eventuuid = PVMFJitterBufferNodeEventTypeUUID;
-    PVMFPortInterface* aPort = aPortParams->iPort;
-    /*
-     * Called by the AO to process one buffer off the port's
-     * incoming data queue.  This routine will dequeue and
-     * dispatch the data.
-     */
-    PVMF_JBNODE_LOGINFO((0, "0x%x PVMFJitterBufferNode::ProcessIncomingMsg: aPort=0x%x", this, aPort));
-
-    aPortParams->iNumMediaMsgsRecvd++;
-
-    if (aPortParams->oMonitorForRemoteActivity == true)
-    {
-        CancelEventCallBack(JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED);
-        RequestEventCallBack(JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED);
-    }
-
-    switch (aPortParams->tag)
-    {
-        case PVMF_JITTER_BUFFER_PORT_TYPE_INPUT:
-        {
-            /* Parse packet header - mainly to retrieve time stamp */
-            PVMFJitterBuffer* jitterBuffer = aPortParams->iJitterBuffer;
-            if (jitterBuffer == NULL)
-            {
-                PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ProcessIncomingMsg: findJitterBuffer failed"));
-                int32 errcode = PVMFJitterBufferNodeUnableToRegisterIncomingPacket;
-                ReportErrorEvent(PVMFErrArgument, (OsclAny*)(aPort), &eventuuid, &errcode);
-                return PVMFErrArgument;
-            }
-            /*
-             * Check for space in the jitter buffer before dequeing the message
-             */
-            if (!CheckForSpaceInJitterBuffer(aPort))
-            {
-                aPortParams->oProcessIncomingMessages = false;
-                jitterBuffer->NotifyFreeSpaceAvailable(this,
-                                                       OSCL_STATIC_CAST(OsclAny*, aPort));
-                int32 infocode = PVMFJitterBufferNodeJitterBufferFull;
-                ReportInfoEvent(PVMFInfoOverflow, (OsclAny*)(aPort), &eventuuid, &infocode);
-                PVMF_JBNODE_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferNode::ProcessIncomingMsg: Jitter Buffer full"));
-                PVMF_JBNODE_LOGDATATRAFFIC_FLOWCTRL_E((0, "PVMFJitterBufferNode::ProcessIncomingMsg: Jitter Buffer full"));
-                return PVMFErrBusy;
-            }
-
-            /*
-             * Incoming message recvd on the input port.
-             * Dequeue the message
-             */
-            PVMFSharedMediaMsgPtr msg;
-            PVMFStatus status = aPort->DequeueIncomingMsg(msg);
-            if (status != PVMFSuccess)
-            {
-                ReportErrorEvent(PVMFErrPortProcessing, (OsclAny*)(aPort));
-                PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ProcessIncomingMsg: Error - INPUT PORT - DequeueIncomingMsg failed"));
-                return status;
-            }
-
-            if (aPortParams->eTransportType == PVMF_JITTER_BUFFER_PORT_TRANSPORT_TYPE_RTP)
-            {
-                ProcessIncomingMsgRTP(aPortParams, msg);
-            }
-            else
-            {
-                PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ProcessIncomingMsg: Invalid Transport Type"));
-                OSCL_ASSERT(0);
-            }
-        }
-        break;
-
-        case PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK:
-        {
-            /*
-             * Incoming RTCP reports - recvd on the input port.
-             * Dequeue the message - Need to fully implement
-             * RTCP
-             */
-            PVMFSharedMediaMsgPtr msg;
-            PVMFStatus status = aPort->DequeueIncomingMsg(msg);
-            if (status != PVMFSuccess)
-            {
-                ReportErrorEvent(PVMFErrPortProcessing, (OsclAny*)(aPort));
-                PVMF_JBNODE_LOGERROR((0, "0x%x PVMFJitterBufferNode::ProcessIncomingMsg: Error - FB PORT - DequeueIncomingMsg failed", this));
-                return status;
-            }
-            if (aPortParams->eTransportType == PVMF_JITTER_BUFFER_PORT_TRANSPORT_TYPE_RTP)
-            {
-                ProcessIncomingMsgRTP(aPortParams, msg);
-            }
-            else
-            {
-                PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ProcessIncomingMsg: Invalid Transport Type"));
-                OSCL_ASSERT(0);
-            }
-        }
-        break;
-
-        default:
-        {
-            ReportErrorEvent(PVMFErrPortProcessing, (OsclAny*)(aPort));
-            PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ProcessIncomingMsg - Invalid Port Tag"));
-            return PVMFFailure;
-        }
-    }
-    return (PVMFSuccess);
-}
-
-/////////////////////////////////////////////////////
-PVMFStatus PVMFJitterBufferNode::ProcessIncomingMsgRTP(PVMFJitterBufferPortParams* aPortParams,
-        PVMFSharedMediaMsgPtr& aMsg)
-{
-    PVUuid eventuuid = PVMFJitterBufferNodeEventTypeUUID;
-    PVMFPortInterface* aPort = aPortParams->iPort;
-
-    switch (aPortParams->tag)
-    {
-        case PVMF_JITTER_BUFFER_PORT_TYPE_INPUT:
-        {
-            /* Parse packet header - mainly to retrieve time stamp */
-            PVMFJitterBuffer* jitterBuffer = aPortParams->iJitterBuffer;
-            /*
-             * Check for msg format id. If msg format id is a media data then register
-             * the packet in jitter buffer. If it is a command that we do not understand
-             * log the command in a queue and send it out at an apporiate time.
-             */
-            PVUid32 msgFormatID = aMsg->getFormatID();
-            if (msgFormatID > PVMF_MEDIA_CMD_FORMAT_IDS_START)
-            {
-                if (msgFormatID == PVMF_MEDIA_CMD_EOS_FORMAT_ID)
-                {
-                    /*
-                     * Check for upstream EOS. Set the boolean if it is. EOS from jitter buffer
-                     * is sent when jitter buffer is all empty. We do not really expect EOS from
-                     * upstream nodes in case of RTP processing. So ignore it.
-                     */
-                    PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ProcessIncomingMsgRTP - Unexpected EOS"));
-                    PVMF_JBNODE_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferNode::ProcessIncomingMsgRTP - Unexpected EOS"));
-                    aPortParams->oUpStreamEOSRecvd = true;
-                    return PVMFSuccess;
-                }
-                else /* unknown command */
-                {
-                    PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ProcessIncomingMsgRTP - Unknown Cmd Recvd"));
-                    PVMF_JBNODE_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferNode::ProcessIncomingMsgRTP - Unknown Cmd Recvd"));
-                    jitterBuffer->addMediaCommand(aMsg);
-                }
-            }
-            else /* Media data */
-            {
-#if (PVLOGGER_INST_LEVEL > PVLOGMSG_INST_LLDBG)
-                PVMFJitterBufferStats stats = jitterBuffer->getJitterBufferStats();
-                uint32 timebase32 = 0;
-                uint32 estServerClock = 0;
-                uint32 clientClock = 0;
-                bool overflowFlag = false;
-                iEstimatedServerClock->GetCurrentTime32(estServerClock, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
-                if (iClientPlayBackClock != NULL)
-                    iClientPlayBackClock->GetCurrentTime32(clientClock, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
-#endif
-                PVMFSharedMediaDataPtr inputDataPacket;
-                convertToPVMFMediaData(inputDataPacket, aMsg);
-
-                if (aPortParams->bTransportHeaderPreParsed)
-                {
-                    PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ProcessIncomingMsgRTP - Invalid TransportType"));
-                    OSCL_ASSERT(0);
-                }
-                else
-                {
-                    /*
-                     * We assume the following. Each input msg contains an integral number of
-                     * RTP packets. These packets are stored in memory fragments and each memfrag
-                     * can contain JUST ONE complete RTP packet.
-                     * Jitterbuffer holds an array of media msgs instead of just refcounted memfrags.
-                     * Reason being memfrags cannot hold additional info like ts, seqnum etc,
-                     * whereas mediamsgs can.
-                     * If "oInPlaceProcessing" boolean if set to true means that media msg wrappers
-                     * that carry the RTP packets from downstream node can be reused. "ParsePacketHeader"
-                     * does pointer arithmetic on input memory frags and reappends them to "inputDataPacket"
-                     * We register "inputDataPacket" in jitter buffer's circular array.
-                     * If "oInPlaceProcessing" boolean if set to false, then inside "ParsePacketHeader"
-                     * we allocate a new media msg wrapper and transfer the memory fragments from "inputDataPacket"
-                     * to "dataPacket".We register "dataPacket" in jitter buffer's circular array.
-                     * If there are multiple RTP packets in "inputDataPacket" then we have to allocate new
-                     * media msg wrappers for each one of these. So "oInPlaceProcessing" cannot be true if
-                     * downstream node packs multiple RTP packets in a single media msg.
-                     */
-                    if (inputDataPacket->getNumFragments() > 1)
-                    {
-                        if (aPortParams->oInPlaceProcessing == true)
-                        {
-                            PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ProcessIncomingMsgRTP - In Place Processing - No Support for Multiple MemFrags "));
-                            PVMF_JBNODE_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferNode::ProcessIncomingMsgRTP - In Place Processing - No Support for Multiple MemFrags "));
-                            int32 errcode = PVMFJitterBufferNodeUnableToRegisterIncomingPacket;
-                            ReportErrorEvent(PVMFErrProcessing, (OsclAny*)(aPort), &eventuuid, &errcode);
-                            return PVMFFailure;
-                        }
-                    }
-                    OsclSharedPtr<PVMFMediaDataImpl> mediaDataIn;
-                    if (!inputDataPacket->getMediaDataImpl(mediaDataIn))
-                    {
-                        PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ProcessIncomingMsgRTP: corrupt input media msg"));
-                        PVMF_JBNODE_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferNode::ProcessIncomingMsgRTP: corrupt input media msg"));
-                        int32 errcode = PVMFJitterBufferNodeUnableToRegisterIncomingPacket;
-                        ReportErrorEvent(PVMFErrProcessing, (OsclAny*)(aPort), &eventuuid, &errcode);
-                        return PVMFFailure;
-                    }
-                    for (uint32 i = 0; i < inputDataPacket->getNumFragments(); i++)
-                    {
-                        uint32 fragsize = 0;
-                        mediaDataIn->getMediaFragmentSize(i, fragsize);
-                        if (fragsize > RTP_FIXED_HEADER_SIZE)
-                        {
-                            if (inputDataPacket->getNumFragments() > 1)
-                            {
-                                if (aPortParams->oInPlaceProcessing == true)
-                                {
-                                    PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ProcessIncomingMsgRTP - In Place Processing - No Support for Multiple MemFrags "));
-                                    PVMF_JBNODE_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferNode::ProcessIncomingMsgRTP - In Place Processing - No Support for Multiple MemFrags "));
-                                    int32 errcode = PVMFJitterBufferNodeUnableToRegisterIncomingPacket;
-                                    ReportErrorEvent(PVMFErrProcessing, (OsclAny*)(aPort), &eventuuid, &errcode);
-                                    return PVMFFailure;
-                                }
-                            }
-
-                            PVMFSharedMediaDataPtr dataPacket;
-                            if (jitterBuffer->ParsePacketHeader(inputDataPacket, dataPacket, i))
-                            {
-                                //dataPacket is NULL if inPlaceProcess is true. For 3gpp live streaming
-                                if (CheckStateForRegisteringRTPPackets() == false)
-                                {
-                                    if (dataPacket.GetRep())
-                                    {
-#if (PVLOGGER_INST_LEVEL > PVLOGMSG_INST_LLDBG)
-                                        PVMF_JBNODE_LOGDATATRAFFIC_FLOWCTRL_E((0, "PVMFJitterBufferNode::ProcessIncomingMsgRTP: - Ignoring - Wrong State"
-                                                                               "Size=%d, SSRC=%d", inputDataPacket->getFilledSize(), dataPacket->getStreamID()));
-                                        PVMF_JBNODE_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferNode::ProcessIncomingMsg: - Ignoring - Wrong State"
-                                                                       "Size=%d, SSRC=%d", inputDataPacket->getFilledSize(), dataPacket->getStreamID()));
-                                        PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ProcessIncomingMsg: - Ignoring - Wrong State"
-                                                              "Size=%d, SSRC=%d", inputDataPacket->getFilledSize(), dataPacket->getStreamID()));
-#endif
-                                    }
-                                    return PVMFSuccess;
-                                }
-                                if (aPortParams->oInPlaceProcessing)
-                                {
-                                    /*
-                                     * Register the same in jitter buffer
-                                     */
-                                    if (!RegisterDataPacket(aPort, jitterBuffer, inputDataPacket))
-                                    {
-                                        PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ProcessIncomingMsgRTP: RegisterDataPacket failed"));
-                                        int32 errcode = PVMFJitterBufferNodeUnableToRegisterIncomingPacket;
-                                        ReportErrorEvent(PVMFErrProcessing, (OsclAny*)(aPort), &eventuuid, &errcode);
-                                        return PVMFFailure;
-                                    }
-#if (PVLOGGER_INST_LEVEL > PVLOGMSG_INST_LLDBG)
-                                    PVMF_JBNODE_LOGDATATRAFFIC_FLOWCTRL((0, "PVMFJBNode::ProcessIncomingMsgRTP:"
-                                                                         "MaxSNReg=%d, MaxTSReg=%u, LastSNRet=%d, LastTSRet=%u, NumMsgsInJB=%d, ServClk=%d, PlyClk=%d",
-                                                                         stats.maxSeqNumRegistered, stats.maxTimeStampRegistered,
-                                                                         stats.lastRetrievedSeqNum, stats.maxTimeStampRetrieved,
-                                                                         (stats.maxSeqNumRegistered - stats.lastRetrievedSeqNum),
-                                                                         Oscl_Int64_Utils::get_uint64_lower32(estServerClock),
-                                                                         Oscl_Int64_Utils::get_uint64_lower32(clientClock)));
-#endif
-                                }
-                                else
-                                {
-                                    /*
-                                     * Register the same in jitter buffer
-                                     */
-                                    if (!RegisterDataPacket(aPort, jitterBuffer, dataPacket))
-                                    {
-                                        PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ProcessIncomingMsgRTP: RegisterDataPacket failed"));
-                                        int32 errcode = PVMFJitterBufferNodeUnableToRegisterIncomingPacket;
-                                        ReportErrorEvent(PVMFErrProcessing, (OsclAny*)(aPort), &eventuuid, &errcode);
-                                        return PVMFFailure;
-                                    }
-#if (PVLOGGER_INST_LEVEL > PVLOGMSG_INST_LLDBG)
-                                    PVMF_JBNODE_LOGDATATRAFFIC_FLOWCTRL((0, "PVMFJBNode::ProcessIncomingMsgRTP:"
-                                                                         "MaxSNReg=%d, MaxTSReg=%u, LastSNRet=%d, LastTSRet=%u, NumMsgsInJB=%d, ServClk=%d, PlyClk=%d",
-                                                                         stats.maxSeqNumRegistered, stats.maxTimeStampRegistered,
-                                                                         stats.lastRetrievedSeqNum, stats.maxTimeStampRetrieved,
-                                                                         (stats.maxSeqNumRegistered - stats.lastRetrievedSeqNum),
-                                                                         Oscl_Int64_Utils::get_uint64_lower32(estServerClock),
-                                                                         Oscl_Int64_Utils::get_uint64_lower32(clientClock)));
-#endif
-                                }
-                            }
-                            else
-                            {
-                                PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ProcessIncomingMsgRTP: ParsePacketHeader failed"));
-                                int32 infocode = PVMFJitterBufferNodeInputDataPacketHeaderParserError;
-                                ReportInfoEvent(PVMFErrCorrupt, (OsclAny*)(aPort), &eventuuid, &infocode);
-                            }
-                            SendData(aPort);
-                        }
-                        else
-                        {
-                            if (aPortParams->eTransportType == PVMF_JITTER_BUFFER_PORT_TRANSPORT_TYPE_RTP)
-                            {
-                                /* Could be a firewall packet */
-                                if (DecodeFireWallPackets(inputDataPacket, aPortParams) != PVMFSuccess)
-                                {
-                                    PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ProcessIncomingMsgRTP: DecodeFireWallPackets failed"));
-                                    int32 infocode = PVMFJitterBufferNodeCorruptRTPPacket;
-                                    ReportInfoEvent(PVMFErrCorrupt, (OsclAny*)(aPort), &eventuuid, &infocode);
-                                }
-                            }
-                            else
-                            {
-                                PVMF_JBNODE_LOGDATATRAFFIC_FLOWCTRL_E((0, "PVMFJitterBufferNode::ProcessIncomingMsgRTP: Too Small - Ignoring"
-                                                                       "Size=%d", inputDataPacket->getFilledSize()));
-                                PVMF_JBNODE_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferNode::ProcessIncomingMsgRTP: Too Small - Ignoring"
-                                                               "Size=%d", inputDataPacket->getFilledSize()));
-                                PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ProcessIncomingMsgRTP: Too Small - Ignoring"
-                                                      "Size=%d", inputDataPacket->getFilledSize()));
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        break;
-
-        case PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK:
-        {
-            PVMFStatus status = ProcessIncomingRTCPReport(aMsg, aPortParams);
-            if (status != PVMFSuccess)
-            {
-                PVMF_JBNODE_LOGERROR((0, "0x%x PVMFJitterBufferNode::ProcessIncomingMsgRTP: ProcessIncomingRTCPReport failed", this));
-                int32 errcode = PVMFJitterBufferNodeRTCPSRProcFailed;
-                ReportErrorEvent(PVMFErrProcessing, (OsclAny*)(aPort), &eventuuid, &errcode);
-                return status;
-            }
-        }
-        break;
-
-        default:
-        {
-            ReportErrorEvent(PVMFErrPortProcessing, (OsclAny*)(aPort));
-            PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ProcessIncomingMsgRTP - Invalid Port Tag"));
-            return PVMFFailure;
-        }
-    }
-    return (PVMFSuccess);
-}
-
-
-
-/////////////////////////////////////////////////////
-PVMFStatus PVMFJitterBufferNode::ProcessOutgoingMsg(PVMFJitterBufferPortParams* aPortParams)
-{
-    PVMFPortInterface* aPort = aPortParams->iPort;
-    /*
-     * Called by the AO to process one message off the outgoing
-     * message queue for the given port.  This routine will
-     * try to send the data to the connected port.
-     */
-    PVMF_JBNODE_LOGINFO((0, "0x%x PVMFJitterBufferNode::ProcessOutgoingMsg: aPort=0x%x", this, aPort));
-
-    /*
-     * If connected port is busy, the outgoing message cannot be process. It will be
-     * queued to be processed again after receiving PORT_ACTIVITY_CONNECTED_PORT_READY
-     * from this port.
-     */
-    if (aPort->IsConnectedPortBusy())
-    {
-        PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "0x%x PVMFJitterBufferNode::ProcessOutgoingMsg: Connected port is busy", this));
-        aPortParams->oProcessOutgoingMessages = false;
-        return PVMFErrBusy;
-    }
-
-    PVMFStatus status = PVMFSuccess;
-
-    status = aPort->Send();
-    if (status == PVMFErrBusy)
-    {
-        PVMF_JBNODE_LOGDATATRAFFIC((0, "PVMFJitterBufferNode::ProcessOutgoingMsg: Connected port goes into busy state"));
-        aPortParams->oProcessOutgoingMessages = false;
-    }
-    else
-    {
-        aPortParams->iNumMediaMsgsSent++;
-    }
-    return status;
-}
-
-bool PVMFJitterBufferNode::CheckForPortRescheduling()
-{
-    //This method is only called from JB Node AO's Run.
-    //Purpose of this method is to determine whether the node
-    //needs scheduling based on any outstanding port activities
-    //Here is the scheduling criteria for different port types:
-    //a) PVMF_JITTER_BUFFER_PORT_TYPE_INPUT - If there are incoming
-    //msgs waiting in incoming msg queue then node needs scheduling,
-    //as long oProcessIncomingMessages is true. This boolean stays true
-    //as long we can register packets in JB. If JB is full this boolean
-    //is made false (when CheckForSpaceInJitterBuffer() returns false)
-    //and is once again made true in JitterBufferFreeSpaceAvailable() callback.
-    //We also use the input port briefly as a bidirectional port in case of
-    //RTSP streaming to do firewall packet exchange. So if there are outgoing
-    //msgs and oProcessOutgoingMessages is true then node needs scheduling.
-    //b) PVMF_JITTER_BUFFER_PORT_TYPE_OUTPUT - As long as:
-    //	- there are msgs in outgoing queue
-    //	- oProcessOutgoingMessages is true
-    //	- and as long as there is data in JB and we are not in buffering
-    //then node needs scheduling.
-    //c) PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK - As long as:
-    //	- there are msgs in incoming queue and oProcessIncomingMessages is true
-    //	- there are msgs in outgoing queue and oProcessOutgoingMessages is true
-    uint32 i;
-    for (i = 0; i < iPortVector.size(); i++)
-    {
-        PVMFJitterBufferPortParams* portContainerPtr = iPortVector[i]->iPortParams;
-        if (portContainerPtr == NULL)
-        {
-            PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::CheckForPortRescheduling: Error - GetPortContainer failed"));
-            return false;
-        }
-        if (portContainerPtr->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-        {
-            if (portContainerPtr->iPort->IncomingMsgQueueSize() > 0)
-            {
-                if (portContainerPtr->oProcessIncomingMessages)
-                {
-                    /*
-                     * Found a port that has outstanding activity and
-                     * is not busy.
-                     */
-                    return true;
-                }
-            }
-            if (portContainerPtr->iPort->OutgoingMsgQueueSize() > 0)
-            {
-                if (portContainerPtr->oProcessOutgoingMessages)
-                {
-                    /*
-                     * Found a port that has outstanding activity and
-                     * is not busy.
-                     */
-                    return true;
-                }
-            }
-        }
-        else if (portContainerPtr->tag == PVMF_JITTER_BUFFER_PORT_TYPE_OUTPUT)
-        {
-            PVMFJitterBufferPort* jbPort =
-                OSCL_STATIC_CAST(PVMFJitterBufferPort*, portContainerPtr->iPort);
-            if ((portContainerPtr->iPort->OutgoingMsgQueueSize() > 0) ||
-                    ((jbPort->iCounterpartPortParams->oJitterBufferEmpty == false) &&
-                     (oDelayEstablished == true) && !IsCallbackPending(JB_NOTIFY_WAIT_FOR_OOO_PACKET_COMPLETE, jbPort->iCounterpartPortParams)))
-            {
-                if ((portContainerPtr->oProcessOutgoingMessages) && (oStopOutputPorts == false))
-                {
-                    /*
-                     * Found a port that has outstanding activity and
-                     * is not busy.
-                     */
-                    return true;
-                }
-            }
-        }
-        else if (portContainerPtr->tag == PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK)
-        {
-            if (portContainerPtr->iPort->IncomingMsgQueueSize() > 0)
-            {
-                if (portContainerPtr->oProcessIncomingMessages)
-                {
-                    /*
-                     * Found a port that has outstanding activity and
-                     * is not busy.
-                     */
-                    return true;
-                }
-            }
-            if (portContainerPtr->iPort->OutgoingMsgQueueSize() > 0)
-            {
-                if (portContainerPtr->oProcessOutgoingMessages)
-                {
-                    /*
-                     * Found a port that has outstanding activity and
-                     * is not busy.
-                     */
-                    return true;
-                }
-            }
-        }
-    }
-    /*
-     * No port processing needed - either all port activity queues are empty
-     * or the ports are backed up due to flow control.
-     */
-    return false;
-}
-
-bool PVMFJitterBufferNode::CheckForPortActivityQueues()
-{
-    uint32 i;
-    for (i = 0; i < iPortVector.size(); i++)
-    {
-        PVMFJitterBufferPortParams* portContainerPtr = NULL;
-
-        if (!getPortContainer(iPortVector[i], portContainerPtr))
-        {
-            PVMF_JBNODE_LOGERROR((0, "0x%x PVMFJitterBufferNode::CheckForPortActivityQueues: Error - GetPortContainer failed", this));
-            return false;
-        }
-
-        if ((portContainerPtr->iPort->IncomingMsgQueueSize() > 0) ||
-                (portContainerPtr->iPort->OutgoingMsgQueueSize() > 0))
-        {
-            /*
-             * Found a port that still has an outstanding activity.
-             */
-            return true;
-        }
-    }
-    /*
-     * All port activity queues are empty
-     */
-    return false;
-}
-
-/**
- * Active object implementation
- */
-
-/**
-  * This AO handles both API commands and port activity.
-  * The AO will either process one command or service one connected
-  * port per call.  It will re-schedule itself and run continuously
-  * until it runs out of things to do.
-  */
-void PVMFJitterBufferNode::Run()
-{
-    iNumRunL++;
-    /*
-     * Process commands.
-     */
-    if (!iInputCommands.empty())
-    {
-        if (ProcessCommand(iInputCommands.front()))
-        {
-            /*
-             * note: need to check the state before re-scheduling
-             * since the node could have been reset in the ProcessCommand
-             * call.
-             */
-            if (iInterfaceState != EPVMFNodeCreated)
-            {
-                if (IsAdded())
-                {
-                    RunIfNotReady();
-                }
-            }
-            return;
-        }
-    }
-
-    /*
-     * Process port activity
-     */
-    if (((iInterfaceState == EPVMFNodeInitialized) ||
-            (iInterfaceState == EPVMFNodePrepared) ||
-            (iInterfaceState == EPVMFNodeStarted)  ||
-            (iInterfaceState == EPVMFNodePaused)) ||
-            FlushPending())
-    {
-        uint32 i;
-        for (i = 0; i < iPortVector.size(); i++)
-        {
-            PVMFJitterBufferPortParams* portContainerPtr =
-                iPortVector[i]->iPortParams;
-
-            if (portContainerPtr == NULL)
-            {
-                if (!getPortContainer(iPortVector[i], portContainerPtr))
-                {
-                    PVMF_JBNODE_LOGERROR((0, "0x%x PVMFJitterBufferNode::Run: Error - getPortContainer failed", this));
-                    return;
-                }
-                iPortVector[i]->iPortParams = portContainerPtr;
-            }
-
-            ProcessPortActivity(portContainerPtr);
-        }
-
-        if (CheckForPortRescheduling())
-        {
-            if (IsAdded())
-            {
-                /*
-                 * Re-schedule since there is atleast one port that needs processing
-                 */
-                RunIfNotReady();
-            }
-            return;
-        }
-    }
-
-    if (iInterfaceState == EPVMFNodeStarted)
-    {
-        /*
-         * Queue Data to Output ports from jitter buffer only after
-         * a certain time, i.e, after the session duration expiry.
-         * This means that the server would have stopped sending us
-         * data, and we need to make sure we send out the remaining
-         * jitter buffer contents onward.
-         */
-        if (oSessionDurationExpired || RTCPByeRcvd())
-        {
-            Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-            for (it = iPortParamsQueue.begin();
-                    it != iPortParamsQueue.end();
-                    it++)
-            {
-                if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-                {
-                    SendData(it->iPort);
-                }
-            }
-
-            if (CheckForPortRescheduling())
-            {
-                if (IsAdded())
-                {
-                    /*
-                     * Re-schedule since there is atleast one port that needs processing
-                     */
-                    RunIfNotReady();
-                }
-                return;
-            }
-            else
-            {
-                bool oEmpty;
-                CheckJitterBufferEmpty(oEmpty);
-                if (oEmpty)
-                {
-                    /* Check and generate EOS, if jitter buffers are all empty */
-                    CheckForEOS();
-                }
-            }
-            return;
-        }
-    }
-    /*
-     * If we get here we did not process any ports or commands.
-     * Check for completion of a flush command...
-     */
-    if (FlushPending() && (!CheckForPortActivityQueues()))
-    {
-        uint32 i;
-        /*
-         * Debug check-- all the port queues should be empty at
-         * this point.
-         */
-        for (i = 0;i < iPortVector.size();i++)
-        {
-            if (iPortVector[i]->IncomingMsgQueueSize() > 0 ||
-                    iPortVector[i]->OutgoingMsgQueueSize() > 0)
-            {
-                OSCL_ASSERT(false);
-            }
-        }
-        /*
-         * Flush is complete.  Go to prepared state.
-         */
-        SetState(EPVMFNodePrepared);
-        /*
-         * resume port input so the ports can be re-started.
-         */
-        for (i = 0;i < iPortVector.size();i++)
-        {
-            iPortVector[i]->ResumeInput();
-        }
-        CommandComplete(iCurrentCommand, iCurrentCommand.front(), PVMFSuccess);
-        if (IsAdded())
-        {
-            RunIfNotReady();
-        }
-    }
-    return;
-}
-
-bool PVMFJitterBufferNode::RTCPByeRcvd()
-{
-    bool retval = false;
-    Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-    for (it = iPortParamsQueue.begin();
-            it != iPortParamsQueue.end();
-            it++)
-    {
-        if (it->iRTCPStats.oRTCPByeRecvd)
-        {
-            retval = true;
-            break;
-        }
-    }
-    return retval;
-}
-
-void PVMFJitterBufferNode::DoCancel()
-{
-    /*
-     * the base class cancel operation is sufficient.
-     */
-    OsclActiveObject::DoCancel();
-}
-
-bool
-PVMFJitterBufferNode::setPortParams(PVMFPortInterface* aPort,
-                                    uint32 aTimeScale,
-                                    uint32 aBitRate,
-                                    OsclRefCounterMemFrag& aConfig,
-                                    bool aRateAdaptation,
-                                    uint32 aRateAdaptationFeedBackFrequency)
-
-{
-    return setPortParams(aPort, aTimeScale, aBitRate, aConfig, aRateAdaptation,
-                         aRateAdaptationFeedBackFrequency, false);
-}
-
-bool
-PVMFJitterBufferNode::setPortParams(PVMFPortInterface* aPort,
-                                    uint32 aTimeScale,
-                                    uint32 aBitRate,
-                                    OsclRefCounterMemFrag& aConfig,
-                                    bool aRateAdaptation,
-                                    uint32 aRateAdaptationFeedBackFrequency,
-                                    uint aMaxNumBuffResizes, uint aBuffResizeSize)
-{
-    return setPortParams(aPort, aTimeScale, aBitRate, aConfig, aRateAdaptation,
-                         aRateAdaptationFeedBackFrequency, true,
-                         aMaxNumBuffResizes, aBuffResizeSize);
-}
-bool
-PVMFJitterBufferNode::setPortParams(PVMFPortInterface* aPort,
-                                    uint32 aTimeScale,
-                                    uint32 aBitRate,
-                                    OsclRefCounterMemFrag& aConfig,
-                                    bool aRateAdaptation,
-                                    uint32 aRateAdaptationFeedBackFrequency,
-                                    bool aUserSpecifiedBuffParams,
-                                    uint aMaxNumBuffResizes, uint aBuffResizeSize)
-{
-    OSCL_UNUSED_ARG(aUserSpecifiedBuffParams);
-    uint32 i;
-    for (i = 0; i < iPortParamsQueue.size(); i++)
-    {
-        PVMFJitterBufferPortParams portParams = iPortParamsQueue[i];
-
-        if (portParams.iPort == aPort)
-        {
-            portParams.timeScale = aTimeScale;
-            portParams.mediaClockConverter.set_timescale(aTimeScale);
-            portParams.bitrate = aBitRate;
-            portParams.iTrackConfig = aConfig;
-            portParams.oRateAdaptation = aRateAdaptation;
-            portParams.iRateAdaptationFeedBackFrequency = aRateAdaptationFeedBackFrequency;
-
-            /* Compute buffer size based on bitrate and jitter duration*/
-            uint32 sizeInBytes = 0;
-            if (((int32)iJitterBufferDurationInMilliSeconds > 0) &&
-                    ((int32)aBitRate > 0))
-            {
-                uint32 byteRate = aBitRate / 8;
-                uint32 overhead = (byteRate * PVMF_JITTER_BUFFER_NODE_MEM_POOL_OVERHEAD) / 100;
-                uint32 durationInSec = iJitterBufferDurationInMilliSeconds / 1000;
-                sizeInBytes = ((byteRate + overhead) * durationInSec);
-                if (sizeInBytes < MIN_RTP_SOCKET_MEM_POOL_SIZE_IN_BYTES)
-                {
-                    sizeInBytes = MIN_RTP_SOCKET_MEM_POOL_SIZE_IN_BYTES;
-                }
-                sizeInBytes += (2 * MAX_SOCKET_BUFFER_SIZE);
-            }
-
-            if ((portParams.tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT) || (portParams.tag == PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK))
-            {
-                portParams.SetJitterBufferMemPoolInfo(sizeInBytes, aBuffResizeSize, aMaxNumBuffResizes, 3000);
-            }
-
-            portParams.iRateAdaptationFreeBufferSpaceInBytes = sizeInBytes;
-            iPortParamsQueue[i] = portParams;
-            return true;
-        }
-    }
-    return false;
-}
-
-bool
-PVMFJitterBufferNode::setPortSSRC(PVMFPortInterface* aPort, uint32 aSSRC)
-{
-    PVMFJitterBufferPortParams* portParamsPtr = NULL;
-
-    if (!getPortContainer(aPort, portParamsPtr))
-    {
-        return false;
-    }
-
-    if (portParamsPtr->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-    {
-        if (portParamsPtr->iJitterBuffer != NULL)
-        {
-            portParamsPtr->iJitterBuffer->setSSRC(aSSRC);
-            portParamsPtr->SSRC = aSSRC;
-        }
-        return true;
-    }
-    return false;
-}
-
-bool
-PVMFJitterBufferNode::ClearJitterBuffer(PVMFPortInterface* aPort,
-                                        uint32 aSeqNum)
-{
-    /* Typically called only for HTTP streaming sessions */
-    Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-    for (it = iPortParamsQueue.begin(); it != iPortParamsQueue.end(); it++)
-    {
-        it->iPort->ClearMsgQueues();
-        it->oUpStreamEOSRecvd = false;
-        it->oEOSReached = false;
-    }
-    for (it = iPortParamsQueue.begin(); it != iPortParamsQueue.end(); it++)
-    {
-        if (it->iPort == aPort)
-        {
-            if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-            {
-                if (it->iJitterBuffer != NULL)
-                {
-                    uint32 timebase32 = 0;
-                    uint32 clientClock32 = 0;
-                    bool overflowFlag = false;
-                    if (iClientPlayBackClock != NULL)
-                        iClientPlayBackClock->GetCurrentTime32(clientClock32, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
-
-#if (PVLOGGER_INST_LEVEL > PVLOGMSG_INST_LLDBG)
-                    uint32 serverClock32 = 0;
-                    iEstimatedServerClock->GetCurrentTime32(serverClock32, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
-                    PVMF_JBNODE_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::ClearJitterBuffer - Purging Upto SeqNum =%d", aSeqNum));
-                    PVMF_JBNODE_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::ClearJitterBuffer - Before Purge - EstServClock=%d",
-                                                 serverClock32));
-                    PVMF_JBNODE_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::ClearJitterBuffer - Before Purge - ClientClock=%d",
-                                                 clientClock32));
-#endif
-
-                    it->iJitterBuffer->PurgeElementsWithSeqNumsLessThan(aSeqNum,
-                            clientClock32);
-#if (PVLOGGER_INST_LEVEL > PVLOGMSG_INST_LLDBG)
-                    timebase32 = 0;
-                    serverClock32 = 0;
-                    iEstimatedServerClock->GetCurrentTime32(serverClock32, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
-                    PVMF_JBNODE_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::ClearJitterBuffer - After Purge - EstServClock=%d",
-                                                 serverClock32));
-                    PVMF_JBNODE_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::ClearJitterBuffer - After Purge - ClientClock=%d",
-                                                 clientClock32));
-#endif
-                    it->iJitterBuffer->SetEOS(false);
-                    /*
-                     * Since we flushed the jitter buffer, set it to ready state,
-                     * reset the delay flag
-                     */
-                    oDelayEstablished = false;
-                    oSessionDurationExpired = false;
-                    iSessionDurationTimer->Cancel();
-                    iSessionDurationTimer->Stop();
-                    iJitterBufferState = PVMF_JITTER_BUFFER_READY;
-                }
-                return true;
-            }
-        }
-    }
-    return false;
-}
-
-bool
-PVMFJitterBufferNode::setPortRTPParams(PVMFPortInterface* aPort,
-                                       bool   aSeqNumBasePresent,
-                                       uint32 aSeqNumBase,
-                                       bool   aRTPTimeBasePresent,
-                                       uint32 aRTPTimeBase,
-                                       bool   aNPTTimeBasePresent,
-                                       uint32 aNPTInMS,
-                                       bool oPlayAfterASeek)
-{
-    uint32 i;
-    //The above method is called only during 3GPP repositioning, however, since the aPort param in the signature
-    // takes care only of the input port, the output port msg queues aren't cleared.
-    // As a result ClearMsgQueues need to be called explicity on all the ports.
-    //The oPlayAfterASeek check is necessary since the clearing of msg queues has to be carried out only during repositioning,
-    // not otherwise
-    if (oPlayAfterASeek)
-    {
-        for (i = 0; i < iPortParamsQueue.size(); i++)
-        {
-            PVMFJitterBufferPortParams portParams = iPortParamsQueue[i];
-            portParams.iPort->ClearMsgQueues();
-        }
-    }
-    for (i = 0; i < iPortParamsQueue.size(); i++)
-    {
-        PVMFJitterBufferPortParams portParams = iPortParamsQueue[i];
-
-        if (portParams.iPort == aPort)
-        {
-            if (portParams.tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-            {
-                if (portParams.iJitterBuffer != NULL)
-                {
-                    PVMFRTPInfoParams rtpInfoParams;
-                    rtpInfoParams.seqNumBaseSet = aSeqNumBasePresent;
-                    rtpInfoParams.seqNum = aSeqNumBase;
-                    rtpInfoParams.rtpTimeBaseSet = aRTPTimeBasePresent;
-                    rtpInfoParams.rtpTime = aRTPTimeBase;
-                    rtpInfoParams.nptTimeBaseSet = aNPTTimeBasePresent;
-                    rtpInfoParams.nptTimeInMS = aNPTInMS;
-                    rtpInfoParams.rtpTimeScale = portParams.timeScale;
-                    portParams.iJitterBuffer->setRTPInfoParams(rtpInfoParams, oPlayAfterASeek);
-                    /* In case this is after a reposition purge the jitter buffer */
-                    if (oPlayAfterASeek)
-                    {
-                        uint32 timebase32 = 0;
-                        uint32 clientClock32 = 0;
-                        bool overflowFlag = false;
-                        if (iClientPlayBackClock != NULL)
-                            iClientPlayBackClock->GetCurrentTime32(clientClock32, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
-#if (PVLOGGER_INST_LEVEL > PVLOGMSG_INST_LLDBG)
-                        uint32 serverClock32 = 0;
-                        iEstimatedServerClock->GetCurrentTime32(serverClock32, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
-                        PVMF_JBNODE_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::setPortRTPParams - Purging Upto SeqNum =%d", aSeqNumBase));
-                        PVMF_JBNODE_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::setPortRTPParams - Before Purge - EstServClock=%d",
-                                                     serverClock32));
-                        PVMF_JBNODE_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::setPortRTPParams - Before Purge - ClientClock=%d",
-                                                     clientClock32));
-#endif
-                        portParams.iJitterBuffer->PurgeElementsWithSeqNumsLessThan(aSeqNumBase,
-                                clientClock32);
-#if (PVLOGGER_INST_LEVEL > PVLOGMSG_INST_LLDBG)
-                        timebase32 = 0;
-                        serverClock32 = 0;
-                        iEstimatedServerClock->GetCurrentTime32(serverClock32, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
-                        PVMF_JBNODE_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::setPortRTPParams - After Purge - EstServClock=%d",
-                                                     serverClock32));
-                        PVMF_JBNODE_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::setPortRTPParams - After Purge - ClientClock=%d",
-                                                     clientClock32));
-#endif
-                        /*
-                         * Since we flushed the jitter buffer, set it to ready state,
-                         * reset the delay flag
-                         */
-                        oDelayEstablished = false;
-                        iJitterBufferState = PVMF_JITTER_BUFFER_READY;
-                        iPlayingAfterSeek = true;
-                    }
-                }
-                return true;
-            }
-        }
-    }
-    return false;
-}
-
-bool PVMFJitterBufferNode::setPortRTCPParams(PVMFPortInterface* aPort,
-        int aNumSenders,
-        uint32 aRR,
-        uint32 aRS)
-{
-    uint32 i;
-    for (i = 0; i < iPortParamsQueue.size(); i++)
-    {
-        if (iPortParamsQueue[i].iPort == aPort)
-        {
-            OSCL_ASSERT(iPortParamsQueue[i].tag == PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK);
-
-            iPortParamsQueue[i].RR = aRR;
-            iPortParamsQueue[i].RS = aRS;
-            iPortParamsQueue[i].numSenders = aNumSenders;
-            iPortParamsQueue[i].RtcpBwConfigured = true;
-            return true;
-        }
-    }
-    return false;
-}
-/* computes the max next ts of all tracks */
-PVMFTimestamp PVMFJitterBufferNode::getActualMediaDataTSAfterSeek()
-{
-    PVMFTimestamp mediaTS = 0;
-    uint32 in_wrap_count = 0;
-    uint32 i;
-
-    for (i = 0; i < iPortParamsQueue.size(); i++)
-    {
-        PVMFJitterBufferPortParams portParams = iPortParamsQueue[i];
-
-        if (portParams.tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-        {
-            if (portParams.iJitterBuffer != NULL)
-            {
-                PVMFTimestamp ts =
-                    portParams.iJitterBuffer->peekNextElementTimeStamp();
-                /*
-                 * Convert Time stamp to milliseconds
-                 */
-                portParams.mediaClockConverter.set_clock(ts, in_wrap_count);
-                PVMFTimestamp converted_ts =
-                    portParams.mediaClockConverter.get_converted_ts(1000);
-                if (converted_ts > mediaTS)
-                {
-                    mediaTS = converted_ts;
-                }
-            }
-        }
-    }
-    for (i = 0; i < iPortParamsQueue.size(); i++)
-    {
-        PVMFJitterBufferPortParams portParams = iPortParamsQueue[i];
-
-        if (portParams.tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-        {
-            if (portParams.eTransportType != PVMF_JITTER_BUFFER_PORT_TRANSPORT_TYPE_ASF)
-            {
-                if (portParams.iJitterBuffer != NULL)
-                {
-                    portParams.iJitterBuffer->SetAdjustedTSInMS(mediaTS);
-                }
-            }
-        }
-    }
-    return mediaTS;
-}
-
-PVMFStatus
-PVMFJitterBufferNode::setServerInfo(PVMFJitterBufferFireWallPacketInfo& aServerInfo)
-{
-    if (iDisableFireWallPackets == false)
-    {
-        iFireWallPacketInfo = aServerInfo;
-        if (iFireWallPacketInfo.iFormat == PVMF_JB_FW_PKT_FORMAT_RTP)
-        {
-            PVMF_JBNODE_LOG_FW((0, "PVMFJitterBufferNode::setServerInfo: Fw Pkt Exchange Start - PVMF_JB_FW_PKT_FORMAT_RTP"));
-        }
-        else
-        {
-            PVMF_JBNODE_LOG_FW((0, "PVMFJitterBufferNode::setServerInfo: Fw Pkt Exchange Start - PVMF_JB_FW_PKT_FORMAT_PV"));
-        }
-        RequestEventCallBack(JB_NOTIFY_SEND_FIREWALL_PACKET);
-        PVMFStatus status = SendFireWallPackets();
-        if (status != PVMFSuccess)
-        {
-            CommandComplete(iCurrentCommand,
-                            iCurrentCommand.front(),
-                            status);
-        }
-    }
-    else
-    {
-        PVMF_JBNODE_LOG_FW((0, "PVMFJitterBufferNode::setServerInfo: FW Pkts Disabled"));
-        if (iCurrentCommand.size() > 0)
-        {
-            if (iCurrentCommand.front().iCmd == PVMF_JITTER_BUFFER_NODE_PREPARE)
-            {
-                /* No firewall packet exchange - Complete Prepare */
-                CompletePrepare();
-            }
-        }
-    }
-    return PVMFSuccess;
-}
-
-bool
-PVMFJitterBufferNode::getPortContainer(PVMFPortInterface* aPort,
-                                       PVMFJitterBufferPortParams*& aPortParamsPtr)
-{
-    Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-
-    for (it = iPortParamsQueue.begin();
-            it != iPortParamsQueue.end();
-            it++)
-    {
-        if (it->iPort == aPort)
-        {
-            aPortParamsPtr = it;
-            return true;
-        }
-    }
-    return false;
-}
-
 PVMFJitterBuffer*
 PVMFJitterBufferNode::findJitterBuffer(PVMFPortInterface* aPort)
 {
@@ -4372,1876 +3670,49 @@
     for (ii = 0; ii < iPortParamsQueue.size(); ii++)
     {
 
-        if (iPortParamsQueue[ii].iPort == aPort)
+        if (&iPortParamsQueue[ii]->irPort == aPort)
         {
-            return (iPortParamsQueue[ii].iJitterBuffer);
+            return (iPortParamsQueue[ii]->ipJitterBuffer);
 
         }
     }
     return NULL;
 }
 
-PVMFPortInterface*
-PVMFJitterBufferNode::findPortForJitterBuffer(PVMFJitterBuffer* aJitterBuffer)
-{
-    uint32 ii;
-    for (ii = 0; ii < iPortParamsQueue.size(); ii++)
-    {
-        if (iPortParamsQueue[ii].iJitterBuffer == aJitterBuffer)
-        {
-            return (iPortParamsQueue[ii].iPort);
-        }
-    }
-    return NULL;
-}
-
-PVMFPortInterface*
-PVMFJitterBufferNode::getPortCounterpart(PVMFPortInterface* aPort)
-{
-    uint32 ii;
-    /*
-     * Get port params
-     */
-    for (ii = 0; ii < iPortParamsQueue.size(); ii++)
-    {
-        if (iPortParamsQueue[ii].iPort == aPort)
-        {
-            break;
-        }
-    }
-    if (ii >= iPortParamsQueue.size())
-    {
-        return NULL;
-    }
-
-    PVMFJitterBufferNodePortTag tag = iPortParamsQueue[ii].tag;
-    int32 id = iPortParamsQueue[ii].id;
-    uint32 jj;
-
-    /* Even numbered ports are input ports */
-    if (tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-    {
-        for (jj = 0; jj < iPortParamsQueue.size(); jj++)
-        {
-            if ((id + 1) == iPortParamsQueue[jj].id)
-            {
-                return (iPortParamsQueue[jj].iPort);
-
-
-            }
-        }
-    }
-    /* odd numbered ports are output ports */
-    else if (tag == PVMF_JITTER_BUFFER_PORT_TYPE_OUTPUT)
-    {
-        for (jj = 0; jj < iPortParamsQueue.size(); jj++)
-        {
-            if ((id - 1) == iPortParamsQueue[jj].id)
-            {
-                return (iPortParamsQueue[jj].iPort);
-
-
-            }
-        }
-    }
-    return NULL;
-}
-
-bool
-PVMFJitterBufferNode::CheckForSpaceInJitterBuffer(PVMFPortInterface* aPort)
-{
-    PVMFJitterBufferPort* jbPort = OSCL_STATIC_CAST(PVMFJitterBufferPort*, aPort);
-    PVMFJitterBuffer* jitterBuffer = jbPort->iPortParams->iJitterBuffer;
-    if (jitterBuffer == NULL)
-    {
-        PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::CheckForSpaceInJitterBuffer: findJitterBuffer failed"));
-        PVUuid eventuuid = PVMFJitterBufferNodeEventTypeUUID;
-        int32 errcode = PVMFJitterBufferNodeUnableToRegisterIncomingPacket;
-        ReportErrorEvent(PVMFErrArgument, (OsclAny*)(aPort), &eventuuid, &errcode);
-        return false;
-    }
-    return (jitterBuffer->CheckForMemoryAvailability());
-}
-
-void
-PVMFJitterBufferNode::JitterBufferFreeSpaceAvailable(OsclAny* aContext)
-{
-    PVMFPortInterface* port = OSCL_STATIC_CAST(PVMFPortInterface*, aContext);
-    PVMFJitterBufferPort* jbPort = OSCL_STATIC_CAST(PVMFJitterBufferPort*, port);
-    PVMFJitterBufferPortParams* portParams = jbPort->iPortParams;
-    if (portParams)
-        portParams->oProcessIncomingMessages = true;
-    if (IsAdded())
-    {
-        RunIfNotReady();
-    }
-}
-
-void
-PVMFJitterBufferNode::EstimatedServerClockUpdated(OsclAny* aContext)
-{
-    /*
-     * We start monitoring estimated server clock updates once
-     * the session duration expires AND the estimated server clock
-     * does not match up the session end time
-     */
-    OSCL_UNUSED_ARG(aContext);
-    iSessionDurationTimer->EstimatedServerClockUpdated();
-}
-
-bool PVMFJitterBufferNode::RegisterDataPacket(PVMFPortInterface* aPort,
-        PVMFJitterBuffer* aJitterBuffer,
-        PVMFSharedMediaDataPtr& aDataPacket)
-{
-    PVUuid eventuuid = PVMFJitterBufferNodeEventTypeUUID;
-    PVMFJitterBufferAddPktStatus status = aJitterBuffer->addPacket(aDataPacket);
-    if (status == PVMF_JITTER_BUFFER_ADD_PKT_ERROR)
-    {
-        /* Jitter buffer full */
-        PVMF_JBNODE_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferNode::RegisterDataPacket: jitterBuffer->addPacket failed"));
-        PVMF_JBNODE_LOGERROR((0, "0x%x PVMFJitterBufferNode::RegisterDataPacket: jitterBuffer->addPacket failed"));
-        int32 infocode = PVMFJitterBufferNodeJitterBufferFull;
-        ReportInfoEvent(PVMFInfoOverflow, (OsclAny*)(aPort), &eventuuid, &infocode);
-    }
-    else if (status == PVMF_JITTER_BUFFER_ADD_PKT_UNEXPECTED_DATA)
-    {
-        PVMF_JBNODE_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferNode::RegisterDataPacket: Unexpected Data Error"));
-        PVMF_JBNODE_LOGERROR((0, "0x%x PVMFJitterBufferNode::RegisterDataPacket: Unexpected Data Error"));
-        int32 infocode = PVMFJitterBufferNodeUnableToRegisterIncomingPacket;
-        ReportInfoEvent(PVMFInfoUnexpectedData, (OsclAny*)(aPort), &eventuuid, &infocode);
-    }
-    else if (status == PVMF_JITTER_BUFFER_ADD_PKT_EOS_REACHED)
-    {
-        int32 infocode = PVMFJitterBufferNodeTrackEOSReached;
-        ReportInfoEvent(PVMFInfoEndOfData, (OsclAny*)(aPort), &eventuuid, &infocode);
-        PVMF_JBNODE_LOGINFO((0, "0x%x PVMFJitterBufferNode::RegisterDataPacket - EOS Reached", this));
-        PVMF_JBNODE_LOGDATATRAFFIC_IN((0, "PVMFJitterBufferNode::RegisterDataPacket - EOS Reached"));
-    }
-    else
-    {
-        /* if we are not rebuffering check for flow control */
-        if (aPort != NULL)
-        {
-            PVMFStatus status;
-            bool highWaterMarkReached = false;
-            status = CheckForHighWaterMark(aPort, highWaterMarkReached);
-            if ((status == PVMFSuccess) && (highWaterMarkReached == true))
-            {
-                PVMF_JBNODE_LOGINFO((0, "0x%x JB::RegisterDataPacket - HWM oDelayEstablished %d oAutoPause %d iPlayStopTimeAvailable %d", this, oDelayEstablished, oAutoPause, iPlayStopTimeAvailable));
-                /*
-                 * Check for jitter buffer occupancy. If the jitter buffer is in
-                 * the danger of overflowing start pushing data out. If the nodes
-                 * downstream cannot process the data then it would just back up
-                 * in the port queues and flow control would kick in. But on the
-                 * other hand if they can process it then why not send it.
-                 */
-                if (oDelayEstablished == false)
-                {
-                    /* Coming out of rebuffering */
-                    UpdateRebufferingStats(PVMFInfoDataReady);
-                    ReportInfoEvent(PVMFInfoDataReady);
-                    ReportInfoEvent(PVMFInfoBufferingComplete);
-                    CancelEventCallBack(JB_NOTIFY_REPORT_BUFFERING_STATUS);
-#if (PVLOGGER_INST_LEVEL > PVLOGMSG_INST_LLDBG)
-                    uint32 timebase32 = 0;
-                    uint32 clientClock32 = 0;
-                    uint32 serverClock32 = 0;
-                    bool overflowFlag = false;
-                    if (iClientPlayBackClock != NULL)
-                        iClientPlayBackClock->GetCurrentTime32(clientClock32, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
-                    iEstimatedServerClock->GetCurrentTime32(serverClock32, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
-                    PVMF_JBNODE_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::RegisterDataPacket - Time Delay Established - EstServClock=%d",
-                                                 serverClock32));
-                    PVMF_JBNODE_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::RegisterDataPacket - Time Delay Established - ClientClock=%d",
-                                                 clientClock32));
-#endif
-                }
-                iJitterDelayPercent = 100;
-                oDelayEstablished = true;
-                /* Send just once */
-                if ((oAutoPause == false) && (iPlayStopTimeAvailable == true))
-                {
-                    oAutoPause = true;
-                    ReportInfoEvent(PVMFJitterBufferNodeJitterBufferHighWaterMarkReached);
-                    PVMF_JBNODE_LOGDATATRAFFIC_FLOWCTRL_E((0, "PVMFJitterBufferNode::RegisterDataPacket: Sending Auto Pause"));
-                    RequestMemCallBackForAutoResume(aPort);
-                }
-            }
-        }
-    }
-    return true;
-}
-
-bool
-PVMFJitterBufferNode::IsJitterBufferReady(PVMFJitterBufferPortParams* aPortParams, uint32& aClockDiff)
-{
-    aClockDiff = iJitterBufferDurationInMilliSeconds;
-    PVMFJitterBuffer* aJitterBuffer = aPortParams->iJitterBuffer;
-    if (iJitterBufferState == PVMF_JITTER_BUFFER_IN_TRANSITION)
-    {
-        PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Jitter Buffer In Transition - Preparing for Seek"));
-        oDelayEstablished = false;
-        iJitterDelayPercent = 0;
-        return oDelayEstablished;
-    }
-
-    // check if this is the first time this function is called after seeking
-    if (iPlayingAfterSeek)
-    {
-        iPlayingAfterSeek = false;
-        if (aPortParams->eTransportType != PVMF_JITTER_BUFFER_PORT_TRANSPORT_TYPE_ASF)
-        {
-            // This call will normalize the timestamps in the jitterbuffers
-            PVMFTimestamp ts = getActualMediaDataTSAfterSeek();
-            ts = 0;
-            // Adjust the RTP timestamps in the jitterbuffers
-            for (uint i = 0; i < iPortParamsQueue.size(); i++)
-            {
-                PVMFJitterBufferPortParams portParams = iPortParamsQueue[i];
-                if (portParams.tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-                {
-                    if (portParams.iJitterBuffer != NULL)
-                    {
-                        portParams.iJitterBuffer->AdjustRTPTimeStamp();
-                    }
-                }
-            }
-        }
-    }
-
-    uint32 timebase32 = 0;
-    uint32 estServerClock = 0;
-    uint32 clientClock = 0;
-    bool overflowFlag = false;
-    uint32 minPercentOccupancy = 100;
-
-    /*
-     * Get current estimated server clock in milliseconds
-     */
-    iEstimatedServerClock->GetCurrentTime32(estServerClock, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
-
-    /*
-     * Get current client playback clock in milliseconds
-     */
-    if (iClientPlayBackClock != NULL)
-        iClientPlayBackClock->GetCurrentTime32(clientClock, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
-
-    PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Check - EstServClock=%d", estServerClock));
-    PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Check - ClientClock=%d", clientClock));
-
-    if (oSessionDurationExpired)
-    {
-        /*
-         * No check needed - We are past the clip time, just play out the last
-         * bit in the jitter buffer
-         */
-        PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Session Duration Expired"));
-        if (oDelayEstablished == false)
-        {
-            /*
-             * Coming out of rebuffering in case we had gone into
-             * rebuffering just before
-             */
-            UpdateRebufferingStats(PVMFInfoDataReady);
-            iJitterDelayPercent = 100;
-            ReportInfoEvent(PVMFInfoBufferingStatus);
-            ReportInfoEvent(PVMFInfoDataReady);
-            ReportInfoEvent(PVMFInfoBufferingComplete);
-            CancelEventCallBack(JB_NOTIFY_REPORT_BUFFERING_STATUS);
-            PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Cancelling Jitter Buffer Duration Timer"));
-            CancelEventCallBack(JB_BUFFERING_DURATION_COMPLETE);
-        }
-        oDelayEstablished = true;
-    }
-    else
-    {
-        if (estServerClock < clientClock)
-        {
-            /* Could happen during repositioning */
-            if (oDelayEstablished == true)
-            {
-                aClockDiff = 0;
-                oDelayEstablished = false;
-                iJitterDelayPercent = 0;
-                /* Start timer */
-                RequestEventCallBack(JB_NOTIFY_REPORT_BUFFERING_STATUS);
-
-                PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Starting Jitter Buffer Duration Timer"));
-                RequestEventCallBack(JB_BUFFERING_DURATION_COMPLETE);
-
-                if (oStartPending == false)
-                {
-                    /* Cancel session duration timer while rebuffering */
-                    PVMF_JBNODE_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::IsJitterBufferReady - Cancelling Session Duration Timer"));
-                    iSessionDurationTimer->Cancel();
-
-                    UpdateRebufferingStats(PVMFInfoUnderflow);
-                    ReportInfoEvent(PVMFInfoUnderflow);
-                    ReportInfoEvent(PVMFInfoBufferingStart);
-                    ReportInfoEvent(PVMFInfoBufferingStatus);
-                }
-                PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Check - EstServClock=%d",
-                                      Oscl_Int64_Utils::get_uint64_lower32(estServerClock)));
-                PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Check - ClientClock=%d",
-                                      Oscl_Int64_Utils::get_uint64_lower32(clientClock)));
-                PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Estimated Serv Clock Less Than ClientClock!!!!"));
-                PVMF_JBNODE_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Check - EstServClock=%d",
-                                             Oscl_Int64_Utils::get_uint64_lower32(estServerClock)));
-                PVMF_JBNODE_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Check - ClientClock=%d",
-                                             Oscl_Int64_Utils::get_uint64_lower32(clientClock)));
-                PVMF_JBNODE_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::IsJitterBufferReady - Estimated Serv Clock Less Than ClientClock!!!!"));
-            }
-            return oDelayEstablished;
-        }
-
-
-        uint32 diff32ms = estServerClock - clientClock;
-        aClockDiff = diff32ms;
-            if (diff32ms >= iJitterBufferDurationInMilliSeconds)
-            {
-                for (uint32 i = 0; i < iPortParamsQueue.size(); i++)
-                {
-                    PVMFJitterBufferPortParams portParams = iPortParamsQueue[i];
-
-                    if (portParams.iBufferAlloc != NULL)
-                    {
-                        uint32 largestContiguousFreeBlockSize = portParams.iBufferAlloc->getLargestContiguousFreeBlockSize();
-                        uint32 jbSize = portParams.iBufferAlloc->getBufferSize();
-                        if ((largestContiguousFreeBlockSize*100 / jbSize) < minPercentOccupancy)
-                        {
-                            minPercentOccupancy = (uint32)(largestContiguousFreeBlockSize * 100 / jbSize);
-                        }
-                    }
-                }
-
-                if ((prevMinPercentOccupancy < MIN_PERCENT_OCCUPANCY_THRESHOLD) && (minPercentOccupancy < MIN_PERCENT_OCCUPANCY_THRESHOLD))
-                {
-                    consecutiveLowBufferCount++;
-                }
-                else
-                {
-                    consecutiveLowBufferCount = 0;
-                }
-                prevMinPercentOccupancy = minPercentOccupancy;
-                PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - minPercentOccupancy=%d, consecutiveLowBufferCount=%d",
-                                      minPercentOccupancy,
-                                      consecutiveLowBufferCount));
-
-
-                if ((diff32ms > JITTER_BUFFER_DURATION_MULTIPLIER_THRESHOLD*iJitterBufferDurationInMilliSeconds) && !iOverflowFlag && (consecutiveLowBufferCount > CONSECUTIVE_LOW_BUFFER_COUNT_THRESHOLD))
-                {
-                    iOverflowFlag = true;
-                    ReportInfoEvent(PVMFInfoSourceOverflow);
-                    PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady reporting PVMFInfoSourceOverflow"));
-                }
-                if (oDelayEstablished == false && aJitterBuffer->CheckNumElements() == true)
-                {
-                    PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Cancelling Jitter Buffer Duration Timer"));
-                    oDelayEstablished = true;
-                    CancelEventCallBack(JB_BUFFERING_DURATION_COMPLETE);
-                    /* Coming out of rebuffering */
-                    UpdateRebufferingStats(PVMFInfoDataReady);
-                    iJitterDelayPercent = 100;
-                    ReportInfoEvent(PVMFInfoBufferingStatus);
-                    ReportInfoEvent(PVMFInfoDataReady);
-                    ReportInfoEvent(PVMFInfoBufferingComplete);
-                    CancelEventCallBack(JB_NOTIFY_REPORT_BUFFERING_STATUS);
-                    PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Established - EstServClock=%d", estServerClock));
-                    PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Established - ClientClock=%d",  clientClock));
-                    PVMF_JBNODE_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Established - EstServClock=%d",
-                                                 estServerClock));
-                    PVMF_JBNODE_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Established - ClientClock=%d",
-                                                 clientClock));
-                    if (iUseSessionDurationTimerForEOS == true)
-                    {
-                        ComputeCurrentSessionDurationMonitoringInterval();
-                        iSessionDurationTimer->Start();
-                    }
-                    else
-                    {
-                        iSessionDurationTimer->Stop();
-                    }
-                }
-                else if (oDelayEstablished == false && aJitterBuffer->CheckNumElements() == false)
-                {
-                    iJitterDelayPercent = 0;
-                }
-                else
-                    iJitterDelayPercent = 100;
-            }
-            else
-            {
-                /*
-                 * Update the buffering percent - to be used while sending buffering
-                 * status events, in case we go into rebuffering or if we are in buffering
-                 * state.
-                 */
-                iJitterDelayPercent = ((diff32ms * 100) / iJitterBufferDurationInMilliSeconds);
-                if (oDelayEstablished == true)
-                {
-                    if (diff32ms <= iJitterBufferUnderFlowThresholdInMilliSeconds)
-                    {
-                        /* Implies that we are going into rebuffering */
-                        if (oSessionDurationExpired == false)
-                        {
-                            oDelayEstablished = false;
-                            /* Start timer */
-                            RequestEventCallBack(JB_NOTIFY_REPORT_BUFFERING_STATUS);
-
-                            PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Starting Jitter Buffer Duration Timer"));
-                            RequestEventCallBack(JB_BUFFERING_DURATION_COMPLETE);
-
-                            /* Supress underflow if start pending */
-                            if (oStartPending == false)
-                            {
-                                /* Cancel session duration timer while rebuffering */
-                                PVMF_JBNODE_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::IsJitterBufferReady - Going into Rebuffering - Cancelling Session Duration Timer"));
-                                iSessionDurationTimer->Cancel();
-
-                                UpdateRebufferingStats(PVMFInfoUnderflow);
-                                ReportInfoEvent(PVMFInfoUnderflow);
-                                ReportInfoEvent(PVMFInfoBufferingStart);
-                                ReportInfoEvent(PVMFInfoBufferingStatus);
-
-                                PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Violated - EstServClock=%d", estServerClock));
-                                PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Violated - ClientClock=%d",  clientClock));
-                                PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady: Jitter Delay not met"));
-                                PVMF_JBNODE_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Violated - EstServClock=%d",
-                                                             estServerClock));
-                                PVMF_JBNODE_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::IsJitterBufferReady - Time Delay Violated - ClientClock=%d",
-                                                             clientClock));
-
-                                if (iClientPlayBackClock != NULL)
-                                    iClientPlayBackClock->Pause();
-                            }
-                        }
-                        /* we are past the end of the clip, no more rebuffering */
-                    }
-                }
-                if (oDelayEstablished == false && aJitterBuffer->CheckNumElements() == false)
-                {
-                    iJitterDelayPercent = 0;
-                }
-                PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady: Delay Percent = %d", iJitterDelayPercent));
-            }
-        /* if we are not rebuffering check for flow control */
-        PVMFPortInterface* aPort = findPortForJitterBuffer(aJitterBuffer);
-        if (aPort != NULL)
-        {
-            /* Check for flow control if we are not rebuffering */
-            PVMFStatus status;
-            bool lowWaterMarkReached = false;
-            status = CheckForLowWaterMark(aPort, lowWaterMarkReached);
-            if ((status == PVMFSuccess) && (lowWaterMarkReached == true))
-            {
-                {
-                    /*
-                     * Check for jitter buffer occupancy. If the jitter buffer is in
-                     * the danger of underflowing start send an event to resume.
-                     */
-                    /* Send just once */
-                    if (oAutoPause == true)
-                    {
-                        oAutoPause = false;
-                        Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-                        for (it = iPortParamsQueue.begin();
-                                it != iPortParamsQueue.end();
-                                it++)
-                        {
-                            if (it->oMonitorForRemoteActivity == false)
-                            {
-                                it->oMonitorForRemoteActivity = true;
-                                CancelEventCallBack(JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED);
-                                RequestEventCallBack(JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED);
-                            }
-                        }
-                        ReportInfoEvent(PVMFJitterBufferNodeJitterBufferLowWaterMarkReached);
-                        PVMF_JBNODE_LOGDATATRAFFIC_FLOWCTRL_E((0, "PVMFJitterBufferNode::IsJitterBufferReady: Sending Auto Resume"));
-                    }
-                }
-            }
-        }
-    }
-    /* send start complete, if start pending */
-    if (oDelayEstablished)
-    {
-        if (oStartPending)
-        {
-            PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferNode::IsJitterBufferReady - Sending Start Complete"));
-            CompleteStart();
-        }
-    }
-    return (oDelayEstablished);
-}
-
-PVMFStatus
-PVMFJitterBufferNode::SendData(PVMFPortInterface* aPort)
-{
-
-    PVMFJitterBufferPort* jbPort =
-        OSCL_STATIC_CAST(PVMFJitterBufferPort*, aPort);
-    PVMFPortInterface* outputPort = jbPort->iPortCounterpart;
-    PVMFJitterBufferPortParams* portParamsPtr = jbPort->iPortParams;
-    PVMFJitterBufferPortParams* outPortParamsPtr = jbPort->iCounterpartPortParams;
-    PVMFJitterBuffer* jitterBuffer = portParamsPtr->iJitterBuffer;
-
-    if (jitterBuffer == NULL)
-    {
-        return PVMFFailure;
-    }
-
-    uint32 clockDiff = 0;
-    bool oJitterBufferReady = IsJitterBufferReady(portParamsPtr, clockDiff);
-    if (oJitterBufferReady == false)
-    {
-        /* Jitter Buffer not ready - dont send data */
-        return PVMFErrNotReady;
-    }
-    if (oStopOutputPorts == true)
-    {
-        /*
-         * output ports paused
-         */
-        return PVMFSuccess;
-    }
-
-    while (oJitterBufferReady == true)
-    {
-        if (outputPort->IsOutgoingQueueBusy())
-        {
-            /* Cant send */
-            outPortParamsPtr->oProcessOutgoingMessages = false;
-            PVMF_JBNODE_LOGDATATRAFFIC((0, "PVMFJitterBufferNode::SendData: Output Queue Busy %x outport - Mime=%s", outputPort, outPortParamsPtr->iMimeType.get_cstr()));
-            return PVMFErrBusy;
-        }
-
-        PVMFSharedMediaDataPtr mediaOut;
-        PVMFSharedMediaMsgPtr mediaOutMsg;
-        /* Check if there are any pending media commands */
-        if (jitterBuffer->CheckForPendingCommands(mediaOutMsg) == true)
-        {
-            PVMFStatus status = outputPort->QueueOutgoingMsg(mediaOutMsg);
-#if (PVLOGGER_INST_LEVEL > PVLOGMSG_INST_LLDBG)
-            uint32 timebase32 = 0;
-            uint32 clientClock32 = 0;
-            bool overflowFlag = false;
-
-            if (iClientPlayBackClock != NULL)
-                iClientPlayBackClock->GetCurrentTime32(clientClock32, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
-            PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::SendData: Media Command Sent, Mime=%s, CmdId=%d, TS=%d, SEQNUM= %d, ClientClock= %2d",
-                                            portParamsPtr->iMimeType.get_cstr(), mediaOutMsg->getFormatID(), mediaOutMsg->getTimestamp(), mediaOutMsg->getSeqNum(), clientClock32));
-#endif
-            if (status != PVMFSuccess)
-            {
-                PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::SendData: Media Command Send Error"));
-                return status;
-            }
-        }
-
-        PVMFJitterBufferStats stats = jitterBuffer->getJitterBufferStats();
-
-        if (stats.currentOccupancy > 0)
-        {
-            portParamsPtr->oJitterBufferEmpty = false;
-            PVMFTimestamp ts;
-            uint32 converted_ts;
-            uint32 in_wrap_count = 0;
-            /*
-            * Check and see if the current read position is pointing
-            * to a hole in the jitter buffer due to packet loss
-            */
-            if (jitterBuffer->CheckCurrentReadPosition() == false)
-            {
-                /*
-                 * Peek Next timestamp
-                 */
-                ts = jitterBuffer->peekNextElementTimeStamp();
-
-                /*
-                 * Convert Time stamp to milliseconds
-                 */
-                portParamsPtr->mediaClockConverter.set_clock(ts, in_wrap_count);
-                converted_ts =
-                    portParamsPtr->mediaClockConverter.get_converted_ts(1000);
-                /*
-                 * Get current client playback clock in milliseconds
-                 */
-                uint32 clientClock;
-                bool overflowFlag = false;
-                if (iClientPlayBackClock != NULL)
-                    iClientPlayBackClock->GetCurrentTime32(clientClock, overflowFlag, PVMF_MEDIA_CLOCK_MSEC);
-
-
-                uint32 estimatedServClock = 0;
-                overflowFlag = false;
-                iEstimatedServerClock->GetCurrentTime32(estimatedServClock, overflowFlag, PVMF_MEDIA_CLOCK_MSEC);
-                uint32 delta = 0;
-                if (!oSessionDurationExpired && (PVTimeComparisonUtils::IsEarlier(estimatedServClock, converted_ts + iEstimatedServerKeepAheadInMilliSeconds, delta) && (delta > 0)))
-                {
-                    //hold the available data packet, and wait for hole in the JB due to OOO packet to be filled
-                    if (!IsCallbackPending(JB_NOTIFY_WAIT_FOR_OOO_PACKET_COMPLETE, portParamsPtr))
-                    {
-                        PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::SendData Detected Hole in JB PeekTs[%d] clientClock[%d] , ClientClockState [%d], estimatedServClock[%d], EstimatedServClockState[%d], oSessionDurationExpired[%d] MimeStr[%s]", converted_ts, clientClock, iClientPlayBackClock->GetState(), estimatedServClock, iEstimatedServerClock->GetState(), oSessionDurationExpired, portParamsPtr->iMimeType.get_cstr()));
-                        RequestEventCallBack(JB_NOTIFY_WAIT_FOR_OOO_PACKET_COMPLETE , delta, portParamsPtr);
-                    }
-                    return PVMFErrNotReady;
-                }
-            }
-
-            //Cancel pending sequencing OOO packet callback (if any)
-            if (IsCallbackPending(JB_NOTIFY_WAIT_FOR_OOO_PACKET_COMPLETE, portParamsPtr))
-            {
-                CancelEventCallBack(JB_NOTIFY_WAIT_FOR_OOO_PACKET_COMPLETE, portParamsPtr);
-            }
-
-            mediaOut = jitterBuffer->retrievePacket();
-
-            PVMFStatus status = PVMFSuccess;
-            if (mediaOut.GetRep() != NULL)
-            {
-                /* set time stamp in milliseconds always */
-                ts = mediaOut->getTimestamp();
-                portParamsPtr->mediaClockConverter.set_clock(ts, in_wrap_count);
-                converted_ts =
-                    portParamsPtr->mediaClockConverter.get_converted_ts(1000);
-                mediaOut->setTimestamp(converted_ts);
-                mediaOut->setFormatSpecificInfo(portParamsPtr->iTrackConfig);
-                convertToPVMFMediaMsg(mediaOutMsg, mediaOut);
-                status = outputPort->QueueOutgoingMsg(mediaOutMsg);
-
-#if (PVLOGGER_INST_LEVEL > PVLOGMSG_INST_LLDBG)
-                uint32 timebase32 = 0;
-                uint32 clientClock32 = 0;
-                uint32 serverClock32 = 0;
-                bool overflowFlag = false;
-                if (iClientPlayBackClock != NULL)
-                    iClientPlayBackClock->GetCurrentTime32(clientClock32, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
-                iEstimatedServerClock->GetCurrentTime32(serverClock32, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
-                outPortParamsPtr->iLastMsgTimeStamp = converted_ts;
-
-                //PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::SendData: EstServClock= %2d", serverClock64));
-                PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::SendData: Mime=%s, SSRC=%d, TS=%d, SEQNUM= %d, ClientClock= %2d",
-                                                portParamsPtr->iMimeType.get_cstr(),
-                                                mediaOutMsg->getStreamID(),
-                                                mediaOutMsg->getTimestamp(),
-                                                mediaOutMsg->getSeqNum(),
-                                                clientClock32));
-
-                PVMF_JBNODE_LOGDATATRAFFIC_FLOWCTRL((0, "PVMFJBNode::SendData:"
-                                                     "MaxSNReg=%d, MaxTSReg=%u, LastSNRet=%d, LastTSRet=%u, NumMsgsInJB=%d, ServClk=%d, PlyClk=%d",
-                                                     stats.maxSeqNumRegistered, stats.maxTimeStampRegistered,
-                                                     stats.lastRetrievedSeqNum, stats.maxTimeStampRetrieved,
-                                                     (stats.maxSeqNumRegistered - stats.lastRetrievedSeqNum),
-                                                     serverClock32,
-                                                     clientClock32));
-#endif
-
-                if (status != PVMFSuccess)
-                {
-                    PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::SendData: Error"));
-                    return (status);
-                }
-            }
-        }
-        else
-        {
-            /*
-             * Jitter buffer empty - We do not go into rebuffering unless
-             * the delay criteria has not been violated. There is no data
-             * to send, but that is alright.
-             */
-            //PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::SendData: Jitter Buffer Empty - Mime=%s", portParamsPtr->iMimeType.get_cstr()));
-            portParamsPtr->oJitterBufferEmpty = true;
-
-            if ((iMonitorReBufferingCallBkPending == false) && (oSessionDurationExpired == false))
-            {
-                RequestEventCallBack(JB_MONITOR_REBUFFERING, (clockDiff - iJitterBufferUnderFlowThresholdInMilliSeconds));
-            }
-
-            if (oAutoPause == false)
-            {
-            }
-
-            /*
-             * jitter buffer empty, send an event to resume in case we had auto paused
-             */
-            bool lowWaterMarkReached = false;
-            PVMFStatus status = CheckForLowWaterMark(aPort, lowWaterMarkReached);
-            if ((status == PVMFSuccess) && (lowWaterMarkReached == true))
-            {
-                ReportInfoEvent(PVMFJitterBufferNodeJitterBufferLowWaterMarkReached);
-                PVMF_JBNODE_LOGDATATRAFFIC_FLOWCTRL_E((0, "PVMFJitterBufferNode::SendData: Sending Auto Resume - Mime=%s", portParamsPtr->iMimeType.get_cstr()));
-            }
-            return PVMFSuccess;
-        }
-        //reevalute jitter
-        oJitterBufferReady = IsJitterBufferReady(portParamsPtr, clockDiff);
-        if (oJitterBufferReady == false)
-        {
-            /* Jitter Buffer not ready - dont send data */
-            return PVMFErrNotReady;
-        }
-    }
-    return PVMFSuccess;
-}
-
-PVMFStatus
-PVMFJitterBufferNode::CheckJitterBufferEmpty(bool& oEmpty)
-{
-    /*
-     * Checks to see if all jitter buffers are empty. If they are
-     * then it would stop scheduling the jitter buffer node.
-     */
-    oEmpty = false;
-    Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-    for (it = iPortParamsQueue.begin();
-            it != iPortParamsQueue.end();
-            it++)
-    {
-        if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-        {
-            if (it->oJitterBufferEmpty == true)
-            {
-                oEmpty = true;
-            }
-        }
-    }
-
-    return PVMFSuccess;
-}
-
-PVMFStatus PVMFJitterBufferNode::CheckForEOS()
-{
-    Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-    PVMFStatus status = PVMFSuccess;
-    for (it = iPortParamsQueue.begin();
-            it != iPortParamsQueue.end();
-            it++)
-    {
-        if ((PVMF_JITTER_BUFFER_PORT_TYPE_INPUT == it->tag) && (it->oJitterBufferEmpty) && (!it->oEOSReached) && oSessionDurationExpired)
-        {
-            PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::CheckForEOS: Mime is %s" , it->iMimeType.get_cstr()));
-            status = GenerateAndSendEOSCommand(it->iPort);
-        }
-        else if ((PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK == it->tag) && (it->iRTCPStats.oRTCPByeRecvd) && (!oSessionDurationExpired))
-        {
-            //look for corresponding input port for the feedback port on which RTCP bye is received.
-            PVMFJitterBufferPortParams* inputPortParam = NULL;
-            LocateInputPortForFeedBackPort(it, inputPortParam);
-            if (inputPortParam->oJitterBufferEmpty && (!inputPortParam->oEOSReached))
-            {
-                PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::CheckForEOS: Mime is %s" , it->iMimeType.get_cstr()));
-                GenerateAndSendEOSCommand(inputPortParam->iPort);
-            }
-        }
-    }
-
-    //Check if EOS is send on all the input ports...
-    bool bEOSSendOnAllInputPorts = true;
-    for (it = iPortParamsQueue.begin();
-            it != iPortParamsQueue.end();
-            it++)
-    {
-        if ((PVMF_JITTER_BUFFER_PORT_TYPE_INPUT == it->tag) && (!it->oEOSReached))
-            bEOSSendOnAllInputPorts = false;
-    }
-
-    if (bEOSSendOnAllInputPorts)
-    {
-        oStopOutputPorts = true;
-        oSessionDurationExpired  = true;
-    }
-
-    return status;
-}
-
-
-bool
-PVMFJitterBufferNode::setPlayRange(int32 aStartTimeInMS,
-                                   int32 aStopTimeInMS,
-                                   bool oPlayAfterASeek,
-                                   bool aStopTimeAvailable)
-{
-    Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-
-    for (it = iPortParamsQueue.begin();
-            it != iPortParamsQueue.end();
-            it++)
-    {
-        if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-        {
-            it->iJitterBuffer->setPlayRange(aStartTimeInMS, aStopTimeInMS);
-            if (oPlayAfterASeek)
-            {
-                it->iJitterBuffer->SetEOS(false);
-            }
-        }
-        else if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK)
-        {
-            /* Start RTCP Timer */
-            ActivateTimer(it);
-            if (oPlayAfterASeek)
-            {
-                it->iRTCPStats.oRTCPByeRecvd = false;
-            }
-        }
-        if (oPlayAfterASeek)
-        {
-            it->oUpStreamEOSRecvd = false;
-            it->oEOSReached = false;
-        }
-    }
-
-    iPlayStartTimeInMS = aStartTimeInMS;
-    iPlayStopTimeInMS = aStopTimeInMS;
-    iPlayStopTimeAvailable = aStopTimeAvailable;
-    if (iPlayStopTimeAvailable == true)
-    {
-        /* Start Session Duration Timer only if stop duration is set */
-        if ((iUseSessionDurationTimerForEOS == true) && (!oSessionDurationExpired || (oPlayAfterASeek)))
-        {
-            iSessionDurationTimer->Stop();
-            oSessionDurationExpired = false;
-            iSessionDurationTimer->setSessionDurationInMS(((iPlayStopTimeInMS - iPlayStartTimeInMS) + PVMF_EOS_TIMER_GAURD_BAND_IN_MS));
-            ComputeCurrentSessionDurationMonitoringInterval();
-            iSessionDurationTimer->Start();
-        }
-        // Only at Prepare state, this API is called by streaming manager node
-        // We set thinning interval in here
-#if 1
-        //thinning timer value depends on clip duration
-        uint32 duration = iPlayStopTimeInMS - iPlayStartTimeInMS;
-        if (duration < PVMF_JITTER_BUFFER_NODE_THINNING_MIN_DURATION_MS)
-        {
-            iThinningIntervalMS = duration;
-        }
-        else
-        {
-            iThinningIntervalMS = (duration / 100) * PVMF_JITTER_BUFFER_NODE_THINNING_PERCENT;
-        }
-    }
-    else
-    {
-        //in case of live streaming, hard-coded value is set
-        iThinningIntervalMS = PVMF_JITTER_BUFFER_NODE_THINNING_LIVE_INTERVAL_MS;
-    }
-#else
-    }
-    //thinning timer value is hard-corded for any cases
-    iThinningIntervalMS = 15 * 1000;
-#endif
-
-    return true;
-}
-
-void
-PVMFJitterBufferNode::ActivateTimer(PVMFJitterBufferPortParams* pPort)
-{
-    if (pPort->RtcpBwConfigured && (pPort->RR == 0))
-    {
-        // RTCP has been disabled
-        pPort->iRTCPTimer->setRTCPInterval(0);
-        return;
-    }
-
-    pPort->iRTCPIntervalInMicroSeconds = CalcRtcpInterval(pPort);
-    pPort->iRTCPTimer->setRTCPInterval(iRTCPIntervalInMicroSeconds);
-    pPort->iRTCPTimer->Start();
-}
-void PVMFJitterBufferNode::setRTCPIntervalInMicroSecs(uint32 aRTCPInterval)
-{
-    OSCL_UNUSED_ARG(aRTCPInterval);
-}
-
-/*
- * Called by PvmfRtcpTimer class, on RTCP timer expiry
- */
-void PVMFJitterBufferNode::RtcpTimerEvent(PvmfRtcpTimer* pTimer)
-{
-    /*
-     * Generate and send RRs here. This is not a MIPS
-     * intensive operation. Hence can be performed in
-     * the observer call back itself. This also gaurantees
-     * that the RRs are sent during initial buffering phase
-     * as well.
-     */
-
-    // find the associated port with the expired timer
-    Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-
-    for (it = iPortParamsQueue.begin();
-            it != iPortParamsQueue.end();
-            it++)
-    {
-        if (it->iRTCPTimer == pTimer) break;
-    }
-
-    OSCL_ASSERT(it != iPortParamsQueue.end());
-
-    if (it->iRTCPStats.oRTCPByeRecvd == false)
-    {
-        // timer reconsideration
-        uint32 timer = CalcRtcpInterval(it);
-        if (timer > it->iRTCPIntervalInMicroSeconds)
-        {
-            it->iRTCPTimer->RunIfNotReady(timer - it->iRTCPIntervalInMicroSeconds);
-            it->iRTCPIntervalInMicroSeconds = timer;
-            return;
-        }
-        else
-        {
-            GenerateRTCPRR(it);
-        }
-    }
-}
-
-
-/*
- * Called by PvmfJBSessionDurationTimer on session duration timer expiry
- */
-void PVMFJitterBufferNode::PVMFJBSessionDurationTimerEvent()
-{
-    PVMF_JBNODE_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::PVMFJBSessionDurationTimerEvent ---------------"));
-    PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferNode::PVMFJBSessionDurationTimerEvent - Session Duration Timer Expired"));
-    PVMF_JBNODE_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::PVMFJBSessionDurationTimerEvent - Session Duration Timer Expired"));
-    /* Check if the estimated server clock is past the expected value */
-    uint32 expectedEstServClockVal =
-        iSessionDurationTimer->GetExpectedEstimatedServClockValAtSessionEnd();
-    uint32 timebase32 = 0;
-    uint32 estServClock = 0;
-    bool overflowFlag = false;
-
-    iEstimatedServerClock->GetCurrentTime32(estServClock, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
-    PVMF_JBNODE_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::PVMFJBSessionDurationTimerEvent - CurrEstServClock = %2d", estServClock));
-    PVMF_JBNODE_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::PVMFJBSessionDurationTimerEvent - ExpectedEstServClock = %2d", expectedEstServClockVal));
-    if (estServClock >= expectedEstServClockVal)
-    {
-        PVMF_JBNODE_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::PVMFJBSessionDurationTimerEvent estServClock[%d] expectedEstServClockVal[%d]", estServClock, expectedEstServClockVal));
-        PVMF_JBNODE_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::PVMFJBSessionDurationTimerEvent - Session Duration Has Elapsed"));
-        oSessionDurationExpired = true;
-        CancelEventCallBack(JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED);
-        /* Cancel clock update notifications */
-        Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-        for (it = iPortParamsQueue.begin(); it != iPortParamsQueue.end(); it++)
-        {
-            CancelEventCallBack(JB_NOTIFY_WAIT_FOR_OOO_PACKET_COMPLETE, it);
-
-            if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-            {
-                if (it->iJitterBuffer != NULL)
-                {
-                    it->iJitterBuffer->CancelServerClockNotificationUpdates();
-                }
-                else
-                {
-                    OSCL_ASSERT(false);
-                }
-            }
-        }
-        /* Pause Estimated server clock & RTCP Clock */
-        iEstimatedServerClock->Pause();
-        iRTCPClock->Pause();
-        if (IsAdded())
-        {
-            RunIfNotReady();
-        }
-    }
-    else
-    {
-        /*
-         * Since we monitor the session duration in intervals, it is possible that this call back
-         * happens when one such interval expires
-         */
-        uint64 elapsedTime = iSessionDurationTimer->GetMonitoringIntervalElapsed();
-        uint32 elapsedTime32 = Oscl_Int64_Utils::get_uint64_lower32(elapsedTime);
-        iSessionDurationTimer->UpdateElapsedSessionDuration(elapsedTime32);
-        uint32 totalSessionDuration = iSessionDurationTimer->getSessionDurationInMS();
-        uint32 elapsedSessionDurationInMS = iSessionDurationTimer->GetElapsedSessionDurationInMS();
-        if (elapsedSessionDurationInMS < totalSessionDuration)
-        {
-            uint32 interval = (totalSessionDuration - elapsedSessionDurationInMS);
-            if (interval > PVMF_JITTER_BUFFER_NODE_SESSION_DURATION_MONITORING_INTERVAL_MAX_IN_MS)
-            {
-                interval = PVMF_JITTER_BUFFER_NODE_SESSION_DURATION_MONITORING_INTERVAL_MAX_IN_MS;
-            }
-            iSessionDurationTimer->setCurrentMonitoringIntervalInMS(interval);
-            iSessionDurationTimer->ResetEstimatedServClockValAtLastCancel();
-            PVMF_JBNODE_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::PVMFJBSessionDurationTimerEvent - TotalDuration=%d, ElapsedDuration=%d, CurrMonitoringInterval=%d", totalSessionDuration, elapsedSessionDurationInMS, interval));
-        }
-        else
-        {
-            /*
-             * 1) Register for est serv clock update notifications on all jitter buffers
-             * 2) Reschedule the session duration timer
-             */
-            PVMF_JBNODE_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::PVMFJBSessionDurationTimerEvent - Past Session End Time - Starting to monitor Estimated Server Clock"));
-            Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-            for (it = iPortParamsQueue.begin(); it != iPortParamsQueue.end(); it++)
-            {
-                if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-                {
-                    if (it->iJitterBuffer != NULL)
-                    {
-                        it->iJitterBuffer->NotifyServerClockUpdates(this, NULL);
-                    }
-                    else
-                    {
-                        OSCL_ASSERT(false);
-                    }
-                }
-            }
-            uint64 diff = (expectedEstServClockVal - estServClock);
-            uint32 diff32 = Oscl_Int64_Utils::get_uint64_lower32(diff);
-            /*
-             * This is intentional. We do not expect the session duration and monitoring
-             * intervals to exceed the max timer limit of 32 mins
-             */
-            iSessionDurationTimer->setSessionDurationInMS(diff32);
-            iSessionDurationTimer->setCurrentMonitoringIntervalInMS(diff32);
-            iSessionDurationTimer->ResetEstimatedServClockValAtLastCancel();
-            PVMF_JBNODE_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::PVMFJBSessionDurationTimerEvent - EstServClock=%d, ExpectedEstServClock=%d", Oscl_Int64_Utils::get_uint64_lower32(expectedEstServClockVal), Oscl_Int64_Utils::get_uint64_lower32(estServClock)));
-            PVMF_JBNODE_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::PVMFJBSessionDurationTimerEvent - TotalDuration=%d, Interval=%d", diff32, diff32));
-        }
-        iSessionDurationTimer->Start();
-    }
-    return;
-}
-
-PVMFStatus PVMFJitterBufferNode::NotifyOutOfBandEOS()
-{
-    // Ignore Out Of Band EOS for any Non Live stream
-    if (iPlayStopTimeAvailable == false)
-    {
-        if (iJitterBufferState != PVMF_JITTER_BUFFER_IN_TRANSITION)
-        {
-            oSessionDurationExpired = true;
-            CancelEventCallBack(JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED);
-            Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-            for (it = iPortParamsQueue.begin(); it != iPortParamsQueue.end(); it++)
-            {
-                CancelEventCallBack(JB_NOTIFY_WAIT_FOR_OOO_PACKET_COMPLETE, it);
-            }
-            iSessionDurationTimer->Cancel();
-            PVMF_JBNODE_LOGDATATRAFFIC((0, "PVMFJitterBufferNode::NotifyOutOfBandEOS - Out Of Band EOS Recvd"));
-            PVMF_JBNODE_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::NotifyOutOfBandEOS - Out Of Band EOS Recvd"));
-        }
-        else
-        {
-            PVMF_JBNODE_LOGDATATRAFFIC((0, "PVMFJitterBufferNode::NotifyOutOfBandEOS - Ignoring Out Of Band EOS in Transition State"));
-            PVMF_JBNODE_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::NotifyOutOfBandEOS - Ignoring Out Of Band EOS in Transition State"));
-        }
-    }
-    else
-    {
-        PVMF_JBNODE_LOGDATATRAFFIC((0, "PVMFJitterBufferNode::NotifyOutOfBandEOS - Ignoring Out Of Band EOS in Transition State"));
-        PVMF_JBNODE_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::NotifyOutOfBandEOS - Ignoring Out Of Band EOS in Transition State"));
-    }
-    return PVMFSuccess;
-}
-
-PVMFStatus PVMFJitterBufferNode::SendBOSMessage(uint32 aStreamID)
-{
-    iStreamID = aStreamID;
-    Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-    for (it = iPortParamsQueue.begin();
-            it != iPortParamsQueue.end();
-            it++)
-    {
-        if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-        {
-            QueueBOSCommand(it->iPort);
-        }
-    }
-    PVMF_JBNODE_LOGDATATRAFFIC((0, "PVMFJitterBufferNode::SendBOSMessage - BOS Recvd"));
-    return PVMFSuccess;
-}
-
-bool PVMFJitterBufferNode::QueueBOSCommand(PVMFPortInterface* aPort)
-{
-    PVMFPortInterface* outputPort = getPortCounterpart(aPort);
-
-    PVMFJitterBufferPortParams* portParamsPtr;
-    if (!getPortContainer(outputPort, portParamsPtr))
-    {
-        PVMF_JBNODE_LOGERROR((0, "0x%x PVMFJitterBufferNode::QueueBOSCommand: Error - getPortContainer failed", this));
-        return PVMFFailure;
-    }
-
-    PVMFSharedMediaCmdPtr sharedMediaCmdPtr = PVMFMediaCmd::createMediaCmd();
-    // Set the formatID, timestamp, sequenceNumber and streamID for the media message
-    sharedMediaCmdPtr->setFormatID(PVMF_MEDIA_CMD_BOS_FORMAT_ID);
-    uint32 seqNum = 0;
-    sharedMediaCmdPtr->setSeqNum(seqNum);
-    sharedMediaCmdPtr->setStreamID(iStreamID);
-
-    PVMFSharedMediaMsgPtr mediaMsgOut;
-    convertToPVMFMediaCmdMsg(mediaMsgOut, sharedMediaCmdPtr);
-
-    PVMFJitterBuffer* jitterBuffer = findJitterBuffer(aPort);
-    jitterBuffer->addMediaCommand(mediaMsgOut);
-
-    PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVMFJitterBufferNode::QueueBOSCommand() MIME=%s StreamID=%d", portParamsPtr->iMimeType.get_cstr(), iStreamID));
-    return true;
-}
-
-
-PVMFStatus
-PVMFJitterBufferNode::GenerateAndSendEOSCommand(PVMFPortInterface* aPort)
-{
-    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::GenerateAndSendEOSCommand"));
-    OSCL_StackString<8> rtp(_STRLIT_CHAR("RTP"));
-    OSCL_StackString<8> rdt(_STRLIT_CHAR("RDT"));
-
-    PVMFJitterBufferPortParams* portParams;
-    if (getPortContainer(aPort, portParams) == false)
-    {
-        ReportErrorEvent(PVMFErrPortProcessing, (OsclAny*)(aPort));
-        PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::GenerateAndSendEOSCommand: Error - Invalid Port"));
-        return PVMFFailure;
-    }
-    PVMFPortInterface* outputPort = getPortCounterpart(aPort);
-    if (outputPort == NULL)
-    {
-        ReportErrorEvent(PVMFErrPortProcessing, (OsclAny*)(aPort));
-        PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::GenerateAndSendEOSCommand: Error - Unable to find Output Port"));
-        return PVMFFailure;
-    }
-    PVMFJitterBufferPortParams* outPortParams;
-    if (getPortContainer(outputPort, outPortParams) == false)
-    {
-        ReportErrorEvent(PVMFErrPortProcessing, (OsclAny*)(aPort));
-        PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::GenerateAndSendEOSCommand: Error - Invalid Port"));
-        return PVMFFailure;
-    }
-
-    /* Set EOS on jitter buffer so that we dont register any more packets */
-    if (portParams->iJitterBuffer->GetEOS() == false)
-    {
-        portParams->iJitterBuffer->SetEOS(true);
-        PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::GenerateAndSendEOSCommand: EOS Set On Jitter Buffer - MimeType=%s", portParams->iMimeType.get_cstr()));
-        PVMF_JBNODE_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::GenerateAndSendEOSCommand: EOS Set On Jitter Buffer - MimeType=%s", portParams->iMimeType.get_cstr()));
-    }
-
-    if (outputPort->IsOutgoingQueueBusy() == true)
-    {
-        /* come back later */
-        PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::GenerateAndSendEOSCommand: Waiting - Output Queue Busy"));
-        PVMF_JBNODE_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::GenerateAndSendEOSCommand: Waiting - Output Queue Busy"));
-        return PVMFErrBusy;
-    }
-
-    if ((oscl_strncmp(portParams->iTransportType.get_cstr(), rtp.get_cstr(), 3) == 0) ||
-            (oscl_strncmp(portParams->iTransportType.get_cstr(), rdt.get_cstr(), 3) == 0))
-    {
-        if (portParams->oEOSReached == false)
-        {
-            PVMFSharedMediaCmdPtr sharedMediaCmdPtr =
-                PVMFMediaCmd::createMediaCmd();
-
-            sharedMediaCmdPtr->setFormatID(PVMF_MEDIA_CMD_EOS_FORMAT_ID);
-
-            sharedMediaCmdPtr->setStreamID(iStreamID);
-
-            PVMFSharedMediaMsgPtr msg;
-            convertToPVMFMediaCmdMsg(msg, sharedMediaCmdPtr);
-
-            msg->setTimestamp(outPortParams->iLastMsgTimeStamp);
-
-            PVMFStatus status = outputPort->QueueOutgoingMsg(msg);
-            if (status != PVMFSuccess)
-            {
-                ReportErrorEvent(PVMFErrPortProcessing, (OsclAny*)(aPort));
-                PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::GenerateAndSendEOSCommand: Error - output queue busy"));
-                return status;
-            }
-            uint32 timebase32 = 0;
-            uint32 clientClock32 = 0;
-            bool overflowFlag = false;
-            if (iClientPlayBackClock != NULL)
-                iClientPlayBackClock->GetCurrentTime32(clientClock32, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
-            timebase32 = 0;
-            uint32 estServClock32 = 0;
-            iEstimatedServerClock->GetCurrentTime32(estServClock32, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
-            PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::GenerateAndSendEOSCommand: MimeType=%s, StreamID=%d",
-                                            portParams->iMimeType.get_cstr(),
-                                            msg->getStreamID()));
-            PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::GenerateAndSendEOSCommand: ClientClock=%d",
-                                            clientClock32));
-            PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::GenerateAndSendEOSCommand: EstServClock=%d",
-                                            estServClock32));
-            PVMF_JBNODE_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::GenerateAndSendEOSCommand: MimeType=%s, StreamID=%d",
-                                                   portParams->iMimeType.get_cstr(),
-                                                   msg->getStreamID()));
-            PVMF_JBNODE_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::GenerateAndSendEOSCommand: ClientClock=%d",
-                                                   clientClock32));
-            PVMF_JBNODE_LOGCLOCK_SESSION_DURATION((0, "PVMFJitterBufferNode::GenerateAndSendEOSCommand: EstServClock=%d",
-                                                   estServClock32));
-            portParams->oEOSReached = true;
-            return (status);
-        }
-        else
-        {
-            PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferNode::GenerateAndSendEOSCommand - EOS already sent..."));
-        }
-    }
-    return PVMFSuccess;
-}
-
-PVMFStatus
-PVMFJitterBufferNode::DestroyFireWallPacketMemAllocators(PVMFJitterBufferPortParams* aPortParams)
-{
-    if (aPortParams->iMediaMsgAlloc != NULL)
-    {
-        PVMF_JITTER_BUFFER_DELETE(NULL,
-                                  OsclMemPoolFixedChunkAllocator,
-                                  aPortParams->iMediaMsgAlloc);
-        aPortParams->iMediaMsgAlloc = NULL;
-    }
-
-    if (aPortParams->iMediaDataImplAlloc != NULL)
-    {
-        PVMF_JITTER_BUFFER_DELETE(NULL,
-                                  PVMFSimpleMediaBufferCombinedAlloc,
-                                  aPortParams->iMediaDataImplAlloc);
-        aPortParams->iMediaDataImplAlloc = NULL;
-    }
-
-    if (aPortParams->iMediaDataAlloc != NULL)
-    {
-        PVMF_JITTER_BUFFER_DELETE(NULL,
-                                  OsclMemPoolFixedChunkAllocator,
-                                  aPortParams->iMediaDataAlloc);
-        aPortParams->iMediaDataAlloc = NULL;
-    }
-    return PVMFSuccess;
-}
-
-
-PVMFStatus
-PVMFJitterBufferNode::CreateFireWallPacketMemAllocators(PVMFJitterBufferPortParams* aPortParams)
-{
-    OSCL_StackString<8> rtp(_STRLIT_CHAR("RTP"));
-    if (oscl_strncmp(aPortParams->iMimeType.get_cstr(), rtp.get_cstr(), 3) == 0)
-    {
-        /* Destroy old ones, if any */
-        DestroyFireWallPacketMemAllocators(aPortParams);
-
-        int32 leavecode;
-        leavecode = 0;
-        OsclExclusivePtr<OsclMemPoolFixedChunkAllocator> mediaDataAllocAutoPtr;
-        OSCL_TRY(leavecode,
-                 PVMF_JITTER_BUFFER_NEW(NULL,
-                                        OsclMemPoolFixedChunkAllocator,
-                                        (PVMF_JITTER_BUFFER_NODE_FIREWALL_PKT_MEMPOOL_SIZE),
-                                        aPortParams->iMediaDataAlloc));
-        if (leavecode != 0)
-        {
-            return PVMFErrNoMemory;
-        }
-        mediaDataAllocAutoPtr.set(aPortParams->iMediaDataAlloc);
-
-        leavecode = 0;
-        OsclExclusivePtr<PVMFSimpleMediaBufferCombinedAlloc> mediaDataImplAllocAutoPtr;
-        OSCL_TRY(leavecode,
-                 PVMF_JITTER_BUFFER_NEW(NULL,
-                                        PVMFSimpleMediaBufferCombinedAlloc,
-                                        (aPortParams->iMediaDataAlloc),
-                                        aPortParams->iMediaDataImplAlloc));
-        if (leavecode != 0)
-        {
-            return PVMFErrNoMemory;
-        }
-        mediaDataImplAllocAutoPtr.set(aPortParams->iMediaDataImplAlloc);
-
-        leavecode = 0;
-        OSCL_TRY(leavecode,
-                 PVMF_JITTER_BUFFER_NEW(NULL,
-                                        OsclMemPoolFixedChunkAllocator,
-                                        (PVMF_JITTER_BUFFER_NODE_FIREWALL_PKT_MEMPOOL_SIZE, PVMF_JITTER_BUFFER_NODE_MEDIA_MSG_SIZE),
-                                        aPortParams->iMediaMsgAlloc));
-        if (leavecode != 0)
-        {
-            return PVMFErrNoMemory;
-        }
-        mediaDataImplAllocAutoPtr.release();
-        mediaDataAllocAutoPtr.release();
-    }
-    return PVMFSuccess;
-}
-
-void PVMFJitterBufferNode::CheckForFireWallRecv(bool &aComplete)
-{
-    Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-
-    for (it = iPortParamsQueue.begin();
-            it != iPortParamsQueue.end();
-            it++)
-    {
-        if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-        {
-            if (it->oFireWallPacketRecvd == false)
-            {
-                aComplete = false;
-                return;
-            }
-        }
-    }
-    aComplete = true;
-    return;
-}
-
-void PVMFJitterBufferNode::CheckForFireWallPacketAttempts(bool &aComplete)
-{
-    Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-
-    for (it = iPortParamsQueue.begin();
-            it != iPortParamsQueue.end();
-            it++)
-    {
-        if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-        {
-            PVMF_JBNODE_LOG_FW((0, "PVMFJitterBufferNode::CheckForFireWallPacketAttempts - Mime=%s, Count=%d, Max=%d",
-                                it->iMimeType.get_cstr(), it->iFireWallPacketCount, iFireWallPacketInfo.iNumAttempts));
-
-            if (it->iFireWallPacketCount < iFireWallPacketInfo.iNumAttempts)
-            {
-                aComplete = false;
-                return;
-            }
-        }
-    }
-    aComplete = true;
-    return;
-}
-
-PVMFStatus
-PVMFJitterBufferNode::ResetFireWallPacketInfoAndResend()
-{
-    if (iDisableFireWallPackets == true)
-    {
-        return PVMFErrArgument;
-    }
-    PVUuid eventuuid = PVMFJitterBufferNodeEventTypeUUID;
-    int32 errcode = PVMFJitterBufferNodeFirewallPacketGenerationFailed;
-    Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-
-    for (it = iPortParamsQueue.begin();
-            it != iPortParamsQueue.end();
-            it++)
-    {
-        if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-        {
-            it->oFireWallPacketRecvd = false;
-            it->iFireWallPacketCount = 0;
-            for (uint32 i = 0; i < iFireWallPacketInfo.iNumAttempts; i++)
-            {
-                if (it->oFireWallPacketRecvd == false)
-                {
-                    if (it->iPort->IsOutgoingQueueBusy() == false)
-                    {
-                        PVMFSharedMediaDataPtr fireWallPkt;
-                        OsclSharedPtr<PVMFMediaDataImpl> mediaDataImpl;
-                        bool retval;
-
-                        if (iFireWallPacketInfo.iFormat == PVMF_JB_FW_PKT_FORMAT_PV)
-                        {
-                            retval = Allocate(it, fireWallPkt, mediaDataImpl, PVMF_JITTER_BUFFER_NODE_MAX_FIREWALL_PKT_SIZE);
-
-                            if (retval == false)
-                            {
-                                return PVMFErrNoMemory;
-                            }
-
-                            fireWallPkt->setMediaFragFilledLen(0, PVMF_JITTER_BUFFER_NODE_MAX_FIREWALL_PKT_SIZE);
-
-                            OsclRefCounterMemFrag refCntMemFrag;
-                            mediaDataImpl->getMediaFragment(0, refCntMemFrag);
-
-                            OsclMemoryFragment memFrag = refCntMemFrag.getMemFrag();
-                            OsclBinOStreamBigEndian outstream;
-
-                            outstream.Attach(1, &memFrag);
-
-                            outstream << it->iFireWallPacketCount;
-                            it->iFireWallPacketCount++;
-
-                            outstream << it->SSRC;
-                        }
-                        else
-                        {
-                            retval = Allocate(it, fireWallPkt, mediaDataImpl, PVMF_JITTER_BUFFER_NODE_MAX_RTP_FIREWALL_PKT_SIZE);
-
-                            if (retval == false)
-                            {
-                                return PVMFErrNoMemory;
-                            }
-
-                            fireWallPkt->setMediaFragFilledLen(0, PVMF_JITTER_BUFFER_NODE_MAX_RTP_FIREWALL_PKT_SIZE);
-
-                            OsclRefCounterMemFrag refCntMemFrag;
-                            mediaDataImpl->getMediaFragment(0, refCntMemFrag);
-
-                            OsclMemoryFragment memFrag = refCntMemFrag.getMemFrag();
-                            oscl_memset(memFrag.ptr, 0, memFrag.len);
-
-                            it->iFireWallPacketCount++;
-                        }
-                        PVMFSharedMediaMsgPtr fireWallMsg;
-                        convertToPVMFMediaMsg(fireWallMsg, fireWallPkt);
-
-                        PVMFStatus status = it->iPort->QueueOutgoingMsg(fireWallMsg);
-                        if (status != PVMFSuccess)
-                        {
-                            PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ResetFireWallPacketInfoAndResend: Error - output queue busy"));
-                            PVMF_JBNODE_LOG_FW((0, "PVMFJitterBufferNode::ResetFireWallPacketInfoAndResend: Error - output queue busy"));
-                        }
-                        PVMF_JBNODE_LOGDATATRAFFIC((0, "PVMFJitterBufferNode::ResetFireWallPacketInfoAndResend: Sent FireWall Packet - TrackMimeType = %s", it->iMimeType.get_cstr()));
-                        PVMF_JBNODE_LOG_FW((0, "PVMFJitterBufferNode::ResetFireWallPacketInfoAndResend: Sent FireWall Packet - TrackMimeType = %s", it->iMimeType.get_cstr()));
-                    }
-                    else
-                    {
-                        PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ResetFireWallPacketInfoAndResend: Input Port - Outgoing queue full"));
-                        PVMF_JBNODE_LOG_FW((0, "PVMFJitterBufferNode::ResetFireWallPacketInfoAndResend: Input Port - Outgoing queue full"));
-                        ReportErrorEvent(PVMFErrPortProcessing, NULL, &eventuuid, &errcode);
-                        return PVMFFailure;
-                    }
-                }
-            }
-        }
-    }
-    return PVMFSuccess;
-}
-
-PVMFStatus PVMFJitterBufferNode::SendFireWallPackets()
-{
-    if (iDisableFireWallPackets == true)
-    {
-        return PVMFErrArgument;
-    }
-
-    bool oComplete = false;
-    CheckForFireWallPacketAttempts(oComplete);
-    if (oComplete == true)
-    {
-        return PVMFSuccess;
-    }
-
-    PVUuid eventuuid = PVMFJitterBufferNodeEventTypeUUID;
-    int32 errcode = PVMFJitterBufferNodeFirewallPacketGenerationFailed;
-    Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-
-    for (it = iPortParamsQueue.begin();
-            it != iPortParamsQueue.end();
-            it++)
-    {
-        if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-        {
-            if (it->oFireWallPacketRecvd == false)
-            {
-                if (it->iPort->IsOutgoingQueueBusy() == false)
-                {
-                    PVMFSharedMediaDataPtr fireWallPkt;
-                    OsclSharedPtr<PVMFMediaDataImpl> mediaDataImpl;
-                    bool retval;
-
-                    if (iFireWallPacketInfo.iFormat == PVMF_JB_FW_PKT_FORMAT_PV)
-                    {
-                        retval = Allocate(it, fireWallPkt, mediaDataImpl, PVMF_JITTER_BUFFER_NODE_MAX_FIREWALL_PKT_SIZE);
-
-                        if (retval == false)
-                        {
-                            return PVMFErrNoMemory;
-                        }
-
-                        fireWallPkt->setMediaFragFilledLen(0, PVMF_JITTER_BUFFER_NODE_MAX_FIREWALL_PKT_SIZE);
-
-                        OsclRefCounterMemFrag refCntMemFrag;
-                        mediaDataImpl->getMediaFragment(0, refCntMemFrag);
-
-                        OsclMemoryFragment memFrag = refCntMemFrag.getMemFrag();
-                        OsclBinOStreamBigEndian outstream;
-
-                        outstream.Attach(1, &memFrag);
-
-                        outstream << it->iFireWallPacketCount;
-                        it->iFireWallPacketCount++;
-
-                        outstream << it->SSRC;
-                    }
-                    else
-                    {
-                        retval = Allocate(it, fireWallPkt, mediaDataImpl, PVMF_JITTER_BUFFER_NODE_MAX_RTP_FIREWALL_PKT_SIZE);
-
-                        if (retval == false)
-                        {
-                            return PVMFErrNoMemory;
-                        }
-
-                        fireWallPkt->setMediaFragFilledLen(0, PVMF_JITTER_BUFFER_NODE_MAX_RTP_FIREWALL_PKT_SIZE);
-
-                        OsclRefCounterMemFrag refCntMemFrag;
-                        mediaDataImpl->getMediaFragment(0, refCntMemFrag);
-
-                        OsclMemoryFragment memFrag = refCntMemFrag.getMemFrag();
-                        oscl_memset(memFrag.ptr, 0, memFrag.len);
-
-                        OsclBinOStreamBigEndian outstream;
-                        outstream.Attach(1, &memFrag);
-
-                        //Skip to start of SSRC
-                        outstream.seekFromCurrentPosition(8);
-
-                        //fill in the SSRC
-                        outstream << it->SSRC;
-
-                        it->iFireWallPacketCount++;
-                    }
-                    PVMFSharedMediaMsgPtr fireWallMsg;
-                    convertToPVMFMediaMsg(fireWallMsg, fireWallPkt);
-
-                    PVMFStatus status = it->iPort->QueueOutgoingMsg(fireWallMsg);
-                    if (status != PVMFSuccess)
-                    {
-                        PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::SendFireWallPackets: Error - output queue busy"));
-                        PVMF_JBNODE_LOG_FW((0, "PVMFJitterBufferNode::SendFireWallPackets: Error - output queue busy"));
-                    }
-                    PVMF_JBNODE_LOGDATATRAFFIC((0, "PVMFJitterBufferNode::SendFireWallPackets: Sent FireWall Packet - TrackMimeType = %s", it->iMimeType.get_cstr()));
-                    PVMF_JBNODE_LOG_FW((0, "PVMFJitterBufferNode::SendFireWallPackets: Sent FireWall Packet - TrackMimeType = %s", it->iMimeType.get_cstr()));
-                }
-                else
-                {
-                    PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::SendFireWallPackets: Input Port - Outgoing queue full"));
-                    PVMF_JBNODE_LOG_FW((0, "PVMFJitterBufferNode::SendFireWallPackets: Input Port - Outgoing queue full"));
-                    ReportErrorEvent(PVMFErrPortProcessing, NULL, &eventuuid, &errcode);
-                    return PVMFFailure;
-                }
-            }
-        }
-    }
-    PVMF_JBNODE_LOG_FW((0, "PVMFJitterBufferNode::SendFireWallPackets: Scheduling FW Timer - Val = %d ms",
-                        iFireWallPacketInfo.iServerRoundTripDelayInMS));
-    /* Reschedule the firewall timer for the next interval */
-    RequestEventCallBack(JB_NOTIFY_SEND_FIREWALL_PACKET, iFireWallPacketInfo.iServerRoundTripDelayInMS);
-    return PVMFSuccess;
-}
-
-bool PVMFJitterBufferNode::Allocate(PVMFJitterBufferPortParams* it, PVMFSharedMediaDataPtr& fireWallPkt, OsclSharedPtr<PVMFMediaDataImpl>& mediaDataImpl, const int size)
-{
-    int32 err;
-    OSCL_TRY(err,
-             mediaDataImpl = it->iMediaDataImplAlloc->allocate(size);
-             fireWallPkt = PVMFMediaData::createMediaData(mediaDataImpl,
-                           it->iMediaMsgAlloc);
-            );
-
-
-    if (err != OsclErrNone)
-    {
-        return false;
-    }
-    return true;
-}
-
-
-PVMFStatus PVMFJitterBufferNode::DecodeFireWallPackets(PVMFSharedMediaDataPtr aPacket,
-        PVMFJitterBufferPortParams* aPortParamsPtr)
-{
-    PVMF_JBNODE_LOG_FW((0, "PVMFJitterBufferNode::DecodeFireWallPackets: Recvd Packet - TrackMimeType = %s", aPortParamsPtr->iMimeType.get_cstr()));
-    if (aPortParamsPtr->oFireWallPacketRecvd == false)
-    {
-        OsclRefCounterMemFrag refCntMemFrag;
-        aPacket->getMediaFragment(0, refCntMemFrag);
-
-        OsclMemoryFragment memFrag = refCntMemFrag.getMemFrag();
-        OsclBinIStreamBigEndian instream;
-
-        instream.Attach(1, &memFrag);
-
-        uint32 count;
-        uint32 ssrc;
-
-        instream >> count;
-        instream >> ssrc;
-
-        if (ssrc == aPortParamsPtr->SSRC)
-        {
-            PVMF_JBNODE_LOG_FW((0, "PVMFJitterBufferNode::DecodeFireWallPackets: Decoded FireWall Packet - TrackMimeType = %s", aPortParamsPtr->iMimeType.get_cstr()));
-            PVMF_JBNODE_LOGDATATRAFFIC((0, "PVMFJitterBufferNode::DecodeFireWallPackets: Decoded FireWall Packet - TrackMimeType = %s", aPortParamsPtr->iMimeType.get_cstr()));
-            aPortParamsPtr->oFireWallPacketRecvd = true;
-            bool oComplete = false;
-            CheckForFireWallRecv(oComplete);
-            if (oComplete == true)
-            {
-                if (iInterfaceState == EPVMFNodeInitialized)
-                {
-                    /* Complete Prepare */
-                    OSCL_ASSERT(!iCurrentCommand.empty());
-                    OSCL_ASSERT(iCurrentCommand.front().iCmd == PVMF_JITTER_BUFFER_NODE_PREPARE);
-                    CompletePrepare();
-                }
-            }
-            return PVMFSuccess;
-        }
-        /* Bad Packet */
-        return PVMFErrCorrupt;
-    }
-    /* Mutiple packet response - ignore */
-    return PVMFSuccess;
-}
-
-void PVMFJitterBufferNode::SetSharedBufferResizeParams(uint32 maxNumResizes,
-        uint32 resizeSize)
-{
-    // make sure we're in a state that makes sense
-    OSCL_ASSERT((iInterfaceState == EPVMFNodeCreated) ||
-                (iInterfaceState == EPVMFNodeIdle) ||
-                (iInterfaceState == EPVMFNodeInitialized));
-
-    iMaxNumBufferResizes = maxNumResizes;
-    iBufferResizeSize = resizeSize;
-}
-
-void PVMFJitterBufferNode::GetSharedBufferResizeParams(uint32& maxNumResizes,
-        uint32& resizeSize)
-{
-    maxNumResizes = iMaxNumBufferResizes;
-    resizeSize = iBufferResizeSize;
-}
-PVMFStatus
-PVMFJitterBufferNode::CheckForHighWaterMark(PVMFPortInterface* aPort, bool& aHighWaterMarkReached)
-{
-    aHighWaterMarkReached = false;
-    PVMFJitterBufferPort* jbPort = OSCL_STATIC_CAST(PVMFJitterBufferPort*, aPort);
-    PVMFJitterBufferPortParams* portParamsPtr = jbPort->iPortParams;
-    if (portParamsPtr == NULL)
-    {
-        if (!getPortContainer(aPort, portParamsPtr))
-        {
-            return PVMFFailure;
-        }
-        jbPort->iPortParams = portParamsPtr;
-    }
-
-    if (portParamsPtr->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-    {
-        /* If EOS Recvd, dont check */
-        if (portParamsPtr->oUpStreamEOSRecvd == false)
-        {
-            if (portParamsPtr->eTransportType == PVMF_JITTER_BUFFER_PORT_TRANSPORT_TYPE_RTP)
-            {
-                aHighWaterMarkReached = portParamsPtr->iJitterBuffer->CheckForHighWaterMark();
-            }
-        }
-        return PVMFSuccess;
-    }
-    return PVMFErrArgument;
-}
-
-PVMFStatus
-PVMFJitterBufferNode::CheckForLowWaterMark(PVMFPortInterface* aPort, bool& aLowWaterMarkReached)
-{
-    aLowWaterMarkReached = false;
-
-    /* If you had not auto paused earlier, this check is not needed */
-    if (oAutoPause == false)
-    {
-        return PVMFSuccess;
-    }
-    PVMFJitterBufferPort* jbPort = OSCL_STATIC_CAST(PVMFJitterBufferPort*, aPort);
-    PVMFJitterBufferPortParams* portParamsPtr = jbPort->iPortParams;
-    if (portParamsPtr == NULL)
-    {
-        if (!getPortContainer(aPort, portParamsPtr))
-        {
-            return PVMFFailure;
-        }
-        jbPort->iPortParams = portParamsPtr;
-    }
-
-    if (portParamsPtr->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-    {
-        /* If EOS Recvd, dont check */
-        if (portParamsPtr->oUpStreamEOSRecvd == false)
-        {
-            if (portParamsPtr->eTransportType == PVMF_JITTER_BUFFER_PORT_TRANSPORT_TYPE_RTP)
-            {
-                aLowWaterMarkReached = portParamsPtr->iJitterBuffer->CheckForLowWaterMark();
-            }
-        }
-        return PVMFSuccess;
-    }
-    return PVMFErrArgument;
-}
-
-PVMFStatus PVMFJitterBufferNode::RequestMemCallBackForAutoResume(PVMFPortInterface* aPort)
-{
-    /* If you had not auto paused earlier, this check is not needed */
-    if (oAutoPause == false)
-    {
-        return PVMFSuccess;
-    }
-
-    PVMFJitterBufferPort* jbPort = OSCL_STATIC_CAST(PVMFJitterBufferPort*, aPort);
-    PVMFJitterBufferPortParams* portParamsPtr = jbPort->iPortParams;
-    if (portParamsPtr == NULL)
-    {
-        if (!getPortContainer(aPort, portParamsPtr))
-        {
-            return PVMFFailure;
-        }
-        jbPort->iPortParams = portParamsPtr;
-    }
-    if (portParamsPtr->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-    {
-        /* If EOS Recvd, dont check */
-        if (portParamsPtr->oUpStreamEOSRecvd == false)
-        {
-            if (portParamsPtr->eTransportType == PVMF_JITTER_BUFFER_PORT_TRANSPORT_TYPE_RTP)
-            {
-                //not supported as of now
-                return PVMFErrNotSupported;
-            }
-        }
-        return PVMFSuccess;
-    }
-    return PVMFErrArgument;
-}
-
-void PVMFJitterBufferNode::freeblockavailable(OsclAny* aContextData)
-{
-    OSCL_UNUSED_ARG(aContextData);
-    //should never get here
-    OSCL_ASSERT(false);
-}
-
-void PVMFJitterBufferNode::freememoryavailable(OsclAny* aContextData)
-{
-    OSCL_UNUSED_ARG(aContextData);
-    if (oAutoPause == true)
-    {
-        PVMFJitterBufferStats stats;
-        oscl_memset(&stats, '0', sizeof(stats));
-        oAutoPause = false;
-        Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-        for (it = iPortParamsQueue.begin();
-                it != iPortParamsQueue.end();
-                it++)
-        {
-            if (it->oMonitorForRemoteActivity == false)
-            {
-                it->oMonitorForRemoteActivity = true;
-                CancelEventCallBack(JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED);
-                RequestEventCallBack(JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED);
-            }
-            if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-            {
-                stats = it->iJitterBuffer->getJitterBufferStats();
-            }
-        }
-        ReportInfoEvent(PVMFJitterBufferNodeJitterBufferLowWaterMarkReached);
-        PVMF_JBNODE_LOGDATATRAFFIC_FLOWCTRL_E((0, "PVMFJitterBufferNode::freememoryavailable: Sending Auto Resume"));
-
-#if (PVLOGGER_INST_LEVEL > PVLOGMSG_INST_LLDBG)
-        uint32 timebase32 = 0;
-        uint32 estServerClock = 0;
-        uint32 clientClock = 0;
-        bool overflowFlag = false;
-        iEstimatedServerClock->GetCurrentTime32(estServerClock, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
-        if (iClientPlayBackClock != NULL)
-            iClientPlayBackClock->GetCurrentTime32(clientClock, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
-
-        PVMF_JBNODE_LOGDATATRAFFIC_FLOWCTRL((0, "PVMFJBNode::freememoryavailable - Auto Resume:"
-                                             "MaxSNReg=%d, MaxTSReg=%u, LastSNRet=%d, LastTSRet=%u, NumMsgsInJB=%d, ServClk=%d, PlyClk=%d",
-                                             stats.maxSeqNumRegistered, stats.maxTimeStampRegistered,
-                                             stats.lastRetrievedSeqNum, stats.maxTimeStampRetrieved,
-                                             (stats.maxSeqNumRegistered - stats.lastRetrievedSeqNum),
-                                             estServerClock,
-                                             clientClock));
-#endif
-    }
-}
-
-void PVMFJitterBufferNode::chunkdeallocated(OsclAny* aContextData)
-{
-    OSCL_UNUSED_ARG(aContextData);
-
-    PVMF_JBNODE_LOGDATATRAFFIC_FLOWCTRL((0, "PVMFJitterBufferNode::chunkdeallocated"));
-
-    Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-    for (it = iPortParamsQueue.begin();
-            it != iPortParamsQueue.end();
-            it++)
-    {
-        if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-        {
-            SendData(it->iPort);
-        }
-    }
-    if (IsAdded())
-    {
-        RunIfNotReady();
-    }
-}
-
-void PVMFJitterBufferNode::UpdateRebufferingStats(PVMFEventType aEventType)
-{
-    if (aEventType == PVMFInfoUnderflow)
-    {
-        if (oAutoPause == true)
-        {
-            oAutoPause = false;
-            Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-            for (it = iPortParamsQueue.begin();
-                    it != iPortParamsQueue.end();
-                    it++)
-            {
-                if (it->oMonitorForRemoteActivity == false)
-                {
-                    it->oMonitorForRemoteActivity = true;
-                    CancelEventCallBack(JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED);
-                    RequestEventCallBack(JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED);
-                }
-            }
-            ReportInfoEvent(PVMFJitterBufferNodeJitterBufferLowWaterMarkReached);
-            PVMF_JBNODE_LOGDATATRAFFIC_FLOWCTRL_E((0, "PVMFJitterBufferNode::UpdateRebufferingStats: Sending Auto Resume"));
-        }
-        iNumUnderFlow++;
-    }
-}
-
 
 void PVMFJitterBufferNode::LogSessionDiagnostics()
 {
     if (iDiagnosticsLogged == false)
     {
-        iDiagnosticsLogger = PVLogger::GetLoggerObject("pvplayerdiagnostics.streamingmanager");
+        ipDiagnosticsLogger = PVLogger::GetLoggerObject("pvplayerdiagnostics.streamingmanager");
 
         LogPortDiagnostics();
 
-        Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
+        Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator it;
         for (it = iPortParamsQueue.begin(); it != iPortParamsQueue.end(); it++)
         {
-            if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
+            PVMFJitterBufferPortParams* pPortParams = *it;
+            if (pPortParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
             {
-                PVMFJitterBuffer* jitterBuffer = findJitterBuffer(it->iPort);
+                PVMFJitterBuffer* jitterBuffer = findJitterBuffer(&pPortParams->irPort);
                 if (jitterBuffer != NULL)
                 {
                     PVMFJitterBufferStats jbStats = jitterBuffer->getJitterBufferStats();
                     uint32 in_wrap_count = 0;
                     uint32 max_ts_reg = jbStats.maxTimeStampRegistered;
-                    it->mediaClockConverter.set_clock(max_ts_reg, in_wrap_count);
+                    pPortParams->iMediaClockConverter.set_clock(max_ts_reg, in_wrap_count);
 
                     in_wrap_count = 0;
                     uint32 max_ts_ret = jbStats.maxTimeStampRetrieved;
-                    it->mediaClockConverter.set_clock(max_ts_ret, in_wrap_count);
+                    pPortParams->iMediaClockConverter.set_clock(max_ts_ret, in_wrap_count);
 
                     uint32 currentTime32 = 0;
                     uint32 currentTimeBase32 = 0;
                     bool overflowFlag = false;
-                    iEstimatedServerClock->GetCurrentTime32(currentTime32,
-                                                            overflowFlag,
-                                                            PVMF_MEDIA_CLOCK_MSEC,
-                                                            currentTimeBase32);
+                    ipJitterBufferMisc->GetEstimatedServerClock().GetCurrentTime32(currentTime32,
+                            overflowFlag,
+                            PVMF_MEDIA_CLOCK_MSEC,
+                            currentTimeBase32);
                     uint32 bitrate32 = 0;
                     uint32 totalNumBytesRecvd = jbStats.totalNumBytesRecvd;
                     if (currentTime32 != 0)
@@ -6252,15 +3723,15 @@
                     bitrate32 *= 8;
 
                     PVMF_JBNODE_LOGDIAGNOSTICS((0, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"));
-                    PVMF_JBNODE_LOGDIAGNOSTICS((0, "JitterBuffer - TrackMime Type = %s", it->iMimeType.get_cstr()));
+                    PVMF_JBNODE_LOGDIAGNOSTICS((0, "JitterBuffer - TrackMime Type = %s", pPortParams->iMimeType.get_cstr()));
                     PVMF_JBNODE_LOGDIAGNOSTICS((0, "Total Num Packets Recvd = %d", jbStats.totalNumPacketsReceived));
                     PVMF_JBNODE_LOGDIAGNOSTICS((0, "Total Num Packets Registered Into JitterBuffer = %d", jbStats.totalNumPacketsRegistered));
                     PVMF_JBNODE_LOGDIAGNOSTICS((0, "Total Num Packets Retrieved From JitterBuffer = %d", jbStats.totalNumPacketsRetrieved));
                     PVMF_JBNODE_LOGDIAGNOSTICS((0, "MaxSeqNum Recvd = %d", jbStats.maxSeqNumReceived));
                     PVMF_JBNODE_LOGDIAGNOSTICS((0, "MaxSeqNum Registered = %d", jbStats.maxSeqNumRegistered));
                     PVMF_JBNODE_LOGDIAGNOSTICS((0, "MaxSeqNum Retrieved = %d", jbStats.lastRetrievedSeqNum));
-                    PVMF_JBNODE_LOGDIAGNOSTICS((0, "MaxTimeStamp Registered In MS = %d", it->mediaClockConverter.get_converted_ts(1000)));
-                    PVMF_JBNODE_LOGDIAGNOSTICS((0, "MaxTimeStamp Retrieved In MS = %d", it->mediaClockConverter.get_converted_ts(1000)));
+                    PVMF_JBNODE_LOGDIAGNOSTICS((0, "MaxTimeStamp Registered In MS = %d", pPortParams->iMediaClockConverter.get_converted_ts(1000)));
+                    PVMF_JBNODE_LOGDIAGNOSTICS((0, "MaxTimeStamp Retrieved In MS = %d", pPortParams->iMediaClockConverter.get_converted_ts(1000)));
                     PVMF_JBNODE_LOGDIAGNOSTICS((0, "Total Number of Packets Lost = %d", jbStats.totalPacketsLost));
                     PVMF_JBNODE_LOGDIAGNOSTICS((0, "Estimated Bitrate = %d", bitrate32));
                 }
@@ -6272,20 +3743,21 @@
 
 void PVMFJitterBufferNode::LogPortDiagnostics()
 {
-    iDiagnosticsLogger = PVLogger::GetLoggerObject("pvplayerdiagnostics.streamingmanager");
+    PVLogger* ipDiagnosticsLogger = PVLogger::GetLoggerObject("pvplayerdiagnostics.streamingmanager");
 
     PVMF_JBNODE_LOGDIAGNOSTICS((0, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"));
     PVMF_JBNODE_LOGDIAGNOSTICS((0, "PVMFJitterBufferNode - iNumRunL = %d", iNumRunL));
 
-    Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
+    Oscl_Vector<PVMFJitterBufferPortParams*, OsclMemAllocator>::iterator it;
     for (it = iPortParamsQueue.begin(); it != iPortParamsQueue.end(); it++)
     {
+        PVMFJitterBufferPortParams* pPortParams = *it;
         PvmfPortBaseImpl* ptr =
-            OSCL_STATIC_CAST(PvmfPortBaseImpl*, it->iPort);
+            OSCL_STATIC_CAST(PvmfPortBaseImpl*, &pPortParams->irPort);
         PvmfPortBaseImplStats stats;
         ptr->GetStats(stats);
 
-        if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
+        if (pPortParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
         {
             PVMF_JBNODE_LOGDIAGNOSTICS((0, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"));
             PVMF_JBNODE_LOGDIAGNOSTICS((0, "PVMF_JITTER_BUFFER_PORT_TYPE_INPUT"));
@@ -6297,7 +3769,7 @@
             PVMF_JBNODE_LOGDIAGNOSTICS((0, "iOutgoingQueueBusy = %d", stats.iOutgoingQueueBusy));
             PVMF_JBNODE_LOGDIAGNOSTICS((0, "iOutgoingMsgDiscarded = %d", stats.iOutgoingMsgDiscarded));
         }
-        else if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK)
+        else if (pPortParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK)
         {
             PVMF_JBNODE_LOGDIAGNOSTICS((0, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"));
             PVMF_JBNODE_LOGDIAGNOSTICS((0, "PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK"));
@@ -6309,7 +3781,7 @@
             PVMF_JBNODE_LOGDIAGNOSTICS((0, "iOutgoingQueueBusy = %d", stats.iOutgoingQueueBusy));
             PVMF_JBNODE_LOGDIAGNOSTICS((0, "iOutgoingMsgDiscarded = %d", stats.iOutgoingMsgDiscarded));
         }
-        else if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_OUTPUT)
+        else if (pPortParams->iTag == PVMF_JITTER_BUFFER_PORT_TYPE_OUTPUT)
         {
             PVMF_JBNODE_LOGDIAGNOSTICS((0, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"));
             PVMF_JBNODE_LOGDIAGNOSTICS((0, "PVMF_JITTER_BUFFER_PORT_TYPE_OUTPUT"));
@@ -6324,788 +3796,43 @@
     }
 }
 
-void PVMFJitterBufferNode::ComputeCurrentSessionDurationMonitoringInterval()
-{
-    /* Restart the session duration timer after accounting for any elapsed time */
-    uint64 elapsedTime = iSessionDurationTimer->GetMonitoringIntervalElapsed();
-    uint32 elapsedTime32 = Oscl_Int64_Utils::get_uint64_lower32(elapsedTime);
-    iSessionDurationTimer->UpdateElapsedSessionDuration(elapsedTime32);
-    uint32 totalSessionDuration = iSessionDurationTimer->getSessionDurationInMS();
-    uint32 elapsedSessionDuration = iSessionDurationTimer->GetElapsedSessionDurationInMS();
-    uint32 interval = (totalSessionDuration - elapsedSessionDuration);
-    if (interval > PVMF_JITTER_BUFFER_NODE_SESSION_DURATION_MONITORING_INTERVAL_MAX_IN_MS)
-    {
-        interval = PVMF_JITTER_BUFFER_NODE_SESSION_DURATION_MONITORING_INTERVAL_MAX_IN_MS;
-    }
-    iSessionDurationTimer->setCurrentMonitoringIntervalInMS(interval);
-    PVMF_JBNODE_LOGCLOCK_SESSION_DURATION((0, "PVMFJBN::ComputeCurrentSessionDurationMonitoringInterval - TotalDuration=%d, ElapsedDuration=%d, CurrMonitoringInterval=%d", totalSessionDuration, elapsedSessionDuration, interval));
-}
-
-PVMFStatus PVMFJitterBufferNode::SetTransportType(PVMFPortInterface* aPort,
-        OSCL_String& aTransportType)
-{
-    PVMFJitterBufferPortParams* portParams;
-    if (!getPortContainer(aPort, portParams))
-    {
-        PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::SetTransportType: Error - GetPortContainer failed"));
-        return PVMFErrArgument;
-    }
-
-    OSCL_StackString<8> rtp(_STRLIT_CHAR("RTP"));
-    if (oscl_strncmp(aTransportType.get_cstr(), rtp.get_cstr(), 3) == 0)
-    {
-        portParams->iTransportType = rtp;
-        portParams->eTransportType = PVMF_JITTER_BUFFER_PORT_TRANSPORT_TYPE_RTP;
-    }
-    else
-    {
-        PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::SetTransportType: Error - Unrecognized Transport Type"));
-        return PVMFErrArgument;
-    }
-    portParams->iMimeType = aTransportType.get_str();
-    return PVMFSuccess;
-}
-
-bool PVMFJitterBufferNode::PurgeElementsWithNPTLessThan(NptTimeFormat &aNPTTime)
-{
-    if (aNPTTime.npt_format != NptTimeFormat::NPT_SEC)
-    {
-        return false;
-    }
-
-    uint32 i;
-    for (i = 0; i < iPortParamsQueue.size(); i++)
-    {
-        PVMFJitterBufferPortParams portParams = iPortParamsQueue[i];
-        portParams.iPort->ClearMsgQueues();
-    }
-
-    for (i = 0; i < iPortParamsQueue.size(); i++)
-    {
-        PVMFJitterBufferPortParams portParams = iPortParamsQueue[i];
-        if (portParams.tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-        {
-            if (portParams.iJitterBuffer != NULL)
-            {
-                //portParams.iJitterBuffer->FlushJitterBuffer();
-                PVMFTimestamp baseTS = 1000 * aNPTTime.npt_sec.sec + aNPTTime.npt_sec.milli_sec;
-
-                portParams.mediaClockConverter.set_clock_other_timescale(baseTS, 1000);
-                baseTS = portParams.mediaClockConverter.get_current_timestamp();
-
-
-                portParams.iJitterBuffer->PurgeElementsWithTimestampLessThan(baseTS);
-                /*
-                 * Since we flushed the jitter buffer, set it to ready state,
-                 * reset the delay flag
-                 */
-                oDelayEstablished = false;
-                iJitterBufferState = PVMF_JITTER_BUFFER_READY;
-                if (iOverflowFlag)
-                {
-                    iOverflowFlag = false;
-                }
-            }
-        }
-    }
-    return true;
-}
-
-void PVMFJitterBufferNode::NotificationsInterfaceDestroyed()
-{
-}
-
-void PVMFJitterBufferNode::FlushJitterBuffer()
-{
-
-    for (uint32 i = 0; i < iPortParamsQueue.size(); i++)
-    {
-        PVMFJitterBufferPortParams portParams = iPortParamsQueue[i];
-        if (portParams.tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-        {
-            if (portParams.iJitterBuffer != NULL)
-            {
-                portParams.iJitterBuffer->FlushJitterBuffer();
-            }
-        }
-    }
-
-}
-
-void PVMFJitterBufferNode::ClockStateUpdated()
-{
-    PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ClockStateUpdated - iClientPlayBackClock[%d]", iClientPlayBackClock->GetState()));
-    if (!oDelayEstablished)
-    {
-        // Don't let anyone start the clock while
-        // we're rebuffering
-        if (iClientPlayBackClock != NULL)
-        {
-            if (iClientPlayBackClock->GetState() == PVMFMediaClock::RUNNING)
-            {
-                PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ClockStateUpdated - Clock was started during rebuffering.  Pausing..."));
-                iClientPlayBackClock->Pause();
-            }
-        }
-    }
-}
-bool PVMFJitterBufferNode::CheckStateForRegisteringRTPPackets()
-{
-    /*
-     * We register UDP packets only in started and paused state
-     * oStartPending check is needed to handle the intial buffering case.
-     * Node remains in prepared state till buffering is complete
-     * Therefore this additional check ensures that we register packets
-     * after a start has been recvd. If oStartPending is false, then
-     * node state should either be EPVMFNodeStarted or EPVMFNodePaused
-     * for us to register packets.
-     */
-    if ((iInterfaceState == EPVMFNodeStarted) ||
-            (iInterfaceState == EPVMFNodePaused) ||
-            (oStartPending == true))
-    {
-        return true;
-    }
-    return false;
-}
-
-bool PVMFJitterBufferNode::PrepareForRepositioning(bool oUseExpectedClientClockVal,
-        uint32 aExpectedClientClockVal)
-{
-    bool overflowFlag = false;
-#if (PVLOGGER_INST_LEVEL > PVLOGMSG_INST_LLDBG)
-    uint32 timebase32 = 0;
-    uint32 clientClock32 = 0;
-    uint32 serverClock32 = 0;
-    if (iClientPlayBackClock != NULL)
-        iClientPlayBackClock->GetCurrentTime32(clientClock32, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
-    iEstimatedServerClock->GetCurrentTime32(serverClock32, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
-    PVMF_JBNODE_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::PrepareForRepositioning - Before - EstServClock=%d",
-                                 serverClock32));
-    PVMF_JBNODE_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::PrepareForRepositioning - Before - ClientClock=%d",
-                                 clientClock32));
-#endif
-    oAutoPause = false;
-    iJitterBufferState = PVMF_JITTER_BUFFER_IN_TRANSITION;
-    PVMFTimestamp ts = 0;
-    if (oUseExpectedClientClockVal)
-    {
-        ts = aExpectedClientClockVal;
-    }
-    else
-    {
-        //reset player clock
-        ts = getActualMediaDataTSAfterSeek();
-    }
-    if (iClientPlayBackClock != NULL)
-    {
-        iClientPlayBackClock->Stop();
-        iClientPlayBackClock->SetStartTime32(ts,
-                                             PVMF_MEDIA_CLOCK_MSEC, overflowFlag);
-    }
-
-    // Reset the following flags for the new repositioning
-    oSessionDurationExpired = false;
-    oDelayEstablished = false;
-
-
-    Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-    for (it = iPortParamsQueue.begin();
-            it != iPortParamsQueue.end();
-            it++)
-    {
-        if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-        {
-            it->iJitterBuffer->SetEOS(false);
-        }
-        if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_FEEDBACK)
-        {
-            it->iRTCPStats.oRTCPByeRecvd = false;
-        }
-    }
-
-#if (PVLOGGER_INST_LEVEL > PVLOGMSG_INST_LLDBG)
-    timebase32 = 0;
-    clientClock32 = 0;
-    serverClock32 = 0;
-    overflowFlag = false;
-    if (iClientPlayBackClock != NULL)
-        iClientPlayBackClock->GetCurrentTime32(clientClock32, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
-    iEstimatedServerClock->GetCurrentTime32(serverClock32, overflowFlag, PVMF_MEDIA_CLOCK_MSEC, timebase32);
-    PVMF_JBNODE_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::PrepareForRepositioning - After - EstServClock=%d",
-                                 serverClock32));
-    PVMF_JBNODE_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::PrepareForRepositioning - After - ClientClock=%d",
-                                 clientClock32));
-#endif
-    return true;
-}
-
-// Need to set jb state to ready when handing 404, 415 response
-void PVMFJitterBufferNode::UpdateJitterBufferState()
-{
-    iJitterBufferState = PVMF_JITTER_BUFFER_READY;
-    oDelayEstablished = true;
-}
-
-bool PVMFJitterBufferNode::RequestEventCallBack(JB_NOTIFY_CALLBACK aEventType, uint32 aDelay, OsclAny* aContext)
-{
-    PVMF_JBNODE_LOG_EVENTS_CLOCK((0, "[0x%x]PVMFJitterBufferNode::RequestEventCallBack In aEventType[%d], aDelay[%d] aContext[0x%x]", this, aEventType, aDelay, aContext));
-
-    if (PVMFMediaClock::RUNNING != iNonDecreasingClock->GetState())
-    {
-        PVMF_JBNODE_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::RequestEventCallBack - Skipping registering callback - iInterfaceState[%d]", iInterfaceState));
-        return false;
-    }
-
-    uint32* callBackId = 0;
-    bool*  callBackPending = NULL;
-    uint32 intervalToRequestCallBack = 0;
-    PVMFMediaClockNotificationsInterface *eventNotificationsInf = NULL;
-
-    PVMFMediaClockNotificationsIntfContext	*eventClockNotificationIntfContext = NULL;
-    switch (aEventType)
-    {
-        case JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED:
-        {
-            callBackId = &iIncomingMediaInactivityDurationCallBkId;
-            callBackPending = &iIncomingMediaInactivityDurationCallBkPending;
-            intervalToRequestCallBack = iMaxInactivityDurationForMediaInMs;
-            eventNotificationsInf = iNonDecreasingClockNotificationsInf;
-            iNonDecClkNotificationsInfContext.SetContext(eventNotificationsInf, aContext);
-            eventClockNotificationIntfContext = &iNonDecClkNotificationsInfContext;
-        }
-        break;
-        case JB_NOTIFY_REPORT_BUFFERING_STATUS:
-        {
-            callBackId = &iNotifyBufferingStatusCallBkId;
-            callBackPending = &iNotifyBufferingStatusCallBkPending;
-            intervalToRequestCallBack = iBufferingStatusIntervalInMs;
-            eventNotificationsInf = iNonDecreasingClockNotificationsInf;
-            iNonDecClkNotificationsInfContext.SetContext(eventNotificationsInf, aContext);
-            eventClockNotificationIntfContext = &iNonDecClkNotificationsInfContext;
-        }
-        break;
-        case JB_BUFFERING_DURATION_COMPLETE:
-        {
-            callBackId = &iJitterBufferDurationCallBkId;
-            callBackPending = &iJitterBufferDurationCallBkPending;
-            intervalToRequestCallBack = iJitterBufferDurationInMilliSeconds;
-            eventNotificationsInf = iNonDecreasingClockNotificationsInf;
-            iNonDecClkNotificationsInfContext.SetContext(eventNotificationsInf, aContext);
-            eventClockNotificationIntfContext = &iNonDecClkNotificationsInfContext;
-        }
-        break;
-        case JB_MONITOR_REBUFFERING:
-        {
-            //Playback clock is started and stopped outside the scope of this module.
-            //Therefore, check state of the clock state before requesting the callback
-            if (PVMFMediaClock::RUNNING != iClientPlayBackClock->GetState())
-            {
-                return false;
-            }
-            callBackId = &iMonitorReBufferingCallBkId;
-            callBackPending = &iMonitorReBufferingCallBkPending;
-            eventNotificationsInf = iClientPlayBackClockNotificationsInf;
-            iClientPlayBkClkNotificationsInfContext.SetContext(eventNotificationsInf, aContext);
-            eventClockNotificationIntfContext = &iClientPlayBkClkNotificationsInfContext;
-        }
-        break;
-        case JB_NOTIFY_SEND_FIREWALL_PACKET:
-        {
-            callBackId = &iSendFirewallPacketCallBkId;
-            callBackPending = &iSendFirewallPacketCallBkPending;
-            eventNotificationsInf = iNonDecreasingClockNotificationsInf;
-            iNonDecClkNotificationsInfContext.SetContext(eventNotificationsInf, aContext);
-            eventClockNotificationIntfContext = &iNonDecClkNotificationsInfContext;
-        }
-        break;
-        case JB_NOTIFY_WAIT_FOR_OOO_PACKET_COMPLETE:
-        {
-            PVMFJitterBufferPortParams * portParams = OSCL_REINTERPRET_CAST(PVMFJitterBufferPortParams *, aContext);
-            callBackId = &(portParams->iWaitForOOOPacketCallBkId);
-            callBackPending = &(portParams->iWaitForOOOPacketCallBkPending);
-            eventNotificationsInf = iEstimatedClockNotificationsInf;
-            iEstimatedClockNotificationsInfContext.SetContext(eventNotificationsInf, aContext);
-            eventClockNotificationIntfContext = &iEstimatedClockNotificationsInfContext;
-            PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::RequestEventCallBack Set Callback for sending OOO data aDelay [%d] aContext[0x%x]", aDelay, aContext));
-        }
-        break;
-        default:
-            OSCL_ASSERT(false);
-    }
-
-    if (*callBackPending)
-    {
-        CancelCallBack(eventNotificationsInf, *callBackId, *callBackPending);
-        *callBackPending = false;
-    }
-
-    if (aDelay)
-    {
-        intervalToRequestCallBack = aDelay;
-    }
-
-    return RequestCallBack(eventNotificationsInf, intervalToRequestCallBack, *callBackId, *callBackPending, eventClockNotificationIntfContext);
-}
-
-bool PVMFJitterBufferNode::RequestCallBack(PVMFMediaClockNotificationsInterface *& aEventNotificationInterface, uint32 aDelay, uint32& aCallBkId, bool& aCallBackStatusPending, OsclAny* aContext)
-{
-    const int32 toleranceWndForCallback = 0;
-    bool retval = false;
-    CancelCallBack(aEventNotificationInterface, aCallBkId, aCallBackStatusPending);
-    if (aDelay > 0 && aEventNotificationInterface)
-    {
-
-        PVMFStatus status = aEventNotificationInterface->SetCallbackDeltaTime(aDelay, //delta time in clock when callBack should be called
-                            toleranceWndForCallback,
-                            this, //observer object to be called on timeout
-                            false, //no threadLock
-                            aContext, //no context
-                            aCallBkId); //ID used to identify the timer for cancellation
-        if (PVMFSuccess != status)
-        {
-            aCallBackStatusPending = false;
-            OSCL_ASSERT(false);
-        }
-        else
-        {
-            aCallBackStatusPending = true;
-            retval = true;
-        }
-    }
-    if (aContext)
-    {
-        PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::RequestCallBack callbackId[%d] aContext[0x%x]", aCallBkId, aContext));
-    }
-    PVMF_JBNODE_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::RequestCallBack Out aDelay[%d], aCallBkId[%d] aCallBackStatusPending[%d]", aDelay, aCallBkId, aCallBackStatusPending));
-    return retval;
-}
-
-void PVMFJitterBufferNode::CancelEventCallBack(JB_NOTIFY_CALLBACK aEventType, OsclAny* aContext)
-{
-    PVMF_JBNODE_LOG_EVENTS_CLOCK((0, "[0x%x]PVMFJitterBufferNode::CancelEventCallBack In - Event Type[%d] ", this, aEventType));
-    uint32 callBackId = 0;
-    bool*  callBackPending = NULL;
-    PVMFMediaClockNotificationsInterface *eventNotificationsInf = NULL;
-    switch (aEventType)
-    {
-        case JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED:
-        {
-            callBackId = iIncomingMediaInactivityDurationCallBkId;
-            callBackPending = &iIncomingMediaInactivityDurationCallBkPending;
-            eventNotificationsInf = iNonDecreasingClockNotificationsInf;
-        }
-        break;
-        case JB_NOTIFY_REPORT_BUFFERING_STATUS:
-        {
-            callBackId = iNotifyBufferingStatusCallBkId;
-            callBackPending = &iNotifyBufferingStatusCallBkPending;
-            eventNotificationsInf = iNonDecreasingClockNotificationsInf;
-        }
-        break;
-        case JB_BUFFERING_DURATION_COMPLETE:
-        {
-            callBackId = iJitterBufferDurationCallBkId;
-            callBackPending = &iJitterBufferDurationCallBkPending;
-            eventNotificationsInf = iNonDecreasingClockNotificationsInf;
-        }
-        break;
-        case JB_MONITOR_REBUFFERING:
-        {
-            callBackId = iMonitorReBufferingCallBkId;
-            callBackPending = &iMonitorReBufferingCallBkPending;
-            eventNotificationsInf = iClientPlayBackClockNotificationsInf;
-        }
-        break;
-        case JB_NOTIFY_SEND_FIREWALL_PACKET:
-        {
-            callBackId = iSendFirewallPacketCallBkId;
-            callBackPending = &iSendFirewallPacketCallBkPending;
-            eventNotificationsInf = iNonDecreasingClockNotificationsInf;
-        }
-        break;
-        case JB_NOTIFY_WAIT_FOR_OOO_PACKET_COMPLETE:
-        {
-            if (aContext)
-            {
-                PVMFJitterBufferPortParams * portParams = OSCL_REINTERPRET_CAST(PVMFJitterBufferPortParams *, aContext);
-                callBackId = portParams->iWaitForOOOPacketCallBkId;
-                callBackPending = &(portParams->iWaitForOOOPacketCallBkPending);
-                PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::CancelEventCallBack cancelling Callback for sending OOO data callBackId[%d] , aContext[0x%x]", callBackId, aContext));
-            }
-            eventNotificationsInf = iEstimatedClockNotificationsInf;
-        }
-        break;
-        default:
-            OSCL_ASSERT(false);
-    }
-    CancelCallBack(eventNotificationsInf, callBackId, *callBackPending);
-    PVMF_JBNODE_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::CancelEventCallBack Out - Event Type[%d] CallBackId [%d]", aEventType, callBackId));
-}
-
-void PVMFJitterBufferNode::CancelCallBack(PVMFMediaClockNotificationsInterface *& aEventNotificationInterface, uint32& aCallBkId, bool& aCallBackStatusPending)
-{
-    if (aCallBackStatusPending && aEventNotificationInterface)
-    {
-        aEventNotificationInterface->CancelCallback(aCallBkId, false);
-        aCallBackStatusPending = false;
-    }
-}
-
-bool PVMFJitterBufferNode::IsCallbackPending(JB_NOTIFY_CALLBACK aEventType, OsclAny* aContext)
-{
-    bool*  callBackPending = NULL;
-    PVMFJitterBufferPortParams* portParams = OSCL_REINTERPRET_CAST(PVMFJitterBufferPortParams*, aContext);
-    switch (aEventType)
-    {
-        case JB_INCOMING_MEDIA_INACTIVITY_DURATION_EXPIRED:
-        {
-            callBackPending = &iIncomingMediaInactivityDurationCallBkPending;
-        }
-        break;
-        case JB_NOTIFY_REPORT_BUFFERING_STATUS:
-        {
-            callBackPending = &iNotifyBufferingStatusCallBkPending;
-        }
-        break;
-        case JB_BUFFERING_DURATION_COMPLETE:
-        {
-            callBackPending = &iJitterBufferDurationCallBkPending;
-        }
-        break;
-        case JB_MONITOR_REBUFFERING:
-        {
-            callBackPending = &iMonitorReBufferingCallBkPending;
-        }
-        break;
-        case JB_NOTIFY_SEND_FIREWALL_PACKET:
-        {
-            callBackPending = &iSendFirewallPacketCallBkPending;
-        }
-        break;
-        case JB_NOTIFY_WAIT_FOR_OOO_PACKET_COMPLETE:
-        {
-            callBackPending = &(portParams->iWaitForOOOPacketCallBkPending);
-        }
-        break;
-        default:
-            OSCL_ASSERT(false);
-    }
-    PVMF_JBNODE_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::IsCallbackPending - Event Type[%d] CallBackPending [%d] aContext[0x%x]", aEventType, *callBackPending, aContext));
-    return *callBackPending;
-}
-
-void PVMFJitterBufferNode::ProcessCallBack(uint32 aCallBackID,
-        PVTimeComparisonUtils::MediaTimeStatus aTimerAccuracy,
-        uint32 aDelta,
-        const OsclAny* aContextData,
-        PVMFStatus aStatus)
-{
-    PVMF_JBNODE_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::ProcessCallBack In CallBackId [%d] aDelta[%d]", aCallBackID, aDelta));
-    OSCL_UNUSED_ARG(aDelta);
-    OSCL_UNUSED_ARG(aStatus);
-    OSCL_UNUSED_ARG(aTimerAccuracy);
-
-    PVMFMediaClockNotificationsIntfContext *clockNotificationIntfContext = OSCL_REINTERPRET_CAST(PVMFMediaClockNotificationsIntfContext*, aContextData);
-    if (aCallBackID == iIncomingMediaInactivityDurationCallBkId && (clockNotificationIntfContext->GetMediaClockNotificationsInterface() == iNonDecreasingClockNotificationsInf))
-    {
-        iIncomingMediaInactivityDurationCallBkPending = false;
-        HandleEvent_IncomingMediaInactivityDurationExpired();
-    }
-    if (aCallBackID == iNotifyBufferingStatusCallBkId && (clockNotificationIntfContext->GetMediaClockNotificationsInterface() == iNonDecreasingClockNotificationsInf))
-    {
-        iNotifyBufferingStatusCallBkPending = false;
-        HandleEvent_NotifyReportBufferingStatus();
-    }
-    if (aCallBackID == iJitterBufferDurationCallBkId && (clockNotificationIntfContext->GetMediaClockNotificationsInterface() == iNonDecreasingClockNotificationsInf))
-    {
-        iJitterBufferDurationCallBkPending = false;
-        HandleEvent_JitterBufferBufferingDurationComplete();
-    }
-    if (aCallBackID == iMonitorReBufferingCallBkId && (clockNotificationIntfContext->GetMediaClockNotificationsInterface() == iClientPlayBackClockNotificationsInf))
-    {
-        iMonitorReBufferingCallBkPending = false;
-        HandleEvent_MonitorReBuffering();
-    }
-    if (aCallBackID == iSendFirewallPacketCallBkId && (clockNotificationIntfContext->GetMediaClockNotificationsInterface() == iNonDecreasingClockNotificationsInf))
-    {
-        iSendFirewallPacketCallBkPending = false;
-        HandleEvent_NotifySendFirewallPacket();
-    }
-    if (clockNotificationIntfContext->GetContextData())
-    {
-        PVMFJitterBufferPortParams * portParams = NULL;
-        portParams  = OSCL_REINTERPRET_CAST(PVMFJitterBufferPortParams*, clockNotificationIntfContext->GetContextData());
-        if (aCallBackID == portParams->iWaitForOOOPacketCallBkId && (clockNotificationIntfContext->GetMediaClockNotificationsInterface() == iEstimatedClockNotificationsInf))
-        {
-            portParams->iWaitForOOOPacketCallBkPending = false;
-            HandleEvent_NotifyWaitForOOOPacketComplete(portParams);
-        }
-    }
-    PVMF_JBNODE_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::ProcessCallBack Out"));
-}
-
-void PVMFJitterBufferNode::HandleEvent_IncomingMediaInactivityDurationExpired()
-{
-    PVMF_JBNODE_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::HandleEvent_IncomingMediaInactivityDurationExpired In"));
-    PVUuid eventuuid = PVMFJitterBufferNodeEventTypeUUID;
-    int32 errcode = PVMFJitterBufferNodeRemoteInactivityTimerExpired;
-
-    if (iCurrentCommand.size() > 0)
-    {
-        PVMFJitterBufferNodeCommand cmd = iCurrentCommand.front();
-        CommandComplete(cmd, PVMFFailure, NULL, &eventuuid, &errcode);
-        iCurrentCommand.Erase(&iCurrentCommand.front());
-    }
-    else
-    {
-        ReportInfoEvent(PVMFErrTimeout, NULL, &eventuuid, &errcode);
-        oSessionDurationExpired = true;
-
-        Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-        for (it = iPortParamsQueue.begin();
-                it != iPortParamsQueue.end();
-                it++)
-        {
-            if ((it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT))
-            {
-                it->oUpStreamEOSRecvd = true;
-            }
-        }
-
-        iSessionDurationTimer->Stop();
-        if (IsAdded())
-            RunIfNotReady();
-    }
-
-    PVMF_JBNODE_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::HandleEvent_IncomingMediaInactivityDurationExpired Out"));
-}
-
-void PVMFJitterBufferNode::HandleEvent_NotifyReportBufferingStatus()
-{
-    PVMF_JBNODE_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::HandleEvent_NotifyReportBufferingStatus In"));
-    if (oDelayEstablished == false)
-    {
-        /*
-         * Check to see if the session duration has expired
-         */
-        if (oSessionDurationExpired)
-        {
-            PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferNode::TimeoutOccurred - Session Duration Expired"));
-            /* Force out of rebuffering */
-            Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-            for (it = iPortParamsQueue.begin();
-                    it != iPortParamsQueue.end();
-                    it++)
-            {
-                if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-                {
-                    SendData(it->iPort);
-                }
-            }
-            if (IsAdded())
-            {
-                RunIfNotReady();
-            }
-        }
-        else
-        {
-            ReportInfoEvent(PVMFInfoBufferingStatus);
-            RequestEventCallBack(JB_NOTIFY_REPORT_BUFFERING_STATUS);
-        }
-    }
-    PVMF_JBNODE_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::HandleEvent_NotifyReportBufferingStatus Out"));
-}
-
-void PVMFJitterBufferNode::HandleEvent_JitterBufferBufferingDurationComplete()
-{
-    PVMF_JBNODE_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::HandleEvent_JitterBufferBufferingDurationComplete In"));
-    if (oDelayEstablished == false)
-    {
-        RequestEventCallBack(JB_BUFFERING_DURATION_COMPLETE);
-
-        PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferNode::HandleEvent_JitterBufferBufferingDurationComplete - Trying To Force Out of Buffering"));
-        /* Force out of buffering */
-        PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferNode::HandleEvent_JitterBufferBufferingDurationComplete - Jitter Buffer Duration Expired"));
-        Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-        for (it = iPortParamsQueue.begin();
-                it != iPortParamsQueue.end();
-                it++)
-        {
-            if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-            {
-                SendData(it->iPort);
-            }
-        }
-        if (IsAdded())
-        {
-            RunIfNotReady();
-        }
-    }
-    PVMF_JBNODE_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::HandleEvent_JitterBufferBufferingDurationComplete Out"));
-}
-
-void PVMFJitterBufferNode::HandleEvent_MonitorReBuffering()
-{
-    PVMF_JBNODE_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::HandleEvent_MonitorReBuffering In"));
-    if (oDelayEstablished == true)
-    {
-        PVMF_JBNODE_LOGCLOCK((0, "PVMFJitterBufferNode::PVMFJBJitterBufferDurationTimerEvent - Trying To Force ReBuffering"));
-        Oscl_Vector<PVMFJitterBufferPortParams, PVMFJitterBufferNodeAllocator>::iterator it;
-        for (it = iPortParamsQueue.begin();
-                it != iPortParamsQueue.end();
-                it++)
-        {
-            if (it->tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-            {
-                SendData(it->iPort);
-            }
-        }
-        if (IsAdded())
-        {
-            RunIfNotReady();
-        }
-    }
-    PVMF_JBNODE_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::HandleEvent_MonitorReBuffering Out"));
-}
-
-void PVMFJitterBufferNode::HandleEvent_NotifySendFirewallPacket()
-{
-    PVMF_JBNODE_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::HandleEvent_NotifySendFirewallPacket In"));
-    bool oComplete = false;
-    CheckForFireWallPacketAttempts(oComplete);
-    if (oComplete == false)
-    {
-        SendFireWallPackets();
-    }
-    else
-    {
-        PVMF_JBNODE_LOG_FW((0, "PVMFJitterBufferNode::PvmfFirewallPacketTimerEvent - FW Pkt Exchange Complete"));
-        if (iInterfaceState == EPVMFNodeInitialized)
-        {
-            /* We are past max num attempts */
-            OSCL_ASSERT(!iCurrentCommand.empty());
-            OSCL_ASSERT(iCurrentCommand.front().iCmd == PVMF_JITTER_BUFFER_NODE_PREPARE);
-            CompletePrepare();
-        }
-    }
-    PVMF_JBNODE_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::HandleEvent_NotifySendFirewallPacket Out"));
-}
-
-void PVMFJitterBufferNode::HandleEvent_NotifyWaitForOOOPacketComplete(OsclAny* aContext)
-{
-    OSCL_UNUSED_ARG(aContext);
-    PVMF_JBNODE_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::HandleEvent_NotifyWaitForOOOPacketComplete In iInterfaceState[%d]", iInterfaceState));
-    //Wake up the AO to send data to the connected node
-    PVMF_JBNODE_LOGDATATRAFFIC_OUT((0, "PVMFJitterBufferNode::HandleEvent_NotifyWaitForOOOPacketComplete Sending OOO data %x", aContext));
-    if (IsAdded())
-    {
-        RunIfNotReady();
-    }
-    PVMF_JBNODE_LOG_EVENTS_CLOCK((0, "PVMFJitterBufferNode::HandleEvent_NotifyWaitForOOOPacketComplete Out"));
-}
-
-void PVMFJitterBufferNode::SetJitterBufferSize(uint32 aBufferSz)
-{
-    iJitterBufferSz = aBufferSz;
-}
-
-void PVMFJitterBufferNode::GetJitterBufferSize(uint32& aBufferSz) const
-{
-    aBufferSz = iJitterBufferSz;
-}
-
-void PVMFJitterBufferNode::SetJitterBufferChunkAllocator(OsclMemPoolResizableAllocator* aDataBufferAllocator, const PVMFPortInterface* aPort)
-{
-    for (uint32 i = 0; i < iPortParamsQueue.size(); i++)
-    {
-        if (iPortParamsQueue[i].iPort == aPort)
-        {
-            iPortParamsQueue[i].iBufferAlloc = aDataBufferAllocator;
-            aDataBufferAllocator->addRef();
-        }
-    }
-}
-
-void PVMFJitterBufferNode::SetJitterBufferMemPoolInfo(const PvmfPortBaseImpl* aPort, uint32 aSize, uint32 aResizeSize, uint32 aMaxNumResizes, uint32 aExpectedNumberOfBlocksPerBuffer)
-{
-    PVMFJitterBufferPort* port = OSCL_STATIC_CAST(PVMFJitterBufferPort*, aPort);
-    port->iPortParams->SetJitterBufferMemPoolInfo(aSize, aResizeSize, aMaxNumResizes, aExpectedNumberOfBlocksPerBuffer);
-
-}
-
-void PVMFJitterBufferNode::GetJitterBufferMemPoolInfo(const PvmfPortBaseImpl* aPort, uint32& aSize, uint32& aResizeSize, uint32& aMaxNumResizes, uint32& aExpectedNumberOfBlocksPerBuffer) const
-{
-    PVMFJitterBufferPort* port = OSCL_STATIC_CAST(PVMFJitterBufferPort*, aPort);
-    port->iPortParams->GetJitterBufferMemPoolInfo(aSize, aResizeSize, aMaxNumResizes, aExpectedNumberOfBlocksPerBuffer);
-}
-
-/* computes the max next ts of all tracks */
-PVMFTimestamp PVMFJitterBufferNode::getMaxMediaDataTS()
-{
-    PVMFTimestamp mediaTS = 0;
-    uint32 in_wrap_count = 0;
-    uint32 i;
-
-    for (i = 0; i < iPortParamsQueue.size(); i++)
-    {
-        PVMFJitterBufferPortParams portParams = iPortParamsQueue[i];
-
-        if (portParams.tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-        {
-            if (portParams.iJitterBuffer != NULL)
-            {
-                PVMFTimestamp ts =
-                    portParams.iJitterBuffer->peekMaxElementTimeStamp();
-                /*
-                 * Convert Time stamp to milliseconds
-                 */
-                portParams.mediaClockConverter.set_clock(ts, in_wrap_count);
-                PVMFTimestamp converted_ts =
-                    portParams.mediaClockConverter.get_converted_ts(1000);
-                if (converted_ts > mediaTS)
-                {
-                    mediaTS = converted_ts;
-                }
-            }
-        }
-    }
-    for (i = 0; i < iPortParamsQueue.size(); i++)
-    {
-        PVMFJitterBufferPortParams portParams = iPortParamsQueue[i];
-
-        if (portParams.tag == PVMF_JITTER_BUFFER_PORT_TYPE_INPUT)
-        {
-            if (portParams.eTransportType != PVMF_JITTER_BUFFER_PORT_TRANSPORT_TYPE_ASF)
-            {
-                if (portParams.iJitterBuffer != NULL)
-                {
-                    portParams.iJitterBuffer->SetAdjustedTSInMS(mediaTS);
-                }
-            }
-        }
-    }
-    return mediaTS;
-}
-
 bool PVMFJitterBufferNode::PrepareForPlaylistSwitch()
 {
 #if (PVLOGGER_INST_LEVEL > PVLOGMSG_INST_LLDBG)
     uint32 clientClock32 = 0;
-    uint32 serverClock32 = 0;
     bool overflowFlag = false;
-    if (iClientPlayBackClock != NULL)
-        iClientPlayBackClock->GetCurrentTime32(clientClock32, overflowFlag, PVMF_MEDIA_CLOCK_MSEC);
-    iEstimatedServerClock->GetCurrentTime32(serverClock32, overflowFlag, PVMF_MEDIA_CLOCK_MSEC);
+    ipClientPlayBackClock->GetCurrentTime32(clientClock32, overflowFlag, PVMF_MEDIA_CLOCK_MSEC);
+    uint32 serverClock32 = ipJitterBufferMisc->GetEstimatedServerClockValue();
     PVMF_JBNODE_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::PrepareForPlaylistSwitch - Before - EstServClock=%d",
                                  serverClock32));
     PVMF_JBNODE_LOGCLOCK_REBUFF((0, "PVMFJitterBufferNode::PrepareForPlaylistSwitch - Before - ClientClock=%d",
                                  clientClock32));
 #endif
-    oAutoPause = false;
     iJitterBufferState = PVMF_JITTER_BUFFER_IN_TRANSITION;
-    iClientPlayBackClock->Pause();
+    ipClientPlayBackClock->Pause();
 
     return true;
 }
 
+void PVMFJitterBufferNode::ClockStateUpdated()
+{
+    PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ClockStateUpdated - iClientPlayBackClock[%d]", ipClientPlayBackClock->GetState()));
+    if (!iDelayEstablished)
+    {
+        // Don't let anyone start the clock while
+        // we're rebuffering
+        if (ipClientPlayBackClock != NULL)
+        {
+            if (ipClientPlayBackClock->GetState() == PVMFMediaClock::RUNNING)
+            {
+                PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferNode::ClockStateUpdated - Clock was started during rebuffering.  Pausing..."));
+                ipClientPlayBackClock->Pause();
+            }
+        }
+    }
+}
+
+void PVMFJitterBufferNode::NotificationsInterfaceDestroyed()
+{
+    //noop
+}
diff --git a/nodes/streaming/jitterbuffernode/src/pvmf_jitter_buffer_port.cpp b/nodes/streaming/jitterbuffernode/src/pvmf_jitter_buffer_port.cpp
index d4c562e..d7056d8 100644
--- a/nodes/streaming/jitterbuffernode/src/pvmf_jitter_buffer_port.cpp
+++ b/nodes/streaming/jitterbuffernode/src/pvmf_jitter_buffer_port.cpp
@@ -32,9 +32,6 @@
 #ifndef PVMF_NODE_INTERFACE_H_INCLUDED
 #include "pvmf_node_interface.h"
 #endif
-#ifndef PVMF_STREAMING_BUFFER_ALLOCATORS_H_INCLUDED
-#include "pvmf_streaming_buffer_allocators.h"
-#endif
 #ifndef PVMF_JITTER_BUFFER_H_INCLUDED
 #include "pvmf_jitter_buffer.h"
 #endif
@@ -51,26 +48,26 @@
 #define PVMF_JB_PORT_OVERRIDE 1
 
 ////////////////////////////////////////////////////////////////////////////
-PVMFJitterBufferPort::PVMFJitterBufferPort(int32 aTag, PVMFNodeInterface* aNode, const char*name)
-        : PvmfPortBaseImpl(aTag, aNode, name)
+PVMFJitterBufferPort::PVMFJitterBufferPort(int32 aTag, PVMFJitterBufferNode& aNode, const char*name)
+        : PvmfPortBaseImpl(aTag, &aNode, name)
         , iFormat(PVMF_MIME_FORMAT_UNKNOWN)
+        , irJitterBufferNode(aNode)
 {
-    iJitterBufferNode = OSCL_STATIC_CAST(PVMFJitterBufferNode*, aNode);
     Construct();
 }
 
 ////////////////////////////////////////////////////////////////////////////
-PVMFJitterBufferPort::PVMFJitterBufferPort(int32 aTag, PVMFNodeInterface* aNode
+PVMFJitterBufferPort::PVMFJitterBufferPort(int32 aTag, PVMFJitterBufferNode& aNode
         , uint32 aInCapacity
         , uint32 aInReserve
         , uint32 aInThreshold
         , uint32 aOutCapacity
         , uint32 aOutReserve
         , uint32 aOutThreshold, const char*name)
-        : PvmfPortBaseImpl(aTag, aNode, aInCapacity, aInReserve, aInThreshold, aOutCapacity, aOutReserve, aOutThreshold, name)
+        : PvmfPortBaseImpl(aTag, &aNode, aInCapacity, aInReserve, aInThreshold, aOutCapacity, aOutReserve, aOutThreshold, name)
         , iFormat(PVMF_MIME_FORMAT_UNKNOWN)
+        , irJitterBufferNode(aNode)
 {
-    iJitterBufferNode = OSCL_STATIC_CAST(PVMFJitterBufferNode*, aNode);
     Construct();
 }
 
@@ -80,10 +77,7 @@
     iPortParams = NULL;
     iCounterpartPortParams = NULL;
     iPortCounterpart = NULL;
-    iInPlaceDataProcessing = false;
-    iBufferAlloc = NULL;
-    iBufferNoResizeAlloc = NULL;
-    iLogger = PVLogger::GetLoggerObject("PVMFJitterBufferPort");
+    ipLogger = PVLogger::GetLoggerObject("PVMFJitterBufferPort");
     oscl_memset(&iStats, 0, sizeof(PvmfPortBaseImplStats));
     /*
      * Input ports have tags: 0, 3, 6, ...
@@ -112,22 +106,6 @@
 {
     Disconnect();
     ClearMsgQueues();
-    if (iBufferAlloc != NULL)
-    {
-        iBufferAlloc->DecrementKeepAliveCount();
-        if (iBufferAlloc->getNumOutStandingBuffers() == 0)
-        {
-            OSCL_DELETE((iBufferAlloc));
-        }
-    }
-    if (iBufferNoResizeAlloc != NULL)
-    {
-        iBufferNoResizeAlloc->DecrementKeepAliveCount();
-        if (iBufferNoResizeAlloc->getNumOutStandingBuffers() == 0)
-        {
-            OSCL_DELETE((iBufferNoResizeAlloc));
-        }
-    }
 }
 
 ////////////////////////////////////////////////////////////////////////////
@@ -156,18 +134,15 @@
 
         if (config != NULL)
         {
-            pvmiSetPortAllocatorSync(config,
-                                     PVMF_JITTER_BUFFER_PORT_SPECIFIC_ALLOCATOR_VALTYPE);
-
             int numKvp = 0;
             PvmiKvp* kvpPtr = NULL;
             PVMFStatus status =
                 config->getParametersSync(NULL, (char*)PVMI_PORT_CONFIG_INPLACE_DATA_PROCESSING_KEY, kvpPtr, numKvp, NULL);
             if (status == PVMFSuccess)
             {
-                iInPlaceDataProcessing = kvpPtr[0].value.bool_value;
-                iJitterBufferNode->SetInPlaceProcessingMode(OSCL_STATIC_CAST(PVMFPortInterface*, this),
-                        iInPlaceDataProcessing);
+                bool inPlaceDataProcessing = kvpPtr[0].value.bool_value;
+                irJitterBufferNode.SetInPlaceProcessingMode(OSCL_STATIC_CAST(PVMFPortInterface*, this),
+                        inPlaceDataProcessing);
             }
             config->releaseParameters(NULL, kvpPtr, numKvp);
         }
@@ -192,36 +167,13 @@
         int& num_parameter_elements,
         PvmiCapabilityContext aContext)
 {
+    OSCL_UNUSED_ARG(aIdentifier);
+    OSCL_UNUSED_ARG(aParameters);
     OSCL_UNUSED_ARG(aSession);
     OSCL_UNUSED_ARG(num_parameter_elements);
     OSCL_UNUSED_ARG(aContext);
 
-    PVMF_JBNODE_LOGINFO((0, "PVMFJitterBufferPort::getParametersSync: aSession=0x%x, aIdentifier=%s, aParameters=0x%x, num_parameters_elements=%d, aContext=0x%x",
-                         aSession, aIdentifier, aParameters, num_parameter_elements, aContext));
-
-    if (pv_mime_strcmp(aIdentifier, PVMF_JITTER_BUFFER_PORT_SPECIFIC_ALLOCATOR) != 0)
-    {
-        PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferPort::getParametersSync: Error - Unsupported PvmiKeyType"));
-        return PVMFErrNotSupported;
-    }
-
-    OsclMemAllocator alloc;
-    uint32 strLen = oscl_strlen(PVMF_JITTER_BUFFER_PORT_SPECIFIC_ALLOCATOR_VALTYPE) + 1;
-    uint8* ptr = (uint8*)alloc.allocate(sizeof(PvmiKvp) + strLen);
-    if (!ptr)
-    {
-        PVMF_JBNODE_LOGERROR((0, "PVMFJitterBufferPort::getParametersSync: Error - No memory. Cannot allocate PvmiKvp"));
-        return PVMFErrNoMemory;
-    }
-
-    aParameters = new(ptr) PvmiKvp;
-    ptr += sizeof(PvmiKvp);
-    aParameters->key = (PvmiKeyType)ptr;
-    oscl_strncpy(aParameters->key, PVMF_JITTER_BUFFER_PORT_SPECIFIC_ALLOCATOR_VALTYPE, strLen);
-    aParameters->value.key_specific_value = (OsclAny*)(&iPortDataAlloc);
-    aParameters->length = aParameters->capacity = strLen;
-
-    return PVMFSuccess;
+    return PVMFErrNotSupported;
 }
 
 
@@ -271,28 +223,6 @@
     return PVMFErrNotSupported;
 }
 
-void
-PVMFJitterBufferPort::pvmiSetPortAllocatorSync(PvmiCapabilityAndConfig *aPort,
-        const char* aFormatValType)
-{
-    // Create PvmiKvp for capability settings
-    OsclMemAllocator alloc;
-    PvmiKvp kvp;
-    kvp.key = NULL;
-    kvp.length = oscl_strlen(aFormatValType) + 1; // +1 for \0
-    kvp.capacity = kvp.length;
-    kvp.key = (PvmiKeyType)alloc.ALLOCATE(kvp.length);
-    OsclError::LeaveIfNull(kvp.key);
-    oscl_strncpy(kvp.key, aFormatValType, kvp.length);
-    kvp.value.key_specific_value = (OsclAny*)(&iPortDataAlloc);
-    PvmiKvp* retKvp = NULL; // for return value
-    //ignore leave
-    int32 leavecode = 0;
-    OSCL_TRY(leavecode, aPort->setParametersSync(NULL, &kvp, 1, retKvp););
-    alloc.deallocate((OsclAny*)(kvp.key));
-}
-
-
 ////////////////////////////////////////////////////////////////////////////
 PVMFStatus PVMFJitterBufferPort::QueueOutgoingMsg(PVMFSharedMediaMsgPtr aMsg)
 {
diff --git a/nodes/streaming/jitterbuffernode/src/pvmf_rtcp_timer.cpp b/nodes/streaming/jitterbuffernode/src/pvmf_rtcp_timer.cpp
deleted file mode 100644
index efa0c38..0000000
--- a/nodes/streaming/jitterbuffernode/src/pvmf_rtcp_timer.cpp
+++ /dev/null
@@ -1,140 +0,0 @@
-/* ------------------------------------------------------------------
- * Copyright (C) 1998-2009 PacketVideo
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
- * express or implied.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- * -------------------------------------------------------------------
- */
-/**
- * @file pvmf_rtcp_timer.cpp
- * @brief RTCP timer to Jitter Buffer Node
- */
-#ifndef PVMF_RTCP_TIMER_H_INCLUDED
-#include "pvmf_rtcp_timer.h"
-#endif
-#ifndef PVMF_JITTER_BUFFER_INTERNAL_H_INCLUDED
-#include "pvmf_jitter_buffer_internal.h"
-#endif
-
-#define RTCP_HOLD_DATA_SIZE 2
-
-////////////////////////////////////////////////////////////////////////////
-PvmfRtcpTimer::PvmfRtcpTimer(PvmfRtcpTimerObserver* aObserver)
-        : OsclTimerObject(OsclActiveObject::EPriorityNominal, "PvmfRtcpTimer"),
-        iRTCPTimeIntervalInMicroSecs(DEFAULT_RTCP_INTERVAL_USEC),
-        iObserver(aObserver),
-        iStarted(false)
-{
-    iBufAlloc = NULL;
-    iLogger = PVLogger::GetLoggerObject("PvmfRtcpTimer");
-    AddToScheduler();
-    iRTCPBufAlloc.iRTCPRRMsgBufAlloc = createRTCPRRBufAllocReSize();
-}
-
-////////////////////////////////////////////////////////////////////////////
-PvmfRtcpTimer::~PvmfRtcpTimer()
-{
-    Stop();
-    if (iBufAlloc != NULL)
-    {
-        iBufAlloc->DecrementKeepAliveCount();
-        if (iBufAlloc->getNumOutStandingBuffers() == 0)
-        {
-            OSCL_DELETE((iBufAlloc));
-        }
-    }
-}
-
-////////////////////////////////////////////////////////////////////////////
-PVMFStatus PvmfRtcpTimer::Start()
-{
-    PVMF_JBNODE_LOGINFO((0, "PvmfRtcpTimer::Start"));
-    if (iRTCPTimeIntervalInMicroSecs > 0)
-    {
-        RunIfNotReady(iRTCPTimeIntervalInMicroSecs);
-        iStarted = true;
-        return PVMFSuccess;
-    }
-    else
-    {
-        return PVMFFailure;
-    }
-}
-
-////////////////////////////////////////////////////////////////////////////
-PVMFStatus PvmfRtcpTimer::setRTCPInterval(uint32 rtcpTimeIntervalInMicroSecs)
-{
-    PVMF_JBNODE_LOGINFO((0, "PvmfRtcpTimer::ResetRTCPInterval"));
-    iRTCPTimeIntervalInMicroSecs = rtcpTimeIntervalInMicroSecs;
-    return PVMFSuccess;
-}
-
-////////////////////////////////////////////////////////////////////////////
-PVMFStatus PvmfRtcpTimer::Stop()
-{
-    PVMF_JBNODE_LOGINFO((0, "PvmfRtcpTimer::Stop"));
-    Cancel();
-    iStarted = false;
-    return PVMFSuccess;
-}
-
-////////////////////////////////////////////////////////////////////////////
-void PvmfRtcpTimer::Run()
-{
-    PVMF_JBNODE_LOGINFO((0, "PvmfRtcpTimer::Run"));
-
-    if (!iStarted)
-        return;
-
-    if (!iObserver)
-    {
-        PVMF_JBNODE_LOGERROR((0, "PvmfRtcpTimer::Run: Error - Observer not set"));
-        return;
-    }
-
-    iObserver->RtcpTimerEvent(this);
-    /*
-     * Do not reschudule the AO here. Observer would reschedule this AO
-     * once it is done processing the timer event.
-     */
-}
-
-OsclSharedPtr<PVMFSharedSocketDataBufferAlloc>
-PvmfRtcpTimer::createRTCPRRBufAllocReSize()
-{
-    uint8* my_ptr;
-    OsclRefCounter* my_refcnt;
-    OsclMemAllocator my_alloc;
-    PVMFSharedSocketDataBufferAlloc *alloc_ptr = NULL;
-
-    uint aligned_socket_alloc_size =
-        oscl_mem_aligned_size(sizeof(PVMFSMSharedBufferAllocWithReSize));
-
-    uint aligned_refcnt_size =
-        oscl_mem_aligned_size(sizeof(OsclRefCounterSA<PVMFSharedSocketDataBufferAllocCleanupSA>));
-
-    my_ptr = (uint8*) my_alloc.ALLOCATE(aligned_refcnt_size +
-                                        aligned_socket_alloc_size);
-
-    my_refcnt = OSCL_PLACEMENT_NEW(my_ptr, OsclRefCounterSA<PVMFSharedSocketDataBufferAllocCleanupSA>(my_ptr));
-    my_ptr += aligned_refcnt_size;
-
-    iBufAlloc =
-        OSCL_NEW(PVMFSMSharedBufferAllocWithReSize, (DEFAULT_RTCP_SOCKET_MEM_POOL_SIZE_IN_BYTES, "PVMFRTCPRRMemPool"));
-
-    alloc_ptr = OSCL_PLACEMENT_NEW(my_ptr, PVMFSharedSocketDataBufferAlloc(iBufAlloc));
-
-    OsclSharedPtr<PVMFSharedSocketDataBufferAlloc> shared_alloc(alloc_ptr, my_refcnt);
-
-    return shared_alloc;
-}
diff --git a/nodes/streaming/medialayernode/src/pvmf_medialayer_node.cpp b/nodes/streaming/medialayernode/src/pvmf_medialayer_node.cpp
index 1646292..15419b9 100644
--- a/nodes/streaming/medialayernode/src/pvmf_medialayer_node.cpp
+++ b/nodes/streaming/medialayernode/src/pvmf_medialayer_node.cpp
@@ -115,9 +115,9 @@
              iCapability.iHasMaxNumberOfPorts = false;
              iCapability.iMaxNumberOfPorts = 0; /* no maximum */
 
-             iCapability.iInputFormatCapability.push_back(PVMFFormatType(PVMF_MIME_RTP));
-             iCapability.iOutputFormatCapability.push_back(PVMFFormatType(PVMF_MIME_M4V));
-             iCapability.iOutputFormatCapability.push_back(PVMFFormatType(PVMF_MIME_AMR_IETF));
+             iCapability.iInputFormatCapability.push_back(PVMF_MIME_RTP);
+             iCapability.iOutputFormatCapability.push_back(PVMF_MIME_M4V);
+             iCapability.iOutputFormatCapability.push_back(PVMF_MIME_AMR_IETF);
 
             );
 
@@ -717,7 +717,8 @@
                 iPortVector[i]->ClearMsgQueues();
                 PVMFMediaLayerPortContainer* portContainerPtr = NULL;
                 GetPortContainer(iPortVector[i], portContainerPtr);
-                portContainerPtr->ResetParams();
+                if (portContainerPtr)
+                    portContainerPtr->ResetParams();
             }
         }
         /* Intentional fall thru */
@@ -2638,12 +2639,12 @@
             }
             PVMF_MLNODE_LOGDATATRAFFIC_OUT((0,
                                             "PVMFMediaLayerNode::dispatchAccessUnits: "
-                                            "SSRC=%d, MimeType=%s SIZE=%d, TS=%d, SEQNUM=%d, MBIT=%d, KEY=%d, Clock=%d",
+                                            "SSRC=%d, MimeType=%s SIZE=%d, TS=%d, SEQNUM=%d, MBIT=%d, KEY=%d, Clock=%d Delta=%d",
                                             msgOut->getStreamID(), poutPort->iMimeType.get_cstr(),
                                             size, msgOut->getTimestamp(), msgOut->getSeqNum(),
                                             (mediaDataOut->getMarkerInfo() & PVMF_MEDIA_DATA_MARKER_INFO_M_BIT),
                                             (mediaDataOut->getMarkerInfo() & PVMF_MEDIA_DATA_MARKER_INFO_RANDOM_ACCESS_POINT_BIT),
-                                            clientClock32));
+                                            clientClock32, (msgOut->getTimestamp() - clientClock32)));
 #endif
         }
     }
@@ -3394,6 +3395,7 @@
         if (oRepositioning)
         {
             it->iPort->ClearMsgQueues();
+            it->vAccessUnits.clear();
         }
 
         if (it->tag == PVMF_MEDIALAYER_PORT_TYPE_INPUT)
diff --git a/nodes/streaming/streamingmanager/Android.mk b/nodes/streaming/streamingmanager/Android.mk
index 0e2b872..b5d5542 100644
--- a/nodes/streaming/streamingmanager/Android.mk
+++ b/nodes/streaming/streamingmanager/Android.mk
@@ -45,9 +45,12 @@
  	$(PV_TOP)/nodes/pvpvrnode/src \
  	$(PV_TOP)/fileformats/pvr/composer/include \
  	$(PV_TOP)/nodes/streaming/streamingmanager/plugins/common/include \
+ 	$(PV_TOP)/nodes/streaming/jitterbuffernode/jitterbuffer/common/include \
  	$(PV_TOP)/nodes/streaming/streamingmanager/config/3gpp \
+ 	$(PV_TOP)/nodes/streaming/jitterbuffernode/jitterbuffer/rtp/include \
  	$(PV_TOP)/protocols/rtsp_client_engine/src \
  	$(PV_TOP)/nodes/streaming/streamingmanager/plugins/rtspunicast/include \
+ 	$(PV_TOP)/nodes/streaming/jitterbuffernode/jitterbuffer/rtp/include \
  	$(PV_INCLUDES)
 
 LOCAL_COPY_HEADERS_TO := $(PV_COPY_HEADERS_TO)
diff --git a/nodes/streaming/streamingmanager/build/linux_3gpp/local.mk b/nodes/streaming/streamingmanager/build/linux_3gpp/local.mk
new file mode 100644
index 0000000..0ca5a8f
--- /dev/null
+++ b/nodes/streaming/streamingmanager/build/linux_3gpp/local.mk
@@ -0,0 +1,43 @@
+# Get the current local path as the first operation
+LOCAL_PATH := $(call get_makefile_dir)
+
+# Clear out the variables used in the local makefiles
+include $(MK)/clear.mk
+
+TARGET := pvstreamingmanagernode_3gpp
+
+XCXXFLAGS += $(FLAG_COMPILE_WARNINGS_AS_ERRORS)
+
+
+XINCDIRS += ../../../common/include ../../../jitterbuffernode/include ../../../jitterbuffernode/include ../../../medialayernode/include ../../../../../protocols/rtp/src ../../../../common/include ../../../../../protocols/sdp/common/include ../../../../../fileformats/asf/parser/include ../../../../../fileformats/rmff_type_specific_parser/src ../../../../../protocols/rdt_parser/realchallenge/include ../../../../../pvmi/content_policy_manager/include ../../../../../pvmi/content_policy_manager/plugins/common/include ../../../../../nodes/pvrtppacketsourcenode/include ../../../../../pvmi/pvmf/include ../../../../../protocols/rtp_payload_parser/rfc_3640/include ../../../../../nodes/pvpvr/include ../../../../../nodes/pvpvr/src ../../../../../nodes/pvpvrnode/include ../../../../../nodes/pvpvrnode/src ../../../../../fileformats/pvr/composer/include
+# For picking the configurations of JB and ML in the pvmf_sm_config.h
+XINCDIRS += ../../config/3gpp
+XINCDIRS += ../../plugins/common/include
+
+XINCDIRS += ../../../../../protocols/rtsp_client_engine/src
+XINCDIRS += ../../plugins/rtspunicast/include
+
+
+
+SRCDIR := ../../src
+INCSRCDIR := ../../include
+
+# compose final src list for actual build
+#BCH
+
+SRCS :=  pvmf_sm_node_factory.cpp pvmf_streaming_manager_node.cpp 		
+
+#FSP Base
+SRCS +=	../config/3gpp/pvmf_sm_fsp_registry.cpp 
+SRCS +=	../plugins/common/src/pvmf_sm_fsp_base_impl.cpp 
+SRCS +=	../plugins/common/src/pvmf_sm_fsp_base_cpm_support.cpp 
+
+#RTSP Unicast Plugin
+SRCS +=	../plugins/rtspunicast/src/pvmf_sm_rtsp_unicast_node_factory.cpp 
+SRCS +=	../plugins/rtspunicast/src/pvmf_sm_fsp_rtsp_unicast.cpp 
+
+HDRS :=  pvmf_sm_node_events.h \
+         pvmf_sm_node_factory.h
+
+include $(MK)/library.mk
+
diff --git a/nodes/streaming/streamingmanager/build/make_segments/3gpp.mk b/nodes/streaming/streamingmanager/build/make_segments/3gpp.mk
index 9811c56..1ca4fdc 100644
--- a/nodes/streaming/streamingmanager/build/make_segments/3gpp.mk
+++ b/nodes/streaming/streamingmanager/build/make_segments/3gpp.mk
@@ -1,6 +1,7 @@
 
 #FSP Base
 XINCDIRS += -I../../config/3gpp
+XINCDIRS += -I../../../../streaming/jitterbuffernode/jitterbuffer/rtp/include
 
 SRCS += ../config/3gpp/pvmf_sm_fsp_registry.cpp
 SRCS += ../plugins/common/src/pvmf_sm_fsp_base_impl.cpp
diff --git a/nodes/streaming/streamingmanager/build/make_segments/local.mk b/nodes/streaming/streamingmanager/build/make_segments/local.mk
index f636774..1883b9e 100644
--- a/nodes/streaming/streamingmanager/build/make_segments/local.mk
+++ b/nodes/streaming/streamingmanager/build/make_segments/local.mk
@@ -11,7 +11,7 @@
 
 XINCDIRS += ../../../common/include ../../../jitterbuffernode/include ../../../jitterbuffernode/include ../../../medialayernode/include ../../../../../protocols/rtp/src ../../../../common/include ../../../../../protocols/sdp/common/include ../../../../../fileformats/asf/parser/include ../../../../../fileformats/rmff_type_specific_parser/src ../../../../../protocols/rdt_parser/realchallenge/include ../../../../../pvmi/content_policy_manager/include ../../../../../pvmi/content_policy_manager/plugins/common/include ../../../../../nodes/pvrtppacketsourcenode/include ../../../../../pvmi/pvmf/include ../../../../../protocols/rtp_payload_parser/rfc_3640/include ../../../../../nodes/pvpvr/include ../../../../../nodes/pvpvr/src ../../../../../nodes/pvpvrnode/include ../../../../../nodes/pvpvrnode/src ../../../../../fileformats/pvr/composer/include
 XINCDIRS += ../../plugins/common/include
-
+XINCDIRS += -I../../../../streaming/jitterbuffernode/jitterbuffer/common/include
 
 
 
diff --git a/nodes/streaming/streamingmanager/build/make_segments/rtspunicast.mk b/nodes/streaming/streamingmanager/build/make_segments/rtspunicast.mk
index 859c5d7..1ead408 100644
--- a/nodes/streaming/streamingmanager/build/make_segments/rtspunicast.mk
+++ b/nodes/streaming/streamingmanager/build/make_segments/rtspunicast.mk
@@ -2,6 +2,7 @@
 
 XINCDIRS += -I../../../../../protocols/rtsp_client_engine/src
 XINCDIRS += -I../../plugins/rtspunicast/include
+XINCDIRS += -I../../../../streaming/jitterbuffernode/jitterbuffer/rtp/include
 
 SRCS += ../plugins/rtspunicast/src/pvmf_sm_rtsp_unicast_node_factory.cpp
 SRCS += ../plugins/rtspunicast/src/pvmf_sm_fsp_rtsp_unicast.cpp
diff --git a/nodes/streaming/streamingmanager/include/pvmf_sm_node_events.h b/nodes/streaming/streamingmanager/include/pvmf_sm_node_events.h
index 3125dee..159efb6 100644
--- a/nodes/streaming/streamingmanager/include/pvmf_sm_node_events.h
+++ b/nodes/streaming/streamingmanager/include/pvmf_sm_node_events.h
@@ -62,23 +62,6 @@
     PVMFJitterBufferNodeErrorEventEnd
 } PVMFJitterBufferNodeErrorEventType;
 
-/**
- * An enumeration of info codes from PVMFJitterBufferNode
- **/
-typedef enum
-{
-    PVMFJitterBufferNodeInfoEventStart = 8192,
-    PVMFJitterBufferNodeJitterBufferFull,
-    PVMFJitterBufferNodeTrackEOSReached,
-    PVMFJitterBufferNodeExcercisingPortFlowControl,
-    PVMFJitterBufferNodeRTCPBYERecvd,
-    PVMFJitterBufferNodeJitterBufferLowWaterMarkReached,
-    PVMFJitterBufferNodeJitterBufferHighWaterMarkReached,
-    PVMFJitterBufferNodeStreamThinningRecommended,
-    PVMFJitterBufferNodeRTCPDataProcessed,
-    PVMFJitterBufferNodeInfoEventEnd
-} PVMFJitterBufferNodeInfoEventType;
-
 #define PVMFMediaLayerNodeEventTypeUUID PVUuid(0xaf589e87,0xa76b,0x406d,0xac,0xf7,0x9d,0x79,0xda,0x4e,0x78,0xde)
 /**
  * An enumeration of error codes from PVMFMediaLayerNode
diff --git a/nodes/streaming/streamingmanager/plugins/common/include/pvmf_sm_fsp_base_impl.h b/nodes/streaming/streamingmanager/plugins/common/include/pvmf_sm_fsp_base_impl.h
index 040d74c..e75574d 100644
--- a/nodes/streaming/streamingmanager/plugins/common/include/pvmf_sm_fsp_base_impl.h
+++ b/nodes/streaming/streamingmanager/plugins/common/include/pvmf_sm_fsp_base_impl.h
@@ -70,6 +70,7 @@
 #include "pvmf_sm_fsp_base_types.h"
 #endif
 
+class JitterBufferFactory;
 
 
 #ifndef PVLOGGER_H_INCLUDED
@@ -435,6 +436,8 @@
         PVMFStatus GetMaxSizeValue(char* aString, uint32& aMaxSize);
         PVMFStatus GetTruncateFlagValue(char* aString, uint32& aTruncateFlag);
 
+        JitterBufferFactory* iJBFactory;
+
         //CPM related
         bool iPreviewMode;
         bool iUseCPMPluginRegistry;
diff --git a/nodes/streaming/streamingmanager/plugins/common/include/pvmf_sm_fsp_pvr_base_impl.h b/nodes/streaming/streamingmanager/plugins/common/include/pvmf_sm_fsp_pvr_base_impl.h
index ae0ee28..2db5d93 100644
--- a/nodes/streaming/streamingmanager/plugins/common/include/pvmf_sm_fsp_pvr_base_impl.h
+++ b/nodes/streaming/streamingmanager/plugins/common/include/pvmf_sm_fsp_pvr_base_impl.h
@@ -38,10 +38,6 @@
 #include "pvmf_jitter_buffer_port.h"
 #endif
 
-#ifndef PVMF_DATA_SOURCE_PACKETSOURCE_H_INCLUDED
-#include "pvmf_data_source_packetsource.h"
-#endif
-
 #define PVMF_SM_FSP_PVR_BASE_LOGSTACKTRACE(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG,iSMBaseLogger,PVLOGMSG_STACK_TRACE,m);
 #define PVMF_SM_FSP_PVR_BASE_LOGDEBUG(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG,iSMBaseLogger,PVLOGMSG_DEBUG,m);
 #define PVMF_SM_FSP_PVR_BASE_LOGERR(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG,iSMBaseLogger,PVLOGMSG_ERR,m);
diff --git a/nodes/streaming/streamingmanager/plugins/common/include/pvmf_sm_fsp_registry_interface.h b/nodes/streaming/streamingmanager/plugins/common/include/pvmf_sm_fsp_registry_interface.h
index d90e70f..72fb547 100644
--- a/nodes/streaming/streamingmanager/plugins/common/include/pvmf_sm_fsp_registry_interface.h
+++ b/nodes/streaming/streamingmanager/plugins/common/include/pvmf_sm_fsp_registry_interface.h
@@ -50,11 +50,8 @@
 #include "pvmf_format_type.h"
 #endif
 
-#define PVMF_MIME_DATA_SOURCE_PVR_FILEPLAYBACK		"X-PVMF-DATA-SRC-PVR-FILEPLAYBACK"
-#define PVMF_MIME_DATA_SOURCE_RTSP_TUNNELLING		"X-PVMF-DATA-SRC-RTSP-TUNNELLING"
-#define PVMF_MIME_DATA_SOURCE_RTSP_BROADCAST			"X-PVMF-DATA-SRC-RTSP-BROADCAST"
-#define PVMF_MIME_DATA_SOURCE_RTSP_UNICAST_PLUS_PVR  "X-PVMF-DATA-SRC-RTSP-UNICAST-PLUS-PVR"
 
+#define PVMF_MIME_DATA_SOURCE_RTSP_TUNNELLING		"X-PVMF-DATA-SRC-RTSP-TUNNELLING"
 
 // FORWARD DECLARATION
 class OsclSharedLibrary;
diff --git a/nodes/streaming/streamingmanager/plugins/common/src/pvmf_sm_fsp_base_impl.cpp b/nodes/streaming/streamingmanager/plugins/common/src/pvmf_sm_fsp_base_impl.cpp
index 3b434ee..d29a7d3 100644
--- a/nodes/streaming/streamingmanager/plugins/common/src/pvmf_sm_fsp_base_impl.cpp
+++ b/nodes/streaming/streamingmanager/plugins/common/src/pvmf_sm_fsp_base_impl.cpp
@@ -43,6 +43,10 @@
 #include "oscl_snprintf.h"
 #endif
 
+#ifndef PVMF_JITTER_BUFFER_FACTORY_H
+#include "pvmf_jitter_buffer_factory.h"
+#endif
+
 //////////////////////////////////////////////////
 // Node Constructor & Destructor
 //////////////////////////////////////////////////
@@ -2439,6 +2443,12 @@
         it->iOutputPorts.clear();
         it->iFeedBackPorts.clear();
     }
+
+    if (aReleaseMem)
+    {
+        OSCL_DELETE(iJBFactory);
+    }
+    iJBFactory = NULL;
 }
 
 void PVMFSMFSPBaseNode::ResetCPMParams(bool aReleaseMem)
@@ -2486,7 +2496,6 @@
     iPVMFStreamingManagerNodeMetadataValueCount = 0;
 
     iCPMSourceData.iRefCounter = 0;
-    iCPMSourceData.iUseCPMPluginRegistry = false;
     iCPMSourceData.iFileHandle	= NULL;
     iCPMSourceData.iStreamStatsLoggingURL = _STRLIT("");
     iCPMSourceData.iPreviewMode = false;
diff --git a/nodes/streaming/streamingmanager/plugins/common/src/pvmf_sm_fsp_pvr_base_impl.cpp b/nodes/streaming/streamingmanager/plugins/common/src/pvmf_sm_fsp_pvr_base_impl.cpp
index fdb1baa..7d88230 100644
--- a/nodes/streaming/streamingmanager/plugins/common/src/pvmf_sm_fsp_pvr_base_impl.cpp
+++ b/nodes/streaming/streamingmanager/plugins/common/src/pvmf_sm_fsp_pvr_base_impl.cpp
@@ -784,8 +784,10 @@
         return;
     }
 
-    if ((iSessionSourceInfo->_sessionType == PVMF_MIME_DATA_SOURCE_RTSP_URL) ||
-            (iSessionSourceInfo->_sessionType == PVMF_MIME_DATA_SOURCE_SDP_FILE))
+    if ((iSessionSourceInfo->_sessionType == PVMF_MIME_DATA_SOURCE_RTSP_PVR_FCS_URL) ||
+            (iSessionSourceInfo->_sessionType == PVMF_MIME_DATA_SOURCE_SDP_PVR_FCS_FILE) ||
+            (iSessionSourceInfo->_sessionType == PVMF_MIME_DATA_SOURCE_SDP_BROADCAST)   ||
+            (iSessionSourceInfo->_sessionType == PVMF_MIME_DATA_PVRFF))
     {
 
         iActualMediaDataTS = jbExtIntf->getActualMediaDataTSAfterSeek();
@@ -1878,9 +1880,10 @@
      */
     int32 portTagStart = portType;
 
-    if ((iSessionSourceInfo->_sessionType == PVMF_MIME_DATA_SOURCE_RTSP_URL)
-            || (iSessionSourceInfo->_sessionType == PVMF_MIME_DATA_SOURCE_SDP_FILE)
-       )
+    if ((iSessionSourceInfo->_sessionType == PVMF_MIME_DATA_SOURCE_RTSP_PVR_FCS_URL) ||
+            (iSessionSourceInfo->_sessionType == PVMF_MIME_DATA_SOURCE_SDP_PVR_FCS_FILE) ||
+            (iSessionSourceInfo->_sessionType == PVMF_MIME_DATA_SOURCE_SDP_BROADCAST) ||
+            (iSessionSourceInfo->_sessionType == PVMF_MIME_DATA_PVRFF))
     {
         for (uint32 i = 0; i < iTrackInfoVec.size(); i++)
         {
@@ -1942,9 +1945,10 @@
      */
     int32 portTagStart = portType;
 
-    if ((iSessionSourceInfo->_sessionType == PVMF_MIME_DATA_SOURCE_RTSP_URL)
-            || (iSessionSourceInfo->_sessionType == PVMF_MIME_DATA_SOURCE_SDP_FILE)
-       )
+    if ((iSessionSourceInfo->_sessionType == PVMF_MIME_DATA_SOURCE_RTSP_PVR_FCS_URL) ||
+            (iSessionSourceInfo->_sessionType == PVMF_MIME_DATA_SOURCE_SDP_PVR_FCS_FILE) ||
+            (iSessionSourceInfo->_sessionType == PVMF_MIME_DATA_SOURCE_SDP_BROADCAST) ||
+            (iSessionSourceInfo->_sessionType == PVMF_MIME_DATA_PVRFF))
     {
         for (uint32 i = 0; i < iTrackInfoVec.size(); i++)
         {
@@ -2879,12 +2883,6 @@
             OSCL_STATIC_CAST(PVMFCPMPluginLicenseInterface*, this);
         *ptr = OSCL_STATIC_CAST(PVInterface*, interimPtr);
     }
-    else if (*uuid == PVMF_DATA_SOURCE_PACKETSOURCE_INTERFACE_UUID)
-    {
-        PVMFDataSourcePacketSourceInterface* interimPtr =
-            OSCL_STATIC_CAST(PVMFDataSourcePacketSourceInterface*, this);
-        *ptr = OSCL_STATIC_CAST(PVInterface*, interimPtr);
-    }
     else
     {
         *ptr = NULL;
diff --git a/nodes/streaming/streamingmanager/plugins/rtspunicast/src/pvmf_sm_fsp_rtsp_unicast.cpp b/nodes/streaming/streamingmanager/plugins/rtspunicast/src/pvmf_sm_fsp_rtsp_unicast.cpp
index 8286f7b..ed8c6bf 100644
--- a/nodes/streaming/streamingmanager/plugins/rtspunicast/src/pvmf_sm_fsp_rtsp_unicast.cpp
+++ b/nodes/streaming/streamingmanager/plugins/rtspunicast/src/pvmf_sm_fsp_rtsp_unicast.cpp
@@ -101,6 +101,8 @@
 #include "sdp_mediaparser_registry_populator.h"
 #endif
 
+#include "pvmf_rtp_jitter_buffer_factory.h"
+
 /**
 ///////////////////////////////////////////////////////////////////////////////
 // Node Constructor & Destructor
@@ -226,7 +228,8 @@
      */
     OsclExclusivePtr<PVMFNodeInterface> jitterBufferNodeAutoPtr;
     PVMFNodeInterface* iJitterBufferNode;
-    iJitterBufferNode = OSCL_NEW(PVMFJitterBufferNode, (OsclActiveObject::EPriorityNominal));
+    iJBFactory = OSCL_NEW(RTPJitterBufferFactory, ());
+    iJitterBufferNode = OSCL_NEW(PVMFJitterBufferNode, (OsclActiveObject::EPriorityNominal, iJBFactory));
 
     jitterBufferNodeAutoPtr.set(iJitterBufferNode);
 
@@ -521,7 +524,26 @@
         case PVMF_SMFSP_NODE_PAUSE:
             if (iPauseDenied)
             {
-                CommandComplete(iInputCommands, aCmd, PVMFErrNotSupported);
+                //Check with the jitter buffer node if the session is already expired?
+                bool isSessionDurationExpired = false;
+                PVMFSMFSPChildNodeContainer* jitterBufferNodeContainer =
+                    getChildNodeContainer(PVMF_SM_FSP_JITTER_BUFFER_NODE);
+                if (jitterBufferNodeContainer)
+                {
+                    PVMFJitterBufferExtensionInterface* jbExtIntf =
+                        OSCL_STATIC_CAST(PVMFJitterBufferExtensionInterface*, jitterBufferNodeContainer->iExtensions.front());
+                    if (jbExtIntf)
+                        jbExtIntf->HasSessionDurationExpired(isSessionDurationExpired);
+                }
+
+                if (isSessionDurationExpired)
+                {
+                    DoPause(aCmd);
+                }
+                else
+                {
+                    CommandComplete(iInputCommands, aCmd, PVMFErrNotSupported);
+                }
             }
             else
             {
@@ -924,7 +946,7 @@
 
         /* Get File Size */
         osclFile.Seek(0, Oscl_File::SEEKEND);
-        int32 fileSize = osclFile.Tell();
+        int32 fileSize = (TOsclFileOffsetInt32)osclFile.Tell();
         osclFile.Seek(0, Oscl_File::SEEKSET);
 
         if (fileSize <= 0)
@@ -3331,7 +3353,7 @@
             PVMFStreamingDataSource* opaqueData =
                 OSCL_STATIC_CAST(PVMFStreamingDataSource*, streamingDataSrc);
             iPreviewMode = opaqueData->iPreviewMode;
-            iUseCPMPluginRegistry = opaqueData->iUseCPMPluginRegistry;
+            iUseCPMPluginRegistry = true;
             iCPMSourceData.iPreviewMode = iPreviewMode;
             iCPMSourceData.iIntent = opaqueData->iIntent;
         }
@@ -3348,7 +3370,7 @@
                     PVMFSourceContextDataCommon* cContext =
                         OSCL_STATIC_CAST(PVMFSourceContextDataCommon*, commonDataContext);
                     iPreviewMode = cContext->iPreviewMode;
-                    iUseCPMPluginRegistry = cContext->iUseCPMPluginRegistry;
+                    iUseCPMPluginRegistry = true;
                     PVMFSourceContextData* sContext =
                         OSCL_STATIC_CAST(PVMFSourceContextData*, sourceDataContext);
                     iSourceContextData = *sContext;
@@ -3371,7 +3393,15 @@
             iCPM = NULL;
         }
         iCPM = PVMFCPMFactory::CreateContentPolicyManager(*this);
-        iCPM->ThreadLogon();
+        //thread logon may leave if there are no plugins
+        int32 err;
+        OSCL_TRY(err, iCPM->ThreadLogon(););
+        OSCL_FIRST_CATCH_ANY(err,
+                             iCPM->ThreadLogoff();
+                             PVMFCPMFactory::DestroyContentPolicyManager(iCPM);
+                             iCPM = NULL;
+                             iUseCPMPluginRegistry = false;
+                            );
     }
 
     //to set the sessionsource info and configure session controller node [RTSP client], with the session type
diff --git a/nodes/streaming/streamingmanager/src/pvmf_streaming_manager_extension_interface.cpp b/nodes/streaming/streamingmanager/src/pvmf_streaming_manager_extension_interface.cpp
index 6300ab9..fd6522b 100644
--- a/nodes/streaming/streamingmanager/src/pvmf_streaming_manager_extension_interface.cpp
+++ b/nodes/streaming/streamingmanager/src/pvmf_streaming_manager_extension_interface.cpp
@@ -264,13 +264,6 @@
         iface = OSCL_STATIC_CAST(PVInterface*, interimPtr);
         return true;
     }
-    else if (uuid == PVMF_DATA_SOURCE_PACKETSOURCE_INTERFACE_UUID)
-    {
-        PVMFDataSourcePacketSourceInterface* interimPtr =
-            OSCL_STATIC_CAST(PVMFDataSourcePacketSourceInterface*, this);
-        iface = OSCL_STATIC_CAST(PVInterface*, interimPtr);
-        return true;
-    }
     else if (uuid == PvmfDataSourcePlaybackControlUuid)
     {
         PvmfDataSourcePlaybackControlInterface* interimPtr =
diff --git a/nodes/streaming/streamingmanager/src/pvmf_streaming_manager_internal.h b/nodes/streaming/streamingmanager/src/pvmf_streaming_manager_internal.h
index d6b9b0d..d1f90b8 100644
--- a/nodes/streaming/streamingmanager/src/pvmf_streaming_manager_internal.h
+++ b/nodes/streaming/streamingmanager/src/pvmf_streaming_manager_internal.h
@@ -63,9 +63,7 @@
 #ifndef PVMF_CPMPLUGIN_LICENSE_INTERFACE_H_INCLUDED
 #include "pvmf_cpmplugin_license_interface.h"
 #endif
-#ifndef PVMF_DATA_SOURCE_PACKETSOURCE_H_INCLUDED
-#include "pvmf_data_source_packetsource.h"
-#endif
+
 /**
  * Macros for calling PVLogger
  */
@@ -370,8 +368,7 @@
             public PvmfDataSourcePlaybackControlInterface,
             public PVMFMetadataExtensionInterface,
             public PvmiCapabilityAndConfig,
-            public PVMFCPMPluginLicenseInterface,
-            public PVMFDataSourcePacketSourceInterface
+            public PVMFCPMPluginLicenseInterface
 {
     public:
         PVMFStreamingManagerExtensionInterfaceImpl(PVMFStreamingManagerNode*,
@@ -572,16 +569,10 @@
         OSCL_IMPORT_REF void removeRef();
         OSCL_IMPORT_REF bool queryInterface(const PVUuid& uuid, PVInterface*& iface);
 
-        /*
-         * From PVMFDataSourcePacketSourceInterface
-         */
-        OSCL_IMPORT_REF PVMFStatus setPacketSourceInterface(PVMFPacketSource* aPacketSource);
-
     private:
         PVMFSessionId iSessionId;
         PVMFStreamingManagerNode *iContainer;
         friend class PVMFStreamingManagerNode;
-        PVMFPacketSource *iPacketSource;
 };
 
 #endif
diff --git a/nodes/streaming/streamingmanager/src/pvmf_streaming_manager_node.cpp b/nodes/streaming/streamingmanager/src/pvmf_streaming_manager_node.cpp
index f6dc947..95d69dd 100644
--- a/nodes/streaming/streamingmanager/src/pvmf_streaming_manager_node.cpp
+++ b/nodes/streaming/streamingmanager/src/pvmf_streaming_manager_node.cpp
@@ -402,7 +402,10 @@
     PVMF_SM_LOGSTACKTRACE((0, "PVMFStreamingManagerNode::Pause - In"));
 
     if (!iSMFSPlugin)
+    {
+        PVMF_SM_LOGSTACKTRACE((0, "PVMFStreamingManagerNode::Pause - FSP was not existing"));
         OSCL_LEAVE(OsclErrInvalidState);
+    }
 
     PVMFCommandId cmdId = 0;
     cmdId = iSMFSPlugin->Pause(aSessId, aContext);
@@ -488,6 +491,7 @@
         PVMFFormatType& aSourceFormat,
         OsclAny* aSourceData)
 {
+    PVMF_SM_LOGSTACKTRACE((0, "PVMFStreamingManagerNode::SetSourceInitializationData() In"));
     PVMFStatus status = PVMFFailure;
     //we may have the sequence like
     //Reset->queryinterface(PVMFDataSourceInitializationExtensionInterface)->PVMFDataSourceInitializationExtensionInterface::SetSourceInitializationData
@@ -502,7 +506,7 @@
                 iFSPDataSourceInitializationIntf->removeRef();
                 iFSPDataSourceInitializationIntf = NULL;
             }
-            OSCL_ASSERT(iSMFSPRegistry->ReleaseSMFSP(iFSPUuid, iSMFSPlugin));
+            iSMFSPRegistry->ReleaseSMFSP(iFSPUuid, iSMFSPlugin);
             iSMFSPlugin = NULL;
         }
     }
@@ -517,80 +521,6 @@
             fspSrcFormat = PVMF_MIME_DATA_SOURCE_RTSP_TUNNELLING;
         }
     }
-    if (fspSrcFormat != PVMF_MIME_DATA_SOURCE_RTSP_TUNNELLING) //Check if [RTSPUnicast and PVR]/[RTSPBroadcast and/or PVR] feature is required
-    {
-        if (aSourceData)
-        {
-            PVInterface* pvInterface = OSCL_STATIC_CAST(PVInterface*, aSourceData);
-            PVInterface* sourceDataContext = NULL;
-            PVUuid sourceContextUuid(PVMF_SOURCE_CONTEXT_DATA_UUID);
-            if (pvInterface)
-            {
-                if (pvInterface->queryInterface(sourceContextUuid, sourceDataContext))
-                {
-                    if (sourceDataContext)
-                    {
-                        PVInterface* packetSourceContextData = NULL;
-                        PVUuid packetSourceContextUuid(PVMF_SOURCE_CONTEXT_DATA_PACKETSOURCE_UUID); //Check for Broadcast Plugin
-
-                        PVInterface* pvrDataContext = NULL;
-                        PVUuid pvrContextUuid(PVMF_SOURCE_CONTEXT_DATA_PVR_UUID); //Check for RTSP Unicast + PVR plugin
-
-                        PVInterface* pvrFilePlaybackContextData = NULL;
-                        PVUuid pvrFileContextUuid(PVMF_SOURCE_CONTEXT_DATA_PVRLOCALPLAYBACK_UUID); //Check for PVR FilePlayback Plugin
-
-                        if (sourceDataContext->queryInterface(packetSourceContextUuid, packetSourceContextData))
-                        {
-                            if (packetSourceContextData)
-                            {
-                                //Broadcast is to be enabled
-                                if ((aSourceFormat == PVMF_MIME_DATA_SOURCE_RTSP_URL) || (aSourceFormat == PVMF_MIME_DATA_SOURCE_SDP_FILE))
-                                {
-                                    OSCL_ASSERT(fspSrcFormat == aSourceFormat);
-                                    fspSrcFormat = PVMF_MIME_DATA_SOURCE_RTSP_BROADCAST;
-                                }
-                                packetSourceContextData->removeRef();
-                            }
-                        }
-
-                        else if (sourceDataContext->queryInterface(pvrFileContextUuid, pvrFilePlaybackContextData))
-                        {
-                            if (pvrFilePlaybackContextData)
-                            {
-                                //PVR File Playback Pluign enable
-                                if (aSourceFormat == PVMF_MIME_DATA_SOURCE_SDP_FILE)
-                                {
-                                    OSCL_ASSERT(fspSrcFormat == aSourceFormat);
-                                    fspSrcFormat = PVMF_MIME_DATA_SOURCE_PVR_FILEPLAYBACK;
-                                }
-                                pvrFilePlaybackContextData->removeRef();
-                            }
-                        }
-
-                        else if (sourceDataContext->queryInterface(pvrContextUuid, pvrDataContext))
-                        {
-
-                            if (pvrDataContext)
-                            {
-                                //PVR is to be enabled.
-                                //set fsp src format type
-                                if ((aSourceFormat == PVMF_MIME_DATA_SOURCE_RTSP_URL) || (aSourceFormat == PVMF_MIME_DATA_SOURCE_SDP_FILE))
-                                {
-                                    OSCL_ASSERT(fspSrcFormat == aSourceFormat);
-                                    fspSrcFormat = PVMF_MIME_DATA_SOURCE_RTSP_UNICAST_PLUS_PVR;
-                                }
-                                pvrDataContext->removeRef();
-                            }
-
-                        }
-                        sourceDataContext->removeRef();
-
-                    }
-                }
-            }
-
-        }
-    }
 
     Oscl_Vector<PVUuid, OsclMemAllocator> srcNodeUuidVec;
     if (PVMFSuccess == iSMFSPRegistry->QueryRegistry(fspSrcFormat, srcNodeUuidVec))
diff --git a/oscl/oscl/config/linux_nj/osclconfig.h b/oscl/oscl/config/android/osclconfig.h
similarity index 95%
rename from oscl/oscl/config/linux_nj/osclconfig.h
rename to oscl/oscl/config/android/osclconfig.h
index f4a0520..07cd1e1 100644
--- a/oscl/oscl/config/linux_nj/osclconfig.h
+++ b/oscl/oscl/config/android/osclconfig.h
@@ -35,8 +35,8 @@
 #include <dirent.h>
 #include <dlfcn.h>
 
-#define OSCL_HAS_NJ_SUPPORT 1
-#define OSCL_HAS_NJ_FILE_IO_SUPPORT 1
+#define OSCL_HAS_ANDROID_SUPPORT 1
+#define OSCL_HAS_ANDROID_FILE_IO_SUPPORT 1
 
 // include common include for determining sizes from limits.h
 #include "osclconfig_limits_typedefs.h"
@@ -49,7 +49,7 @@
 #endif
 
 // include common unix definitions
-#include "osclconfig_unix_nj.h"
+#include "osclconfig_unix_android.h"
 
 // define the suffix for unsigned constants
 #define OSCL_UNSIGNED_CONST(x) x##u
diff --git a/oscl/oscl/config/linux_nj/osclconfig_compiler_warnings.h b/oscl/oscl/config/android/osclconfig_compiler_warnings.h
similarity index 100%
rename from oscl/oscl/config/linux_nj/osclconfig_compiler_warnings.h
rename to oscl/oscl/config/android/osclconfig_compiler_warnings.h
diff --git a/oscl/oscl/config/linux_nj/osclconfig_error.h b/oscl/oscl/config/android/osclconfig_error.h
similarity index 100%
rename from oscl/oscl/config/linux_nj/osclconfig_error.h
rename to oscl/oscl/config/android/osclconfig_error.h
diff --git a/oscl/oscl/config/linux_nj/osclconfig_io.h b/oscl/oscl/config/android/osclconfig_io.h
similarity index 96%
rename from oscl/oscl/config/linux_nj/osclconfig_io.h
rename to oscl/oscl/config/android/osclconfig_io.h
index 740996a..4551361 100644
--- a/oscl/oscl/config/linux_nj/osclconfig_io.h
+++ b/oscl/oscl/config/android/osclconfig_io.h
@@ -38,7 +38,7 @@
 #include "osclconfig.h"
 #endif
 
-#if (OSCL_HAS_NJ_SUPPORT) && (ENABLE_MEMORY_PLAYBACK)
+#if (OSCL_HAS_ANDROID_SUPPORT) && (ENABLE_MEMORY_PLAYBACK)
 #include <media/MediaPlayerInterface.h>
 #endif
 
@@ -70,6 +70,7 @@
 #define OSCL_HAS_NATIVE_FILE_CACHE_ENABLE 1
 #define OSCL_FILE_BUFFER_MAX_SIZE	32768
 #define OSCL_HAS_PV_FILE_CACHE	0
+#define OSCL_HAS_LARGE_FILE_SUPPORT 1
 
 //For Sockets
 #define OSCL_HAS_SYMBIAN_SOCKET_SERVER 0
@@ -241,6 +242,13 @@
 #define OSCL_IPPROTO_UDP IPPROTO_UDP
 
 //End sockets
+// file IO support
+#if (OSCL_HAS_LARGE_FILE_SUPPORT)
+#define _FILE_OFFSET_BITS 64
+typedef off_t TOsclFileOffset;
+#else
+typedef int32 TOsclFileOffset;
+#endif
 
 #include "osclconfig_io_check.h"
 
diff --git a/oscl/oscl/config/linux_nj/osclconfig_lib.h b/oscl/oscl/config/android/osclconfig_lib.h
similarity index 100%
rename from oscl/oscl/config/linux_nj/osclconfig_lib.h
rename to oscl/oscl/config/android/osclconfig_lib.h
diff --git a/oscl/oscl/config/linux_nj/osclconfig_memory.h b/oscl/oscl/config/android/osclconfig_memory.h
similarity index 100%
rename from oscl/oscl/config/linux_nj/osclconfig_memory.h
rename to oscl/oscl/config/android/osclconfig_memory.h
diff --git a/oscl/oscl/config/linux_nj/osclconfig_proc.h b/oscl/oscl/config/android/osclconfig_proc.h
similarity index 96%
rename from oscl/oscl/config/linux_nj/osclconfig_proc.h
rename to oscl/oscl/config/android/osclconfig_proc.h
index 84c755c..9f43965 100644
--- a/oscl/oscl/config/linux_nj/osclconfig_proc.h
+++ b/oscl/oscl/config/android/osclconfig_proc.h
@@ -35,7 +35,7 @@
 #include "osclconfig.h"
 #endif
 
-#include "osclconfig_proc_unix_nj.h"
+#include "osclconfig_proc_unix_android.h"
 
 #include "osclconfig_proc_check.h"
 
diff --git a/oscl/oscl/config/linux_nj/osclconfig_proc_unix_nj.h b/oscl/oscl/config/android/osclconfig_proc_unix_android.h
similarity index 94%
rename from oscl/oscl/config/linux_nj/osclconfig_proc_unix_nj.h
rename to oscl/oscl/config/android/osclconfig_proc_unix_android.h
index 0b2d14d..c5d05eb 100644
--- a/oscl/oscl/config/linux_nj/osclconfig_proc_unix_nj.h
+++ b/oscl/oscl/config/android/osclconfig_proc_unix_android.h
@@ -28,8 +28,8 @@
  *
  */
 
-#ifndef OSCLCONFIG_PROC_UNIX_NJ_H_INCLUDED
-#define OSCLCONFIG_PROC_UNIX_NJ_H_INCLUDED
+#ifndef OSCLCONFIG_PROC_UNIX_ANDROID_H_INCLUDED
+#define OSCLCONFIG_PROC_UNIX_ANDROID_H_INCLUDED
 
 #define OSCL_HAS_SYMBIAN_SCHEDULER 0
 
diff --git a/oscl/oscl/config/linux_nj/osclconfig_time.h b/oscl/oscl/config/android/osclconfig_time.h
similarity index 100%
rename from oscl/oscl/config/linux_nj/osclconfig_time.h
rename to oscl/oscl/config/android/osclconfig_time.h
diff --git a/oscl/oscl/config/linux_nj/osclconfig_unix_nj.h b/oscl/oscl/config/android/osclconfig_unix_android.h
similarity index 96%
rename from oscl/oscl/config/linux_nj/osclconfig_unix_nj.h
rename to oscl/oscl/config/android/osclconfig_unix_android.h
index 751ffb1..c4b6e2a 100644
--- a/oscl/oscl/config/linux_nj/osclconfig_unix_nj.h
+++ b/oscl/oscl/config/android/osclconfig_unix_android.h
@@ -31,8 +31,8 @@
  */
 
 
-#ifndef OSCLCONFIG_UNIX_NJ_H_INCLUDED
-#define OSCLCONFIG_UNIX_NJ_H_INCLUDED
+#ifndef OSCLCONFIG_UNIX_ANDROID_H_INCLUDED
+#define OSCLCONFIG_UNIX_ANDROID_H_INCLUDED
 
 
 // system header files
diff --git a/oscl/oscl/config/linux_nj/osclconfig_util.h b/oscl/oscl/config/android/osclconfig_util.h
similarity index 100%
rename from oscl/oscl/config/linux_nj/osclconfig_util.h
rename to oscl/oscl/config/android/osclconfig_util.h
diff --git a/oscl/oscl/config/linux/osclconfig_io.h b/oscl/oscl/config/linux/osclconfig_io.h
index dc9a13d..1f8c242 100644
--- a/oscl/oscl/config/linux/osclconfig_io.h
+++ b/oscl/oscl/config/linux/osclconfig_io.h
@@ -59,6 +59,7 @@
 #define OSCL_HAS_NATIVE_FILE_CACHE_ENABLE 1
 #define OSCL_FILE_BUFFER_MAX_SIZE	32768
 #define OSCL_HAS_PV_FILE_CACHE	1
+#define OSCL_HAS_LARGE_FILE_SUPPORT 1
 
 //For Sockets
 #define OSCL_HAS_SYMBIAN_SOCKET_SERVER 0
@@ -228,6 +229,15 @@
 
 //End sockets
 
+// file IO support
+#if (OSCL_HAS_LARGE_FILE_SUPPORT)
+#define _FILE_OFFSET_BITS 64
+typedef off_t TOsclFileOffset;
+#else
+typedef int32 TOsclFileOffset;
+#endif
+
+
 #include "osclconfig_io_check.h"
 
 #endif
diff --git a/oscl/oscl/config/shared/osclconfig_io_check.h b/oscl/oscl/config/shared/osclconfig_io_check.h
index 500c347..2e87446 100644
--- a/oscl/oscl/config/shared/osclconfig_io_check.h
+++ b/oscl/oscl/config/shared/osclconfig_io_check.h
@@ -69,6 +69,24 @@
 #endif
 
 /**
+OSCL_HAS_LARGE_FILE_SUPPORT macro should be set to 1 if
+the target platform supports more than 32bit file I/O capability.
+Otherwise it should be set to 0.
+*/
+#ifndef OSCL_HAS_LARGE_FILE_SUPPORT
+#error "ERROR: OSCL_HAS_LARGE_FILE_SUPPORT has to be defined to either 1 or 0"
+#endif
+
+/**
+type TOsclFileOffset should be defined as the type used for file size
+and offsets on the target platform.
+Example:
+typedef size_t TOsclFileOffset;
+*/
+typedef TOsclFileOffset __verify__TOsclFileOffset__defined__;
+
+
+/**
 OSCL_FILE_BUFFER_MAX_SIZE macro should be set to
 the desired size of the file I/O cache in bytes.
 Otherwise it should be set to 0.
diff --git a/oscl/oscl/osclbase/src/oscl_time.cpp b/oscl/oscl/osclbase/src/oscl_time.cpp
index a9eeae4..3bf98cb 100644
--- a/oscl/oscl/osclbase/src/oscl_time.cpp
+++ b/oscl/oscl/osclbase/src/oscl_time.cpp
@@ -126,6 +126,8 @@
     buf[2] = 0;
     strncpy(buf, pv8601_buffer + 4, 2);
     mon = atoi(buf);
+    if (mon <= 0 || mon > 13)
+        mon = 13;
     strncpy(buf, pv8601_buffer + 6, 2);
     day = atoi(buf);
     strncpy(buf, pv8601_buffer + 9, 2);
diff --git a/oscl/oscl/osclio/src/oscl_file_async_read.cpp b/oscl/oscl/osclio/src/oscl_file_async_read.cpp
index 361e597..8485fa9 100644
--- a/oscl/oscl/osclio/src/oscl_file_async_read.cpp
+++ b/oscl/oscl/osclio/src/oscl_file_async_read.cpp
@@ -81,7 +81,7 @@
     return iBuffer;
 }
 
-bool OsclAsyncFileBuffer::HasThisOffset(int32 aOffset)
+bool OsclAsyncFileBuffer::HasThisOffset(TOsclFileOffset aOffset)
 {
     if (!iValid)
         return false;
@@ -413,7 +413,7 @@
 //If data is not available, it will do a blocking read.
 //The amount of data requested cannot exceed the internal buffer size.
 //Note this returns bytes read, not number of elements read.
-uint32 OsclAsyncFile::doRead(uint8 *& aBuffer1, uint32 aDataSize, uint32 aNumElements, int32 aOffset)
+uint32 OsclAsyncFile::doRead(uint8 *& aBuffer1, uint32 aDataSize, uint32 aNumElements, TOsclFileOffset aOffset)
 {
     PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_DEBUG,
                     (0, "OsclAsyncFile(0x%x)::doRead size %d numelements %d offset %d", this, aDataSize, aNumElements, aOffset));
@@ -444,9 +444,9 @@
         aBuffer1 = const_cast<uint8*>(ptrRead.Ptr());
         // offset pointer to correct location
         aBuffer1 += (aOffset - dataBuffer->Offset());
-        bytesRead = dataBuffer->Length() - (aOffset - dataBuffer->Offset());
+        bytesRead = dataBuffer->Length() - (uint32)(aOffset - dataBuffer->Offset());
         // Redo queue of linked buffers
-        ReOrderBuffersQueue(aOffset, bufferFoundId);
+        ReOrderBuffersQueue(bufferFoundId);
     }
     else
     {
@@ -519,7 +519,7 @@
     return bytesRead;
 }
 
-bool OsclAsyncFile::FindDataBuffer(OsclAsyncFileBuffer*& aDataBuffer, int32& aBufferId, int32 aOffset, int32 aSize)
+bool OsclAsyncFile::FindDataBuffer(OsclAsyncFileBuffer*& aDataBuffer, int32& aBufferId, TOsclFileOffset aOffset, int32 aSize)
 {
     // Look for the requested value on the queue
     OsclAsyncFileBuffer* tmpDataBuffer;
@@ -558,14 +558,14 @@
     aBufferId = tmpDataBuffer->Id();
 
     // Check if we have enough data to return in a single buffer
-    int32 maxOffset = tmpDataBuffer->Offset() + tmpDataBuffer->Length();
+    TOsclFileOffset maxOffset = tmpDataBuffer->Offset() + tmpDataBuffer->Length();
 
     // the easy case
     if (aOffset + aSize <= maxOffset)
         return true;
 
     // Last option, check if we can concatenate required data from two buffers
-    int32 availableData = maxOffset - aOffset;
+    int32 availableData = (int32)(maxOffset - aOffset);
 
     // check again in the buffers for the remaining part of the data
     OsclAsyncFileBuffer* tmpDataBuffer2 = iDataBufferArray[0]; //Init pointer to clean-up compiler warning=MG
@@ -626,7 +626,7 @@
     if (IsBusy())
         return;
 
-    int32 bytesReadAhead = BytesReadAhead(iFilePosition);
+    int32 bytesReadAhead = BytesReadAhead();
 
     // don't need to read more
     if (bytesReadAhead >= iKMinBytesReadAhead)
@@ -634,7 +634,7 @@
         return;
     }
 
-    int32 posToReadFrom = iFilePosition + bytesReadAhead;
+    TOsclFileOffset posToReadFrom = iFilePosition + bytesReadAhead;
 
     // check for eof. We stop reading
     if (posToReadFrom == iFileSize)
@@ -647,10 +647,8 @@
     StartNextRead(posToReadFrom);
 }
 
-int32 OsclAsyncFile::BytesReadAhead(int32 aOffset)
+int32 OsclAsyncFile::BytesReadAhead()
 {
-    OSCL_UNUSED_ARG(aOffset);
-
     // Get the maximum offset of the last element in the linked	buffer array
     int32 index = iLinkedDataBufferArray.size() - 1;
     if (index == -1)
@@ -659,8 +657,8 @@
     }
 
     OsclAsyncFileBuffer* tmpDataBuffer = iLinkedDataBufferArray[index];
-    int32 maxOffset = tmpDataBuffer->Offset() + tmpDataBuffer->Length();
-    int32 bytesReadAhead = maxOffset - iLastUserFileRead;
+    TOsclFileOffset maxOffset = tmpDataBuffer->Offset() + tmpDataBuffer->Length();
+    int32 bytesReadAhead = (int32)(maxOffset - iLastUserFileRead);
 
     return bytesReadAhead;
 }
@@ -727,7 +725,7 @@
     return 0;
 }
 
-bool OsclAsyncFile::GetNextDataBuffer(OsclAsyncFileBuffer*& aDataBuffer, int32 aFilePointerToReadFrom)
+bool OsclAsyncFile::GetNextDataBuffer(OsclAsyncFileBuffer*& aDataBuffer, TOsclFileOffset aFilePointerToReadFrom)
 {
     uint32 i;
 
@@ -746,7 +744,7 @@
     }
 
     // if all buffers are valid, return the next one with oldest data
-    uint32 smallerOffset = 0;
+    TOsclFileOffset smallerOffset = 0;
     OsclAsyncFileBuffer* dataBufferToUse = NULL;
     OsclAsyncFileBuffer* lastOptionBufferToUse = NULL;
     for (i = 0; i < iDataBufferArray.size(); i++)
@@ -772,7 +770,7 @@
         }
         else
         {
-            if ((uint32)(tmpDataBuffer->Offset()) < smallerOffset)
+            if (tmpDataBuffer->Offset() < smallerOffset)
             {
                 smallerOffset = tmpDataBuffer->Offset();
                 dataBufferToUse = tmpDataBuffer;
@@ -795,10 +793,8 @@
     return true;
 }
 
-void OsclAsyncFile::ReOrderBuffersQueue(int32 aOffset, int32 aFirstBufferId)
+void OsclAsyncFile::ReOrderBuffersQueue(int32 aFirstBufferId)
 {
-    OSCL_UNUSED_ARG(aOffset);
-
     // reset array
     iLinkedDataBufferArray.clear();
 
@@ -812,7 +808,7 @@
     iLinkedDataBufferArray.push_back(tmpDataBuffer);
 
     // Look for the linked elements
-    int32 offset = tmpDataBuffer->Offset() + tmpDataBuffer->Length();
+    TOsclFileOffset offset = tmpDataBuffer->Offset() + tmpDataBuffer->Length();
     for (uint32 i = 0; i < iSortedDataBufferArray.size(); i++)
     {
         tmpDataBuffer = iSortedDataBufferArray[i];
@@ -893,10 +889,10 @@
 
     // check how many bytes ahead of the user file position we have
     // bool seekDone = false;
-    int32 bytesReadAhead = BytesReadAhead(iLastUserFileRead);
+    int32 bytesReadAhead = BytesReadAhead();
 
     // next position to read from
-    int32 posToReadFrom = iLastUserFileRead + bytesReadAhead;
+    TOsclFileOffset posToReadFrom = iLastUserFileRead + bytesReadAhead;
 
     // check for eof. We stop reading
     if (posToReadFrom == iFileSize)
@@ -937,7 +933,7 @@
     }
 }
 
-void OsclAsyncFile::StartNextRead(int32 aPosToReadFrom)
+void OsclAsyncFile::StartNextRead(TOsclFileOffset aPosToReadFrom)
 {
     PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_DEBUG,
                     (0, "OsclAsyncFile(0x%x)::StartNextRead pos %d ", this, aPosToReadFrom));
@@ -994,7 +990,7 @@
             }
 
             // we need to swap the file pointers
-            int32 tmpPosition = iSyncFilePosition;
+            TOsclFileOffset tmpPosition = iSyncFilePosition;
             iSyncFilePosition = iAsyncFilePosition;
             iAsyncFilePosition = tmpPosition;
 
@@ -1050,7 +1046,7 @@
     }
 }
 
-int32 OsclAsyncFile::Seek(int32 offset, Oscl_File::seek_type origin)
+int32 OsclAsyncFile::Seek(TOsclFileOffset offset, Oscl_File::seek_type origin)
 {
     PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_DEBUG,
                     (0, "OsclAsyncFile(0x%x)::Seek offset %d origin %d", this, offset, origin));
@@ -1085,7 +1081,7 @@
 }
 
 
-int32 OsclAsyncFile::Tell()
+TOsclFileOffset OsclAsyncFile::Tell()
 {
     PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_DEBUG,
                     (0, "OsclAsyncFile(0x%x)::Tell pos %d ", this, iFilePosition));
@@ -1109,7 +1105,7 @@
     return result;
 }
 
-int32 OsclAsyncFile::Size()
+TOsclFileOffset OsclAsyncFile::Size()
 {
 #if(VERIFY_THIS)
     if (iNativeFileVerify->Size() != iFileSize)
diff --git a/oscl/oscl/osclio/src/oscl_file_async_read.h b/oscl/oscl/osclio/src/oscl_file_async_read.h
index 74fa2c2..e2c5ae9 100644
--- a/oscl/oscl/osclio/src/oscl_file_async_read.h
+++ b/oscl/oscl/osclio/src/oscl_file_async_read.h
@@ -227,11 +227,11 @@
         {
             return iValid;
         }
-        int32 Offset()
+        TOsclFileOffset Offset()
         {
             return iOffset;
         }
-        void SetOffset(int32 aOffset)
+        void SetOffset(TOsclFileOffset aOffset)
         {
             iOffset = aOffset;
         }
@@ -239,7 +239,7 @@
         {
             return iLength;
         }
-        bool HasThisOffset(int32 aOffset);
+        bool HasThisOffset(TOsclFileOffset aOffset);
         int32 Id()
         {
             return iId;
@@ -254,7 +254,7 @@
 
     private:
         OsclBuf* iBuffer;
-        int32 iOffset;
+        TOsclFileOffset iOffset;
         bool iInUse;
         int32 iLength;
         bool iValid;
@@ -311,11 +311,11 @@
                     , const OsclNativeFileParams& params
                     , Oscl_FileServer& fileserv);
 
-        int32 Seek(int32 offset, Oscl_File::seek_type origin);
-        int32 Tell();
+        int32 Seek(TOsclFileOffset offset, Oscl_File::seek_type origin);
+        TOsclFileOffset Tell();
         uint32 Read(OsclAny* aBuffer1, uint32 aDataSize, uint32 aNumElements);
         int32 EndOfFile();
-        int32 Size();
+        TOsclFileOffset Size();
         int32 Close();
 
         uint32 Write(const OsclAny* aBuffer1, uint32 aDataSize, uint32 aNumElements)
@@ -340,25 +340,25 @@
     private:
         // private utility methods
         void StartAsyncRead(bool aStartAsyncRead);
-        bool FindDataBuffer(OsclAsyncFileBuffer*& aDataBuffer, int32& aBufferId, int32 aOffset, int32 aSize);
+        bool FindDataBuffer(OsclAsyncFileBuffer*& aDataBuffer, int32& aBufferId, TOsclFileOffset aOffset, int32 aSize);
         void UpdateReading();
-        int32 BytesReadAhead(int32 aOffset);
+        int32 BytesReadAhead();
         int32 SortDataBuffers();
-        bool GetNextDataBuffer(OsclAsyncFileBuffer*& aDataBuffer, int32 aFilePointerToReadFrom);
-        void StartNextRead(int32 aPosToReadFrom);
-        void ReOrderBuffersQueue(int32 aOffset, int32 aFirstBufferId);
+        bool GetNextDataBuffer(OsclAsyncFileBuffer*& aDataBuffer, TOsclFileOffset aFilePointerToReadFrom);
+        void StartNextRead(TOsclFileOffset aPosToReadFrom);
+        void ReOrderBuffersQueue(int32 aFirstBufferId);
         bool IsLinkedDataBuffer(OsclAsyncFileBuffer* aDataBuffer);
         bool CanBeLinked(OsclAsyncFileBuffer* aDataBuffer);
-        uint32 doRead(uint8*& aBuffer1, uint32 aDataSize, uint32 aNumElements, int32 aOffset);
+        uint32 doRead(uint8*& aBuffer1, uint32 aDataSize, uint32 aNumElements, TOsclFileOffset aOffset);
 
     private:
-        int32 iFileSize;
+        TOsclFileOffset iFileSize;
 
         // File object to do async read from
         OsclNativeFile& iNativeFile;
 
         // File position for async reads.
-        int32 iAsyncFilePosition;
+        TOsclFileOffset iAsyncFilePosition;
 
         // For verification
         OsclNativeFile* iNativeFileVerify;
@@ -368,7 +368,7 @@
         OsclNativeFile* iNativeFileDuplicate;
 
         // File position for sync reads.
-        int32 iSyncFilePosition;
+        TOsclFileOffset iSyncFilePosition;
 
         // Arrays of data buffers
         Oscl_Vector<OsclAsyncFileBuffer*, OsclMemAllocator> iDataBufferArray;
@@ -386,10 +386,10 @@
         uint32 iTotalCacheSize;
 
         // Logical File Position (as seen by the client of this class)
-        int32 iFilePosition;
+        TOsclFileOffset iFilePosition;
 
         // Last offset after a user read operation
-        int32 iLastUserFileRead;
+        TOsclFileOffset iLastUserFileRead;
 
         // Start async read enable flag
         bool iStartAsyncRead;
diff --git a/oscl/oscl/osclio/src/oscl_file_cache.cpp b/oscl/oscl/osclio/src/oscl_file_cache.cpp
index 5ec28fc..41abd87 100644
--- a/oscl/oscl/osclio/src/oscl_file_cache.cpp
+++ b/oscl/oscl/osclio/src/oscl_file_cache.cpp
@@ -156,7 +156,7 @@
         if ((uint32)(FileSize() - Tell()) < size)
             break;
 
-        uint32 bytesInCache = (_endCachePos - _currentCachePos);
+        uint32 bytesInCache = (uint32)(_endCachePos - _currentCachePos);
 
         if (bytesInCache > 0)
         {
@@ -207,7 +207,7 @@
  *
  * @return returns the number of elements written
  */
-int32 OsclFileCache::Write(const void* inputBuffer, uint32 size, uint32 numelements)
+uint32 OsclFileCache::Write(const void* inputBuffer, uint32 size, uint32 numelements)
 {
     if (inputBuffer == NULL)
     {
@@ -289,7 +289,7 @@
                 _endCachePos = _currentCachePos;
 
             //extend the virtual file size if needed.
-            if (_fileSize < _cacheFilePosition + _endCachePos)
+            if (_fileSize < (TOsclFileOffset)(_cacheFilePosition + _endCachePos))
                 _fileSize = _cacheFilePosition + _endCachePos;
 
             //consistency checks.  if these asserts fire, there is
@@ -326,10 +326,10 @@
  *
  * @return 0 for success.
  */
-int32 OsclFileCache::Seek(int32 offset, Oscl_File::seek_type origin)
+int32 OsclFileCache::Seek(TOsclFileOffset offset, Oscl_File::seek_type origin)
 {
     //figure out the file position we're trying to seek to
-    int32 pos;
+    TOsclFileOffset pos;
     switch (origin)
     {
         case Oscl_File::SEEKCUR:
@@ -357,9 +357,9 @@
 
     //when seek is in current cache range, just update the
     //virtual position.
-    if (_cacheFilePosition <= (uint32)pos && (uint32)pos <= (_cacheFilePosition + _endCachePos))
+    if (_cacheFilePosition <= pos && pos <= (TOsclFileOffset)(_cacheFilePosition + _endCachePos))
     {
-        _currentCachePos = pos - _cacheFilePosition;
+        _currentCachePos = (uint32)(pos - _cacheFilePosition);
         return 0;//success
     }
 
@@ -459,7 +459,7 @@
  * return 0 on success.
  *
 */
-int32 OsclFileCache::SetCachePosition(uint32 aNewPos)
+int32 OsclFileCache::SetCachePosition(TOsclFileOffset aNewPos)
 {
     PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_DEBUG,
                     (0, "OsclFileCache(0x%x)::SetCachePosition curpos %d newpos %d", this, _cacheFilePosition, aNewPos));
@@ -507,7 +507,7 @@
 
     //flush and relocate cache to current virtual
     //position if needed
-    uint32 newpos = Tell();
+    TOsclFileOffset newpos = Tell();
     if (_cacheFilePosition != newpos
             || (_cacheUpdateEnd - _cacheUpdateStart) > 0)
     {
@@ -576,7 +576,7 @@
 
         //Seek to the correct write location in the file if needed
 
-        uint32 pos = _cacheFilePosition + _cacheUpdateStart;
+        TOsclFileOffset pos = _cacheFilePosition + _cacheUpdateStart;
 
         if (_nativePosition != pos)
         {
@@ -621,7 +621,7 @@
         //and locating it as close as possible to the desired position.
         _fileSize = iContainer.CallNativeSize();
         _nativePosition = iContainer.CallNativeTell();
-        uint32 newpos = Tell();
+        TOsclFileOffset newpos = Tell();
         if (newpos > _fileSize)
             newpos = _fileSize;
         SetCachePosition(newpos);
diff --git a/oscl/oscl/osclio/src/oscl_file_cache.h b/oscl/oscl/osclio/src/oscl_file_cache.h
index f8a6912..5a97735 100644
--- a/oscl/oscl/osclio/src/oscl_file_cache.h
+++ b/oscl/oscl/osclio/src/oscl_file_cache.h
@@ -60,16 +60,16 @@
 
         uint32 Read(void* outputBuffer, uint32 size, uint32 numelements);
 
-        int32 Write(const void* inputBuffer, uint32 size, uint32 numelements);
+        uint32 Write(const void* inputBuffer, uint32 size, uint32 numelements);
 
-        int32 FileSize()
+        TOsclFileOffset  FileSize()
         {
             return _fileSize;
         }
 
-        int32 Seek(int32 offset, Oscl_File::seek_type origin);
+        int32 Seek(TOsclFileOffset  offset, Oscl_File::seek_type origin);
 
-        int32 Tell()
+        TOsclFileOffset  Tell()
         {
             return (_cacheFilePosition + _currentCachePos);
         }
@@ -95,7 +95,7 @@
 
         //the native file position corresponding to the start of the
         //cache
-        uint32 _cacheFilePosition;
+        TOsclFileOffset  _cacheFilePosition;
 
         //current working position (virtual file pointer) in the cache.
         //units: 0-based byte offset from beginning of cache
@@ -115,12 +115,12 @@
         //Current file size.  This is a virtual file size and
         //may not match the native file size when there is
         //cached data.
-        uint32	_fileSize;
+        TOsclFileOffset 	_fileSize;
 
         //Current true native file position.
-        uint32 _nativePosition;
+        TOsclFileOffset  _nativePosition;
 
-        int32 SetCachePosition(uint32 pos);
+        int32 SetCachePosition(TOsclFileOffset  pos);
         int32 FillCacheFromFile();
         int32 WriteCacheToFile();
 
diff --git a/oscl/oscl/osclio/src/oscl_file_io.cpp b/oscl/oscl/osclio/src/oscl_file_io.cpp
index 81202a2..d5223f0 100644
--- a/oscl/oscl/osclio/src/oscl_file_io.cpp
+++ b/oscl/oscl/osclio/src/oscl_file_io.cpp
@@ -568,7 +568,7 @@
     return result;
 }
 
-OSCL_EXPORT_REF int32 Oscl_File::Seek(int32 offset, seek_type origin)
+OSCL_EXPORT_REF int32 Oscl_File::Seek(TOsclFileOffset offset, seek_type origin)
 {
     if (iLogger)
     {
@@ -605,7 +605,7 @@
 }
 
 
-OSCL_EXPORT_REF int32 Oscl_File::Tell()
+OSCL_EXPORT_REF TOsclFileOffset Oscl_File::Tell()
 {
     if (iLogger)
     {
@@ -617,7 +617,7 @@
     if (iFileStats)
         iFileStats->Start(ticks);
 
-    int32 result = (-1);
+    TOsclFileOffset result = (-1);
 
     if (iIsOpen)
     {
@@ -713,7 +713,7 @@
     return result;
 }
 
-OSCL_EXPORT_REF int32 Oscl_File::Size()
+OSCL_EXPORT_REF TOsclFileOffset Oscl_File::Size()
 {
     if (iLogger)
     {
@@ -725,7 +725,7 @@
     if (iFileStats)
         iFileStats->Start(ticks);
 
-    int32 result = (-1);
+    TOsclFileOffset result = (-1);
 
     if (iIsOpen)
     {
@@ -929,7 +929,7 @@
     return result;
 }
 
-int32  Oscl_File::CallNativeSeek(int32 offset, Oscl_File::seek_type origin)
+int32  Oscl_File::CallNativeSeek(TOsclFileOffset offset, Oscl_File::seek_type origin)
 {
     if (iNativeLogger)
     {
@@ -959,7 +959,7 @@
     return result;
 }
 
-int32  Oscl_File::CallNativeTell()
+TOsclFileOffset  Oscl_File::CallNativeTell()
 {
     if (iNativeLogger)
     {
@@ -971,7 +971,7 @@
     if (iFileStats)
         iFileStats->Start(ticks);
 
-    int32 result = (-1);
+    TOsclFileOffset result = (-1);
 
     if (iNativeFile)
         result = iNativeFile->Tell();
@@ -1050,7 +1050,7 @@
     return result;
 }
 
-int32 Oscl_File::CallNativeSize()
+TOsclFileOffset Oscl_File::CallNativeSize()
 {
     if (iNativeLogger)
     {
@@ -1062,7 +1062,7 @@
     if (iFileStats)
         iFileStats->Start(ticks);
 
-    int32 result = (-1);
+    TOsclFileOffset result = (-1);
 
     if (iNativeFile)
         result = iNativeFile->Size();
diff --git a/oscl/oscl/osclio/src/oscl_file_io.h b/oscl/oscl/osclio/src/oscl_file_io.h
index 47679ac..d09e981 100644
--- a/oscl/oscl/osclio/src/oscl_file_io.h
+++ b/oscl/oscl/osclio/src/oscl_file_io.h
@@ -65,6 +65,7 @@
 class OsclFileStats;
 class OsclNativeFileParams;
 class OsclAsyncFile;
+#define TOsclFileOffsetInt32 int32
 
 class Oscl_File : public HeapBase
 {
@@ -300,14 +301,14 @@
          *
          * @return returns 0 on success, and a non-zero value otherwise
          */
-        OSCL_IMPORT_REF int32 Seek(int32 offset,
+        OSCL_IMPORT_REF int32 Seek(TOsclFileOffset offset,
                                    seek_type origin);
 
         /**
          * The File Tell operation
          * Returns the current file position for file specified by fp
          */
-        OSCL_IMPORT_REF int32 Tell();
+        OSCL_IMPORT_REF TOsclFileOffset Tell();
 
 
         /**
@@ -367,7 +368,7 @@
          *
          * @return - The size of the file, or -1 on error.
          */
-        OSCL_IMPORT_REF int32 Size();
+        OSCL_IMPORT_REF TOsclFileOffset Size();
 
         /**
          * SetLoggingEnable configures the PVLogger output for this file.
@@ -392,6 +393,7 @@
     private:
         friend class OsclFileCache;
         friend class asyncfilereadwrite_test;
+        friend class largeasyncfilereadwrite_test;
         friend class asyncfilereadcancel_test;
 
         void Construct();
@@ -445,11 +447,11 @@
                               , Oscl_FileServer& fileserv);
         uint32 CallNativeRead(OsclAny *buffer, uint32 size, uint32 numelements);
         uint32 CallNativeWrite(const OsclAny *buffer, uint32 size, uint32 numelements);
-        int32  CallNativeSeek(int32 offset, Oscl_File::seek_type origin);
-        int32  CallNativeTell();
+        int32  CallNativeSeek(TOsclFileOffset offset, Oscl_File::seek_type origin);
+        TOsclFileOffset  CallNativeTell();
         int32  CallNativeFlush();
         int32  CallNativeEndOfFile();
-        int32 CallNativeSize();
+        TOsclFileOffset CallNativeSize();
         int32 CallNativeClose();
         uint32 CallNativeMode();
         int32 CallNativeGetError();
diff --git a/oscl/oscl/osclio/src/oscl_file_native.cpp b/oscl/oscl/osclio/src/oscl_file_native.cpp
index bff9d3c..2d49637 100644
--- a/oscl/oscl/osclio/src/oscl_file_native.cpp
+++ b/oscl/oscl/osclio/src/oscl_file_native.cpp
@@ -340,16 +340,16 @@
 
 }
 
-int32 OsclNativeFile::Size()
+TOsclFileOffset OsclNativeFile::Size()
 {
     //this is the default for platforms with no
     //native size query.
     //Just do seek to end, tell, then seek back.
-    int32 curPos = Tell();
+    TOsclFileOffset curPos = Tell();
     if (curPos >= 0
             && Seek(0, Oscl_File::SEEKEND) == 0)
     {
-        int32 endPos = Tell();
+        TOsclFileOffset endPos = Tell();
         if (Seek(curPos, Oscl_File::SEEKSET) == 0)
         {
             return endPos;
@@ -483,7 +483,7 @@
     return 0;
 }
 
-int32 OsclNativeFile::Seek(int32 offset, Oscl_File::seek_type origin)
+int32 OsclNativeFile::Seek(TOsclFileOffset offset, Oscl_File::seek_type origin)
 {
 
     {
@@ -515,17 +515,20 @@
                 seekmode = SEEK_SET;
             else if (origin == Oscl_File::SEEKEND)
                 seekmode = SEEK_END;
-
+#if OSCL_HAS_LARGE_FILE_SUPPORT
+            return fseeko(iFile, offset, seekmode);
+#else
             return fseek(iFile, offset, seekmode);
+#endif
         }
     }
     return -1;
 }
 
 
-int32 OsclNativeFile::Tell()
+TOsclFileOffset OsclNativeFile::Tell()
 {
-    int32 result = -1;
+    TOsclFileOffset result = -1;
 #if ENABLE_MEMORY_PLAYBACK
     if (membase)
     {
@@ -534,7 +537,11 @@
 #endif
     if (iFile)
     {
+#if OSCL_HAS_LARGE_FILE_SUPPORT
+        result = ftello(iFile);
+#else
         result = ftell(iFile);
+#endif
     }
     return result;
 }
diff --git a/oscl/oscl/osclio/src/oscl_file_native.h b/oscl/oscl/osclio/src/oscl_file_native.h
index cc9d482..5b5db1c 100644
--- a/oscl/oscl/osclio/src/oscl_file_native.h
+++ b/oscl/oscl/osclio/src/oscl_file_native.h
@@ -81,11 +81,11 @@
                     , Oscl_FileServer& fileserv);
         uint32 Read(OsclAny *buffer, uint32 size, uint32 numelements);
         uint32 Write(const OsclAny *buffer, uint32 size, uint32 numelements);
-        int32  Seek(int32 offset, Oscl_File::seek_type origin);
-        int32  Tell();
+        int32  Seek(TOsclFileOffset offset, Oscl_File::seek_type origin);
+        TOsclFileOffset  Tell();
         int32  Flush();
         int32  EndOfFile();
-        int32 Size();
+        TOsclFileOffset Size();
         int32 Close();
 
         //query for current open mode.
diff --git a/oscl/oscl/osclio/src/oscl_file_stats.cpp b/oscl/oscl/osclio/src/oscl_file_stats.cpp
index 9f9030d..72c355d 100644
--- a/oscl/oscl/osclio/src/oscl_file_stats.cpp
+++ b/oscl/oscl/osclio/src/oscl_file_stats.cpp
@@ -19,6 +19,7 @@
 #include "oscl_file_stats.h"
 #include "oscl_tickcount.h"
 #include "pvlogger.h"
+#include "oscl_int64_utils.h"
 
 OsclFileStats::OsclFileStats(Oscl_File* c): iContainer(c)
 {
@@ -30,7 +31,7 @@
     aTicks = OsclTickCount::TickCount();
 }
 
-void OsclFileStats::End(TOsclFileOp aOp, uint32 aStart, uint32 aParam, uint32 aParam2)
+void OsclFileStats::End(TOsclFileOp aOp, uint32 aStart, uint32 aParam, TOsclFileOffset aParam2)
 {
     uint32 delta = OsclTickCount::TickCount() - aStart;
     if (iStats[aOp].iOpCount == 0
@@ -47,13 +48,26 @@
 
 void OsclFileStats::Log(TOsclFileOp aOp, PVLogger* aLogger, uint32 aLogLevel)
 {
-    PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, aLogger, aLogLevel
-                    , (0, "OsclFileStats(0x%x): Op %s Count %d, Max: Param %d %d StartTick %d TotalTick %d"
-                       , iContainer, TOsclFileOpStr[aOp]
-                       , iStats[aOp].iOpCount, iStats[aOp].iParam, iStats[aOp].iParam2, iStats[aOp].iStartTick, iStats[aOp].iTotalTicks
-                      ));
     OSCL_UNUSED_ARG(aOp);
     OSCL_UNUSED_ARG(aLogLevel);
+#if OSCL_HAS_LARGE_FILE_SUPPORT
+    PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, aLogger, aLogLevel
+                    , (0, "OsclFileStats(0x%x): Op %s Count %d, Max: Param %d, Param2 hi:0x%8x lo:0x%08x, StartTick %d TotalTick %d"
+                       , iContainer, TOsclFileOpStr[aOp]
+                       , iStats[aOp].iOpCount, iStats[aOp].iParam
+                       , Oscl_Int64_Utils::get_int64_upper32((const int64)(iStats[aOp].iParam2))
+                       , Oscl_Int64_Utils::get_int64_lower32((const int64)(iStats[aOp].iParam2))
+                       , iStats[aOp].iStartTick, iStats[aOp].iTotalTicks
+                      ));
+#else
+    PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, aLogger, aLogLevel
+                    , (0, "OsclFileStats(0x%x): Op %s Count %d, Max: Param %d, Param2 %d, StartTick %d TotalTick %d"
+                       , iContainer, TOsclFileOpStr[aOp]
+                       , iStats[aOp].iOpCount, iStats[aOp].iParam
+                       , iStats[aOp].iParam2
+                       , iStats[aOp].iStartTick, iStats[aOp].iTotalTicks
+                      ));
+#endif
 }
 
 void OsclFileStats::LogAll(PVLogger* aLogger, uint32 aLogLevel)
diff --git a/oscl/oscl/osclio/src/oscl_file_stats.h b/oscl/oscl/osclio/src/oscl_file_stats.h
index ceaaa0c..853911c 100644
--- a/oscl/oscl/osclio/src/oscl_file_stats.h
+++ b/oscl/oscl/osclio/src/oscl_file_stats.h
@@ -37,6 +37,7 @@
 #define OSCL_FILE_STATS_H_INCLUDED
 
 #include "oscl_base.h"
+#include "osclconfig_io.h"
 
 #define OSCL_FILE_STATS_LOGGER_NODE "OsclFileStats"
 
@@ -45,7 +46,7 @@
     public:
         uint32 iOpCount;
         uint32 iParam;
-        uint32 iParam2;
+        TOsclFileOffset iParam2;
         uint32 iStartTick;
         uint32 iTotalTicks;
 };
@@ -103,7 +104,7 @@
     public:
         OsclFileStats(Oscl_File* c);
         void Start(uint32& aTicks);
-        void End(TOsclFileOp aOp, uint32 aStart, uint32 aParam = 0, uint32 aParam2 = 0);
+        void End(TOsclFileOp aOp, uint32 aStart, uint32 aParam = 0, TOsclFileOffset aParam2 = 0);
         void Log(TOsclFileOp, PVLogger*, uint32);
         void LogAll(PVLogger*, uint32);
 
diff --git a/protocols/http_parcom/src/http_parser.cpp b/protocols/http_parcom/src/http_parser.cpp
index 832ff28..5109fbb 100644
--- a/protocols/http_parcom/src/http_parser.cpp
+++ b/protocols/http_parcom/src/http_parser.cpp
@@ -1097,6 +1097,12 @@
         return 0;
     }
 
+    // add first-line into the key-value store
+    StrPtrLen firstLine = "Response-Line";
+    addKeyValuePairToStore(firstLine.c_str(), firstLine.length(),
+                           (char *)aInputDataStream.getPtr(), aInputDataStream.getAvailableSpace(),
+                           true);
+
     return HTTPParser::PARSE_SYNTAX_ERROR; // looks like the status line has something we don't understand.
 }
 
diff --git a/protocols/rtp/src/rtcp_decoder.cpp b/protocols/rtp/src/rtcp_decoder.cpp
index a7d45e4..a99af7f 100644
--- a/protocols/rtp/src/rtcp_decoder.cpp
+++ b/protocols/rtp/src/rtcp_decoder.cpp
@@ -565,7 +565,7 @@
     }
 
     // record any remaining items beyond the temp storage size
-    if (loop_limit < num_items)
+    if ((loop_limit < num_items) && (ii < TMP_SDES_STORAGE))
     {
         uint8* cp_ptr = (uint8*) tmp_sdes_items[ii].content.ptr;
         uint8 cp_len = (uint8)(tmp_sdes_items[ii].content.len & 0xFF);
diff --git a/protocols/systems/3g-324m_pvterminal/build/make/local.mk b/protocols/systems/3g-324m_pvterminal/build/make/local.mk
index 5150890..e510c62 100644
--- a/protocols/systems/3g-324m_pvterminal/build/make/local.mk
+++ b/protocols/systems/3g-324m_pvterminal/build/make/local.mk
@@ -82,9 +82,5 @@
         h245/per/include/analyzeper.h \
         h245/per/include/genericper.h 
 
-ifeq ($(USING_MONA),1)
-HDRS += h324/tsc/mona/include/mona_extension_interface.h 
-endif 
-
 include $(MK)/library.mk
 
diff --git a/protocols/systems/3g-324m_pvterminal/common/include/h223types.h b/protocols/systems/3g-324m_pvterminal/common/include/h223types.h
index 173bed5..0012525 100644
--- a/protocols/systems/3g-324m_pvterminal/common/include/h223types.h
+++ b/protocols/systems/3g-324m_pvterminal/common/include/h223types.h
@@ -20,7 +20,6 @@
 
 #include "oscl_base.h"
 #include "oscl_mem.h"
-#include "pvt_events.h"
 #include "pvt_params.h"
 #include "h245pri.h"
 #include "h245_deleter.h"
diff --git a/protocols/systems/3g-324m_pvterminal/h223/include/logicalchannel.h b/protocols/systems/3g-324m_pvterminal/h223/include/logicalchannel.h
index 0cfd174..097f95c 100644
--- a/protocols/systems/3g-324m_pvterminal/h223/include/logicalchannel.h
+++ b/protocols/systems/3g-324m_pvterminal/h223/include/logicalchannel.h
@@ -303,6 +303,7 @@
         void Resume();
 
         OSCL_IMPORT_REF PVMFStatus Connect(PVMFPortInterface* aPort);
+        OSCL_IMPORT_REF virtual PVMFStatus PeerConnect(PVMFPortInterface* aPort);
 
         // Implement pure virtuals from PvmiCapabilityAndConfig interface
         OSCL_IMPORT_REF void setObserver(PvmiConfigAndCapabilityCmdObserver* aObserver);
@@ -389,6 +390,8 @@
         }
 
         PVMFStatus PutData(PVMFSharedMediaMsgPtr aMsg);
+        OSCL_IMPORT_REF PVMFStatus PeerConnect(PVMFPortInterface* aPort);
+
 };
 
 #define NUM_INCOMING_SDU_BUFFERS 8
diff --git a/protocols/systems/3g-324m_pvterminal/h223/include/lowerlayer.h b/protocols/systems/3g-324m_pvterminal/h223/include/lowerlayer.h
index c3a34a7..f325fcf 100644
--- a/protocols/systems/3g-324m_pvterminal/h223/include/lowerlayer.h
+++ b/protocols/systems/3g-324m_pvterminal/h223/include/lowerlayer.h
@@ -23,7 +23,6 @@
 #include "oscl_timer.h"
 #endif
 #include "pvt_params.h"
-#include "pvt_events.h"
 #include "pduparcom.h"
 #include "layer.h"
 #include "media_packet.h"
diff --git a/protocols/systems/3g-324m_pvterminal/h223/src/logicalchannel.cpp b/protocols/systems/3g-324m_pvterminal/h223/src/logicalchannel.cpp
index 209ea36..af7423f 100644
--- a/protocols/systems/3g-324m_pvterminal/h223/src/logicalchannel.cpp
+++ b/protocols/systems/3g-324m_pvterminal/h223/src/logicalchannel.cpp
@@ -308,12 +308,6 @@
         iObserver->ReceivedFormatSpecificInfo(lcn, (uint8*)iFsiFrag.getMemFragPtr(), iFsiFrag.getMemFragSize());
     }
 
-    if (iPaused)
-    {
-        PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "H223OutgoingChannel::PutData Logical channel %d paused.  Dropping media data.", lcn));
-        return PVMFErrInvalidState;
-    }
-
     if (IsSegmentable() && iWaitForRandomAccessPoint)
     {
         if ((mediaData->getMarkerInfo()&PVMF_MEDIA_DATA_MARKER_INFO_RANDOM_ACCESS_POINT_BIT) == 0)
@@ -588,7 +582,12 @@
     {
         return false;
     }
+    if ((aStatus == PVMFSuccess) && iPaused)
+    {
+        PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "H223OutgoingChannel::GetNextPacket Logical channel %d paused.", lcn));
+        return false;
 
+    }
     if ((aStatus == PVMFSuccess) && iBufferMediaMs && iBufferMediaBytes)
     {
         /* Still buffering */
@@ -629,7 +628,7 @@
     // clear messages in input queue
     ClearMsgQueues();
     // go through pending queue
-    while (GetNextPacket(aMediaData, PVMFFailure))
+    while (GetNextPacket(aMediaData, PVMFErrCancelled))
     {
         PV_STAT_INCR(iNumBytesFlushed, aMediaData->getFilledSize())
         OsclSharedPtr<PVMFMediaDataImpl> aMediaDataImpl;
@@ -715,6 +714,46 @@
     PortActivity(PVMF_PORT_ACTIVITY_CONNECT);
     return PVMFSuccess;
 }
+OSCL_EXPORT_REF PVMFStatus H223OutgoingChannel::PeerConnect(PVMFPortInterface* aPort)
+{
+
+    PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "H223OutgoingChannel::PeerConnect aPort=0x%x", this, aPort));
+    if (!aPort)
+    {
+        PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "0x%x H223OutgoingChannel::PeerConnect: Error - Connecting to invalid port", this));
+        return PVMFErrArgument;
+    }
+    if (iConnectedPort)
+    {
+        PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "0x%x H223OutgoingChannel::PeerConnect: Error - Already connected", this));
+        return PVMFFailure;
+    }
+
+    OsclAny* config = NULL;
+    aPort->QueryInterface(PVMI_CAPABILITY_AND_CONFIG_PVUUID, config);
+    if (!config)
+    {
+        PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "H223OutgoingChannel::PeerConnect: Error - Peer port does not support capability interface"));
+        return PVMFFailure;
+    }
+
+
+    PVMFStatus status = PVMFSuccess;
+
+    status = NegotiateInputSettings((PvmiCapabilityAndConfig*)config);
+
+    if (status != PVMFSuccess)
+    {
+        PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "H223OutgoingChannel::PeerConnect: Error - Settings negotiation failed. status=%d", status));
+        return status;
+    }
+
+
+    iConnectedPort = aPort;
+    PortActivity(PVMF_PORT_ACTIVITY_CONNECT);
+
+    return status;
+}
 
 PVMFStatus H223OutgoingChannel::NegotiateInputSettings(PvmiCapabilityAndConfig* aConfig)
 {
@@ -730,7 +769,7 @@
                         kvp, numParams, NULL);
     if (status != PVMFSuccess || numParams == 0)
     {
-        PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "H223OutgoingChannel::NegotiateInputSettings, Error:  getParametersSync failed.  status=%d", status));
+        PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "H223OutgoingChannel::NegotiateInputSettings, Error:  getParametersSync failed.  status=%d", status));
         return status;
     }
 
@@ -746,7 +785,7 @@
 
     if (!selectedKvp)
     {
-        PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "H223OutgoingChannel::NegotiateInputSettings, Error:  Input format not supported by peer"));
+        PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "H223OutgoingChannel::NegotiateInputSettings, Error:  Input format not supported by peer"));
         return PVMFFailure;
     }
     if (PVMFSuccess != setConfigParametersSync(selectedKvp, aConfig))
@@ -758,6 +797,137 @@
     kvp = NULL;
     numParams = 0;
 
+
+    if (iMediaType.isVideo())
+    {
+        // frame width negotiations
+        uint32 width = GetVideoFrameSize(iDataType, true);
+        status = aConfig->getParametersSync(NULL, (PvmiKeyType)VIDEO_OUTPUT_WIDTH_CAP_QUERY, kvp, numParams, NULL);
+        if (status != PVMFSuccess || numParams != 1)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "H223OutgoingChannel::NegotiateInputSettings: Error - config->getParametersSync(cap width) failed"));
+            // do not report error for now as enc nodes dont implemlement some parameters
+
+        }
+        else
+        {
+            if (kvp[0].value.uint32_value > width)
+            {
+                OsclMemAllocator alloc;
+                PvmiKvp kvp;
+                kvp.key = NULL;
+                kvp.length = oscl_strlen(VIDEO_OUTPUT_WIDTH_CUR_QUERY) + 1; // +1 for \0
+                kvp.key = (PvmiKeyType)alloc.ALLOCATE(kvp.length);
+                if (kvp.key == NULL)
+                {
+                    PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "H223OutgoingChannel::NegotiateInputSettings: Error - alloc failed for VIDEO_OUTPUT_WIDTH_CUR_QUERY kvp "));
+                    return PVMFErrNoMemory;
+                }
+                oscl_strncpy(kvp.key, VIDEO_OUTPUT_WIDTH_CUR_QUERY, kvp.length);
+                kvp.value.uint32_value = width;
+
+                if (PVMFSuccess != setConfigParametersSync(&kvp, aConfig))
+                {
+                    PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "H223OutgoingChannel::NegotiateInputSettings, Error:  setConfigParametersSync width failed"));
+                    //dont return PVMFFailure for now ;
+                }
+
+
+                alloc.deallocate((OsclAny*)(kvp.key));
+
+            }
+            aConfig->releaseParameters(NULL, kvp, numParams);
+        }
+
+        kvp = NULL;
+        numParams = 0;
+
+
+
+        // frame height negotiations
+        uint32 height = GetVideoFrameSize(iDataType, false);
+        status = aConfig->getParametersSync(NULL, (PvmiKeyType)VIDEO_OUTPUT_HEIGHT_CAP_QUERY, kvp, numParams, NULL);
+        if (status != PVMFSuccess || numParams != 1)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "H223OutgoingChannel::NegotiateInputSettings: Error - config->getParametersSync(cap height) failed"));
+            // do not report error for now as enc nodes dont implemlement some parameters
+
+        }
+        else
+        {
+            if (kvp[0].value.uint32_value > height)
+            {
+                OsclMemAllocator alloc;
+                PvmiKvp kvp;
+                kvp.key = NULL;
+                kvp.length = oscl_strlen(VIDEO_OUTPUT_HEIGHT_CUR_QUERY) + 1; // +1 for \0
+                kvp.key = (PvmiKeyType)alloc.ALLOCATE(kvp.length);
+                if (kvp.key == NULL)
+                {
+                    PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "H223OutgoingChannel::NegotiateInputSettings: Error - alloc failed for VIDEO_OUTPUT_HEIGHT_CUR_QUERY kvp "));
+                    return PVMFErrNoMemory;
+                }
+                oscl_strncpy(kvp.key, VIDEO_OUTPUT_HEIGHT_CUR_QUERY, kvp.length);
+                kvp.value.uint32_value = height;
+
+                if (PVMFSuccess != setConfigParametersSync(&kvp, aConfig))
+                {
+                    PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "H223OutgoingChannel::NegotiateInputSettings, Error:  setConfigParametersSync height failed"));
+                    //dont return PVMFFailure for now;
+                }
+                alloc.deallocate((OsclAny*)(kvp.key));
+
+            }
+            aConfig->releaseParameters(NULL, kvp, numParams);
+        }
+
+        kvp = NULL;
+        numParams = 0;
+
+        // frame rate negotiations
+        uint32 framerate = GetMaxFrameRate(iDataType);
+        // VIDEO_OUTPUT_FRAME_RATE_CAP_QUERY not available
+        status = aConfig->getParametersSync(NULL, (PvmiKeyType)VIDEO_OUTPUT_FRAME_RATE_CUR_QUERY, kvp, numParams, NULL);
+        if (status != PVMFSuccess || numParams != 1)
+        {
+            PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "H223OutgoingChannel::NegotiateInputSettings: Error - config->getParametersSync(cap frame rate failed"));
+            // do not report error for now as enc nodes dont implemlement some parameters
+
+        }
+        else
+        {
+            if (kvp[0].value.float_value > framerate)
+            {
+                OsclMemAllocator alloc;
+                PvmiKvp kvp;
+                kvp.key = NULL;
+                kvp.length = oscl_strlen(VIDEO_OUTPUT_FRAME_RATE_CUR_QUERY) + 1; // +1 for \0
+                kvp.key = (PvmiKeyType)alloc.ALLOCATE(kvp.length);
+                if (kvp.key == NULL)
+                {
+                    PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "H223OutgoingChannel::NegotiateInputSettings: Error - alloc failed for VIDEO_OUTPUT_FRAME_RATE_CUR_QUERY kvp "));
+                    return PVMFErrNoMemory;
+                }
+                oscl_strncpy(kvp.key, VIDEO_OUTPUT_FRAME_RATE_CUR_QUERY, kvp.length);
+                kvp.value.float_value = (float)framerate;
+
+                if (PVMFSuccess != setConfigParametersSync(&kvp, aConfig))
+                {
+                    PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "H223OutgoingChannel::NegotiateInputSettings, Error:  setConfigParametersSync frame rate failed"));
+                    //dont return PVMFFailure for now ;
+                }
+                alloc.deallocate((OsclAny*)(kvp.key));
+
+            }
+            aConfig->releaseParameters(NULL, kvp, numParams);
+        }
+
+        kvp = NULL;
+        numParams = 0;
+
+
+    }
+
     return PVMFSuccess;
 }
 ////////////////////////////////////////////////////////////////////////////
@@ -973,6 +1143,26 @@
     }
 }
 
+OSCL_EXPORT_REF PVMFStatus H223OutgoingControlChannel::PeerConnect(PVMFPortInterface* aPort)
+{
+    PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "H223OutgoingControlChannel::PeerConnect aPort=0x%x", this, aPort));
+    if (!aPort)
+    {
+        PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "0x%x H223OutgoingControlChannel::PeerConnect: Error - Connecting to invalid port", this));
+        return PVMFErrArgument;
+    }
+    if (iConnectedPort)
+    {
+        PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "0x%x H223OutgoingControlChannel::PeerConnect: Error - Already connected", this));
+        return PVMFFailure;
+    }
+
+    iConnectedPort = aPort;
+    PortActivity(PVMF_PORT_ACTIVITY_CONNECT);
+
+    return PVMFSuccess;
+
+}
 PVMFStatus H223OutgoingControlChannel::PutData(PVMFSharedMediaMsgPtr aMsg)
 {
     PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "H223OutgoingControlChannel::PutData - iNumPendingPdus=%d,iNumMediaData=%d", iNumPendingPdus, iNumMediaData));
diff --git a/protocols/systems/common/include/tsc.h b/protocols/systems/common/include/tsc.h
index a77e6ad..6b32a9f 100644
--- a/protocols/systems/common/include/tsc.h
+++ b/protocols/systems/common/include/tsc.h
@@ -19,7 +19,6 @@
 #define TSC_H_INCLUDED
 
 #include "pvt_params.h"
-#include "pvt_events.h"
 
 #ifndef PVMF_NODE_INTERFACE_H_INCLUDED
 #include "pvmf_node_interface.h"
diff --git a/protocols/systems/tools/general/common/include/pv_paragon_bp_rx_header.h b/protocols/systems/tools/general/common/include/pv_paragon_bp_rx_header.h
deleted file mode 100644
index 30666bf..0000000
--- a/protocols/systems/tools/general/common/include/pv_paragon_bp_rx_header.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* ------------------------------------------------------------------
- * Copyright (C) 1998-2009 PacketVideo
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
- * express or implied.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- * -------------------------------------------------------------------
- */
-
-#ifndef __PV_PARAGON_BP_RX_HEADER_H
-#define __PV_PARAGON_BP_RX_HEADER_H
-
-
-#include "oscl_base.h"
-
-#define PARAGON_BP_INFO_FIELD_TX_QUEUE_SIZE_BIT 0x01
-#define PARAGON_BP_TX_QUEUE_SIZE_FIELD 2
-
-#define PARAGON_BP_PAYLOAD_SIZE_FIELD 2
-
-typedef struct
-{
-    uint8 seqNum;
-    uint8 infoField;
-} Paragon_BP_Rx_Base_Hdr;
-
-typedef struct
-{
-    uint8 seqNum;
-    uint8 infoField;
-    uint16 payloadSize;
-    uint8 payload[2];  //Use address of this to access payload data (align structure to 16 bit boudaries).
-} Paragon_BP_Rx_Normal_Hdr;
-
-typedef struct
-{
-    uint8 seqNum;
-    uint8 infoField;
-    uint16 txQueueSize;
-    uint16 payloadSize;
-    uint8 payload[2];  //Use address of this to access payload data (align structure to 16 bit boudaries).
-} Paragon_BP_Rx_Hdr_Opt_Tx_Q_Size;
-
-
-#define PARAGON_BP_RX_BASE_HDR_SIZE sizeof(Paragon_BP_Rx_Base_Hdr)
-//Always subtract payload from size
-#define PARAGON_BP_RX_NORMAL_HDR_SIZE (sizeof(Paragon_BP_Rx_Normal_Hdr) - sizeof(uint16))
-#define PARAGON_BP_RX_OPT_TX_Q_SIZE_HDR_SIZE (sizeof(Paragon_BP_Rx_Hdr_Opt_Tx_Q_Size) - sizeof(uint16))
-
-#endif // __PV_PARAGON_BP_RX_HEADER_H
diff --git a/protocols/systems/tools/general/common/include/pv_paragon_bp_tx_header.h b/protocols/systems/tools/general/common/include/pv_paragon_bp_tx_header.h
deleted file mode 100644
index efd3529..0000000
--- a/protocols/systems/tools/general/common/include/pv_paragon_bp_tx_header.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* ------------------------------------------------------------------
- * Copyright (C) 1998-2009 PacketVideo
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
- * express or implied.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- * -------------------------------------------------------------------
- */
-
-#ifndef __PV_PARAGON_BP_TX_HEADER_H
-#define __PV_PARAGON_BP_TX_HEADER_H
-
-
-#include "oscl_base.h"
-
-#define PARAGON_BP_INFO_FIELD_TX_SYNC_FLAG_BIT 0x01
-#define PARAGON_BP_TX_SYNC_FLAG_SIZE_FIELD 1
-
-#define PARAGON_BP_TX_PAYLOAD_SIZE_FIELD 2
-#define PARAGON_BP_TX_MAX_SYNC_FLAG_SIZE 8
-
-typedef struct
-{
-    uint8 seqNum;
-    uint8 infoField;
-    uint8 payload[2];  // To align the struct to 32 bit boundaries
-} Paragon_BP_Tx_Base_Hdr;
-
-typedef struct
-{
-    uint8 seqNum;
-    uint8 infoField;
-    uint16 payloadSize;
-    uint8 payload[4];  //Use this address to access payload data (also aligns structure to 32 bit boudaries).
-} Paragon_BP_Tx_Normal_Hdr;
-
-typedef struct
-{
-    uint8 seqNum;
-    uint8 infoField;
-    uint8 syncFlagSize;
-    uint8 syncFlag[1];
-} Paragon_BP_Tx_Hdr_Opt_Sync_Flag;
-
-
-#define PARAGON_BP_TX_BASE_HDR_SIZE (sizeof(Paragon_BP_Tx_Base_Hdr)-(2*sizeof(uint8)))
-//Always subtract payload from size
-#define PARAGON_BP_TX_NORMAL_HDR_SIZE (sizeof(Paragon_BP_Rx_Normal_Hdr) - (4*sizeof(uint8)))
-
-#endif // __PV_PARAGON_BP_RX_HEADER_H
diff --git a/protocols/systems/tools/general/common/include/pvcommon.h b/protocols/systems/tools/general/common/include/pvcommon.h
deleted file mode 100644
index e13d148..0000000
--- a/protocols/systems/tools/general/common/include/pvcommon.h
+++ /dev/null
@@ -1,232 +0,0 @@
-/* ------------------------------------------------------------------
- * Copyright (C) 1998-2009 PacketVideo
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
- * express or implied.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- * -------------------------------------------------------------------
- */
-
-#ifndef __PVCOMMON_H__
-#define __PVCOMMON_H__
-
-#include <e32base.h>
-
-enum TPVURNType
-{
-    EURNTypeError,
-    EUrlFile,
-    ELocalFile,
-    EPvxFile
-};
-
-enum TPVClipSource
-{
-    EClipSourceError	= 0x000,
-    ELocal				= 0x001,
-    EStreaming			= 0x002,
-    EDownload			= 0x004,
-};
-
-enum TPVCodecType
-{
-    ENoCodec		= 0x0000,
-    EAacDec			= 0x0001,
-    EGsmamrDec		= 0x0002,
-    EEvrcDec		= 0x0004,
-    ELastAudioCodec	= 0x00FF,
-
-    EM4vDec			= 0x0100,
-    EH263Dec		= 0x0200
-};
-
-enum TPVClipType
-{
-    EInvalidType,
-    EAudioOnly,
-    EVideoOnly,
-    EAudioVideo,
-    EStillVideo,
-    EAudioStillVideo
-};
-
-enum TPVEndOfClipAction
-{
-    ENoAction	= 0,
-    ECloseApp,
-    ENextUrl
-};
-
-enum TPVPlaybackControl		// For Download only
-{
-    ENoPlayback		= 0,
-    EAfterDownload,
-    EAsap,
-    EReserve
-};
-
-enum TPVPlayerEngineState
-{
-    EIdle,
-    EClipSelected,
-    ESelectingTrack,
-    EInitializingPlay,
-    EPlaying,
-    EBuffering,
-    EStopped,
-    EPaused,
-    EDownloading,
-    EDownloadingPlaying,
-    EDownloadSuspended,
-    EUnknownEngineState
-};
-
-enum TPVStatusCode
-{
-    EPVError = 0,	// API return value only
-    EPVSuccess,		// API return value only
-
-    EOpenURNSuccess,
-    EOpenURNFailure,
-
-    EPlaySuccess,
-    EPlayFailure,
-
-    EStopSuccess,
-    EStopEndOfClip,
-    EStopTimeReached,
-    EStopFailure,
-
-    EPauseSuccess,
-    EPauseFailure,
-
-    EInvalidStartTime,
-    EInvalidStopTime,
-    EInvalidFilename,
-
-    ERepositionNotAllowed,
-    EAudioOnlyNotAllowed,
-    EVideoOnlyNotAllowed,
-
-    EUnsupportedCodec,
-    EVideoDimensionTooLarge,
-
-    EDownloadSuccess,
-    EDownloadFailure,
-    EDownloadNotEnoughMemorySpace,
-
-    EResumeDownloadSuccess,
-    EResumeDownloadFailure,
-
-    EStopDownloadSuccess,
-    EStopDownloadFailure,
-
-    EAudioError,
-    EVideoError,
-    EDownloadError,
-
-    EInvalidURL,
-    EConnectionError,
-    EServerError,
-    EServerErrorMessage,
-
-    EDownloadStatus,	// 0-100 for download status
-    EPlayStatus,		// 0-100 for play status, -1 for buffering/waiting mode
-    EStreamBuffering,	// 0-100 how much of buffer filled (100 for buffer==preroll buffer time)
-    ERepositionBuffering, // how much more time in ms till start time
-
-    EVideoWidth,
-    EVideoHeight,
-    EDisplayVideoFrame,
-
-    EMemoryAllocationError,
-    ELastEventId
-};
-
-
-//
-// Defines
-//
-#define MAX_URL_LEN			256
-#define MAX_FILENAME_LEN	256
-#define MAX_TITLE_LEN		256
-#define MAX_AUTHOR_LEN		256
-#define MAX_COPYRIGHT_LEN	256
-#define MAX_RATING_LEN		256
-#define MAX_DESCRIPTION_LEN	256
-#define MAX_VERSION_LEN		256
-#define MAX_OWNER_LEN		256
-#define MAX_DATE_LEN		256
-
-#define MAX_VERSIONSTRING_LEN		12
-#define MAX_OBSERVERPARAM2_LEN		100
-
-
-//
-// Structures
-//
-struct TPVAppParams
-{
-public:
-    TBool iSecured;
-    TBool iUserPlaybackAllowed;
-    TBool iRepositioningAllowed;
-    TPVPlaybackControl iControl;
-    TPVEndOfClipAction iAction;
-    TBufC<MAX_URL_LEN> iNextUrl;
-};
-
-struct TPVClipInfo
-{
-public:
-    TBool iLive;
-    TBool iRepositioningAllowed;
-    TBool iAllowAudioOnly;					// NOT USED CURRENTLY
-    TBool iAllowVideoOnly;
-    TPVClipType iType;						// Clip type
-    TInt iWidth;							// Width of video
-    TInt iHeight;							// Height of video
-    TInt iDuration;							// Length of clip in milliseconds
-    TInt iSize;								// Download file size in bytes
-    TBufC<MAX_TITLE_LEN> iTitle;
-    TBufC<MAX_AUTHOR_LEN> iAuthor;
-    TBufC<MAX_COPYRIGHT_LEN> iCopyright;
-    TBufC<MAX_RATING_LEN> iRating;
-    TBufC<MAX_DESCRIPTION_LEN> iDescription;
-    TBufC<MAX_OWNER_LEN> iOwner;
-    TBufC<MAX_VERSION_LEN> iVersion;
-    TBufC<MAX_DATE_LEN> iCreationDate;
-};
-
-struct TPVDownloadInfo
-{
-public:
-    TBool iDownloadComplete;
-    TInt iInterruptedTime;
-    TBufC<MAX_FILENAME_LEN> iFilename;
-};
-
-
-// PVEngine event observer - for communicating events back to UI
-class MPVEngineObserver
-{
-    public:
-        IMPORT_C virtual void HandlePVEngineEvent(TPVStatusCode aEventId,
-                TInt aParam1,
-                const TDesC& aParam2) = 0;
-        IMPORT_C virtual void HandlePVVideoEvent(const unsigned char* aData,
-                TInt aSize) = 0;
-};
-
-#endif // __PVCOMMON_H__
-
-
diff --git a/protocols/systems/tools/general/common/include/pvt_events.h b/protocols/systems/tools/general/common/include/pvt_events.h
deleted file mode 100644
index 0008b27..0000000
--- a/protocols/systems/tools/general/common/include/pvt_events.h
+++ /dev/null
@@ -1,195 +0,0 @@
-/* ------------------------------------------------------------------
- * Copyright (C) 1998-2009 PacketVideo
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
- * express or implied.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- * -------------------------------------------------------------------
- */
-#if !defined(PVT_EVENTS_H)
-#define PVT_EVENTS_H
-#include "oscl_types.h"
-#include "oscl_string_containers.h"
-#include "pvt_common.h"
-#include "pvt_params.h"
-
-/* Base class for all PVTemrinal events */
-class CPVTerminalEvent
-{
-    public:
-        CPVTerminalEvent(OSCL_wHeapString<OsclMemAllocator>* desc = NULL)
-        {
-            if (desc)
-                SetDescription(*desc);
-        }
-        virtual ~CPVTerminalEvent() {};
-
-        /* Returns a texual description of the event */
-        virtual const OSCL_wHeapString<OsclMemAllocator>* GetDescription() const
-        {
-            return &description;
-        }
-        virtual void SetDescription(OSCL_wHeapString<OsclMemAllocator>& desc)
-        {
-            description =  desc;
-        }
-    protected:
-        OSCL_wHeapString<OsclMemAllocator> description;
-};
-
-/* Response to a command.  Contains the command id and the status code */
-class CPVTerminalResponse : public CPVTerminalEvent
-{
-    public:
-        CPVTerminalResponse(TPVStatusCode a_status_code):
-                status_code(a_status_code) {};
-
-        virtual ~CPVTerminalResponse() {};
-
-        TPVStatusCode GetStatusCode() const
-        {
-            return status_code;
-        }
-    protected:
-        TPVStatusCode status_code;
-};
-
-/* Unsolicited indication messages */
-class CPVTerminalIndication : public CPVTerminalEvent
-{
-};
-
-class CPVTerminalError : public CPVTerminalEvent
-{
-    public:
-        CPVTerminalError(TPVSeverity s, OSCL_wHeapString<OsclMemAllocator>& desc) : CPVTerminalEvent(&desc), severity(s) {}
-        virtual ~CPVTerminalError() {};
-        TPVSeverity GetSeverity()
-        {
-            return severity;
-        }
-    private:
-        TPVSeverity severity;
-};
-
-
-class ConnectResponse : public CPVTerminalResponse
-{
-    public:
-        ConnectResponse(TPVStatusCode a_status_code): CPVTerminalResponse(a_status_code) {}
-    private:
-};
-
-
-class DisconnectResponse : public CPVTerminalResponse
-{
-    public:
-        DisconnectResponse(TPVStatusCode a_status_code, TPVTerminalIdentifier which):
-                CPVTerminalResponse(a_status_code), iWhich(which) {};
-        virtual ~DisconnectResponse() {};
-
-        TPVTerminalIdentifier GetTerminalIdentifier()
-        {
-            return iWhich;
-        }
-    private:
-        TPVTerminalIdentifier iWhich;
-};
-
-class HoldResponse : public CPVTerminalResponse
-{
-    public:
-        HoldResponse(TPVStatusCode a_status_code): CPVTerminalResponse(a_status_code) {};
-        virtual ~HoldResponse() {};
-};
-class ReleaseHoldResponse : public CPVTerminalResponse
-{
-    public:
-        ReleaseHoldResponse(TPVStatusCode a_status_code): CPVTerminalResponse(a_status_code) {};
-        virtual ~ReleaseHoldResponse() {};
-};
-class SetChannelParamsResponse : public CPVTerminalResponse
-{
-    public:
-        SetChannelParamsResponse(TPVStatusCode a_status_code): CPVTerminalResponse(a_status_code) {};
-        virtual ~SetChannelParamsResponse() {};
-};
-class SetMuxParamsResponse : public CPVTerminalResponse
-{
-    public:
-        SetMuxParamsResponse(TPVStatusCode a_status_code): CPVTerminalResponse(a_status_code) {};
-        virtual ~SetMuxParamsResponse() {};
-};
-
-class OpenChannelResponse : public CPVTerminalResponse
-{
-    public:
-        OpenChannelResponse(TPVStatusCode a_status_code, PV2WayMediaType type, CPVChannelParam* param):
-                CPVTerminalResponse(a_status_code), iChannelParam(param), iType(type) {};
-        virtual ~OpenChannelResponse() {};
-        PV2WayMediaType GetMediaType()
-        {
-            return iType;
-        }
-        CPVChannelParam* GetChannelParam()
-        {
-            return iChannelParam;
-        }
-    private:
-        CPVChannelParam* iChannelParam;
-        PV2WayMediaType iType;
-};
-
-class CloseChannelResponse : public CPVTerminalResponse
-{
-    public:
-        CloseChannelResponse(TPVDirection aDirection, TPVChannelId aChannelId, TPVStatusCode a_status_code):
-                CPVTerminalResponse(a_status_code), iDirection(aDirection), iChannelId(aChannelId)
-        {
-        }
-
-        virtual ~CloseChannelResponse() {};
-
-        TPVDirection GetDirection()
-        {
-            return iDirection;
-        }
-
-        TPVChannelId GetChannelId()
-        {
-            return iChannelId;
-        }
-    private:
-        TPVDirection     iDirection;
-        TPVChannelId     iChannelId;
-};
-
-class CPVChannelError: public CPVTerminalError
-{
-    public:
-        CPVChannelError(TPVDirection dir, TPVChannelId id, TPVSeverity s, OSCL_wHeapString<OsclMemAllocator>& desc) :
-                CPVTerminalError(s, desc), direction(dir), cid(id) {};
-        virtual ~CPVChannelError() {};
-        TPVDirection GetDirection()
-        {
-            return direction;
-        }
-        TPVChannelId GetChannelId()
-        {
-            return cid;
-        }
-    private:
-        TPVDirection direction;
-        TPVChannelId cid;
-};
-
-#endif
diff --git a/pvmi/content_policy_manager/plugins/oma1/passthru/src/pvmf_cpmplugin_passthru_oma1.cpp b/pvmi/content_policy_manager/plugins/oma1/passthru/src/pvmf_cpmplugin_passthru_oma1.cpp
index e9580cc..a656db1 100644
--- a/pvmi/content_policy_manager/plugins/oma1/passthru/src/pvmf_cpmplugin_passthru_oma1.cpp
+++ b/pvmi/content_policy_manager/plugins/oma1/passthru/src/pvmf_cpmplugin_passthru_oma1.cpp
@@ -1161,7 +1161,7 @@
     {
         if (!iFileObject)
             return PVDS_FAILURE;
-        int32 result = iFileObject->Size();
+        int32 result = (TOsclFileOffsetInt32)iFileObject->Size();
         PVMF_CPMPLUGIN_PASSTHRUOMA1_LOGDEBUG((0, "PVMFCPMPassThruPlugInOMA1DataStreamSyncInterfaceImpl::QueryReadCapacity returning %d", result));
         if (result < 0)
         {
@@ -1294,7 +1294,7 @@
     OSCL_UNUSED_ARG(sessionID);
     if (!iFileObject)
         return PVDS_FAILURE;
-    int32 result = iFileObject->Tell();
+    int32 result = (TOsclFileOffsetInt32)iFileObject->Tell();
     PVMF_CPMPLUGIN_PASSTHRUOMA1_LOGDEBUG((0, "PVMFCPMPassThruPlugInOMA1DataStreamSyncInterfaceImpl::GetCurrentContentPosition returning %d", result));
     return (uint32)(result);
 }
diff --git a/pvmi/content_policy_manager/src/cpm.cpp b/pvmi/content_policy_manager/src/cpm.cpp
index a3bd526..0c91ce7 100644
--- a/pvmi/content_policy_manager/src/cpm.cpp
+++ b/pvmi/content_policy_manager/src/cpm.cpp
@@ -332,6 +332,49 @@
     iLogger = PVLogger::GetLoggerObject("PVMFCPMImpl");
 
     AddToScheduler();
+
+    //Create the plugin registry and leave in case there
+    // are no plugins.  This is done here in order to allow the
+    // source node to avoid going through a series of unnecessary
+    // async commands.
+
+    /*
+     * Create plugin params for all registered plugins. This container class
+     * holds all the required info about the plugin, thereby obviating the need
+     * to query the registry all the time for info
+     */
+    iNumRegisteredPlugInInitPending = 0;
+    iNumRegisteredPlugInInitComplete = 0;
+    iNumQueryMetaDataExtensionInterfacePending = 0;
+    iNumQueryMetaDataExtensionInterfaceComplete = 0;
+
+    //create the plugin registry, instantiating all the current plugins
+    //from the factory registry.
+    //first remove any old registry.
+    if (iPluginRegistry)
+    {
+        DePopulateCPMPluginRegistry(iPluginRegistry);
+        /** Cleanup all registered plugins*/
+        iPluginRegistry = NULL;
+        /* Clear all vectors */
+        iPlugInParamsVec.clear();
+        iActivePlugInParamsVec.clear();
+        iContentUsageContextVec.clear();
+        iListofActiveSessions.clear();
+        /**/
+    }
+
+    iPluginRegistry = PopulateCPMPluginRegistry();
+
+    //check for empty registry & leave.
+    if (iPluginRegistry
+            && iPluginRegistry->GetNumPlugIns() == 0)
+    {
+        CPMPluginRegistryFactory::DestroyCPMPluginRegistry(iPluginRegistry);
+        iPluginRegistry = NULL;
+        OSCL_LEAVE(OsclErrGeneral);
+    }
+
 }
 
 OSCL_EXPORT_REF void PVMFCPMImpl::ThreadLogoff()
@@ -959,40 +1002,12 @@
 
 void PVMFCPMImpl::DoInit(PVMFCPMCommand& aCmd)
 {
-    /*
-     * Create plugin params for all registered plugins. This container class
-     * holds all the required info about the plugin, thereby obviating the need
-     * to query the registry all the time for info
-     */
-    iNumRegisteredPlugInInitPending = 0;
-    iNumRegisteredPlugInInitComplete = 0;
-    iNumQueryMetaDataExtensionInterfacePending = 0;
-    iNumQueryMetaDataExtensionInterfaceComplete = 0;
-
-    //create the plugin registry, instantiating all the current plugins
-    //from the factory registry.
-    //first remove any old registry.
-    if (iPluginRegistry)
-    {
-        DePopulateCPMPluginRegistry(iPluginRegistry);
-        /** Cleanup all registered plugins*/
-        iPluginRegistry = NULL;
-        /* Clear all vectors */
-        iPlugInParamsVec.clear();
-        iActivePlugInParamsVec.clear();
-        iContentUsageContextVec.clear();
-        iListofActiveSessions.clear();
-        /**/
-    }
-
-    iPluginRegistry = PopulateCPMPluginRegistry();
     if (!iPluginRegistry)
     {
-        PVMF_CPM_LOGERROR((0, "PVMFCPMImpl::DoInit - PopulateCPMPluginRegistry Failed"));
+        PVMF_CPM_LOGERROR((0, "PVMFCPMImpl::DoInit - No Plugin Registry"));
         CommandComplete(iInputCommands, aCmd, PVMFFailure);
     }
 
-
     for (uint32 i = 0; i < iPluginRegistry->GetNumPlugIns(); i++)
     {
         CPMPlugInParams plugInParams;
diff --git a/pvmi/media_io/pvmi_mio_avi_wav_fileinput/src/pvmi_mio_avi_wav_file.cpp b/pvmi/media_io/pvmi_mio_avi_wav_fileinput/src/pvmi_mio_avi_wav_file.cpp
index 81bbc74..3187295 100644
--- a/pvmi/media_io/pvmi_mio_avi_wav_fileinput/src/pvmi_mio_avi_wav_file.cpp
+++ b/pvmi/media_io/pvmi_mio_avi_wav_fileinput/src/pvmi_mio_avi_wav_file.cpp
@@ -245,12 +245,6 @@
 ////////////////////////////////////////////////////////////////////////////
 OSCL_EXPORT_REF PVMFCommandId PvmiMIOAviWavFile::Reset(const OsclAny* aContext)
 {
-    if (iState != STATE_STARTED || iState != STATE_PAUSED)
-    {
-        OSCL_LEAVE(OsclErrInvalidState);
-        return -1;
-    }
-
     return AddCmdToQueue(CMD_RESET, aContext);
 }
 
@@ -550,6 +544,30 @@
 
         aParameters[0].value.float_value = iSettings.iFrameRate;
     }
+    else if (pv_mime_strcmp(aIdentifier, AUDIO_OUTPUT_SAMPLING_RATE_CUR_QUERY) == 0)
+    {
+        aNum_parameter_elements = 1;
+        status = AllocateKvp(aParameters, (PvmiKeyType)AUDIO_OUTPUT_SAMPLING_RATE_CUR_VALUE, aNum_parameter_elements);
+        if (status != PVMFSuccess)
+        {
+            LOG_ERR((0, "PvmiMIOAviWavFile::GetOutputParametersSync: Error - AllocateKvp failed. status=%d", status));
+            return status;
+        }
+
+        aParameters[0].value.uint32_value = (uint32)iSettings.iSamplingFrequency;
+    }
+    else if (pv_mime_strcmp(aIdentifier, AUDIO_OUTPUT_NUM_CHANNELS_CUR_QUERY) == 0)
+    {
+        aNum_parameter_elements = 1;
+        status = AllocateKvp(aParameters, (PvmiKeyType)AUDIO_OUTPUT_NUM_CHANNELS_CUR_VALUE, aNum_parameter_elements);
+        if (status != PVMFSuccess)
+        {
+            LOG_ERR((0, "PvmiMIOAviWavFile::GetOutputParametersSync: Error - AllocateKvp failed. status=%d", status));
+            return status;
+        }
+
+        aParameters[0].value.uint32_value = (uint32)iSettings.iNumChannels;
+    }
     else if (pv_mime_strcmp(aIdentifier, OUTPUT_TIMESCALE_CUR_QUERY) == 0)
     {
         aNum_parameter_elements = 1;
@@ -961,7 +979,12 @@
     cmd.iData1 = aData1;
     cmd.iId = iCmdIdCounter;
     ++iCmdIdCounter;
-    iCmdQueue.push_back(cmd);
+
+    if (CMD_RESET == aType)
+        iCmdQueue.push_front(cmd);
+    else
+        iCmdQueue.push_back(cmd);
+
     RunIfNotReady();
     return cmd.iId;
 }
@@ -1047,6 +1070,9 @@
 
 PVMFStatus PvmiMIOAviWavFile::DoReset()
 {
+    while (!iCmdQueue.empty())
+        iCmdQueue.erase(&iCmdQueue.front());
+
     iWriteState = EWriteOK;
 #if PROFILING_ON
     if (!oDiagnosticsLogged)
diff --git a/pvmi/media_io/pvmi_mio_fileinput/src/pvmi_mio_fileinput.cpp b/pvmi/media_io/pvmi_mio_fileinput/src/pvmi_mio_fileinput.cpp
index 601437f..20afcdf 100644
--- a/pvmi/media_io/pvmi_mio_fileinput/src/pvmi_mio_fileinput.cpp
+++ b/pvmi/media_io/pvmi_mio_fileinput/src/pvmi_mio_fileinput.cpp
@@ -232,12 +232,6 @@
 
 OSCL_EXPORT_REF PVMFCommandId PvmiMIOFileInput::Reset(const OsclAny* aContext)
 {
-    if (iState != STATE_STARTED || iState != STATE_PAUSED)
-    {
-        OSCL_LEAVE(OsclErrInvalidState);
-        return -1;
-    }
-
     return AddCmdToQueue(CMD_RESET, aContext);
 }
 
@@ -1104,6 +1098,7 @@
         iStreamDuration = numFrames * (iMicroSecondsPerDataEvent / 1000); //in msec
     }
     else if (iSettings.iMediaFormat == PVMF_MIME_AMR_IF2 ||
+             iSettings.iMediaFormat == PVMF_MIME_AMRWB_IETF ||
              iSettings.iMediaFormat == PVMF_MIME_AMR_IETF)
     {
         int32  size, frameSize;
@@ -1132,10 +1127,20 @@
         //skip AMR file header.
         if (currentFrame[0] == '#')
         {
-            iFileHeaderSize = 6;
+            iFileHeaderSize = 0;
+            if (iSettings.iMediaFormat == PVMF_MIME_AMR_IETF)
+            {
+                //Skip AMR-NB magic word - "#!AMR\n" (or 0x2321414d520a in hexadecimal) (6 characters)
+                iFileHeaderSize = 6;
+            }
+            else if (iSettings.iMediaFormat == PVMF_MIME_AMRWB_IETF)
+            {
+                //Skip AMR-WB magic word - "#!AMR-WB\n" (or 0x2321414d522d57420a in hexadecimal) (9 characters)
+                iFileHeaderSize = 9;
+            }
             currentFrame += iFileHeaderSize;
             iInputFile.Seek(iFileHeaderSize, Oscl_File::SEEKSET);
-            bytesProcessed = 6;
+            bytesProcessed = iFileHeaderSize;
         }
 
         // Find size of each frame iteratively until end of file
@@ -1146,9 +1151,22 @@
             for (chunk = 0; (chunk < iSettings.iNum20msFramesPerChunk) && (bytesProcessed < fileSize); chunk++)
             {
                 if (iSettings.iMediaFormat == PVMF_MIME_AMR_IF2)
+                {
                     size = GetIF2FrameSize(currentFrame[0]);
+                    if (size == -1)
+                    {
+                        return PVMFFailure;
+                    }
+                }
                 else
-                    size = GetIETFFrameSize(currentFrame[0]);
+                {
+                    size = GetIETFFrameSize(currentFrame[0],
+                                            iSettings.iMediaFormat);
+                    if (size == -1)
+                    {
+                        return PVMFFailure;
+                    }
+                }
                 frameSize += size;
                 currentFrame += size;
                 bytesProcessed += size;
@@ -1261,8 +1279,13 @@
 
         iFileOpened = true;
 
+        //seek to zero
         if (iInputFile.Seek(0, Oscl_File::SEEKSET))
             return PVMFFailure;
+
+        //skip the header if any
+        if (iInputFile.Seek(iFileHeaderSize, Oscl_File::SEEKSET))
+            return PVMFFailure;
     }
 
     AddDataEventToQueue(0);
@@ -1350,6 +1373,7 @@
     }
     else if (iSettings.iMediaFormat == PVMF_MIME_AMR_IF2 ||
              iSettings.iMediaFormat == PVMF_MIME_AMR_IETF ||
+             iSettings.iMediaFormat == PVMF_MIME_AMRWB_IETF ||
              iSettings.iMediaFormat == PVMF_MIME_ADTS ||
              iSettings.iMediaFormat == PVMF_MIME_MPEG4_AUDIO ||
              iSettings.iMediaFormat == PVMF_MIME_ADIF ||
@@ -1568,34 +1592,82 @@
 }
 
 //////////////////////////////////////////////////////////////////////////////////
-int32 PvmiMIOFileInput::GetIETFFrameSize(uint8 aFrameType)
+int32 PvmiMIOFileInput::GetIETFFrameSize(uint8 aFrameType,
+        PVMFFormatType aFormat)
 {
-    uint8 frameType = (uint8)(aFrameType >> 3);
-
-    // Find frame size for each frame type
-    switch (frameType)
+    uint8 frameType = (uint8)(aFrameType >> 3) & 0x0f;
+    if (aFormat == PVMF_MIME_AMR_IETF)
     {
-        case 0: // AMR 4.75 Kbps
-            return 13;
-        case 1: // AMR 5.15 Kbps
-            return 14;
-        case 2: // AMR 5.90 Kbps
-            return 16;
-        case 3: // AMR 6.70 Kbps
-            return 18;
-        case 4: // AMR 7.40 Kbps
-            return 20;
-        case 5: // AMR 7.95 Kbps
-            return 21;
-        case 6: // AMR 10.2 Kbps
-            return 27;
-        case 7: // AMR 12.2 Kbps
-            return 32;
-        case 15: // AMR Frame No Data
-            return 1;
-        default: // Error - For Future Use
-            return -1;
+        // Find frame size for each frame type
+        switch (frameType)
+        {
+            case 0: // AMR 4.75 Kbps
+                return 13;
+            case 1: // AMR 5.15 Kbps
+                return 14;
+            case 2: // AMR 5.90 Kbps
+                return 16;
+            case 3: // AMR 6.70 Kbps
+                return 18;
+            case 4: // AMR 7.40 Kbps
+                return 20;
+            case 5: // AMR 7.95 Kbps
+                return 21;
+            case 6: // AMR 10.2 Kbps
+                return 27;
+            case 7: // AMR 12.2 Kbps
+                return 32;
+            case 8: // AMR Frame SID
+                return 6;
+            case 9: // AMR Frame GSM EFR SID
+                return 7;
+            case 10:// AMR Frame TDMA EFR SID
+            case 11:// AMR Frame PDC EFR SID
+                return 6;
+            case 15: // AMR Frame No Data
+                return 1;
+            default: // Error - For Future Use
+                return -1;
+        }
     }
+    else if (aFormat == PVMF_MIME_AMRWB_IETF)
+    {
+        // Find frame size for each frame type
+        switch (frameType)
+        {
+            case 0: // AMR-WB 6.60 Kbps
+                return 18;
+            case 1: // AMR-WB 8.85 Kbps
+                return 24;
+            case 2: // AMR-WB 12.65 Kbps
+                return 33;
+            case 3: // AMR-WB 14.25 Kbps
+                return 37;
+            case 4: // AMR-WB 15.85 Kbps
+                return 41;
+            case 5: // AMR-WB 18.25 Kbps
+                return 47;
+            case 6: // AMR-WB 19.85 Kbps
+                return 51;
+            case 7: // AMR-WB 23.05 Kbps
+                return 59;
+            case 8: // AMR-WB 23.85 Kbps
+                return 61;
+            case 9: // AMR-WB SID Frame
+                return 6;
+            case 10: //Reserved
+            case 11: //Reserved
+            case 12: //Reserved
+            case 13: //Reserved
+                return -1;
+            case 14: // AMR-WB Frame Lost
+            case 15: // AMR-WB Frame No Data
+                return 1;
+            default: // Error - For Future Use
+                return -1;
+        }
+    }
+    return -1;
 }
 
 //////////////////////////////////////////////////////////////////////////////////
diff --git a/pvmi/media_io/pvmi_mio_fileinput/src/pvmi_mio_fileinput.h b/pvmi/media_io/pvmi_mio_fileinput/src/pvmi_mio_fileinput.h
index 6aa3c54..8f7961e 100644
--- a/pvmi/media_io/pvmi_mio_fileinput/src/pvmi_mio_fileinput.h
+++ b/pvmi/media_io/pvmi_mio_fileinput/src/pvmi_mio_fileinput.h
@@ -250,7 +250,7 @@
         int32 LocateM4VFrameHeader(uint8* video_buffer, int32 vop_size);
         int32 LocateH263FrameHeader(uint8* video_buffer, int32 vop_size);
         int32 GetIF2FrameSize(uint8 aFrameType);
-        int32 GetIETFFrameSize(uint8 aFrameType);
+        int32 GetIETFFrameSize(uint8 aFrameType, PVMFFormatType aFormat);
 
         void CloseInputFile();
 
diff --git a/pvmi/media_io/pvmio_comm_loopback/src/pvmi_mio_comm_loopback.cpp b/pvmi/media_io/pvmio_comm_loopback/src/pvmi_mio_comm_loopback.cpp
index 75a938f..4bd929e 100644
--- a/pvmi/media_io/pvmio_comm_loopback/src/pvmi_mio_comm_loopback.cpp
+++ b/pvmi/media_io/pvmio_comm_loopback/src/pvmi_mio_comm_loopback.cpp
@@ -230,12 +230,6 @@
 
 OSCL_EXPORT_REF PVMFCommandId PvmiMIOCommLoopback::Reset(const OsclAny* aContext)
 {
-    if (iState != STATE_STARTED || iState != STATE_PAUSED)
-    {
-        OSCL_LEAVE(OsclErrInvalidState);
-        return -1;
-    }
-
     return AddCmdToQueue(CMD_RESET, aContext);
 }
 
diff --git a/pvmi/media_io/pvmiofileoutput/include/pvmi_media_io_fileoutput.h b/pvmi/media_io/pvmiofileoutput/include/pvmi_media_io_fileoutput.h
index 76bdb96..0f05b23 100644
--- a/pvmi/media_io/pvmiofileoutput/include/pvmi_media_io_fileoutput.h
+++ b/pvmi/media_io/pvmiofileoutput/include/pvmi_media_io_fileoutput.h
@@ -155,6 +155,7 @@
             , public PvmiMIOControl
             , public PvmiMediaTransfer
             , public PvmiCapabilityAndConfig
+            , public PvmiClockExtensionInterface
 
 {
     public:
@@ -178,6 +179,7 @@
 
         // APIs from PvmiMIOControl
 
+
         PVMFStatus connect(PvmiMIOSession& aSession, PvmiMIOObserver* aObserver);
 
         PVMFStatus disconnect(PvmiMIOSession aSession);
@@ -244,6 +246,8 @@
 
         void cancelAllCommands();
 
+        void setUserClockExtnInterface(bool aEnable);
+
         // Pure virtuals from PvmiCapabilityAndConfig
 
         void setObserver(PvmiConfigAndCapabilityCmdObserver* aObserver);
@@ -280,6 +284,15 @@
         int32 yuv2rgb(uint8 * pBufRGBRev, uint8 * pBufYUV, int32 width, int32 height);
         void UpdateVideoChunkHeaderIdx();
 
+        //from PvmiClockExtensionInterface
+        OSCL_IMPORT_REF PVMFStatus SetClock(PVMFMediaClock *clockVal) ;
+
+        //from PVInterface
+        OSCL_IMPORT_REF void addRef() ;
+        OSCL_IMPORT_REF void removeRef() ;
+        OSCL_IMPORT_REF bool queryInterface(const PVUuid& uuid, PVInterface*& iface) ;
+        void queryUuid(PVUuid& uuid);
+
     private:
         void initData();
 
@@ -433,6 +446,8 @@
 
         MediaType	  iMediaType;
         bool		  iCompressedMedia;
+        PVMFMediaClock* iClock;
+        const bool iLogOutputToFile;
 };
 
 //An observer class for test support.
diff --git a/pvmi/media_io/pvmiofileoutput/src/pvmi_media_io_fileoutput.cpp b/pvmi/media_io/pvmiofileoutput/src/pvmi_media_io_fileoutput.cpp
index 2e89a07..48bb97c 100644
--- a/pvmi/media_io/pvmiofileoutput/src/pvmi_media_io_fileoutput.cpp
+++ b/pvmi/media_io/pvmiofileoutput/src/pvmi_media_io_fileoutput.cpp
@@ -24,6 +24,8 @@
 
 #include "oscl_dll.h"
 
+#define LOG_OUTPUT_TO_FILE	1
+
 // Define entry point for this DLL
 OSCL_DLL_ENTRY_POINT_DEFAULT()
 
@@ -31,6 +33,8 @@
 #include "pvmi_media_io_fileoutput_registry_factory.h"
 #include "oscl_mem.h"
 
+#define QUEUE_LIMIT 10
+
 OSCL_EXPORT_REF PvmiMIOControl* PVMFMediaFileOutputRegistryFactory::CreateMediaIO(OsclAny* aParam)
 {
     PVRefFileOutput* ptr = OSCL_NEW
@@ -51,6 +55,11 @@
 OSCL_EXPORT_REF PVRefFileOutput::PVRefFileOutput(const OSCL_wString& aFileName, bool logStrings)
         : OsclTimerObject(OsclActiveObject::EPriorityNominal, "pvreffileoutput")
         , iOutputFileName(aFileName)
+#if (LOG_OUTPUT_TO_FILE)
+        , iLogOutputToFile(true)
+#else
+        , iLogOutputToFile(false)
+#endif
 {
     initData();
     iLogStrings = logStrings;
@@ -65,6 +74,11 @@
         , bool logStrings)
         : OsclTimerObject(OsclActiveObject::EPriorityNominal, "pvreffileoutput")
         , iOutputFileName(aFileName)
+#if (LOG_OUTPUT_TO_FILE)
+        , iLogOutputToFile(true)
+#else
+        , iLogOutputToFile(false)
+#endif
 {
     initData();
     //test features...
@@ -87,10 +101,15 @@
     iParametersLogged = false;
 }
 
-OSCL_EXPORT_REF PVRefFileOutput::PVRefFileOutput(const oscl_wchar* aFileName,
-        bool aActiveTiming)
+OSCL_EXPORT_REF PVRefFileOutput::PVRefFileOutput(const oscl_wchar* aFileName
+        , bool aActiveTiming)
         : OsclTimerObject(OsclActiveObject::EPriorityNominal, "pvreffileoutput")
         , iOutputFileName(aFileName)
+#if (LOG_OUTPUT_TO_FILE)
+        , iLogOutputToFile(true)
+#else
+        , iLogOutputToFile(false)
+#endif
 {
     initData();
     iActiveTiming = NULL;
@@ -101,7 +120,7 @@
         OsclAny*ptr = alloc.allocate(sizeof(PVRefFileOutputActiveTimingSupport));
         if (ptr)
         {
-            iActiveTiming = OSCL_PLACEMENT_NEW(ptr, PVRefFileOutputActiveTimingSupport(10));
+            iActiveTiming = OSCL_PLACEMENT_NEW(ptr, PVRefFileOutputActiveTimingSupport(QUEUE_LIMIT));
         }
         // For active MIO assuming it to be audio MIO.
         iMediaType = MEDIATYPE_AUDIO;
@@ -115,6 +134,11 @@
         , iOutputFileName(aFileName)
         , iMediaType(aMediaType)
         , iCompressedMedia(aCompressedMedia)
+#if (LOG_OUTPUT_TO_FILE)
+        , iLogOutputToFile(true)
+#else
+        , iLogOutputToFile(false)
+#endif
 {
     initData();
 }
@@ -152,11 +176,7 @@
     iParametersLogged = false;
     iFormatMask = 0;
     iTextFormat = PVMF_MIME_FORMAT_UNKNOWN;
-#if PVFILEOUTPUT_CLOCK_EXTN_SUPPORTED
-    iUseClockExtension = true;
-#else
     iUseClockExtension = false;
-#endif
     iRIFFChunk.chunkID = FOURCC_RIFF;//0x46464952;   //"RIFF" in ASCII form, big-endian form
     iRIFFChunk.chunkSize = 0;
     iRIFFChunk.format  = FOURCC_WAVE;//0x45564157;   //"WAVE" in ASCII form, big-endian form
@@ -181,6 +201,7 @@
     iVideoLastTimeStamp = 0;
     iVideoCount = 0;
     iIsMIOConfigured = false;
+    iClock = NULL;
     //Connect with file server.
     if (!iFsConnected)
     {
@@ -195,6 +216,19 @@
     }
 }
 
+void PVRefFileOutput::setUserClockExtnInterface(bool aEnable)
+{
+    if (aEnable == true)
+    {
+        iUseClockExtension = true;
+    }
+    else
+    {
+        iUseClockExtension = false;
+    }
+
+}
+
 void PVRefFileOutput::ResetData()
 //reset all data from this session.
 {
@@ -766,75 +800,81 @@
 void PVRefFileOutput::LogParameters()
 {
     iParametersLogged = true;
-    char string[128];
-    int32 len;
-    if (iVideoFormatString.get_size() > 0)
+    if (iLogOutputToFile)
     {
-        len = oscl_snprintf(string, 128, "Video Format %s ", iVideoFormatString.get_str());
-        iOutputFile.Write(string, sizeof(uint8), len) ;
-    }
-    if (iVideoHeightValid)
-    {
-        len = oscl_snprintf(string, 128, "Video Height %d ", iVideoHeight);
-        iOutputFile.Write(string, sizeof(uint8), len) ;
-    }
-    if (iVideoWidthValid)
-    {
-        len = oscl_snprintf(string, 128, "Video Width %d ", iVideoWidth);
-        iOutputFile.Write(string, sizeof(uint8), len) ;
-    }
-    if (iVideoDisplayHeightValid)
-    {
-        len = oscl_snprintf(string, 128, "Video Display Height %d ", iVideoDisplayHeight);
-        iOutputFile.Write(string, sizeof(uint8), len) ;
-    }
-    if (iVideoDisplayWidthValid)
-    {
-        len = oscl_snprintf(string, 128, "Video Display Width %d ", iVideoDisplayWidth);
-        iOutputFile.Write(string, sizeof(uint8), len) ;
-    }
-    if (iAudioFormatString.get_size() > 0)
-    {
-        len = oscl_snprintf(string, 128, "Audio Format %s ", iAudioFormatString.get_str());
-        iOutputFile.Write(string, sizeof(uint8), len) ;
-    }
-    if (iAudioNumChannelsValid)
-    {
-        len = oscl_snprintf(string, 128, "Audio Num Channels %d ", iAudioNumChannels);
-        iOutputFile.Write(string, sizeof(uint8), len) ;
-    }
-    if (iAudioSamplingRateValid)
-    {
-        len = oscl_snprintf(string, 128, "Audio Sampling Rate %d ", iAudioSamplingRate);
-        iOutputFile.Write(string, sizeof(uint8), len) ;
-    }
-    if (iTextFormatString.get_size() > 0)
-    {
-        len = oscl_snprintf(string, 128, "Text Format %s ", iTextFormatString.get_str());
-        iOutputFile.Write(string, sizeof(uint8), len) ;
+        char string[128];
+        int32 len;
+        if (iVideoFormatString.get_size() > 0)
+        {
+            len = oscl_snprintf(string, 128, "Video Format %s ", iVideoFormatString.get_str());
+            iOutputFile.Write(string, sizeof(uint8), len) ;
+        }
+        if (iVideoHeightValid)
+        {
+            len = oscl_snprintf(string, 128, "Video Height %d ", iVideoHeight);
+            iOutputFile.Write(string, sizeof(uint8), len) ;
+        }
+        if (iVideoWidthValid)
+        {
+            len = oscl_snprintf(string, 128, "Video Width %d ", iVideoWidth);
+            iOutputFile.Write(string, sizeof(uint8), len) ;
+        }
+        if (iVideoDisplayHeightValid)
+        {
+            len = oscl_snprintf(string, 128, "Video Display Height %d ", iVideoDisplayHeight);
+            iOutputFile.Write(string, sizeof(uint8), len) ;
+        }
+        if (iVideoDisplayWidthValid)
+        {
+            len = oscl_snprintf(string, 128, "Video Display Width %d ", iVideoDisplayWidth);
+            iOutputFile.Write(string, sizeof(uint8), len) ;
+        }
+        if (iAudioFormatString.get_size() > 0)
+        {
+            len = oscl_snprintf(string, 128, "Audio Format %s ", iAudioFormatString.get_str());
+            iOutputFile.Write(string, sizeof(uint8), len) ;
+        }
+        if (iAudioNumChannelsValid)
+        {
+            len = oscl_snprintf(string, 128, "Audio Num Channels %d ", iAudioNumChannels);
+            iOutputFile.Write(string, sizeof(uint8), len) ;
+        }
+        if (iAudioSamplingRateValid)
+        {
+            len = oscl_snprintf(string, 128, "Audio Sampling Rate %d ", iAudioSamplingRate);
+            iOutputFile.Write(string, sizeof(uint8), len) ;
+        }
+        if (iTextFormatString.get_size() > 0)
+        {
+            len = oscl_snprintf(string, 128, "Text Format %s ", iTextFormatString.get_str());
+            iOutputFile.Write(string, sizeof(uint8), len) ;
+        }
     }
 }
 
 void PVRefFileOutput::LogCodecHeader(uint32 aSeqNum, const PVMFTimestamp& aTimestamp, uint32 datalen)
 {
-    if (iLogStrings)
+    if (iLogOutputToFile)
     {
-        char string[128];
-        int32 len = oscl_snprintf(string, 128, "SeqNum %d Timestamp %d Len %d Codec Header", aSeqNum, aTimestamp, datalen);
-        iOutputFile.Write(string, sizeof(uint8), len) ;
-    }
-    else
-    {
-        if (iVideoFormat == PVMF_MIME_H264_VIDEO_MP4)
+        if (iLogStrings)
         {
-            iOutputFile.Write(&datalen, sizeof(uint8), sizeof(uint32));
+            char string[128];
+            int32 len = oscl_snprintf(string, 128, "SeqNum %d Timestamp %d Len %d Codec Header", aSeqNum, aTimestamp, datalen);
+            iOutputFile.Write(string, sizeof(uint8), len) ;
+        }
+        else
+        {
+            if (iVideoFormat == PVMF_MIME_H264_VIDEO_MP4)
+            {
+                iOutputFile.Write(&datalen, sizeof(uint8), sizeof(uint32));
+            }
         }
     }
 }
 
 void PVRefFileOutput::LogEndOfStream(uint32 aSeqNum, const PVMFTimestamp& aTimestamp)
 {
-    if (iLogStrings)
+    if (iLogOutputToFile && iLogStrings)
     {
         char string[128];
         int32 len = oscl_snprintf(string, 128, "SeqNum %d Timestamp %d EOS", aSeqNum, aTimestamp);
@@ -844,17 +884,20 @@
 
 void PVRefFileOutput::LogFrame(uint32 aSeqNum, const PVMFTimestamp& aTimestamp, uint32 datalen)
 {
-    if (iLogStrings)
+    if (iLogOutputToFile)
     {
-        char string[128];
-        int32 len = oscl_snprintf(string, 128, "SeqNum %d Timestamp %d Len %d Frame", aSeqNum, aTimestamp, datalen);
-        iOutputFile.Write(string, sizeof(uint8), len) ;
-    }
-    else
-    {
-        if (iVideoFormat == PVMF_MIME_H264_VIDEO_MP4)
+        if (iLogStrings)
         {
-            iOutputFile.Write(&datalen, sizeof(uint8), sizeof(uint32));
+            char string[128];
+            int32 len = oscl_snprintf(string, 128, "SeqNum %d Timestamp %d Len %d Frame", aSeqNum, aTimestamp, datalen);
+            iOutputFile.Write(string, sizeof(uint8), len) ;
+        }
+        else
+        {
+            if (iVideoFormat == PVMF_MIME_H264_VIDEO_MP4)
+            {
+                iOutputFile.Write(&datalen, sizeof(uint8), sizeof(uint32));
+            }
         }
     }
 }
@@ -933,7 +976,7 @@
                         if (aDataLen > 0)
                         {
                             LogCodecHeader(data_header_info.seq_num, data_header_info.timestamp, aDataLen);
-                            if (iOutputFile.Write(aData, sizeof(uint8), aDataLen) != aDataLen)
+                            if (iLogOutputToFile && iOutputFile.Write(aData, sizeof(uint8), aDataLen) != aDataLen)
                             {
                                 PVLOGGER_LOGMSG(PVLOGMSG_INST_REL, iLogger, PVLOGMSG_ERR,
                                                 (0, "PVRefFileOutput::writeAsync: Error - File write failed"));
@@ -1012,7 +1055,7 @@
                                 if (textmediadata->iTextSampleEntry.GetRep() != NULL)
                                 {
                                     // @todo Write out the text sample entry in a better format
-                                    if (iOutputFile.Write((OsclAny*)(textmediadata->iTextSampleEntry.GetRep()), sizeof(PVMFTimedTextSampleEntry), 1) != 1)
+                                    if (iLogOutputToFile && iOutputFile.Write((OsclAny*)(textmediadata->iTextSampleEntry.GetRep()), sizeof(PVMFTimedTextSampleEntry), 1) != 1)
                                     {
                                         PVLOGGER_LOGMSG(PVLOGMSG_INST_REL, iLogger, PVLOGMSG_ERR,
                                                         (0, "PVRefFileOutput::writeAsync: Error - File write failed for text sample entry"));
@@ -1022,7 +1065,7 @@
                                 }
 
                                 // Write out the raw text sample
-                                if (iOutputFile.Write(textmediadata->iTextSample, sizeof(uint8), textmediadata->iTextSampleLength) != textmediadata->iTextSampleLength)
+                                if (iLogOutputToFile && iOutputFile.Write(textmediadata->iTextSample, sizeof(uint8), textmediadata->iTextSampleLength) != textmediadata->iTextSampleLength)
                                 {
                                     PVLOGGER_LOGMSG(PVLOGMSG_INST_REL, iLogger, PVLOGMSG_ERR,
                                                     (0, "PVRefFileOutput::writeAsync: Error - File write failed for text sample data"));
@@ -1038,7 +1081,7 @@
                                 //do not render this frame.
                                 char string[128];
                                 int32 len = oscl_snprintf(string, 128, "discard-- frame-step mode");
-                                if (iOutputFile.Write(string, sizeof(uint8), len) != (uint32)len)
+                                if (iLogOutputToFile && iOutputFile.Write(string, sizeof(uint8), len) != (uint32)len)
                                 {
                                     PVLOGGER_LOGMSG(PVLOGMSG_INST_REL, iLogger, PVLOGMSG_ERR,
                                                     (0, "PVRefFileOutput::writeAsync: Error - File write failed"));
@@ -1049,9 +1092,12 @@
                             {
                                 if (iHeaderWritten != true && (iAudioFormat == PVMF_MIME_PCM16 || iAudioFormat == PVMF_MIME_PCM8))
                                 {
-                                    iOutputFile.Write(&iRIFFChunk, sizeof(uint8), sizeof(RIFFChunk));
-                                    iOutputFile.Write(&iFmtSubchunk, sizeof(uint8), sizeof(fmtSubchunk));
-                                    iOutputFile.Write(&iDataSubchunk, sizeof(uint8), sizeof(dataSubchunk));
+                                    if (iLogOutputToFile)
+                                    {
+                                        iOutputFile.Write(&iRIFFChunk, sizeof(uint8), sizeof(RIFFChunk));
+                                        iOutputFile.Write(&iFmtSubchunk, sizeof(uint8), sizeof(fmtSubchunk));
+                                        iOutputFile.Write(&iDataSubchunk, sizeof(uint8), sizeof(dataSubchunk));
+                                    }
                                     iHeaderWritten = true;
                                 }
                                 if (iHeaderWritten != true && (iVideoFormat == PVMF_MIME_YUV420 || iVideoFormat == PVMF_MIME_YUV422))
@@ -1066,7 +1112,7 @@
                                         iVideoFormat == PVMF_MIME_H2632000 ||
                                         iVideoFormat == PVMF_MIME_M4V)
                                 {
-                                    if (iOutputFile.Write(aData, sizeof(uint8), aDataLen) != aDataLen)
+                                    if (iLogOutputToFile && iOutputFile.Write(aData, sizeof(uint8), aDataLen) != aDataLen)
                                     {
                                         PVLOGGER_LOGMSG(PVLOGMSG_INST_REL, iLogger, PVLOGMSG_ERR,
                                                         (0, "PVRefFileOutput::writeAsync: Error - File write failed"));
@@ -1080,7 +1126,7 @@
                                 //'render' this frame
                                 if (iAudioFormat == PVMF_MIME_PCM16 || iAudioFormat == PVMF_MIME_PCM8)
                                 {
-                                    if (iOutputFile.Write(aData, sizeof(uint8), aDataLen) != aDataLen)
+                                    if (iLogOutputToFile && iOutputFile.Write(aData, sizeof(uint8), aDataLen) != aDataLen)
                                     {
                                         PVLOGGER_LOGMSG(PVLOGMSG_INST_REL, iLogger, PVLOGMSG_ERR,
                                                         (0, "PVRefFileOutput::writeAsync: Error - File write failed"));
@@ -1123,7 +1169,7 @@
                                     status = PVMFSuccess;
 #else
                                     uint32 size = iVideoWidth * iVideoHeight * 3 / 2;
-                                    if (iOutputFile.Write(aData, sizeof(uint8), size) != size)
+                                    if (iLogOutputToFile && iOutputFile.Write(aData, sizeof(uint8), size) != size)
                                     {
                                         PVLOGGER_LOGMSG(PVLOGMSG_INST_REL, iLogger, PVLOGMSG_ERR,
                                                         (0, "PVRefFileOutput::writeAsync: Error - File write failed"));
@@ -1666,9 +1712,9 @@
                     LogCodecHeader(0, 0, (int32)aParameters[i].capacity);
                     if (aParameters[i].value.pChar_value != NULL)
                     {
-                        if (iOutputFile.Write(aParameters[i].value.pChar_value,
-                                              sizeof(uint8),
-                                              (int32)aParameters[i].capacity) != (uint32)aParameters[i].length)
+                        if (iLogOutputToFile && iOutputFile.Write(aParameters[i].value.pChar_value,
+                                sizeof(uint8),
+                                (int32)aParameters[i].capacity) != (uint32)aParameters[i].length)
                         {
                             PVLOGGER_LOGMSG(PVLOGMSG_INST_REL, iLogger, PVLOGMSG_ERR,
                                             (0, "PVRefFileOutput::setParametersSync: Error - File write failed"));
@@ -1910,6 +1956,30 @@
     iFormatMask = mask;
 }
 
+OSCL_EXPORT_REF PVMFStatus PVRefFileOutput::SetClock(PVMFMediaClock *clockVal)
+{
+    iClock = clockVal;
+    return PVMFSuccess;
+}
+
+OSCL_EXPORT_REF void PVRefFileOutput::addRef()
+{
+}
+
+OSCL_EXPORT_REF void PVRefFileOutput::removeRef()
+{
+}
+
+OSCL_EXPORT_REF bool PVRefFileOutput::queryInterface(const PVUuid& aUuid, PVInterface*& aInterface)
+{
+    OSCL_UNUSED_ARG(aInterface);
+    OSCL_UNUSED_ARG(aUuid);
+    return true;
+}
+void PVRefFileOutput::queryUuid(PVUuid& uuid)
+{
+    OSCL_UNUSED_ARG(uuid);
+}
 //
 // For active timing support
 //
@@ -2115,7 +2185,7 @@
     }
 
     //Re-start the data transfer if needed.
-    if (iWriteBusy)
+    if (iWriteBusy && iPeer)
     {
         iWriteBusy = false;
         iPeer->statusUpdate(PVMI_MEDIAXFER_STATUS_WRITE);
@@ -2212,71 +2282,76 @@
 
 void PVRefFileOutput::WriteHeaders()
 {
-    uint32 tmp;
+    if (iLogOutputToFile)
+    {
+
+        uint32 tmp;
 
 #ifndef AVI_OUTPUT
-    return;
+        return;
 #endif
 
-    tmp = FOURCC_RIFF;
-    iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //"RIFF"
-    tmp = 38016;
-    iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //4-byte size til the end
-    tmp = formtypeAVI;
-    iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //"AVI "
-    tmp = FOURCC_LIST;
-    iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //"LIST"
-    tmp = 4 + 4 + 4 + sizeof(AVIMainHeader) + 4 + 4 + 4 + 4 + 4 + 4 + 4 + sizeof(AVIStreamHeader) + sizeof(BitMapInfoHeader);
-    iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //4-byte list chunk size (entire list including all streams)
+        tmp = FOURCC_RIFF;
+        iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //"RIFF"
+        tmp = 38016;
+        iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //4-byte size til the end
+        tmp = formtypeAVI;
+        iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //"AVI "
+        tmp = FOURCC_LIST;
+        iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //"LIST"
+        tmp = 4 + 4 + 4 + sizeof(AVIMainHeader) + 4 + 4 + 4 + 4 + 4 + 4 + 4 + sizeof(AVIStreamHeader) + sizeof(BitMapInfoHeader);
+        iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //4-byte list chunk size (entire list including all streams)
 
-    // Write AVIMainHeader
-    tmp = listtypeAVIHEADER;
-    iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //"hdrl"
-    tmp = ckidAVIMAINHDR;
-    iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //"avih"
-    tmp = sizeof(AVIMainHeader);
-    iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //4-byte AVI Header size
-    iAVIMainHeaderPosition = iOutputFile.Tell();
-    iOutputFile.Write(&iAVIMainHeader, sizeof(uint8), sizeof(AVIMainHeader));  //AVI Header Data
+        // Write AVIMainHeader
+        tmp = listtypeAVIHEADER;
+        iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //"hdrl"
+        tmp = ckidAVIMAINHDR;
+        iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //"avih"
+        tmp = sizeof(AVIMainHeader);
+        iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //4-byte AVI Header size
+        iAVIMainHeaderPosition = (TOsclFileOffsetInt32)iOutputFile.Tell();
+        iOutputFile.Write(&iAVIMainHeader, sizeof(uint8), sizeof(AVIMainHeader));  //AVI Header Data
 
-    tmp = FOURCC_LIST;
-    iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //"LIST"
-    tmp = 4 + 4 + 4 + 4 + 4 + sizeof(AVIStreamHeader) + sizeof(BitMapInfoHeader);
-    iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //4-byte size of second LIST chunk (for the first stream)
-    tmp = listtypeSTREAMHEADER;
-    iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //"strl"
-    tmp = ckidSTREAMHEADER;
-    iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //"strh"
-    tmp = sizeof(AVIStreamHeader);  //size of strh
-    iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //4-byte size of strh
+        tmp = FOURCC_LIST;
+        iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //"LIST"
+        tmp = 4 + 4 + 4 + 4 + 4 + sizeof(AVIStreamHeader) + sizeof(BitMapInfoHeader);
+        iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //4-byte size of second LIST chunk (for the first stream)
+        tmp = listtypeSTREAMHEADER;
+        iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //"strl"
+        tmp = ckidSTREAMHEADER;
+        iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //"strh"
+        tmp = sizeof(AVIStreamHeader);  //size of strh
+        iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //4-byte size of strh
 
-    iAVIStreamHeaderPosition = iOutputFile.Tell();
-    iOutputFile.Write(&iAVIStreamHeader, sizeof(uint8), sizeof(AVIStreamHeader));
+        iAVIStreamHeaderPosition = (TOsclFileOffsetInt32)iOutputFile.Tell();
+        iOutputFile.Write(&iAVIStreamHeader, sizeof(uint8), sizeof(AVIStreamHeader));
 
 
-    tmp = ckidSTREAMFORMAT;    //same format as BITMAPINFO
-    iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //"strf"
-    tmp = sizeof(BitMapInfoHeader);
-    iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //4-byte size of  strf
-    iOutputFile.Write(&bi_hdr, sizeof(uint8), sizeof(BitMapInfoHeader));  //stream format data
+        tmp = ckidSTREAMFORMAT;    //same format as BITMAPINFO
+        iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //"strf"
+        tmp = sizeof(BitMapInfoHeader);
+        iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //4-byte size of  strf
+        iOutputFile.Write(&bi_hdr, sizeof(uint8), sizeof(BitMapInfoHeader));  //stream format data
 
-    tmp = FOURCC_LIST;
-    iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //"LIST"
-    iVideoHeaderPosition = iOutputFile.Tell();
-    tmp = 0;
-    iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //4-byte size of movi chunk below
-    tmp = listtypeAVIMOVIE;
-    iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //"movi"
+        tmp = FOURCC_LIST;
+        iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //"LIST"
+        iVideoHeaderPosition = (TOsclFileOffsetInt32)iOutputFile.Tell();
+        tmp = 0;
+        iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //4-byte size of movi chunk below
+        tmp = listtypeAVIMOVIE;
+        iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //"movi"
 #if 0
-    tmp = ckidAVIPADDING;
-    iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //"movi"
-    tmp = 0x6E0;
-    iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //"movi"
-    char junk[0x6E0];
-    oscl_memset(junk, 0, 0x6E0);
-    iOutputFile.Write(junk, sizeof(uint8), 0x6E0);  //"movi"
+        tmp = ckidAVIPADDING;
+        iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //"movi"
+        tmp = 0x6E0;
+        iOutputFile.Write(&tmp, sizeof(uint8), sizeof(uint32));  //"movi"
+        char junk[0x6E0];
+        oscl_memset(junk, 0, 0x6E0);
+        iOutputFile.Write(junk, sizeof(uint8), 0x6E0);  //"movi"
 #endif
+    }
 
+    uint32 tmp;
     tmp = ckidAVINEWINDEX;
     oscl_memcpy(&iIndexBuffer.indexBuffer[0], &tmp, sizeof(uint32));
     iIndexBuffer.length = 4;
@@ -2287,9 +2362,12 @@
 
 void PVRefFileOutput::AddChunk(uint8* chunk, uint32 size, uint32 ckid)
 {
-    iOutputFile.Write(&ckid, sizeof(uint8), sizeof(uint32));
-    iOutputFile.Write(&size, sizeof(uint8), sizeof(uint32));
-    iOutputFile.Write(chunk, sizeof(uint8), size);
+    if (iLogOutputToFile)
+    {
+        iOutputFile.Write(&ckid, sizeof(uint8), sizeof(uint32));
+        iOutputFile.Write(&size, sizeof(uint8), sizeof(uint32));
+        iOutputFile.Write(chunk, sizeof(uint8), size);
+    }
 
     iAVIIndex.chunkID = videoChunkID;
     iAVIIndex.flags = 0x10;
@@ -2313,14 +2391,20 @@
 
 void PVRefFileOutput::UpdateWaveChunkSize()
 {
-    int32 ret = iOutputFile.Tell();
-    iOutputFile.Seek(4, Oscl_File::SEEKSET);
-    ret = iOutputFile.Tell();
+    if (iLogOutputToFile)
+    {
+        int32 ret = (TOsclFileOffsetInt32)iOutputFile.Tell();
+        iOutputFile.Seek(4, Oscl_File::SEEKSET);
+        ret = (TOsclFileOffsetInt32)iOutputFile.Tell();
+    }
     iRIFFChunk.chunkSize = 36 + iDataSubchunk.subchunk2Size;
-    iOutputFile.Write(&iRIFFChunk.chunkSize, sizeof(uint8), 4);
-    iOutputFile.Seek(40, Oscl_File::SEEKSET);
-    iOutputFile.Write(&iDataSubchunk.subchunk2Size, sizeof(uint8), 4);
-    iOutputFile.Flush();
+    if (iLogOutputToFile)
+    {
+        iOutputFile.Write(&iRIFFChunk.chunkSize, sizeof(uint8), 4);
+        iOutputFile.Seek(40, Oscl_File::SEEKSET);
+        iOutputFile.Write(&iDataSubchunk.subchunk2Size, sizeof(uint8), 4);
+        iOutputFile.Flush();
+    }
 }
 
 void PVRefFileOutput::UpdateVideoChunkHeaderIdx()
@@ -2331,28 +2415,42 @@
     iAVIMainHeader.dwMaxBytesPerSec    = (uint32)((float)(iVideoCount * 3 * iVideoHeight * iVideoWidth) / (float)iVideoLastTimeStamp * 1000);
     iAVIMainHeader.dwTotalFrames = iVideoCount;
 
-    iOutputFile.Seek(iAVIMainHeaderPosition, Oscl_File::SEEKSET);
-    iOutputFile.Write(&iAVIMainHeader, sizeof(uint8), sizeof(AVIMainHeader));
+    if (iLogOutputToFile)
+    {
+        iOutputFile.Seek(iAVIMainHeaderPosition, Oscl_File::SEEKSET);
+        iOutputFile.Write(&iAVIMainHeader, sizeof(uint8), sizeof(AVIMainHeader));
+    }
 
     iAVIStreamHeader.dwRate = (uint32)((float)(iVideoCount * 1000000) / (float)iVideoLastTimeStamp);
     iAVIStreamHeader.dwLength = iVideoCount;
 
-    iOutputFile.Seek(iAVIStreamHeaderPosition, Oscl_File::SEEKSET);
-    iOutputFile.Write(&iAVIStreamHeader, sizeof(uint8), sizeof(AVIStreamHeader));
+    if (iLogOutputToFile)
+    {
+        iOutputFile.Seek(iAVIStreamHeaderPosition, Oscl_File::SEEKSET);
+        iOutputFile.Write(&iAVIStreamHeader, sizeof(uint8), sizeof(AVIStreamHeader));
+        iOutputFile.Seek(0, Oscl_File::SEEKEND);
+    }
 
-    iOutputFile.Seek(0, Oscl_File::SEEKEND);
     uint32 tmp = iIndexBuffer.length - 8;
 
     //write the indexBuffer to the file
     oscl_memcpy(&iIndexBuffer.indexBuffer[4], &tmp, sizeof(uint32));
-    iOutputFile.Write(iIndexBuffer.indexBuffer, sizeof(uint8), iIndexBuffer.length);
-    iOutputFile.Seek(0, Oscl_File::SEEKEND);
-    uint32 iAVISize = iOutputFile.Tell() - 8;
-    iOutputFile.Seek(4, Oscl_File::SEEKSET);
-    iOutputFile.Write(&iAVISize, sizeof(uint8), 4);
-    iOutputFile.Seek(iVideoHeaderPosition, Oscl_File::SEEKSET);
+    if (iLogOutputToFile)
+    {
+        iOutputFile.Write(iIndexBuffer.indexBuffer, sizeof(uint8), iIndexBuffer.length);
+        iOutputFile.Seek(0, Oscl_File::SEEKEND);
+    }
+    uint32 iAVISize = (TOsclFileOffsetInt32)iOutputFile.Tell() - 8;
+    if (iLogOutputToFile)
+    {
+        iOutputFile.Seek(4, Oscl_File::SEEKSET);
+        iOutputFile.Write(&iAVISize, sizeof(uint8), 4);
+        iOutputFile.Seek(iVideoHeaderPosition, Oscl_File::SEEKSET);
+    }
     iAVIChunkSize += 4;
-    iOutputFile.Write(&iAVIChunkSize, sizeof(uint8), 4);
-
+    if (iLogOutputToFile)
+    {
+        iOutputFile.Write(&iAVIChunkSize, sizeof(uint8), 4);
+    }
 }
 
diff --git a/pvmi/pvmf/Android.mk b/pvmi/pvmf/Android.mk
index 6d41209..519cfeb 100644
--- a/pvmi/pvmf/Android.mk
+++ b/pvmi/pvmf/Android.mk
@@ -17,7 +17,8 @@
  	src/pvmi_kvp_util.cpp \
  	src/pvmf_mempool.cpp \
  	src/pvmf_media_clock.cpp \
- 	src/pvmf_duration_infomessage.cpp
+ 	src/pvmf_duration_infomessage.cpp \
+ 	src/pvmf_metadata_infomessage.cpp
 
 
 LOCAL_MODULE := libpvmf
@@ -84,6 +85,8 @@
  	include/pvmf_duration_infomessage.h \
  	include/pvmf_durationinfomessage_extension.h \
  	include/pvmf_counted_ptr.h \
+ 	include/pvmf_metadata_infomessage.h \
+ 	include/pvmf_metadatainfomessage_extension.h \
  	include/pvmi_fileio_kvp.h \
  	include/pvmf_timedtext.h
 
diff --git a/pvmi/pvmf/build/make/local.mk b/pvmi/pvmf/build/make/local.mk
index 7897454..127f1e9 100644
--- a/pvmi/pvmf/build/make/local.mk
+++ b/pvmi/pvmf/build/make/local.mk
@@ -24,7 +24,8 @@
 	pvmi_kvp_util.cpp \
 	pvmf_mempool.cpp \
 	pvmf_media_clock.cpp \
-	pvmf_duration_infomessage.cpp
+	pvmf_duration_infomessage.cpp \
+	pvmf_metadata_infomessage.cpp
 
 HDRS :=  pv_interface.h \
          pvmf_node_interface.h \
@@ -72,6 +73,8 @@
          pvmf_duration_infomessage.h \
          pvmf_durationinfomessage_extension.h \
          pvmf_counted_ptr.h \
+         pvmf_metadata_infomessage.h \
+         pvmf_metadatainfomessage_extension.h \
          pvmi_fileio_kvp.h  \
          pvmf_timedtext.h
 
diff --git a/pvmi/pvmf/include/pvmf_format_type.h b/pvmi/pvmf/include/pvmf_format_type.h
index ee3af8b..99ecd18 100644
--- a/pvmi/pvmf/include/pvmf_format_type.h
+++ b/pvmi/pvmf/include/pvmf_format_type.h
@@ -129,6 +129,7 @@
 
 // MIME strings for still image formats
 #define PVMF_MIME_M4V_IMAGE	"X-M4V-IMAGE" // PV Proprietary Still Image
+#define PVMF_MIME_IMAGE_FORMAT "image"
 
 // MIME strings for Multiplexed formats and single-media file formats.
 #define PVMF_MIME_MPEG4FF		"video/MP4"
@@ -143,20 +144,26 @@
 #define PVMF_MIME_DIVXFF		"x-pvmf/mux/divx"
 #define PVMF_MIME_MIDIFF		"application/x-midi"
 #define PVMF_MIME_AVIFF			"x-pvmf/mux/avi"
+#define PVMF_MIME_DATA_PVRFF    "video/x-pvmf-pvr "
 
 // MIME strings for RAW data formats
 #define PVMF_MIME_8BIT_RAW   "X-RAW-8"
 
 // MIME strings for PVMF data source types
 #define PVMF_MIME_DATA_SOURCE_RTSP_URL  "X-PVMF-DATA-SRC-RTSP-URL"
+#define PVMF_MIME_DATA_SOURCE_RTSP_PVR_FCS_URL "X-PVMF-DATA-SRC-RTSP-PVR-FCS-URL"
 #define PVMF_MIME_DATA_SOURCE_HTTP_URL  "X-PVMF-DATA-SRC-HTTP-URL"
 #define PVMF_MIME_DATA_SOURCE_SDP_FILE  "X-PVMF-DATA-SRC-SDP-FILE"
+#define PVMF_MIME_DATA_SOURCE_SDP_PVR_FCS_FILE "X-PVMF-DATA-SRC-SDP-PVR-FCS-FILE"
+#define PVMF_MIME_DATA_SOURCE_SDP_BROADCAST "X-PVMF-DATA-SRC-SDP-BROADCAST"
 #define PVMF_MIME_DATA_SOURCE_PVX_FILE  "X-PVMF-DATA-SRC-PVX-FILE"
 #define PVMF_MIME_DATA_SOURCE_MS_HTTP_STREAMING_URL "X-PVMF-DATA-SRC-MS-HTTP-STREAMING-URL"
 #define PVMF_MIME_DATA_SOURCE_REAL_HTTP_CLOAKING_URL "X-PVMF-DATA-SRC-REAL-HTTP-CLOAKING-URL"
 #define PVMF_MIME_DATA_SOURCE_RTP_PACKET_SOURCE "X-PVMF-DATA-SRC-RTP-PACKET"
+#define PVMF_MIME_DATA_SOURCE_SHOUTCAST_URL "X-PVMF-DATA-SRC-SHOUTCAST-URL"
 #define PVMF_MIME_DATA_SOURCE_UNKNOWN_URL "X-PVMF-DATA-SRC-UNKNOWN-URL"
 
+
 // MIME string for miscellaneous media data formats
 #define PVMF_MIME_3GPP_TIMEDTEXT		"video/3gpp-tt"
 
diff --git a/pvmi/pvmf/include/pvmf_metadata_infomessage.h b/pvmi/pvmf/include/pvmf_metadata_infomessage.h
new file mode 100644
index 0000000..4e1bd15
--- /dev/null
+++ b/pvmi/pvmf/include/pvmf_metadata_infomessage.h
@@ -0,0 +1,92 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#ifndef PVMF_METADATA_INFOMESSAGE_H_INCLUDED
+#define PVMF_METADATA_INFOMESSAGE_H_INCLUDED
+
+#ifndef PVMF_METADATAINFOMESSAGE_EXTENSION_H_INCLUDED
+#include "pvmf_metadatainfomessage_extension.h"
+#endif
+
+/*
+ This class that provides basic implementation of PVMFMetadataInfoMessageInterface.
+ This object can carry the code, UUID, and duration information associated with an
+ info event.
+ */
+class PVMFMetadataInfoMessage : public PVMFMetadataInfoMessageInterface
+{
+    public:
+        /*
+         Default constructor. Ref count is initialized to 1.
+         This object should always be created with OSCL_NEW.
+
+         Event code is initialized to 0.
+         Event UUId is initialized to 0.
+         Event data is NULL.
+         Next message pointer is NULL
+         */
+        OSCL_IMPORT_REF PVMFMetadataInfoMessage();
+
+        /*
+         Constructor with initialization parameters. Ref count is initialized to 1
+         This object should always be created with OSCL_NEW.
+
+         @param aCode Event code value
+         @param aUuid UUID for the event code's group
+         @param aData Pointer to the event's opaque data (optional)
+         @param aNextMsg Pointer to the next message in the list (optional)
+         */
+        OSCL_IMPORT_REF PVMFMetadataInfoMessage(Oscl_Vector<PvmiKvp, OsclMemAllocator>& aKvpList, int32 aCode = 0, PVUuid aUuid = PVMFMetadataInfoMessageInterfaceUUID);
+
+        /*
+         A derived class should override this in order to destroy itself
+         properly by calling OSCL_DELETE with its own type name.
+         */
+        OSCL_IMPORT_REF virtual void destroy();
+
+        /*
+         Method to set the event code and UUID
+
+         @param aCode Event code value
+         @param aUuid UUID for the event code's group
+         */
+        OSCL_IMPORT_REF void SetEventCodeUUID(int32 aCode, PVUuid aUuid);
+
+        // From PVMFMetadataInfoMessageInterface
+        OSCL_IMPORT_REF void GetCodeUUID(int32& aCode, PVUuid& aUuid);
+        OSCL_IMPORT_REF Oscl_Vector<PvmiKvp, OsclMemAllocator>& GetMetadataVector();
+
+        // From PVInterface
+        OSCL_IMPORT_REF virtual void addRef();
+        OSCL_IMPORT_REF virtual void removeRef();
+        OSCL_IMPORT_REF virtual bool queryInterface(const PVUuid& uuid, PVInterface*& iface);
+
+    protected:
+        /* Destructor
+        */
+        OSCL_IMPORT_REF virtual ~PVMFMetadataInfoMessage();
+
+    private:
+        int32 iEventCode;
+        PVUuid iEventUuid;
+        Oscl_Vector<PvmiKvp, OsclMemAllocator> iMetadataVector;
+        int32 iRefCount;
+};
+
+#endif // PVMF_METADATA_INFOMESSAGE_H_INCLUDED
+
+
diff --git a/pvmi/pvmf/include/pvmf_metadatainfomessage_extension.h b/pvmi/pvmf/include/pvmf_metadatainfomessage_extension.h
new file mode 100644
index 0000000..336c9ea
--- /dev/null
+++ b/pvmi/pvmf/include/pvmf_metadatainfomessage_extension.h
@@ -0,0 +1,77 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+#ifndef PVMF_METADATAINFOMESSAGE_EXTENSION_H_INCLUDED
+#define PVMF_METADATAINFOMESSAGE_EXTENSION_H_INCLUDED
+
+#ifndef OSCL_BASE_H_INCLUDED
+#include "oscl_base.h"
+#endif
+#ifndef PV_UUID_H_INCLUDED
+#include "pv_uuid.h"
+#endif
+#ifndef PV_INTERFACE_H
+#include "pv_interface.h"
+#endif
+
+#include "pvmi_kvp.h"
+#include "oscl_vector.h"
+
+#define PVMFMetadataInfoMessageInterfaceUUID PVUuid(0x936f5d11, 0x5ff8, 0x4596, 0x8e, 0xe2, 0x55, 0x4c, 0x1c, 0xa3, 0xf9, 0xbe )
+
+class PVMFMetadataInfoMessageInterface : public PVInterface
+{
+    public:
+        /*
+           Returns the code and space UUID for this info message
+
+           @param aCode Reference to an integer which will be filled in with event code
+           @param aUuid Reference to a PVUuid which will be filled in with UUID assocated to event code
+
+           @return None
+        */
+        virtual void GetCodeUUID(int32& aCode, PVUuid& aUuid) = 0;
+
+        /*
+           Returns a pointer to the next info message in the linked list. If NULL,
+           the current info message is the last element in the list.
+
+           @return Pointer to the next message in the list. NULL if at the end of list
+        */
+        virtual Oscl_Vector<PvmiKvp, OsclMemAllocator>& GetMetadataVector() = 0;
+
+        // From PVInterface
+        /*
+           Increments the reference count for this info message object
+        */
+        virtual void addRef() = 0;
+        /*
+           Decrements the reference count for this info message object and deletes
+           this object if count goes to 0.
+        */
+        virtual void removeRef() = 0;
+        /*
+           Returns the extension interface for the specified UUID if this info
+           message object supports it. If the requested extension interface is supported
+           true is returned, else false.
+        */
+        virtual bool queryInterface(const PVUuid& uuid, PVInterface*& iface) = 0;
+};
+
+
+#endif // PVMF_METADATAINFOMESSAGE_EXTENSION_H_INCLUDED
+
diff --git a/pvmi/pvmf/include/pvmf_node_interface.h b/pvmi/pvmf/include/pvmf_node_interface.h
index 0be0ce9..4ab05fa 100644
--- a/pvmi/pvmf/include/pvmf_node_interface.h
+++ b/pvmi/pvmf/include/pvmf_node_interface.h
@@ -81,6 +81,10 @@
     , EPVMFNodeLastState // derived nodes can add more states as needed
 } TPVMFNodeInterfaceState;
 
+/**
+Oscl shared libary class
+**/
+class OsclSharedLibrary;
 
 /**
  * PVMFNodeErrorEventObserver Class
@@ -416,9 +420,28 @@
          */
         virtual void HandlePortActivity(const PVMFPortActivity& aActivity) = 0;
 
+        /**
+         * Set shared library pointer
+         * @param aPtr Pointer to the shared library.
+         **/
+        virtual void SetSharedLibraryPtr(OsclSharedLibrary* aPtr)
+        {
+            iOsclSharedLibrary = aPtr;
+        }
+
+        /**
+         * Retrieves shared library pointer
+         * @returns Pointer to the shared library.
+         **/
+        virtual OsclSharedLibrary* GetSharedLibraryPtr()
+        {
+            return iOsclSharedLibrary;
+        }
+
     protected:
         PVMFNodeInterface(int32 aSessionReserve = PVMF_NODE_DEFAULT_SESSION_RESERVE) :
                 iInterfaceState(EPVMFNodeCreated)
+                , iOsclSharedLibrary(NULL)
         {
             iSessions.reserve(aSessionReserve);
         }
@@ -426,6 +449,8 @@
         Oscl_Vector<PVMFNodeSession, OsclMemAllocator> iSessions;
         TPVMFNodeInterfaceState iInterfaceState;
 
+        OsclSharedLibrary* iOsclSharedLibrary;
+
         /** This method can be used to update the state and
         ** notify observers of the state change event.
         */
diff --git a/pvmi/pvmf/include/pvmf_return_codes.h b/pvmi/pvmf/include/pvmf_return_codes.h
index eaa062c..3572c8e 100644
--- a/pvmi/pvmf/include/pvmf_return_codes.h
+++ b/pvmi/pvmf/include/pvmf_return_codes.h
@@ -352,7 +352,18 @@
  Notification that memory is not available for new RTP packets
  */
 const PVMFStatus PVMFInfoSourceOverflow = 49;
-
+/*
+ Notification for Media data length in shoutcast session
+ */
+const PVMFStatus PVMFInfoShoutcastMediaDataLength = 50;
+/*
+ Notification for clip bitrate in shoutcast session
+ */
+const PVMFStatus PVMFInfoShoutcastClipBitrate = 51;
+/*
+ Notification for shoutcast session
+ */
+const PVMFStatus PVMFInfoIsShoutcastSesssion = 52;
 /*
  Placeholder for end of range
  */
diff --git a/pvmi/pvmf/include/pvmi_drm_kvp.h b/pvmi/pvmf/include/pvmi_drm_kvp.h
index 29c17f6..8dd57c2 100644
--- a/pvmi/pvmf/include/pvmi_drm_kvp.h
+++ b/pvmi/pvmf/include/pvmi_drm_kvp.h
@@ -128,6 +128,18 @@
 #define PVMF_DRM_INFO_LICENSE_DURATION_SINCE_FIRST_USE_VALUE "drm/duration;valtype=uint32"
 
 /*
+ * License issuer
+ */
+#define PVMF_DRM_INFO_LICENSE_ISSUER_QUERY "dla/license-issuer"
+#define PVMF_DRM_INFO_LICENSE_ISSUER_VALUE "dla/license-issuer;valtype=char*"
+
+/*
+ * Redirect times
+ */
+#define PVMF_DRM_INFO_REDIRECT_TIMES_QUERY "dla/num-redirect"
+#define PVMF_DRM_INFO_REDIRECT_TIMES_VALUE "dla/num-redirect;valtype=uint32"
+
+/*
  * Opaque data for enveloped content
  */
 #define PVMF_DRM_INFO_ENVELOPE_DATA_SIZE_QUERY "drm/envelope-data-size"
diff --git a/pvmi/pvmf/src/pvmf_format_type.cpp b/pvmi/pvmf/src/pvmf_format_type.cpp
index b83ec19..310de61 100644
--- a/pvmi/pvmf/src/pvmf_format_type.cpp
+++ b/pvmi/pvmf/src/pvmf_format_type.cpp
@@ -65,6 +65,7 @@
             (pv_mime_strcmp(iMimeStr.c_str(), PVMF_MIME_ADTS) == 0) ||
             (pv_mime_strcmp(iMimeStr.c_str(), PVMF_MIME_AAC_SIZEHDR) == 0) ||
             (pv_mime_strcmp(iMimeStr.c_str(), PVMF_MIME_MPEG4_AUDIO) == 0) ||
+            (pv_mime_strcmp(iMimeStr.c_str(), PVMF_MIME_3640) == 0) ||
             (pv_mime_strcmp(iMimeStr.c_str(), PVMF_MIME_G726) == 0) ||
             (pv_mime_strcmp(iMimeStr.c_str(), PVMF_MIME_ASF_AMR) == 0) ||
             (pv_mime_strcmp(iMimeStr.c_str(), PVMF_MIME_ASF_MPEG4_AUDIO) == 0))
diff --git a/pvmi/pvmf/src/pvmf_metadata_infomessage.cpp b/pvmi/pvmf/src/pvmf_metadata_infomessage.cpp
new file mode 100644
index 0000000..d66c976
--- /dev/null
+++ b/pvmi/pvmf/src/pvmf_metadata_infomessage.cpp
@@ -0,0 +1,107 @@
+/* ------------------------------------------------------------------
+ * Copyright (C) 1998-2009 PacketVideo
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ * -------------------------------------------------------------------
+ */
+
+#include "pvmf_metadata_infomessage.h"
+#include "oscl_mem.h"
+
+OSCL_EXPORT_REF PVMFMetadataInfoMessage::PVMFMetadataInfoMessage() :
+        iEventCode(0),
+        iRefCount(1)
+{
+    iMetadataVector.reserve(14);
+    iMetadataVector.clear();
+}
+
+OSCL_EXPORT_REF PVMFMetadataInfoMessage::PVMFMetadataInfoMessage(Oscl_Vector<PvmiKvp, OsclMemAllocator>& aMetadataVector, int32 aCode, PVUuid aUuid) :
+        iRefCount(1)
+{
+    // Save the event info
+    iEventCode = aCode;
+    iEventUuid = aUuid;
+    iMetadataVector.clear();
+    iMetadataVector = aMetadataVector;
+}
+
+OSCL_EXPORT_REF PVMFMetadataInfoMessage::~PVMFMetadataInfoMessage()
+{
+    // If the destructor is called directly (instead of via removeRef())
+    // then the ref count for the next message in the list needs to decremented
+    iMetadataVector.clear();
+}
+
+OSCL_EXPORT_REF void PVMFMetadataInfoMessage::destroy()
+{
+    OSCL_DELETE(this);
+}
+
+OSCL_EXPORT_REF void PVMFMetadataInfoMessage::SetEventCodeUUID(int32 aCode, PVUuid aUuid)
+{
+    // Set event code and UUID
+    iEventCode = aCode;
+    iEventUuid = aUuid;
+}
+
+OSCL_EXPORT_REF void PVMFMetadataInfoMessage::GetCodeUUID(int32& aCode, PVUuid& aUuid)
+{
+    // Return event code and UUID
+    aCode = iEventCode;
+    aUuid = iEventUuid;
+}
+
+OSCL_EXPORT_REF Oscl_Vector<PvmiKvp, OsclMemAllocator>& PVMFMetadataInfoMessage::GetMetadataVector()
+{
+    // Return the next message in the list
+    return iMetadataVector;
+}
+
+OSCL_EXPORT_REF void PVMFMetadataInfoMessage::addRef()
+{
+    // Increment this object's ref count
+    ++iRefCount;
+}
+
+OSCL_EXPORT_REF void PVMFMetadataInfoMessage::removeRef()
+{
+    // Decrement this object's ref count
+    --iRefCount;
+
+    // If ref count reaches 0 then destroy this object automatically
+    if (iRefCount <= 0)
+    {
+        // The next message's refcount has already been decremented so
+        // set to NULL so the destructor won't decrement again.
+        // Destroy this instance.
+        destroy();
+    }
+}
+
+OSCL_EXPORT_REF bool PVMFMetadataInfoMessage::queryInterface(const PVUuid& uuid, PVInterface*& iface)
+{
+    // Only returns the error/info message interface
+    if (uuid == PVMFMetadataInfoMessageInterfaceUUID)
+    {
+        PVMFMetadataInfoMessageInterface* myInterface = OSCL_STATIC_CAST(PVMFMetadataInfoMessageInterface*, this);
+        iface = OSCL_STATIC_CAST(PVInterface*, myInterface);
+    }
+    else
+    {
+        return false;
+    }
+    return true;
+}
+
diff --git a/quick_start.txt b/quick_start.txt
index 362974c..f2dfc1c 100644
--- a/quick_start.txt
+++ b/quick_start.txt
@@ -1,164 +1,61 @@
 Q. How to build OpenCORE outside of Android?
-A. As part of the OpenCORE release, PacketVideo also provides it's internal build system 
-that can be used to build the OpenCORE outside of Android with the native linux toolchain. 
+A. As part of the OpenCORE release, PacketVideo also provides it's internal
+build system that can be used to build OpenCORE outside of Android with the
+native linux toolchain. 
 
 The following are the steps involved:
-  NOTE 1: Assume <opencore> is the folder where you have downloaded the OpenCORE codebase.
-  NOTE 2: The setup scripts are meant to be used in bash.
+  NOTE 1: Assume <opencore> is the directory where you have downloaded the
+  OpenCORE codebase
+  NOTE 2: The setup scripts are meant to be used in with the bash shell.
     cd <opencore>/build_config/opencore_dynamic
-    source setup_nr.sh <opencore>
-    make -j -f makefile_nr
+    source setup.sh <opencore>
+    make -j
 
-This will export all the required libraries to <opencore>/build_config/opencore_dynamic/build/installed_lib/linux and the executables to
-<opencore>/build_config/opencore_dynamic/build/bin/linux.
+This will build all the required libraries in
+    <opencore>/build_config/opencore_dynamic/build/installed_lib/linux
+and the executables in 
+    <opencore>/build_config/opencore_dynamic/build/bin/linux.
 
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 Q. How to run the pvplayer engine unit tests?
-A.
-On Android emulator/device:
+A. On Android emulator/device:
     adb push <opencore>/engines/player/test/data/ /sdcard
     adb shell "cd /sdcard; pvplayer_engine_test <test_args> <source_args>"
 
 On host PC:
     cd <opencore>/build_config/opencore_dynamic
-    make -f makefile_nr run_pe_test TEST_ARGS="<test_args>"
+    make run_pe_test TEST_ARGS="<test_args>"
 
-<test_args> can be any of the following:
-Test cases to run option. Default is ALL:
-  -test x y
-   Specify a range of test cases to run. To run one test case, use the
-   same index for x and y.
-  -test L
-   Run local playback test cases only.
-  -test D
-   Run download playback test cases only.
-  -test S
-   Run streaming playback test cases only.
+To see a list of valid <test_args>:
+        make run_pe_test TEST_ARGS="-help"
 
-Compressed video and audio output option. Default is OFF for both:
-  -compV AND/OR -compA
-   For test cases and sinks that support compressed media output (media
-   I/O node test cases), the output data files would have compressed
-   bitstreams. This also means the player engine would not use a decoder
-   node to decode the bitstream from the source node.
-
-Log level options. Default is debug level:
-  -logerr
-   Log at error level
-  -logwarn
-   Log at warning level
-
-Log node options. Default is player engine only:
-  -logall
-   Log everything (log appender at root node)
-  -logoscl
-   Log OSCL only
-  -logperf
-   Log scheduler performance
-  -logperfmin
-   Log scheduler performance (minimal)
-  -logdatapathsrc
-   Log source node datapath only
-  -logdatapathdec
-   Log decoder node datapath only
-
-Proxy enabled ON or OFF, default is OFF
-  -proxy
-
-Source specification option. 
-  -source sourcename
-   Specify the source filename or URL to use for test cases which
-   allow user-specified source name. The unit test determines the
-   source format type using extension or URL header.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 Q. How to run the pv2way engine unit tests?
-A.
-On Android emulator/device:
+A. On Android emulator/device:
     adb push <opencore>/extlibs/opencore/engines/2way/test/test_data/ /sdcard
     adb shell "cd /sdcard; pv2way_omx_engine_test <test_args>"
 
 On host PC:
     cd <opencore>/build_config/opencore_dynamic
-    make -f makefile_nr run_2way_test TEST_ARGS="<test_args>"
+    make run_2way_test TEST_ARGS="<test_args>"
 
-<test_args> can be any of the following:
-Test cases to run option. Default is ALL:
-  -test x y
-   Specify a range of test cases to run. To run one test case, use the
-   same index for x and y.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+To see a list of valid <test_args>:
+        make run_pe_test TEST_ARGS="-help"
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 Q. How to run the pvauthor engine unit tests?
-A.
-On Android emulator/device:
+A.  On Android emulator/device:
     adb push <opencore>/engines/author/test/test_input/ /sdcard
     adb shell "cd /sdcard;test_pvauthorengine <test_args>"
 
 On host PC:
     cd <opencore>/build_config/opencore_dynamic
-    make -f makefile_nr run_ae_test TEST_ARGS="<test_args>"
+    make run_ae_test TEST_ARGS="<test_args>"
 
-<test_args> can be any of the following:
-Test cases to run option. Default is ALL:
-  -test x x
-   Specify a range of test cases to run. To run one test case, use the
-   same index for x and y.
+To see a list of valid <test_args>:
+        make run_pe_test TEST_ARGS="-help"
 
-[test range from: 1001 to: 999]
-
-CMD LINE ARGS FOR COMPRESSED TESTS [test range from: 0 to: 105]
-
-Source specification option for audio.:
-  -audio sourcename
-   Specify the source filename or URL to use for test cases which
-   allow user-specified source name. The unit test determines the
-   source format type using extension or URL header.
-
-Source specification option for video.:
-  -video sourcename
-   Specify the source filename or URL to use for test cases which
-   allow user-specified source name. The unit test determines the
-   source format type using extension or URL header.
-
-Output specification option.
-  -output outputname
-   Specify the output filename to use for test cases which
-   allow user-specified source name.
-
-Authoring Time specification option for Author.:
-  -duration time_in_seconds
-   Specify the time argument to use for test cases which
-   allow user-specified source name.
-
-CMD LINE ARGS FOR UNCOMPRESSED TESTS(with AVI/WAV inputs)[test range from 200 to 306]
-
-Source specification option.:
-  -source sourcename
-   Specify the source filename or URL to use for test cases which
-   allow user-specified source name. The unit test determines the
-   source format type using extension or URL header.
-
-Output specification option.
-  -output outputname
-   Specify the output filename to use for test cases which
-   allow user-specified source name.
-
-Video Encoder Type option. Default is M4V:
-  -encV encodertype
-  specifies the encoder to be used for authoring
-  0:M4V
-  1:H263
-  2:H264
-  e.g -encV 0
-
-Authoring Time specification option for Author.:
-  -duration time_in_seconds
-   Specify the time argument to use for test cases which
-   allow user-specified source name.
-
-NO CMD LINE ARGS ARE REQUIRED TO RUN COMPRESSED ERROR HANDLING TESTS [test range from:400 to 403]
-
-NO CMD LINE ARGS ARE REQUIRED TO RUN UNCOMPRESSED ERROR HANDLING TESTS [test range from:500 to 570]
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/tools_v2/build/make_nr/tools_v2/build/make/android.mk b/tools_v2/build/make/android_make_extras.mk
similarity index 95%
rename from tools_v2/build/make_nr/tools_v2/build/make/android.mk
rename to tools_v2/build/make/android_make_extras.mk
index 9e20fc5..7340b40 100644
--- a/tools_v2/build/make_nr/tools_v2/build/make/android.mk
+++ b/tools_v2/build/make/android_make_extras.mk
@@ -67,6 +67,10 @@
   $(if $(strip $1),$(PRINTF) "$(foreach elem, $1,include $(patsubst %,%/Android.mk,$(patsubst %,\$$(PV_TOP)%,$(strip $(elem))))\n)" >> $2,)
 endef
 
+define is_prelinking_allowed
+  $(if $(strip $1),,$(PRINTF) "\nLOCAL_PRELINK_MODULE := false\n" >> $2)
+endef
+
 ############################################################################
 
 
@@ -88,6 +92,7 @@
 	$$(quiet) $$(call extra_lib_list, $$(EXTRA_LIBS_$1),$$@)
 	$$(quiet) echo "" >> $$@
 	$$(quiet) echo "LOCAL_MODULE := lib$1" >> $$@
+	$$(quiet) $$(call is_prelinking_allowed,$$($1_PRELINK),$$@)
 	$$(quiet) echo "" >> $$@
 	$$(quiet) echo "-include $$(esc_dollar)(PV_TOP)/Android_platform_extras.mk" >> $$@
 	$$(quiet) echo "" >> $$@
@@ -119,9 +124,10 @@
 $1: FORCE
 	$$(quiet) echo "ifneq ($$(esc_dollar)(BUILD_WITHOUT_PV),true)" > $$@
 	$$(quiet) echo "LOCAL_PATH := $$(esc_dollar)(call my-dir)" >> $$@
+	$$(quiet) echo "PV_TOP := $$(esc_dollar)(LOCAL_PATH)" >> $$@
 	$$(quiet) echo "include $$(esc_dollar)(CLEAR_VARS)" >> $$@
 	$$(quiet) echo "" >> $$@
-	$$(quiet) echo "PV_CFLAGS := -Wno-non-virtual-dtor -DENABLE_MEMORY_PLAYBACK -DUSE_CML2_CONFIG" >> $$@
+	$$(quiet) echo "PV_CFLAGS := -Wno-non-virtual-dtor -DENABLE_MEMORY_PLAYBACK -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -DUSE_CML2_CONFIG" >> $$@
 	$$(quiet) echo "" >> $$@
 	$$(quiet) echo "ifeq ($$(esc_dollar)(ENABLE_PV_LOGGING),1)" >> $$@
 	$$(quiet) echo " PV_CFLAGS += -DPVLOGGER_INST_LEVEL=5" >> $$@
@@ -133,8 +139,7 @@
 	$$(quiet) echo "" >> $$@
 	$$(quiet) echo "include $$(esc_dollar)(CLEAR_VARS)" >> $$@
 	$$(quiet) echo "" >> $$@
-	$$(quiet) echo "PV_TOP := extlibs/opencore" >> $$@
-	$$(quiet) echo "FORMAT := nj" >> $$@
+	$$(quiet) echo "FORMAT := android" >> $$@
 	$$(quiet) echo "" >> $$@
 	$$(quiet) echo "PV_COPY_HEADERS_TO := libpv" >> $$@
 	$$(quiet) echo "" >> $$@
@@ -142,13 +147,13 @@
 	$$(quiet) $(PRINTF) "\t$$(esc_dollar)(PV_TOP)/android \\\\\n" >> $$@
 	$$(quiet) $(PRINTF) "\t$$(esc_dollar)(PV_TOP)/extern_libs_v2/khronos/openmax/include \\\\\n" >> $$@
 	$$(quiet) $(PRINTF) "\t$$(esc_dollar)(PV_TOP)/engines/common/include \\\\\n" >> $$@
-	$$(quiet) $(PRINTF) "\t$$(esc_dollar)(PV_TOP)/engines/player/config/linux_nj \\\\\n" >> $$@
+	$$(quiet) $(PRINTF) "\t$$(esc_dollar)(PV_TOP)/engines/player/config/android \\\\\n" >> $$@
 	$$(quiet) $(PRINTF) "\t$$(esc_dollar)(PV_TOP)/engines/player/include \\\\\n" >> $$@
 	$$(quiet) $(PRINTF) "\t$$(esc_dollar)(PV_TOP)/nodes/pvmediaoutputnode/include \\\\\n" >> $$@
 	$$(quiet) $(PRINTF) "\t$$(esc_dollar)(PV_TOP)/nodes/pvdownloadmanagernode/config/opencore \\\\\n" >> $$@
 	$$(quiet) $(PRINTF) "\t$$(esc_dollar)(PV_TOP)/pvmi/pvmf/include \\\\\n" >> $$@
 	$$(quiet) $(PRINTF) "\t$$(esc_dollar)(PV_TOP)/fileformats/mp4/parser/config/opencore \\\\\n" >> $$@
-	$$(quiet) $(PRINTF) "\t$$(esc_dollar)(PV_TOP)/oscl/oscl/config/linux_nj \\\\\n" >> $$@
+	$$(quiet) $(PRINTF) "\t$$(esc_dollar)(PV_TOP)/oscl/oscl/config/android \\\\\n" >> $$@
 	$$(quiet) $(PRINTF) "\t$$(esc_dollar)(PV_TOP)/oscl/oscl/config/shared \\\\\n" >> $$@
 	$$(quiet) $(PRINTF) "\t$$(esc_dollar)(PV_TOP)/engines/author/include \\\\\n" >> $$@
 	$$(quiet) $(PRINTF) "\t$$(esc_dollar)(PV_TOP)/android/drm/oma1/src \\\\\n" >> $$@
diff --git a/tools_v2/build/make_nr/tools_v2/build/make/android_segments.mk b/tools_v2/build/make/android_segments.mk
similarity index 100%
rename from tools_v2/build/make_nr/tools_v2/build/make/android_segments.mk
rename to tools_v2/build/make/android_segments.mk
diff --git a/tools_v2/build/make_nr/tools_v2/build/make/basic_defs.mk b/tools_v2/build/make/basic_defs.mk
similarity index 100%
rename from tools_v2/build/make_nr/tools_v2/build/make/basic_defs.mk
rename to tools_v2/build/make/basic_defs.mk
diff --git a/tools_v2/build/make_nr/tools_v2/build/make/clear.mk b/tools_v2/build/make/clear.mk
similarity index 79%
rename from tools_v2/build/make_nr/tools_v2/build/make/clear.mk
rename to tools_v2/build/make/clear.mk
index a2861ba..2839593 100644
--- a/tools_v2/build/make_nr/tools_v2/build/make/clear.mk
+++ b/tools_v2/build/make/clear.mk
@@ -9,9 +9,9 @@
 LIBS :=
 XINCDIRS := 
 XLIBDIRS := 
-XLDFLAGS := 
-XCPPFLAGS := 
-XCXXFLAGS := 
+XLDFLAGS :=
+XCPPFLAGS :=
+XCXXFLAGS :=
 COMPILED_OBJS :=
 OPTIMIZE_FOR_PERFORMANCE_OVER_SIZE :=
 TARGET_TYPE :=
@@ -19,3 +19,5 @@
 LOCAL_ANDROID_MK_PATH :=
 TEST_ARGS :=
 SOURCE_ARGS :=
+sdkinfo_header_name :=
+PROGTYPE :=
diff --git a/tools_v2/build/make_nr/tools_v2/build/make/cml2_shared.mk b/tools_v2/build/make/cml2_shared.mk
similarity index 97%
rename from tools_v2/build/make_nr/tools_v2/build/make/cml2_shared.mk
rename to tools_v2/build/make/cml2_shared.mk
index f49c132..2810b18 100644
--- a/tools_v2/build/make_nr/tools_v2/build/make/cml2_shared.mk
+++ b/tools_v2/build/make/cml2_shared.mk
@@ -26,7 +26,7 @@
 	$(eval $(1)_fullname:=$(DESTDIR)/lib$1$(TARGET_NAME_SUFFIX).$(SHARED_LIB_EXT))
 	@echo "Building $$@..."
 	$$(call create_objdir,$$(@D))
-	$$(call generate_shared_lib,$$@,$$^)
+	$$(call generate_shared_lib,$$@,$$^,$(strip $($(1)$(TARGET_NAME_SUFFIX)_PRELINK)))
 	@echo "DONE building $$@."
 endef
 
diff --git a/tools_v2/build/make_nr/tools_v2/build/make/doc.mk b/tools_v2/build/make/doc.mk
similarity index 100%
rename from tools_v2/build/make_nr/tools_v2/build/make/doc.mk
rename to tools_v2/build/make/doc.mk
diff --git a/tools_v2/build/make_nr/tools_v2/build/make/entry_point.mk b/tools_v2/build/make/entry_point.mk
similarity index 100%
rename from tools_v2/build/make_nr/tools_v2/build/make/entry_point.mk
rename to tools_v2/build/make/entry_point.mk
diff --git a/tools_v2/build/make_nr/tools_v2/build/make/g++.mk b/tools_v2/build/make/g++.mk
similarity index 87%
rename from tools_v2/build/make_nr/tools_v2/build/make/g++.mk
rename to tools_v2/build/make/g++.mk
index bf57bc5..22d537b 100644
--- a/tools_v2/build/make_nr/tools_v2/build/make/g++.mk
+++ b/tools_v2/build/make/g++.mk
@@ -4,6 +4,7 @@
 LINK ?= $(CXX)
 SHARED_LINK ?= $(CXX)
 AR ?= ar
+STRIP ?= strip
 
 # The following macro will turn on combined
 # compilation and dependency generation
@@ -17,6 +18,7 @@
 SHARED_POST_LDFLAGS ?= -Wl,-no-whole-archive -Wl,--no-undefined $(SYSLIBS)
 SONAME_ARG := -Wl,-h,
 
+STRIP_FLAGS := --strip-unneeded
 AR_ARGS := rl # make sure to leave a space at the end
 
 
@@ -94,8 +96,9 @@
 #########################################################
 
 define generate_prog
-	$(quiet) $(LINK) $(BINDING) $(OUTLINKFLAG)$1 $($2_compiled_objs) $(filter $(LIBCOMPFLAG)%,$($2_LDFLAGS)) \
-	$(PRE_LDFLAGS) $(XOBJECTS)  $(filter-out $(LIBCOMPFLAG)%,$($2_LDFLAGS)) $(POST_LDFLAGS) $(SYSLIBS)
+  $(quiet) $(LINK) $(BINDING) $(OUTLINKFLAG)$1 $($2_compiled_objs) $(filter $(LIBCOMPFLAG)%,$($2_LDFLAGS)) \
+  $(PRE_LDFLAGS) $(XOBJECTS)  $(filter-out $(LIBCOMPFLAG)%,$($2_LDFLAGS)) $(POST_LDFLAGS) $(SYSLIBS)
+  $(if $(filter release,$(strip $(DEFAULT_LIBMODE))),$(call strip_binary,$1))
 endef
 
 #########################################################
@@ -115,4 +118,9 @@
 
 define generate_shared_lib
   $(quiet) $(SHARED_LINK) $(SHARED_PRE_LDFLAGS) $(SONAME_ARG)$(notdir $1) -o $1 $2 $(SHARED_POST_LDFLAGS)
+  $(if $(filter release,$(strip $(DEFAULT_LIBMODE))),$(call strip_binary,$1))
+endef
+
+define strip_binary
+  $(quiet) $(STRIP) $(STRIP_FLAGS) $1
 endef
diff --git a/tools_v2/build/make_nr/tools_v2/build/make/intermediate_level.mk b/tools_v2/build/make/intermediate_level.mk
similarity index 100%
rename from tools_v2/build/make_nr/tools_v2/build/make/intermediate_level.mk
rename to tools_v2/build/make/intermediate_level.mk
diff --git a/tools_v2/build/make_nr/tools_v2/build/make/library.mk b/tools_v2/build/make/library.mk
similarity index 100%
rename from tools_v2/build/make_nr/tools_v2/build/make/library.mk
rename to tools_v2/build/make/library.mk
diff --git a/tools_v2/build/make_nr/tools_v2/build/make/linux.mk b/tools_v2/build/make/linux.mk
similarity index 68%
rename from tools_v2/build/make_nr/tools_v2/build/make/linux.mk
rename to tools_v2/build/make/linux.mk
index 2f88ff2..cfeff7e 100644
--- a/tools_v2/build/make_nr/tools_v2/build/make/linux.mk
+++ b/tools_v2/build/make/linux.mk
@@ -1,3 +1,4 @@
+XCPPFLAGS += -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
 
 INSTALL := install
 INSTALL_OPTS := -c -D -m 444
@@ -34,4 +35,8 @@
 define clean-path
   $(patsubst %/,%,$1)
 endef
-
+#########################################################
+# $(call cd_and_run_test,$@_SOURCE_DIR,$<,$@_TEST_ARGS,$@_SOURCE_ARGS)
+define cd_and_run_test
+	$(quiet) cd $1 ; $2 $3 $4
+endef
diff --git a/tools_v2/build/make_nr/tools_v2/build/make/platforms/linux_nj.mk b/tools_v2/build/make/platforms/android.mk
similarity index 69%
rename from tools_v2/build/make_nr/tools_v2/build/make/platforms/linux_nj.mk
rename to tools_v2/build/make/platforms/android.mk
index c754532..5c15efc 100644
--- a/tools_v2/build/make_nr/tools_v2/build/make/platforms/linux_nj.mk
+++ b/tools_v2/build/make/platforms/android.mk
@@ -4,7 +4,7 @@
 LINK := $(CXX)
 SHARED_LINK := $(CXX)
 SHARED_PRELINK := $(ANDROID_BASE)/tools/apriori 
-SHARED_PRELINK_FLAGS := --quiet --prelinkmap $(CFG_DIR)/prelink-linux-arm.map --locals-only
+SHARED_PRELINK_FLAGS := --quiet --prelinkmap $(ANDROID_BASE)/config/prelink-linux-arm.map --locals-only
 STRIP := $(ANDROID_BASE)/tools/soslim
 STRIP_FLAGS := --strip --shady --quiet
 AR := arm-eabi-ar
@@ -19,15 +19,18 @@
 # include the common engine header files in the search path
 INCDIRS += \
     -I $(ANDROID_BASE)/headers/include \
-    -I $(ANDROID_BASE)/headers/system/bionic/arch-arm/include \
-    -I $(ANDROID_BASE)/headers/system/bionic/include \
-    -I $(ANDROID_BASE)/headers/system/libstdc++/include \
-    -I $(ANDROID_BASE)/headers/system/bionic/kernel/common \
-    -I $(ANDROID_BASE)/headers/system/bionic/kernel/arch-arm \
-    -I $(ANDROID_BASE)/headers/system/libm/include \
+    -I $(ANDROID_BASE)/headers/system/bionic/libc/arch-arm/include \
+    -I $(ANDROID_BASE)/headers/system/bionic/libc/include \
+    -I $(ANDROID_BASE)/headers/system/bionic/libstdc++/include \
+    -I $(ANDROID_BASE)/headers/system/bionic/libc/kernel/common \
+    -I $(ANDROID_BASE)/headers/system/bionic/libc/kernel/arch-arm \
+    -I $(ANDROID_BASE)/headers/system/bionic/libm/include \
+	-I $(ANDROID_BASE)/headers/system/core/include \
+	-I $(ANDROID_BASE)/headers/libhardware/include \
+	-I $(ANDROID_BASE)/headers/skia/include
 
 # Compiler options
-CPPFLAGS += -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -msoft-float -O2 -march=armv5te -fno-rtti -fno-exceptions -mtune=xscale -fpic -mthumb-interwork -ffunction-sections -funwind-tables -finline-functions -fno-inline-functions-called-once -fgcse-after-reload -frerun-cse-after-loop -frename-registers -Wstrict-aliasing=2 -fstack-protector -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -MD -include $(ANDROID_BASE)/headers/include/arch/linux-arm/AndroidConfig.h -DANDROID -fmessage-length=0 -DSK_RELEASE -DNDEBUG -DUDEBUG -g -fvisibility-inlines-hidden -Os -DENABLE_MEMORY_PLAYBACK -fno-rtti
+CPPFLAGS += -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -msoft-float -O2 -march=armv5te -fno-rtti -fno-exceptions -mtune=xscale -fpic -mthumb-interwork -ffunction-sections -funwind-tables -finline-functions -fno-inline-functions-called-once -fgcse-after-reload -frerun-cse-after-loop -frename-registers -Wstrict-aliasing=2 -fstack-protector -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -MD -include $(ANDROID_BASE)/headers/system/core/include/arch/linux-arm/AndroidConfig.h -DANDROID -fmessage-length=0 -DSK_RELEASE -DNDEBUG -DUDEBUG -g -fvisibility-inlines-hidden -Os -DENABLE_MEMORY_PLAYBACK -fno-short-enums 
 
 # Idea is to build only libraries in arm mode and the rest in thumb mode
 OPTIMIZE_FOR_SIZE := -mthumb
@@ -60,28 +63,26 @@
         -Wl,-rpath-link=$(ANDROID_BASE)/prebuilt/obj/lib
 
 
-ifneq ($(strip $(LOCAL_BYPASS_PRELINKING)),true)
-define prelink_and_strip
+define prelink
   $(quiet) $(SHARED_PRELINK) $(SHARED_PRELINK_FLAGS) $1
-  $(quiet) $(STRIP) $(STRIP_FLAGS) $1
 endef
-else
-define prelink_and_strip
-endef
-endif
 
+## this "generate_shared_lib" definition differs from the one in g++.mk 
 define generate_shared_lib
   $(quiet) $(SHARED_LINK) $(SHARED_PRE_LDFLAGS) $(SONAME_ARG)$(notdir $1) -o $1 $2 $(SHARED_POST_LDFLAGS)
-  $(call prelink_and_strip,$1)
+  $(if $(filter true,$(word 1,$(strip $(3)))),$(call prelink,$1),)
+  $(quiet) $(STRIP) $(STRIP_FLAGS) $1
 endef
 
 
+## this "generate_prog" definition differs from the one in g++.mk 
 define generate_prog
   $(quiet) $(LINK) $(BINDING) $(OUTLINKFLAG)$1 $(filter $(LIBCOMPFLAG)%,$($2_LDFLAGS)) \
-    $(PRE_LDFLAGS) $(XOBJECTS) $($2_compiled_objs)  $(filter %.a,$(filter-out $(LIBCOMPFLAG)%,$($2_LDFLAGS))) \
+    $(PRE_LDFLAGS) $(XOBJECTS) $($2_compiled_objs) $(filter %.a,$(filter-out $(LIBCOMPFLAG)%,$($2_LDFLAGS))) \
     $(POST_LDFLAGS) $(patsubst lib%.so,-l%,$(notdir $(filter-out %.a,$(filter-out $(LIBCOMPFLAG)%,$($2_LDFLAGS))))) $(SYSLIBS)
   $(quiet) $(STRIP) $(STRIP_FLAGS) $1
 endef
 
+
 ## END FILE 
 
diff --git a/tools_v2/build/make_nr/tools_v2/build/make/platforms/linux_arm.mk b/tools_v2/build/make/platforms/linux_arm.mk
similarity index 96%
rename from tools_v2/build/make_nr/tools_v2/build/make/platforms/linux_arm.mk
rename to tools_v2/build/make/platforms/linux_arm.mk
index c1e214c..38767e2 100644
--- a/tools_v2/build/make_nr/tools_v2/build/make/platforms/linux_arm.mk
+++ b/tools_v2/build/make/platforms/linux_arm.mk
@@ -4,6 +4,7 @@
 LINK := $(CXX)
 SHARED_LINK := $(CXX)
 AR := arm-linux-ar
+STRIP := arm-linux-strip
 
 # overwrite RANLIB set in linux.mk
 export RANLIB = arm-linux-ranlib
diff --git a/tools_v2/build/make_nr/tools_v2/build/make/prog.mk b/tools_v2/build/make/prog.mk
similarity index 96%
rename from tools_v2/build/make_nr/tools_v2/build/make/prog.mk
rename to tools_v2/build/make/prog.mk
index 926137e..5647f53 100644
--- a/tools_v2/build/make_nr/tools_v2/build/make/prog.mk
+++ b/tools_v2/build/make/prog.mk
@@ -26,7 +26,7 @@
   endif
 endif
 
-ifneq ($(strip $(RELEASE)),)
+ifeq ($(strip $(DEFAULT_LIBMODE)),release)
   XCXXFLAGS+=$(OPT_CXXFLAG)
   XCPPFLAGS+=$(RELEASE_CXXFLAG)
 else
@@ -105,7 +105,7 @@
 
 ###incluede targest for test apps###########
 run_$(TARGET): $(REALTARGET)
-	@cd $(subst /,\,$($@_SOURCE_DIR)) & $< $($@_TEST_ARGS) $($@_SOURCE_ARGS)
+		$(call cd_and_run_test,$($@_SOURCE_DIR),$<,$($@_TEST_ARGS),$($@_SOURCE_ARGS))
 	
 run_test: run_$(TARGET)
 build_$(TARGET): $(REALTARGET)
diff --git a/tools_v2/build/make_nr/tools_v2/build/make/sdkinfo.mk b/tools_v2/build/make/sdkinfo_nr.mk
similarity index 100%
rename from tools_v2/build/make_nr/tools_v2/build/make/sdkinfo.mk
rename to tools_v2/build/make/sdkinfo_nr.mk
