diff --git a/pjlib/src/pj/os_core_symbian.cpp b/pjlib/src/pj/os_core_symbian.cpp
index f13365a..8f96ce0 100644
--- a/pjlib/src/pj/os_core_symbian.cpp
+++ b/pjlib/src/pj/os_core_symbian.cpp
@@ -153,10 +153,19 @@
 
 PjSymbianOS::PjSymbianOS()
 : isSocketServInitialized_(false), isResolverInitialized_(false),
-  console_(NULL), selectTimeoutTimer_(NULL)
+  console_(NULL), selectTimeoutTimer_(NULL),
+  appSocketServ_(NULL), appConnection_(NULL), appHostResolver_(NULL)
 {
 }
 
+// Set parameters
+void PjSymbianOS::SetParameters(pj_symbianos_params *params) 
+{
+    appSocketServ_ = (RSocketServ*) params->rsocketserv;
+    appConnection_ = (RConnection*) params->rconnection;
+    appHostResolver_ = (RHostResolver*) params->rhostresolver;
+}
+
 // Get PjSymbianOS instance
 PjSymbianOS *PjSymbianOS::Instance()
 {
@@ -179,7 +188,10 @@
     return err;
 #endif
 
-    if (!isSocketServInitialized_) {
+    /* Only create RSocketServ if application doesn't specify it
+     * in the parameters
+     */
+    if (!isSocketServInitialized_ && appSocketServ_ == NULL) {
 	err = socketServ_.Connect();
 	if (err != KErrNone)
 	    goto on_error;
@@ -187,8 +199,13 @@
 	isSocketServInitialized_ = true;
     }
 
-    if (!isResolverInitialized_) {
-	err = hostResolver_.Open(SocketServ(), KAfInet, KSockStream);
+    if (!isResolverInitialized_ && appHostResolver_ == NULL) {
+    	if (Connection())
+    	    err = hostResolver_.Open(SocketServ(), KAfInet, KSockStream,
+    	    			     *Connection());
+    	else
+	    err = hostResolver_.Open(SocketServ(), KAfInet, KSockStream);
+    	
 	if (err != KErrNone)
 	    goto on_error;
 
@@ -260,6 +277,15 @@
 }
 
 
+/* Set Symbian specific parameters */
+PJ_DEF(pj_status_t) pj_symbianos_set_params(pj_symbianos_params *prm) 
+{
+    PJ_ASSERT_RETURN(prm != NULL, PJ_EINVAL);
+    PjSymbianOS::Instance()->SetParameters(prm);
+    return PJ_SUCCESS;
+}
+
+
 /*
  * pj_init(void).
  * Init PJLIB!
diff --git a/pjlib/src/pj/os_symbian.h b/pjlib/src/pj/os_symbian.h
index 5fabdc6..2b14ecd 100644
--- a/pjlib/src/pj/os_symbian.h
+++ b/pjlib/src/pj/os_symbian.h
@@ -20,6 +20,7 @@
 #define __OS_SYMBIAN_H__
 
 #include <pj/sock.h>
+#include <pj/os.h>
 #include <pj/string.h>
 
 #include <e32base.h>
@@ -195,6 +196,11 @@
     static PjSymbianOS *Instance();
 
     //
+    // Set parameters
+    //
+    void SetParameters(pj_symbianos_params *params);
+    
+    //
     // Initialize.
     //
     TInt Initialize();
@@ -212,9 +218,15 @@
     // Get RSocketServ instance to be used by all sockets.
     RSocketServ &SocketServ()
     {
-	return socketServ_;
+	return appSocketServ_ ? *appSocketServ_ : socketServ_;
     }
 
+    // Get RConnection instance, if any.
+    RConnection *Connection() 
+    {
+    	return appConnection_;
+    }
+    
     // Convert TInetAddr to pj_sockaddr_in
     static inline void Addr2pj(const TInetAddr & sym_addr,
 			       pj_sockaddr_in &pj_addr)
@@ -243,7 +255,7 @@
     // Get RHostResolver instance
     RHostResolver & GetResolver()
     {
-	return hostResolver_;
+	return appHostResolver_ ? *appHostResolver_ : hostResolver_;
     }
 
 
@@ -296,6 +308,11 @@
 
     CPjTimeoutTimer *selectTimeoutTimer_;
 
+    // App parameters
+    RSocketServ *appSocketServ_;
+    RConnection *appConnection_;
+    RHostResolver *appHostResolver_;
+    
 private:
     PjSymbianOS();
 };
diff --git a/pjlib/src/pj/sock_symbian.cpp b/pjlib/src/pj/sock_symbian.cpp
index 7c7680a..4a1da7b 100644
--- a/pjlib/src/pj/sock_symbian.cpp
+++ b/pjlib/src/pj/sock_symbian.cpp
@@ -474,7 +474,14 @@
 
     /* Create Symbian RSocket */
     RSocket rSock;
-    rc = rSock.Open(PjSymbianOS::Instance()->SocketServ(), af, type, proto);
+    if (PjSymbianOS::Instance()->Connection())
+    	rc = rSock.Open(PjSymbianOS::Instance()->SocketServ(), 
+    			af, type, proto,
+    			*PjSymbianOS::Instance()->Connection());
+    else
+    	rc = rSock.Open(PjSymbianOS::Instance()->SocketServ(), 
+    			af, type, proto);
+        
     if (rc != KErrNone)
 	return PJ_RETURN_OS_ERROR(rc);
 
