* #34699: large rewrite of account credentials access to display preferences
diff --git a/src/org/sflphone/account/AccountCredentials.java b/src/org/sflphone/account/AccountCredentials.java
new file mode 100644
index 0000000..baeb12f
--- /dev/null
+++ b/src/org/sflphone/account/AccountCredentials.java
@@ -0,0 +1,104 @@
+package org.sflphone.account;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import org.sflphone.R;
+
+import android.util.Log;
+
+public class AccountCredentials implements AccountDetail {
+
+    private static final String TAG = AccountCredentials.class.getSimpleName();
+
+    public static final String CONFIG_ACCOUNT_USERNAME = "Account.username";
+    public static final String CONFIG_ACCOUNT_PASSWORD = "Account.password";
+    public static final String CONFIG_ACCOUNT_REALM = "Account.realm";
+    
+
+    private ArrayList<AccountDetail.PreferenceEntry> privateArray;
+
+    public static ArrayList<AccountDetail.PreferenceEntry> getPreferenceEntries() {
+        ArrayList<AccountDetail.PreferenceEntry> preference = new ArrayList<AccountDetail.PreferenceEntry>();
+
+        preference.add(new PreferenceEntry(CONFIG_ACCOUNT_USERNAME, R.string.account_username_label));
+        preference.add(new PreferenceEntry(CONFIG_ACCOUNT_PASSWORD, R.string.account_password_label));
+        preference.add(new PreferenceEntry(CONFIG_ACCOUNT_REALM, R.string.account_realm_label));
+
+        return preference;
+    }
+
+    public AccountCredentials() {
+        privateArray = getPreferenceEntries();
+    }
+
+    public AccountCredentials(HashMap<String, String> pref) {
+        privateArray = getPreferenceEntries();
+
+        for (AccountDetail.PreferenceEntry p : privateArray) {
+            p.mValue = pref.get(p.mKey);
+        }
+    }
+
+    public AccountCredentials(ArrayList<String> pref) {
+        privateArray = getPreferenceEntries();
+
+        if (pref.size() != privateArray.size()) {
+            Log.i(TAG, "Error list are not of equal size");
+        } else {
+            int index = 0;
+            for (String s : pref) {
+                privateArray.get(index).mValue = s;
+                index++;
+            }
+        }
+    }
+
+    public ArrayList<AccountDetail.PreferenceEntry> getDetailValues() {
+        return privateArray;
+    }
+
+    public ArrayList<String> getValuesOnly() {
+        ArrayList<String> valueList = new ArrayList<String>();
+
+        for (AccountDetail.PreferenceEntry p : privateArray) {
+            Log.i(TAG, "" + p.mValue);
+            valueList.add(p.mValue);
+        }
+
+        return valueList;
+    }
+
+    public HashMap<String, String> getDetailsHashMap() {
+        HashMap<String, String> map = new HashMap<String, String>();
+
+        for (AccountDetail.PreferenceEntry p : privateArray) {
+            map.put(p.mKey, p.mValue);
+        }
+
+        return map;
+    }
+
+    public String getDetailString(String key) {
+        String value = "";
+
+        for (AccountDetail.PreferenceEntry p : privateArray) {
+            if (p.mKey.equals(key)) {
+                value = p.mValue;
+                return value;
+            }
+        }
+        return value;
+    }
+
+    public void setDetailString(String key, String newValue) {
+        for (int i = 0; i < privateArray.size(); ++i) {
+            PreferenceEntry p = privateArray.get(i);
+            if (p.mKey.equals(key)) {
+                privateArray.get(i).mValue = newValue;
+            }
+        }
+
+    }
+
+}
\ No newline at end of file
diff --git a/src/org/sflphone/account/AccountDetailBasic.java b/src/org/sflphone/account/AccountDetailBasic.java
index 6b312bc..66ea886 100644
--- a/src/org/sflphone/account/AccountDetailBasic.java
+++ b/src/org/sflphone/account/AccountDetailBasic.java
@@ -45,10 +45,7 @@
     public static final String CONFIG_ACCOUNT_TYPE = "Account.type";
     public static final String CONFIG_ACCOUNT_ENABLE = "Account.enable";
 
-    public static final String CONFIG_ACCOUNT_DEFAULT_TYPE = "SIP";
-    public static final String CONFIG_ACCOUNT_DEFAULT_ENABLE = "true";
-    public static final String CONFIG_ACCOUNT_DEFAULT_REALM = "*";
-    public static final String CONFIG_ACCOUNT_DEFAULT_USERAGENT = "SFLphone";
+
 
     private ArrayList<AccountDetail.PreferenceEntry> privateArray;
 
diff --git a/src/org/sflphone/account/AccountDetailsHandler.java b/src/org/sflphone/account/AccountDetailsHandler.java
index b16022c..e3a43d5 100644
--- a/src/org/sflphone/account/AccountDetailsHandler.java
+++ b/src/org/sflphone/account/AccountDetailsHandler.java
@@ -24,9 +24,11 @@
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 
 import org.sflphone.R;
 import org.sflphone.service.StringMap;
+import org.sflphone.service.VectMap;
 
 public class AccountDetailsHandler {
     // private static final String TAG = "AccountDetailsHandler";
@@ -243,4 +245,34 @@
 
         return nativemap;
     }
+
+    public static ArrayList<HashMap<String, String>> convertCredentialsToNative(VectMap map) {
+        
+        ArrayList<HashMap<String, String>> toReturn = new ArrayList<HashMap<String,String>>();
+        StringMap entry;
+        HashMap<String, String> nativeEntry = new HashMap<String, String>();
+        for(int i = 0 ; i < map.size() ; ++i){
+            entry = map.get(i);
+            nativeEntry.put(AccountDetailBasic.CONFIG_ACCOUNT_PASSWORD, entry.get(AccountDetailBasic.CONFIG_ACCOUNT_PASSWORD));
+            nativeEntry.put(AccountDetailBasic.CONFIG_ACCOUNT_USERNAME, entry.get(AccountDetailBasic.CONFIG_ACCOUNT_USERNAME));
+            nativeEntry.put(AccountDetailBasic.CONFIG_ACCOUNT_REALM, entry.get(AccountDetailBasic.CONFIG_ACCOUNT_REALM));
+            toReturn.add(nativeEntry);
+        }
+        return toReturn;
+    }
+
+    public static VectMap convertCredentialsToSwig(List creds) {
+        ArrayList<HashMap<String, String>> todecode = (ArrayList<HashMap<String, String>>) creds;
+        VectMap toReturn = new VectMap();
+        StringMap entry = new StringMap();
+        HashMap<String, String> nativeEntry;
+        for(int i = 0 ; i < todecode.size() ; ++i){
+            nativeEntry = todecode.get(i);
+            entry.set(AccountDetailBasic.CONFIG_ACCOUNT_PASSWORD, nativeEntry.get(AccountDetailBasic.CONFIG_ACCOUNT_PASSWORD));
+            entry.set(AccountDetailBasic.CONFIG_ACCOUNT_USERNAME, nativeEntry.get(AccountDetailBasic.CONFIG_ACCOUNT_USERNAME));
+            entry.set(AccountDetailBasic.CONFIG_ACCOUNT_REALM, nativeEntry.get(AccountDetailBasic.CONFIG_ACCOUNT_REALM));
+            toReturn.add(entry);
+        }
+        return toReturn;
+    }
 };
diff --git a/src/org/sflphone/client/AccountEditionActivity.java b/src/org/sflphone/client/AccountEditionActivity.java
index a84d127..b083f4b 100644
--- a/src/org/sflphone/client/AccountEditionActivity.java
+++ b/src/org/sflphone/client/AccountEditionActivity.java
@@ -69,6 +69,7 @@
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
+import android.view.View;
 
 public class AccountEditionActivity extends Activity implements TabListener, GeneralAccountFragment.Callbacks, AudioManagementFragment.Callbacks,
         AdvancedAccountFragment.Callbacks, SecurityAccountFragment.Callbacks, NestedSettingsFragment.Callbacks {
@@ -78,6 +79,8 @@
     private boolean mBound = false;
     private ISipService service;
 
+    private View mOverlayContainer;
+
     private Account acc_selected;
 
     PreferencesPagerAdapter mPreferencesPagerAdapter;
@@ -140,6 +143,7 @@
             }
         });
 
+        mOverlayContainer = findViewById(R.id.hidden_container);
         acc_selected = getIntent().getExtras().getParcelable("account");
 
         if (!mBound) {
@@ -401,4 +405,13 @@
         return acc_selected;
     }
 
+    @Override
+    public void displayCredentialsScreen() {
+        Fragment toDisplay = new NestedSettingsFragment();
+        Bundle b = new Bundle();
+        b.putInt("MODE", 0);
+        toDisplay.setArguments(b);
+        getFragmentManager().beginTransaction().replace(R.id.hidden_container, toDisplay).commit();
+    }
+
 }
diff --git a/src/org/sflphone/client/CallActivity.java b/src/org/sflphone/client/CallActivity.java
index a4781b4..e237277 100644
--- a/src/org/sflphone/client/CallActivity.java
+++ b/src/org/sflphone/client/CallActivity.java
@@ -105,7 +105,7 @@
         slidingPaneLayout = (CallPaneLayout) findViewById(R.id.slidingpanelayout);
         slidingPaneLayout.setParallaxDistance(500);
         slidingPaneLayout.setSliderFadeColor(Color.TRANSPARENT);
-        
+
         slidingPaneLayout.setPanelSlideListener(new SlidingPaneLayout.PanelSlideListener() {
 
             @Override
@@ -207,7 +207,9 @@
                     service.destroyNotification();
 
                     String accountID = (String) service.getAccountList().get(1); // We use the first account to place outgoing calls
-                    Account acc = new Account(accountID, (HashMap<String, String>) service.getAccountDetails(accountID));
+                    HashMap<String, String> details = (HashMap<String, String>) service.getAccountDetails(accountID);
+                    ArrayList<HashMap<String, String>> credentials = (ArrayList<HashMap<String, String>>) service.getCredentials(accountID);
+                    Account acc = new Account(accountID, details, credentials);
 
                     SipCall call = SipCall.SipCallBuilder.getInstance().startCallCreation().setContact(c).setAccount(acc)
                             .setCallType(SipCall.state.CALL_TYPE_OUTGOING).build();
@@ -235,7 +237,7 @@
 
                 } else {
                     mCurrentCallFragment.setArguments(getIntent().getExtras());
-                    
+
                     Bundle IMBundle = new Bundle();
                     IMBundle.putParcelableArrayList("messages", new ArrayList<SipMessage>());
                     mIMFragment.setArguments(IMBundle);
@@ -350,15 +352,15 @@
         mHandler.removeCallbacks(mUpdateTimeTask);
         mCurrentCallFragment.getBubbleView().stopThread();
         TimerTask quit = new TimerTask() {
-            
+
             @Override
             public void run() {
                 finish();
             }
         };
-        
+
         new Timer().schedule(quit, 2000);
-        
+
     }
 
     @Override
diff --git a/src/org/sflphone/fragments/NestedSettingsFragment.java b/src/org/sflphone/fragments/NestedSettingsFragment.java
index 6a27c6e..c418e41 100644
--- a/src/org/sflphone/fragments/NestedSettingsFragment.java
+++ b/src/org/sflphone/fragments/NestedSettingsFragment.java
@@ -6,6 +6,7 @@
 import java.util.Enumeration;
 
 import org.sflphone.R;
+import org.sflphone.account.AccountCredentials;
 import org.sflphone.account.AccountDetail;
 import org.sflphone.account.AccountDetailAdvanced;
 import org.sflphone.model.Account;
@@ -18,6 +19,9 @@
 import android.preference.Preference.OnPreferenceChangeListener;
 import android.preference.PreferenceFragment;
 import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
 
 public class NestedSettingsFragment extends PreferenceFragment {
 
@@ -48,7 +52,7 @@
             throw new IllegalStateException("Activity must implement fragment's callbacks.");
         }
 
-        Log.e(TAG,"Attaching Adavnced");
+        Log.e(TAG, "Attaching Adavnced");
         mCallbacks = (Callbacks) activity;
     }
 
@@ -63,11 +67,41 @@
         super.onCreate(savedInstanceState);
 
         // Load the preferences from an XML resource
-//        addPreferencesFromResource(R.xml.account_advanced_prefs);
-//        setPreferenceDetails(mCallbacks.getAccount().getAdvancedDetails());
-//        addPreferenceListener(mCallbacks.getAccount().getAdvancedDetails(), changeAdvancedPreferenceListener);
-        
-        
+        switch (getArguments().getInt("MODE")) {
+        case 0:
+
+            addPreferencesFromResource(R.xml.account_credentials);
+            addAllCredentials();
+            break;
+        case 1:
+            break;
+        case 2:
+            break;
+        }
+
+        // setPreferenceDetails(mCallbacks.getAccount().getAdvancedDetails());
+        // addPreferenceListener(mCallbacks.getAccount().getAdvancedDetails(), changeAdvancedPreferenceListener);
+
+    }
+
+    private void addAllCredentials() {
+
+        ArrayList<AccountCredentials> credentials = mCallbacks.getAccount().getCredentials();
+        for (AccountCredentials cred : credentials) {
+            Preference toAdd = new Preference(getActivity());
+            toAdd.setTitle(cred.getDetailString(AccountCredentials.CONFIG_ACCOUNT_USERNAME));
+            toAdd.setSummary(cred.getDetailString(AccountCredentials.CONFIG_ACCOUNT_PASSWORD));
+            getPreferenceScreen().addPreference(toAdd);
+        }
+
+    }
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+        View view = super.onCreateView(inflater, container, savedInstanceState);
+        view.setBackgroundColor(getResources().getColor(android.R.color.white));
+
+        return view;
     }
 
     private void setPreferenceDetails(AccountDetail details) {
@@ -125,15 +159,14 @@
         public boolean onPreferenceChange(Preference preference, Object newValue) {
             setDifferent(true);
             if (preference instanceof CheckBoxPreference) {
-                     mCallbacks.getAccount().getAdvancedDetails().setDetailString(preference.getKey(), ((Boolean) newValue).toString());
-                     if(preference.getKey().contentEquals("STUN.enable")){
-                         findPreference("STUN.server").setEnabled((Boolean) newValue);
-                     } else if (preference.getKey().contentEquals("Account.publishedSameAsLocal")){
-                         findPreference("Account.publishedPort").setEnabled((Boolean) newValue);
-                         findPreference("Account.publishedAddress").setEnabled((Boolean) newValue);
-                     }
-                    
-                    
+                mCallbacks.getAccount().getAdvancedDetails().setDetailString(preference.getKey(), ((Boolean) newValue).toString());
+                if (preference.getKey().contentEquals("STUN.enable")) {
+                    findPreference("STUN.server").setEnabled((Boolean) newValue);
+                } else if (preference.getKey().contentEquals("Account.publishedSameAsLocal")) {
+                    findPreference("Account.publishedPort").setEnabled((Boolean) newValue);
+                    findPreference("Account.publishedAddress").setEnabled((Boolean) newValue);
+                }
+
             } else {
                 preference.setSummary((CharSequence) newValue);
                 Log.i(TAG, "Changing preference value:" + newValue);
diff --git a/src/org/sflphone/fragments/SecurityAccountFragment.java b/src/org/sflphone/fragments/SecurityAccountFragment.java
index 020edc0..51c6cb3 100644
--- a/src/org/sflphone/fragments/SecurityAccountFragment.java
+++ b/src/org/sflphone/fragments/SecurityAccountFragment.java
@@ -7,9 +7,9 @@
 import android.app.Activity;
 import android.os.Bundle;
 import android.preference.CheckBoxPreference;
-import android.preference.EditTextPreference;
 import android.preference.Preference;
 import android.preference.Preference.OnPreferenceChangeListener;
+import android.preference.Preference.OnPreferenceClickListener;
 import android.preference.PreferenceFragment;
 import android.util.Log;
 
@@ -18,7 +18,6 @@
     private static final String TAG = SecurityAccountFragment.class.getSimpleName();
 
     private boolean isDifferent = false;
-
     private Callbacks mCallbacks = sDummyCallbacks;
     private static Callbacks sDummyCallbacks = new Callbacks() {
 
@@ -27,12 +26,18 @@
             return null;
         }
 
+        @Override
+        public void displayCredentialsScreen() {
+        }
+
     };
 
     public interface Callbacks {
 
         public Account getAccount();
 
+        public void displayCredentialsScreen();
+
     }
 
     @Override
@@ -57,26 +62,36 @@
 
         // Load the preferences from an XML resource
         addPreferencesFromResource(R.xml.account_security_prefs);
-//        setPreferenceDetails(mCallbacks.getAccount().getTlsDetails());
-//        setPreferenceDetails(mCallbacks.getAccount().getSrtpDetails());
-//        addPreferenceListener(mCallbacks.getAccount().getTlsDetails(), changeTlsPreferenceListener);
-//        addPreferenceListener(mCallbacks.getAccount().getSrtpDetails(), changeSrtpPreferenceListener);
+        setPreferenceDetails(mCallbacks.getAccount().getTlsDetails());
+        // setPreferenceDetails(mCallbacks.getAccount().getSrtpDetails());
+        // addPreferenceListener(mCallbacks.getAccount().getTlsDetails(), changeTlsPreferenceListener);
+        // addPreferenceListener(mCallbacks.getAccount().getSrtpDetails(), changeSrtpPreferenceListener);
 
     }
 
     private void setPreferenceDetails(AccountDetail details) {
-        for (AccountDetail.PreferenceEntry p : details.getDetailValues()) {
-            Log.i(TAG, "setPreferenceDetails: pref " + p.mKey + " value " + p.mValue);
-            Preference pref = findPreference(p.mKey);
-            if (pref != null) {
-                if (!p.isTwoState) {
-                    ((EditTextPreference) pref).setText(p.mValue);
-                    pref.setSummary(p.mValue);
-                }
-            } else {
-                Log.w(TAG, "pref not found");
+
+        findPreference("Credential.count").setOnPreferenceClickListener(new OnPreferenceClickListener() {
+
+            @Override
+            public boolean onPreferenceClick(Preference preference) {
+                mCallbacks.displayCredentialsScreen();
+                return false;
             }
-        }
+        });
+
+        // for (AccountDetail.PreferenceEntry p : details.getDetailValues()) {
+        // Log.i(TAG, "setPreferenceDetails: pref " + p.mKey + " value " + p.mValue);
+        // Preference pref = findPreference(p.mKey);
+        // if (pref != null) {
+        // if (!p.isTwoState) {
+        // ((EditTextPreference) pref).setText(p.mValue);
+        // pref.setSummary(p.mValue);
+        // }
+        // } else {
+        // Log.w(TAG, "pref not found");
+        // }
+        // }
     }
 
     private void addPreferenceListener(AccountDetail details, OnPreferenceChangeListener listener) {
diff --git a/src/org/sflphone/loaders/AccountsLoader.java b/src/org/sflphone/loaders/AccountsLoader.java
index e4bf4ce..e5b85e3 100644
--- a/src/org/sflphone/loaders/AccountsLoader.java
+++ b/src/org/sflphone/loaders/AccountsLoader.java
@@ -35,15 +35,17 @@
         try {
             ArrayList<String> accountIDs = (ArrayList<String>) service.getAccountList();
             HashMap<String, String> details;
+            ArrayList<HashMap<String, String>> credentials;
             for (String id : accountIDs) {
 
                 if (id.contentEquals(ACCOUNT_IP2IP)) {
                     details = (HashMap<String, String>) service.getAccountDetails(id);
-                    IP2IP = new Account(ACCOUNT_IP2IP, details);
+                    IP2IP = new Account(ACCOUNT_IP2IP, details, new ArrayList<HashMap<String, String>>()); // Empty credentials
                     continue;
                 }
                 details = (HashMap<String, String>) service.getAccountDetails(id);
-                Account tmp = new Account(id, details);
+                credentials = (ArrayList<HashMap<String, String>>) service.getCredentials(id);
+                Account tmp = new Account(id, details, credentials);
 
                 accounts.add(tmp);
 
@@ -55,7 +57,7 @@
         } catch (NullPointerException e1) {
             Log.e(TAG, e1.toString());
         }
-        
+
         Bundle result = new Bundle();
         result.putParcelableArrayList(ACCOUNTS, accounts);
         result.putParcelable(ACCOUNT_IP2IP, IP2IP);
diff --git a/src/org/sflphone/model/Account.java b/src/org/sflphone/model/Account.java
index 0a41479..5f1a93a 100644
--- a/src/org/sflphone/model/Account.java
+++ b/src/org/sflphone/model/Account.java
@@ -31,8 +31,10 @@
 
 package org.sflphone.model;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 
+import org.sflphone.account.AccountCredentials;
 import org.sflphone.account.AccountDetailAdvanced;
 import org.sflphone.account.AccountDetailBasic;
 import org.sflphone.account.AccountDetailSrtp;
@@ -48,13 +50,18 @@
     private AccountDetailAdvanced advancedDetails = null;
     private AccountDetailSrtp srtpDetails = null;
     private AccountDetailTls tlsDetails = null;
+    private ArrayList<AccountCredentials> credentialsDetails;
 
-    public Account(String bAccountID, HashMap<String, String> details) {
+    public Account(String bAccountID, HashMap<String, String> details, ArrayList<HashMap<String, String>> credentials) {
         accountID = bAccountID;
         basicDetails = new AccountDetailBasic(details);
         advancedDetails = new AccountDetailAdvanced(details);
         srtpDetails = new AccountDetailSrtp(details);
         tlsDetails = new AccountDetailTls(details);
+        credentialsDetails = new ArrayList<AccountCredentials>();
+        for (int i = 0; i < credentials.size(); ++i) {
+            credentialsDetails.add(new AccountCredentials(credentials.get(i)));
+        }
     }
 
     public String getAccountID() {
@@ -106,6 +113,10 @@
         dest.writeSerializable(advancedDetails.getDetailsHashMap());
         dest.writeSerializable(tlsDetails.getDetailsHashMap());
         dest.writeSerializable(srtpDetails.getDetailsHashMap());
+        dest.writeInt(credentialsDetails.size());
+        for (AccountCredentials cred : credentialsDetails) {
+            dest.writeSerializable(cred.getDetailsHashMap());
+        }
     }
 
     private void readFromParcel(Parcel in) {
@@ -115,6 +126,11 @@
         advancedDetails = new AccountDetailAdvanced((HashMap<String, String>) in.readSerializable());
         srtpDetails = new AccountDetailSrtp((HashMap<String, String>) in.readSerializable());
         tlsDetails = new AccountDetailTls((HashMap<String, String>) in.readSerializable());
+        credentialsDetails = new ArrayList<AccountCredentials>();
+        int cred_count = in.readInt();
+        for (int i = 0; i < cred_count; ++i) {
+            credentialsDetails.add(new AccountCredentials((HashMap<String, String>) in.readSerializable()));
+        }
     }
 
     public static final Parcelable.Creator<Account> CREATOR = new Parcelable.Creator<Account>() {
@@ -162,8 +178,7 @@
     }
 
     public boolean isEnabled() {
-        return (basicDetails.getDetailString(AccountDetailBasic.CONFIG_ACCOUNT_ENABLE)
-                .contentEquals(AccountDetailBasic.CONFIG_ACCOUNT_DEFAULT_ENABLE));
+        return (basicDetails.getDetailString(AccountDetailBasic.CONFIG_ACCOUNT_ENABLE).contentEquals("true"));
     }
 
     public void setEnabled(boolean isChecked) {
@@ -194,4 +209,8 @@
         return basicDetails.getDetailString(AccountDetailBasic.CONFIG_ACCOUNT_AUTOANSWER).contentEquals("true");
     }
 
+    public ArrayList<AccountCredentials> getCredentials() {
+        return credentialsDetails;
+    }
+
 }
diff --git a/src/org/sflphone/receivers/IncomingReceiver.java b/src/org/sflphone/receivers/IncomingReceiver.java
index 077be7c..6c9b8d2 100644
--- a/src/org/sflphone/receivers/IncomingReceiver.java
+++ b/src/org/sflphone/receivers/IncomingReceiver.java
@@ -12,6 +12,7 @@
 import org.sflphone.model.SipMessage;
 import org.sflphone.service.CallManagerCallBack;
 import org.sflphone.service.ConfigurationManagerCallback;
+import org.sflphone.service.ISipService.Stub;
 import org.sflphone.service.ServiceConstants;
 import org.sflphone.service.SipService;
 
@@ -21,10 +22,6 @@
 import android.os.Bundle;
 import android.os.RemoteException;
 import android.util.Log;
-import android.widget.Toast;
-
-import org.sflphone.service.ISipService.Stub;
-import org.sflphone.service.ServiceConstants.call;
 
 public class IncomingReceiver extends BroadcastReceiver {
 
@@ -59,12 +56,11 @@
             Log.i(TAG, "Received" + intent.getAction());
             if (callback.getCurrent_calls().get(extra.getString("CallID")) != null) {
                 callback.getCurrent_calls().get(extra.get("CallID")).addSipMessage(new SipMessage(true, extra.getString("Msg")));
-            } else if(callback.getCurrent_confs().get(extra.getString("CallID")) != null){
+            } else if (callback.getCurrent_confs().get(extra.getString("CallID")) != null) {
                 callback.getCurrent_confs().get(extra.get("CallID")).addSipMessage(new SipMessage(true, extra.getString("Msg")));
-            } else 
+            } else
                 return;
-                
-           
+
             callback.sendBroadcast(intent);
 
         } else if (intent.getAction().contentEquals(CallManagerCallBack.INCOMING_CALL)) {
@@ -74,7 +70,10 @@
 
             Account acc;
             try {
-                acc = new Account(b.getString("AccountID"), (HashMap<String, String>) mBinder.getAccountDetails(b.getString("AccountID")));
+                HashMap<String, String> details = (HashMap<String, String>) mBinder.getAccountDetails(b.getString("AccountID"));
+                ArrayList<HashMap<String, String>> credentials = (ArrayList<HashMap<String, String>>) mBinder
+                        .getCredentials(b.getString("AccountID"));
+                acc = new Account(b.getString("AccountID"), details, credentials);
                 callBuilder.startCallCreation(b.getString("CallID")).setAccount(acc).setCallState(SipCall.state.CALL_STATE_RINGING)
                         .setCallType(SipCall.state.CALL_TYPE_INCOMING);
                 callBuilder.setContact(CallContact.ContactBuilder.buildUnknownContact(b.getString("From")));
@@ -83,11 +82,11 @@
 
                 SipCall newCall = callBuilder.build();
                 toSend.putExtra("newcall", newCall);
-                HashMap<String, String> details = (HashMap<String, String>) mBinder.getCallDetails(b.getString("CallID"));
-                newCall.setTimestamp_start(Long.parseLong(details.get(ServiceConstants.call.TIMESTAMP_START)));
+                HashMap<String, String> callDetails = (HashMap<String, String>) mBinder.getCallDetails(b.getString("CallID"));
+                newCall.setTimestamp_start(Long.parseLong(callDetails.get(ServiceConstants.call.TIMESTAMP_START)));
                 callback.getCurrent_calls().put(newCall.getCallId(), newCall);
                 callback.sendBroadcast(toSend);
-                
+
                 callback.mediaManager.obtainAudioFocus();
             } catch (RemoteException e1) {
                 e1.printStackTrace();
@@ -116,7 +115,7 @@
                     callback.getCurrent_calls().get(b.getString("CallID")).setCallState(SipCall.state.CALL_STATE_RINGING);
                 } catch (NullPointerException e) {
                     if (callback.getCurrent_calls() == null) {
-                        
+
                         return;
                     }
                     if (callback.getCurrent_calls().get(b.getString("CallID")) == null) {
@@ -270,27 +269,27 @@
 
             Log.i(TAG, "Received" + intent.getAction());
 
-//            try {
-//                if (callback.getCurrent_confs().get(intent.getStringExtra("id")) != null) {
-//                    callback.getCurrent_confs().get(intent.getStringExtra("id")).setRecording(mBinder.isRecording(intent.getStringExtra("id")));
-//                } else if (callback.getCurrent_calls().get(intent.getStringExtra("id")) != null) {
-//                    callback.getCurrent_calls().get(intent.getStringExtra("id")).setRecording(mBinder.isRecording(intent.getStringExtra("id")));
-//                } else {
-//                    // A call in a conference has been put on hold
-//                    Iterator<Conference> it = callback.getCurrent_confs().values().iterator();
-//                    while (it.hasNext()) {
-//                        Conference c = it.next();
-//                        if (c.getCall(intent.getStringExtra("id")) != null)
-//                            c.getCall(intent.getStringExtra("id")).setRecording(mBinder.isRecording(intent.getStringExtra("id")));
-//                    }
-//                }
-//                // Re sending the same intent to the app
-//                callback.sendBroadcast(intent);
-//                ;
-//            } catch (RemoteException e) {
-//                // TODO Auto-generated catch block
-//                e.printStackTrace();
-//            }
+            // try {
+            // if (callback.getCurrent_confs().get(intent.getStringExtra("id")) != null) {
+            // callback.getCurrent_confs().get(intent.getStringExtra("id")).setRecording(mBinder.isRecording(intent.getStringExtra("id")));
+            // } else if (callback.getCurrent_calls().get(intent.getStringExtra("id")) != null) {
+            // callback.getCurrent_calls().get(intent.getStringExtra("id")).setRecording(mBinder.isRecording(intent.getStringExtra("id")));
+            // } else {
+            // // A call in a conference has been put on hold
+            // Iterator<Conference> it = callback.getCurrent_confs().values().iterator();
+            // while (it.hasNext()) {
+            // Conference c = it.next();
+            // if (c.getCall(intent.getStringExtra("id")) != null)
+            // c.getCall(intent.getStringExtra("id")).setRecording(mBinder.isRecording(intent.getStringExtra("id")));
+            // }
+            // }
+            // // Re sending the same intent to the app
+            // callback.sendBroadcast(intent);
+            // ;
+            // } catch (RemoteException e) {
+            // // TODO Auto-generated catch block
+            // e.printStackTrace();
+            // }
 
         }
 
diff --git a/src/org/sflphone/service/ISipService.aidl b/src/org/sflphone/service/ISipService.aidl
index 4a965d2..a953acf 100644
--- a/src/org/sflphone/service/ISipService.aidl
+++ b/src/org/sflphone/service/ISipService.aidl
@@ -21,6 +21,8 @@
     Map getAccountDetails(in String accountID);
     Map getAccountTemplate();
     void setAccountDetails(in String accountId, in Map accountDetails);
+    List getCredentials(in String accountID);
+    void setCredentials(in String accountID, in List creds);
     void setAudioPlugin(in String callID);
     String getCurrentAudioOutputPlugin();
     List getAudioCodecList(in String accountID);
diff --git a/src/org/sflphone/service/SipService.java b/src/org/sflphone/service/SipService.java
index 998e37f..9fe9f5b 100644
--- a/src/org/sflphone/service/SipService.java
+++ b/src/org/sflphone/service/SipService.java
@@ -550,7 +550,6 @@
         public void setAccountDetails(final String accountId, final Map map) {
             HashMap<String, String> nativemap = (HashMap<String, String>) map;
 
-            Log.e(TAG,"CONFIG_ACCOUNT_REGISTRATION_EXPIRE:"+map.get(AccountDetailAdvanced.CONFIG_ACCOUNT_REGISTRATION_EXPIRE));
             final StringMap swigmap = AccountDetailsHandler.convertFromNativeToSwig(nativemap);
 
             getExecutor().execute(new SipRunnable() {
@@ -1301,6 +1300,37 @@
             return (Boolean) runInstance.getVal();
         }
 
+        @Override
+        public List getCredentials(final String accountID) throws RemoteException {
+            class Credentials extends SipRunnableWithReturn {
+
+                @Override
+                protected List doRun() throws SameThreadException {
+                    Log.i(TAG, "SipService.getCredentials() thread running...");
+                    VectMap map = configurationManagerJNI.getCredentials(accountID);
+                    ArrayList<HashMap<String, String>> result = AccountDetailsHandler.convertCredentialsToNative(map);
+                    return result;
+                }
+            }
+
+            Credentials runInstance = new Credentials();
+            getExecutor().execute(runInstance);
+            while (!runInstance.isDone()) {
+            }
+            return (List) runInstance.getVal();
+        }
+
+        @Override
+        public void setCredentials(final String accountID, final List creds) throws RemoteException {
+            getExecutor().execute(new SipRunnable() {
+                @Override
+                protected void doRun() throws SameThreadException, RemoteException {
+                    Log.i(TAG, "SipService.setCredentials() thread running...");
+                    configurationManagerJNI.setCredentials(accountID, AccountDetailsHandler.convertCredentialsToSwig(creds));;
+                }
+            });
+        }
+
        
 
     };