OpenCORE 2.1 update
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