diff --git a/pjsip-apps/src/symbian_ua_gui/application.uidesign b/pjsip-apps/src/symbian_ua_gui/application.uidesign
new file mode 100644
index 0000000..abe5c5a
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/application.uidesign
@@ -0,0 +1,157 @@
+<?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.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"/>
+    <manifestEntry id="com.nokia.sdt.series60.WaitDialog" version="1.0.0"/>
+  </componentManifest>
+  <property id="com.nokia.sdt.symbian.dm.RESOURCE_DIRECTORY_ID">data</property>
+  <property id="com.nokia.sdt.component.symbian.vendor">com.nokia.series60</property>
+  <property id="com.nokia.sdt.component.symbian.version">3.0.1</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">symbian_ua_guiAppUi</property>
+  <property id="com.nokia.sdt.symbian.dm.SOURCE_DIRECTORY_ID">src</property>
+  <property id="com.nokia.sdt.symbian.dm.LOCALIZED_FILE_FORMAT">loc</property>
+  <property id="com.nokia.sdt.symbian.dm.ROOT_APPLICATION_NAME">symbian_ua_gui</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">Csymbian_ua_guiApplication</property>
+    <property id="documentBase">symbian_ua_gui</property>
+    <property id="name">symbian_ua_guiApplication</property>
+    <property id="uid">0xEBD12EE4</property>
+    <component id="com.nokia.sdt.series60.CAknDocument">
+      <property id="className">Csymbian_ua_guiDocument</property>
+      <property id="name">symbian_ua_guiDocument</property>
+      <component id="com.nokia.sdt.series60.CAknViewAppUi">
+        <property id="initialDesign" type="componentRef">aknViewReference2</property>
+        <property id="className">Csymbian_ua_guiAppUi</property>
+        <compoundProperty id="location">
+          <property id="x">52</property>
+          <property id="y">45</property>
+        </compoundProperty>
+        <property id="name">symbian_ua_guiAppUi</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">66</property>
+          </compoundProperty>
+          <component id="com.nokia.sdt.series60.StatusPaneCaption">
+            <property id="shortCaption" type="i18n">STR_symbian_ua_guiApplication_2</property>
+            <compoundProperty id="location">
+              <property id="x">56</property>
+            </compoundProperty>
+            <property id="longCaption" type="i18n">STR_symbian_ua_guiApplication_1</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="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">symbian_ua_guiContainer.uidesign</property>
+          <property id="baseName">symbian_ua_guiContainer</property>
+          <compoundProperty id="tabImage"/>
+          <property id="name">aknViewReference1</property>
+        </component>
+        <component id="com.nokia.sdt.series60.AvkonViewReference">
+          <property id="filePath">symbian_ua_guiSettingItemList.uidesign</property>
+          <property id="baseName">symbian_ua_guiSettingItemList</property>
+          <compoundProperty id="tabImage"/>
+          <property id="name">aknViewReference2</property>
+        </component>
+        <component id="com.nokia.sdt.series60.WaitDialog">
+          <compoundProperty id="location">
+            <property id="x">0</property>
+            <property id="y">171</property>
+          </compoundProperty>
+          <property id="name">dlg_wait_init</property>
+          <property id="text" type="i18n">STR_symbian_ua_guiApplication_3</property>
+          <compoundProperty id="size">
+            <property id="width">240</property>
+            <property id="height">149</property>
+          </compoundProperty>
+          <eventBinding id="canceled" handlerDisplay="HandleDlg_wait_initCanceledL" handlerSymbol="cpp@src//symbian_ua_guiAppUi.cpp/function(Csymbian_ua_guiAppUi::HandleDlg_wait_initCanceledL(CAknProgressDialog*))"/>
+        </component>
+      </component>
+    </component>
+  </component>
+  <stringBundle>
+    <stringTable language="LANG_English">
+      <string id="STR_symbian_ua_guiApplication_1">symbian_ua_gui</string>
+      <string id="STR_symbian_ua_guiApplication_2">symbian_ua_gui</string>
+      <string id="STR_symbian_ua_guiApplication_3">Please wait...</string>
+    </stringTable>
+  </stringBundle>
+  <macroTable/>
+  <sourceMappingState>
+    <resourceMappings>
+      <resourceMapping instanceName="symbian_ua_guiAppUi">r_application_symbian_ua_gui_app_ui</resourceMapping>
+      <resourceMapping instanceName="statusPane">r_application_status_pane</resourceMapping>
+      <resourceMapping instanceName="aknViewReference2" rsrcId="tabText">r_application_akn_view_reference2</resourceMapping>
+      <resourceMapping instanceName="dlg_wait_init">r_application_dlg_wait_init</resourceMapping>
+      <resourceMapping instanceName="symbian_ua_guiAppUi" rsrcId="localisable_app_info">r_localisable_app_info</resourceMapping>
+      <resourceMapping instanceName="aknViewReference1" rsrcId="tabText">r_application_akn_view_reference1</resourceMapping>
+    </resourceMappings>
+    <enumMappings>
+      <enumMapping instanceName="aknViewReference2" propertyId="" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_VIEW_UID">ESymbian_ua_guiSettingItemListViewId</enumMapping>
+      <enumMapping instanceName="dlg_wait_init" propertyId="" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_DIALOG_LINE_ID">ESymbian_ua_guiApplicationDlg_wait_init</enumMapping>
+      <enumMapping instanceName="aknViewReference1" propertyId="" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_VIEW_UID">ESymbian_ua_guiContainerViewId</enumMapping>
+    </enumMappings>
+    <arrayMappings/>
+  </sourceMappingState>
+  <generatedFiles>
+    <file>src/symbian_ua_guiAppUi.cpp</file>
+    <file>src/symbian_ua_guiDocument.cpp</file>
+    <file>inc/symbian_ua_guiApplication.h</file>
+    <file>src/symbian_ua_guiApplication.cpp</file>
+    <file>inc/symbian_ua_guiAppUi.h</file>
+    <file>inc/symbian_ua_guiDocument.h</file>
+    <file>data/symbian_ua_gui.rss</file>
+    <file>data/symbian_ua_guiContainer.rssi</file>
+    <file>inc/symbian_ua_gui.hrh</file>
+    <file>inc/symbian_ua_guiContainer.hrh</file>
+    <file>data/symbian_ua_guiSettingItemList.rssi</file>
+    <file>inc/symbian_ua_guiSettingItemList.hrh</file>
+    <file>data/symbian_ua_gui.loc</file>
+    <file>data/symbian_ua_gui.l01</file>
+    <file>data/symbian_ua_guiContainer.loc</file>
+    <file>data/symbian_ua_guiContainer.l01</file>
+    <file>data/symbian_ua_guiSettingItemList.loc</file>
+    <file>data/symbian_ua_guiSettingItemList.l01</file>
+  </generatedFiles>
+</designerData>
diff --git a/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_gui.l01 b/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_gui.l01
new file mode 100644
index 0000000..c2a8140
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_gui.l01
@@ -0,0 +1,12 @@
+/*
+========================================================================
+ Name        : symbian_ua_gui.l01
+ Author      : nanang
+ Copyright   : (c) PJSIP 2008
+ Description : 
+========================================================================
+*/
+// localized strings for language: UK English (01)
+#define STR_symbian_ua_guiApplication_1 "symbian_ua_gui"
+#define STR_symbian_ua_guiApplication_2 "symbian_ua_gui"
+#define STR_symbian_ua_guiApplication_3 "Please wait..."
diff --git a/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_gui.loc b/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_gui.loc
new file mode 100644
index 0000000..d13671e
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_gui.loc
@@ -0,0 +1,11 @@
+/*
+========================================================================
+ Name        : symbian_ua_gui.loc
+ Author      : nanang
+ Copyright   : (c) PJSIP 2008
+ Description : 
+========================================================================
+*/
+#ifdef LANGUAGE_01
+#include "symbian_ua_gui.l01"
+#endif
diff --git a/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_gui.rss b/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_gui.rss
new file mode 100644
index 0000000..c502c33
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_gui.rss
@@ -0,0 +1,71 @@
+/*
+========================================================================
+ Name        : symbian_ua_gui.rss
+ Author      : nanang
+ Copyright   : (c) PJSIP 2008
+ Description : 
+========================================================================
+*/
+NAME SYMB
+
+#include <avkon.rsg>
+#include <avkon.rh>
+#include <eikon.rh>
+#include <appinfo.rh>
+#include "symbian_ua_gui.hrh"
+#include "symbian_ua_gui.loc"
+
+RESOURCE RSS_SIGNATURE
+	{
+	}
+RESOURCE TBUF
+	{
+	buf = "symbian_ua_gui";
+	}
+RESOURCE EIK_APP_INFO r_application_symbian_ua_gui_app_ui
+	{
+	cba = R_AVKON_SOFTKEYS_OPTIONS_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_symbian_ua_guiApplication_2;
+	caption_and_icon = CAPTION_AND_ICON_INFO
+		{
+		caption = STR_symbian_ua_guiApplication_1;
+		number_of_icons = 0;
+		};
+	}
+RESOURCE TBUF r_application_akn_view_reference1
+	{
+	}
+
+RESOURCE TBUF r_application_akn_view_reference2
+	{
+	}
+
+RESOURCE DIALOG r_application_dlg_wait_init
+	{
+	flags = EAknWaitNoteFlags;
+	buttons = R_AVKON_SOFTKEYS_CANCEL;
+	items =
+		{
+		DLG_LINE
+			{
+			type = EAknCtNote;
+			id = ESymbian_ua_guiApplicationDlg_wait_init;
+			control = AVKON_NOTE
+				{
+				layout = EWaitLayout;
+				singular_label = STR_symbian_ua_guiApplication_3;
+				animation = R_QGN_GRAF_WAIT_BAR_ANIM;
+				};
+			}
+		};
+	}
+
+#include "symbian_ua_guiContainer.rssi"
+#include "symbian_ua_guiSettingItemList.rssi"
diff --git a/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_guiContainer.l01 b/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_guiContainer.l01
new file mode 100644
index 0000000..ddf47ce
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_guiContainer.l01
@@ -0,0 +1,21 @@
+/*
+========================================================================
+ Name        : symbian_ua_guiContainer.l01
+ Author      : nanang
+ Copyright   : (c) PJSIP 2008
+ Description : 
+========================================================================
+*/
+// localized strings for language: UK English (01)
+#define STR_symbian_ua_guiContainerView_1 "PJSUA for S60"
+#define STR_symbian_ua_guiContainerView_7 "Options"
+#define STR_symbian_ua_guiContainerView_8 "Call"
+#define STR_symbian_ua_guiContainerView_2 "URL"
+#define STR_symbian_ua_guiContainerView_4 "sip:"
+#define STR_symbian_ua_guiContainerView_9 "Setting"
+#define STR_symbian_ua_guiContainerView_10 "Exit"
+#define STR_symbian_ua_guiContainerView_3 ""
+#define STR_symbian_ua_guiContainerView_13 "Failed initializing PJSUA!"
+#define STR_symbian_ua_guiContainerView_16 "Register Success"
+#define STR_symbian_ua_guiContainerView_17 "Register Failed"
+#define STR_symbian_ua_guiContainerView_18 "Accept Call"
diff --git a/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_guiContainer.loc b/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_guiContainer.loc
new file mode 100644
index 0000000..7cf063f
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_guiContainer.loc
@@ -0,0 +1,11 @@
+/*
+========================================================================
+ Name        : symbian_ua_guiContainer.loc
+ Author      : nanang
+ Copyright   : (c) PJSIP 2008
+ Description : 
+========================================================================
+*/
+#ifdef LANGUAGE_01
+#include "symbian_ua_guiContainer.l01"
+#endif
diff --git a/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_guiContainer.rssi b/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_guiContainer.rssi
new file mode 100644
index 0000000..5419289
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_guiContainer.rssi
@@ -0,0 +1,141 @@
+/*
+========================================================================
+ Name        : symbian_ua_guiContainer.rssi
+ Author      : nanang
+ Copyright   : (c) PJSIP 2008
+ Description : 
+========================================================================
+*/
+#include "symbian_ua_guiContainer.hrh"
+#include "symbian_ua_guiContainer.loc"
+
+RESOURCE AVKON_VIEW r_symbian_ua_gui_container_symbian_ua_gui_container_view
+	{
+	cba = r_symbian_ua_gui_container_control_pane;
+	menubar = r_symbian_ua_gui_container_options_menu;
+	}
+RESOURCE MENU_BAR r_symbian_ua_gui_container_options_menu
+	{titles =
+			{
+			MENU_TITLE
+				{
+				menu_pane = r_symbian_ua_gui_container_menu_pane1_menu_pane;
+				}
+			};
+
+	}
+RESOURCE STATUS_PANE_APP_MODEL r_symbian_ua_gui_container_status_pane
+	{
+	panes =
+		{
+		SPANE_PANE
+			{
+			id = EEikStatusPaneUidTitle;
+			type = EAknCtTitlePane;
+			resource = r_symbian_ua_gui_container_title_resource;
+			}
+		};
+	}
+RESOURCE TITLE_PANE r_symbian_ua_gui_container_title_resource
+	{
+	txt = STR_symbian_ua_guiContainerView_1;
+	}
+RESOURCE CBA r_symbian_ua_gui_container_control_pane
+	{
+	buttons =
+		{
+		CBA_BUTTON
+			{
+			id = EAknSoftkeyOptions;
+			txt = STR_symbian_ua_guiContainerView_7;
+			},
+		CBA_BUTTON
+			{
+			id = ESymbian_ua_guiContainerViewControlPaneRightId;
+			txt = STR_symbian_ua_guiContainerView_8;
+			}
+		};
+	}
+RESOURCE LABEL r_symbian_ua_gui_container_label1
+	{
+	txt = STR_symbian_ua_guiContainerView_2;
+	horiz_align = EEikLabelAlignHCenter;
+	}
+RESOURCE EDWIN r_symbian_ua_gui_container_ed_url
+	{
+	maxlength = 255;
+	default_case = EAknEditorLowerCase;
+	allowed_case_modes = EAknEditorAllCaseModes;
+	numeric_keymap = EAknEditorStandardNumberModeKeymap;
+	default_input_mode = EAknEditorTextInputMode;
+	allowed_input_modes = EAknEditorTextInputMode | EAknEditorNumericInputMode | EAknEditorSecretAlphaInputMode | EAknEditorFullWidthTextInputMode | EAknEditorFullWidthNumericInputMode | EAknEditorHalfWidthTextInputMode;
+	special_character_table = R_AVKON_URL_SPECIAL_CHARACTER_TABLE_DIALOG;
+	avkon_flags = EAknEditorFlagNoT9 | EAknEditorFlagSupressShiftMenu;
+	}
+RESOURCE TBUF r_symbian_ua_gui_container_ed_url_2
+	{
+	buf = STR_symbian_ua_guiContainerView_4;
+	}
+RESOURCE MENU_PANE r_symbian_ua_gui_container_menu_pane1_menu_pane
+	{
+	items =
+		{
+		MENU_ITEM
+			{
+			command = ESymbian_ua_guiContainerViewSettingMenuItemCommand;
+			txt = STR_symbian_ua_guiContainerView_9;
+			},
+		MENU_ITEM
+			{
+			command = EAknCmdExit;
+			txt = STR_symbian_ua_guiContainerView_10;
+			}
+		};
+	}
+RESOURCE EDWIN r_symbian_ua_gui_container_ed_info
+	{
+	flags = EEikEdwinReadOnly;
+	lines = 10;
+	maxlength = 2000;
+	default_case = EAknEditorTextCase;
+	allowed_case_modes = EAknEditorAllCaseModes;
+	numeric_keymap = EAknEditorStandardNumberModeKeymap;
+	default_input_mode = EAknEditorTextInputMode;
+	allowed_input_modes = EAknEditorTextInputMode | EAknEditorNumericInputMode | EAknEditorSecretAlphaInputMode | EAknEditorKatakanaInputMode | EAknEditorFullWidthTextInputMode | EAknEditorFullWidthNumericInputMode | EAknEditorFullWidthKatakanaInputMode | EAknEditorHiraganaKanjiInputMode | EAknEditorHalfWidthTextInputMode;
+	avkon_flags = EAknEditorFlagNoEditIndicators | EAknEditorFlagEnableScrollBars;
+	special_character_table = 0;
+	}
+RESOURCE TBUF r_symbian_ua_gui_container_ed_info_2
+	{
+	buf = STR_symbian_ua_guiContainerView_3;
+	}
+RESOURCE TBUF r_symbian_ua_gui_container_note_error
+	{
+	buf = STR_symbian_ua_guiContainerView_13;
+	}
+RESOURCE TBUF r_symbian_ua_gui_container_note_info
+	{
+	buf = STR_symbian_ua_guiContainerView_16;
+	}
+RESOURCE TBUF r_symbian_ua_gui_container_note_warning
+	{
+	buf = STR_symbian_ua_guiContainerView_17;
+	}
+RESOURCE DIALOG r_symbian_ua_gui_container_qry_accept_call
+	{
+	flags = EAknGeneralQueryFlags;
+	buttons = R_AVKON_SOFTKEYS_YES_NO;
+	items =
+		{
+		DLG_LINE
+			{
+			type = EAknCtQuery;
+			id = ESymbian_ua_guiContainerViewQry_accept_call;
+			control = AVKON_CONFIRMATION_QUERY
+				{
+				layout = EConfirmationQueryLayout;
+				label = STR_symbian_ua_guiContainerView_18;
+				};
+			}
+		};
+	}
diff --git a/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_guiSettingItemList.l01 b/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_guiSettingItemList.l01
new file mode 100644
index 0000000..1f812f5
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_guiSettingItemList.l01
@@ -0,0 +1,31 @@
+/*
+========================================================================
+ Name        : symbian_ua_guiSettingItemList.l01
+ Author      : nanang
+ Copyright   : (c) PJSIP 2008
+ Description : 
+========================================================================
+*/
+// localized strings for language: UK English (01)
+#define STR_symbian_ua_guiSettingItemListView_1 "Settings"
+#define STR_symbian_ua_guiSettingItemListView_2 "Account Settings"
+#define STR_symbian_ua_guiSettingItemListView_4 "Change"
+#define STR_symbian_ua_guiSettingItemListView_16 "Password"
+#define STR_symbian_ua_guiSettingItemListView_18 ""
+#define STR_symbian_ua_guiSettingItemListView_19 "STUN Server"
+#define STR_symbian_ua_guiSettingItemListView_24 "SRTP"
+#define STR_symbian_ua_guiSettingItemListView_25 "On"
+#define STR_symbian_ua_guiSettingItemListView_26 "Popup text for On"
+#define STR_symbian_ua_guiSettingItemListView_27 "Off"
+#define STR_symbian_ua_guiSettingItemListView_28 "Popup text for Off"
+#define STR_symbian_ua_guiSettingItemListView_3 ""
+#define STR_symbian_ua_guiSettingItemListView_5 "Registrar"
+#define STR_symbian_ua_guiSettingItemListView_7 ""
+#define STR_symbian_ua_guiSettingItemListView_8 "User"
+#define STR_symbian_ua_guiSettingItemListView_46 "ICE"
+#define STR_symbian_ua_guiSettingItemListView_47 "On"
+#define STR_symbian_ua_guiSettingItemListView_48 "Popup text for On"
+#define STR_symbian_ua_guiSettingItemListView_49 "Off"
+#define STR_symbian_ua_guiSettingItemListView_140 "Options"
+#define STR_symbian_ua_guiSettingItemListView_141 "Done"
+#define STR_symbian_ua_guiSettingItemListView_50 "Popup text for Off"
diff --git a/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_guiSettingItemList.loc b/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_guiSettingItemList.loc
new file mode 100644
index 0000000..c454d8f
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_guiSettingItemList.loc
@@ -0,0 +1,11 @@
+/*
+========================================================================
+ Name        : symbian_ua_guiSettingItemList.loc
+ Author      : nanang
+ Copyright   : (c) PJSIP 2008
+ Description : 
+========================================================================
+*/
+#ifdef LANGUAGE_01
+#include "symbian_ua_guiSettingItemList.l01"
+#endif
diff --git a/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_guiSettingItemList.rssi b/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_guiSettingItemList.rssi
new file mode 100644
index 0000000..c8a4b30
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_guiSettingItemList.rssi
@@ -0,0 +1,275 @@
+/*
+========================================================================
+ Name        : symbian_ua_guiSettingItemList.rssi
+ Author      : nanang
+ Copyright   : (c) PJSIP 2008
+ Description : 
+========================================================================
+*/
+#include "symbian_ua_guiSettingItemList.hrh"
+#include "symbian_ua_guiSettingItemList.loc"
+
+RESOURCE AVKON_VIEW r_symbian_ua_gui_setting_item_list_symbian_ua_gui_setting_item_list_view
+	{
+	cba = r_symbian_ua_gui_setting_item_list_control_pane;
+	menubar = r_symbian_ua_gui_setting_item_list_options_menu;
+	}
+RESOURCE MENU_BAR r_symbian_ua_gui_setting_item_list_options_menu
+	{
+	titles =
+		{
+		MENU_TITLE
+			{
+			menu_pane = r_symbian_ua_gui_setting_item_list_menu_pane1_menu_pane;
+			}
+		};
+	}
+RESOURCE MENU_PANE r_symbian_ua_gui_setting_item_list_menu_pane1_menu_pane
+	{
+	items =
+		{
+		MENU_ITEM
+			{
+			command = ESymbian_ua_guiSettingItemListViewMenuItem1Command;
+			txt = STR_symbian_ua_guiSettingItemListView_4;
+			}
+		};
+	}
+RESOURCE STATUS_PANE_APP_MODEL r_symbian_ua_gui_setting_item_list_status_pane
+	{
+	panes =
+		{
+		SPANE_PANE
+			{
+			id = EEikStatusPaneUidTitle;
+			type = EAknCtTitlePane;
+			resource = r_symbian_ua_gui_setting_item_list_title_resource;
+			}
+		};
+	}
+RESOURCE TITLE_PANE r_symbian_ua_gui_setting_item_list_title_resource
+	{
+	txt = STR_symbian_ua_guiSettingItemListView_2;
+	}
+RESOURCE AVKON_SETTING_ITEM_LIST r_symbian_ua_gui_setting_item_list_symbian_ua_gui_setting_item_list
+	{
+	items =
+		{
+		AVKON_SETTING_ITEM
+			{
+			name = STR_symbian_ua_guiSettingItemListView_5;
+			identifier = ESymbian_ua_guiSettingItemListViewEd_registrar;
+			setting_page_resource = r_symbian_ua_gui_setting_item_list_ed_registrar_setting_page_resource;
+			},
+		AVKON_SETTING_ITEM
+			{
+			name = STR_symbian_ua_guiSettingItemListView_8;
+			identifier = ESymbian_ua_guiSettingItemListViewEd_user;
+			setting_page_resource = r_symbian_ua_gui_setting_item_list_ed_user_setting_page_resource;
+			},
+		AVKON_SETTING_ITEM
+			{
+			name = STR_symbian_ua_guiSettingItemListView_16;
+			identifier = ESymbian_ua_guiSettingItemListViewEd_password;
+			setting_page_resource = r_symbian_ua_gui_setting_item_list_ed_password_setting_page_resource;
+			},
+		AVKON_SETTING_ITEM
+			{
+			name = STR_symbian_ua_guiSettingItemListView_24;
+			identifier = ESymbian_ua_guiSettingItemListViewB_srtp;
+			setting_page_resource = r_symbian_ua_gui_setting_item_list_b_srtp_setting_page_resource;
+			associated_resource = r_symbian_ua_gui_setting_item_list_b_srtp;
+			},
+		AVKON_SETTING_ITEM
+			{
+			name = STR_symbian_ua_guiSettingItemListView_46;
+			identifier = ESymbian_ua_guiSettingItemListViewB_ice;
+			setting_page_resource = r_symbian_ua_gui_setting_item_list_b_ice_setting_page_resource;
+			associated_resource = r_symbian_ua_gui_setting_item_list_b_ice;
+			},
+		AVKON_SETTING_ITEM
+			{
+			name = STR_symbian_ua_guiSettingItemListView_19;
+			identifier = ESymbian_ua_guiSettingItemListViewEd_stun_server;
+			setting_page_resource = r_symbian_ua_gui_setting_item_list_ed_stun_server_setting_page_resource;
+			}
+		};
+	}
+RESOURCE CBA r_symbian_ua_gui_setting_item_list_control_pane
+	{
+	buttons =
+		{
+		CBA_BUTTON
+			{
+			id = EAknSoftkeyOptions;
+			txt = STR_symbian_ua_guiSettingItemListView_140;
+			},
+		CBA_BUTTON
+			{
+			id = EAknSoftkeySave;
+			txt = STR_symbian_ua_guiSettingItemListView_141;
+			}
+		};
+	}
+RESOURCE AVKON_SETTING_PAGE r_symbian_ua_gui_setting_item_list_ed_registrar_setting_page_resource
+	{
+	number = -16380;
+	label = STR_symbian_ua_guiSettingItemListView_5;
+	type = EEikCtEdwin;
+	editor_resource_id = r_symbian_ua_gui_setting_item_list_ed_registrar_editor_resource_id;
+	}
+RESOURCE EDWIN r_symbian_ua_gui_setting_item_list_ed_registrar_editor_resource_id
+	{
+	maxlength = 255;
+	default_case = EAknEditorLowerCase;
+	allowed_case_modes = EAknEditorAllCaseModes;
+	numeric_keymap = EAknEditorStandardNumberModeKeymap;
+	default_input_mode = EAknEditorTextInputMode;
+	allowed_input_modes = EAknEditorTextInputMode | EAknEditorNumericInputMode | EAknEditorSecretAlphaInputMode | EAknEditorKatakanaInputMode | EAknEditorFullWidthTextInputMode | EAknEditorFullWidthNumericInputMode | EAknEditorFullWidthKatakanaInputMode | EAknEditorHiraganaKanjiInputMode | EAknEditorHalfWidthTextInputMode;
+	special_character_table = 0;
+	}
+RESOURCE AVKON_SETTING_PAGE r_symbian_ua_gui_setting_item_list_ed_user_setting_page_resource
+	{
+	number = -16380;
+	label = STR_symbian_ua_guiSettingItemListView_8;
+	type = EEikCtEdwin;
+	editor_resource_id = r_symbian_ua_gui_setting_item_list_ed_user_editor_resource_id;
+	}
+RESOURCE EDWIN r_symbian_ua_gui_setting_item_list_ed_user_editor_resource_id
+	{
+	maxlength = 255;
+	default_case = EAknEditorLowerCase;
+	allowed_case_modes = EAknEditorAllCaseModes;
+	numeric_keymap = EAknEditorStandardNumberModeKeymap;
+	default_input_mode = EAknEditorTextInputMode;
+	allowed_input_modes = EAknEditorTextInputMode | EAknEditorNumericInputMode | EAknEditorSecretAlphaInputMode | EAknEditorKatakanaInputMode | EAknEditorFullWidthTextInputMode | EAknEditorFullWidthNumericInputMode | EAknEditorFullWidthKatakanaInputMode | EAknEditorHiraganaKanjiInputMode | EAknEditorHalfWidthTextInputMode;
+	special_character_table = 0;
+	}
+RESOURCE AVKON_SETTING_PAGE r_symbian_ua_gui_setting_item_list_ed_password_setting_page_resource
+	{
+	number = -16380;
+	label = STR_symbian_ua_guiSettingItemListView_16;
+	type = EEikCtSecretEd;
+	editor_resource_id = r_symbian_ua_gui_setting_item_list_ed_password_editor_resource_id;
+	}
+RESOURCE SECRETED r_symbian_ua_gui_setting_item_list_ed_password_editor_resource_id
+	{num_letters = 32;
+
+	}
+RESOURCE AVKON_SETTING_PAGE r_symbian_ua_gui_setting_item_list_ed_stun_server_setting_page_resource
+	{
+	number = -16380;
+	label = STR_symbian_ua_guiSettingItemListView_19;
+	type = EEikCtEdwin;
+	editor_resource_id = r_symbian_ua_gui_setting_item_list_ed_stun_server_editor_resource_id;
+	}
+RESOURCE EDWIN r_symbian_ua_gui_setting_item_list_ed_stun_server_editor_resource_id
+	{
+	maxlength = 255;
+	default_case = EAknEditorTextCase;
+	allowed_case_modes = EAknEditorAllCaseModes;
+	numeric_keymap = EAknEditorStandardNumberModeKeymap;
+	default_input_mode = EAknEditorTextInputMode;
+	allowed_input_modes = EAknEditorTextInputMode | EAknEditorNumericInputMode | EAknEditorSecretAlphaInputMode | EAknEditorKatakanaInputMode | EAknEditorFullWidthTextInputMode | EAknEditorFullWidthNumericInputMode | EAknEditorFullWidthKatakanaInputMode | EAknEditorHiraganaKanjiInputMode | EAknEditorHalfWidthTextInputMode;
+	special_character_table = 0;
+	}
+RESOURCE AVKON_SETTING_PAGE r_symbian_ua_gui_setting_item_list_b_srtp_setting_page_resource
+	{
+	number = -16380;
+	label = STR_symbian_ua_guiSettingItemListView_24;
+	type = EAknCtPopupSettingList;
+	editor_resource_id = r_symbian_ua_gui_setting_item_list_b_srtp_editor_resource_id;
+	}
+RESOURCE POPUP_SETTING_LIST r_symbian_ua_gui_setting_item_list_b_srtp_editor_resource_id
+	{
+	}
+RESOURCE AVKON_POPUP_SETTING_TEXTS r_symbian_ua_gui_setting_item_list_b_srtp
+	{
+	setting_texts_resource = r_symbian_ua_gui_setting_item_list_b_srtp_setting_texts_resource;
+	popped_up_texts_resource = r_symbian_ua_gui_setting_item_list_b_srtp_popped_up_texts_resource;
+	}
+RESOURCE ARRAY r_symbian_ua_gui_setting_item_list_b_srtp_setting_texts_resource
+	{
+	items =
+		{
+		AVKON_ENUMERATED_TEXT
+			{
+			text = STR_symbian_ua_guiSettingItemListView_25;
+			value = 1;
+			},
+		AVKON_ENUMERATED_TEXT
+			{
+			text = STR_symbian_ua_guiSettingItemListView_27;
+			}
+		};
+	}
+RESOURCE ARRAY r_symbian_ua_gui_setting_item_list_b_srtp_popped_up_texts_resource
+	{
+	items =
+		{
+		LBUF
+			{
+			txt = STR_symbian_ua_guiSettingItemListView_26;
+			},
+		LBUF
+			{
+			txt = STR_symbian_ua_guiSettingItemListView_28;
+			}
+		};
+	}
+RESOURCE AVKON_SETTING_PAGE r_symbian_ua_gui_setting_item_list_b_ice_setting_page_resource
+	{
+	number = -16380;
+	label = STR_symbian_ua_guiSettingItemListView_46;
+	type = EAknCtPopupSettingList;
+	editor_resource_id = r_symbian_ua_gui_setting_item_list_b_ice_editor_resource_id;
+	}
+RESOURCE POPUP_SETTING_LIST r_symbian_ua_gui_setting_item_list_b_ice_editor_resource_id
+	{
+	}
+RESOURCE AVKON_POPUP_SETTING_TEXTS r_symbian_ua_gui_setting_item_list_b_ice
+	{
+	setting_texts_resource = r_symbian_ua_gui_setting_item_list_b_ice_setting_texts_resource;
+	popped_up_texts_resource = r_symbian_ua_gui_setting_item_list_b_ice_popped_up_texts_resource;
+	}
+RESOURCE ARRAY r_symbian_ua_gui_setting_item_list_b_ice_setting_texts_resource
+	{
+	items =
+		{
+		AVKON_ENUMERATED_TEXT
+			{
+			text = STR_symbian_ua_guiSettingItemListView_47;
+			value = 1;
+			},
+		AVKON_ENUMERATED_TEXT
+			{
+			text = STR_symbian_ua_guiSettingItemListView_49;
+			}
+		};
+	}
+RESOURCE ARRAY r_symbian_ua_gui_setting_item_list_b_ice_popped_up_texts_resource
+	{
+	items =
+		{
+		LBUF
+			{
+			txt = STR_symbian_ua_guiSettingItemListView_48;
+			},
+		LBUF
+			{
+			txt = STR_symbian_ua_guiSettingItemListView_50;
+			}
+		};
+	}
+RESOURCE TBUF r_symbian_ua_gui_setting_item_list_ed_registrar
+	{
+	buf = STR_symbian_ua_guiSettingItemListView_3;
+	}
+RESOURCE TBUF r_symbian_ua_gui_setting_item_list_ed_user
+	{
+	buf = STR_symbian_ua_guiSettingItemListView_7;
+	}
+RESOURCE TBUF r_symbian_ua_gui_setting_item_list_ed_stun_server
+	{
+	buf = STR_symbian_ua_guiSettingItemListView_18;
+	}
diff --git a/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_gui_reg.loc b/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_gui_reg.loc
new file mode 100644
index 0000000..876b4b5
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_gui_reg.loc
@@ -0,0 +1,11 @@
+//  LOCALISATION STRINGS
+
+// Caption string for app.
+#define qtn_caption_string "symbian_ua_gui"
+
+// Short caption string for app.
+#define qtn_short_caption_string "HW"
+
+#define qtn_loc_resource_file_1 "\\resource\\apps\\symbian_ua_gui"
+
+// End of File
diff --git a/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_gui_reg.rss b/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_gui_reg.rss
new file mode 100644
index 0000000..ad50c4f
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/data/symbian_ua_gui_reg.rss
@@ -0,0 +1,21 @@
+
+#include <eikon.rh>
+#include <avkon.rsg>
+#include <avkon.rh>
+#include <appinfo.rh>
+#include "symbian_ua_gui_reg.loc"
+#include <symbian_ua_gui.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0xEBD12EE4
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file="symbian_ua_gui";
+	localisable_resource_file =  qtn_loc_resource_file_1;
+	localisable_resource_id = R_LOCALISABLE_APP_INFO;
+
+	embeddability=KAppNotEmbeddable;
+	newfile=KAppDoesNotSupportNewFile;
+	}
+
diff --git a/pjsip-apps/src/symbian_ua_gui/gfx/list_icon.bmp b/pjsip-apps/src/symbian_ua_gui/gfx/list_icon.bmp
new file mode 100644
index 0000000..a874fea
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/gfx/list_icon.bmp
Binary files differ
diff --git a/pjsip-apps/src/symbian_ua_gui/gfx/list_icon_mask.bmp b/pjsip-apps/src/symbian_ua_gui/gfx/list_icon_mask.bmp
new file mode 100644
index 0000000..e320527
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/gfx/list_icon_mask.bmp
Binary files differ
diff --git a/pjsip-apps/src/symbian_ua_gui/gfx/mark_icon.bmp b/pjsip-apps/src/symbian_ua_gui/gfx/mark_icon.bmp
new file mode 100644
index 0000000..35571e2
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/gfx/mark_icon.bmp
Binary files differ
diff --git a/pjsip-apps/src/symbian_ua_gui/gfx/mark_icon_mask.bmp b/pjsip-apps/src/symbian_ua_gui/gfx/mark_icon_mask.bmp
new file mode 100644
index 0000000..dc8744b
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/gfx/mark_icon_mask.bmp
Binary files differ
diff --git a/pjsip-apps/src/symbian_ua_gui/gfx/qgn_menu_symbian_ua_gui.svg b/pjsip-apps/src/symbian_ua_gui/gfx/qgn_menu_symbian_ua_gui.svg
new file mode 100644
index 0000000..47da6d7
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/gfx/qgn_menu_symbian_ua_gui.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/pjsip-apps/src/symbian_ua_gui/group/ABLD.BAT b/pjsip-apps/src/symbian_ua_gui/group/ABLD.BAT
new file mode 100644
index 0000000..8ccf2ed
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/group/ABLD.BAT
@@ -0,0 +1,15 @@
+@ECHO OFF
+
+REM Bldmake-generated batch file - ABLD.BAT
+REM ** DO NOT EDIT **
+
+perl -S ABLD.PL "\project\pjproject-trunk\pjsip-apps\src\symbian_ua_gui\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/pjsip-apps/src/symbian_ua_gui/group/Icons_aif_scalable_dc.mk b/pjsip-apps/src/symbian_ua_gui/group/Icons_aif_scalable_dc.mk
new file mode 100644
index 0000000..8aa63c7
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/group/Icons_aif_scalable_dc.mk
@@ -0,0 +1,71 @@
+# ============================================================================
+#  Name	 : Icons_aif_scalable_dc.mk
+#  Part of  : symbian_ua_gui
+#
+#  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)\symbian_ua_gui_aif.mif
+HEADERDIR=$(EPOCROOT)epoc32\include
+HEADERFILENAME=$(HEADERDIR)\symbian_ua_gui_aif.mbg
+
+ICONDIR=..\gfx
+
+do_nothing :
+	@rem do_nothing
+
+MAKMAKE : do_nothing
+
+BLD : do_nothing
+
+CLEAN : do_nothing
+
+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 :	
+	mifconv $(ICONTARGETFILENAME) \
+		/H$(HEADERFILENAME) \
+		/c32,8 $(ICONDIR)\qgn_menu_symbian_ua_gui.svg
+		
+FREEZE : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES :
+	@echo $(ICONTARGETFILENAME)
+
+FINAL : do_nothing
+
diff --git a/pjsip-apps/src/symbian_ua_gui/group/bld.inf b/pjsip-apps/src/symbian_ua_gui/group/bld.inf
new file mode 100644
index 0000000..dcdef78
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/group/bld.inf
@@ -0,0 +1,12 @@
+
+PRJ_PLATFORMS
+WINSCW ARMV5 GCCE
+
+PRJ_EXPORTS
+
+PRJ_MMPFILES
+
+gnumakefile icons_aif_scalable_dc.mk
+
+
+symbian_ua_gui.mmp
diff --git a/pjsip-apps/src/symbian_ua_gui/group/symbian_ua_gui.mmp b/pjsip-apps/src/symbian_ua_gui/group/symbian_ua_gui.mmp
new file mode 100644
index 0000000..38aedf1
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/group/symbian_ua_gui.mmp
@@ -0,0 +1,60 @@
+TARGET			symbian_ua_gui.exe
+UID			   0x100039CE 0xEBD12EE4
+VENDORID	  	  0
+TARGETTYPE		exe
+EPOCSTACKSIZE	0x8000
+
+MACRO		PJ_M_I386=1
+MACRO		PJ_SYMBIAN=1
+
+SYSTEMINCLUDE	\epoc32\include \epoc32\include\variant \epoc32\include\ecom
+SYSTEMINCLUDE	\epoc32\include\libc
+SYSTEMINCLUDE	..\..\..\..\pjlib\include
+SYSTEMINCLUDE	..\..\..\..\pjlib-util\include
+SYSTEMINCLUDE	..\..\..\..\pjnath\include
+SYSTEMINCLUDE	..\..\..\..\pjmedia\include
+SYSTEMINCLUDE	..\..\..\..\pjsip\include
+
+USERINCLUDE	..\inc ..\data
+
+SOURCEPATH		..\data
+START RESOURCE	symbian_ua_gui.rss
+HEADER
+TARGETPATH resource\apps
+END //RESOURCE
+
+START RESOURCE	symbian_ua_gui_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
+
+STATICLIBRARY	pjsua_lib.lib pjsip_ua.lib
+STATICLIBRARY	pjsip_simple.lib pjsip.lib pjsdp.lib pjmedia.lib
+STATICLIBRARY	pjnath.lib pjlib_util.lib pjlib.lib
+STATICLIBRARY	symbian_audio.lib
+STATICLIBRARY	libgsmcodec.lib
+STATICLIBRARY	libspeexcodec.lib
+
+LIBRARY		charconv.lib estlib.lib 
+LIBRARY 	mediaclientaudiostream.lib
+LIBRARY 	mediaclientaudioinputstream.lib
+
+LANG 				01
+
+START BITMAP	symbian_ua_gui.mbm
+HEADER
+TARGETPATH		\resource\apps
+SOURCEPATH		..\gfx
+SOURCE	c12,1	list_icon.bmp list_icon_mask.bmp
+END
+
+SOURCEPATH		..\src
+SOURCE symbian_ua_guiContainerView.cpp symbian_ua_guiContainer.cpp symbian_ua_guiAppUi.cpp symbian_ua_guiDocument.cpp symbian_ua_guiApplication.cpp symbian_ua_guiSettingItemList.cpp Symbian_ua_guiSettingItemListSets.cpp symbian_ua_guiSettingItemListView.cpp
+SOURCE symbian_ua.cpp
+
+CAPABILITY	NetworkServices LocalServices ReadUserData WriteUserData UserEnvironment 
diff --git a/pjsip-apps/src/symbian_ua_gui/inc/Symbian_ua_guiSettingItemListSettings.h b/pjsip-apps/src/symbian_ua_gui/inc/Symbian_ua_guiSettingItemListSettings.h
new file mode 100644
index 0000000..c805f17
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/inc/Symbian_ua_guiSettingItemListSettings.h
@@ -0,0 +1,63 @@
+/*
+========================================================================
+ Name        : Symbian_ua_guiSettingItemListSettings.h
+ Author      : nanang
+ Copyright   : (c) PJSIP 2008
+ Description : 
+========================================================================
+*/
+#ifndef SYMBIAN_UA_GUISETTINGITEMLISTSETTINGS_H
+#define SYMBIAN_UA_GUISETTINGITEMLISTSETTINGS_H
+			
+// [[[ begin generated region: do not modify [Generated Includes]
+#include <e32std.h>
+// ]]] end generated region [Generated Includes]
+
+// [[[ begin generated region: do not modify [Generated Constants]
+const int KEd_registrarMaxLength = 255;
+const int KEd_userMaxLength = 255;
+const int KEd_passwordMaxLength = 32;
+const int KEd_stun_serverMaxLength = 255;
+// ]]] end generated region [Generated Constants]
+
+/**
+ * @class	TSymbian_ua_guiSettingItemListSettings Symbian_ua_guiSettingItemListSettings.h
+ */
+class TSymbian_ua_guiSettingItemListSettings
+	{
+public:
+	// construct and destroy
+	static TSymbian_ua_guiSettingItemListSettings* NewL();
+	void ConstructL();
+		
+private:
+	// constructor
+	TSymbian_ua_guiSettingItemListSettings();
+	// [[[ begin generated region: do not modify [Generated Accessors]
+public:
+	TDes& Ed_registrar();
+	void SetEd_registrar(const TDesC& aValue);
+	TDes& Ed_user();
+	void SetEd_user(const TDesC& aValue);
+	TDes& Ed_password();
+	void SetEd_password(const TDesC& aValue);
+	TBool& B_srtp();
+	void SetB_srtp(const TBool& aValue);
+	TBool& B_ice();
+	void SetB_ice(const TBool& aValue);
+	TDes& Ed_stun_server();
+	void SetEd_stun_server(const TDesC& aValue);
+	// ]]] end generated region [Generated Accessors]
+	
+	// [[[ begin generated region: do not modify [Generated Members]
+protected:
+	TBuf<KEd_registrarMaxLength> iEd_registrar;
+	TBuf<KEd_userMaxLength> iEd_user;
+	TBuf<KEd_passwordMaxLength> iEd_password;
+	TBool iB_srtp;
+	TBool iB_ice;
+	TBuf<KEd_stun_serverMaxLength> iEd_stun_server;
+	// ]]] end generated region [Generated Members]
+	
+	};
+#endif // SYMBIAN_UA_GUISETTINGITEMLISTSETTINGS_H
diff --git a/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua.h b/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua.h
new file mode 100644
index 0000000..4258d3c
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua.h
@@ -0,0 +1,47 @@
+/* $Id: ua.cpp 1793 2008-02-14 13:39:24Z bennylp $ */
+/* 
+ * Copyright (C) 2003-2007 Benny Prijono <benny@prijono.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ */
+
+#ifndef __SYMBIAN_UA_H__
+#define __SYMBIAN_UA_H__
+
+typedef struct 
+{
+    void (*on_info)(const wchar_t* buf);
+    void (*on_incoming_call)(const wchar_t* caller_disp, const wchar_t* caller_uri);
+    void (*on_call_end)(const wchar_t* reason);
+    void (*on_reg_state)(bool success);
+    void (*on_unreg_state)(bool success);
+} symbian_ua_info_cb_t;
+
+int symbian_ua_init();
+int symbian_ua_destroy();
+
+void symbian_ua_set_info_callback(const symbian_ua_info_cb_t *cb);
+
+int symbian_ua_set_account(const char *domain, const char *username, 
+			   const char *password,
+			   bool use_srtp, bool use_ice);
+
+bool symbian_ua_anycall();
+int symbian_ua_makecall(const char* dest_url);
+int symbian_ua_endcall();
+int symbian_ua_answercall();
+
+#endif
+
diff --git a/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_gui.hrh b/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_gui.hrh
new file mode 100644
index 0000000..72127e0
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_gui.hrh
@@ -0,0 +1,17 @@
+/*
+========================================================================
+ Name        : symbian_ua_gui.hrh
+ Author      : nanang
+ Copyright   : (c) PJSIP 2008
+ Description : 
+========================================================================
+*/
+enum Tsymbian_ua_guiViewUids
+	{
+	ESymbian_ua_guiContainerViewId = 1,
+	ESymbian_ua_guiSettingItemListViewId
+	};
+enum TSymbian_ua_guiApplicationControls
+	{
+	ESymbian_ua_guiApplicationDlg_wait_init = 1
+	};
diff --git a/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_gui.pan b/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_gui.pan
new file mode 100644
index 0000000..a06f56b
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_gui.pan
@@ -0,0 +1,18 @@
+
+#ifndef SYMBIAN_UA_GUI_PAN_H
+#define SYMBIAN_UA_GUI_PAN_H
+
+/** symbian_ua_gui application panic codes */
+enum Tsymbian_ua_guiPanics
+	{
+	Esymbian_ua_guiUi = 1
+	// add further panics here
+	};
+
+inline void Panic(Tsymbian_ua_guiPanics aReason)
+	{
+	_LIT(applicationName,"symbian_ua_gui");
+	User::Panic(applicationName, aReason);
+	}
+
+#endif // SYMBIAN_UA_GUI_PAN_H
diff --git a/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_guiAppUi.h b/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_guiAppUi.h
new file mode 100644
index 0000000..be27309
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_guiAppUi.h
@@ -0,0 +1,119 @@
+/*
+========================================================================
+ Name        : symbian_ua_guiAppUi.h
+ Author      : nanang
+ Copyright   : (c) PJSIP 2008
+ Description : 
+========================================================================
+*/
+#ifndef SYMBIAN_UA_GUIAPPUI_H
+#define SYMBIAN_UA_GUIAPPUI_H
+
+// [[[ begin generated region: do not modify [Generated Includes]
+#include <aknviewappui.h>
+#include <aknwaitdialog.h>
+// ]]] end generated region [Generated Includes]
+
+// [[[ begin generated region: do not modify [Generated Forward Declarations]
+class Csymbian_ua_guiContainerView;
+class Csymbian_ua_guiSettingItemListView;
+// ]]] end generated region [Generated Forward Declarations]
+
+/**
+ * @class	Csymbian_ua_guiAppUi symbian_ua_guiAppUi.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 Csymbian_ua_guiAppUi : public CAknViewAppUi, public CTimer
+	{
+public: 
+	// constructor and destructor
+	Csymbian_ua_guiAppUi();
+	virtual ~Csymbian_ua_guiAppUi();
+	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: 
+	void ExecuteDlg_wait_initLD( const TDesC* aOverrideText = NULL );
+	void RemoveDlg_wait_initL();
+	// ]]] end generated region [Generated Methods]
+	
+	// [[[ begin generated region: do not modify [Generated Instance Variables]
+private: 
+	CAknWaitDialog* iDlg_wait_init;
+	class CProgressDialogCallback;
+	CProgressDialogCallback* iDlg_wait_initCallback;
+	Csymbian_ua_guiContainerView* iSymbian_ua_guiContainerView;
+	Csymbian_ua_guiSettingItemListView* iSymbian_ua_guiSettingItemListView;
+	// ]]] end generated region [Generated Instance Variables]
+	
+	
+	// [[[ begin [User Handlers]
+protected: 
+	void HandleSymbian_ua_guiAppUiApplicationSpecificEventL( 
+			TInt aType, 
+			const TWsEvent& anEvent );
+	void HandleDlg_wait_initCanceledL( CAknProgressDialog* aDialog );
+	// ]]] end [User Handlers]
+	
+	
+	// [[[ begin [Overridden Methods]
+protected: 
+	void HandleApplicationSpecificEventL( 
+			TInt aType, 
+			const TWsEvent& anEvent );
+	// ]]] end [Overridden Methods]
+	
+	virtual void RunL();
+	
+	// [[[ begin [MProgressDialogCallback support]
+private: 
+	typedef void ( Csymbian_ua_guiAppUi::*ProgressDialogEventHandler )( 
+			CAknProgressDialog* aProgressDialog );
+	
+	/**
+	 * This is a helper class for progress/wait dialog callbacks. It routes the dialog's
+	 * cancel notification to the handler function for the cancel event.
+	 */
+	class CProgressDialogCallback : public CBase, public MProgressDialogCallback
+		{ 
+		public:
+			CProgressDialogCallback( 
+					Csymbian_ua_guiAppUi* aHandlerObj, 
+					CAknProgressDialog* aDialog, 
+					ProgressDialogEventHandler aHandler ) :
+				handlerObj( aHandlerObj ), dialog( aDialog ), handler( aHandler )
+				{}
+				
+			void DialogDismissedL( TInt aButtonId ) 
+				{
+				( handlerObj->*handler )( dialog );
+				}
+		private:
+			Csymbian_ua_guiAppUi* handlerObj;
+			CAknProgressDialog* dialog;
+			ProgressDialogEventHandler handler;
+		};
+		
+	// ]]] end [MProgressDialogCallback support]
+	
+	};
+
+#endif // SYMBIAN_UA_GUIAPPUI_H			
diff --git a/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_guiApplication.h b/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_guiApplication.h
new file mode 100644
index 0000000..26cb7b8
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_guiApplication.h
@@ -0,0 +1,35 @@
+/*
+========================================================================
+ Name        : symbian_ua_guiApplication.h
+ Author      : nanang
+ Copyright   : (c) PJSIP 2008
+ Description : 
+========================================================================
+*/
+#ifndef SYMBIAN_UA_GUIAPPLICATION_H
+#define SYMBIAN_UA_GUIAPPLICATION_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 KUidsymbian_ua_guiApplication = { 0xEBD12EE4 };
+// ]]] end generated region [Generated Constants]
+
+/**
+ *
+ * @class	Csymbian_ua_guiApplication symbian_ua_guiApplication.h
+ * @brief	A CAknApplication-derived class is required by the S60 application 
+ *          framework. It is subclassed to create the application's document 
+ *          object.
+ */
+class Csymbian_ua_guiApplication : public CAknApplication
+	{
+private:
+	TUid AppDllUid() const;
+	CApaDocument* CreateDocumentL();
+	
+	};
+			
+#endif // SYMBIAN_UA_GUIAPPLICATION_H		
diff --git a/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_guiContainer.h b/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_guiContainer.h
new file mode 100644
index 0000000..465496c
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_guiContainer.h
@@ -0,0 +1,113 @@
+/*
+========================================================================
+ Name        : symbian_ua_guiContainer.h
+ Author      : nanang
+ Copyright   : (c) PJSIP 2008
+ Description : 
+========================================================================
+*/
+#ifndef SYMBIAN_UA_GUICONTAINER_H
+#define SYMBIAN_UA_GUICONTAINER_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 CEikLabel;
+class CEikEdwin;
+// ]]] end generated region [Generated Forward Declarations]
+
+/**
+ * Container class for symbian_ua_guiContainer
+ * 
+ * @class	CSymbian_ua_guiContainer symbian_ua_guiContainer.h
+ */
+class CSymbian_ua_guiContainer : public CCoeControl
+	{
+public:
+	// constructors and destructor
+	CSymbian_ua_guiContainer();
+	static CSymbian_ua_guiContainer* NewL( 
+		const TRect& aRect, 
+		const CCoeControl* aParent, 
+		MEikCommandObserver* aCommandObserver );
+	static CSymbian_ua_guiContainer* NewLC( 
+		const TRect& aRect, 
+		const CCoeControl* aParent, 
+		MEikCommandObserver* aCommandObserver );
+	void ConstructL( 
+		const TRect& aRect, 
+		const CCoeControl* aParent, 
+		MEikCommandObserver* aCommandObserver );
+	virtual ~CSymbian_ua_guiContainer();
+
+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]
+	
+	// [[[ 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: 
+	CEikLabel* iLabel1;
+	CEikEdwin* iEd_url;
+	CEikEdwin* iEd_info;
+	// ]]] 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]
+		ELabel1,
+		EEd_url,
+		EEd_info,
+		
+		// ]]] end generated region [Generated Contents]
+		
+		// add any user-defined entries here...
+		
+		ELastControl
+		};
+	};
+				
+#endif // SYMBIAN_UA_GUICONTAINER_H
diff --git a/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_guiContainer.hrh b/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_guiContainer.hrh
new file mode 100644
index 0000000..1ad366f
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_guiContainer.hrh
@@ -0,0 +1,17 @@
+/*
+========================================================================
+ Name        : symbian_ua_guiContainer.hrh
+ Author      : nanang
+ Copyright   : (c) PJSIP 2008
+ Description : 
+========================================================================
+*/
+enum TSymbian_ua_guiContainerViewCommands
+	{
+	ESymbian_ua_guiContainerViewControlPaneRightId = 0x6000,
+	ESymbian_ua_guiContainerViewSettingMenuItemCommand
+	};
+enum TSymbian_ua_guiContainerViewControls
+	{
+	ESymbian_ua_guiContainerViewQry_accept_call = 1
+	};
diff --git a/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_guiContainerView.h b/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_guiContainerView.h
new file mode 100644
index 0000000..4c294c9
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_guiContainerView.h
@@ -0,0 +1,88 @@
+/*
+========================================================================
+ Name        : symbian_ua_guiContainerView.h
+ Author      : nanang
+ Copyright   : (c) PJSIP 2008
+ Description : 
+========================================================================
+*/
+#ifndef SYMBIAN_UA_GUICONTAINERVIEW_H
+#define SYMBIAN_UA_GUICONTAINERVIEW_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 Forward Declarations]
+class CSymbian_ua_guiContainer;
+// ]]] end generated region [Generated Forward Declarations]
+
+// [[[ begin generated region: do not modify [Generated Constants]
+// ]]] end generated region [Generated Constants]
+
+/**
+ * Avkon view class for symbian_ua_guiContainerView. It is register with the view server
+ * by the AppUi. It owns the container control.
+ * @class	Csymbian_ua_guiContainerView symbian_ua_guiContainerView.h
+ */
+class Csymbian_ua_guiContainerView : public CAknView
+	{
+public:
+	// constructors and destructor
+	Csymbian_ua_guiContainerView();
+	static Csymbian_ua_guiContainerView* NewL();
+	static Csymbian_ua_guiContainerView* NewLC();        
+	void ConstructL();
+	virtual ~Csymbian_ua_guiContainerView();
+
+public:
+	// from base class CAknView
+	TUid Id() const;
+	void HandleCommandL( TInt aCommand );
+	
+	void PutMessage(const TDesC &msg);
+
+protected:
+	// from base class CAknView
+	void DoActivateL(
+		const TVwsViewId& aPrevViewId,
+		TUid aCustomMessageId,
+		const TDesC8& aCustomMessage );
+	void DoDeactivate();
+	void HandleStatusPaneSizeChange();
+	
+private:
+	void SetupStatusPaneL();
+	void CleanupStatusPane();
+	// [[[ begin generated region: do not modify [Generated Methods]
+public: 
+	static void RunNote_errorL( const TDesC* aOverrideText = NULL );
+	static void RunNote_infoL( const TDesC* aOverrideText = NULL );
+	static void RunNote_warningL( const TDesC* aOverrideText = NULL );
+	static TInt RunQry_accept_callL( const TDesC* aOverrideText = NULL );
+	// ]]] end generated region [Generated Methods]
+	
+	
+	// [[[ begin [Overridden Methods]
+protected: 
+	// ]]] end [Overridden Methods]
+	
+	
+	// [[[ begin [User Handlers]
+protected: 
+	TBool CallSoftKeyPressedL( TInt aCommand );
+	TBool HandleSettingMenuItemSelectedL( TInt aCommand );
+	// ]]] end [User Handlers]
+	
+	// [[[ begin generated region: do not modify [Generated Instance Variables]
+private: 
+	CSymbian_ua_guiContainer* iSymbian_ua_guiContainer;
+	// ]]] end generated region [Generated Instance Variables]
+	
+	};
+
+#endif // SYMBIAN_UA_GUICONTAINERVIEW_H			
diff --git a/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_guiDocument.h b/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_guiDocument.h
new file mode 100644
index 0000000..8301231
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_guiDocument.h
@@ -0,0 +1,36 @@
+/*
+========================================================================
+ Name        : symbian_ua_guiDocument.h
+ Author      : nanang
+ Copyright   : (c) PJSIP 2008
+ Description : 
+========================================================================
+*/
+#ifndef SYMBIAN_UA_GUIDOCUMENT_H
+#define SYMBIAN_UA_GUIDOCUMENT_H
+
+#include <akndoc.h>
+		
+class CEikAppUi;
+
+/**
+* @class	Csymbian_ua_guiDocument symbian_ua_guiDocument.h
+* @brief	A CAknDocument-derived class is required by the S60 application 
+*           framework. It is responsible for creating the AppUi object. 
+*/
+class Csymbian_ua_guiDocument : public CAknDocument
+	{
+public: 
+	// constructor
+	static Csymbian_ua_guiDocument* NewL( CEikApplication& aApp );
+
+private: 
+	// constructors
+	Csymbian_ua_guiDocument( CEikApplication& aApp );
+	void ConstructL();
+	
+public: 
+	// from base class CEikDocument
+	CEikAppUi* CreateAppUiL();
+	};
+#endif // SYMBIAN_UA_GUIDOCUMENT_H
diff --git a/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_guiSettingItemList.h b/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_guiSettingItemList.h
new file mode 100644
index 0000000..bdaa089
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_guiSettingItemList.h
@@ -0,0 +1,87 @@
+/*
+========================================================================
+ Name        : symbian_ua_guiSettingItemList.h
+ Author      : nanang
+ Copyright   : (c) PJSIP 2008
+ Description : 
+========================================================================
+*/
+#ifndef SYMBIAN_UA_GUISETTINGITEMLIST_H
+#define SYMBIAN_UA_GUISETTINGITEMLIST_H
+
+// [[[ begin generated region: do not modify [Generated Includes]
+#include <aknsettingitemlist.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 TSymbian_ua_guiSettingItemListSettings;
+// ]]] end generated region [Generated Forward Declarations]
+
+/**
+ * @class	CSymbian_ua_guiSettingItemList symbian_ua_guiSettingItemList.h
+ */
+class CSymbian_ua_guiSettingItemList : public CAknSettingItemList
+	{
+public: // constructors and destructor
+
+	CSymbian_ua_guiSettingItemList( 
+			TSymbian_ua_guiSettingItemListSettings& settings, 
+			MEikCommandObserver* aCommandObserver );
+	virtual ~CSymbian_ua_guiSettingItemList();
+
+public:
+
+	// from CCoeControl
+	void HandleResourceChange( TInt aType );
+
+	// overrides of CAknSettingItemList
+	CAknSettingItem* CreateSettingItemL( TInt id );
+	void EditItemL( TInt aIndex, TBool aCalledFromMenu );
+	TKeyResponse OfferKeyEventL( 
+			const TKeyEvent& aKeyEvent, 
+			TEventCode aType );
+
+public:
+	// utility function for menu
+	void ChangeSelectedItemL();
+
+	void LoadSettingValuesL();
+	void SaveSettingValuesL();
+		
+private:
+	// override of CAknSettingItemList
+	void SizeChanged();
+
+private:
+	// current settings values
+	TSymbian_ua_guiSettingItemListSettings& iSettings;
+	MEikCommandObserver* iCommandObserver;
+	// [[[ begin generated region: do not modify [Generated Methods]
+public: 
+	// ]]] end generated region [Generated Methods]
+	
+	// [[[ 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: 
+	// ]]] end generated region [Generated Instance Variables]
+	
+	
+	// [[[ begin [Overridden Methods]
+protected: 
+	// ]]] end [Overridden Methods]
+	
+	
+	// [[[ begin [User Handlers]
+protected: 
+	// ]]] end [User Handlers]
+	
+	};
+#endif // SYMBIAN_UA_GUISETTINGITEMLIST_H
diff --git a/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_guiSettingItemList.hrh b/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_guiSettingItemList.hrh
new file mode 100644
index 0000000..e9b4de4
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_guiSettingItemList.hrh
@@ -0,0 +1,22 @@
+/*
+========================================================================
+ Name        : symbian_ua_guiSettingItemList.hrh
+ Author      : nanang
+ Copyright   : (c) PJSIP 2008
+ Description : 
+========================================================================
+*/
+enum TSymbian_ua_guiSettingItemListViewCommands
+	{
+	ESymbian_ua_guiSettingItemListViewMenuItem1Command = 0x6000,
+	ESymbian_ua_guiSettingItemListViewSave_SettingsMenuItemCommand
+	};
+enum TSymbian_ua_guiSettingItemListViewSave_SettingsItems
+	{
+	ESymbian_ua_guiSettingItemListViewEd_registrar = 1,
+	ESymbian_ua_guiSettingItemListViewEd_user,
+	ESymbian_ua_guiSettingItemListViewEd_password,
+	ESymbian_ua_guiSettingItemListViewEd_stun_server,
+	ESymbian_ua_guiSettingItemListViewB_srtp,
+	ESymbian_ua_guiSettingItemListViewB_ice
+	};
diff --git a/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_guiSettingItemListView.h b/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_guiSettingItemListView.h
new file mode 100644
index 0000000..18b3f2b
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/inc/symbian_ua_guiSettingItemListView.h
@@ -0,0 +1,85 @@
+/*
+========================================================================
+ Name        : symbian_ua_guiSettingItemListView.h
+ Author      : nanang
+ Copyright   : (c) PJSIP 2008
+ Description : 
+========================================================================
+*/
+#ifndef SYMBIAN_UA_GUISETTINGITEMLISTVIEW_H
+#define SYMBIAN_UA_GUISETTINGITEMLISTVIEW_H
+
+// [[[ begin generated region: do not modify [Generated Includes]
+#include <aknview.h>
+#include "Symbian_ua_guiSettingItemListSettings.h"
+// ]]] end generated region [Generated Includes]
+
+
+// [[[ begin [Event Handler Includes]
+// ]]] end [Event Handler Includes]
+
+// [[[ begin generated region: do not modify [Generated Forward Declarations]
+class CSymbian_ua_guiSettingItemList;
+// ]]] end generated region [Generated Forward Declarations]
+
+// [[[ begin generated region: do not modify [Generated Constants]
+// ]]] end generated region [Generated Constants]
+
+/**
+ * Avkon view class for symbian_ua_guiSettingItemListView. It is register with the view server
+ * by the AppUi. It owns the container control.
+ * @class	Csymbian_ua_guiSettingItemListView symbian_ua_guiSettingItemListView.h
+ */
+class Csymbian_ua_guiSettingItemListView : public CAknView
+	{
+public:
+	// constructors and destructor
+	Csymbian_ua_guiSettingItemListView();
+	static Csymbian_ua_guiSettingItemListView* NewL();
+	static Csymbian_ua_guiSettingItemListView* NewLC();        
+	void ConstructL();
+	virtual ~Csymbian_ua_guiSettingItemListView();
+
+public:
+	// from base class CAknView
+	TUid Id() const;
+	void HandleCommandL( TInt aCommand );
+
+protected:
+	// from base class CAknView
+	void DoActivateL(
+		const TVwsViewId& aPrevViewId,
+		TUid aCustomMessageId,
+		const TDesC8& aCustomMessage );
+	void DoDeactivate();
+	void HandleStatusPaneSizeChange();
+	
+private:
+	void SetupStatusPaneL();
+	void CleanupStatusPane();
+	// [[[ begin generated region: do not modify [Generated Methods]
+public: 
+	// ]]] end generated region [Generated Methods]
+	
+	
+	// [[[ begin [Overridden Methods]
+protected: 
+	// ]]] end [Overridden Methods]
+	
+	
+	// [[[ begin [User Handlers]
+protected: 
+	TBool HandleChangeSelectedSettingItemL( TInt aCommand );
+	TBool HandleControlPaneRightSoftKeyPressedL( TInt aCommand );
+	TBool HandleCancelMenuItemSelectedL( TInt aCommand );
+	// ]]] end [User Handlers]
+	
+	// [[[ begin generated region: do not modify [Generated Instance Variables]
+private: 
+	CSymbian_ua_guiSettingItemList* iSymbian_ua_guiSettingItemList;
+	TSymbian_ua_guiSettingItemListSettings* iSettings;
+	// ]]] end generated region [Generated Instance Variables]
+	
+	};
+
+#endif // SYMBIAN_UA_GUISETTINGITEMLISTVIEW_H			
diff --git a/pjsip-apps/src/symbian_ua_gui/sis/symbian_ua_gui.pkg b/pjsip-apps/src/symbian_ua_gui/sis/symbian_ua_gui.pkg
new file mode 100644
index 0000000..b460505
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/sis/symbian_ua_gui.pkg
@@ -0,0 +1,36 @@
+; symbian_ua_gui.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
+#{"symbian_ua_gui"},(0xEBD12EE4),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)\symbian_ua_gui.exe"		-"!:\sys\bin\symbian_ua_gui.exe"
+"$(EPOCROOT)Epoc32\data\z\resource\apps\symbian_ua_gui.r01"		-"!:\resource\apps\symbian_ua_gui.r01"
+"$(EPOCROOT)Epoc32\data\z\private\10003a3f\apps\symbian_ua_gui_reg.r01"	-"!:\private\10003a3f\import\apps\symbian_ua_gui_reg.r01"
+"$(EPOCROOT)epoc32\data\z\resource\apps\symbian_ua_gui_aif.mif" -"!:\resource\apps\symbian_ua_gui_aif.mif"
+"$(EPOCROOT)epoc32\data\z\resource\apps\symbian_ua_gui.mbm" -"!:\resource\apps\symbian_ua_gui.mbm"
+; Add any installation notes if applicable
+;"symbian_ua_gui.txt"					  -"!:\private\0xEBD12EE4\symbian_ua_gui.txt"
+
diff --git a/pjsip-apps/src/symbian_ua_gui/sis/symbian_ua_gui.txt b/pjsip-apps/src/symbian_ua_gui/sis/symbian_ua_gui.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/sis/symbian_ua_gui.txt
diff --git a/pjsip-apps/src/symbian_ua_gui/src/Symbian_ua_guiSettingItemListSets.cpp b/pjsip-apps/src/symbian_ua_gui/src/Symbian_ua_guiSettingItemListSets.cpp
new file mode 100644
index 0000000..af53f18
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/src/Symbian_ua_guiSettingItemListSets.cpp
@@ -0,0 +1,144 @@
+/*
+========================================================================
+ Name        : Symbian_ua_guiSettingItemListSettings.cpp
+ Author      : nanang
+ Copyright   : (c) PJSIP 2008
+ Description : 
+========================================================================
+*/
+/**
+ *	Generated helper class which manages the settings contained 
+ *	in 'symbian_ua_guiSettingItemList'.  Each CAknSettingItem maintains
+ *	a reference to data in this class so that changes in the setting
+ *	item list can be synchronized with this storage.
+ */
+ 
+// [[[ begin generated region: do not modify [Generated Includes]
+#include <e32base.h>
+#include <stringloader.h>
+#include <barsread.h>
+#include <symbian_ua_gui.rsg>
+#include "Symbian_ua_guiSettingItemListSettings.h"
+// ]]] end generated region [Generated Includes]
+
+/**
+ * C/C++ constructor for settings data, cannot throw
+ */
+TSymbian_ua_guiSettingItemListSettings::TSymbian_ua_guiSettingItemListSettings()
+	{
+	}
+
+/**
+ * Two-phase constructor for settings data
+ */
+TSymbian_ua_guiSettingItemListSettings* TSymbian_ua_guiSettingItemListSettings::NewL()
+	{
+	TSymbian_ua_guiSettingItemListSettings* data = new( ELeave ) TSymbian_ua_guiSettingItemListSettings;
+	CleanupStack::PushL( data );
+	data->ConstructL();
+	CleanupStack::Pop( data );
+	return data;
+	}
+	
+/**
+ *	Second phase for initializing settings data
+ */
+void TSymbian_ua_guiSettingItemListSettings::ConstructL()
+	{
+	// [[[ begin generated region: do not modify [Generated Initializers]
+		{
+		HBufC* text = StringLoader::LoadLC( R_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_ED_REGISTRAR );
+		SetEd_registrar( text->Des() );
+		CleanupStack::PopAndDestroy( text );
+		}
+		{
+		HBufC* text = StringLoader::LoadLC( R_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_ED_USER );
+		SetEd_user( text->Des() );
+		CleanupStack::PopAndDestroy( text );
+		}
+	SetB_srtp( 0 );
+	SetB_ice( 0 );
+		{
+		HBufC* text = StringLoader::LoadLC( R_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_ED_STUN_SERVER );
+		SetEd_stun_server( text->Des() );
+		CleanupStack::PopAndDestroy( text );
+		}
+	// ]]] end generated region [Generated Initializers]
+	
+	}
+	
+// [[[ begin generated region: do not modify [Generated Contents]
+TDes& TSymbian_ua_guiSettingItemListSettings::Ed_registrar()
+	{
+	return iEd_registrar;
+	}
+
+void TSymbian_ua_guiSettingItemListSettings::SetEd_registrar(const TDesC& aValue)
+	{
+	if ( aValue.Length() < KEd_registrarMaxLength)
+		iEd_registrar.Copy( aValue );
+	else
+		iEd_registrar.Copy( aValue.Ptr(), KEd_registrarMaxLength);
+	}
+
+TDes& TSymbian_ua_guiSettingItemListSettings::Ed_user()
+	{
+	return iEd_user;
+	}
+
+void TSymbian_ua_guiSettingItemListSettings::SetEd_user(const TDesC& aValue)
+	{
+	if ( aValue.Length() < KEd_userMaxLength)
+		iEd_user.Copy( aValue );
+	else
+		iEd_user.Copy( aValue.Ptr(), KEd_userMaxLength);
+	}
+
+TDes& TSymbian_ua_guiSettingItemListSettings::Ed_password()
+	{
+	return iEd_password;
+	}
+
+void TSymbian_ua_guiSettingItemListSettings::SetEd_password(const TDesC& aValue)
+	{
+	if ( aValue.Length() < KEd_passwordMaxLength)
+		iEd_password.Copy( aValue );
+	else
+		iEd_password.Copy( aValue.Ptr(), KEd_passwordMaxLength);
+	}
+
+TBool& TSymbian_ua_guiSettingItemListSettings::B_srtp()
+	{
+	return iB_srtp;
+	}
+
+void TSymbian_ua_guiSettingItemListSettings::SetB_srtp(const TBool& aValue)
+	{
+	iB_srtp = aValue;
+	}
+
+TBool& TSymbian_ua_guiSettingItemListSettings::B_ice()
+	{
+	return iB_ice;
+	}
+
+void TSymbian_ua_guiSettingItemListSettings::SetB_ice(const TBool& aValue)
+	{
+	iB_ice = aValue;
+	}
+
+TDes& TSymbian_ua_guiSettingItemListSettings::Ed_stun_server()
+	{
+	return iEd_stun_server;
+	}
+
+void TSymbian_ua_guiSettingItemListSettings::SetEd_stun_server(const TDesC& aValue)
+	{
+	if ( aValue.Length() < KEd_stun_serverMaxLength)
+		iEd_stun_server.Copy( aValue );
+	else
+		iEd_stun_server.Copy( aValue.Ptr(), KEd_stun_serverMaxLength);
+	}
+
+// ]]] end generated region [Generated Contents]
+
diff --git a/pjsip-apps/src/symbian_ua_gui/src/symbian_ua.cpp b/pjsip-apps/src/symbian_ua_gui/src/symbian_ua.cpp
new file mode 100644
index 0000000..ac29a6a
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/src/symbian_ua.cpp
@@ -0,0 +1,504 @@
+/* $Id: ua.cpp 1793 2008-02-14 13:39:24Z bennylp $ */
+/* 
+ * Copyright (C) 2003-2007 Benny Prijono <benny@prijono.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ */
+#include <pjsua-lib/pjsua.h>
+#include <pjsua-lib/pjsua_internal.h>
+#include <es_sock.h>
+#include "symbian_ua.h"
+
+#define THIS_FILE	"symbian_ua.cpp"
+#define LOG_LEVEL	3
+
+#define SIP_PORT	5060
+#define USE_ICE		0
+
+static RSocketServ aSocketServer;
+static RConnection aConn;
+
+static pjsua_acc_id g_acc_id = PJSUA_INVALID_ID;
+static pjsua_call_id g_call_id = PJSUA_INVALID_ID;
+static pjsua_buddy_id g_buddy_id = PJSUA_INVALID_ID;
+
+static symbian_ua_info_cb_t g_cb =  {NULL, NULL, NULL, NULL, NULL};
+
+static void log_writer(int level, const char *buf, int len)
+{
+    static wchar_t buf16[PJ_LOG_MAX_SIZE];
+
+    PJ_UNUSED_ARG(level);
+    
+    if (!g_cb.on_info)
+	return;
+
+    pj_ansi_to_unicode(buf, len, buf16, PJ_ARRAY_SIZE(buf16));
+    g_cb.on_info(buf16);
+}
+
+static void on_reg_state(pjsua_acc_id acc_id)
+{
+    pjsua_acc_info acc_info;
+    pj_status_t status;
+
+    status = pjsua_acc_get_info(acc_id, &acc_info);
+    if (status != PJ_SUCCESS)
+	return;
+
+    if (acc_info.status == 200) {
+	if (acc_info.expires) {
+	    PJ_LOG(3,(THIS_FILE, "Registration success!"));
+	    if (g_cb.on_reg_state) g_cb.on_reg_state(true);
+	} else {
+	    PJ_LOG(3,(THIS_FILE, "Unregistration success!"));
+	    if (g_cb.on_unreg_state) g_cb.on_unreg_state(true);
+	}
+    } else {
+	if (acc_info.expires) {
+	    PJ_LOG(3,(THIS_FILE, "Registration failed!"));
+	    if (g_cb.on_reg_state) g_cb.on_reg_state(false);
+	} else {
+	    PJ_LOG(3,(THIS_FILE, "Unregistration failed!"));
+	    if (g_cb.on_unreg_state) g_cb.on_unreg_state(false);
+	}
+    }
+}
+
+/* Callback called by the library upon receiving incoming call */
+static void on_incoming_call(pjsua_acc_id acc_id, pjsua_call_id call_id,
+			     pjsip_rx_data *rdata)
+{
+    pjsua_call_info ci;
+
+    PJ_UNUSED_ARG(acc_id);
+    PJ_UNUSED_ARG(rdata);
+
+    if (g_call_id != PJSUA_INVALID_ID) {
+    	pjsua_call_answer(call_id, PJSIP_SC_BUSY_HERE, NULL, NULL);
+    	return;
+    }
+    
+    pjsua_call_get_info(call_id, &ci);
+
+    PJ_LOG(3,(THIS_FILE, "Incoming call from %.*s!!",
+			 (int)ci.remote_info.slen,
+			 ci.remote_info.ptr));
+
+    g_call_id = call_id;
+    
+    /* Automatically answer incoming calls with 180/Ringing */
+    pjsua_call_answer(call_id, 180, NULL, NULL);
+
+    if (g_cb.on_incoming_call) {
+	static wchar_t disp[256];
+	static wchar_t uri[PJSIP_MAX_URL_SIZE];
+
+	pj_ansi_to_unicode(ci.remote_info.ptr, ci.remote_info.slen, 
+	    disp, PJ_ARRAY_SIZE(disp));
+	pj_ansi_to_unicode(ci.remote_contact.ptr, ci.remote_contact.slen, 
+	    uri, PJ_ARRAY_SIZE(uri));
+
+	g_cb.on_incoming_call(disp, uri);
+    }
+}
+
+/* Callback called by the library when call's state has changed */
+static void on_call_state(pjsua_call_id call_id, pjsip_event *e)
+{
+    pjsua_call_info ci;
+
+    PJ_UNUSED_ARG(e);
+
+    pjsua_call_get_info(call_id, &ci);
+    
+    if (ci.state == PJSIP_INV_STATE_DISCONNECTED) {
+    	if (call_id == g_call_id)
+    	    g_call_id = PJSUA_INVALID_ID;
+	if (g_cb.on_call_end) {
+	    static wchar_t reason[256];
+	    pj_ansi_to_unicode(ci.last_status_text.ptr, ci.last_status_text.slen, 
+		    reason, PJ_ARRAY_SIZE(reason));
+	    g_cb.on_call_end(reason);
+	}
+
+    } else if (ci.state != PJSIP_INV_STATE_INCOMING) {
+    	if (g_call_id == PJSUA_INVALID_ID)
+    	    g_call_id = call_id;
+    }
+    
+    PJ_LOG(3,(THIS_FILE, "Call %d state=%.*s", call_id,
+			 (int)ci.state_text.slen,
+			 ci.state_text.ptr));
+}
+
+/* Callback called by the library when call's media state has changed */
+static void on_call_media_state(pjsua_call_id call_id)
+{
+    pjsua_call_info ci;
+
+    pjsua_call_get_info(call_id, &ci);
+
+    if (ci.media_status == PJSUA_CALL_MEDIA_ACTIVE) {
+	// When media is active, connect call to sound device.
+	pjsua_conf_connect(ci.conf_slot, 0);
+	pjsua_conf_connect(0, ci.conf_slot);
+    }
+}
+
+
+/* Handler on buddy state changed. */
+static void on_buddy_state(pjsua_buddy_id buddy_id)
+{
+    pjsua_buddy_info info;
+    pjsua_buddy_get_info(buddy_id, &info);
+
+    PJ_LOG(3,(THIS_FILE, "%.*s status is %.*s",
+	      (int)info.uri.slen,
+	      info.uri.ptr,
+	      (int)info.status_text.slen,
+	      info.status_text.ptr));
+}
+
+
+/* Incoming IM message (i.e. MESSAGE request)!  */
+static void on_pager(pjsua_call_id call_id, const pj_str_t *from, 
+		     const pj_str_t *to, const pj_str_t *contact,
+		     const pj_str_t *mime_type, const pj_str_t *text)
+{
+    /* Note: call index may be -1 */
+    PJ_UNUSED_ARG(call_id);
+    PJ_UNUSED_ARG(to);
+    PJ_UNUSED_ARG(contact);
+    PJ_UNUSED_ARG(mime_type);
+
+    PJ_LOG(3,(THIS_FILE,"MESSAGE from %.*s: %.*s",
+	      (int)from->slen, from->ptr,
+	      (int)text->slen, text->ptr));
+}
+
+
+/* Received typing indication  */
+static void on_typing(pjsua_call_id call_id, const pj_str_t *from,
+		      const pj_str_t *to, const pj_str_t *contact,
+		      pj_bool_t is_typing)
+{
+    PJ_UNUSED_ARG(call_id);
+    PJ_UNUSED_ARG(to);
+    PJ_UNUSED_ARG(contact);
+
+    PJ_LOG(3,(THIS_FILE, "IM indication: %.*s %s",
+	      (int)from->slen, from->ptr,
+	      (is_typing?"is typing..":"has stopped typing")));
+}
+
+
+/* Call transfer request status. */
+static void on_call_transfer_status(pjsua_call_id call_id,
+				    int status_code,
+				    const pj_str_t *status_text,
+				    pj_bool_t final,
+				    pj_bool_t *p_cont)
+{
+    PJ_LOG(3,(THIS_FILE, "Call %d: transfer status=%d (%.*s) %s",
+	      call_id, status_code,
+	      (int)status_text->slen, status_text->ptr,
+	      (final ? "[final]" : "")));
+
+    if (status_code/100 == 2) {
+	PJ_LOG(3,(THIS_FILE, 
+	          "Call %d: call transfered successfully, disconnecting call",
+		  call_id));
+	pjsua_call_hangup(call_id, PJSIP_SC_GONE, NULL, NULL);
+	*p_cont = PJ_FALSE;
+    }
+}
+
+
+/* NAT detection result */
+static void on_nat_detect(const pj_stun_nat_detect_result *res) 
+{
+    if (res->status != PJ_SUCCESS) {
+	pjsua_perror(THIS_FILE, "NAT detection failed", res->status);
+    } else {
+	PJ_LOG(3, (THIS_FILE, "NAT detected as %s", res->nat_type_name));
+    }    
+}
+
+/* Notification that call is being replaced. */
+static void on_call_replaced(pjsua_call_id old_call_id,
+			     pjsua_call_id new_call_id)
+{
+    pjsua_call_info old_ci, new_ci;
+
+    pjsua_call_get_info(old_call_id, &old_ci);
+    pjsua_call_get_info(new_call_id, &new_ci);
+
+    PJ_LOG(3,(THIS_FILE, "Call %d with %.*s is being replaced by "
+			 "call %d with %.*s",
+			 old_call_id, 
+			 (int)old_ci.remote_info.slen, old_ci.remote_info.ptr,
+			 new_call_id,
+			 (int)new_ci.remote_info.slen, new_ci.remote_info.ptr));
+}
+
+int symbian_ua_init()
+{
+    TInt err;
+    pj_symbianos_params sym_params;
+    pj_status_t status;
+    
+    // Initialize RSocketServ
+    if ((err=aSocketServer.Connect()) != 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);
+    }
+    
+    // Set Symbian OS parameters in pjlib.
+    // This must be done before pj_init() is called.
+    pj_bzero(&sym_params, sizeof(sym_params));
+    sym_params.rsocketserv = &aSocketServer;
+    sym_params.rconnection = &aConn;
+    pj_symbianos_set_params(&sym_params);
+
+    /* Redirect log before pjsua_init() */
+    pj_log_set_log_func(&log_writer);
+    
+    /* Set log level */
+    pj_log_set_level(LOG_LEVEL);
+
+    /* Create pjsua first! */
+    status = pjsua_create();
+    if (status != PJ_SUCCESS) {
+    	pjsua_perror(THIS_FILE, "pjsua_create() error", status);
+    	return status;
+    }
+
+    /* Init pjsua */
+    pjsua_config cfg;
+
+    pjsua_config_default(&cfg);
+    cfg.max_calls = 2;
+    cfg.thread_cnt = 0; // Disable threading on Symbian
+    //cfg.use_srtp = 0;
+    //cfg.srtp_secure_signaling = 0;
+
+    cfg.cb.on_incoming_call = &on_incoming_call;
+    cfg.cb.on_call_media_state = &on_call_media_state;
+    cfg.cb.on_call_state = &on_call_state;
+    cfg.cb.on_buddy_state = &on_buddy_state;
+    cfg.cb.on_pager = &on_pager;
+    cfg.cb.on_typing = &on_typing;
+    cfg.cb.on_call_transfer_status = &on_call_transfer_status;
+    cfg.cb.on_call_replaced = &on_call_replaced;
+    cfg.cb.on_nat_detect = &on_nat_detect;
+    cfg.cb.on_reg_state = &on_reg_state;
+
+    pjsua_media_config med_cfg;
+
+    pjsua_media_config_default(&med_cfg);
+    med_cfg.thread_cnt = 0; // Disable threading on Symbian
+    med_cfg.has_ioqueue = PJ_FALSE;
+    med_cfg.clock_rate = 8000;
+    med_cfg.audio_frame_ptime = 40;
+    med_cfg.ec_tail_len = 0;
+    med_cfg.enable_ice = USE_ICE;
+
+    pjsua_logging_config log_cfg;
+
+    pjsua_logging_config_default(&log_cfg);
+    log_cfg.console_level = LOG_LEVEL;
+    log_cfg.cb = &log_writer;
+    log_cfg.decor = 0;
+
+    status = pjsua_init(&cfg, &log_cfg, &med_cfg);
+    if (status != PJ_SUCCESS) {
+	    pjsua_perror(THIS_FILE, "pjsua_init() error", status);
+	    pjsua_destroy();
+	    return status;
+    }
+
+    /* Add UDP transport. */
+    pjsua_transport_config tcfg;
+    pjsua_transport_id tid;
+
+    pjsua_transport_config_default(&tcfg);
+    tcfg.port = SIP_PORT;
+    status = pjsua_transport_create(PJSIP_TRANSPORT_UDP, &tcfg, &tid);
+    if (status != PJ_SUCCESS) {
+	    pjsua_perror(THIS_FILE, "Error creating transport", status);
+	    pjsua_destroy();
+	    return status;
+    }
+
+    /* Add account for the transport */
+    pjsua_acc_add_local(tid, PJ_TRUE, &g_acc_id);
+
+    /* Initialization is done, now start pjsua */
+    status = pjsua_start();
+    if (status != PJ_SUCCESS) {
+    	pjsua_perror(THIS_FILE, "Error starting pjsua", status);
+    	pjsua_destroy();
+    	return status;
+    }
+
+    /* Adjust Speex priority and enable only the narrowband */
+    {
+        pj_str_t codec_id = pj_str("speex/8000");
+        pjmedia_codec_mgr_set_codec_priority( 
+        	pjmedia_endpt_get_codec_mgr(pjsua_var.med_endpt),
+        	&codec_id, PJMEDIA_CODEC_PRIO_NORMAL+1);
+
+        codec_id = pj_str("speex/16000");
+        pjmedia_codec_mgr_set_codec_priority( 
+        	pjmedia_endpt_get_codec_mgr(pjsua_var.med_endpt),
+        	&codec_id, PJMEDIA_CODEC_PRIO_DISABLED);
+
+        codec_id = pj_str("speex/32000");
+        pjmedia_codec_mgr_set_codec_priority( 
+        	pjmedia_endpt_get_codec_mgr(pjsua_var.med_endpt),
+        	&codec_id, PJMEDIA_CODEC_PRIO_DISABLED);
+    }
+
+    return PJ_SUCCESS;
+}
+
+
+int symbian_ua_destroy()
+{
+    // Shutdown pjsua
+    pjsua_destroy();
+    
+    // Close connection and socket server
+    aConn.Close();
+    aSocketServer.Close();
+
+    return PJ_SUCCESS;
+}
+
+void symbian_ua_set_info_callback(const symbian_ua_info_cb_t *cb)
+{
+    if (cb)
+	g_cb = *cb;
+    else
+	pj_bzero(&g_cb, sizeof(g_cb));
+}
+
+int symbian_ua_set_account(const char *domain, const char *username, 
+			   const char *password,
+			   bool use_srtp, bool use_ice)
+{
+    pj_status_t status;
+
+    PJ_ASSERT_RETURN(username && password && domain, PJ_EINVAL);
+    PJ_UNUSED_ARG(use_srtp);
+    PJ_UNUSED_ARG(use_ice);
+
+    if (domain[0] == 0) {
+	    pjsua_acc_info acc_info;
+	    pj_status_t status;
+
+	    status = pjsua_acc_get_info(g_acc_id, &acc_info);
+	    if (status != PJ_SUCCESS)
+		return status;
+
+	    if (acc_info.status == 200) {
+			PJ_LOG(3,(THIS_FILE, "Unregistering.."));
+			pjsua_acc_set_registration(g_acc_id, PJ_FALSE);
+			g_acc_id = 0;
+	    }
+	    return PJ_SUCCESS;
+    }
+
+    if (pjsua_acc_get_count() > 1) {
+	status = pjsua_acc_del(g_acc_id);
+	if (status != PJ_SUCCESS) {
+	    pjsua_perror(THIS_FILE, "Error removing account", status);
+	    return status;
+	}
+	g_acc_id = 0;
+    }
+
+    pjsua_acc_config cfg;
+    char tmp_id[PJSIP_MAX_URL_SIZE];
+    char tmp_reg_uri[PJSIP_MAX_URL_SIZE];
+
+    if (!pj_ansi_strnicmp(domain, "sip:", 4)) {
+	domain += 4;
+    }
+
+    pjsua_acc_config_default(&cfg);
+    pj_ansi_sprintf(tmp_id, "sip:%s@%s", username, domain);
+    cfg.id = pj_str(tmp_id);
+    pj_ansi_sprintf(tmp_reg_uri, "sip:%s", domain);
+    cfg.reg_uri = pj_str(tmp_reg_uri);
+    cfg.cred_count = 1;
+    cfg.cred_info[0].realm = pj_str("*");
+    cfg.cred_info[0].scheme = pj_str("digest");
+    cfg.cred_info[0].username = pj_str((char*)username);
+    cfg.cred_info[0].data_type = PJSIP_CRED_DATA_PLAIN_PASSWD;
+    cfg.cred_info[0].data = pj_str((char*)password);
+
+    status = pjsua_acc_add(&cfg, PJ_TRUE, &g_acc_id);
+    if (status != PJ_SUCCESS) {
+	    pjsua_perror(THIS_FILE, "Error setting account", status);
+	    pjsua_destroy();
+	    return status;
+    }
+
+    return PJ_SUCCESS;
+}
+
+int symbian_ua_makecall(const char* dest_url)
+{
+    if (pjsua_verify_sip_url(dest_url) == PJ_SUCCESS) {
+	    pj_str_t dst = pj_str((char*)dest_url);
+	    pjsua_call_make_call(g_acc_id, &dst, 0, NULL,
+				 NULL, &g_call_id);
+
+	    return PJ_SUCCESS;
+    }
+
+    return PJ_EINVAL;
+}
+
+int symbian_ua_endcall()
+{
+    pjsua_call_hangup_all();
+
+    return PJ_SUCCESS;
+}
+
+bool symbian_ua_anycall()
+{
+    return (pjsua_call_get_count()>0);
+}
+
+int symbian_ua_answercall()
+{
+    PJ_ASSERT_RETURN (g_call_id != PJSUA_INVALID_ID, PJ_EINVAL);
+
+    return pjsua_call_answer(g_call_id, 200, NULL, NULL);
+}
diff --git a/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiAppUi.cpp b/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiAppUi.cpp
new file mode 100644
index 0000000..70dd7ec
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiAppUi.cpp
@@ -0,0 +1,247 @@
+/*
+========================================================================
+ Name        : symbian_ua_guiAppUi.cpp
+ Author      : nanang
+ Copyright   : (c) PJSIP 2008
+ Description : 
+========================================================================
+*/
+// [[[ begin generated region: do not modify [Generated System Includes]
+#include <eikmenub.h>
+#include <akncontext.h>
+#include <akntitle.h>
+#include <symbian_ua_gui.rsg>
+// ]]] end generated region [Generated System Includes]
+
+// [[[ begin generated region: do not modify [Generated User Includes]
+#include "symbian_ua_guiAppUi.h"
+#include "symbian_ua_gui.hrh"
+#include "symbian_ua_guiContainer.hrh"
+#include "symbian_ua_guiSettingItemList.hrh"
+#include "symbian_ua_guiContainerView.h"
+#include "symbian_ua_guiSettingItemListView.h"
+// ]]] end generated region [Generated User Includes]
+
+// [[[ begin generated region: do not modify [Generated Constants]
+// ]]] end generated region [Generated Constants]
+
+#include "symbian_ua.h"
+
+/**
+ * Construct the Csymbian_ua_guiAppUi instance
+ */ 
+Csymbian_ua_guiAppUi::Csymbian_ua_guiAppUi() : CTimer(0)
+	{
+	// [[[ 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.
+ */
+Csymbian_ua_guiAppUi::~Csymbian_ua_guiAppUi()
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	TRAPD( err_Dlg_wait_init, RemoveDlg_wait_initL() );
+	// ]]] end generated region [Generated Contents]
+
+	symbian_ua_destroy();
+	}
+
+// [[[ begin generated function: do not modify
+void Csymbian_ua_guiAppUi::InitializeContainersL()
+	{
+	iSymbian_ua_guiContainerView = Csymbian_ua_guiContainerView::NewL();
+	AddViewL( iSymbian_ua_guiContainerView );
+	iSymbian_ua_guiSettingItemListView = Csymbian_ua_guiSettingItemListView::NewL();
+	AddViewL( iSymbian_ua_guiSettingItemListView );
+	SetDefaultViewL( *iSymbian_ua_guiSettingItemListView );
+	}
+// ]]] end generated function
+
+/**
+ * Handle a command for this appui (override)
+ * @param aCommand command id to be handled
+ */
+void Csymbian_ua_guiAppUi::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 Csymbian_ua_guiAppUi::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 Csymbian_ua_guiAppUi::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]
+	
+	return EKeyWasNotConsumed;
+	}
+
+/** 
+ * Override of the HandleViewDeactivation virtual function
+ *
+ * @param aViewIdToBeDeactivated 
+ * @param aNewlyActivatedViewId 
+ */
+void Csymbian_ua_guiAppUi::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 Csymbian_ua_guiAppUi::ConstructL()
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	BaseConstructL( EAknEnableSkin );
+	InitializeContainersL();
+	// ]]] end generated region [Generated Contents]
+
+	// Create private folder
+	RProcess process;
+	TFileName path;
+	
+	path.Copy( process.FileName().Left(2) );
+	
+	if(path.Compare(_L("c")) || path.Compare(_L("C")))
+		CEikonEnv::Static()->FsSession().CreatePrivatePath(EDriveC);
+	else if(path.Compare(_L("e")) || path.Compare(_L("E")))
+		CEikonEnv::Static()->FsSession().CreatePrivatePath(EDriveE);	
+	
+	// Init PJSUA
+	if (symbian_ua_init() != 0) {
+	    Exit();
+	}
+	
+	ExecuteDlg_wait_initLD();
+
+	CTimer::ConstructL();
+	CActiveScheduler::Add( this );
+	After(4000000);
+	}
+
+/** 
+ * Override of the HandleApplicationSpecificEventL virtual function
+ */
+void Csymbian_ua_guiAppUi::HandleApplicationSpecificEventL( 
+		TInt aType, 
+		const TWsEvent& anEvent )
+	{
+	CAknViewAppUi::HandleApplicationSpecificEventL( aType, anEvent );
+	// [[[ begin generated region: do not modify [Generated Code]
+	// ]]] end generated region [Generated Code]
+	
+	}
+				
+/** 
+ * Handle the applicationSpecificEvent event.
+ */
+void Csymbian_ua_guiAppUi::HandleSymbian_ua_guiAppUiApplicationSpecificEventL( 
+		TInt /* aType */, 
+		const TWsEvent& /* anEvent */ )
+	{
+	// TODO: implement applicationSpecificEvent event handler
+	}
+				
+// [[[ begin generated function: do not modify
+/**
+ * Execute the wait dialog for dlg_wait_init. This routine returns
+ * while the dialog is showing. It will be closed and destroyed when
+ * RemoveDlg_wait_initL() or the user selects the Cancel soft key.
+ * @param aOverrideText optional override text. When null the text configured
+ * in the UI Designer is used.
+ */
+void Csymbian_ua_guiAppUi::ExecuteDlg_wait_initLD( const TDesC* aOverrideText )
+	{
+	iDlg_wait_init = new ( ELeave ) CAknWaitDialog( 
+			reinterpret_cast< CEikDialog** >( &iDlg_wait_init ), EFalse );
+	if ( aOverrideText != NULL )
+		{
+		iDlg_wait_init->SetTextL( *aOverrideText );
+		}
+	iDlg_wait_init->ExecuteLD( R_APPLICATION_DLG_WAIT_INIT );
+	iDlg_wait_initCallback = new ( ELeave ) CProgressDialogCallback( 
+		this, iDlg_wait_init, &Csymbian_ua_guiAppUi::HandleDlg_wait_initCanceledL );
+	iDlg_wait_init->SetCallback( iDlg_wait_initCallback );
+	}
+// ]]] end generated function
+
+// [[[ begin generated function: do not modify
+/**
+ * Close and dispose of the wait dialog for dlg_wait_init
+ */
+void Csymbian_ua_guiAppUi::RemoveDlg_wait_initL()
+	{
+	if ( iDlg_wait_init != NULL )
+		{
+		iDlg_wait_init->SetCallback( NULL );
+		iDlg_wait_init->ProcessFinishedL();    // deletes the dialog
+		iDlg_wait_init = NULL;
+		}
+	delete iDlg_wait_initCallback;
+	iDlg_wait_initCallback = NULL;
+	
+	}
+// ]]] end generated function
+
+/** 
+ * Handle the canceled event.
+ */
+void Csymbian_ua_guiAppUi::HandleDlg_wait_initCanceledL( CAknProgressDialog* /* aDialog */ )
+	{
+	// TODO: implement canceled event handler
+	
+	}
+				
+void Csymbian_ua_guiAppUi::RunL()
+	{
+	RemoveDlg_wait_initL();
+	iSymbian_ua_guiSettingItemListView->HandleCommandL(EAknSoftkeySave);
+	}
diff --git a/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiApplication.cpp b/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiApplication.cpp
new file mode 100644
index 0000000..e1b5e2b
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiApplication.cpp
@@ -0,0 +1,82 @@
+/*
+========================================================================
+ Name        : symbian_ua_guiApplication.cpp
+ Author      : nanang
+ Copyright   : (c) PJSIP 2008
+ 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 "symbian_ua_guiApplication.h"
+#include "symbian_ua_guiDocument.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 (KUidsymbian_ua_guiApplication)
+ */
+TUid Csymbian_ua_guiApplication::AppDllUid() const
+	{
+	return KUidsymbian_ua_guiApplication;
+	}
+
+/**
+ * @brief Creates the application's document (override from CApaApplication::CreateDocumentL())
+ * @return Pointer to the created document object (Csymbian_ua_guiDocument)
+ */
+CApaDocument* Csymbian_ua_guiApplication::CreateDocumentL()
+	{
+	return Csymbian_ua_guiDocument::NewL( *this );
+	}
+
+#ifdef EKA2
+
+/**
+ *	@brief Called by the application framework to construct the application object
+ *  @return The application (Csymbian_ua_guiApplication)
+ */	
+LOCAL_C CApaApplication* NewApplication()
+	{
+	return new Csymbian_ua_guiApplication;
+	}
+
+/**
+* @brief This standard export is the entry point for all Series 60 applications
+* @return error code
+ */	
+GLDEF_C TInt E32Main()
+	{
+	TInt err;
+	
+	err = EikStart::RunApplication( NewApplication );
+
+	return err;
+	}
+	
+#else 	// Series 60 2.x main DLL program code
+
+/**
+* @brief This standard export constructs the application object.
+* @return The application (Csymbian_ua_guiApplication)
+*/
+EXPORT_C CApaApplication* NewApplication()
+	{
+	return new Csymbian_ua_guiApplication;
+	}
+
+/**
+* @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/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiContainer.cpp b/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiContainer.cpp
new file mode 100644
index 0000000..d36dfbf
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiContainer.cpp
@@ -0,0 +1,285 @@
+/*
+========================================================================
+ Name        : symbian_ua_guiContainer.cpp
+ Author      : nanang
+ Copyright   : (c) PJSIP 2008
+ Description : 
+========================================================================
+*/
+// [[[ begin generated region: do not modify [Generated System Includes]
+#include <barsread.h>
+#include <stringloader.h>
+#include <eiklabel.h>
+#include <eikenv.h>
+#include <gdi.h>
+#include <eikedwin.h>
+#include <aknviewappui.h>
+#include <eikappui.h>
+#include <symbian_ua_gui.rsg>
+// ]]] end generated region [Generated System Includes]
+
+// [[[ begin generated region: do not modify [Generated User Includes]
+#include "symbian_ua_guiContainer.h"
+#include "symbian_ua_guiContainerView.h"
+#include "symbian_ua_gui.hrh"
+#include "symbian_ua_guiContainer.hrh"
+#include "symbian_ua_guiSettingItemList.hrh"
+// ]]] 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.
+ */
+CSymbian_ua_guiContainer::CSymbian_ua_guiContainer()
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	iLabel1 = NULL;
+	iEd_url = NULL;
+	iEd_info = NULL;
+	// ]]] end generated region [Generated Contents]
+	
+	}
+/** 
+ * Destroy child controls.
+ */
+CSymbian_ua_guiContainer::~CSymbian_ua_guiContainer()
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	delete iLabel1;
+	iLabel1 = NULL;
+	delete iEd_url;
+	iEd_url = NULL;
+	delete iEd_info;
+	iEd_info = 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 CSymbian_ua_guiContainer
+ */
+CSymbian_ua_guiContainer* CSymbian_ua_guiContainer::NewL( 
+		const TRect& aRect, 
+		const CCoeControl* aParent, 
+		MEikCommandObserver* aCommandObserver )
+	{
+	CSymbian_ua_guiContainer* self = CSymbian_ua_guiContainer::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 CSymbian_ua_guiContainer
+ */
+CSymbian_ua_guiContainer* CSymbian_ua_guiContainer::NewLC( 
+		const TRect& aRect, 
+		const CCoeControl* aParent, 
+		MEikCommandObserver* aCommandObserver )
+	{
+	CSymbian_ua_guiContainer* self = new ( ELeave ) CSymbian_ua_guiContainer();
+	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 CSymbian_ua_guiContainer::ConstructL( 
+		const TRect& aRect, 
+		const CCoeControl* aParent, 
+		MEikCommandObserver* aCommandObserver )
+	{
+	if ( aParent == NULL )
+	    {
+		CreateWindowL();
+	    }
+	else
+	    {
+	    SetContainerWindowL( *aParent );
+	    }
+	iFocusControl = NULL;
+	iCommandObserver = aCommandObserver;
+	InitializeControlsL();
+	SetRect( aRect );
+	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 CSymbian_ua_guiContainer::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* CSymbian_ua_guiContainer::ComponentControl( TInt aIndex ) const
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	switch ( aIndex )
+		{
+		case ELabel1:
+			return iLabel1;
+		case EEd_url:
+			return iEd_url;
+		case EEd_info:
+			return iEd_info;
+		}
+	// ]]] 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 CSymbian_ua_guiContainer::SizeChanged()
+	{
+	CCoeControl::SizeChanged();
+	LayoutControls();
+	// [[[ 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 CSymbian_ua_guiContainer::LayoutControls()
+	{
+	iLabel1->SetExtent( TPoint( 2, 23 ), TSize( 32, 28 ) );
+	iEd_url->SetExtent( TPoint( 49, 25 ), TSize( 197, 28 ) );
+	iEd_info->SetExtent( TPoint( 3, 78 ), TSize( 235, 143 ) );
+	}
+// ]]] end generated function
+
+/**
+ *	Handle key events.
+ */				
+TKeyResponse CSymbian_ua_guiContainer::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 CSymbian_ua_guiContainer::InitializeControlsL()
+	{
+	iLabel1 = new ( ELeave ) CEikLabel;
+	iLabel1->SetContainerWindowL( *this );
+		{
+		TResourceReader reader;
+		iEikonEnv->CreateResourceReaderLC( reader, R_SYMBIAN_UA_GUI_CONTAINER_LABEL1 );
+		iLabel1->ConstructFromResourceL( reader );
+		CleanupStack::PopAndDestroy(); // reader internal state
+		}
+	iEd_url = new ( ELeave ) CEikEdwin;
+	iEd_url->SetContainerWindowL( *this );
+		{
+		TResourceReader reader;
+		iEikonEnv->CreateResourceReaderLC( reader, R_SYMBIAN_UA_GUI_CONTAINER_ED_URL );
+		iEd_url->ConstructFromResourceL( reader );
+		CleanupStack::PopAndDestroy(); // reader internal state
+		}
+		{
+		HBufC* text = StringLoader::LoadLC( R_SYMBIAN_UA_GUI_CONTAINER_ED_URL_2 );
+		iEd_url->SetTextL( text );
+		CleanupStack::PopAndDestroy( text );
+		}
+	iEd_info = new ( ELeave ) CEikEdwin;
+	iEd_info->SetContainerWindowL( *this );
+		{
+		TResourceReader reader;
+		iEikonEnv->CreateResourceReaderLC( reader, R_SYMBIAN_UA_GUI_CONTAINER_ED_INFO );
+		iEd_info->ConstructFromResourceL( reader );
+		CleanupStack::PopAndDestroy(); // reader internal state
+		}
+		{
+		HBufC* text = StringLoader::LoadLC( R_SYMBIAN_UA_GUI_CONTAINER_ED_INFO_2 );
+		iEd_info->SetTextL( text );
+		CleanupStack::PopAndDestroy( text );
+		}
+	
+	iEd_url->SetFocus( ETrue );
+	iFocusControl = iEd_url;
+	
+	}
+// ]]] end generated function
+
+/** 
+ * Handle global resource changes, such as scalable UI or skin events (override)
+ */
+void CSymbian_ua_guiContainer::HandleResourceChange( TInt aType )
+	{
+	CCoeControl::HandleResourceChange( aType );
+	SetRect( iAvkonViewAppUi->View( TUid::Uid( ESymbian_ua_guiContainerViewId ) )->ClientRect() );
+	// [[[ begin generated region: do not modify [Generated Contents]
+	// ]]] end generated region [Generated Contents]
+	
+	}
+				
+/**
+ *	Draw container contents.
+ */				
+void CSymbian_ua_guiContainer::Draw( const TRect& aRect ) const
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	CWindowGc& gc = SystemGc();
+	gc.Clear( aRect );
+	
+	// ]]] end generated region [Generated Contents]
+	
+	}
+				
diff --git a/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiContainerView.cpp b/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiContainerView.cpp
new file mode 100644
index 0000000..e22f012
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiContainerView.cpp
@@ -0,0 +1,478 @@
+/*
+========================================================================
+ Name        : symbian_ua_guiContainerView.cpp
+ Author      : nanang
+ Copyright   : (c) PJSIP 2008
+ Description : 
+========================================================================
+*/
+// [[[ begin generated region: do not modify [Generated System Includes]
+#include <aknviewappui.h>
+#include <eikmenub.h>
+#include <avkon.hrh>
+#include <barsread.h>
+#include <stringloader.h>
+#include <eiklabel.h>
+#include <eikenv.h>
+#include <gdi.h>
+#include <eikedwin.h>
+#include <akncontext.h>
+#include <akntitle.h>
+#include <eikbtgpc.h>
+#include <aknnotewrappers.h>
+#include <aknquerydialog.h>
+#include <symbian_ua_gui.rsg>
+// ]]] end generated region [Generated System Includes]
+
+// [[[ begin generated region: do not modify [Generated User Includes]
+#include "symbian_ua_gui.hrh"
+#include "symbian_ua_guiContainerView.h"
+#include "symbian_ua_guiContainer.hrh"
+#include "symbian_ua_guiSettingItemList.hrh"
+#include "symbian_ua_guiContainer.h"
+// ]]] end generated region [Generated User Includes]
+
+#include <UTF.H>
+#include "symbian_ua.h"
+
+// [[[ begin generated region: do not modify [Generated Constants]
+// ]]] end generated region [Generated Constants]
+
+Csymbian_ua_guiContainerView *myinstance = NULL;
+_LIT(KStCall, "Call");
+_LIT(KStHangUp, "Hang Up");
+
+void on_info(const wchar_t* buf)
+{
+	TPtrC aBuf((const TUint16*)buf);
+	
+	if (myinstance)
+		myinstance->PutMessage(aBuf);
+}
+
+void on_incoming_call(const wchar_t* caller_disp, const wchar_t* caller_uri)
+{
+	TBuf<512> buf;
+	TPtrC aDisp((const TUint16*)caller_disp);
+	TPtrC aUri((const TUint16*)caller_uri);
+	_LIT(KFormat, "Incoming call from %S, accept?");
+	
+	buf.Format(KFormat, &aDisp);
+	if (Csymbian_ua_guiContainerView::RunQry_accept_callL(&buf) == EAknSoftkeyYes)
+	{
+		CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current();
+		if (cba != NULL) {
+			TRAPD(result, cba->SetCommandL(ESymbian_ua_guiContainerViewControlPaneRightId, KStHangUp));
+			cba->DrawDeferred();
+		}
+		symbian_ua_answercall();
+	} else {
+		symbian_ua_endcall();	
+	}
+}
+
+void on_call_end(const wchar_t* reason)
+{
+	TPtrC aReason((const TUint16*)reason);
+	
+	CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current();
+	if (cba != NULL) {
+		TRAPD(result, cba->SetCommandL(ESymbian_ua_guiContainerViewControlPaneRightId, KStCall));
+		cba->DrawDeferred();
+	}
+	
+	Csymbian_ua_guiContainerView::RunNote_infoL(&aReason);
+}
+
+void on_reg_state(bool success)
+{
+	if (success)
+		Csymbian_ua_guiContainerView::RunNote_infoL();
+	else
+		Csymbian_ua_guiContainerView::RunNote_warningL();
+}
+
+void on_unreg_state(bool success)
+{
+	TPtrC st_success(_L("Unregistration Success!"));
+	TPtrC st_failed(_L("Unregistration Failed!"));
+	
+	if (success)
+		Csymbian_ua_guiContainerView::RunNote_infoL(&st_success);
+	else
+		Csymbian_ua_guiContainerView::RunNote_warningL(&st_failed);
+}
+
+void Csymbian_ua_guiContainerView::PutMessage(const TDesC &msg)
+	{
+	if (!iSymbian_ua_guiContainer)
+		return;
+	
+	CEikEdwin *obj_info = (CEikEdwin*) iSymbian_ua_guiContainer->ComponentControl(iSymbian_ua_guiContainer->EEd_info);
+
+	obj_info->SetTextL(&msg);
+	obj_info->DrawDeferred();
+	}
+
+/**
+ * First phase of Symbian two-phase construction. Should not contain any
+ * code that could leave.
+ */
+Csymbian_ua_guiContainerView::Csymbian_ua_guiContainerView()
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	iSymbian_ua_guiContainer = NULL;
+	// ]]] end generated region [Generated Contents]
+	
+	}
+/** 
+ * The view's destructor removes the container from the control
+ * stack and destroys it.
+ */
+Csymbian_ua_guiContainerView::~Csymbian_ua_guiContainerView()
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	delete iSymbian_ua_guiContainer;
+	iSymbian_ua_guiContainer = NULL;
+	// ]]] end generated region [Generated Contents]
+	
+	symbian_ua_set_info_callback(NULL);
+	myinstance = NULL;
+	}
+
+/**
+ * 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 Csymbian_ua_guiContainerView
+ */
+Csymbian_ua_guiContainerView* Csymbian_ua_guiContainerView::NewL()
+	{
+	Csymbian_ua_guiContainerView* self = Csymbian_ua_guiContainerView::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 Csymbian_ua_guiContainerView
+ */
+Csymbian_ua_guiContainerView* Csymbian_ua_guiContainerView::NewLC()
+	{
+	Csymbian_ua_guiContainerView* self = new ( ELeave ) Csymbian_ua_guiContainerView();
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	return self;
+	}
+
+
+/**
+ * Second-phase constructor for view.  
+ * Initialize contents from resource.
+ */ 
+void Csymbian_ua_guiContainerView::ConstructL()
+	{
+	// [[[ begin generated region: do not modify [Generated Code]
+	BaseConstructL( R_SYMBIAN_UA_GUI_CONTAINER_SYMBIAN_UA_GUI_CONTAINER_VIEW );
+	// ]]] end generated region [Generated Code]
+	
+	// add your own initialization code here
+	symbian_ua_info_cb_t cb;
+	Mem::FillZ(&cb, sizeof(cb));
+
+	cb.on_info = &on_info;
+	cb.on_incoming_call = &on_incoming_call;
+	cb.on_reg_state = &on_reg_state;
+	cb.on_unreg_state = &on_unreg_state;
+	cb.on_call_end = &on_call_end;
+	
+	symbian_ua_set_info_callback(&cb);
+	myinstance = this;
+	}
+	
+/**
+ * @return The UID for this view
+ */
+TUid Csymbian_ua_guiContainerView::Id() const
+	{
+	return TUid::Uid( ESymbian_ua_guiContainerViewId );
+	}
+
+/**
+ * Handle a command for this view (override)
+ * @param aCommand command id to be handled
+ */
+void Csymbian_ua_guiContainerView::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
+	
+		case ESymbian_ua_guiContainerViewControlPaneRightId:
+			commandHandled = CallSoftKeyPressedL( aCommand );
+			break;
+		case ESymbian_ua_guiContainerViewSettingMenuItemCommand:
+			commandHandled = HandleSettingMenuItemSelectedL( aCommand );
+			break;
+		default:
+			break;
+		}
+	
+		
+	if ( !commandHandled ) 
+		{
+	
+		if ( aCommand == ESymbian_ua_guiContainerViewControlPaneRightId )
+			{
+			AppUi()->HandleCommandL( EEikCmdExit );
+			}
+	
+		}
+	// ]]] end generated region [Generated Code]
+	
+	}
+
+/**
+ *	Handles user actions during activation of the view, 
+ *	such as initializing the content.
+ */
+void Csymbian_ua_guiContainerView::DoActivateL(
+		const TVwsViewId& /*aPrevViewId*/,
+		TUid /*aCustomMessageId*/,
+		const TDesC8& /*aCustomMessage*/ )
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	SetupStatusPaneL();
+	
+	CEikButtonGroupContainer* cba = AppUi()->Cba();
+	if ( cba != NULL ) 
+		{
+		cba->MakeVisible( EFalse );
+		}
+	
+	if ( iSymbian_ua_guiContainer == NULL )
+		{
+		iSymbian_ua_guiContainer = CSymbian_ua_guiContainer::NewL( ClientRect(), NULL, this );
+		iSymbian_ua_guiContainer->SetMopParent( this );
+		AppUi()->AddToStackL( *this, iSymbian_ua_guiContainer );
+		} 
+	// ]]] end generated region [Generated Contents]
+	
+	cba = CEikButtonGroupContainer::Current();
+	if (cba != NULL) {
+		if (symbian_ua_anycall())
+			cba->SetCommandL(ESymbian_ua_guiContainerViewControlPaneRightId, KStHangUp);
+		else
+			cba->SetCommandL(ESymbian_ua_guiContainerViewControlPaneRightId, KStCall);
+	}
+	
+	}
+
+/**
+ */
+void Csymbian_ua_guiContainerView::DoDeactivate()
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	CleanupStatusPane();
+	
+	CEikButtonGroupContainer* cba = AppUi()->Cba();
+	if ( cba != NULL ) 
+		{
+		cba->MakeVisible( ETrue );
+		cba->DrawDeferred();
+		}
+	
+	if ( iSymbian_ua_guiContainer != NULL )
+		{
+		AppUi()->RemoveFromViewStack( *this, iSymbian_ua_guiContainer );
+		delete iSymbian_ua_guiContainer;
+		iSymbian_ua_guiContainer = NULL;
+		}
+	// ]]] end generated region [Generated Contents]
+	
+	}
+
+// [[[ begin generated function: do not modify
+void Csymbian_ua_guiContainerView::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_SYMBIAN_UA_GUI_CONTAINER_TITLE_RESOURCE );
+		title->SetFromResourceL( reader );
+		CleanupStack::PopAndDestroy(); // reader internal state
+		}
+				
+	}
+// ]]] end generated function
+
+// [[[ begin generated function: do not modify
+void Csymbian_ua_guiContainerView::CleanupStatusPane()
+	{
+	}
+// ]]] end generated function
+
+/** 
+ * Handle status pane size change for this view (override)
+ */
+void Csymbian_ua_guiContainerView::HandleStatusPaneSizeChange()
+	{
+	CAknView::HandleStatusPaneSizeChange();
+	
+	// this may fail, but we're not able to propagate exceptions here
+	TInt result;
+	TRAP( result, SetupStatusPaneL() ); 
+	}
+	
+/** 
+ * Handle the rightSoftKeyPressed event.
+ * @return ETrue if the command was handled, EFalse if not
+ */
+TBool Csymbian_ua_guiContainerView::CallSoftKeyPressedL( TInt aCommand )
+	{
+	CEikEdwin *obj_url = (CEikEdwin*) iSymbian_ua_guiContainer->ComponentControl(iSymbian_ua_guiContainer->EEd_url);
+	CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current();
+	
+	if (symbian_ua_anycall()) {
+		symbian_ua_endcall();
+		return ETrue;
+	}
+
+	PutMessage(_L("Making call..."));
+	if ( cba != NULL ) {
+		cba->SetCommandL(aCommand, KStHangUp);
+		cba->DrawDeferred();
+	}
+	
+
+	TUint8 url[256];
+	TPtr8 aUrl(url, 256);
+
+	HBufC *buf = obj_url->GetTextInHBufL();
+	CnvUtfConverter::ConvertFromUnicodeToUtf8(aUrl, *buf);
+	delete buf;
+
+	if (symbian_ua_makecall((char *)aUrl.PtrZ()) != 0) {
+		PutMessage(_L("Making call failed!"));
+		if ( cba != NULL ) {
+			cba->SetCommandL(aCommand, KStCall);
+			cba->DrawDeferred();
+		}
+	}
+	
+	return ETrue;
+	}
+				
+/** 
+ * Handle the selected event.
+ * @param aCommand the command id invoked
+ * @return ETrue if the command was handled, EFalse if not
+ */
+TBool Csymbian_ua_guiContainerView::HandleSettingMenuItemSelectedL( TInt aCommand )
+	{
+	AppUi()->ActivateLocalViewL(TUid::Uid(ESymbian_ua_guiSettingItemListViewId));
+	return ETrue;
+	}
+				
+// [[[ begin generated function: do not modify
+/**
+ * Show the popup note for note_error
+ * @param aOverrideText optional override text
+ */
+void Csymbian_ua_guiContainerView::RunNote_errorL( const TDesC* aOverrideText )
+	{
+	CAknErrorNote* note = new ( ELeave ) CAknErrorNote();
+	if ( aOverrideText == NULL )
+		{
+		HBufC* noteText = StringLoader::LoadLC( R_SYMBIAN_UA_GUI_CONTAINER_NOTE_ERROR );
+		note->ExecuteLD( *noteText );
+		CleanupStack::PopAndDestroy( noteText );
+		}
+	else
+		{
+		note->ExecuteLD( *aOverrideText );
+		}
+	}
+// ]]] end generated function
+
+// [[[ begin generated function: do not modify
+/**
+ * Show the popup note for note_info
+ * @param aOverrideText optional override text
+ */
+void Csymbian_ua_guiContainerView::RunNote_infoL( const TDesC* aOverrideText )
+	{
+	CAknInformationNote* note = new ( ELeave ) CAknInformationNote();
+	if ( aOverrideText == NULL )
+		{
+		HBufC* noteText = StringLoader::LoadLC( R_SYMBIAN_UA_GUI_CONTAINER_NOTE_INFO );
+		note->ExecuteLD( *noteText );
+		CleanupStack::PopAndDestroy( noteText );
+		}
+	else
+		{
+		note->ExecuteLD( *aOverrideText );
+		}
+	}
+// ]]] end generated function
+
+// [[[ begin generated function: do not modify
+/**
+ * Show the popup note for note_warning
+ * @param aOverrideText optional override text
+ */
+void Csymbian_ua_guiContainerView::RunNote_warningL( const TDesC* aOverrideText )
+	{
+	CAknWarningNote* note = new ( ELeave ) CAknWarningNote();
+	if ( aOverrideText == NULL )
+		{
+		HBufC* noteText = StringLoader::LoadLC( R_SYMBIAN_UA_GUI_CONTAINER_NOTE_WARNING );
+		note->ExecuteLD( *noteText );
+		CleanupStack::PopAndDestroy( noteText );
+		}
+	else
+		{
+		note->ExecuteLD( *aOverrideText );
+		}
+	}
+// ]]] end generated function
+
+// [[[ begin generated function: do not modify
+/**
+ * Show the popup dialog for qry_accept_call
+ * @param aOverrideText optional override text
+ * @return EAknSoftkeyYes (left soft key id) or 0
+ */
+TInt Csymbian_ua_guiContainerView::RunQry_accept_callL( const TDesC* aOverrideText )
+	{
+				
+	CAknQueryDialog* queryDialog = CAknQueryDialog::NewL();	
+	
+	if ( aOverrideText != NULL )
+		{
+		queryDialog->SetPromptL( *aOverrideText );
+		}
+	return queryDialog->ExecuteLD( R_SYMBIAN_UA_GUI_CONTAINER_QRY_ACCEPT_CALL );
+	}
+// ]]] end generated function
+
diff --git a/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiDocument.cpp b/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiDocument.cpp
new file mode 100644
index 0000000..4f23d95
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiDocument.cpp
@@ -0,0 +1,57 @@
+/*
+========================================================================
+ Name        : symbian_ua_guiDocument.cpp
+ Author      : nanang
+ Copyright   : (c) PJSIP 2008
+ Description : 
+========================================================================
+*/
+// [[[ begin generated region: do not modify [Generated User Includes]
+#include "symbian_ua_guiDocument.h"
+#include "symbian_ua_guiAppUi.h"
+// ]]] end generated region [Generated User Includes]
+
+/**
+ * @brief Constructs the document class for the application.
+ * @param anApplication the application instance
+ */
+Csymbian_ua_guiDocument::Csymbian_ua_guiDocument( CEikApplication& anApplication )
+	: CAknDocument( anApplication )
+	{
+	}
+
+/**
+ * @brief Completes the second phase of Symbian object construction. 
+ * Put initialization code that could leave here.  
+ */ 
+void Csymbian_ua_guiDocument::ConstructL()
+	{
+	}
+	
+/**
+ * Symbian OS two-phase constructor.
+ *
+ * Creates an instance of Csymbian_ua_guiDocument, constructs it, and
+ * returns it.
+ *
+ * @param aApp the application instance
+ * @return the new Csymbian_ua_guiDocument
+ */
+Csymbian_ua_guiDocument* Csymbian_ua_guiDocument::NewL( CEikApplication& aApp )
+	{
+	Csymbian_ua_guiDocument* self = new ( ELeave ) Csymbian_ua_guiDocument( 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* Csymbian_ua_guiDocument::CreateAppUiL()
+	{
+	return new ( ELeave ) Csymbian_ua_guiAppUi;
+	}
+				
diff --git a/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiSettingItemList.cpp b/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiSettingItemList.cpp
new file mode 100644
index 0000000..16b9009
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiSettingItemList.cpp
@@ -0,0 +1,423 @@
+/*
+========================================================================
+ Name        : symbian_ua_guiSettingItemList.cpp
+ Author      : nanang
+ Copyright   : (c) PJSIP 2008
+ Description : 
+========================================================================
+*/
+
+// [[[ begin generated region: do not modify [Generated System Includes]
+#include <avkon.hrh>
+#include <avkon.rsg>
+#include <eikmenup.h>
+#include <aknappui.h>
+#include <eikcmobs.h>
+#include <barsread.h>
+#include <stringloader.h>
+#include <gdi.h>
+#include <eikedwin.h>
+#include <eikenv.h>
+#include <eikseced.h>
+#include <aknpopupfieldtext.h>
+#include <eikappui.h>
+#include <aknviewappui.h>
+#include <akntextsettingpage.h> 
+#include <symbian_ua_gui.rsg>
+// ]]] end generated region [Generated System Includes]
+
+// [[[ begin generated region: do not modify [Generated User Includes]
+#include "symbian_ua_guiSettingItemList.h"
+#include "Symbian_ua_guiSettingItemListSettings.h"
+#include "symbian_ua_guiSettingItemList.hrh"
+#include "symbian_ua_gui.hrh"
+#include "symbian_ua_guiSettingItemListView.h"
+// ]]] end generated region [Generated User Includes]
+
+
+#include <S32STOR.H>
+#include <S32FILE.H>
+
+
+// [[[ begin generated region: do not modify [Generated Constants]
+// ]]] end generated region [Generated Constants]
+
+
+_LIT(KtxDicFileName			,"settings.ini" );
+ 
+const TInt KRegistrar		= 2;
+const TInt KUsername		= 3;
+const TInt KPassword		= 4;
+const TInt KStunServer		= 5;
+const TInt KSrtp			= 6;
+const TInt KIce				= 7;
+
+/**
+ * Construct the CSymbian_ua_guiSettingItemList instance
+ * @param aCommandObserver command observer
+ */ 
+CSymbian_ua_guiSettingItemList::CSymbian_ua_guiSettingItemList( 
+		TSymbian_ua_guiSettingItemListSettings& aSettings, 
+		MEikCommandObserver* aCommandObserver )
+	: iSettings( aSettings ), iCommandObserver( aCommandObserver )
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	// ]]] end generated region [Generated Contents]
+	
+	}
+/** 
+ * Destroy any instance variables
+ */
+CSymbian_ua_guiSettingItemList::~CSymbian_ua_guiSettingItemList()
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	// ]]] end generated region [Generated Contents]
+	
+	}
+
+/**
+ * Handle system notification that the container's size has changed.
+ */
+void CSymbian_ua_guiSettingItemList::SizeChanged()
+	{
+	if ( ListBox() ) 
+		{
+		ListBox()->SetRect( Rect() );
+		}
+	}
+
+/**
+ * Create one setting item at a time, identified by id.
+ * CAknSettingItemList calls this method and takes ownership
+ * of the returned value.  The CAknSettingItem object owns
+ * a reference to the underlying data, which EditItemL() uses
+ * to edit and store the value.
+ */
+CAknSettingItem* CSymbian_ua_guiSettingItemList::CreateSettingItemL( TInt aId )
+	{
+	switch ( aId )
+		{
+	// [[[ begin generated region: do not modify [Initializers]
+		case ESymbian_ua_guiSettingItemListViewEd_registrar:
+			{			
+			CAknTextSettingItem* item = new ( ELeave ) 
+				CAknTextSettingItem( 
+					aId,
+					iSettings.Ed_registrar() );
+			item->SetSettingPageFlags(CAknTextSettingPage::EZeroLengthAllowed);
+			return item;
+			}
+		case ESymbian_ua_guiSettingItemListViewEd_user:
+			{			
+			CAknTextSettingItem* item = new ( ELeave ) 
+				CAknTextSettingItem( 
+					aId,
+					iSettings.Ed_user() );
+			item->SetSettingPageFlags(CAknTextSettingPage::EZeroLengthAllowed);
+			return item;
+			}
+		case ESymbian_ua_guiSettingItemListViewEd_password:
+			{			
+			CAknPasswordSettingItem* item = new ( ELeave ) 
+				CAknPasswordSettingItem( 
+					aId,
+					CAknPasswordSettingItem::EAlpha,
+					iSettings.Ed_password() );
+			item->SetSettingPageFlags(CAknTextSettingPage::EZeroLengthAllowed);
+			return item;
+			}
+		case ESymbian_ua_guiSettingItemListViewB_srtp:
+			{			
+			CAknBinaryPopupSettingItem* item = new ( ELeave ) 
+				CAknBinaryPopupSettingItem( 
+					aId,
+					iSettings.B_srtp() );
+			item->SetHidden( ETrue ); 
+			return item;
+			}
+		case ESymbian_ua_guiSettingItemListViewB_ice:
+			{			
+			CAknBinaryPopupSettingItem* item = new ( ELeave ) 
+				CAknBinaryPopupSettingItem( 
+					aId,
+					iSettings.B_ice() );
+			item->SetHidden( ETrue ); 
+			return item;
+			}
+		case ESymbian_ua_guiSettingItemListViewEd_stun_server:
+			{			
+			CAknTextSettingItem* item = new ( ELeave ) 
+				CAknTextSettingItem( 
+					aId,
+					iSettings.Ed_stun_server() );
+			item->SetHidden( ETrue ); 
+			return item;
+			}
+	// ]]] end generated region [Initializers]
+	
+		}
+		
+	return NULL;
+	}
+	
+/**
+ * Edit the setting item identified by the given id and store
+ * the changes into the store.
+ * @param aIndex the index of the setting item in SettingItemArray()
+ * @param aCalledFromMenu true: a menu item invoked editing, thus
+ *	always show the edit page and interactively edit the item;
+ *	false: change the item in place if possible, else show the edit page
+ */
+void CSymbian_ua_guiSettingItemList::EditItemL ( TInt aIndex, TBool aCalledFromMenu )
+	{
+	CAknSettingItem* item = ( *SettingItemArray() )[aIndex];
+	switch ( item->Identifier() )
+		{
+	// [[[ begin generated region: do not modify [Editing Started Invoker]
+	// ]]] end generated region [Editing Started Invoker]
+	
+		}
+	
+	CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu );
+	
+	TBool storeValue = ETrue;
+	switch ( item->Identifier() )
+		{
+	// [[[ begin generated region: do not modify [Editing Stopped Invoker]
+	// ]]] end generated region [Editing Stopped Invoker]
+	
+		}
+		
+	if ( storeValue )
+		{
+		item->StoreL();
+		SaveSettingValuesL();
+		}	
+	}
+/**
+ *	Handle the "Change" option on the Options menu.  This is an
+ *	alternative to the Selection key that forces the settings page
+ *	to come up rather than changing the value in place (if possible).
+ */
+void CSymbian_ua_guiSettingItemList::ChangeSelectedItemL()
+	{
+	if ( ListBox()->CurrentItemIndex() >= 0 )
+		{
+		EditItemL( ListBox()->CurrentItemIndex(), ETrue );
+		}
+	}
+
+/**
+ *	Load the initial contents of the setting items.  By default,
+ *	the setting items are populated with the default values from
+ * 	the design.  You can override those values here.
+ *	<p>
+ *	Note: this call alone does not update the UI.  
+ *	LoadSettingsL() must be called afterwards.
+ */
+void CSymbian_ua_guiSettingItemList::LoadSettingValuesL()
+	{
+	// load values into iSettings
+
+	TFileName path;
+	TFileName pathWithoutDrive;
+	CEikonEnv::Static()->FsSession().PrivatePath( pathWithoutDrive );
+
+	// Extract drive letter into appDrive:
+#ifdef __WINS__
+	path.Copy( _L("c:") );
+#else
+	RProcess process;
+	path.Copy( process.FileName().Left(2) );
+#endif
+
+	path.Append( pathWithoutDrive );
+	path.Append( KtxDicFileName );
+	
+	TFindFile AufFolder(CCoeEnv::Static()->FsSession());
+	if(KErrNone == AufFolder.FindByDir(path, KNullDesC))
+	{
+		CDictionaryFileStore* MyDStore = CDictionaryFileStore::OpenLC(CCoeEnv::Static()->FsSession(),AufFolder.File(), TUid::Uid(1));
+		TUid FileUid;
+		
+		FileUid.iUid = KRegistrar;
+		if(MyDStore->IsPresentL(FileUid))
+		{
+			RDictionaryReadStream in;
+			in.OpenLC(*MyDStore,FileUid);
+			in >> iSettings.Ed_registrar();
+			CleanupStack::PopAndDestroy(1);// in
+		}
+			
+		FileUid.iUid = KUsername;
+		if(MyDStore->IsPresentL(FileUid))
+		{
+			RDictionaryReadStream in;
+			in.OpenLC(*MyDStore,FileUid);
+			in >> iSettings.Ed_user();
+			CleanupStack::PopAndDestroy(1);// in
+		}
+
+		FileUid.iUid = KPassword;
+		if(MyDStore->IsPresentL(FileUid))
+		{
+			RDictionaryReadStream in;
+			in.OpenLC(*MyDStore,FileUid);
+			in >> iSettings.Ed_password();
+			CleanupStack::PopAndDestroy(1);// in
+		}
+
+		FileUid.iUid = KStunServer;
+		if(MyDStore->IsPresentL(FileUid))
+		{
+			RDictionaryReadStream in;
+			in.OpenLC(*MyDStore,FileUid);
+			in >> iSettings.Ed_stun_server();
+			CleanupStack::PopAndDestroy(1);// in
+		}
+
+		FileUid.iUid = KSrtp;
+		if(MyDStore->IsPresentL(FileUid))
+		{
+			RDictionaryReadStream in;
+			in.OpenLC(*MyDStore,FileUid);
+			iSettings.SetB_srtp((TBool)in.ReadInt32L());
+			CleanupStack::PopAndDestroy(1);// in
+		}
+		
+		FileUid.iUid = KIce;
+		if(MyDStore->IsPresentL(FileUid))
+		{
+			RDictionaryReadStream in;
+			in.OpenLC(*MyDStore,FileUid);
+			iSettings.SetB_ice((TBool)in.ReadInt32L());
+			CleanupStack::PopAndDestroy(1);// in
+		}
+
+		CleanupStack::PopAndDestroy(1);// Store		
+	}
+
+	}
+	
+/**
+ *	Save the contents of the setting items.  Note, this is called
+ *	whenever an item is changed and stored to the model, so it
+ *	may be called multiple times or not at all.
+ */
+void CSymbian_ua_guiSettingItemList::SaveSettingValuesL()
+	{
+	// store values from iSettings
+
+	TFileName path;
+	TFileName pathWithoutDrive;
+	CEikonEnv::Static()->FsSession().PrivatePath( pathWithoutDrive );
+
+	// Extract drive letter into appDrive:
+#ifdef __WINS__
+	path.Copy( _L("c:") );
+#else
+	RProcess process;
+	path.Copy( process.FileName().Left(2) );
+	
+	if(path.Compare(_L("c")) || path.Compare(_L("C")))
+		CEikonEnv::Static()->FsSession().CreatePrivatePath(EDriveC);
+	else if(path.Compare(_L("e")) || path.Compare(_L("E")))
+		CEikonEnv::Static()->FsSession().CreatePrivatePath(EDriveE);	
+#endif
+
+	path.Append( pathWithoutDrive );
+	path.Append( KtxDicFileName );
+	
+	TFindFile AufFolder(CCoeEnv::Static()->FsSession());
+	if(KErrNone == AufFolder.FindByDir(path, KNullDesC))
+	{
+		User::LeaveIfError(CCoeEnv::Static()->FsSession().Delete(AufFolder.File()));
+	}
+ 
+	CDictionaryFileStore* MyDStore = CDictionaryFileStore::OpenLC(CCoeEnv::Static()->FsSession(),path, TUid::Uid(1));
+ 
+	TUid FileUid = {0x0};
+		
+	FileUid.iUid = KRegistrar;
+	RDictionaryWriteStream out1;
+	out1.AssignLC(*MyDStore,FileUid);
+	out1 << iSettings.Ed_registrar();
+	out1.CommitL(); 	
+	CleanupStack::PopAndDestroy(1);// out2	
+	
+	FileUid.iUid = KUsername;
+	RDictionaryWriteStream out2;
+	out2.AssignLC(*MyDStore,FileUid);
+	out2 << iSettings.Ed_user();
+	out2.CommitL(); 	
+	CleanupStack::PopAndDestroy(1);// out2	
+	
+	FileUid.iUid = KPassword;
+	RDictionaryWriteStream out3;
+	out3.AssignLC(*MyDStore,FileUid);
+	out3 << iSettings.Ed_password();
+	out3.CommitL(); 	
+	CleanupStack::PopAndDestroy(1);// out2	
+	
+	FileUid.iUid = KStunServer;
+	RDictionaryWriteStream out4;
+	out4.AssignLC(*MyDStore,FileUid);
+	out4 << iSettings.Ed_stun_server();
+	out4.CommitL(); 	
+	CleanupStack::PopAndDestroy(1);// out2	
+	
+	FileUid.iUid = KSrtp;
+	RDictionaryWriteStream out5;
+	out5.AssignLC(*MyDStore,FileUid);
+	out5.WriteInt32L(iSettings.B_srtp());
+	out5.CommitL(); 	
+	CleanupStack::PopAndDestroy(1);// out1
+	
+	FileUid.iUid = KIce;
+	RDictionaryWriteStream out6;
+	out6.AssignLC(*MyDStore,FileUid);
+	out6.WriteInt32L(iSettings.B_ice());
+	out6.CommitL(); 	
+	CleanupStack::PopAndDestroy(1);// out1
+	 
+	MyDStore->CommitL();
+	CleanupStack::PopAndDestroy(1);// Store
+
+	}
+
+
+/** 
+ * Handle global resource changes, such as scalable UI or skin events (override)
+ */
+void CSymbian_ua_guiSettingItemList::HandleResourceChange( TInt aType )
+	{
+	CAknSettingItemList::HandleResourceChange( aType );
+	SetRect( iAvkonViewAppUi->View( TUid::Uid( ESymbian_ua_guiSettingItemListViewId ) )->ClientRect() );
+	// [[[ begin generated region: do not modify [Generated Contents]
+	// ]]] end generated region [Generated Contents]
+	
+	}
+				
+/** 
+ * Handle key event (override)
+ * @param aKeyEvent key event
+ * @param aType event code
+ * @return EKeyWasConsumed if the event was handled, else EKeyWasNotConsumed
+ */
+TKeyResponse CSymbian_ua_guiSettingItemList::OfferKeyEventL( 
+		const TKeyEvent& aKeyEvent, 
+		TEventCode aType )
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	// ]]] end generated region [Generated Contents]
+	
+	if ( aKeyEvent.iCode == EKeyLeftArrow 
+		|| aKeyEvent.iCode == EKeyRightArrow )
+		{
+		// allow the tab control to get the arrow keys
+		return EKeyWasNotConsumed;
+		}
+	
+	return CAknSettingItemList::OfferKeyEventL( aKeyEvent, aType );
+	}
+				
diff --git a/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiSettingItemListView.cpp b/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiSettingItemListView.cpp
new file mode 100644
index 0000000..048ba2a
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiSettingItemListView.cpp
@@ -0,0 +1,285 @@
+/*
+========================================================================
+ Name        : symbian_ua_guiSettingItemListView.cpp
+ Author      : nanang
+ Copyright   : (c) PJSIP 2008
+ Description : 
+========================================================================
+*/
+// [[[ begin generated region: do not modify [Generated System Includes]
+#include <aknviewappui.h>
+#include <eikmenub.h>
+#include <avkon.hrh>
+#include <akncontext.h>
+#include <akntitle.h>
+#include <stringloader.h>
+#include <barsread.h>
+#include <eikbtgpc.h>
+#include <symbian_ua_gui.rsg>
+// ]]] end generated region [Generated System Includes]
+
+// [[[ begin generated region: do not modify [Generated User Includes]
+#include "symbian_ua_gui.hrh"
+#include "symbian_ua_guiSettingItemListView.h"
+#include "symbian_ua_guiContainer.hrh"
+#include "symbian_ua_guiSettingItemList.hrh"
+#include "symbian_ua_guiSettingItemList.h"
+// ]]] end generated region [Generated User Includes]
+
+#include "symbian_ua.h"
+
+// [[[ 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.
+ */
+Csymbian_ua_guiSettingItemListView::Csymbian_ua_guiSettingItemListView()
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	// ]]] end generated region [Generated Contents]
+	
+	}
+/** 
+ * The view's destructor removes the container from the control
+ * stack and destroys it.
+ */
+Csymbian_ua_guiSettingItemListView::~Csymbian_ua_guiSettingItemListView()
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	// ]]] 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 Csymbian_ua_guiSettingItemListView
+ */
+Csymbian_ua_guiSettingItemListView* Csymbian_ua_guiSettingItemListView::NewL()
+	{
+	Csymbian_ua_guiSettingItemListView* self = Csymbian_ua_guiSettingItemListView::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 Csymbian_ua_guiSettingItemListView
+ */
+Csymbian_ua_guiSettingItemListView* Csymbian_ua_guiSettingItemListView::NewLC()
+	{
+	Csymbian_ua_guiSettingItemListView* self = new ( ELeave ) Csymbian_ua_guiSettingItemListView();
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	return self;
+	}
+
+
+/**
+ * Second-phase constructor for view.  
+ * Initialize contents from resource.
+ */ 
+void Csymbian_ua_guiSettingItemListView::ConstructL()
+	{
+	// [[[ begin generated region: do not modify [Generated Code]
+	BaseConstructL( R_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_VIEW );
+	// ]]] end generated region [Generated Code]
+	
+	// add your own initialization code here
+	}
+	
+/**
+ * @return The UID for this view
+ */
+TUid Csymbian_ua_guiSettingItemListView::Id() const
+	{
+	return TUid::Uid( ESymbian_ua_guiSettingItemListViewId );
+	}
+
+/**
+ * Handle a command for this view (override)
+ * @param aCommand command id to be handled
+ */
+void Csymbian_ua_guiSettingItemListView::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
+	
+		case EAknSoftkeySave:
+			commandHandled = HandleControlPaneRightSoftKeyPressedL( aCommand );
+			break;
+		case ESymbian_ua_guiSettingItemListViewMenuItem1Command:
+			commandHandled = HandleChangeSelectedSettingItemL( aCommand );
+			break;
+		default:
+			break;
+		}
+	
+		
+	if ( !commandHandled ) 
+		{
+	
+		}
+	// ]]] end generated region [Generated Code]
+	
+	}
+
+/**
+ *	Handles user actions during activation of the view, 
+ *	such as initializing the content.
+ */
+void Csymbian_ua_guiSettingItemListView::DoActivateL(
+		const TVwsViewId& /*aPrevViewId*/,
+		TUid /*aCustomMessageId*/,
+		const TDesC8& /*aCustomMessage*/ )
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	SetupStatusPaneL();
+	
+	CEikButtonGroupContainer* cba = AppUi()->Cba();
+	if ( cba != NULL ) 
+		{
+		cba->MakeVisible( EFalse );
+		}
+	
+	if ( iSymbian_ua_guiSettingItemList == NULL )
+		{
+		iSettings = TSymbian_ua_guiSettingItemListSettings::NewL();
+		iSymbian_ua_guiSettingItemList = new ( ELeave ) CSymbian_ua_guiSettingItemList( *iSettings, this );
+		iSymbian_ua_guiSettingItemList->SetMopParent( this );
+		iSymbian_ua_guiSettingItemList->ConstructFromResourceL( R_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_SYMBIAN_UA_GUI_SETTING_ITEM_LIST );
+		iSymbian_ua_guiSettingItemList->ActivateL();
+		iSymbian_ua_guiSettingItemList->LoadSettingValuesL();
+		iSymbian_ua_guiSettingItemList->LoadSettingsL();
+		AppUi()->AddToStackL( *this, iSymbian_ua_guiSettingItemList );
+		} 
+	// ]]] end generated region [Generated Contents]
+	
+	}
+
+/**
+ */
+void Csymbian_ua_guiSettingItemListView::DoDeactivate()
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	CleanupStatusPane();
+	
+	CEikButtonGroupContainer* cba = AppUi()->Cba();
+	if ( cba != NULL ) 
+		{
+		cba->MakeVisible( ETrue );
+		cba->DrawDeferred();
+		}
+	
+	if ( iSymbian_ua_guiSettingItemList != NULL )
+		{
+		AppUi()->RemoveFromStack( iSymbian_ua_guiSettingItemList );
+		delete iSymbian_ua_guiSettingItemList;
+		iSymbian_ua_guiSettingItemList = NULL;
+		delete iSettings;
+		iSettings = NULL;
+		}
+	// ]]] end generated region [Generated Contents]
+	
+	}
+
+// [[[ begin generated function: do not modify
+void Csymbian_ua_guiSettingItemListView::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_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_TITLE_RESOURCE );
+		title->SetFromResourceL( reader );
+		CleanupStack::PopAndDestroy(); // reader internal state
+		}
+				
+	}
+// ]]] end generated function
+
+// [[[ begin generated function: do not modify
+void Csymbian_ua_guiSettingItemListView::CleanupStatusPane()
+	{
+	}
+// ]]] end generated function
+
+/** 
+ * Handle status pane size change for this view (override)
+ */
+void Csymbian_ua_guiSettingItemListView::HandleStatusPaneSizeChange()
+	{
+	CAknView::HandleStatusPaneSizeChange();
+	
+	// this may fail, but we're not able to propagate exceptions here
+	TInt result;
+	TRAP( result, SetupStatusPaneL() ); 
+	}
+	
+/** 
+ * Handle the selected event.
+ * @param aCommand the command id invoked
+ * @return ETrue if the command was handled, EFalse if not
+ */
+TBool Csymbian_ua_guiSettingItemListView::HandleChangeSelectedSettingItemL( TInt aCommand )
+	{
+	iSymbian_ua_guiSettingItemList->ChangeSelectedItemL();
+	return ETrue;
+	}
+								
+/** 
+ * Handle the rightSoftKeyPressed event.
+ * @return ETrue if the command was handled, EFalse if not
+ */
+TBool Csymbian_ua_guiSettingItemListView::HandleControlPaneRightSoftKeyPressedL( TInt aCommand )
+	{
+	TUint8 domain[256] = {0};
+	TPtr8 cDomain(domain, sizeof(domain));
+	TUint8 user[64] = {0};
+	TPtr8 cUser(user, sizeof(user));
+	TUint8 pass[64] = {0};
+	TPtr8 cPass(pass, sizeof(pass));
+	
+	cDomain.Copy(iSettings->Ed_registrar());
+	cUser.Copy(iSettings->Ed_user());
+	cPass.Copy(iSettings->Ed_password());
+	symbian_ua_set_account((char*)domain, (char*)user, (char*)pass, false, false);
+	
+	AppUi()->ActivateLocalViewL(TUid::Uid(ESymbian_ua_guiContainerViewId));
+	return ETrue;
+	}
+
+/** 
+ * Handle the selected event.
+ * @param aCommand the command id invoked
+ * @return ETrue if the command was handled, EFalse if not
+ */
+TBool Csymbian_ua_guiSettingItemListView::HandleCancelMenuItemSelectedL( TInt aCommand )
+	{
+	AppUi()->ActivateLocalViewL(TUid::Uid(ESymbian_ua_guiContainerViewId));
+	return ETrue;
+	}
+				
diff --git a/pjsip-apps/src/symbian_ua_gui/symbian_ua_guiContainer.uidesign b/pjsip-apps/src/symbian_ua_gui/symbian_ua_guiContainer.uidesign
new file mode 100644
index 0000000..3867c1b
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/symbian_ua_guiContainer.uidesign
@@ -0,0 +1,382 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<designerData version="1.1.0">
+  <componentManifest>
+    <manifestEntry id="com.nokia.sdt.series60.CAknView" 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.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.1.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.ContainerBase" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.CEikLabel" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.CCoeControlBase" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.CEikEdwin" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.CEikEdwinBase" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.EditorBase" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.MenuBar" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.MenuBase" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.MenuPane" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.MenuItem" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.MenuItemBase" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.StandardNote" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.NonLayoutBase" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.ConfirmationQuery" version="1.0.0"/>
+  </componentManifest>
+  <property id="com.nokia.sdt.symbian.dm.RESOURCE_DIRECTORY_ID">data</property>
+  <property id="com.nokia.sdt.component.symbian.vendor">com.nokia.series60</property>
+  <property id="com.nokia.sdt.component.symbian.version">3.0.1</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">Csymbian_ua_guiContainerView</property>
+    <compoundProperty id="location">
+      <property id="x">52</property>
+      <property id="y">45</property>
+    </compoundProperty>
+    <property id="optionsMenu" type="componentRef">optionsMenu</property>
+    <property id="name">symbian_ua_guiContainerView</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">66</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_symbian_ua_guiContainerView_1</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="rightId">UNIQUE</property>
+        <property id="leftText" type="i18n">STR_symbian_ua_guiContainerView_7</property>
+        <property id="rightText" type="i18n">STR_symbian_ua_guiContainerView_8</property>
+      </compoundProperty>
+      <property id="name">controlPane</property>
+      <compoundProperty id="size">
+        <property id="width">240</property>
+        <property id="height">32</property>
+      </compoundProperty>
+      <eventBinding id="rightSoftKeyPressed" handlerDisplay="CallSoftKeyPressedL" handlerSymbol="cpp@src//symbian_ua_guiContainerView.cpp/function(Csymbian_ua_guiContainerView::CallSoftKeyPressedL(TInt))"/>
+    </component>
+    <component id="com.nokia.sdt.series60.CCoeControl">
+      <property id="initialFocus" type="componentRef">ed_url</property>
+      <compoundProperty id="location">
+        <property id="y">66</property>
+      </compoundProperty>
+      <property id="className">CSymbian_ua_guiContainer</property>
+      <property id="name">symbian_ua_guiContainer</property>
+      <compoundProperty id="size">
+        <property id="width">240</property>
+        <property id="height">222</property>
+      </compoundProperty>
+      <component id="com.nokia.sdt.series60.CEikLabel">
+        <compoundProperty id="location">
+          <property id="x">2</property>
+          <property id="y">23</property>
+        </compoundProperty>
+        <property id="name">label1</property>
+        <property id="text" type="i18n">STR_symbian_ua_guiContainerView_2</property>
+        <compoundProperty id="size">
+          <property id="width">32</property>
+          <property id="height">28</property>
+        </compoundProperty>
+      </component>
+      <component id="com.nokia.sdt.series60.CEikEdwin">
+        <property id="defaultCase">EAknEditorLowerCase</property>
+        <compoundProperty id="size">
+          <property id="width">197</property>
+          <property id="height">28</property>
+        </compoundProperty>
+        <compoundProperty id="avkonFlags">
+          <property id="EAknEditorFlagNoT9">true</property>
+          <property id="EAknEditorFlagFixedCase">false</property>
+          <property id="EAknEditorFlagNoEditIndicators">false</property>
+          <property id="EAknEditorFlagNoLRNavigation">false</property>
+          <property id="EAknEditorFlagSupressShiftMenu">true</property>
+          <property id="EAknEditorFlagEnableScrollBars">false</property>
+          <property id="EAknEditorFlagMTAutoOverwrite">false</property>
+          <property id="EAknEditorFlagUseSCTNumericCharmap">false</property>
+          <property id="EAknEditorFlagLatinInputModesOnly">false</property>
+          <property id="EAknEditorFlagForceTransparentFepModes">false</property>
+          <property id="EAknEditorFlagAllowEntersWithScrollDown">false</property>
+          <property id="EAknEditorFlagEnablePictographInput">false</property>
+          <property id="EAknEditorFlagFindPane">false</property>
+        </compoundProperty>
+        <compoundProperty id="location">
+          <property id="x">49</property>
+          <property id="y">25</property>
+        </compoundProperty>
+        <compoundProperty id="flags"/>
+        <compoundProperty id="allowedCaseModes"/>
+        <property id="name">ed_url</property>
+        <property id="text" type="i18n">STR_symbian_ua_guiContainerView_4</property>
+        <compoundProperty id="allowedInputModes">
+          <property id="EAknEditorFullWidthTextInputMode">true</property>
+          <property id="EAknEditorFullWidthNumericInputMode">true</property>
+          <property id="EAknEditorHalfWidthTextInputMode">true</property>
+          <property id="EAknEditorTextInputMode">true</property>
+          <property id="EAknEditorNumericInputMode">true</property>
+          <property id="EAknEditorSecretAlphaInputMode">true</property>
+          <property id="EAknEditorFullWidthKatakanaInputMode">false</property>
+          <property id="EAknEditorHiraganaInputMode">false</property>
+          <property id="EAknEditorHiraganaKanjiInputMode">false</property>
+          <property id="EAknEditorKatakanaInputMode">false</property>
+        </compoundProperty>
+        <property id="specialCharacterTable">R_AVKON_URL_SPECIAL_CHARACTER_TABLE_DIALOG</property>
+      </component>
+      <component id="com.nokia.sdt.series60.CEikEdwin">
+        <compoundProperty id="size">
+          <property id="width">235</property>
+          <property id="height">143</property>
+        </compoundProperty>
+        <compoundProperty id="avkonFlags">
+          <property id="EAknEditorFlagNoEditIndicators">true</property>
+          <property id="EAknEditorFlagFixedCase">false</property>
+          <property id="EAknEditorFlagNoT9">false</property>
+          <property id="EAknEditorFlagNoLRNavigation">false</property>
+          <property id="EAknEditorFlagSupressShiftMenu">false</property>
+          <property id="EAknEditorFlagEnableScrollBars">true</property>
+          <property id="EAknEditorFlagMTAutoOverwrite">false</property>
+          <property id="EAknEditorFlagUseSCTNumericCharmap">false</property>
+          <property id="EAknEditorFlagLatinInputModesOnly">false</property>
+          <property id="EAknEditorFlagForceTransparentFepModes">false</property>
+          <property id="EAknEditorFlagAllowEntersWithScrollDown">false</property>
+          <property id="EAknEditorFlagEnablePictographInput">false</property>
+          <property id="EAknEditorFlagFindPane">false</property>
+        </compoundProperty>
+        <compoundProperty id="location">
+          <property id="x">3</property>
+          <property id="y">78</property>
+        </compoundProperty>
+        <compoundProperty id="flags">
+          <property id="EEikEdwinReadOnly">true</property>
+          <property id="EEikEdwinKeepDocument">false</property>
+          <property id="EEikEdwinSegmentedStorage">false</property>
+          <property id="EEikEdwinNoAutoSelection">false</property>
+          <property id="EEikEdwinJustAutoCurEnd">false</property>
+          <property id="EEikEdwinNoWrap">false</property>
+          <property id="EEikEdwinLineCursor">false</property>
+          <property id="EEikEdwinNoHorizScrolling">false</property>
+          <property id="EEikEdwinInclusiveSizeFixed">false</property>
+          <property id="EEikEdwinDisplayOnly">false</property>
+          <property id="EEikEdwinAlwaysShowSelection">false</property>
+          <property id="EEikEdwinAllowPictures">false</property>
+          <property id="EEikEdwinAllowUndo">false</property>
+          <property id="EEikEdwinNoLineOrParaBreaks">false</property>
+          <property id="EEikEdwinOnlyASCIIChars">false</property>
+          <property id="EEikEdwinIgnoreVirtualCursor">false</property>
+          <property id="EEikEdwinAvkonDisableCursor">false</property>
+          <property id="EEikEdwinAlternativeWrapping">false</property>
+          <property id="EEikEdwinResizable">false</property>
+        </compoundProperty>
+        <compoundProperty id="allowedCaseModes"/>
+        <property id="maxLength">2000</property>
+        <property id="name">ed_info</property>
+        <property id="text" type="i18n">STR_symbian_ua_guiContainerView_3</property>
+        <compoundProperty id="allowedInputModes">
+          <property id="EAknEditorKatakanaInputMode">true</property>
+          <property id="EAknEditorFullWidthTextInputMode">true</property>
+          <property id="EAknEditorFullWidthNumericInputMode">true</property>
+          <property id="EAknEditorFullWidthKatakanaInputMode">true</property>
+          <property id="EAknEditorHiraganaKanjiInputMode">true</property>
+          <property id="EAknEditorHalfWidthTextInputMode">true</property>
+        </compoundProperty>
+        <property id="lines">10</property>
+      </component>
+    </component>
+    <component id="com.nokia.sdt.series60.MenuBar">
+      <compoundProperty id="location">
+        <property id="x">3</property>
+        <property id="y">215</property>
+      </compoundProperty>
+      <property id="name">optionsMenu</property>
+      <compoundProperty id="size">
+        <property id="height">73</property>
+        <property id="width">237</property>
+      </compoundProperty>
+      <component id="com.nokia.sdt.series60.MenuPane">
+        <compoundProperty id="location"/>
+        <property id="name">menuPane1</property>
+        <compoundProperty id="size">
+          <property id="height">73</property>
+          <property id="width">237</property>
+        </compoundProperty>
+        <component id="com.nokia.sdt.series60.MenuItem">
+          <compoundProperty id="location">
+            <property id="x">5</property>
+            <property id="y">2</property>
+          </compoundProperty>
+          <property id="name">settingMenuItem</property>
+          <property id="text" type="i18n">STR_symbian_ua_guiContainerView_9</property>
+          <compoundProperty id="size">
+            <property id="width">222</property>
+            <property id="height">33</property>
+          </compoundProperty>
+          <eventBinding id="selected" handlerDisplay="HandleSettingMenuItemSelectedL" handlerSymbol="cpp@src//symbian_ua_guiContainerView.cpp/function(Csymbian_ua_guiContainerView::HandleSettingMenuItemSelectedL(TInt))"/>
+        </component>
+        <component id="com.nokia.sdt.series60.MenuItem">
+          <compoundProperty id="location">
+            <property id="x">5</property>
+            <property id="y">35</property>
+          </compoundProperty>
+          <property id="name">exitMenuItem</property>
+          <property id="text" type="i18n">STR_symbian_ua_guiContainerView_10</property>
+          <property id="command">EAknCmdExit</property>
+          <compoundProperty id="size">
+            <property id="width">222</property>
+            <property id="height">33</property>
+          </compoundProperty>
+        </component>
+      </component>
+    </component>
+    <component id="com.nokia.sdt.series60.StandardNote">
+      <property id="type">CAknErrorNote</property>
+      <compoundProperty id="location">
+        <property id="x">8</property>
+        <property id="y">171</property>
+      </compoundProperty>
+      <property id="name">note_error</property>
+      <property id="text" type="i18n">STR_symbian_ua_guiContainerView_13</property>
+      <compoundProperty id="size">
+        <property id="width">227</property>
+        <property id="height">114</property>
+      </compoundProperty>
+    </component>
+    <component id="com.nokia.sdt.series60.StandardNote">
+      <property id="type">CAknInformationNote</property>
+      <compoundProperty id="location">
+        <property id="x">8</property>
+        <property id="y">171</property>
+      </compoundProperty>
+      <property id="name">note_info</property>
+      <property id="text" type="i18n">STR_symbian_ua_guiContainerView_16</property>
+      <compoundProperty id="size">
+        <property id="width">227</property>
+        <property id="height">114</property>
+      </compoundProperty>
+    </component>
+    <component id="com.nokia.sdt.series60.StandardNote">
+      <property id="type">CAknWarningNote</property>
+      <compoundProperty id="location">
+        <property id="x">8</property>
+        <property id="y">171</property>
+      </compoundProperty>
+      <property id="name">note_warning</property>
+      <property id="text" type="i18n">STR_symbian_ua_guiContainerView_17</property>
+      <compoundProperty id="size">
+        <property id="width">227</property>
+        <property id="height">114</property>
+      </compoundProperty>
+    </component>
+    <component id="com.nokia.sdt.series60.ConfirmationQuery">
+      <compoundProperty id="location">
+        <property id="x">0</property>
+        <property id="y">171</property>
+      </compoundProperty>
+      <property id="name">qry_accept_call</property>
+      <property id="text" type="i18n">STR_symbian_ua_guiContainerView_18</property>
+      <compoundProperty id="size">
+        <property id="width">240</property>
+        <property id="height">149</property>
+      </compoundProperty>
+    </component>
+  </component>
+  <stringBundle>
+    <stringTable language="LANG_English">
+      <string id="STR_symbian_ua_guiContainerView_1">PJSUA for S60</string>
+      <string id="STR_symbian_ua_guiContainerView_2">URL</string>
+      <string id="STR_symbian_ua_guiContainerView_4">sip:</string>
+      <string id="STR_symbian_ua_guiContainerView_7">Options</string>
+      <string id="STR_symbian_ua_guiContainerView_8">Call</string>
+      <string id="STR_symbian_ua_guiContainerView_9">Setting</string>
+      <string id="STR_symbian_ua_guiContainerView_10">Exit</string>
+      <string id="STR_symbian_ua_guiContainerView_3"/>
+      <string id="STR_symbian_ua_guiContainerView_13">Failed initializing PJSUA!</string>
+      <string id="STR_symbian_ua_guiContainerView_16">Register Success</string>
+      <string id="STR_symbian_ua_guiContainerView_17">Register Failed</string>
+      <string id="STR_symbian_ua_guiContainerView_18">Accept Call</string>
+    </stringTable>
+  </stringBundle>
+  <macroTable/>
+  <sourceMappingState>
+    <resourceMappings>
+      <resourceMapping instanceName="qry_accept_call">r_symbian_ua_gui_container_qry_accept_call</resourceMapping>
+      <resourceMapping instanceName="note_warning">r_symbian_ua_gui_container_note_warning</resourceMapping>
+      <resourceMapping instanceName="ed_info" rsrcId="text">r_symbian_ua_gui_container_ed_info_2</resourceMapping>
+      <resourceMapping instanceName="optionsMenu">r_symbian_ua_gui_container_options_menu</resourceMapping>
+      <resourceMapping instanceName="menuPane1">r_symbian_ua_gui_container_menu_pane1_menu_pane</resourceMapping>
+      <resourceMapping instanceName="title">r_symbian_ua_gui_container_title_resource</resourceMapping>
+      <resourceMapping instanceName="statusPane">r_symbian_ua_gui_container_status_pane</resourceMapping>
+      <resourceMapping instanceName="ed_url">r_symbian_ua_gui_container_ed_url</resourceMapping>
+      <resourceMapping instanceName="symbian_ua_guiContainerView">r_symbian_ua_gui_container_symbian_ua_gui_container_view</resourceMapping>
+      <resourceMapping instanceName="label1">r_symbian_ua_gui_container_label1</resourceMapping>
+      <resourceMapping instanceName="controlPane">r_symbian_ua_gui_container_control_pane</resourceMapping>
+      <resourceMapping instanceName="ed_url" rsrcId="text">r_symbian_ua_gui_container_ed_url_2</resourceMapping>
+      <resourceMapping instanceName="note_info">r_symbian_ua_gui_container_note_info</resourceMapping>
+      <resourceMapping instanceName="note_error">r_symbian_ua_gui_container_note_error</resourceMapping>
+      <resourceMapping instanceName="ed_info">r_symbian_ua_gui_container_ed_info</resourceMapping>
+    </resourceMappings>
+    <enumMappings>
+      <enumMapping instanceName="title" propertyId="" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_CONTROL_TYPE">EAknCtTitlePane</enumMapping>
+      <enumMapping instanceName="settingMenuItem" propertyId="command" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_COMMANDS">ESymbian_ua_guiContainerViewSettingMenuItemCommand</enumMapping>
+      <enumMapping instanceName="ed_info" propertyId="numericKeymap">EAknEditorStandardNumberModeKeymap</enumMapping>
+      <enumMapping instanceName="label1" propertyId="font">EEikLabelFontNormal</enumMapping>
+      <enumMapping instanceName="ed_url" propertyId="defaultCase">EAknEditorLowerCase</enumMapping>
+      <enumMapping instanceName="symbian_ua_guiContainerView" propertyId="" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_VIEW_UID">ESymbian_ua_guiContainerViewId</enumMapping>
+      <enumMapping instanceName="label1" propertyId="alignment">EEikLabelAlignHCenter</enumMapping>
+      <enumMapping instanceName="controlPane" propertyId="leftId" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_COMMANDS">EAknSoftkeyOptions</enumMapping>
+      <enumMapping instanceName="qry_accept_call" propertyId="" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_DIALOG_LINE_ID">ESymbian_ua_guiContainerViewQry_accept_call</enumMapping>
+      <enumMapping instanceName="controlPane" propertyId="rightId" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_COMMANDS">ESymbian_ua_guiContainerViewControlPaneRightId</enumMapping>
+      <enumMapping instanceName="exitMenuItem" propertyId="command" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_COMMANDS">EAknCmdExit</enumMapping>
+      <enumMapping instanceName="title" propertyId="" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_STATUS_PANE_ID">EEikStatusPaneUidTitle</enumMapping>
+      <enumMapping instanceName="ed_url" propertyId="numericKeymap">EAknEditorStandardNumberModeKeymap</enumMapping>
+      <enumMapping instanceName="ed_info" propertyId="defaultInputMode">EAknEditorTextInputMode</enumMapping>
+      <enumMapping instanceName="ed_url" propertyId="defaultInputMode">EAknEditorTextInputMode</enumMapping>
+      <enumMapping instanceName="ed_info" propertyId="defaultCase">EAknEditorTextCase</enumMapping>
+    </enumMappings>
+    <arrayMappings/>
+  </sourceMappingState>
+  <generatedFiles>
+    <file>inc/symbian_ua_guiContainer.h</file>
+    <file>inc/symbian_ua_guiContainerView.h</file>
+    <file>src/symbian_ua_guiContainerView.cpp</file>
+    <file>src/symbian_ua_guiContainer.cpp</file>
+    <file>data/symbian_ua_gui.rss</file>
+    <file>data/symbian_ua_guiContainer.rssi</file>
+    <file>inc/symbian_ua_gui.hrh</file>
+    <file>inc/symbian_ua_guiContainer.hrh</file>
+    <file>data/symbian_ua_guiSettingItemList.rssi</file>
+    <file>inc/symbian_ua_guiSettingItemList.hrh</file>
+    <file>data/symbian_ua_gui.loc</file>
+    <file>data/symbian_ua_gui.l01</file>
+    <file>data/symbian_ua_guiContainer.loc</file>
+    <file>data/symbian_ua_guiContainer.l01</file>
+    <file>data/symbian_ua_guiSettingItemList.loc</file>
+    <file>data/symbian_ua_guiSettingItemList.l01</file>
+  </generatedFiles>
+</designerData>
diff --git a/pjsip-apps/src/symbian_ua_gui/symbian_ua_guiSettingItemList.uidesign b/pjsip-apps/src/symbian_ua_gui/symbian_ua_guiSettingItemList.uidesign
new file mode 100644
index 0000000..95962b6
--- /dev/null
+++ b/pjsip-apps/src/symbian_ua_gui/symbian_ua_guiSettingItemList.uidesign
@@ -0,0 +1,380 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<designerData version="1.1.0">
+  <componentManifest>
+    <manifestEntry id="com.nokia.sdt.series60.CAknView" 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.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.CAknSettingItemList" version="1.1.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.ContainerBase" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.CEikEdwin" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.CEikEdwinBase" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.EditorBase" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.CCoeControlBase" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.SecretEditor" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.CAknBinaryPopupSettingItem" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.EnumeratedTextPopupBase" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.MenuBar" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.MenuBase" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.MenuPane" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.MenuItem" version="1.0.0"/>
+    <manifestEntry id="com.nokia.sdt.series60.MenuItemBase" version="1.0.0"/>
+  </componentManifest>
+  <property id="com.nokia.sdt.symbian.dm.RESOURCE_DIRECTORY_ID">data</property>
+  <property id="com.nokia.sdt.component.symbian.vendor">com.nokia.series60</property>
+  <property id="com.nokia.sdt.component.symbian.version">3.0.1</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">Csymbian_ua_guiSettingItemListView</property>
+    <compoundProperty id="location">
+      <property id="x">52</property>
+      <property id="y">45</property>
+    </compoundProperty>
+    <property id="optionsMenu" type="componentRef">optionsMenu</property>
+    <property id="name">symbian_ua_guiSettingItemListView</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">66</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_symbian_ua_guiSettingItemListView_2</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_symbian_ua_guiSettingItemListView_140</property>
+        <property id="rightText" type="i18n">STR_symbian_ua_guiSettingItemListView_141</property>
+        <property id="rightId">EAknSoftkeySave</property>
+      </compoundProperty>
+      <property id="name">controlPane</property>
+      <compoundProperty id="size">
+        <property id="width">240</property>
+        <property id="height">32</property>
+      </compoundProperty>
+      <eventBinding id="rightSoftKeyPressed" handlerDisplay="HandleControlPaneRightSoftKeyPressedL" handlerSymbol="cpp@src//symbian_ua_guiSettingItemListView.cpp/function(Csymbian_ua_guiSettingItemListView::HandleControlPaneRightSoftKeyPressedL(TInt))"/>
+    </component>
+    <component id="com.nokia.sdt.series60.CAknSettingItemList">
+      <compoundProperty id="size">
+        <property id="width">240</property>
+        <property id="height">222</property>
+      </compoundProperty>
+      <property id="className">CSymbian_ua_guiSettingItemList</property>
+      <compoundProperty id="location">
+        <property id="y">66</property>
+      </compoundProperty>
+      <property id="EAknSettingItemNumberedStyle">false</property>
+      <property id="title" type="i18n">STR_symbian_ua_guiSettingItemListView_1</property>
+      <property id="name">symbian_ua_guiSettingItemList</property>
+      <property id="exitsApp">false</property>
+      <component id="com.nokia.sdt.series60.CEikEdwin">
+        <compoundProperty id="size">
+          <property id="height">58</property>
+          <property id="width">240</property>
+        </compoundProperty>
+        <property id="defaultCase">EAknEditorLowerCase</property>
+        <compoundProperty id="avkonFlags"/>
+        <compoundProperty id="location">
+          <property id="x">0</property>
+          <property id="y">0</property>
+        </compoundProperty>
+        <property id="itemTitle" type="i18n">STR_symbian_ua_guiSettingItemListView_5</property>
+        <compoundProperty id="flags"/>
+        <compoundProperty id="allowedCaseModes"/>
+        <property id="name">ed_registrar</property>
+        <property id="text" type="i18n">STR_symbian_ua_guiSettingItemListView_3</property>
+        <compoundProperty id="allowedInputModes">
+          <property id="EAknEditorKatakanaInputMode">true</property>
+          <property id="EAknEditorFullWidthTextInputMode">true</property>
+          <property id="EAknEditorFullWidthNumericInputMode">true</property>
+          <property id="EAknEditorFullWidthKatakanaInputMode">true</property>
+          <property id="EAknEditorHiraganaKanjiInputMode">true</property>
+          <property id="EAknEditorHalfWidthTextInputMode">true</property>
+        </compoundProperty>
+      </component>
+      <component id="com.nokia.sdt.series60.CEikEdwin">
+        <compoundProperty id="size">
+          <property id="height">58</property>
+          <property id="width">240</property>
+        </compoundProperty>
+        <property id="defaultCase">EAknEditorLowerCase</property>
+        <compoundProperty id="avkonFlags"/>
+        <compoundProperty id="location">
+          <property id="x">0</property>
+          <property id="y">58</property>
+        </compoundProperty>
+        <property id="itemTitle" type="i18n">STR_symbian_ua_guiSettingItemListView_8</property>
+        <compoundProperty id="flags"/>
+        <compoundProperty id="allowedCaseModes"/>
+        <property id="name">ed_user</property>
+        <property id="text" type="i18n">STR_symbian_ua_guiSettingItemListView_7</property>
+        <compoundProperty id="allowedInputModes">
+          <property id="EAknEditorKatakanaInputMode">true</property>
+          <property id="EAknEditorFullWidthTextInputMode">true</property>
+          <property id="EAknEditorFullWidthNumericInputMode">true</property>
+          <property id="EAknEditorFullWidthKatakanaInputMode">true</property>
+          <property id="EAknEditorHiraganaKanjiInputMode">true</property>
+          <property id="EAknEditorHalfWidthTextInputMode">true</property>
+        </compoundProperty>
+      </component>
+      <component id="com.nokia.sdt.series60.SecretEditor">
+        <property id="maxLength">32</property>
+        <compoundProperty id="location">
+          <property id="x">0</property>
+          <property id="y">116</property>
+        </compoundProperty>
+        <property id="name">ed_password</property>
+        <property id="itemTitle" type="i18n">STR_symbian_ua_guiSettingItemListView_16</property>
+        <compoundProperty id="size">
+          <property id="height">58</property>
+          <property id="width">240</property>
+        </compoundProperty>
+      </component>
+      <component id="com.nokia.sdt.series60.CAknBinaryPopupSettingItem">
+        <sequenceProperty id="items">
+          <compoundElement>
+            <property id="settingText" type="i18n">STR_symbian_ua_guiSettingItemListView_25</property>
+            <property id="popupText" type="i18n">STR_symbian_ua_guiSettingItemListView_26</property>
+            <property id="value">1</property>
+          </compoundElement>
+          <compoundElement>
+            <property id="settingText" type="i18n">STR_symbian_ua_guiSettingItemListView_27</property>
+            <property id="popupText" type="i18n">STR_symbian_ua_guiSettingItemListView_28</property>
+          </compoundElement>
+        </sequenceProperty>
+        <compoundProperty id="size">
+          <property id="height">0</property>
+          <property id="width">240</property>
+        </compoundProperty>
+        <compoundProperty id="location">
+          <property id="x">0</property>
+          <property id="y">174</property>
+        </compoundProperty>
+        <property id="itemTitle" type="i18n">STR_symbian_ua_guiSettingItemListView_24</property>
+        <property id="active">1</property>
+        <property id="name">b_srtp</property>
+        <property id="itemHidden">true</property>
+      </component>
+      <component id="com.nokia.sdt.series60.CAknBinaryPopupSettingItem">
+        <sequenceProperty id="items">
+          <compoundElement>
+            <property id="settingText" type="i18n">STR_symbian_ua_guiSettingItemListView_47</property>
+            <property id="popupText" type="i18n">STR_symbian_ua_guiSettingItemListView_48</property>
+            <property id="value">1</property>
+          </compoundElement>
+          <compoundElement>
+            <property id="settingText" type="i18n">STR_symbian_ua_guiSettingItemListView_49</property>
+            <property id="popupText" type="i18n">STR_symbian_ua_guiSettingItemListView_50</property>
+          </compoundElement>
+        </sequenceProperty>
+        <compoundProperty id="size">
+          <property id="height">0</property>
+          <property id="width">240</property>
+        </compoundProperty>
+        <compoundProperty id="location">
+          <property id="x">0</property>
+          <property id="y">174</property>
+        </compoundProperty>
+        <property id="itemTitle" type="i18n">STR_symbian_ua_guiSettingItemListView_46</property>
+        <property id="active">1</property>
+        <property id="name">b_ice</property>
+        <property id="itemHidden">true</property>
+      </component>
+      <component id="com.nokia.sdt.series60.CEikEdwin">
+        <compoundProperty id="size">
+          <property id="height">0</property>
+          <property id="width">240</property>
+        </compoundProperty>
+        <compoundProperty id="avkonFlags"/>
+        <compoundProperty id="location">
+          <property id="x">0</property>
+          <property id="y">174</property>
+        </compoundProperty>
+        <property id="itemTitle" type="i18n">STR_symbian_ua_guiSettingItemListView_19</property>
+        <compoundProperty id="flags"/>
+        <compoundProperty id="allowedCaseModes"/>
+        <property id="name">ed_stun_server</property>
+        <property id="text" type="i18n">STR_symbian_ua_guiSettingItemListView_18</property>
+        <property id="itemHidden">true</property>
+        <compoundProperty id="allowedInputModes">
+          <property id="EAknEditorKatakanaInputMode">true</property>
+          <property id="EAknEditorFullWidthTextInputMode">true</property>
+          <property id="EAknEditorFullWidthNumericInputMode">true</property>
+          <property id="EAknEditorFullWidthKatakanaInputMode">true</property>
+          <property id="EAknEditorHiraganaKanjiInputMode">true</property>
+          <property id="EAknEditorHalfWidthTextInputMode">true</property>
+        </compoundProperty>
+      </component>
+    </component>
+    <component id="com.nokia.sdt.series60.MenuBar">
+      <compoundProperty id="location">
+        <property id="x">3</property>
+        <property id="y">248</property>
+      </compoundProperty>
+      <property id="name">optionsMenu</property>
+      <compoundProperty id="size">
+        <property id="height">40</property>
+        <property id="width">237</property>
+      </compoundProperty>
+      <component id="com.nokia.sdt.series60.MenuPane">
+        <compoundProperty id="location"/>
+        <property id="name">menuPane1</property>
+        <compoundProperty id="size">
+          <property id="height">40</property>
+          <property id="width">237</property>
+        </compoundProperty>
+        <component id="com.nokia.sdt.series60.MenuItem">
+          <compoundProperty id="location">
+            <property id="x">5</property>
+            <property id="y">2</property>
+          </compoundProperty>
+          <property id="name">menuItem1</property>
+          <property id="text" type="i18n">STR_symbian_ua_guiSettingItemListView_4</property>
+          <compoundProperty id="size">
+            <property id="width">222</property>
+            <property id="height">33</property>
+          </compoundProperty>
+          <eventBinding id="selected" handlerDisplay="HandleChangeSelectedSettingItemL" handlerSymbol="cpp@src//symbian_ua_guiSettingItemListView.cpp/function(Csymbian_ua_guiSettingItemListView::HandleChangeSelectedSettingItemL(TInt))"/>
+        </component>
+      </component>
+    </component>
+  </component>
+  <stringBundle>
+    <stringTable language="LANG_English">
+      <string id="STR_symbian_ua_guiSettingItemListView_1">Settings</string>
+      <string id="STR_symbian_ua_guiSettingItemListView_2">Account Settings</string>
+      <string id="STR_symbian_ua_guiSettingItemListView_4">Change</string>
+      <string id="STR_symbian_ua_guiSettingItemListView_3"/>
+      <string id="STR_symbian_ua_guiSettingItemListView_5">Registrar</string>
+      <string id="STR_symbian_ua_guiSettingItemListView_7"/>
+      <string id="STR_symbian_ua_guiSettingItemListView_8">User</string>
+      <string id="STR_symbian_ua_guiSettingItemListView_16">Password</string>
+      <string id="STR_symbian_ua_guiSettingItemListView_18"/>
+      <string id="STR_symbian_ua_guiSettingItemListView_19">STUN Server</string>
+      <string id="STR_symbian_ua_guiSettingItemListView_24">SRTP</string>
+      <string id="STR_symbian_ua_guiSettingItemListView_25">On</string>
+      <string id="STR_symbian_ua_guiSettingItemListView_26">Popup text for On</string>
+      <string id="STR_symbian_ua_guiSettingItemListView_27">Off</string>
+      <string id="STR_symbian_ua_guiSettingItemListView_28">Popup text for Off</string>
+      <string id="STR_symbian_ua_guiSettingItemListView_46">ICE</string>
+      <string id="STR_symbian_ua_guiSettingItemListView_47">On</string>
+      <string id="STR_symbian_ua_guiSettingItemListView_48">Popup text for On</string>
+      <string id="STR_symbian_ua_guiSettingItemListView_49">Off</string>
+      <string id="STR_symbian_ua_guiSettingItemListView_50">Popup text for Off</string>
+      <string id="STR_symbian_ua_guiSettingItemListView_140">Options</string>
+      <string id="STR_symbian_ua_guiSettingItemListView_141">Done</string>
+    </stringTable>
+  </stringBundle>
+  <macroTable/>
+  <sourceMappingState>
+    <resourceMappings>
+      <resourceMapping instanceName="b_srtp" rsrcId="member$setting_page_resource">r_symbian_ua_gui_setting_item_list_b_srtp_setting_page_resource</resourceMapping>
+      <resourceMapping instanceName="ed_stun_server">r_symbian_ua_gui_setting_item_list_ed_stun_server_editor_resource_id</resourceMapping>
+      <resourceMapping instanceName="b_ice" rsrcId="setting">r_symbian_ua_gui_setting_item_list_b_ice_setting_texts_resource</resourceMapping>
+      <resourceMapping instanceName="ed_registrar">r_symbian_ua_gui_setting_item_list_ed_registrar_editor_resource_id</resourceMapping>
+      <resourceMapping instanceName="ed_user" rsrcId="text">r_symbian_ua_gui_setting_item_list_ed_user</resourceMapping>
+      <resourceMapping instanceName="b_srtp" rsrcId="popup">r_symbian_ua_gui_setting_item_list_b_srtp_popped_up_texts_resource</resourceMapping>
+      <resourceMapping instanceName="ed_stun_server" rsrcId="text">r_symbian_ua_gui_setting_item_list_ed_stun_server</resourceMapping>
+      <resourceMapping instanceName="optionsMenu">r_symbian_ua_gui_setting_item_list_options_menu</resourceMapping>
+      <resourceMapping instanceName="ed_password" rsrcId="member$setting_page_resource">r_symbian_ua_gui_setting_item_list_ed_password_setting_page_resource</resourceMapping>
+      <resourceMapping instanceName="b_ice" rsrcId="popup">r_symbian_ua_gui_setting_item_list_b_ice_popped_up_texts_resource</resourceMapping>
+      <resourceMapping instanceName="symbian_ua_guiSettingItemListView">r_symbian_ua_gui_setting_item_list_symbian_ua_gui_setting_item_list_view</resourceMapping>
+      <resourceMapping instanceName="ed_password">r_symbian_ua_gui_setting_item_list_ed_password_editor_resource_id</resourceMapping>
+      <resourceMapping instanceName="symbian_ua_guiSettingItemList">r_symbian_ua_gui_setting_item_list_symbian_ua_gui_setting_item_list</resourceMapping>
+      <resourceMapping instanceName="b_ice" rsrcId="member$setting_page_resource">r_symbian_ua_gui_setting_item_list_b_ice_setting_page_resource</resourceMapping>
+      <resourceMapping instanceName="statusPane">r_symbian_ua_gui_setting_item_list_status_pane</resourceMapping>
+      <resourceMapping instanceName="b_ice">r_symbian_ua_gui_setting_item_list_b_ice_editor_resource_id</resourceMapping>
+      <resourceMapping instanceName="ed_user">r_symbian_ua_gui_setting_item_list_ed_user_editor_resource_id</resourceMapping>
+      <resourceMapping instanceName="b_srtp" rsrcId="associated">r_symbian_ua_gui_setting_item_list_b_srtp</resourceMapping>
+      <resourceMapping instanceName="ed_registrar" rsrcId="text">r_symbian_ua_gui_setting_item_list_ed_registrar</resourceMapping>
+      <resourceMapping instanceName="b_srtp">r_symbian_ua_gui_setting_item_list_b_srtp_editor_resource_id</resourceMapping>
+      <resourceMapping instanceName="b_srtp" rsrcId="setting">r_symbian_ua_gui_setting_item_list_b_srtp_setting_texts_resource</resourceMapping>
+      <resourceMapping instanceName="ed_registrar" rsrcId="member$setting_page_resource">r_symbian_ua_gui_setting_item_list_ed_registrar_setting_page_resource</resourceMapping>
+      <resourceMapping instanceName="menuPane1">r_symbian_ua_gui_setting_item_list_menu_pane1_menu_pane</resourceMapping>
+      <resourceMapping instanceName="ed_user" rsrcId="member$setting_page_resource">r_symbian_ua_gui_setting_item_list_ed_user_setting_page_resource</resourceMapping>
+      <resourceMapping instanceName="controlPane">r_symbian_ua_gui_setting_item_list_control_pane</resourceMapping>
+      <resourceMapping instanceName="title">r_symbian_ua_gui_setting_item_list_title_resource</resourceMapping>
+      <resourceMapping instanceName="ed_stun_server" rsrcId="member$setting_page_resource">r_symbian_ua_gui_setting_item_list_ed_stun_server_setting_page_resource</resourceMapping>
+      <resourceMapping instanceName="b_ice" rsrcId="associated">r_symbian_ua_gui_setting_item_list_b_ice</resourceMapping>
+    </resourceMappings>
+    <enumMappings>
+      <enumMapping instanceName="menuItem1" propertyId="command" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_COMMANDS">ESymbian_ua_guiSettingItemListViewMenuItem1Command</enumMapping>
+      <enumMapping instanceName="ed_password" propertyId="" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_SETTING_ITEM_ID">ESymbian_ua_guiSettingItemListViewEd_password</enumMapping>
+      <enumMapping instanceName="ed_user" propertyId="" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_CONTROL_TYPE">EEikCtEdwin</enumMapping>
+      <enumMapping instanceName="ed_stun_server" propertyId="" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_SETTING_ITEM_ID">ESymbian_ua_guiSettingItemListViewEd_stun_server</enumMapping>
+      <enumMapping instanceName="title" propertyId="" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_STATUS_PANE_ID">EEikStatusPaneUidTitle</enumMapping>
+      <enumMapping instanceName="ed_user" propertyId="defaultCase">EAknEditorLowerCase</enumMapping>
+      <enumMapping instanceName="b_ice" propertyId="" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_SETTING_ITEM_ID">ESymbian_ua_guiSettingItemListViewB_ice</enumMapping>
+      <enumMapping instanceName="ed_user" propertyId="numericKeymap">EAknEditorStandardNumberModeKeymap</enumMapping>
+      <enumMapping instanceName="ed_stun_server" propertyId="" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_CONTROL_TYPE">EEikCtEdwin</enumMapping>
+      <enumMapping instanceName="b_srtp" propertyId="" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_SETTING_ITEM_ID">ESymbian_ua_guiSettingItemListViewB_srtp</enumMapping>
+      <enumMapping instanceName="ed_user" propertyId="defaultInputMode">EAknEditorTextInputMode</enumMapping>
+      <enumMapping instanceName="ed_registrar" propertyId="numericKeymap">EAknEditorStandardNumberModeKeymap</enumMapping>
+      <enumMapping instanceName="b_srtp" propertyId="" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_CONTROL_TYPE">EAknCtPopupSettingList</enumMapping>
+      <enumMapping instanceName="ed_registrar" propertyId="defaultInputMode">EAknEditorTextInputMode</enumMapping>
+      <enumMapping instanceName="title" propertyId="" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_CONTROL_TYPE">EAknCtTitlePane</enumMapping>
+      <enumMapping instanceName="symbian_ua_guiSettingItemListView" propertyId="" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_VIEW_UID">ESymbian_ua_guiSettingItemListViewId</enumMapping>
+      <enumMapping instanceName="ed_registrar" propertyId="defaultCase">EAknEditorLowerCase</enumMapping>
+      <enumMapping instanceName="ed_password" propertyId="" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_CONTROL_TYPE">EEikCtSecretEd</enumMapping>
+      <enumMapping instanceName="controlPane" propertyId="leftId" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_COMMANDS">EAknSoftkeyOptions</enumMapping>
+      <enumMapping instanceName="ed_user" propertyId="" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_SETTING_ITEM_ID">ESymbian_ua_guiSettingItemListViewEd_user</enumMapping>
+      <enumMapping instanceName="controlPane" propertyId="rightId" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_COMMANDS">EAknSoftkeySave</enumMapping>
+      <enumMapping instanceName="ed_stun_server" propertyId="numericKeymap">EAknEditorStandardNumberModeKeymap</enumMapping>
+      <enumMapping instanceName="save_SettingsMenuItem" propertyId="command" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_COMMANDS">ESymbian_ua_guiSettingItemListViewSave_SettingsMenuItemCommand</enumMapping>
+      <enumMapping instanceName="ed_registrar" propertyId="" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_SETTING_ITEM_ID">ESymbian_ua_guiSettingItemListViewEd_registrar</enumMapping>
+      <enumMapping instanceName="ed_stun_server" propertyId="defaultInputMode">EAknEditorTextInputMode</enumMapping>
+      <enumMapping instanceName="b_ice" propertyId="" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_CONTROL_TYPE">EAknCtPopupSettingList</enumMapping>
+      <enumMapping instanceName="ed_registrar" propertyId="" nameAlgorithm="com.nokia.sdt.component.symbian.NAME_ALG_CONTROL_TYPE">EEikCtEdwin</enumMapping>
+      <enumMapping instanceName="ed_stun_server" propertyId="defaultCase">EAknEditorTextCase</enumMapping>
+    </enumMappings>
+    <arrayMappings/>
+  </sourceMappingState>
+  <generatedFiles>
+    <file>src/symbian_ua_guiSettingItemList.cpp</file>
+    <file>src/Symbian_ua_guiSettingItemListSets.cpp</file>
+    <file>src/symbian_ua_guiSettingItemListView.cpp</file>
+    <file>inc/Symbian_ua_guiSettingItemListSettings.h</file>
+    <file>inc/symbian_ua_guiSettingItemList.h</file>
+    <file>inc/symbian_ua_guiSettingItemListView.h</file>
+    <file>data/symbian_ua_gui.rss</file>
+    <file>data/symbian_ua_guiContainer.rssi</file>
+    <file>inc/symbian_ua_gui.hrh</file>
+    <file>inc/symbian_ua_guiContainer.hrh</file>
+    <file>data/symbian_ua_guiSettingItemList.rssi</file>
+    <file>inc/symbian_ua_guiSettingItemList.hrh</file>
+    <file>data/symbian_ua_gui.loc</file>
+    <file>data/symbian_ua_gui.l01</file>
+    <file>data/symbian_ua_guiContainer.loc</file>
+    <file>data/symbian_ua_guiContainer.l01</file>
+    <file>data/symbian_ua_guiSettingItemList.loc</file>
+    <file>data/symbian_ua_guiSettingItemList.l01</file>
+  </generatedFiles>
+</designerData>
