#16928: Update all UI elemnts from SipCall
diff --git a/src/com/savoirfairelinux/sflphone/client/CallElementList.java b/src/com/savoirfairelinux/sflphone/client/CallElementList.java
index b6654d6..dff3d45 100644
--- a/src/com/savoirfairelinux/sflphone/client/CallElementList.java
+++ b/src/com/savoirfairelinux/sflphone/client/CallElementList.java
@@ -241,13 +241,11 @@
     {
         Log.i(TAG, "Adding call " + c.mCallInfo.mDisplayName);
         mAdapter.add(c);
-        sflphoneHome.onSelectedCallAction(c);
     }
 
     public void removeCall(SipCall c)
     {
         Log.i(TAG, "Removing call " + c.mCallInfo.mDisplayName);
-        sflphoneHome.onUnselectedCallAction();
         mAdapter.remove(c);
     }
         
diff --git a/src/com/savoirfairelinux/sflphone/client/ContactListFragment.java b/src/com/savoirfairelinux/sflphone/client/ContactListFragment.java
index 54209c1..b3e57ec 100644
--- a/src/com/savoirfairelinux/sflphone/client/ContactListFragment.java
+++ b/src/com/savoirfairelinux/sflphone/client/ContactListFragment.java
@@ -227,7 +227,7 @@
                               Log.i(TAG, "Selected " + items[item]);
                               switch (item) {
                                   case 0:
-                                      call.placeCall();
+                                      call.placeCallUpdateUi();
                                       break;
                                   case 1:
                                       call.sendTextMessage();
diff --git a/src/com/savoirfairelinux/sflphone/client/SFLPhoneHome.java b/src/com/savoirfairelinux/sflphone/client/SFLPhoneHome.java
index 942b251..906f44f 100644
--- a/src/com/savoirfairelinux/sflphone/client/SFLPhoneHome.java
+++ b/src/com/savoirfairelinux/sflphone/client/SFLPhoneHome.java
@@ -57,8 +57,8 @@
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
-import android.view.View.OnClickListener;
 import android.view.ViewGroup;
+import android.view.View.OnClickListener;
 import android.view.animation.AlphaAnimation;
 import android.view.animation.Animation;
 import android.view.animation.LinearInterpolator;
@@ -171,6 +171,8 @@
         LocalBroadcastManager.getInstance(this).registerReceiver(mCallList, new IntentFilter("new-call-created"));
         LocalBroadcastManager.getInstance(this).registerReceiver(mCallList, new IntentFilter("call-state-changed"));
         LocalBroadcastManager.getInstance(this).registerReceiver(mCallList, new IntentFilter("incoming-call"));
+
+        SipCall.setSFLPhoneHomeContext(this);
     }
 
     @Override
@@ -311,6 +313,9 @@
     public void onUnselectedCallAction() {
         buttonCall.setTag(null);
         buttonCall.setTag(null);
+
+        buttonCall.setEnabled(true);
+        buttonHangup.setEnabled(false);
     }
 
     public void setIncomingCallID(String accountID, String callID, String from) {
@@ -491,8 +496,7 @@
 
             SipCall call = CallList.getCallInstance(info);
             call.launchCallActivity(this);
-            call.printCallInfo();
-            call.placeCall();
+            call.placeCallUpdateUi();
         
             Log.d(TAG, "service.placeCall(" + accountID + ", " + callID + ", " + to + ");");
             service.placeCall(accountID, callID, to);
diff --git a/src/com/savoirfairelinux/sflphone/client/SipCall.java b/src/com/savoirfairelinux/sflphone/client/SipCall.java
index d6fef42..9ead4b8 100644
--- a/src/com/savoirfairelinux/sflphone/client/SipCall.java
+++ b/src/com/savoirfairelinux/sflphone/client/SipCall.java
@@ -45,8 +45,10 @@
 public class SipCall
 {
     final static String TAG = "SipCall";
-    public static CallElementList mCallElementList = null;
     public CallInfo mCallInfo;
+    // Update UI on actions (answer, hangup)
+    static private CallElementList mCallElementList = null;
+    static private SFLPhoneHome mHome = null;
 
     public static final int CALL_STATE_NULL = 0;
     public static final int CALL_STATE_INCOMING = 1;
@@ -141,6 +143,11 @@
         mCallElementList = list;
     }
 
+    public static void setSFLPhoneHomeContext(SFLPhoneHome home)
+    {
+        mHome = home;
+    }
+
     public void setCallID(String callID) {
         mCallInfo.mCallID = callID;
     }
@@ -241,20 +248,28 @@
         return mCallInfo.mMediaState;
     }
 
-    public void placeCall()
+    public void placeCallUpdateUi()
+    {
+        if(mCallElementList != null)
+            mCallElementList.addCall(this);
+
+        if(mHome != null)
+            mHome.onSelectedCallAction(this);
+    }
+
+    public void receiveCallUpdateUi()
     {
         if(mCallElementList != null)
             mCallElementList.addCall(this); 
+
+        if(mHome != null)
+            mHome.onSelectedCallAction(this);
     }
 
-    public void receiveCall()
+    public void answerUpdateUi()
     {
-        if(mCallElementList != null)
-            mCallElementList.addCall(this); 
-    }
-
-    public void answer()
-    {
+        if(mHome != null)
+            mHome.onSelectedCallAction(this);
         
     }
 
@@ -272,12 +287,16 @@
 
     /**
      * Perform hangup action without sending request to the service
+     * Used when SipService haved been notified that this call hung up
      */
-    public void hangup() {
+    public void hangupUpdateUi() {
         Log.i(TAG, "Hangup call " + mCallInfo.mCallID);
 
         if(mCallElementList != null)
             mCallElementList.removeCall(this);
+
+        if(mHome != null)
+            mHome.onUnselectedCallAction();
     }
 
     /**