diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp
old mode 100644
new mode 100755
index 204fc845be85a51c78cf7182cfae37ceb6976f58..d9ee027aa9aa149ac738dc6e0b5eb961f797db45
--- a/sflphone-common/src/sip/sipaccount.cpp
+++ b/sflphone-common/src/sip/sipaccount.cpp
@@ -36,10 +36,22 @@
 #include <pwd.h>
 #include <sstream>
 
+// CredentialItem::CredentialItem() {}
+
+// CredentialItem::~CredentialItem() {}
+
 Credentials::Credentials() : credentialCount(0) {}
 
 Credentials::~Credentials() {}
 
+CredentialItem *Credentials::getCredential(int index) 
+{ 
+  if((index >= 0) && (index < credentialCount))
+    return &(credentialArray[index]);
+  else
+    return NULL; 
+}
+
 void Credentials::serialize(Conf::YamlEmitter *emitter)
 {
   
@@ -97,7 +109,6 @@ SIPAccount::SIPAccount (const AccountID& accountID)
 	, _tlsEnabled(false)
 	, _stunEnabled(false)
 	  // , _routeSet("")
-	  // , _realm("")
 	, _authenticationUsename("")
 	  // , _tlsListenerPort("5061")
 	, _srtpEnabled(false)
@@ -308,6 +319,8 @@ void SIPAccount::unserialize(Conf::MappingNode *map)
   credMap = (Conf::MappingNode *)(map->getValue(credKey));
   credentials.unserialize(credMap);
 
+  _credentialCount = credentials.getCredentialCount();
+
   val = (Conf::ScalarNode *)(map->getValue(displayNameKey));
   if(val) { _displayName = val->getValue(); val = NULL; }
 
@@ -482,10 +495,6 @@ void SIPAccount::setAccountDetails(const std::map<std::string, std::string>& det
     find_in_map(AUTHENTICATION_USERNAME, authenticationName)
     find_in_map(USERAGENT, ua_name)
       
-    // setConfig(accountID, REALM, realm);
-    // setConfig(accountID, USERAGENT, ua_name);
-    // setConfig(accountID, AUTHENTICATION_USERNAME, authenticationName);
-      
     setUseragent(ua_name);
 
     // srtp settings
@@ -557,8 +566,7 @@ void SIPAccount::setAccountDetails(const std::map<std::string, std::string>& det
 	} else {
 	  hash = Manager::instance().computeMd5HashFromCredential(authenticationName, password, realm);
 	}
-	    
-	// setConfig(accountID, PASSWORD, hash);
+
 	setPassword(hash);
       }
     }  
@@ -613,9 +621,9 @@ std::map<std::string, std::string> SIPAccount::getAccountDetails()
 	    
     a.insert(std::pair<std::string, std::string>(ROUTESET, getRouteSet()));
     a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_RESOLVE_ONCE, isResolveOnce() ? "true" : "false"));
-    // a.insert(std::pair<std::string, std::string>(REALM, account->
+    a.insert(std::pair<std::string, std::string>(REALM, _realm));
     a.insert(std::pair<std::string, std::string>(USERAGENT, getUseragent()));
-    // a.insert(std::pair<std::string, std::string>(AUTHENTICATION_USERNAME, getConfigString(accountID, AUTHENTICATION_USERNAME)));
+    
     a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_REGISTRATION_EXPIRE, getRegistrationExpire()));
     a.insert(std::pair<std::string, std::string>(LOCAL_INTERFACE, getLocalInterface()));				       
     a.insert(std::pair<std::string, std::string>(PUBLISHED_SAMEAS_LOCAL, getPublishedSameasLocal() ? "true" : "false"));
@@ -697,8 +705,10 @@ int SIPAccount::initCredential (void)
 
     // Use authentication username if provided
     if (!_authenticationUsername.empty()) {
+      _debug("Use credential authentication name -------------------------------------");
         cred_info[0].username = pj_str (strdup (_authenticationUsername.c_str()));
     } else {
+      _debug("Use credential uername name -------------------------------------");
         cred_info[0].username = pj_str (strdup (_username.c_str()));
     }
 
@@ -727,6 +737,7 @@ int SIPAccount::initCredential (void)
     int i;
 
     for (i = 1; i < credentialCount; i++) {
+        _debug("--------------------------------------- Not supposed to have any credential");
         std::string credentialIndex;
         std::stringstream streamOut;
         streamOut << i - 1;
@@ -783,7 +794,7 @@ int SIPAccount::registerVoIPLink()
     initCredential();
 
     // Init TLS settings if the user wants to use TLS
-    bool tlsEnabled = false;//  Manager::instance().getConfigBool (_accountID, TLS_ENABLE);
+    bool tlsEnabled = false;
 
     if (tlsEnabled) {
         _transportType = PJSIP_TRANSPORT_TLS;
@@ -791,7 +802,7 @@ int SIPAccount::registerVoIPLink()
     }
 
     // Init STUN settings for this account if the user selected it
-    bool stunEnabled = _stunEnabled; // Manager::instance().getConfigBool (_accountID, STUN_ENABLE);
+    bool stunEnabled = _stunEnabled;
 
     if (stunEnabled) {
         _transportType = PJSIP_TRANSPORT_START_OTHER;
@@ -864,7 +875,7 @@ void SIPAccount::initTlsConfiguration (void)
     }
 
     // TLS listener is unique and should be only modified through IP2IP_PROFILE
-    // std::string tlsPortStr = Manager::instance().getConfigString(_accountID, TLS_LISTENER_PORT);
+    
     // setTlsListenerPort(atoi(tlsPortStr.c_str()));
     setTlsListenerPort(atoi(_tlsPortStr.c_str()));
     
@@ -896,8 +907,7 @@ void SIPAccount::initStunConfiguration (void)
     size_t pos;
     std::string stunServer, serverName, serverPort;
 
-    stunServer = _stunServer; // Manager::instance().getConfigString (_accountID, STUN_SERVER);
-
+    stunServer = _stunServer; 
     // Init STUN socket
     pos = stunServer.find (':');
 
@@ -1116,8 +1126,6 @@ std::string SIPAccount::getContactHeader (const std::string& address, const std:
         transport = "";
     }
 
-    // _displayName = Manager::instance().getConfigString (_accountID, DISPLAY_NAME);
-
     _debug ("Display Name: %s", _displayName.c_str());
 
     int len = pj_ansi_snprintf (contact, PJSIP_MAX_URL_SIZE,
diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h
index 807c674774e6439d58e4b9908665f4bf64a0e9ee..70cad3af7883c65b211c6ea8528b8180395ea480 100755
--- a/sflphone-common/src/sip/sipaccount.h
+++ b/sflphone-common/src/sip/sipaccount.h
@@ -123,13 +123,20 @@ class SipAccountException : public std::exception
 
 };
 
+class CredentialItem
+{
+ public:
+
+  std::string username;
+  std::string password;
+  std::string realm;
+};
+
 
 class Credentials : public Serializable
 {
  public:
 
-  typedef std::map<std::string, std::string> CredentialMap;
-
   Credentials();
 
   ~Credentials();
@@ -141,11 +148,14 @@ class Credentials : public Serializable
   int getCredentialCount(void) { return credentialCount; }
   void setCredentialCount(int count) { credentialCount = count; }
 
+  void setNewCredential(std::string username, std::string password, std::string realm);
+  CredentialItem *getCredential(int index);
+
  private:
 
   int credentialCount;
 
-  CredentialMap credentialMap;
+  CredentialItem credentialArray[10];
 
 };
 
@@ -463,6 +473,9 @@ class SIPAccount : public Account
 	void setZrtpHelloHash(bool hellohash) { _zrtpHelloHash = hellohash; }
 	// void setSrtpKeyExchange
 
+	std::string getRealm(void) { return _realm; }
+	void setRealm(std::string r) { _realm = r; }
+
 	std::string getTlsEnable(void) {return _tlsEnable; }
 	void setTlsEnable(std::string enabl) { _tlsEnable = enabl; }
 
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
old mode 100644
new mode 100755
index b89e7530f7bb464f6b11efc1a9fc9fbafcf2baf9..5a92fcb49d13d0f8f72a1cb66bdc2275127f26fb
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -450,8 +450,7 @@ std::string SIPVoIPLink::get_useragent_name (const AccountID& id)
     SIPAccount *account = (SIPAccount *)Manager::instance().getAccount(id);
 
     std::ostringstream  useragent;
-	
-    // useragent << Manager::instance ().getConfigString (id, USERAGENT);
+
     useragent << account->getUseragent();
     if (useragent.str() == "sflphone" || useragent.str() == "")
 	useragent << "/" << SFLPHONED_VERSION;
@@ -1346,7 +1345,6 @@ SIPVoIPLink::dtmfSipInfo(SIPCall *call, char code)
 
 
 	duration = Manager::instance().voipPreferences.getPulseLength();
-	  // Manager::instance().getConfigInt (SIGNALISATION, PULSE_LENGTH);
 
 	dtmf_body = new char[body_len];
 
@@ -2569,10 +2567,14 @@ std::string SIPVoIPLink::findLocalAddressFromUri (const std::string& uri, pjsip_
         return machineName;
     }
 
-	std::string localaddr(localAddress.ptr, localAddress.slen);
-    _debug ("SIP: Local address discovered from attached transport: %s", localaddr.c_str());
+    std::string localaddr(localAddress.ptr, localAddress.slen);
+
+    if(localaddr == "0.0.0.0")
+      loadSIPLocalIP (&localaddr);
 
-    return std::string (localAddress.ptr, localAddress.slen);
+    _debug ("SIP: Local address discovered from attached transport: %s", localaddr.c_str());    
+
+    return localaddr;
 }
 
 
@@ -3297,7 +3299,7 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status)
 	// if RTPFALLBACK, change RTP session
 	AccountID accountID = Manager::instance().getAccountFromCall (call->getCallId());
 	SIPAccount *account = (SIPAccount *)Manager::instance().getAccount(accountID);
-	//if(Manager::instance().getConfigString (accountID, SRTP_RTP_FALLBACK) == "true")
+
 	if(account->getSrtpFallback())
 	  call->getAudioRtp()->initAudioRtpSession(call);
     }
@@ -3440,7 +3442,6 @@ void regc_cb (struct pjsip_regc_cbparam *param)
 		    out << (expire_value * 2);
 		    std::string s = out.str(); 
 
-		    // Manager::instance().setConfig(account->getAccountID(), CONFIG_ACCOUNT_REGISTRATION_EXPIRE, s);
 		    account->setRegistrationExpire(s);
 		    account->registerVoIPLink();
 		}
@@ -3649,7 +3650,6 @@ mod_on_rx_request (pjsip_rx_data *rdata)
 
     /******************************************* URL HOOK *********************************************/
 
-    // if (Manager::instance().getConfigString (HOOKS, URLHOOK_SIP_ENABLED) == "1") {
     if (Manager::instance().hookPreference.getSipEnabled()) {
 
         _debug("UserAgent: Set sip url hooks");
@@ -3658,13 +3658,11 @@ mod_on_rx_request (pjsip_rx_data *rdata)
 
         header_value = fetch_header_value (rdata->msg_info.msg, 
 					   Manager::instance().hookPreference.getUrlSipField());
-	// Manager::instance().getConfigString (HOOKS, URLHOOK_SIP_FIELD));
 
         if (header_value.size () < header_value.max_size()) {
             if (header_value!="") {
                 urlhook->addAction (header_value,
                                     Manager::instance().hookPreference.getUrlCommand());
-				    //Manager::instance().getConfigString (HOOKS, URLHOOK_COMMAND));
             }
         } else
             throw length_error ("UserAgent: Url exceeds std::string max_size");