diff --git a/src/org/sflphone/account/CredentialsManager.java b/src/org/sflphone/account/CredentialsManager.java
index 278a359..d8aa528 100644
--- a/src/org/sflphone/account/CredentialsManager.java
+++ b/src/org/sflphone/account/CredentialsManager.java
@@ -118,6 +118,7 @@
 
         @Override
         public boolean onPreferenceChange(Preference preference, Object newValue) {
+            mAccount.addCredential((AccountCredentials) newValue);
             mAccount.notifyObservers();
             reloadCredentials();
             return false;
diff --git a/src/org/sflphone/client/AccountEditionActivity.java b/src/org/sflphone/client/AccountEditionActivity.java
index a6d60db..b8b71b5 100644
--- a/src/org/sflphone/client/AccountEditionActivity.java
+++ b/src/org/sflphone/client/AccountEditionActivity.java
@@ -160,6 +160,7 @@
 
         if (toDisplay != null) {
             getFragmentManager().beginTransaction().setCustomAnimations(R.animator.slidein_up, R.animator.slideout_down).remove(toDisplay).commit();
+            ((SecurityAccountFragment) mPreferencesPagerAdapter.getItem(3)).setCredentialSummary();
             toDisplay = null;
             return;
         }
@@ -175,15 +176,11 @@
 
     @Override
     protected void onDestroy() {
-
+        super.onDestroy();
         if (mBound) {
             unbindService(mConnection);
             mBound = false;
         }
-
-        // stopService(new Intent(this, SipService.class));
-        // serviceIsOn = false;
-        super.onDestroy();
     }
 
     @Override
@@ -192,7 +189,9 @@
         switch (item.getItemId()) {
         case android.R.id.home:
             if (toDisplay != null) {
-                getFragmentManager().beginTransaction().setCustomAnimations(R.animator.slidein_up, R.animator.slideout_down).remove(toDisplay).commit();
+                getFragmentManager().beginTransaction().setCustomAnimations(R.animator.slidein_up, R.animator.slideout_down).remove(toDisplay)
+                        .commit();
+                ((SecurityAccountFragment) mPreferencesPagerAdapter.getItem(3)).setCredentialSummary();
                 toDisplay = null;
             } else
                 finish();
diff --git a/src/org/sflphone/fragments/SecurityAccountFragment.java b/src/org/sflphone/fragments/SecurityAccountFragment.java
index 750ad1d..90c8f8d 100644
--- a/src/org/sflphone/fragments/SecurityAccountFragment.java
+++ b/src/org/sflphone/fragments/SecurityAccountFragment.java
@@ -69,13 +69,18 @@
     }
 
     @Override
+    public void onResume() {
+        super.onResume();
+        
+    }
+
+    @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
         // Load the preferences from an XML resource
         addPreferencesFromResource(R.xml.account_security_prefs);
-
-        findPreference("Credential.count").setSummary("" + mCallbacks.getAccount().getCredentials().size());
+        setCredentialSummary();
         findPreference("Credential.count").setOnPreferenceClickListener(new OnPreferenceClickListener() {
 
             @Override
@@ -85,19 +90,24 @@
             }
         });
 
-        setSrtpPreferenceDetails(mCallbacks.getAccount().getSrtpDetails());
-        addPreferenceListener(mCallbacks.getAccount().getSrtpDetails(), changeSrtpModeListener);
-
-        findPreference("TLS.details").setOnPreferenceClickListener(new OnPreferenceClickListener() {
-
-            @Override
-            public boolean onPreferenceClick(Preference preference) {
-                mCallbacks.displayTLSScreen();
-                return false;
-            }
-        });
+        // setSrtpPreferenceDetails(mCallbacks.getAccount().getSrtpDetails());
+        // addPreferenceListener(mCallbacks.getAccount().getSrtpDetails(), changeSrtpModeListener);
+        //
+        // findPreference("TLS.details").setOnPreferenceClickListener(new OnPreferenceClickListener() {
+        //
+        // @Override
+        // public boolean onPreferenceClick(Preference preference) {
+        // mCallbacks.displayTLSScreen();
+        // return false;
+        // }
+        // });
 
     }
+    
+    public void setCredentialSummary(){
+        findPreference("Credential.count").setSummary("" + mCallbacks.getAccount().getCredentials().size());
+    }
+    
 
     private void setSrtpPreferenceDetails(AccountDetailSrtp details) {
 
