diff --git a/src/com/savoirfairelinux/sflphone/client/AccountCreationActivity.java b/src/com/savoirfairelinux/sflphone/client/AccountCreationActivity.java
index f6f97a5..e9a5b99 100644
--- a/src/com/savoirfairelinux/sflphone/client/AccountCreationActivity.java
+++ b/src/com/savoirfairelinux/sflphone/client/AccountCreationActivity.java
@@ -35,6 +35,7 @@
 import android.content.ServiceConnection;
 import android.os.Bundle;
 import android.os.IBinder;
+import android.preference.Preference;
 import android.preference.PreferenceActivity;
 import android.preference.PreferenceManager;
 import android.preference.EditTextPreference;
@@ -44,6 +45,8 @@
 import com.savoirfairelinux.sflphone.service.SipService;
 import com.savoirfairelinux.sflphone.service.ISipService;
 
+import java.util.ArrayList; 
+
 public class AccountCreationActivity extends PreferenceActivity
 {
     static final String TAG = "SFLPhonePreferenceActivity";
@@ -51,6 +54,13 @@
     private boolean mBound = false;
     private PreferenceManager mPreferenceManager = null;
 
+    Preference.OnPreferenceChangeListener changeNewAccountPreferenceListener = new Preference.OnPreferenceChangeListener() {
+        public boolean onPreferenceChange(Preference preference, Object newValue) {
+            preference.setSummary(getString(R.string.account_current_value_label) + (CharSequence)newValue);
+            return true;
+        }
+    };
+
     private ServiceConnection mConnection = new ServiceConnection() {
         @Override
         public void onServiceConnected(ComponentName className, IBinder binder) {
@@ -71,14 +81,34 @@
         super.onCreate(savedInstanceState);
 
         addPreferencesFromResource(R.xml.account_creation_preferences);
+
+         mPreferenceManager = getPreferenceManager();
+    }
+
+    @Override
+    protected void onStart() {
+        super.onStart();
+        ArrayList<String> preferenceKey = new ArrayList<String>();
+        preferenceKey.add("AccountAlias");
+        preferenceKey.add("AccountUserName");
+        preferenceKey.add("AccountHostname");
+        preferenceKey.add("AccountPassword");
+        preferenceKey.add("AccountRealm");
+        preferenceKey.add("AccountUserAgent");
+        preferenceKey.add("AccountAutoAnswer");
+
+        for(String s : preferenceKey) {
+            EditTextPreference pref = (EditTextPreference) mPreferenceManager.findPreference(s);
+            if(pref != null)
+                pref.setOnPreferenceChangeListener(changeNewAccountPreferenceListener);
+            else
+                Log.i(TAG, "NO PREFERENCE FOUND " + s);
+        }
     }
 
     @Override
     protected void onStop() {
         super.onStop();
-
-        mPreferenceManager = getPreferenceManager();
-
         EditTextPreference accountAliasPref = (EditTextPreference) mPreferenceManager.findPreference("AccountAlias");
         EditTextPreference accountUsername = (EditTextPreference) mPreferenceManager.findPreference("AccountUserName");
         EditTextPreference accountHostname = (EditTextPreference) mPreferenceManager.findPreference("AccountHostname");
diff --git a/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java b/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java
index 9494d63..45d5ae6 100644
--- a/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java
+++ b/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java
@@ -56,7 +56,6 @@
 public class AccountManagementFragment extends PreferenceFragment
 {
     static final String TAG = "AccountManagementFragment";
-    static final String CURRENT_VALUE = "Current value:: ";
     static final String DEFAULT_ACCOUNT_ID = "IP2IP";
     static final int ACCOUNT_CREATE_REQUEST = 1;
     private ISipService service;
@@ -197,7 +196,6 @@
         ArrayList<String> accountList = getAccountList();
 
         try {
-            Log.i(TAG, "============================= start set account details");
             for(String s : accountList) {
                 Log.i(TAG, "         set details for " + s);
                 service.setAccountDetails(s, mAccountList.get(s));
@@ -205,7 +203,6 @@
         } catch (RemoteException e) {
            Log.e(TAG, "Cannot call service method", e); 
         }
-        Log.i(TAG, "================================= set account details done");
     }
 
     @Override
@@ -223,18 +220,10 @@
         }
     }
 
-    boolean onTextEditPreferenceChange(Preference preference, Object newValue)
-    {
-        Log.i(TAG, "Account Preference Changed " + preference.getTitle());
-
-        preference.setSummary(CURRENT_VALUE + (CharSequence)newValue);
-
-        return true;
-    }
 
     Preference.OnPreferenceChangeListener changeBasicTextEditListener = new Preference.OnPreferenceChangeListener() {
         public boolean onPreferenceChange(Preference preference, Object newValue) {
-            preference.setSummary(CURRENT_VALUE + (CharSequence)newValue);
+            preference.setSummary(getString(R.string.account_current_value_label) + (CharSequence)newValue);
             mAccountList.get(preference.getKey()).put(basicDetailKeys.get(preference.getOrder()).mKey, ((CharSequence)newValue).toString());
             return true;
         }
@@ -242,7 +231,7 @@
 
     Preference.OnPreferenceChangeListener changeAdvancedTextEditListener = new Preference.OnPreferenceChangeListener() {
         public boolean onPreferenceChange(Preference preference, Object newValue) {
-            preference.setSummary(CURRENT_VALUE + (CharSequence)newValue);
+            preference.setSummary(getString(R.string.account_current_value_label) + (CharSequence)newValue);
             mAccountList.get(preference.getKey()).put(advancedDetailKeys.get(preference.getOrder()).mKey, ((CharSequence)newValue).toString());
             return true;
         }
@@ -354,7 +343,7 @@
             accountPref.setDialogTitle(entry.mLabelId);
             accountPref.setPersistent(false);
             accountPref.setTitle(entry.mLabelId);
-            accountPref.setSummary(CURRENT_VALUE + map.get(entry.mKey));
+            accountPref.setSummary(getString(R.string.account_current_value_label) + map.get(entry.mKey));
             accountPref.setOnPreferenceChangeListener(changeBasicTextEditListener);
             accountPref.setKey(accountID);
             accountBasicPrefCat.addPreference(accountPref);
@@ -370,7 +359,7 @@
             accountPref.setDialogTitle(entry.mLabelId);
             accountPref.setPersistent(false);
             accountPref.setTitle(entry.mLabelId);
-            accountPref.setSummary(CURRENT_VALUE + map.get(entry.mKey));
+            accountPref.setSummary(getString(R.string.account_current_value_label) + map.get(entry.mKey));
             accountPref.setOnPreferenceChangeListener(changeAdvancedTextEditListener);
             accountPref.setKey(accountID);
             accountAdvancedPrefCat.addPreference(accountPref);
