diff --git a/daemon/src/managerimpl.cpp b/daemon/src/managerimpl.cpp
index 1464d8ae5996e0947cd0ccb934ba6bc6fe3eafa5..4c3a128d934745a4cc73880f91faa160d635bf57 100644
--- a/daemon/src/managerimpl.cpp
+++ b/daemon/src/managerimpl.cpp
@@ -197,14 +197,6 @@ bool ManagerImpl::outgoingCall(const std::string& account_id,
 
     std::string to_cleaned(NumberCleaner::clean(to, prefix));
 
-    static const char * const SIP_SCHEME = "sip:";
-    static const char * const SIPS_SCHEME = "sips:";
-
-    bool IPToIP = to_cleaned.find(SIP_SCHEME) == 0 or
-                  to_cleaned.find(SIPS_SCHEME) == 0;
-
-    setIPToIPForCall(call_id, IPToIP);
-
     // in any cases we have to detach from current communication
     if (hasCurrentCall()) {
         DEBUG("Manager: Has current call (%s) put it onhold", current_call_id.c_str());
@@ -216,29 +208,21 @@ bool ManagerImpl::outgoingCall(const std::string& account_id,
             detachParticipant(MainBuffer::DEFAULT_ID, current_call_id);
     }
 
-    if (IPToIP) {
-        DEBUG("Manager: Start IP2IP call");
-
-        /* We need to retrieve the sip voiplink instance */
-        if (SIPVoIPLink::instance()->SIPNewIpToIpCall(call_id, to_cleaned)) {
-            switchCall(call_id);
-            return true;
-        } else
-            callFailure(call_id);
-
-        return false;
-    }
-
     DEBUG("Manager: Selecting account %s", account_id.c_str());
 
-    // Is this account exist
+    // fallback using the default sip account if the specied doesn't exist
+    std::string use_account_id = "";
     if (!accountExists(account_id)) {
-        ERROR("Manager: Error: Account doesn't exist in new outgoing call");
-        return false;
+        WARN("Manager: Account does not exist, trying with default SIP account");
+        use_account_id = SIPAccount::IP2IP_PROFILE;
+    }
+    else {
+        use_account_id = account_id;
     }
 
-    if (!associateCallToAccount(call_id, account_id))
-        WARN("Manager: Warning: Could not associate call id %s to account id %s", call_id.c_str(), account_id.c_str());
+    // Is this account exist
+    if (!associateCallToAccount(call_id, use_account_id))
+        WARN("Manager: Warning: Could not associate call id %s to account id %s", call_id.c_str(), use_account_id.c_str());
 
     try {
         Call *call = getAccountLink(account_id)->newOutgoingCall(call_id, to_cleaned);
@@ -2491,6 +2475,8 @@ void ManagerImpl::removeAccount(const std::string& accountID)
 bool ManagerImpl::associateCallToAccount(const std::string& callID,
         const std::string& accountID)
 {
+    std::string useAccountID = accountID;
+
     if (getAccountFromCall(callID).empty() and accountExists(accountID)) {
         // account id exist in AccountMap
         ost::MutexLock m(callAccountMapMutex_);
@@ -2684,8 +2670,8 @@ ManagerImpl::getAccount(const std::string& accountID)
     AccountMap::const_iterator iter = accountMap_.find(accountID);
     if (iter != accountMap_.end())
         return iter->second;
-    else
-        return accountMap_[SIPAccount::IP2IP_PROFILE];
+
+    return accountMap_[SIPAccount::IP2IP_PROFILE];
 }
 
 std::string ManagerImpl::getAccountIdFromNameAndServer(const std::string& userName, const std::string& server) const
diff --git a/daemon/src/managerimpl.h b/daemon/src/managerimpl.h
index 159d8f9c0d21b45604575a687d762f4b44c1f9e5..eafec01c49410e0afcaffedde8f17154d22e5caf 100644
--- a/daemon/src/managerimpl.h
+++ b/daemon/src/managerimpl.h
@@ -961,7 +961,6 @@ class ManagerImpl {
 
         std::map<std::string, bool> IPToIPMap_;
 
-        void setIPToIPForCall(const std::string& callID, bool IPToIP);
 
         bool isIPToIP(const std::string& callID) const;
 
@@ -999,6 +998,8 @@ class ManagerImpl {
 
     public:
 
+        void setIPToIPForCall(const std::string& callID, bool IPToIP);
+
         /** Associate a new std::string to a std::string
          * Protected by mutex
          * @param callID the new CallID not in the list yet
diff --git a/daemon/src/sip/sipvoiplink.cpp b/daemon/src/sip/sipvoiplink.cpp
index 4d70a1f4cf4c8e6ddf3b8a267a68211a661871fb..469bb24f7fb59753a6d02f8d4fbd0c25c8e946ec 100644
--- a/daemon/src/sip/sipvoiplink.cpp
+++ b/daemon/src/sip/sipvoiplink.cpp
@@ -617,6 +617,78 @@ void SIPVoIPLink::cancelKeepAliveTimer(pj_timer_entry& timer)
 
 Call *SIPVoIPLink::newOutgoingCall(const std::string& id, const std::string& toUrl)
 {
+    static const char * const SIP_SCHEME = "sip:";
+    static const char * const SIPS_SCHEME = "sips:";
+
+    DEBUG("UserAgent: New outgoing call");
+
+    bool IPToIP = toUrl.find(SIP_SCHEME) == 0 or
+                  toUrl.find(SIPS_SCHEME) == 0;
+
+    Manager::instance().setIPToIPForCall(id, IPToIP);
+
+    try {
+        if (IPToIP) {
+            return SIPNewIpToIpCall(id, toUrl);
+        }
+        else {
+            return newRegisteredAccountCall(id, toUrl);
+        }
+    }
+    catch(...) {
+        throw;
+    }
+}
+
+Call *SIPVoIPLink::SIPNewIpToIpCall(const std::string& id, const std::string& to)
+{
+    DEBUG("UserAgent: New IP to IP call to %s", to.c_str());
+
+    SIPAccount *account = Manager::instance().getIP2IPAccount();
+
+    if (!account)
+        throw VoipLinkException("Could not retrieve default account for IP2IP call");
+
+    SIPCall *call = new SIPCall(id, Call::OUTGOING, cp_);
+
+    call->setIPToIP(true);
+    call->initRecFilename(to);
+
+    std::string localAddress(SipTransport::getInterfaceAddrFromName(account->getLocalInterface()));
+
+    if (localAddress == "0.0.0.0")
+        localAddress = SipTransport::getSIPLocalIP();
+
+    setCallMediaLocal(call, localAddress);
+
+    std::string toUri = account->getToUri(to);
+    call->setPeerNumber(toUri);
+
+    sfl::Codec* audiocodec = Manager::instance().audioCodecFactory.instantiateCodec(PAYLOAD_CODEC_ULAW);
+
+    // Audio Rtp Session must be initialized before creating initial offer in SDP session
+    // since SDES require crypto attribute.
+    call->getAudioRtp().initConfig();
+    call->getAudioRtp().initSession();
+    call->getAudioRtp().initLocalCryptoInfo();
+    call->getAudioRtp().start(static_cast<sfl::AudioCodec *>(audiocodec));
+
+    // Building the local SDP offer
+    call->getLocalSDP()->setLocalIP(localAddress);
+    call->getLocalSDP()->createOffer(account->getActiveCodecs());
+
+    if (!SIPStartCall(call)) {
+        delete call;
+        throw VoipLinkException("Could not create new call");
+    }
+
+    return call;
+}
+
+Call *SIPVoIPLink::newRegisteredAccountCall(const std::string& id, const std::string& toUrl)
+{
+    DEBUG("UserAgent: New registered account call to %s", toUrl.c_str());
+
     SIPAccount *account = dynamic_cast<SIPAccount *>(Manager::instance().getAccount(Manager::instance().getAccountFromCall(id)));
 
     if (account == NULL) // TODO: We should investigate how we could get rid of this error and create a IP2IP call instead
@@ -1115,51 +1187,6 @@ SIPVoIPLink::getSIPCall(const std::string& id)
     return result;
 }
 
-bool SIPVoIPLink::SIPNewIpToIpCall(const std::string& id, const std::string& to)
-{
-    SIPAccount *account = Manager::instance().getIP2IPAccount();
-
-    if (!account) {
-        ERROR("Error could not retrieve default account for IP2IP call");
-        return false;
-    }
-
-    SIPCall *call = new SIPCall(id, Call::OUTGOING, cp_);
-    call->setIPToIP(true);
-    call->initRecFilename(to);
-
-    std::string localAddress(SipTransport::getInterfaceAddrFromName(account->getLocalInterface()));
-
-    if (localAddress == "0.0.0.0")
-        localAddress = SipTransport::getSIPLocalIP();
-
-    setCallMediaLocal(call, localAddress);
-
-    std::string toUri = account->getToUri(to);
-    call->setPeerNumber(toUri);
-
-    sfl::Codec* audiocodec = Manager::instance().audioCodecFactory.instantiateCodec(PAYLOAD_CODEC_ULAW);
-
-    // Audio Rtp Session must be initialized before creating initial offer in SDP session
-    // since SDES require crypto attribute.
-    call->getAudioRtp().initConfig();
-    call->getAudioRtp().initSession();
-    call->getAudioRtp().initLocalCryptoInfo();
-    call->getAudioRtp().start(static_cast<sfl::AudioCodec *>(audiocodec));
-
-    // Building the local SDP offer
-    call->getLocalSDP()->setLocalIP(localAddress);
-    call->getLocalSDP()->createOffer(account->getActiveCodecs());
-
-    if (!SIPStartCall(call)) {
-        delete call;
-        return false;
-    }
-
-    return true;
-}
-
-
 ///////////////////////////////////////////////////////////////////////////////
 // Private functions
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/daemon/src/sip/sipvoiplink.h b/daemon/src/sip/sipvoiplink.h
index 433001153dca61356c0f56ffa59950963e758df2..01ea3c1ffd77087ba6d2cc094099d4f4bcdd4e04 100644
--- a/daemon/src/sip/sipvoiplink.h
+++ b/daemon/src/sip/sipvoiplink.h
@@ -107,6 +107,20 @@ class SIPVoIPLink : public VoIPLink {
          */
         virtual Call* newOutgoingCall(const std::string& id, const std::string& toUrl);
 
+        /**
+         * Start a new SIP call using the IP2IP profile
+         * @param The call id
+         * @param The target sip uri
+         */
+        Call *SIPNewIpToIpCall(const std::string& id, const std::string& to);
+
+        /**
+         * Place a call using the currently selected account
+         * @param The call id
+         * @param The target sip uri
+         */
+        Call *newRegisteredAccountCall(const std::string& id, const std::string& toUrl);
+
         /**
          * Answer the call
          * @param c The call
@@ -169,13 +183,6 @@ class SIPVoIPLink : public VoIPLink {
          */
         virtual void carryingDTMFdigits(const std::string& id, char code);
 
-        /**
-         * Start a new SIP call using the IP2IP profile
-         * @param The call id
-         * @param The target sip uri
-         */
-        bool SIPNewIpToIpCall(const std::string& id, const std::string& to);
-
         /**
          * Tell the user that the call was answered
          * @param
diff --git a/gnome/src/actions.c b/gnome/src/actions.c
index d74a3987709ab3454eba7e42acdbe1798c7ae472..b14c0e4aeb5771eba42255f481f4d578d4ac15f0 100644
--- a/gnome/src/actions.c
+++ b/gnome/src/actions.c
@@ -816,7 +816,9 @@ void
 sflphone_place_call(callable_obj_t * c)
 {
     DEBUG("Actions: Placing call with %s @ %s and accountid %s", c->_display_name, c->_peer_number, c->_accountID);
-
+    if (place_registered_call(c) < 0)
+        DEBUG("An error occured while placing registered call in %s at %d", __FILE__, __LINE__);
+/*
     if (is_direct_call(c)) {
         gchar *msg = g_markup_printf_escaped(_("Direct SIP call"));
         statusbar_pop_message(__MSG_ACCOUNT_DEFAULT);
@@ -826,6 +828,7 @@ sflphone_place_call(callable_obj_t * c)
         place_direct_call(c);
     } else if (place_registered_call(c) < 0)
         DEBUG("An error occured while placing registered call in %s at %d", __FILE__, __LINE__);
+*/
 }