diff --git a/pjlib/include/pj/config_site_sample.h b/pjlib/include/pj/config_site_sample.h
index 44e791b..30c0e37 100644
--- a/pjlib/include/pj/config_site_sample.h
+++ b/pjlib/include/pj/config_site_sample.h
@@ -31,6 +31,8 @@
     /* Speex default quality settings */
 #   define PJSUA_DEFAULT_CODEC_QUALITY	5
 #   define PJMEDIA_CODEC_SPEEX_DEFAULT_QUALITY	5
+
+#   define PJMEDIA_SDP_NEG_PREFER_REMOTE_CODEC_ORDER	0
 #endif
 
 
diff --git a/pjsip-apps/src/pocketpj/PocketPJ.rc b/pjsip-apps/src/pocketpj/PocketPJ.rc
index 4e55172..f5488fd 100644
--- a/pjsip-apps/src/pocketpj/PocketPJ.rc
+++ b/pjsip-apps/src/pocketpj/PocketPJ.rc
@@ -79,7 +79,7 @@
 // Dialog
 //
 
-IDD_POCKETPJ_DIALOG DIALOG DISCARDABLE  0, 0, 139, 151
+IDD_POCKETPJ_DIALOG DIALOGEX 0, 0, 139, 151
 STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION
 EXSTYLE WS_EX_APPWINDOW | 0x80000000L
 CAPTION "PocketPJ"
@@ -87,7 +87,7 @@
 BEGIN
     LTEXT           "sip:user@pjsip.lab",IDC_ACC_ID,22,5,115,8
     CONTROL         135,IDC_BTN_ACC,"Static",SS_BITMAP | SS_NOTIFY | 
-                    WS_TABSTOP,7,3,12,11
+                    WS_BORDER | WS_TABSTOP,7,3,12,11
     CONTROL         "List1",IDC_BUDDY_LIST,"SysListView32",LVS_SMALLICON | 
                     LVS_SINGLESEL | LVS_SORTASCENDING | WS_BORDER | 
                     WS_TABSTOP,7,35,127,109
@@ -97,33 +97,43 @@
                     WS_BORDER,125,16,12,11
 END
 
-IDD_SETTING DIALOG DISCARDABLE  0, 0, 140, 127
+IDD_SETTING DIALOG DISCARDABLE  0, 0, 140, 143
 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION "PocketPJ Settings.."
 FONT 8, "System"
 BEGIN
-    LTEXT           "Domain:",IDC_STATIC,7,8,30,9
     EDITTEXT        IDC_DOMAIN,38,7,78,12,ES_AUTOHSCROLL
     EDITTEXT        IDC_USER,38,21,78,12,ES_AUTOHSCROLL
     EDITTEXT        IDC_PASSWD,38,35,78,12,ES_PASSWORD | ES_AUTOHSCROLL
+    EDITTEXT        IDC_DNS,38,49,78,12,ES_AUTOHSCROLL
+    EDITTEXT        IDC_STUN_SRV,56,64,77,12,ES_AUTOHSCROLL
+    CONTROL         "ICE",IDC_ICE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,79,
+                    24,10
+    CONTROL         "TCP",IDC_TCP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,33,
+                    79,24,10
+    CONTROL         "SRTP",IDC_SRTP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,61,
+                    79,29,10
+    CONTROL         "PUBLISH",IDC_PUBLISH,"Button",BS_AUTOCHECKBOX | 
+                    WS_TABSTOP,93,79,40,10
+    CONTROL         "EC, tail:",IDC_ECHO_SUPPRESS,"Button",BS_AUTOCHECKBOX | 
+                    WS_TABSTOP,7,92,37,10
+    EDITTEXT        IDC_EC_TAIL,47,91,23,12,ES_AUTOHSCROLL
+    CONTROL         "VAD",IDC_VAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,93,
+                    92,25,10
+    COMBOBOX        IDC_CODECS,59,105,42,39,CBS_DROPDOWNLIST | WS_VSCROLL | 
+                    WS_TABSTOP
+    PUSHBUTTON      "OK",IDOK,17,122,50,14
+    PUSHBUTTON      "Cancel",IDCANCEL,73,122,50,14
+    LTEXT           "Domain:",IDC_STATIC,7,8,30,9
     LTEXT           "User:",IDC_STATIC,7,22,30,9
     LTEXT           "Passwd:",IDC_STATIC,7,36,30,9
     CONTROL         "STUN Srv:",IDC_STUN,"Button",BS_AUTOCHECKBOX | 
                     WS_TABSTOP,7,65,47,10
-    EDITTEXT        IDC_STUN_SRV,56,64,77,12,ES_AUTOHSCROLL
-    CONTROL         "ICE",IDC_ICE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,79,
-                    27,10
-    CONTROL         "SRTP",IDC_SRTP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,47,
-                    79,33,10
-    CONTROL         "PUBLISH",IDC_PUBLISH,"Button",BS_AUTOCHECKBOX | 
-                    WS_TABSTOP,85,79,43,10
-    EDITTEXT        IDC_DNS,38,49,78,12,ES_AUTOHSCROLL
     LTEXT           "DNS:",IDC_STATIC,8,50,30,9
-    PUSHBUTTON      "OK",IDOK,17,106,50,14
-    PUSHBUTTON      "Cancel",IDCANCEL,73,106,50,14
-    CONTROL         "Suppress echo, tail:",IDC_ECHO_SUPPRESS,"Button",
-                    BS_AUTOCHECKBOX | WS_TABSTOP,7,92,79,10
-    EDITTEXT        IDC_EC_TAIL,89,91,33,12,ES_AUTOHSCROLL
+    LTEXT           "ms",IDC_STATIC,75,92,13,9
+    LTEXT           "Codec priority:",IDC_STATIC,7,107,49,9
+    CONTROL         "AA",IDC_AA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,107,
+                    107,25,10
 END
 
 
@@ -192,7 +202,7 @@
         LEFTMARGIN, 7
         RIGHTMARGIN, 133
         TOPMARGIN, 7
-        BOTTOMMARGIN, 120
+        BOTTOMMARGIN, 136
     END
 END
 #endif    // APSTUDIO_INVOKED
diff --git a/pjsip-apps/src/pocketpj/PocketPJ.vcc b/pjsip-apps/src/pocketpj/PocketPJ.vcc
index 80c3c6f..5320b2d 100644
--- a/pjsip-apps/src/pocketpj/PocketPJ.vcc
+++ b/pjsip-apps/src/pocketpj/PocketPJ.vcc
@@ -12,9 +12,9 @@
 Class2=CPocketPJDlg
 
 ResourceCount=5
-Resource2=IDD_SETTING
+Resource2=IDR_ACC_MENU
 Resource3=IDD_POCKETPJ_DIALOG
-Resource4=IDR_ACC_MENU
+Resource4=IDD_SETTING
 Resource1=IDR_MAINFRAME
 Class3=CSettingsDlg
 Resource5=IDR_URI_MENU
@@ -40,7 +40,7 @@
 Class=CPocketPJDlg
 ControlCount=6
 Control1=IDC_ACC_ID,static,1342308352
-Control2=IDC_BTN_ACC,static,1342243086
+Control2=IDC_BTN_ACC,static,1350631694
 Control3=IDC_BUDDY_LIST,SysListView32,1350631446
 Control4=IDC_STATIC,static,1342308352
 Control5=IDC_URL,edit,1350631552
@@ -66,24 +66,30 @@
 [DLG:IDD_SETTING]
 Type=1
 Class=CSettingsDlg
-ControlCount=17
-Control1=IDC_STATIC,static,1342308352
-Control2=IDC_DOMAIN,edit,1350631552
-Control3=IDC_USER,edit,1350631552
-Control4=IDC_PASSWD,edit,1350631584
-Control5=IDC_STATIC,static,1342308352
-Control6=IDC_STATIC,static,1342308352
-Control7=IDC_STUN,button,1342242819
-Control8=IDC_STUN_SRV,edit,1350631552
-Control9=IDC_ICE,button,1342242819
-Control10=IDC_SRTP,button,1342242819
-Control11=IDC_PUBLISH,button,1342242819
-Control12=IDC_DNS,edit,1350631552
-Control13=IDC_STATIC,static,1342308352
+ControlCount=23
+Control1=IDC_DOMAIN,edit,1350631552
+Control2=IDC_USER,edit,1350631552
+Control3=IDC_PASSWD,edit,1350631584
+Control4=IDC_DNS,edit,1350631552
+Control5=IDC_STUN_SRV,edit,1350631552
+Control6=IDC_ICE,button,1342242819
+Control7=IDC_TCP,button,1342242819
+Control8=IDC_SRTP,button,1342242819
+Control9=IDC_PUBLISH,button,1342242819
+Control10=IDC_ECHO_SUPPRESS,button,1342242819
+Control11=IDC_EC_TAIL,edit,1350631552
+Control12=IDC_VAD,button,1342242819
+Control13=IDC_CODECS,combobox,1344339971
 Control14=IDOK,button,1342242816
 Control15=IDCANCEL,button,1342242816
-Control16=IDC_ECHO_SUPPRESS,button,1342242819
-Control17=IDC_EC_TAIL,edit,1350631552
+Control16=IDC_STATIC,static,1342308352
+Control17=IDC_STATIC,static,1342308352
+Control18=IDC_STATIC,static,1342308352
+Control19=IDC_STUN,button,1342242819
+Control20=IDC_STATIC,static,1342308352
+Control21=IDC_STATIC,static,1342308352
+Control22=IDC_STATIC,static,1342308352
+Control23=IDC_AA,button,1342242819
 
 [CLS:CSettingsDlg]
 Type=0
@@ -92,5 +98,5 @@
 BaseClass=CDialog
 Filter=D
 VirtualFilter=dWC
-LastObject=IDC_ECHO_SUPPRESS
+LastObject=CSettingsDlg
 
diff --git a/pjsip-apps/src/pocketpj/PocketPJDlg.cpp b/pjsip-apps/src/pocketpj/PocketPJDlg.cpp
index b6b7e3f..4f388b4 100644
--- a/pjsip-apps/src/pocketpj/PocketPJDlg.cpp
+++ b/pjsip-apps/src/pocketpj/PocketPJDlg.cpp
@@ -80,6 +80,7 @@
 
 BOOL CPocketPJDlg::Restart()
 {
+    unsigned i;
     pj_status_t status;
 
     char ver[80];
@@ -178,6 +179,7 @@
     media_cfg.quality = 5;
     media_cfg.thread_cnt = 1;
     media_cfg.enable_ice = m_Cfg.m_UseIce;
+    media_cfg.no_vad = !m_Cfg.m_VAD;
 
     if (m_Cfg.m_EchoSuppress) {
 	media_cfg.ec_options = PJMEDIA_ECHO_SIMPLE;
@@ -195,7 +197,7 @@
     }
 
     // Create one UDP transport
-    PopUp_Modify(POPUP_REGISTRATION, POPUP_EL_TITLE3, "Add transport..");
+    PopUp_Modify(POPUP_REGISTRATION, POPUP_EL_TITLE3, "Adding UDP transport..");
     pjsua_transport_id transport_id;
     pjsua_transport_config udp_cfg;
 
@@ -210,16 +212,35 @@
 	return FALSE;
     }
 
+    if (m_Cfg.m_TCP) {
+	// Create one TCP transport
+	PopUp_Modify(POPUP_REGISTRATION, POPUP_EL_TITLE3, "Adding TCP transport..");
+	pjsua_transport_id transport_id;
+	pjsua_transport_config tcp_cfg;
+
+	pjsua_transport_config_default(&tcp_cfg);
+	tcp_cfg.port = 0;
+	status = pjsua_transport_create(PJSIP_TRANSPORT_TCP,
+					&tcp_cfg, &transport_id);
+	if (status != PJ_SUCCESS) {
+	    Error(_T("Error creating TCP transport"), status);
+	    pjsua_destroy();
+	    PopUp_Hide(POPUP_REGISTRATION);
+	    return FALSE;
+	}
+    }
+
     // Adjust codecs priority
     pj_str_t tmp;
-    pjsua_codec_set_priority(pj_cstr(&tmp, "speex"), 0);
-    pjsua_codec_set_priority(pj_cstr(&tmp, "speex/8000"), 200);
-    pjsua_codec_set_priority(pj_cstr(&tmp, "GSM"),  180);
-    pjsua_codec_set_priority(pj_cstr(&tmp, "PCMU"), 160);
-    pjsua_codec_set_priority(pj_cstr(&tmp, "PCMA"), 150);
-    pjsua_codec_set_priority(pj_cstr(&tmp, "iLBC"), 0);
-    pjsua_codec_set_priority(pj_cstr(&tmp, "L16"), 0);
+    pjsua_codec_set_priority(pj_cstr(&tmp, "*"), 0);
+    for (i=0; i<(unsigned)m_Cfg.m_Codecs.GetSize(); ++i) {
+	CString codec = m_Cfg.m_Codecs.GetAt(i);
+	char tmp_nam[80];
 
+	pj_unicode_to_ansi((LPCTSTR)codec, codec.GetLength(),
+			   tmp_nam, sizeof(tmp_nam));
+	pjsua_codec_set_priority(pj_cstr(&tmp, tmp_nam), 200-i);
+    }
 
     // Start!
     PopUp_Modify(POPUP_REGISTRATION, POPUP_EL_TITLE3, "Starting..");
@@ -261,6 +282,15 @@
     acc_cfg.srtp_secure_signaling = 0;
     acc_cfg.publish_enabled = m_Cfg.m_UsePublish;
     
+    char route[80];
+    if (m_Cfg.m_TCP) {
+	snprintf(route, sizeof(route), "<sip:%s;lr;transport=tcp>", domain);
+	acc_cfg.proxy[acc_cfg.proxy_cnt++] = pj_str(route);
+    } else {
+	snprintf(route, sizeof(route), "<sip:%s;lr>", domain);
+	acc_cfg.proxy[acc_cfg.proxy_cnt++] = pj_str(route);
+    }
+
     status = pjsua_acc_add(&acc_cfg, PJ_TRUE, &m_PjsuaAccId);
     if (status != PJ_SUCCESS) {
 	Error(_T("Invalid account settings"), status);
@@ -366,6 +396,8 @@
 	PopUp_Show(POPUP_CALL, "Incoming call..", ci.remote_info.ptr, "",
 		   "Answer", "Hangup", 0);
 	pjsua_call_answer(0, 180, NULL, NULL);
+	if (m_Cfg.m_AutoAnswer)
+	    OnPopUpButton(1);
 	break;
     case PJSIP_INV_STATE_EARLY:	    /**< After response with To tag.	    */
     case PJSIP_INV_STATE_CONNECTING:/**< After 2xx is sent/received.	    */
diff --git a/pjsip-apps/src/pocketpj/SettingsDlg.cpp b/pjsip-apps/src/pocketpj/SettingsDlg.cpp
index af49a1e..1357044 100644
--- a/pjsip-apps/src/pocketpj/SettingsDlg.cpp
+++ b/pjsip-apps/src/pocketpj/SettingsDlg.cpp
@@ -4,6 +4,7 @@
 #include "stdafx.h"
 #include "PocketPJ.h"
 #include "SettingsDlg.h"
+#include <pjsua-lib/pjsua.h>
 #include <atlbase.h>
 
 #ifdef _DEBUG
@@ -26,14 +27,31 @@
 #define REG_BUDDY_X	_T("Buddy%u")
 #define REG_ENABLE_EC	_T("EnableEC")
 #define REG_EC_TAIL	_T("ECTail")
+#define REG_ENABLE_VAD	_T("EnableVAD")
+#define REG_ENABLE_TCP	_T("EnableTCP")
+#define REG_CODEC_CNT	_T("CodecCnt")
+#define REG_CODEC_X	_T("Codec%u")
+#define REG_AUTO_ANSWER	_T("AutoAnswer")
 
 
 /////////////////////////////////////////////////////////////////////////////
 // Settings
 CPocketPJSettings::CPocketPJSettings()
 : m_UseStun(FALSE), m_UseIce(FALSE), m_UseSrtp(FALSE), m_UsePublish(FALSE),
-  m_EchoSuppress(TRUE), m_EcTail(200)
+  m_EchoSuppress(TRUE), m_EcTail(200), m_TCP(FALSE), m_VAD(FALSE),
+  m_AutoAnswer(FALSE)
 {
+    /* Init codec list */
+#if defined(PJMEDIA_HAS_GSM_CODEC) && PJMEDIA_HAS_GSM_CODEC
+    m_Codecs.Add(_T("GSM"));
+#endif
+#if defined(PJMEDIA_HAS_G711_CODEC) && PJMEDIA_HAS_G711_CODEC
+    m_Codecs.Add(_T("PCMU"));
+    m_Codecs.Add(_T("PCMA"));
+#endif
+#if defined(PJMEDIA_HAS_SPEEX_CODEC) && PJMEDIA_HAS_SPEEX_CODEC
+    m_Codecs.Add(_T("Speex"));
+#endif
 }
 
 // Load from registry
@@ -76,21 +94,15 @@
     dwordVal = 0;
     if (key.QueryValue(dwordVal, REG_USE_STUN) == ERROR_SUCCESS) {
 	m_UseStun = dwordVal != 0;
-    } else {
-	m_UseStun = 0;
     }
 
     if (key.QueryValue(dwordVal, REG_USE_ICE) == ERROR_SUCCESS) {
 	m_UseIce = dwordVal != 0;
-    } else {
-	m_UseIce = 0;
     }
 
 
     if (key.QueryValue(dwordVal, REG_USE_SRTP) == ERROR_SUCCESS) {
 	m_UseSrtp = dwordVal != 0;
-    } else {
-	m_UseSrtp = 0;
     }
 
 
@@ -102,15 +114,26 @@
     cbData = sizeof(dwordVal);
     if (key.QueryValue(dwordVal, REG_ENABLE_EC) == ERROR_SUCCESS) {
 	m_EchoSuppress = dwordVal != 0;
-    } else {
-	m_EchoSuppress = 1;
     }
 
     cbData = sizeof(dwordVal);
     if (key.QueryValue(dwordVal, REG_EC_TAIL) == ERROR_SUCCESS) {
 	m_EcTail = dwordVal;
-    } else {
-	m_EcTail = 200;
+    }
+
+    cbData = sizeof(dwordVal);
+    if (key.QueryValue(dwordVal, REG_ENABLE_TCP) == ERROR_SUCCESS) {
+	m_TCP = dwordVal != 0;
+    }
+
+    cbData = sizeof(dwordVal);
+    if (key.QueryValue(dwordVal, REG_ENABLE_VAD) == ERROR_SUCCESS) {
+	m_VAD = dwordVal != 0;
+    }
+
+    cbData = sizeof(dwordVal);
+    if (key.QueryValue(dwordVal, REG_AUTO_ANSWER) == ERROR_SUCCESS) {
+	m_AutoAnswer = dwordVal != 0;
     }
 
     m_BuddyList.RemoveAll();
@@ -132,6 +155,23 @@
 	}
     }
 
+    DWORD codecCount = 0;
+    cbData = sizeof(dwordVal);
+    if (key.QueryValue(codecCount, REG_CODEC_CNT) == ERROR_SUCCESS) {
+
+	m_Codecs.RemoveAll();
+
+	for (i=0; i<codecCount; ++i) {
+	    CString entry;
+	    entry.Format(REG_CODEC_X, i);
+
+	    cbData = sizeof(textVal);
+	    if (key.QueryValue(textVal, entry, &cbData) == ERROR_SUCCESS) {
+		m_Codecs.Add(textVal);
+	    }
+	}
+    }
+
     key.Close();
 }
 
@@ -157,6 +197,10 @@
     key.SetValue(m_EchoSuppress, REG_ENABLE_EC);
     key.SetValue(m_EcTail, REG_EC_TAIL);
 
+    key.SetValue(m_TCP, REG_ENABLE_TCP);
+    key.SetValue(m_VAD, REG_ENABLE_VAD);
+    key.SetValue(m_AutoAnswer, REG_AUTO_ANSWER);
+
     key.SetValue(m_BuddyList.GetSize(), REG_BUDDY_CNT);
 
     int i;
@@ -166,6 +210,14 @@
 	key.SetValue(m_BuddyList.GetAt(i), entry);
     }
 
+    DWORD N = m_Codecs.GetSize();
+    key.SetValue(N, REG_CODEC_CNT);
+    for (i=0; i<m_Codecs.GetSize(); ++i) {
+	CString entry;
+	entry.Format(REG_CODEC_X, i);
+	key.SetValue(m_Codecs.GetAt(i), entry);
+    }
+
     key.Close();
 }
 
@@ -189,6 +241,9 @@
 	m_Dns = _T("");
 	m_EchoSuppress = FALSE;
 	m_EcTail = _T("");
+	m_TCP = FALSE;
+	m_VAD = FALSE;
+	m_AutoAnswer = FALSE;
 	//}}AFX_DATA_INIT
 
 	m_Domain    = m_Cfg.m_Domain;
@@ -201,10 +256,14 @@
 	m_User	    = m_Cfg.m_User;
 	m_Dns	    = m_Cfg.m_DNS;
 	m_EchoSuppress = m_Cfg.m_EchoSuppress;
+	m_TCP	    = m_Cfg.m_TCP;
+	m_VAD	    = m_Cfg.m_VAD;
+	m_AutoAnswer= m_Cfg.m_AutoAnswer;
 
 	CString s;
 	s.Format(_T("%d"), m_Cfg.m_EcTail);
 	m_EcTail    = s;
+
 }
 
 
@@ -212,6 +271,7 @@
 {
 	CDialog::DoDataExchange(pDX);
 	//{{AFX_DATA_MAP(CSettingsDlg)
+	DDX_Control(pDX, IDC_CODECS, m_Codecs);
 	DDX_Text(pDX, IDC_DOMAIN, m_Domain);
 	DDX_Check(pDX, IDC_ICE, m_ICE);
 	DDX_Text(pDX, IDC_PASSWD, m_Passwd);
@@ -223,7 +283,19 @@
 	DDX_Text(pDX, IDC_DNS, m_Dns);
 	DDX_Check(pDX, IDC_ECHO_SUPPRESS, m_EchoSuppress);
 	DDX_Text(pDX, IDC_EC_TAIL, m_EcTail);
+	DDX_Check(pDX, IDC_TCP, m_TCP);
+	DDX_Check(pDX, IDC_VAD, m_VAD);
+	DDX_Check(pDX, IDC_AA, m_AutoAnswer);
 	//}}AFX_DATA_MAP
+
+	
+	if (m_Codecs.GetCount() == 0) {
+	    int i;
+	    for (i=0; i<m_Cfg.m_Codecs.GetSize(); ++i) {
+		m_Codecs.AddString(m_Cfg.m_Codecs.GetAt(i));
+	    }
+	    m_Codecs.SetCurSel(0);
+	}
 }
 
 
@@ -231,6 +303,7 @@
 	//{{AFX_MSG_MAP(CSettingsDlg)
 	ON_BN_CLICKED(IDC_STUN, OnStun)
 	ON_BN_CLICKED(IDC_ECHO_SUPPRESS, OnEchoSuppress)
+	ON_CBN_SELCHANGE(IDC_CODECS, OnSelchangeCodecs)
 	//}}AFX_MSG_MAP
 END_MESSAGE_MAP()
 
@@ -241,20 +314,6 @@
 {
     int rc = CDialog::DoModal();	
 
-    if (rc == IDOK) {
-	m_Cfg.m_Domain	    = m_Domain;
-	m_Cfg.m_UseIce	    = m_ICE != 0;
-	m_Cfg.m_Password    = m_Passwd;
-	m_Cfg.m_UsePublish  = m_PUBLISH != 0;
-	m_Cfg.m_UseSrtp	    = m_SRTP != 0;
-	m_Cfg.m_UseStun	    = m_STUN != 0;
-	m_Cfg.m_StunSrv	    = m_StunSrv;
-	m_Cfg.m_User	    = m_User;
-	m_Cfg.m_DNS	    = m_Dns;
-	m_Cfg.m_EchoSuppress= m_EchoSuppress != 0;
-	m_Cfg.m_EcTail	    = _ttoi(m_EcTail);
-    }
-
     return rc;
 }
 
@@ -265,3 +324,53 @@
 void CSettingsDlg::OnEchoSuppress() 
 {
 }
+
+void CSettingsDlg::OnSelchangeCodecs() 
+{
+    int cur = m_Codecs.GetCurSel();
+    if (cur < 1)
+	return;
+
+    CString codec;
+    DWORD N;
+
+    m_Codecs.GetLBText(cur, codec);
+    N = m_Codecs.GetCount();
+    m_Codecs.DeleteString(cur);
+    N = m_Codecs.GetCount();
+    m_Codecs.InsertString(0, codec);
+    N = m_Codecs.GetCount();
+    m_Codecs.SetCurSel(0);
+}
+
+
+void CSettingsDlg::OnOK() 
+{
+    UpdateData(TRUE);
+
+    m_Cfg.m_Domain	= m_Domain;
+    m_Cfg.m_UseIce	= m_ICE != 0;
+    m_Cfg.m_Password	= m_Passwd;
+    m_Cfg.m_UsePublish	= m_PUBLISH != 0;
+    m_Cfg.m_UseSrtp	= m_SRTP != 0;
+    m_Cfg.m_UseStun	= m_STUN != 0;
+    m_Cfg.m_StunSrv	= m_StunSrv;
+    m_Cfg.m_User	= m_User;
+    m_Cfg.m_DNS		= m_Dns;
+    m_Cfg.m_EchoSuppress= m_EchoSuppress != 0;
+    m_Cfg.m_EcTail	= _ttoi(m_EcTail);
+    m_Cfg.m_TCP		= m_TCP != 0;
+    m_Cfg.m_VAD		= m_VAD != 0;
+    m_Cfg.m_AutoAnswer	= m_AutoAnswer != 0;
+
+    unsigned i;
+    m_Cfg.m_Codecs.RemoveAll();
+    DWORD N = m_Codecs.GetCount();
+    for (i=0; i<N; ++i) {
+	CString codec;
+	m_Codecs.GetLBText(i, codec);
+	m_Cfg.m_Codecs.Add(codec);
+    }
+
+    CDialog::OnOK();
+}
diff --git a/pjsip-apps/src/pocketpj/SettingsDlg.h b/pjsip-apps/src/pocketpj/SettingsDlg.h
index 95ec317..816ede9 100644
--- a/pjsip-apps/src/pocketpj/SettingsDlg.h
+++ b/pjsip-apps/src/pocketpj/SettingsDlg.h
@@ -23,7 +23,11 @@
     CString	m_DNS;
     bool	m_EchoSuppress;
     DWORD	m_EcTail;
+    bool	m_TCP;
+    bool	m_VAD;
+    bool	m_AutoAnswer;
 
+    CArray<CString,CString> m_Codecs;
     CArray<CString,CString> m_BuddyList;
     
     CPocketPJSettings();
@@ -48,6 +52,7 @@
 // Dialog Data
 	//{{AFX_DATA(CSettingsDlg)
 	enum { IDD = IDD_SETTING };
+	CComboBox	m_Codecs;
 	CString	m_Domain;
 	BOOL	m_ICE;
 	CString	m_Passwd;
@@ -59,6 +64,9 @@
 	CString	m_Dns;
 	BOOL	m_EchoSuppress;
 	CString	m_EcTail;
+	BOOL	m_TCP;
+	BOOL	m_VAD;
+	BOOL	m_AutoAnswer;
 	//}}AFX_DATA
 
 
@@ -79,6 +87,8 @@
 	//{{AFX_MSG(CSettingsDlg)
 	afx_msg void OnStun();
 	afx_msg void OnEchoSuppress();
+	afx_msg void OnSelchangeCodecs();
+	virtual void OnOK();
 	//}}AFX_MSG
 	DECLARE_MESSAGE_MAP()
 };
diff --git a/pjsip-apps/src/pocketpj/resource.h b/pjsip-apps/src/pocketpj/resource.h
index 1ba70d3..85eefa2 100644
--- a/pjsip-apps/src/pocketpj/resource.h
+++ b/pjsip-apps/src/pocketpj/resource.h
@@ -37,6 +37,10 @@
 #define IDC_BUTTON1                     1021
 #define IDC_EC_TAIL                     1021
 #define IDC_BUTTON2                     1022
+#define IDC_VAD                         1022
+#define IDC_TCP                         1023
+#define IDC_CODECS                      1024
+#define IDC_AA                          1025
 #define IDS_CAP_ONLINE                  32772
 #define IDS_CAP_OFFLINE                 32774
 #define IDS_CAP_INVISIBLE               32776
@@ -61,7 +65,7 @@
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_NEXT_RESOURCE_VALUE        145
 #define _APS_NEXT_COMMAND_VALUE         32796
-#define _APS_NEXT_CONTROL_VALUE         1023
+#define _APS_NEXT_CONTROL_VALUE         1025
 #define _APS_NEXT_SYMED_VALUE           101
 #endif
 #endif
