diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/application.uidesign b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/application.uidesign
new file mode 100644
index 0000000..f2bf30e
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/application.uidesign
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<designerData version="1.1.0">
+  <componentManifest>
+    <manifestEntry id="com.nokia.sdt.series60.CAknApplication" version="1.1.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.NonLayoutBase" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.CommonBase" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.CAknDocument" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.CAknViewAppUi" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.CAknAppUi" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.CAknAppUiBase" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.DesignTimeContainer" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.StatusPane" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.ControlBase" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.StatusPaneCaption" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.StatusPaneTitleBase" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.CBA" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.CBABase" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.AvkonViewReference" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.DesignReference" version="1.0.0"/>
+  </componentManifest>
+  <property id="com.nokia.sdt.symbian.dm.RESOURCE_DIRECTORY_ID">data</property>
+  <property id="com.nokia.sdt.component.symbian.version">3.2.0</property>
+  <property id="com.nokia.sdt.component.symbian.vendor">com.nokia.series60</property>
+  <property id="com.nokia.sdt.symbian.dm.COMPONENT_PROVIDER">com.nokia.sdt.component.symbian.Symbian-Provider</property>
+  <property id="com.nokia.sdt.symbian.dm.INCLUDE_DIRECTORY_ID">inc</property>
+  <property id="com.nokia.sdt.symbian.dm.ROOT_CONTAINER">pjsuaAppUi</property>
+  <property id="com.nokia.sdt.symbian.dm.SOURCE_DIRECTORY_ID">src</property>
+  <property id="com.nokia.sdt.symbian.dm.ROOT_APPLICATION_NAME">pjsua</property>
+  <property id="com.nokia.sdt.symbian.dm.SOURCEGEN_PROVIDER">com.nokia.sdt.sourcegen.Symbian-Provider</property>
+  <property id="com.nokia.sdt.symbian.dm.BUILD_DIRECTORY_ID">group</property>
+  <component id="com.nokia.sdt.series60.CAknApplication">
+    <property id="className">CpjsuaApplication</property>
+    <property id="documentBase">pjsua</property>
+    <property id="name">pjsuaApplication</property>
+    <property id="uid">0xE44C2D02</property>
+    <component id="com.nokia.sdt.series60.CAknDocument">
+      <property id="className">CpjsuaDocument</property>
+      <property id="name">pjsuaDocument</property>
+      <component id="com.nokia.sdt.series60.CAknViewAppUi">
+        <property id="initialDesign" type="componentRef">aknViewReference1</property>
+        <property id="className">CpjsuaAppUi</property>
+        <compoundProperty id="location">
+          <property id="x">51</property>
+          <property id="y">44</property>
+        </compoundProperty>
+        <property id="name">pjsuaAppUi</property>
+        <compoundProperty id="size">
+          <property id="width">240</property>
+          <property id="height">320</property>
+        </compoundProperty>
+        <component id="com.nokia.sdt.series60.StatusPane">
+          <compoundProperty id="location">
+            <property id="x">20</property>
+          </compoundProperty>
+          <property id="name">statusPane</property>
+          <compoundProperty id="size">
+            <property id="width">204</property>
+            <property id="height">63</property>
+          </compoundProperty>
+          <component id="com.nokia.sdt.series60.StatusPaneCaption">
+            <property id="shortCaption" type="i18n">STR_pjsuaApplication_5</property>
+            <compoundProperty id="location">
+              <property id="x">56</property>
+            </compoundProperty>
+            <property id="longCaption" type="i18n">STR_pjsuaApplication_4</property>
+            <property id="name">caption</property>
+            <compoundProperty id="size">
+              <property id="width">148</property>
+              <property id="height">43</property>
+            </compoundProperty>
+          </component>
+        </component>
+        <component id="com.nokia.sdt.series60.CBA">
+          <compoundProperty id="location">
+            <property id="y">288</property>
+          </compoundProperty>
+          <compoundProperty id="info">
+            <property id="leftText" type="i18n">STR_pjsuaApplication_1</property>
+            <property id="rightText" type="i18n">STR_pjsuaApplication_2</property>
+            <property id="middleText" type="i18n">STR_pjsuaApplication_3</property>
+            <property id="leftId"></property>
+            <property id="rightId">EAknSoftkeyBack</property>
+            <property id="type">R_AVKON_SOFTKEYS_EXIT</property>
+          </compoundProperty>
+          <property id="name">controlPane</property>
+          <compoundProperty id="size">
+            <property id="width">240</property>
+            <property id="height">32</property>
+          </compoundProperty>
+        </component>
+        <component id="com.nokia.sdt.series60.AvkonViewReference">
+          <property id="filePath">pjsuaContainer.uidesign</property>
+          <compoundProperty id="tabImage"/>
+          <property id="baseName">pjsuaContainer</property>
+          <property id="name">aknViewReference1</property>
+        </component>
+      </component>
+    </component>
+  </component>
+  <stringBundle>
+    <stringTable language="LANG_English">
+      <string id="STR_pjsuaApplication_1"/>
+      <string id="STR_pjsuaApplication_2"/>
+      <string id="STR_pjsuaApplication_3"/>
+      <string id="STR_pjsuaApplication_4">pjsua</string>
+      <string id="STR_pjsuaApplication_5">pjsua</string>
+    </stringTable>
+  </stringBundle>
+  <macroTable/>
+  <sourceMappingState>
+    <resourceMappings>
+      <resourceMapping instanceName="pjsuaAppUi">r_application_pjsua_app_ui</resourceMapping>
+      <resourceMapping instanceName="statusPane">r_application_status_pane</resourceMapping>
+      <resourceMapping instanceName="pjsuaAppUi" rsrcId="localisable_app_info">r_localisable_app_info</resourceMapping>
+      <resourceMapping instanceName="aknViewReference1" rsrcId="tabText">r_application_akn_view_reference1</resourceMapping>
+    </resourceMappings>
+    <enumMappings>
+      <enumMapping instanceName="aknViewReference1" propertyId="" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_VIEW_UID">EPjsuaContainerViewId</enumMapping>
+    </enumMappings>
+    <arrayMappings/>
+  </sourceMappingState>
+  <generatedFiles>
+    <file>src/pjsuaapplication.cpp</file>
+    <file>src/pjsuacontainerview.cpp</file>
+    <file>src/pjsuadocument.cpp</file>
+    <file>inc/pjsuadocument.h</file>
+    <file>inc/pjsuacontainerview.h</file>
+    <file>inc/pjsuaappui.h</file>
+    <file>inc/pjsuaapplication.h</file>
+    <file>src/pjsuaappui.cpp</file>
+    <file>data/pjsua.rss</file>
+    <file>data/pjsuacontainer.rssi</file>
+    <file>inc/pjsua.hrh</file>
+    <file>data/pjsua.loc</file>
+    <file>data/pjsua.l01</file>
+    <file>data/pjsuacontainer.loc</file>
+    <file>data/pjsuacontainer.l01</file>
+  </generatedFiles>
+</designerData>
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/data/pjsua.l01 b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/data/pjsua.l01
new file mode 100644
index 0000000..a3855bc
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/data/pjsua.l01
@@ -0,0 +1,14 @@
+/*
+========================================================================
+ Name        : pjsua.l01
+ Author      : nanang
+ Copyright   : Copyright (C) 2013 Teluu Inc. (http://www.teluu.com)
+ Description : 
+========================================================================
+*/
+// localized strings for language: UK English (01)
+#define STR_pjsuaApplication_4 "pjsua"
+#define STR_pjsuaApplication_5 "pjsua"
+#define STR_pjsuaApplication_1 ""
+#define STR_pjsuaApplication_2 ""
+#define STR_pjsuaApplication_3 ""
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/data/pjsua.loc b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/data/pjsua.loc
new file mode 100644
index 0000000..c48d6c1
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/data/pjsua.loc
@@ -0,0 +1,11 @@
+/*
+========================================================================
+ Name        : pjsua.loc
+ Author      : nanang
+ Copyright   : Copyright (C) 2013 Teluu Inc. (http://www.teluu.com)
+ Description : 
+========================================================================
+*/
+#ifdef LANGUAGE_01
+#include "pjsua.l01"
+#endif
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/data/pjsua.rss b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/data/pjsua.rss
new file mode 100644
index 0000000..4003177
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/data/pjsua.rss
@@ -0,0 +1,46 @@
+/*
+========================================================================
+ Name        : pjsua.rss
+ Author      : nanang
+ Copyright   : Copyright (C) 2013 Teluu Inc. (http://www.teluu.com)
+ Description : 
+========================================================================
+*/
+NAME PJSU
+
+#include <avkon.rsg>
+#include <avkon.rh>
+#include <eikon.rh>
+#include <appinfo.rh>
+#include "pjsua.hrh"
+#include "pjsua.loc"
+
+RESOURCE RSS_SIGNATURE
+	{
+	}
+RESOURCE TBUF
+	{
+	buf = "pjsua";
+	}
+RESOURCE EIK_APP_INFO r_application_pjsua_app_ui
+	{
+	cba = R_AVKON_SOFTKEYS_EXIT;
+	status_pane = r_application_status_pane;
+	}
+RESOURCE STATUS_PANE_APP_MODEL r_application_status_pane
+	{
+	}
+RESOURCE LOCALISABLE_APP_INFO r_localisable_app_info
+	{
+	short_caption = STR_pjsuaApplication_5;
+	caption_and_icon = CAPTION_AND_ICON_INFO
+		{
+		caption = STR_pjsuaApplication_4;
+		number_of_icons = 0;
+		};
+	}
+RESOURCE TBUF r_application_akn_view_reference1
+	{
+	}
+
+#include "pjsuaContainer.rssi"
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/data/pjsuaContainer.l01 b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/data/pjsuaContainer.l01
new file mode 100644
index 0000000..792282d
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/data/pjsuaContainer.l01
@@ -0,0 +1,14 @@
+/*
+========================================================================
+ Name        : pjsuaContainer.l01
+ Author      : nanang
+ Copyright   : Copyright (C) 2013 Teluu Inc. (http://www.teluu.com)
+ Description : 
+========================================================================
+*/
+// localized strings for language: UK English (01)
+#define STR_pjsuaContainerView_2 ""
+#define STR_pjsuaContainerView_3 ""
+#define STR_pjsuaContainerView_4 "pjsuaContainer"
+#define STR_pjsuaContainerView_1 ""
+#define STR_pjsuaContainerView_5 "Please wait.."
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/data/pjsuaContainer.loc b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/data/pjsuaContainer.loc
new file mode 100644
index 0000000..119c15b
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/data/pjsuaContainer.loc
@@ -0,0 +1,11 @@
+/*
+========================================================================
+ Name        : pjsuaContainer.loc
+ Author      : nanang
+ Copyright   : Copyright (C) 2013 Teluu Inc. (http://www.teluu.com)
+ Description : 
+========================================================================
+*/
+#ifdef LANGUAGE_01
+#include "pjsuaContainer.l01"
+#endif
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/data/pjsuaContainer.rssi b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/data/pjsuaContainer.rssi
new file mode 100644
index 0000000..03fc197
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/data/pjsuaContainer.rssi
@@ -0,0 +1,28 @@
+#include "pjsuaContainer.loc"
+
+RESOURCE AVKON_VIEW r_pjsua_container_pjsua_container_view
+	{
+	cba = R_AVKON_SOFTKEYS_EXIT;
+	toolbar = 0;
+	}
+RESOURCE STATUS_PANE_APP_MODEL r_pjsua_container_status_pane
+	{
+	panes =
+		{
+		SPANE_PANE
+			{
+			id = EEikStatusPaneUidTitle;
+			type = EAknCtTitlePane;
+			resource = r_pjsua_container_title_resource;
+			}
+		};
+	}
+RESOURCE TITLE_PANE r_pjsua_container_title_resource
+	{
+	txt = STR_pjsuaContainerView_4;
+	}
+RESOURCE LABEL r_pjsua_container_label1
+	{
+	txt = STR_pjsuaContainerView_5;
+	horiz_align = EEikLabelAlignHCenter;
+	}
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/data/pjsua_reg.loc b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/data/pjsua_reg.loc
new file mode 100644
index 0000000..0299c09
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/data/pjsua_reg.loc
@@ -0,0 +1,11 @@
+//  LOCALISATION STRINGS
+
+// Caption string for app.
+#define qtn_caption_string "pjsua"
+
+// Short caption string for app.
+#define qtn_short_caption_string "HW"
+
+#define qtn_loc_resource_file_1 "\\resource\\apps\\pjsua"
+
+// End of File
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/data/pjsua_reg.rss b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/data/pjsua_reg.rss
new file mode 100644
index 0000000..e91a00b
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/data/pjsua_reg.rss
@@ -0,0 +1,21 @@
+
+#include <eikon.rh>
+#include <avkon.rsg>
+#include <avkon.rh>
+#include <appinfo.rh>
+#include "pjsua_reg.loc"
+#include <pjsua.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0xE44C2D02
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file="pjsua";
+	localisable_resource_file =  qtn_loc_resource_file_1;
+	localisable_resource_id = R_LOCALISABLE_APP_INFO;
+
+	embeddability=KAppNotEmbeddable;
+	newfile=KAppDoesNotSupportNewFile;
+	}
+
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/gfx/list_icon.bmp b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/gfx/list_icon.bmp
new file mode 100644
index 0000000..a874fea
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/gfx/list_icon.bmp
Binary files differ
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/gfx/list_icon_mask.bmp b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/gfx/list_icon_mask.bmp
new file mode 100644
index 0000000..e320527
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/gfx/list_icon_mask.bmp
Binary files differ
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/gfx/mark_icon.bmp b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/gfx/mark_icon.bmp
new file mode 100644
index 0000000..35571e2
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/gfx/mark_icon.bmp
Binary files differ
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/gfx/mark_icon_mask.bmp b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/gfx/mark_icon_mask.bmp
new file mode 100644
index 0000000..dc8744b
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/gfx/mark_icon_mask.bmp
Binary files differ
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/gfx/pjsua.bmp b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/gfx/pjsua.bmp
new file mode 100644
index 0000000..c6c2027
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/gfx/pjsua.bmp
Binary files differ
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/gfx/qgn_menu_pjsua.svg b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/gfx/qgn_menu_pjsua.svg
new file mode 100644
index 0000000..47da6d7
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/gfx/qgn_menu_pjsua.svg
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 88 87.999">
+<g>
+<g>
+<g>
+<g>
+<rect fill="none" width="88" height="87.999"/>
+</g>
+</g>
+<g>
+<linearGradient id="XMLID_7_" gradientUnits="userSpaceOnUse" x1="12.3042" y1="18.3799" x2="63.4113" y2="79.287">
+<stop offset="0" style="stop-color:#B3DDFF"/>
+<stop offset="0.8146" style="stop-color:#084296"/>
+<stop offset="1" style="stop-color:#084296"/>
+</linearGradient>
+<path fill="url(#XMLID_7_)" d="M32.135,7.415L14.363,17.432v23.167c0,0,8.926,15.351,10.468,18.001       c-2.386,1.704-15.44,11.03-15.44,11.03l21.613,12.652c0,0,12.907-9.85,14.71-11.226c1.979,1.109,16.231,9.101,16.231,9.101       l16.664-15.132c0,0-14.066-6.929-16.888-8.318c1.467-3.01,10.531-21.604,10.531-21.604l-22.298-9.59       c0,0-1.486,3.173-2.093,4.467c-2.046-0.88-6.573-2.826-6.573-2.826s-3.713,2.463-5.696,3.778       c-0.327-0.744-0.542-1.233-0.657-1.495c0.007-0.824,0.213-23.72,0.213-23.72L32.135,7.415z"/>
+<linearGradient id="XMLID_8_" gradientUnits="userSpaceOnUse" x1="40.8276" y1="52.1914" x2="16.1997" y2="21.1353">
+<stop offset="0" style="stop-color:#5AA7E0"/>
+<stop offset="1" style="stop-color:#3366CC"/>
+</linearGradient>
+<polygon fill="url(#XMLID_8_)" points="59.051,57.621 69.536,36.111 50.944,28.115 48.852,32.581 41.493,29.418 34.719,33.911        32.932,29.849 33.117,9.157 16.363,18.601 16.363,40.06 27.476,59.169 13.064,69.463 30.856,79.879 45.546,68.669        61.667,77.708 75.089,65.521 "/>
+<linearGradient id="XMLID_9_" gradientUnits="userSpaceOnUse" x1="60.585" y1="31.876" x2="53.8582" y2="45.1125">
+<stop offset="0" style="stop-color:#5AA7E0"/>
+<stop offset="1" style="stop-color:#3366CC"/>
+</linearGradient>
+<polygon fill="url(#XMLID_9_)" points="41.26,48.783 50.944,28.115 69.536,36.111 59.051,57.621 "/>
+<polygon fill="#0046B7" points="16.363,40.06 27.476,59.169 41.26,48.783 32.932,29.849 "/>
+<polygon fill="#3366CC" points="16.363,40.06 16.363,18.601 33.117,9.157 32.932,29.849 "/>
+<polygon fill="#CFECFF" points="26.696,39.23 41.493,29.418 59.523,37.168 45.546,47.954 "/>
+<path fill="#5AA7E0" d="M41.954,55.286"/>
+<polygon fill="#3366CC" points="26.696,39.23 27.476,59.169 45.546,68.669 45.546,47.954 "/>
+<polygon fill="#5AA7E0" points="13.064,69.463 27.476,59.169 45.546,68.669 30.856,79.879 "/>
+<linearGradient id="XMLID_10_" gradientUnits="userSpaceOnUse" x1="29.2085" y1="63.6836" x2="48.7102" y2="56.1976">
+<stop offset="0" style="stop-color:#5AA7E0"/>
+<stop offset="0.0056" style="stop-color:#5AA7E0"/>
+<stop offset="0.85" style="stop-color:#3366CC"/>
+<stop offset="1" style="stop-color:#3366CC"/>
+</linearGradient>
+<polygon fill="url(#XMLID_10_)" points="43.423,46.971 27.476,59.169 45.546,68.669 45.546,47.954 "/>
+<polygon fill="#0046B7" points="45.546,47.954 45.546,68.669 59.051,57.621 59.523,37.168 "/>
+<linearGradient id="XMLID_11_" gradientUnits="userSpaceOnUse" x1="45.3936" y1="59.5186" x2="59.0508" y2="59.5186">
+<stop offset="0" style="stop-color:#0046B7"/>
+<stop offset="1" style="stop-color:#3366CC"/>
+</linearGradient>
+<polygon fill="url(#XMLID_11_)" points="45.394,50.368 45.546,68.669 59.051,57.621 "/>
+<linearGradient id="XMLID_12_" gradientUnits="userSpaceOnUse" x1="60.8945" y1="68.6807" x2="57.2953" y2="58.792">
+<stop offset="0" style="stop-color:#5AA7E0"/>
+<stop offset="0.4101" style="stop-color:#5AA7E0"/>
+<stop offset="1" style="stop-color:#3366CC"/>
+</linearGradient>
+<polygon fill="url(#XMLID_12_)" points="61.667,77.708 45.546,68.669 59.051,57.621 75.089,65.521 "/>
+</g>
+</g>
+</g>
+</svg>
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/group/ABLD.BAT b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/group/ABLD.BAT
new file mode 100644
index 0000000..70c8b68
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/group/ABLD.BAT
@@ -0,0 +1,15 @@
+@ECHO OFF
+
+REM Bldmake-generated batch file - ABLD.BAT
+REM ** DO NOT EDIT **
+
+perl -S ABLD.PL "\Users\Teluu\pjsip\trunk\pjsip-apps\src\pjsua\symbian\group\\" %1 %2 %3 %4 %5 %6 %7 %8 %9
+if errorlevel==1 goto CheckPerl
+goto End
+
+:CheckPerl
+perl -v >NUL
+if errorlevel==1 echo Is Perl, version 5.003_07 or later, installed?
+goto End
+
+:End
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/group/bld.inf b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/group/bld.inf
new file mode 100644
index 0000000..ba36d31
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/group/bld.inf
@@ -0,0 +1,26 @@
+
+PRJ_PLATFORMS
+WINSCW ARMV5 GCCE
+
+
+#ifdef SBSV2
+
+PRJ_EXTENSIONS
+	
+	START EXTENSION s60/mifconv
+	OPTION TARGETFILE pjsua_0xE44C2D02.mif
+	OPTION HEADERFILE pjsua_0xE44C2D02.mbg
+	OPTION SOURCEDIR ../gfx
+	OPTION SOURCES -c32 qgn_menu_pjsua
+	END
+
+#else
+
+PRJ_MMPFILES
+
+	gnumakefile pjsua_icons.mk
+
+#endif
+
+PRJ_MMPFILES
+pjsua.mmp
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/group/pjsua.mmp b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/group/pjsua.mmp
new file mode 100644
index 0000000..a65981a
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/group/pjsua.mmp
@@ -0,0 +1,105 @@
+// These part may be overwritten by automated test
+// =BEGIN
+#define SND_HAS_APS	0
+#define SND_HAS_VAS	0
+#define SND_HAS_MDA	1
+// =END
+
+TARGET			pjsua.exe
+UID			0x100039CE 0xE44C2D02
+VENDORID	  	0
+TARGETTYPE		exe
+EPOCSTACKSIZE	 	0x5000
+
+SYSTEMINCLUDE 		\epoc32\include \epoc32\include\variant \epoc32\include\ecom
+USERINCLUDE	   	..\inc ..\data
+
+SOURCEPATH		..\data
+START RESOURCE		pjsua.rss
+HEADER
+TARGETPATH 		resource\apps
+END //RESOURCE
+
+START RESOURCE		pjsua_reg.rss
+TARGETPATH 	  	\private\10003a3f\apps
+END //RESOURCE
+
+LIBRARY			euser.lib apparc.lib cone.lib eikcore.lib avkon.lib
+LIBRARY			commonengine.lib efsrv.lib estor.lib eikcoctl.lib eikdlg.lib 
+LIBRARY			eikctl.lib bafl.lib fbscli.lib aknnotify.lib aknicon.lib
+LIBRARY			etext.lib gdi.lib egul.lib insock.lib
+LIBRARY			ecom.lib InetProtUtil.lib http.lib esock.lib
+
+LANG 				01
+
+START BITMAP pjsua.mbm
+	HEADER
+	TARGETPATH \resource\apps
+	SOURCEPATH ..\gfx
+	SOURCE c12,1 list_icon.bmp list_icon_mask.bmp
+	SOURCE c24 pjsua.bmp
+END
+
+SOURCEPATH		..\src
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
+
+SOURCE pjsuaContainer.cpp PjsuaContainerView.cpp pjsuaApplication.cpp pjsuaDocument.cpp pjsuaAppUi.cpp
+
+
+/* PJSIP library dependencies */
+
+MACRO			PJ_M_I386=1
+MACRO			PJ_SYMBIAN=1
+
+SYSTEMINCLUDE		..\..\..\..\..\pjlib\include
+SYSTEMINCLUDE		..\..\..\..\..\pjlib-util\include
+SYSTEMINCLUDE		..\..\..\..\..\pjnath\include
+SYSTEMINCLUDE		..\..\..\..\..\pjmedia\include
+SYSTEMINCLUDE		..\..\..\..\..\pjsip\include
+
+SYSTEMINCLUDE		\epoc32\include\libc
+
+LIBRARY			estlib.lib charconv.lib hal.lib
+
+STATICLIBRARY		pjsua_lib.lib
+STATICLIBRARY		pjsip_ua.lib pjsip_simple.lib pjsip.lib
+STATICLIBRARY		libgsmcodec.lib libspeexcodec.lib 
+STATICLIBRARY		libg7221codec.lib libpassthroughcodec.lib
+STATICLIBRARY		pjmedia.lib
+STATICLIBRARY		pjmedia_audiodev.lib
+STATICLIBRARY		pjsdp.lib
+STATICLIBRARY		pjnath.lib
+STATICLIBRARY		pjlib_util.lib pjlib.lib
+STATICLIBRARY		libsrtp.lib
+STATICLIBRARY		libresample.lib
+
+/* Sound device (APS/VAS/MDA) library & capability settings */
+#if SND_HAS_APS
+	LIBRARY		APSSession2.lib
+#endif
+
+#if SND_HAS_VAS
+	LIBRARY		VoIPAudioIntfc.lib		
+#endif
+
+#if SND_HAS_MDA
+	LIBRARY 	mediaclientaudiostream.lib
+	LIBRARY 	mediaclientaudioinputstream.lib
+#endif
+
+#if SND_HAS_APS || SND_HAS_VAS
+	CAPABILITY	NetworkServices LocalServices ReadUserData WriteUserData UserEnvironment MultimediaDD
+#else
+	CAPABILITY	NetworkServices LocalServices ReadUserData WriteUserData UserEnvironment
+#endif
+
+
+/* PJSUA APP */
+
+SOURCEPATH		..\..
+
+SOURCE 			pjsua_app_cli.c pjsua_app_legacy.c
+SOURCE 			pjsua_app.c pjsua_app_common.c pjsua_app_config.c
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/group/pjsua_icons.mk b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/group/pjsua_icons.mk
new file mode 100644
index 0000000..525ba21
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/group/pjsua_icons.mk
@@ -0,0 +1,75 @@
+# ============================================================================
+#  Name	 : Icons_aif_scalable_dc.mk
+#  Part of  : pjsua
+#
+#  Description:
+# 
+# ============================================================================
+
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\Z
+else
+ZDIR=$(EPOCROOT)epoc32\data\z
+endif
+
+
+# ----------------------------------------------------------------------------
+# TODO: Configure these
+# ----------------------------------------------------------------------------
+
+TARGETDIR=$(ZDIR)\resource\apps
+ICONTARGETFILENAME=$(TARGETDIR)\pjsua_aif.mif
+HEADERDIR=$(EPOCROOT)epoc32\include
+HEADERFILENAME=$(HEADERDIR)\pjsua_aif.mbg
+
+ICONDIR=..\gfx
+
+do_nothing :
+	@rem do_nothing
+
+MAKMAKE : do_nothing
+
+BLD : do_nothing
+
+CLEAN :
+	@echo ...Deleting $(ICONTARGETFILENAME)
+	del /q /f $(ICONTARGETFILENAME)
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+# ----------------------------------------------------------------------------
+# TODO: Configure these.
+#
+# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by
+# MifConv if the mask detph is defined.
+#
+# NOTE 2: Usually, source paths should not be included in the bitmap
+# definitions. MifConv searches for the icons in all icon directories in a
+# predefined order, which is currently \s60\icons, \s60\bitmaps2.
+# The directory \s60\icons is included in the search only if the feature flag
+# __SCALABLE_ICONS is defined.
+# ----------------------------------------------------------------------------
+# NOTE: if you have JUSTINTIME enabled for your S60 3rd FP1 or newer SDK
+# and this command crashes, consider adding "/X" to the command line.
+# See <http://forum.nokia.com/document/Forum_Nokia_Technical_Library_v1_35/contents/FNTL/Build_process_fails_at_mif_file_creation_in_S60_3rd_Ed_FP1_SDK.htm>
+# ----------------------------------------------------------------------------
+
+RESOURCE : $(ICONTARGETFILENAME)
+
+$(ICONTARGETFILENAME) : $(ICONDIR)\qgn_menu_pjsua.svg
+	mifconv $(ICONTARGETFILENAME) \
+		/H$(HEADERFILENAME) \
+		/c32,8 $(ICONDIR)\qgn_menu_pjsua.svg
+		
+FREEZE : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES :
+	@echo $(ICONTARGETFILENAME)
+
+FINAL : do_nothing
+
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/inc/PjsuaContainerView.h b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/inc/PjsuaContainerView.h
new file mode 100644
index 0000000..22b3ed8
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/inc/PjsuaContainerView.h
@@ -0,0 +1,94 @@
+/*
+========================================================================
+ Name        : PjsuaContainerView.h
+ Author      : nanang
+ Copyright   : Copyright (C) 2013 Teluu Inc. (http://www.teluu.com)
+ Description : 
+========================================================================
+*/
+#ifndef PJSUACONTAINERVIEW_H
+#define PJSUACONTAINERVIEW_H
+
+// [[[ begin generated region: do not modify [Generated Includes]
+#include <aknview.h>
+// ]]] end generated region [Generated Includes]
+
+
+// [[[ begin [Event Handler Includes]
+// ]]] end [Event Handler Includes]
+
+// [[[ begin generated region: do not modify [Generated Constants]
+// ]]] end generated region [Generated Constants]
+
+// [[[ begin generated region: do not modify [Generated Forward Declarations]
+class CPjsuaContainer;
+// ]]] end generated region [Generated Forward Declarations]
+
+/**
+ * Avkon view class for pjsuaContainerView. It is register with the view server
+ * by the AppUi. It owns the container control.
+ * @class	CpjsuaContainerView pjsuaContainerView.h
+ */						
+			
+class CpjsuaContainerView : public CAknView
+	{
+	
+	
+	// [[[ begin [Public Section]
+public:
+	// constructors and destructor
+	CpjsuaContainerView();
+	static CpjsuaContainerView* NewL();
+	static CpjsuaContainerView* NewLC();        
+	void ConstructL();
+	virtual ~CpjsuaContainerView();
+						
+	// from base class CAknView
+	TUid Id() const;
+	void HandleCommandL( TInt aCommand );
+	
+	// [[[ begin generated region: do not modify [Generated Methods]
+	CPjsuaContainer* CreateContainerL();
+	// ]]] end generated region [Generated Methods]
+	
+	// ]]] end [Public Section]
+	
+	void PutMessage( const char *msg );
+	
+	// [[[ begin [Protected Section]
+protected:
+	// from base class CAknView
+	void DoActivateL(
+		const TVwsViewId& aPrevViewId,
+		TUid aCustomMessageId,
+		const TDesC8& aCustomMessage );
+	void DoDeactivate();
+	void HandleStatusPaneSizeChange();
+	
+	// [[[ begin generated region: do not modify [Overridden Methods]
+	// ]]] end generated region [Overridden Methods]
+	
+	
+	// [[[ begin [User Handlers]
+	// ]]] end [User Handlers]
+	
+	// ]]] end [Protected Section]
+	
+	
+	// [[[ begin [Private Section]
+private:
+	void SetupStatusPaneL();
+	void CleanupStatusPane();
+	
+	// [[[ begin generated region: do not modify [Generated Instance Variables]
+	CPjsuaContainer* iPjsuaContainer;
+	// ]]] end generated region [Generated Instance Variables]
+	
+	// [[[ begin generated region: do not modify [Generated Methods]
+	// ]]] end generated region [Generated Methods]
+	
+	// ]]] end [Private Section]
+	
+	};
+
+#endif // PJSUACONTAINERVIEW_H
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/inc/pjsua.hrh b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/inc/pjsua.hrh
new file mode 100644
index 0000000..ba27f50
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/inc/pjsua.hrh
@@ -0,0 +1,12 @@
+/*
+========================================================================
+ Name        : pjsua.hrh
+ Author      : nanang
+ Copyright   : Copyright (C) 2013 Teluu Inc. (http://www.teluu.com)
+ Description : 
+========================================================================
+*/
+enum TpjsuaViewUids
+	{
+	EPjsuaContainerViewId = 1
+	};
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/inc/pjsua.pan b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/inc/pjsua.pan
new file mode 100644
index 0000000..e33dbd5
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/inc/pjsua.pan
@@ -0,0 +1,18 @@
+
+#ifndef PJSUA_PAN_H
+#define PJSUA_PAN_H
+
+/** pjsua application panic codes */
+enum TpjsuaPanics
+	{
+	EpjsuaUi = 1
+	// add further panics here
+	};
+
+inline void Panic(TpjsuaPanics aReason)
+	{
+	_LIT(applicationName,"pjsua");
+	User::Panic(applicationName, aReason);
+	}
+
+#endif // PJSUA_PAN_H
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/inc/pjsuaAppUi.h b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/inc/pjsuaAppUi.h
new file mode 100644
index 0000000..8bfd244
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/inc/pjsuaAppUi.h
@@ -0,0 +1,70 @@
+/*
+========================================================================
+ Name        : pjsuaAppUi.h
+ Author      : nanang
+ Copyright   : Copyright (C) 2013 Teluu Inc. (http://www.teluu.com)
+ Description : 
+========================================================================
+*/
+#ifndef PJSUAAPPUI_H
+#define PJSUAAPPUI_H
+
+// [[[ begin generated region: do not modify [Generated Includes]
+#include <aknviewappui.h>
+// ]]] end generated region [Generated Includes]
+
+
+// [[[ begin generated region: do not modify [Generated Forward Declarations]
+class CpjsuaContainerView;
+// ]]] end generated region [Generated Forward Declarations]
+
+/**
+ * @class	CpjsuaAppUi pjsuaAppUi.h
+ * @brief The AppUi class handles application-wide aspects of the user interface, including
+ *        view management and the default menu, control pane, and status pane.
+ */
+class CpjsuaAppUi : public CAknViewAppUi
+	{
+public: 
+	// constructor and destructor
+	CpjsuaAppUi();
+	virtual ~CpjsuaAppUi();
+	void ConstructL();
+
+public:
+	// from CCoeAppUi
+	TKeyResponse HandleKeyEventL(
+				const TKeyEvent& aKeyEvent,
+				TEventCode aType );
+
+	// from CEikAppUi
+	void HandleCommandL( TInt aCommand );
+	void HandleResourceChangeL( TInt aType );
+
+	// from CAknAppUi
+	void HandleViewDeactivation( 
+			const TVwsViewId& aViewIdToBeDeactivated, 
+			const TVwsViewId& aNewlyActivatedViewId );
+
+private:
+	void InitializeContainersL();
+	// [[[ begin generated region: do not modify [Generated Methods]
+public: 
+	// ]]] end generated region [Generated Methods]
+	
+	void PutMsg(const char *msg);
+	
+	// [[[ begin generated region: do not modify [Generated Instance Variables]
+private: 
+	CpjsuaContainerView* iPjsuaContainerView;
+	// ]]] end generated region [Generated Instance Variables]
+	
+	
+	// [[[ begin [User Handlers]
+protected: 
+	// ]]] end [User Handlers]
+	void PrepareToExit();
+
+	};
+
+#endif // PJSUAAPPUI_H			
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/inc/pjsuaApplication.h b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/inc/pjsuaApplication.h
new file mode 100644
index 0000000..eef6e3f
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/inc/pjsuaApplication.h
@@ -0,0 +1,35 @@
+/*
+========================================================================
+ Name        : pjsuaApplication.h
+ Author      : nanang
+ Copyright   : Copyright (C) 2013 Teluu Inc. (http://www.teluu.com)
+ Description : 
+========================================================================
+*/
+#ifndef PJSUAAPPLICATION_H
+#define PJSUAAPPLICATION_H
+
+// [[[ begin generated region: do not modify [Generated Includes]
+#include <aknapp.h>
+// ]]] end generated region [Generated Includes]
+
+// [[[ begin generated region: do not modify [Generated Constants]
+const TUid KUidpjsuaApplication = { 0xE44C2D02 };
+// ]]] end generated region [Generated Constants]
+
+/**
+ *
+ * @class	CpjsuaApplication pjsuaApplication.h
+ * @brief	A CAknApplication-derived class is required by the S60 application 
+ *          framework. It is subclassed to create the application's document 
+ *          object.
+ */
+class CpjsuaApplication : public CAknApplication
+	{
+private:
+	TUid AppDllUid() const;
+	CApaDocument* CreateDocumentL();
+	
+	};
+			
+#endif // PJSUAAPPLICATION_H		
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/inc/pjsuaContainer.h b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/inc/pjsuaContainer.h
new file mode 100644
index 0000000..2ee1475
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/inc/pjsuaContainer.h
@@ -0,0 +1,112 @@
+/*
+========================================================================
+ Name        : pjsuaContainer.h
+ Author      : nanang
+ Copyright   : Copyright (C) 2013 Teluu Inc. (http://www.teluu.com)
+ Description : 
+========================================================================
+*/
+#ifndef PJSUACONTAINER_H
+#define PJSUACONTAINER_H
+
+// [[[ begin generated region: do not modify [Generated Includes]
+#include <coecntrl.h>		
+// ]]] end generated region [Generated Includes]
+
+
+// [[[ begin [Event Handler Includes]
+// ]]] end [Event Handler Includes]
+
+// [[[ begin generated region: do not modify [Generated Forward Declarations]
+class MEikCommandObserver;		
+class CEikImage;
+class CEikLabel;
+// ]]] end generated region [Generated Forward Declarations]
+
+/**
+ * Container class for pjsuaContainer
+ * 
+ * @class	CPjsuaContainer pjsuaContainer.h
+ */
+class CPjsuaContainer : public CCoeControl
+	{
+public:
+	// constructors and destructor
+	CPjsuaContainer();
+	static CPjsuaContainer* NewL( 
+		const TRect& aRect, 
+		const CCoeControl* aParent, 
+		MEikCommandObserver* aCommandObserver );
+	static CPjsuaContainer* NewLC( 
+		const TRect& aRect, 
+		const CCoeControl* aParent, 
+		MEikCommandObserver* aCommandObserver );
+	void ConstructL( 
+		const TRect& aRect, 
+		const CCoeControl* aParent, 
+		MEikCommandObserver* aCommandObserver );
+	virtual ~CPjsuaContainer();
+
+public:
+	// from base class CCoeControl
+	TInt CountComponentControls() const;
+	CCoeControl* ComponentControl( TInt aIndex ) const;
+	TKeyResponse OfferKeyEventL( 
+			const TKeyEvent& aKeyEvent, 
+			TEventCode aType );
+	void HandleResourceChange( TInt aType );
+	
+protected:
+	// from base class CCoeControl
+	void SizeChanged();
+
+private:
+	// from base class CCoeControl
+	void Draw( const TRect& aRect ) const;
+
+private:
+	void InitializeControlsL();
+	void LayoutControls();
+	CCoeControl* iFocusControl;
+	MEikCommandObserver* iCommandObserver;
+	// [[[ begin generated region: do not modify [Generated Methods]
+public: 
+	// ]]] end generated region [Generated Methods]
+	
+	void PutMessageL( const char* msg );
+	// [[[ begin generated region: do not modify [Generated Type Declarations]
+public: 
+	// ]]] end generated region [Generated Type Declarations]
+	
+	// [[[ begin generated region: do not modify [Generated Instance Variables]
+private: 
+	CEikImage* iImage1;
+	CEikLabel* iLabel1;
+	// ]]] end generated region [Generated Instance Variables]
+	
+	
+	// [[[ begin [Overridden Methods]
+protected: 
+	// ]]] end [Overridden Methods]
+	
+	
+	// [[[ begin [User Handlers]
+protected: 
+	// ]]] end [User Handlers]
+	
+public: 
+	enum TControls
+		{
+		// [[[ begin generated region: do not modify [Generated Contents]
+		EImage1,
+		ELabel1,
+		
+		// ]]] end generated region [Generated Contents]
+		
+		// add any user-defined entries here...
+		
+		ELastControl
+		};
+	};
+				
+#endif // PJSUACONTAINER_H
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/inc/pjsuaDocument.h b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/inc/pjsuaDocument.h
new file mode 100644
index 0000000..be5deff
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/inc/pjsuaDocument.h
@@ -0,0 +1,36 @@
+/*
+========================================================================
+ Name        : pjsuaDocument.h
+ Author      : nanang
+ Copyright   : Copyright (C) 2013 Teluu Inc. (http://www.teluu.com)
+ Description : 
+========================================================================
+*/
+#ifndef PJSUADOCUMENT_H
+#define PJSUADOCUMENT_H
+
+#include <akndoc.h>
+		
+class CEikAppUi;
+
+/**
+* @class	CpjsuaDocument pjsuaDocument.h
+* @brief	A CAknDocument-derived class is required by the S60 application 
+*           framework. It is responsible for creating the AppUi object. 
+*/
+class CpjsuaDocument : public CAknDocument
+	{
+public: 
+	// constructor
+	static CpjsuaDocument* NewL( CEikApplication& aApp );
+
+private: 
+	// constructors
+	CpjsuaDocument( CEikApplication& aApp );
+	void ConstructL();
+	
+public: 
+	// from base class CEikDocument
+	CEikAppUi* CreateAppUiL();
+	};
+#endif // PJSUADOCUMENT_H
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/pjsuaContainer.uidesign b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/pjsuaContainer.uidesign
new file mode 100644
index 0000000..e50fd6d
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/pjsuaContainer.uidesign
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<designerData version="1.1.0">
+  <componentManifest>
+    <manifestEntry id="com.nokia.sdt.series60.CAknView" version="1.2.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.DesignTimeContainer" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.CommonBase" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.StatusPane" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.ControlBase" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.StatusPaneTitle" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.StatusPaneTitleBase" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.CBA" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.CBABase" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.CCoeControl" version="1.2.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.ContainerBase" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.CEikImage" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.symbian.CEikAlignedBase" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.CCoeControlBase" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.CEikLabel" version="1.0.0"/>
+  </componentManifest>
+  <property id="com.nokia.sdt.symbian.dm.RESOURCE_DIRECTORY_ID">data</property>
+  <property id="com.nokia.sdt.component.symbian.version">3.2.0</property>
+  <property id="com.nokia.sdt.component.symbian.vendor">com.nokia.series60</property>
+  <property id="com.nokia.sdt.symbian.dm.COMPONENT_PROVIDER">com.nokia.sdt.component.symbian.Symbian-Provider</property>
+  <property id="com.nokia.sdt.symbian.dm.INCLUDE_DIRECTORY_ID">inc</property>
+  <property id="com.nokia.sdt.symbian.dm.SOURCE_DIRECTORY_ID">src</property>
+  <property id="com.nokia.sdt.symbian.dm.SOURCEGEN_PROVIDER">com.nokia.sdt.sourcegen.Symbian-Provider</property>
+  <property id="com.nokia.sdt.symbian.dm.BUILD_DIRECTORY_ID">group</property>
+  <component id="com.nokia.sdt.series60.CAknView">
+    <property id="className">CpjsuaContainerView</property>
+    <compoundProperty id="location">
+      <property id="x">51</property>
+      <property id="y">44</property>
+    </compoundProperty>
+    <property id="name">pjsuaContainerView</property>
+    <compoundProperty id="size">
+      <property id="width">240</property>
+      <property id="height">320</property>
+    </compoundProperty>
+    <component id="com.nokia.sdt.series60.StatusPane">
+      <compoundProperty id="location">
+        <property id="x">20</property>
+      </compoundProperty>
+      <property id="name">statusPane</property>
+      <compoundProperty id="size">
+        <property id="width">204</property>
+        <property id="height">63</property>
+      </compoundProperty>
+      <component id="com.nokia.sdt.series60.StatusPaneTitle">
+        <compoundProperty id="location">
+          <property id="x">56</property>
+        </compoundProperty>
+        <property id="name">title</property>
+        <property id="titleText" type="i18n">STR_pjsuaContainerView_4</property>
+        <compoundProperty id="size">
+          <property id="width">148</property>
+          <property id="height">43</property>
+        </compoundProperty>
+        <compoundProperty id="image"/>
+      </component>
+    </component>
+    <component id="com.nokia.sdt.series60.CBA">
+      <compoundProperty id="location">
+        <property id="y">288</property>
+      </compoundProperty>
+      <compoundProperty id="info">
+        <property id="leftText" type="i18n">STR_pjsuaContainerView_1</property>
+        <property id="rightText" type="i18n">STR_pjsuaContainerView_2</property>
+        <property id="middleText" type="i18n">STR_pjsuaContainerView_3</property>
+        <property id="leftId"></property>
+        <property id="rightId">EAknSoftkeyBack</property>
+        <property id="type">R_AVKON_SOFTKEYS_EXIT</property>
+      </compoundProperty>
+      <property id="name">controlPane</property>
+      <compoundProperty id="size">
+        <property id="width">240</property>
+        <property id="height">32</property>
+      </compoundProperty>
+    </component>
+    <component id="com.nokia.sdt.series60.CCoeControl">
+      <property id="backColor">0,0,0</property>
+      <compoundProperty id="location">
+        <property id="y">66</property>
+      </compoundProperty>
+      <property id="className">CPjsuaContainer</property>
+      <property id="name">pjsuaContainer</property>
+      <compoundProperty id="size">
+        <property id="width">240</property>
+        <property id="height">222</property>
+      </compoundProperty>
+      <component id="com.nokia.sdt.series60.CEikImage">
+        <compoundProperty id="location">
+          <property id="x">0</property>
+          <property id="y">0</property>
+        </compoundProperty>
+        <property id="name">image1</property>
+        <compoundProperty id="size">
+          <property id="width">99</property>
+          <property id="height">111</property>
+        </compoundProperty>
+        <compoundProperty id="image">
+          <property id="bmpfile">\resource\apps\pjsua.mbm</property>
+          <property id="bmpid">EMbmPjsuaPjsua</property>
+        </compoundProperty>
+      </component>
+      <component id="com.nokia.sdt.series60.CEikLabel">
+        <compoundProperty id="location">
+          <property id="y">196</property>
+        </compoundProperty>
+        <property id="name">label1</property>
+        <property id="text" type="i18n">STR_pjsuaContainerView_5</property>
+        <compoundProperty id="size">
+          <property id="width">241</property>
+          <property id="height">27</property>
+        </compoundProperty>
+      </component>
+    </component>
+  </component>
+  <stringBundle>
+    <stringTable language="LANG_English">
+      <string id="STR_pjsuaContainerView_1"/>
+      <string id="STR_pjsuaContainerView_2"/>
+      <string id="STR_pjsuaContainerView_3"/>
+      <string id="STR_pjsuaContainerView_4">pjsuaContainer</string>
+      <string id="STR_pjsuaContainerView_5">Please wait..</string>
+    </stringTable>
+  </stringBundle>
+  <macroTable/>
+  <sourceMappingState>
+    <resourceMappings>
+      <resourceMapping instanceName="pjsuaContainerView">r_pjsua_container_pjsua_container_view</resourceMapping>
+      <resourceMapping instanceName="statusPane">r_pjsua_container_status_pane</resourceMapping>
+      <resourceMapping instanceName="label1">r_pjsua_container_label1</resourceMapping>
+      <resourceMapping instanceName="title">r_pjsua_container_title_resource</resourceMapping>
+    </resourceMappings>
+    <enumMappings>
+      <enumMapping instanceName="label1" propertyId="font">EEikLabelFontNormal</enumMapping>
+      <enumMapping instanceName="pjsuaContainerView" propertyId="" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_VIEW_UID">EPjsuaContainerViewId</enumMapping>
+      <enumMapping instanceName="label1" propertyId="alignment">EEikLabelAlignHCenter</enumMapping>
+      <enumMapping instanceName="title" propertyId="" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_STATUS_PANE_ID">EEikStatusPaneUidTitle</enumMapping>
+      <enumMapping instanceName="title" propertyId="" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_CONTROL_TYPE">EAknCtTitlePane</enumMapping>
+    </enumMappings>
+    <arrayMappings/>
+  </sourceMappingState>
+  <generatedFiles>
+    <file>src/pjsuacontainer.cpp</file>
+    <file>src/pjsuacontainerview.cpp</file>
+    <file>inc/pjsuacontainer.h</file>
+    <file>inc/pjsuacontainerview.h</file>
+    <file>data/pjsua.rss</file>
+    <file>data/pjsuacontainer.rssi</file>
+    <file>inc/pjsua.hrh</file>
+    <file>data/pjsua.loc</file>
+    <file>data/pjsua.l01</file>
+    <file>data/pjsuacontainer.loc</file>
+    <file>data/pjsuacontainer.l01</file>
+  </generatedFiles>
+</designerData>
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/sis/backup_registration.xml b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/sis/backup_registration.xml
new file mode 100644
index 0000000..7f7f2d0
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/sis/backup_registration.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" standalone="yes"?>
+<backup_registration>
+  <system_backup/>
+  <restore requires_reboot = "no"/>
+</backup_registration>
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/sis/pjsua.pkg b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/sis/pjsua.pkg
new file mode 100644
index 0000000..5b25277
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/sis/pjsua.pkg
@@ -0,0 +1,36 @@
+; pjsua.pkg
+; This is an auto-generated PKG file by Carbide.
+; This file uses variables specific to Carbide builds that will not work
+; on command-line builds. If you want to use this generated PKG file from the
+; command-line tools you will need to modify the variables with the appropriate
+; values: $(EPOCROOT), $(PLATFORM), $(TARGET)
+; Also, the resource file entries should be changed to match the language
+; used in the build. For example, if building for LANGUAGE_01, change the file
+; extensions .rsc to .r01.
+;
+;Language - standard language definitions
+&EN
+
+; standard SIS file header
+#{"pjsua"},(0xE44C2D02),1,0,0
+
+;Localised Vendor name
+%{"Vendor-EN"}
+
+;Unique Vendor name
+:"Vendor"
+
+;Supports Series 60 v 3.0
+[0x101F7961], 0, 0, 0, {"Series60ProductID"}
+
+;Files to install
+;You should change the source paths to match that of your environment
+;<source> <destination>
+"$(EPOCROOT)Epoc32\release\$(PLATFORM)\$(TARGET)\pjsua.exe"		-"!:\sys\bin\pjsua.exe"
+"$(EPOCROOT)Epoc32\data\z\resource\apps\pjsua.r01"		-"!:\resource\apps\pjsua.r01"
+"$(EPOCROOT)Epoc32\data\z\private\10003a3f\apps\pjsua_reg.r01"	-"!:\private\10003a3f\import\apps\pjsua_reg.r01"
+"$(EPOCROOT)epoc32\data\z\resource\apps\pjsua_aif.mif" -"!:\resource\apps\pjsua_aif.mif"
+"$(EPOCROOT)epoc32\data\z\resource\apps\pjsua.mbm" -"!:\resource\apps\pjsua.mbm"
+; Add any installation notes if applicable
+;"pjsua.txt"					  -"!:\private\0xE44C2D02\pjsua.txt"
+
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/src/PjsuaContainerView.cpp b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/src/PjsuaContainerView.cpp
new file mode 100644
index 0000000..8595260
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/src/PjsuaContainerView.cpp
@@ -0,0 +1,261 @@
+/*
+========================================================================
+ Name        : PjsuaContainerView.cpp
+ Author      : nanang
+ Copyright   : Copyright (C) 2013 Teluu Inc. (http://www.teluu.com)
+ Description : 
+========================================================================
+*/
+// [[[ begin generated region: do not modify [Generated System Includes]
+#include <aknviewappui.h>
+#include <eikmenub.h>
+#include <avkon.hrh>
+#include <barsread.h>
+#include <eikimage.h>
+#include <eikenv.h>
+#include <stringloader.h>
+#include <eiklabel.h>
+#include <akncontext.h>
+#include <akntitle.h>
+#include <eikbtgpc.h>
+#include <pjsua.rsg>
+// ]]] end generated region [Generated System Includes]
+
+// [[[ begin generated region: do not modify [Generated User Includes]
+
+#include "pjsua.hrh"
+#include "pjsuaContainerView.h"
+#include "pjsuaContainer.h"
+// ]]] end generated region [Generated User Includes]
+
+// [[[ begin generated region: do not modify [Generated Constants]
+// ]]] end generated region [Generated Constants]
+
+/**
+ * First phase of Symbian two-phase construction. Should not contain any
+ * code that could leave.
+ */
+CpjsuaContainerView::CpjsuaContainerView()
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	iPjsuaContainer = NULL;
+	// ]]] end generated region [Generated Contents]
+	
+	}
+
+/** 
+ * The view's destructor removes the container from the control
+ * stack and destroys it.
+ */
+CpjsuaContainerView::~CpjsuaContainerView()
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	delete iPjsuaContainer;
+	iPjsuaContainer = NULL;
+	// ]]] end generated region [Generated Contents]
+	
+	}
+
+/**
+ * Symbian two-phase constructor.
+ * This creates an instance then calls the second-phase constructor
+ * without leaving the instance on the cleanup stack.
+ * @return new instance of CpjsuaContainerView
+ */
+CpjsuaContainerView* CpjsuaContainerView::NewL()
+	{
+	CpjsuaContainerView* self = CpjsuaContainerView::NewLC();
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+/**
+ * Symbian two-phase constructor.
+ * This creates an instance, pushes it on the cleanup stack,
+ * then calls the second-phase constructor.
+ * @return new instance of CpjsuaContainerView
+ */
+CpjsuaContainerView* CpjsuaContainerView::NewLC()
+	{
+	CpjsuaContainerView* self = new ( ELeave ) CpjsuaContainerView();
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	return self;
+	}
+
+
+/**
+ * Second-phase constructor for view.  
+ * Initialize contents from resource.
+ */ 
+void CpjsuaContainerView::ConstructL()
+	{
+	// [[[ begin generated region: do not modify [Generated Code]
+	BaseConstructL( R_PJSUA_CONTAINER_PJSUA_CONTAINER_VIEW );
+				
+	// ]]] end generated region [Generated Code]
+	
+	// add your own initialization code here
+	}
+
+/**
+ * @return The UID for this view
+ */
+TUid CpjsuaContainerView::Id() const
+	{
+	return TUid::Uid( EPjsuaContainerViewId );
+	}
+
+/**
+ * Handle a command for this view (override)
+ * @param aCommand command id to be handled
+ */
+void CpjsuaContainerView::HandleCommandL( TInt aCommand )
+	{
+	// [[[ begin generated region: do not modify [Generated Code]
+	TBool commandHandled = EFalse;
+	switch ( aCommand )
+		{	// code to dispatch to the AknView's menu and CBA commands is generated here
+		default:
+			break;
+		}
+	
+		
+	if ( !commandHandled ) 
+		{
+	
+		if ( aCommand == EAknSoftkeyBack )
+			{
+			AppUi()->HandleCommandL( EEikCmdExit );
+			}
+	
+		}
+	// ]]] end generated region [Generated Code]
+	
+	}
+
+/**
+ *	Handles user actions during activation of the view, 
+ *	such as initializing the content.
+ */
+void CpjsuaContainerView::DoActivateL( 
+		const TVwsViewId& /*aPrevViewId*/,
+		TUid /*aCustomMessageId*/,
+		const TDesC8& /*aCustomMessage*/ )
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	SetupStatusPaneL();
+	
+				
+				
+	
+	if ( iPjsuaContainer == NULL )
+		{
+		iPjsuaContainer = CreateContainerL();
+		iPjsuaContainer->SetMopParent( this );
+		AppUi()->AddToStackL( *this, iPjsuaContainer );
+		} 
+	// ]]] end generated region [Generated Contents]
+	
+	}
+
+/**
+ */
+void CpjsuaContainerView::DoDeactivate()
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	CleanupStatusPane();
+	
+	if ( iPjsuaContainer != NULL )
+		{
+		AppUi()->RemoveFromViewStack( *this, iPjsuaContainer );
+		delete iPjsuaContainer;
+		iPjsuaContainer = NULL;
+		}
+	// ]]] end generated region [Generated Contents]
+	
+	}
+
+/** 
+ * Handle status pane size change for this view (override)
+ */
+void CpjsuaContainerView::HandleStatusPaneSizeChange()
+	{
+	CAknView::HandleStatusPaneSizeChange();
+	
+	// this may fail, but we're not able to propagate exceptions here
+	TVwsViewId view;
+	AppUi()->GetActiveViewId( view );
+	if ( view.iViewUid == Id() )
+		{
+		TInt result;
+		TRAP( result, SetupStatusPaneL() );
+		}
+
+	// Hide menu
+	Cba()->MakeVisible(EFalse);
+	
+	//PutMessage("HandleStatusPaneSizeChange()");
+	
+	// [[[ begin generated region: do not modify [Generated Code]
+	// ]]] end generated region [Generated Code]
+	
+	}
+
+// [[[ begin generated function: do not modify
+void CpjsuaContainerView::SetupStatusPaneL()
+	{
+	// reset the context pane
+	TUid contextPaneUid = TUid::Uid( EEikStatusPaneUidContext );
+	CEikStatusPaneBase::TPaneCapabilities subPaneContext = 
+		StatusPane()->PaneCapabilities( contextPaneUid );
+	if ( subPaneContext.IsPresent() && subPaneContext.IsAppOwned() )
+		{
+		CAknContextPane* context = static_cast< CAknContextPane* > ( 
+			StatusPane()->ControlL( contextPaneUid ) );
+		context->SetPictureToDefaultL();
+		}
+	
+	// setup the title pane
+	TUid titlePaneUid = TUid::Uid( EEikStatusPaneUidTitle );
+	CEikStatusPaneBase::TPaneCapabilities subPaneTitle = 
+		StatusPane()->PaneCapabilities( titlePaneUid );
+	if ( subPaneTitle.IsPresent() && subPaneTitle.IsAppOwned() )
+		{
+		CAknTitlePane* title = static_cast< CAknTitlePane* >( 
+			StatusPane()->ControlL( titlePaneUid ) );
+		TResourceReader reader;
+		iEikonEnv->CreateResourceReaderLC( reader, R_PJSUA_CONTAINER_TITLE_RESOURCE );
+		title->SetFromResourceL( reader );
+		CleanupStack::PopAndDestroy(); // reader internal state
+		}
+				
+	}
+
+// ]]] end generated function
+
+// [[[ begin generated function: do not modify
+void CpjsuaContainerView::CleanupStatusPane()
+	{
+	}
+
+// ]]] end generated function
+
+/**
+ *	Creates the top-level container for the view.  You may modify this method's
+ *	contents and the CPjsuaContainer::NewL() signature as needed to initialize the
+ *	container, but the signature for this method is fixed.
+ *	@return new initialized instance of CPjsuaContainer
+ */
+CPjsuaContainer* CpjsuaContainerView::CreateContainerL()
+	{
+	return CPjsuaContainer::NewL( ClientRect(), NULL, this );
+	}
+
+void CpjsuaContainerView::PutMessage( const char *msg )
+{
+	if (!iPjsuaContainer)
+	    return;
+
+	TRAPD(result, iPjsuaContainer->PutMessageL(msg));
+}
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/src/pjsuaAppUi.cpp b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/src/pjsuaAppUi.cpp
new file mode 100644
index 0000000..74b8c42
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/src/pjsuaAppUi.cpp
@@ -0,0 +1,370 @@
+/*
+========================================================================
+ Name        : pjsuaAppUi.cpp
+ Author      : nanang
+ Copyright   : Copyright (C) 2013 Teluu Inc. (http://www.teluu.com)
+ Description : 
+========================================================================
+*/
+// [[[ begin generated region: do not modify [Generated System Includes]
+#include <eikmenub.h>
+#include <akncontext.h>
+#include <akntitle.h>
+#include <pjsua.rsg>
+// ]]] end generated region [Generated System Includes]
+
+// [[[ begin generated region: do not modify [Generated User Includes]
+#include "pjsuaAppUi.h"
+#include "pjsua.hrh"
+#include "pjsuaContainerView.h"
+// ]]] end generated region [Generated User Includes]
+
+// [[[ begin generated region: do not modify [Generated Constants]
+// ]]] end generated region [Generated Constants]
+
+#include "../../pjsua_app.h"
+#include "../../pjsua_app_config.h"
+
+/* Global vars */
+static CpjsuaAppUi *appui = NULL;
+static pj_ioqueue_t *app_ioqueue = NULL;
+static int start_argc = 0;
+static char **start_argv = NULL;
+
+static pj_status_t InitSymbSocket();
+static void DestroySymbSocket();
+
+/* Helper funtions to init/restart/destroy the pjsua */
+static void PjsuaInitL();
+static void PjsuaDestroyL();
+
+/* pjsua app callbacks */
+static void PjsuaOnStarted(pj_status_t status, const char* title);
+static void PjsuaOnStopped(pj_bool_t restart, int argc, char** argv);
+static void PjsuaOnConfig(pjsua_app_config *cfg);
+
+/* Helper class to schedule function execution */
+class MyTimer : public CActive 
+{
+public:
+    typedef void (*timer_func)();
+    
+public:
+    static MyTimer* NewL(int ms, timer_func f) {
+	MyTimer *self = new MyTimer(f);
+	CleanupStack::PushL(self);
+	self->ConstructL(ms);
+	CleanupStack::Pop(self);
+	return self;
+    }
+    
+    MyTimer(timer_func f) : CActive(EPriorityStandard), func(f) {}
+    ~MyTimer() {
+	Cancel();
+	rtimer.Close();
+    }
+    
+    virtual void RunL() { (*func)(); delete this; }
+    virtual void DoCancel() { rtimer.Cancel(); }
+
+private:	
+    RTimer rtimer;
+    timer_func func;
+    
+    void ConstructL(int ms) {
+	rtimer.CreateLocal();
+	CActiveScheduler::Add(this);
+	rtimer.After(iStatus, ms * 1000);
+	SetActive();
+    }
+};
+
+/**
+ * Construct the CpjsuaAppUi instance
+ */ 
+CpjsuaAppUi::CpjsuaAppUi()
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	// ]]] end generated region [Generated Contents]
+	
+	}
+
+/** 
+ * The appui's destructor removes the container from the control
+ * stack and destroys it.
+ */
+CpjsuaAppUi::~CpjsuaAppUi()
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	// ]]] end generated region [Generated Contents]
+	
+	}
+
+// [[[ begin generated function: do not modify
+void CpjsuaAppUi::InitializeContainersL()
+	{
+	iPjsuaContainerView = CpjsuaContainerView::NewL();
+	AddViewL( iPjsuaContainerView );
+	SetDefaultViewL( *iPjsuaContainerView );
+	}
+// ]]] end generated function
+
+/**
+ * Handle a command for this appui (override)
+ * @param aCommand command id to be handled
+ */
+void CpjsuaAppUi::HandleCommandL( TInt aCommand )
+	{
+	// [[[ begin generated region: do not modify [Generated Code]
+	TBool commandHandled = EFalse;
+	switch ( aCommand )
+		{ // code to dispatch to the AppUi's menu and CBA commands is generated here
+		default:
+			break;
+		}
+	
+		
+	if ( !commandHandled ) 
+		{
+		if ( aCommand == EAknSoftkeyExit || aCommand == EEikCmdExit )
+			{
+			Exit();
+			}
+		}
+	// ]]] end generated region [Generated Code]
+	
+	}
+
+/** 
+ * Override of the HandleResourceChangeL virtual function
+ */
+void CpjsuaAppUi::HandleResourceChangeL( TInt aType )
+	{
+	CAknViewAppUi::HandleResourceChangeL( aType );
+	// [[[ begin generated region: do not modify [Generated Code]
+	// ]]] end generated region [Generated Code]
+	
+	}
+				
+/** 
+ * Override of the HandleKeyEventL virtual function
+ * @return EKeyWasConsumed if event was handled, EKeyWasNotConsumed if not
+ * @param aKeyEvent 
+ * @param aType 
+ */
+TKeyResponse CpjsuaAppUi::HandleKeyEventL(
+		const TKeyEvent& aKeyEvent,
+		TEventCode aType )
+	{
+	// The inherited HandleKeyEventL is private and cannot be called
+	// [[[ begin generated region: do not modify [Generated Contents]
+	// ]]] end generated region [Generated Contents]
+
+	// Left or right softkey pressed
+	if (aType==EEventKeyDown && 
+	    (aKeyEvent.iScanCode == EStdKeyDevice0 || 
+	     aKeyEvent.iScanCode == EStdKeyDevice1))    
+	{
+	    Cba()->MakeVisible(ETrue);
+	} else {
+	    Cba()->MakeVisible(EFalse);   
+	}
+
+	return EKeyWasNotConsumed;
+	}
+
+/** 
+ * Override of the HandleViewDeactivation virtual function
+ *
+ * @param aViewIdToBeDeactivated 
+ * @param aNewlyActivatedViewId 
+ */
+void CpjsuaAppUi::HandleViewDeactivation( 
+		const TVwsViewId& aViewIdToBeDeactivated, 
+		const TVwsViewId& aNewlyActivatedViewId )
+	{
+	CAknViewAppUi::HandleViewDeactivation( 
+			aViewIdToBeDeactivated, 
+			aNewlyActivatedViewId );
+	// [[[ begin generated region: do not modify [Generated Contents]
+	// ]]] end generated region [Generated Contents]
+	
+	}
+
+/**
+ * @brief Completes the second phase of Symbian object construction. 
+ * Put initialization code that could leave here. 
+ */ 
+void CpjsuaAppUi::ConstructL()
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	
+	BaseConstructL( EAknEnableSkin  | 
+					 EAknEnableMSK ); 
+	InitializeContainersL();
+	// ]]] end generated region [Generated Contents]
+	
+	// Save pointer to this AppUi
+	appui = this;
+	
+	// Full screen
+	StatusPane()->MakeVisible(EFalse);
+	Cba()->MakeVisible(EFalse);
+
+	if (InitSymbSocket() != PJ_SUCCESS) {
+	    PutMsg("Failed to initialize Symbian network param.");
+	} else {	
+	    start_argc = pjsua_app_def_argc;
+	    start_argv = (char**)pjsua_app_def_argv;
+
+	    // Schedule Lib Init
+	    MyTimer::NewL(100, &PjsuaInitL);
+	}
+	
+	}
+
+/* Called by Symbian GUI framework when app is about to exit */
+void CpjsuaAppUi::PrepareToExit()
+{
+    TRAPD(result, PjsuaDestroyL());
+    DestroySymbSocket();
+    CloseSTDLIB();
+    CAknViewAppUi::PrepareToExit();
+}
+
+/* Print message on screen */
+void CpjsuaAppUi::PutMsg(const char *msg)
+{
+    iPjsuaContainerView->PutMessage(msg);
+}
+
+#include <es_sock.h>
+
+static RSocketServ aSocketServer;
+static RConnection aConn;
+
+/* Called when pjsua is started */
+void PjsuaOnStarted(pj_status_t status, const char* title)
+{
+    char err_msg[128];
+
+    if (status != PJ_SUCCESS || title == NULL) {
+	char err_str[PJ_ERR_MSG_SIZE];
+	pj_strerror(status, err_str, sizeof(err_str));
+	pj_ansi_snprintf(err_msg, sizeof(err_msg), "%s: %s",
+			 (title?title:"App start error"), err_str);
+	title = err_msg;
+    }
+
+    appui->PutMsg(title);
+}
+
+/* Called when pjsua is stopped */
+void PjsuaOnStopped(pj_bool_t restart, int argc, char** argv)
+{
+    if (restart) {
+	start_argc = argc;
+	start_argv = argv;
+
+	// Schedule Lib Init
+	MyTimer::NewL(100, &PjsuaInitL);
+    } else {
+	/* Destroy & quit GUI, e.g: clean up window, resources  */
+	appui->Exit();
+    }
+}
+
+/* Called before pjsua initializing config.
+ * We need to override some settings here.
+ */
+void PjsuaOnConfig(pjsua_app_config *cfg)
+{
+    /* Disable threading */
+    cfg->cfg.thread_cnt = 0;
+    cfg->cfg.thread_cnt = 0;
+    cfg->media_cfg.thread_cnt = 0;
+    cfg->media_cfg.has_ioqueue = PJ_FALSE;
+
+    /* Create ioqueue for telnet CLI */
+    if (app_ioqueue ==  NULL) {
+	pj_ioqueue_create(cfg->pool, 0, &app_ioqueue);
+    }
+    cfg->cli_cfg.telnet_cfg.ioqueue = app_ioqueue; 
+}
+
+// Set Symbian OS parameters in pjlib.
+// This must be done before pj_init() is called.
+pj_status_t InitSymbSocket()
+{
+    pj_symbianos_params sym_params;
+    TInt err;
+    
+    // Initialize RSocketServ
+    if ((err=aSocketServer.Connect(32)) != KErrNone) {
+	return PJ_STATUS_FROM_OS(err);
+    }
+    
+    // Open up a connection
+    if ((err=aConn.Open(aSocketServer)) != KErrNone) {
+	aSocketServer.Close();
+	return PJ_STATUS_FROM_OS(err);
+    }
+    if ((err=aConn.Start()) != KErrNone) {
+	aConn.Close();
+	aSocketServer.Close();
+	return PJ_STATUS_FROM_OS(err);
+    }
+    
+    pj_bzero(&sym_params, sizeof(sym_params));
+    sym_params.rsocketserv = &aSocketServer;
+    sym_params.rconnection = &aConn;
+    pj_symbianos_set_params(&sym_params);
+    
+    return PJ_SUCCESS;
+}
+
+
+void DestroySymbSocket()
+{
+    aConn.Close();
+    aSocketServer.Close();
+}
+
+
+void PjsuaInitL()
+{
+    pjsua_app_cfg_t app_cfg;
+    pj_status_t status;
+    
+    PjsuaDestroyL();
+    
+    pj_bzero(&app_cfg, sizeof(app_cfg));
+    app_cfg.argc = start_argc;
+    app_cfg.argv = start_argv;
+    app_cfg.on_started = &PjsuaOnStarted;
+    app_cfg.on_stopped = &PjsuaOnStopped;
+    app_cfg.on_config_init = &PjsuaOnConfig;
+
+    appui->PutMsg("Initializing..");
+    status = pjsua_app_init(&app_cfg);
+    if (status != PJ_SUCCESS)
+	goto on_return;
+    
+    appui->PutMsg("Starting..");
+    status = pjsua_app_run(PJ_FALSE);
+    if (status != PJ_SUCCESS)
+	goto on_return;
+
+on_return:
+    if (status != PJ_SUCCESS)
+	appui->PutMsg("Initialization failed");
+}
+
+void PjsuaDestroyL()
+{
+    if (app_ioqueue) {
+	pj_ioqueue_destroy(app_ioqueue);
+	app_ioqueue = NULL;
+    }
+    pjsua_app_destroy();
+}
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/src/pjsuaApplication.cpp b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/src/pjsuaApplication.cpp
new file mode 100644
index 0000000..9196b9f
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/src/pjsuaApplication.cpp
@@ -0,0 +1,78 @@
+/*
+========================================================================
+ Name        : pjsuaApplication.cpp
+ Author      : nanang
+ Copyright   : Copyright (C) 2013 Teluu Inc. (http://www.teluu.com)
+ Description : 
+========================================================================
+*/
+// [[[ begin generated region: do not modify [Generated System Includes]
+// ]]] end generated region [Generated System Includes]
+
+// [[[ begin generated region: do not modify [Generated Includes]
+#include "pjsuaApplication.h"
+#include "pjsuaDocument.h"
+#ifdef EKA2
+#include <eikstart.h>
+#endif
+// ]]] end generated region [Generated Includes]
+
+/**
+ * @brief Returns the application's UID (override from CApaApplication::AppDllUid())
+ * @return UID for this application (KUidpjsuaApplication)
+ */
+TUid CpjsuaApplication::AppDllUid() const
+	{
+	return KUidpjsuaApplication;
+	}
+
+/**
+ * @brief Creates the application's document (override from CApaApplication::CreateDocumentL())
+ * @return Pointer to the created document object (CpjsuaDocument)
+ */
+CApaDocument* CpjsuaApplication::CreateDocumentL()
+	{
+	return CpjsuaDocument::NewL( *this );
+	}
+
+#ifdef EKA2
+
+/**
+ *	@brief Called by the application framework to construct the application object
+ *  @return The application (CpjsuaApplication)
+ */	
+LOCAL_C CApaApplication* NewApplication()
+	{
+	return new CpjsuaApplication;
+	}
+
+/**
+* @brief This standard export is the entry point for all Series 60 applications
+* @return error code
+ */	
+GLDEF_C TInt E32Main()
+	{
+	return EikStart::RunApplication( NewApplication );
+	}
+	
+#else 	// Series 60 2.x main DLL program code
+
+/**
+* @brief This standard export constructs the application object.
+* @return The application (CpjsuaApplication)
+*/
+EXPORT_C CApaApplication* NewApplication()
+	{
+	return new CpjsuaApplication;
+	}
+
+/**
+* @brief This standard export is the entry point for all Series 60 applications
+* @return error code
+*/
+GLDEF_C TInt E32Dll(TDllReason /*reason*/)
+	{
+	return KErrNone;
+	}
+
+#endif // EKA2
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/src/pjsuaContainer.cpp b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/src/pjsuaContainer.cpp
new file mode 100644
index 0000000..5dec51f
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/src/pjsuaContainer.cpp
@@ -0,0 +1,312 @@
+/*
+========================================================================
+ Name        : pjsuaContainer.cpp
+ Author      : nanang
+ Copyright   : Copyright (C) 2013 Teluu Inc. (http://www.teluu.com)
+ Description : 
+========================================================================
+*/
+// [[[ begin generated region: do not modify [Generated System Includes]
+#include <barsread.h>
+#include <eikimage.h>
+#include <eikenv.h>
+#include <stringloader.h>
+#include <eiklabel.h>
+#include <aknviewappui.h>
+#include <eikappui.h>
+#include <akniconutils.h>
+#include <pjsua.mbg>
+#include <pjsua.rsg>
+// ]]] end generated region [Generated System Includes]
+
+// [[[ begin generated region: do not modify [Generated User Includes]
+#include "pjsuaContainer.h"
+#include "pjsuaContainerView.h"
+#include "pjsua.hrh"
+// ]]] end generated region [Generated User Includes]
+
+#include <eikmenub.h>
+
+// [[[ begin generated region: do not modify [Generated Constants]
+_LIT( KpjsuaFile, "\\resource\\apps\\pjsua.mbm" );
+// ]]] end generated region [Generated Constants]
+
+/**
+ * First phase of Symbian two-phase construction. Should not 
+ * contain any code that could leave.
+ */
+CPjsuaContainer::CPjsuaContainer()
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	iImage1 = NULL;
+	iLabel1 = NULL;
+	// ]]] end generated region [Generated Contents]
+	
+	}
+/** 
+ * Destroy child controls.
+ */
+CPjsuaContainer::~CPjsuaContainer()
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	delete iImage1;
+	iImage1 = NULL;
+	delete iLabel1;
+	iLabel1 = NULL;
+	// ]]] end generated region [Generated Contents]
+	
+	}
+				
+/**
+ * Construct the control (first phase).
+ *  Creates an instance and initializes it.
+ *  Instance is not left on cleanup stack.
+ * @param aRect bounding rectangle
+ * @param aParent owning parent, or NULL
+ * @param aCommandObserver command observer
+ * @return initialized instance of CPjsuaContainer
+ */
+CPjsuaContainer* CPjsuaContainer::NewL( 
+		const TRect& aRect, 
+		const CCoeControl* aParent, 
+		MEikCommandObserver* aCommandObserver )
+	{
+	CPjsuaContainer* self = CPjsuaContainer::NewLC( 
+			aRect, 
+			aParent, 
+			aCommandObserver );
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+/**
+ * Construct the control (first phase).
+ *  Creates an instance and initializes it.
+ *  Instance is left on cleanup stack.
+ * @param aRect The rectangle for this window
+ * @param aParent owning parent, or NULL
+ * @param aCommandObserver command observer
+ * @return new instance of CPjsuaContainer
+ */
+CPjsuaContainer* CPjsuaContainer::NewLC( 
+		const TRect& aRect, 
+		const CCoeControl* aParent, 
+		MEikCommandObserver* aCommandObserver )
+	{
+	CPjsuaContainer* self = new ( ELeave ) CPjsuaContainer();
+	CleanupStack::PushL( self );
+	self->ConstructL( aRect, aParent, aCommandObserver );
+	return self;
+	}
+			
+/**
+ * Construct the control (second phase).
+ *  Creates a window to contain the controls and activates it.
+ * @param aRect bounding rectangle
+ * @param aCommandObserver command observer
+ * @param aParent owning parent, or NULL
+ */ 
+void CPjsuaContainer::ConstructL( 
+		const TRect& aRect, 
+		const CCoeControl* aParent, 
+		MEikCommandObserver* aCommandObserver )
+	{
+	if ( aParent == NULL )
+	    {
+		CreateWindowL();
+	    }
+	else
+	    {
+	    SetContainerWindowL( *aParent );
+	    }
+	iFocusControl = NULL;
+	iCommandObserver = aCommandObserver;
+	InitializeControlsL();
+	SetRect( aRect );
+
+	// Full screen
+	SetExtentToWholeScreen();
+	
+	// Set label color
+	//iLabel1->OverrideColorL( EColorLabelText, KRgbWhite );
+	//iLabel1->OverrideColorL(EColorControlBackground, KRgbBlack )
+	iLabel1->SetEmphasis( CEikLabel::EFullEmphasis);
+	iLabel1->OverrideColorL( EColorLabelHighlightFullEmphasis, KRgbBlack );
+	iLabel1->OverrideColorL( EColorLabelTextEmphasis, KRgbWhite );
+
+	// Set label font
+	 CFont* fontUsed;
+	_LIT(f,"Arial");
+	TFontSpec* fontSpec = new TFontSpec(f, 105);
+	TFontStyle* fontStyle = new TFontStyle();
+	fontStyle->SetPosture(EPostureUpright);
+	fontStyle->SetStrokeWeight(EStrokeWeightNormal);
+	fontSpec->iFontStyle = *fontStyle;
+	fontUsed = iCoeEnv->CreateScreenFontL(*fontSpec);
+	iLabel1->SetFont(fontUsed);
+	iLabel1->SetAlignment( EHCenterVCenter );
+	
+	ActivateL();
+	// [[[ begin generated region: do not modify [Post-ActivateL initializations]
+	// ]]] end generated region [Post-ActivateL initializations]
+	
+	}
+			
+/**
+* Return the number of controls in the container (override)
+* @return count
+*/
+TInt CPjsuaContainer::CountComponentControls() const
+	{
+	return ( int ) ELastControl;
+	}
+				
+/**
+* Get the control with the given index (override)
+* @param aIndex Control index [0...n) (limited by #CountComponentControls)
+* @return Pointer to control
+*/
+CCoeControl* CPjsuaContainer::ComponentControl( TInt aIndex ) const
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	switch ( aIndex )
+		{
+		case EImage1:
+			return iImage1;
+		case ELabel1:
+			return iLabel1;
+		}
+	// ]]] end generated region [Generated Contents]
+	
+	// handle any user controls here...
+	
+	return NULL;
+	}
+				
+/**
+ *	Handle resizing of the container. This implementation will lay out
+ *  full-sized controls like list boxes for any screen size, and will layout
+ *  labels, editors, etc. to the size they were given in the UI designer.
+ *  This code will need to be modified to adjust arbitrary controls to
+ *  any screen size.
+ */				
+void CPjsuaContainer::SizeChanged()
+	{
+	CCoeControl::SizeChanged();
+	LayoutControls();
+
+	// Align the image
+	int x = (Size().iWidth - iImage1->Size().iWidth) / 2;
+	int y = (Size().iHeight - iImage1->Size().iHeight) / 2;
+	iImage1->SetPosition(TPoint(x, y));
+	
+	// Align the label
+	iLabel1->SetExtent(TPoint(0, Size().iHeight - iLabel1->Size().iHeight),
+			   TSize(Size().iWidth, iLabel1->Size().iHeight));
+	
+	// [[[ begin generated region: do not modify [Generated Contents]
+			
+	// ]]] end generated region [Generated Contents]
+	
+	}
+				
+// [[[ begin generated function: do not modify
+/**
+ * Layout components as specified in the UI Designer
+ */
+void CPjsuaContainer::LayoutControls()
+	{
+	iImage1->SetExtent( TPoint( 0, 0 ), TSize( 99, 111 ) );
+	iLabel1->SetExtent( TPoint( 0, 196 ), TSize( 241, 27 ) );
+	}
+// ]]] end generated function
+
+/**
+ *	Handle key events.
+ */				
+TKeyResponse CPjsuaContainer::OfferKeyEventL( 
+		const TKeyEvent& aKeyEvent, 
+		TEventCode aType )
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	
+	// ]]] end generated region [Generated Contents]
+	
+	if ( iFocusControl != NULL
+		&& iFocusControl->OfferKeyEventL( aKeyEvent, aType ) == EKeyWasConsumed )
+		{
+		return EKeyWasConsumed;
+		}
+	return CCoeControl::OfferKeyEventL( aKeyEvent, aType );
+	}
+				
+// [[[ begin generated function: do not modify
+/**
+ *	Initialize each control upon creation.
+ */				
+void CPjsuaContainer::InitializeControlsL()
+	{
+	iImage1 = new ( ELeave ) CEikImage;
+		{
+		CFbsBitmap *bitmap, *mask;
+		AknIconUtils::CreateIconL( bitmap, mask,
+				KpjsuaFile, EMbmPjsuaPjsua, -1 );
+		AknIconUtils::SetSize( bitmap, TSize( 99, 111 ), EAspectRatioPreserved );
+		iImage1->SetPicture( bitmap );
+		}
+	iImage1->SetAlignment( EHCenterVTop );
+	iLabel1 = new ( ELeave ) CEikLabel;
+	iLabel1->SetContainerWindowL( *this );
+		{
+		TResourceReader reader;
+		iEikonEnv->CreateResourceReaderLC( reader, R_PJSUA_CONTAINER_LABEL1 );
+		iLabel1->ConstructFromResourceL( reader );
+		CleanupStack::PopAndDestroy(); // reader internal state
+		}
+	
+	}
+// ]]] end generated function
+
+/** 
+ * Handle global resource changes, such as scalable UI or skin events (override)
+ */
+void CPjsuaContainer::HandleResourceChange( TInt aType )
+	{
+	CCoeControl::HandleResourceChange( aType );
+	SetRect( iAvkonViewAppUi->View( TUid::Uid( EPjsuaContainerViewId ) )->ClientRect() );
+	// [[[ begin generated region: do not modify [Generated Contents]
+	// ]]] end generated region [Generated Contents]
+	
+	}
+				
+/**
+ *	Draw container contents.
+ */				
+void CPjsuaContainer::Draw( const TRect& aRect ) const
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	CWindowGc& gc = SystemGc();
+	gc.SetPenStyle( CGraphicsContext::ENullPen );
+	TRgb backColor( 0,0,0 );
+	gc.SetBrushColor( backColor );
+	gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+	gc.DrawRect( aRect );
+	
+	// ]]] end generated region [Generated Contents]
+	
+	}
+
+void CPjsuaContainer::PutMessageL( const char * msg )
+{
+    if (!iLabel1)
+	return;
+    
+    TPtrC8 ptr(reinterpret_cast<const TUint8*>(msg));
+    HBufC* buffer = HBufC::NewLC(ptr.Length());
+    buffer->Des().Copy(ptr);
+
+    iLabel1->SetTextL(*buffer);
+    iLabel1->DrawNow();
+
+    CleanupStack::PopAndDestroy(buffer);
+}
diff --git a/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/src/pjsuaDocument.cpp b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/src/pjsuaDocument.cpp
new file mode 100644
index 0000000..f349c6e
--- /dev/null
+++ b/jni/pjproject-android/pjsip-apps/src/pjsua/symbian/src/pjsuaDocument.cpp
@@ -0,0 +1,57 @@
+/*
+========================================================================
+ Name        : pjsuaDocument.cpp
+ Author      : nanang
+ Copyright   : Copyright (C) 2013 Teluu Inc. (http://www.teluu.com)
+ Description : 
+========================================================================
+*/
+// [[[ begin generated region: do not modify [Generated User Includes]
+#include "pjsuaDocument.h"
+#include "pjsuaAppUi.h"
+// ]]] end generated region [Generated User Includes]
+
+/**
+ * @brief Constructs the document class for the application.
+ * @param anApplication the application instance
+ */
+CpjsuaDocument::CpjsuaDocument( CEikApplication& anApplication )
+	: CAknDocument( anApplication )
+	{
+	}
+
+/**
+ * @brief Completes the second phase of Symbian object construction. 
+ * Put initialization code that could leave here.  
+ */ 
+void CpjsuaDocument::ConstructL()
+	{
+	}
+	
+/**
+ * Symbian OS two-phase constructor.
+ *
+ * Creates an instance of CpjsuaDocument, constructs it, and
+ * returns it.
+ *
+ * @param aApp the application instance
+ * @return the new CpjsuaDocument
+ */
+CpjsuaDocument* CpjsuaDocument::NewL( CEikApplication& aApp )
+	{
+	CpjsuaDocument* self = new ( ELeave ) CpjsuaDocument( aApp );
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+/**
+ * @brief Creates the application UI object for this document.
+ * @return the new instance
+ */	
+CEikAppUi* CpjsuaDocument::CreateAppUiL()
+	{
+	return new ( ELeave ) CpjsuaAppUi;
+	}
+				
