diff --git a/src/com/savoirfairelinux/sflphone/client/AccountSelectionDialog.java b/src/com/savoirfairelinux/sflphone/client/AccountSelectionDialog.java
index f2c13c8..32d8a1b 100644
--- a/src/com/savoirfairelinux/sflphone/client/AccountSelectionDialog.java
+++ b/src/com/savoirfairelinux/sflphone/client/AccountSelectionDialog.java
@@ -68,7 +68,8 @@
         // public void onClick(DialogInterface dialog, int which) {
         public void onItemClick (AdapterView<?> parent, View view, int position, long id) {
             Log.i(TAG, "Selected Account: " + ((TextView)view).getText());
-            mButton.setText(((TextView)view).getText());
+            // mButton.setText(((TextView)view).getText());
+            mButton.accountSelectedNotifyAccountList(((TextView)view).getText().toString());
         }
     };
 
diff --git a/src/com/savoirfairelinux/sflphone/client/CallElementList.java b/src/com/savoirfairelinux/sflphone/client/CallElementList.java
index cb2f249..687059e 100644
--- a/src/com/savoirfairelinux/sflphone/client/CallElementList.java
+++ b/src/com/savoirfairelinux/sflphone/client/CallElementList.java
@@ -339,6 +339,7 @@
 
         mAccountSelectionButton = (AccountSelectionButton) inflatedView.findViewById(R.id.account_selection_button);
         mAccountList.addManagementUI(mAccountSelectionButton);
+        mAccountSelectionButton.setAccountList(mAccountList);
 
         return inflatedView;
     }
diff --git a/src/com/savoirfairelinux/sflphone/client/ContactListFragment.java b/src/com/savoirfairelinux/sflphone/client/ContactListFragment.java
index 2e870b9..0996cb2 100644
--- a/src/com/savoirfairelinux/sflphone/client/ContactListFragment.java
+++ b/src/com/savoirfairelinux/sflphone/client/ContactListFragment.java
@@ -280,6 +280,7 @@
         // Button accountSelectionButton = (Button) inflatedView.findViewById(R.id.account_selection_button);
         mAccountSelectionButton = (AccountSelectionButton) inflatedView.findViewById(R.id.account_selection_button);
         mAccountList.addManagementUI(mAccountSelectionButton);
+        mAccountSelectionButton.setAccountList(mAccountList);
 
         return inflatedView;
     }
diff --git a/src/com/savoirfairelinux/sflphone/utils/AccountList.java b/src/com/savoirfairelinux/sflphone/utils/AccountList.java
index 016c049..441f149 100644
--- a/src/com/savoirfairelinux/sflphone/utils/AccountList.java
+++ b/src/com/savoirfairelinux/sflphone/utils/AccountList.java
@@ -66,6 +66,14 @@
         mUserInterfaceList.add(ui);
     }
 
+    public void accountSelected(String accountID, AccountManagementUI userInterface) {
+        if(!mUserInterfaceList.isEmpty()) {
+            for(AccountManagementUI ui : mUserInterfaceList) {
+                 ui.setSelectedAccount(accountID);
+            }
+        }
+    }
+
     @Override
     public void onReceive(Context context, Intent intent)
     {
@@ -106,12 +114,9 @@
 
             if(newList.size() > mList.size()) {
                 for(AccountManagementUI ui : mUserInterfaceList) {
-                    Log.i(TAG, "UPDATE UI");
                     ui.accountAdded(newList);
                 }
             }
-        } else {
-            Log.i(TAG, "UI LIST IS EMPTY");
         }
 
         mList = newList;
diff --git a/src/com/savoirfairelinux/sflphone/utils/AccountManagementUI.java b/src/com/savoirfairelinux/sflphone/utils/AccountManagementUI.java
index 289c0a6..c6ec217 100644
--- a/src/com/savoirfairelinux/sflphone/utils/AccountManagementUI.java
+++ b/src/com/savoirfairelinux/sflphone/utils/AccountManagementUI.java
@@ -32,8 +32,16 @@
 
 import java.util.ArrayList;
 
+import com.savoirfairelinux.sflphone.utils.AccountList;
+
 public interface AccountManagementUI
 {
+    public void setAccountList(AccountList accountList);
+
+    public void accountSelectedNotifyAccountList(String accountID);
+
+    public void setSelectedAccount(String accountID);
+
     public void accountAdded(ArrayList<String> newList);
 
     public void accountRemoved();
diff --git a/src/com/savoirfairelinux/sflphone/utils/AccountSelectionButton.java b/src/com/savoirfairelinux/sflphone/utils/AccountSelectionButton.java
index 1049ed8..2ba03de 100644
--- a/src/com/savoirfairelinux/sflphone/utils/AccountSelectionButton.java
+++ b/src/com/savoirfairelinux/sflphone/utils/AccountSelectionButton.java
@@ -48,6 +48,7 @@
     private ISipService mService;
     private Context mContext;
     private ArrayList<String> mList = new ArrayList<String>();
+    private AccountList mAccountList = null;
 
     public AccountSelectionButton(Context context) {
         super(context);
@@ -78,6 +79,20 @@
         });
     }
 
+    public void setAccountList(AccountList accountList) {
+        mAccountList = accountList;
+    }
+
+    public void accountSelectedNotifyAccountList(String accountID) {
+        if(mAccountList != null) {
+            mAccountList.accountSelected(accountID, this);
+        }
+    }
+
+    public void setSelectedAccount(String accountID) {
+        setText(accountID);
+    }
+
     public void accountAdded(ArrayList<String> newList) {
         Log.i(TAG, "Account added");
         mList = newList;
