diff --git a/src/com/savoirfairelinux/sflphone/client/SFLPhoneHome.java b/src/com/savoirfairelinux/sflphone/client/SFLPhoneHome.java
index 982c91f..9745636 100644
--- a/src/com/savoirfairelinux/sflphone/client/SFLPhoneHome.java
+++ b/src/com/savoirfairelinux/sflphone/client/SFLPhoneHome.java
@@ -94,7 +94,7 @@
     private boolean mBound = false;
     private ISipService service;
     public AccountList mAccountList = new AccountList();
-    public CallList mCallList = new CallList();
+    public CallList mCallList = new CallList(this);
 
     /**
      * The {@link ViewPager} that will host the section contents.
@@ -506,7 +506,9 @@
             info.mEmail = "coolGuy@coolGuy.com";
 
             SipCall call = CallList.getCallInstance(info);
-            call.launchCallActivity(this);
+            // call.launchCallActivity(this);
+            call.printCallInfo();
+            call.placeCall();
         
             Log.d(TAG, "service.placeCall(" + accountID + ", " + callID + ", " + to + ");");
             service.placeCall(accountID, callID, to);
@@ -542,18 +544,4 @@
 
         buttonCall.setImageResource(R.drawable.ic_call);
     }
-
-/*
-    private void launchCallActivity(SipCall call)
-    {
-        Log.i(TAG, "Launch Call Activity");
-        Bundle bundle = new Bundle();
-        // bundle.putString("CallID", call.mCallInfo.mCallID);
-        call.mCallInfo.mCallID = "UNEBELLEPOULE";
-        bundle.putParcelable("CallInfo", call.mCallInfo);
-        Intent intent = new Intent().setClass(this, CallActivity.class);
-        intent.putExtras(bundle);
-        startActivity(intent);
-    }
-    */
 }
diff --git a/src/com/savoirfairelinux/sflphone/client/SipCall.java b/src/com/savoirfairelinux/sflphone/client/SipCall.java
index e630672..3ef8265 100644
--- a/src/com/savoirfairelinux/sflphone/client/SipCall.java
+++ b/src/com/savoirfairelinux/sflphone/client/SipCall.java
@@ -52,10 +52,11 @@
     public static int CALL_STATE_INCOMING = 1;
     public static int CALL_STATE_RINGING = 2;
     public static int CALL_STATE_CURRENT = 3;
-    public static int CALL_STATE_BUSY = 4;
-    public static int CALL_STATE_FAILURE = 5;
-    public static int CALL_STATE_HOLD = 6;
-    public static int CALL_STATE_UNHOLD = 7;
+    public static int CALL_STATE_HUNGUP = 4;
+    public static int CALL_STATE_BUSY = 5;
+    public static int CALL_STATE_FAILURE = 6;
+    public static int CALL_STATE_HOLD = 7;
+    public static int CALL_STATE_UNHOLD = 8;
 
     public static int MEDIA_STATE_NONE = 0;        // No media currently
     public static int MEDIA_STATE_ACTIVE = 1;      // Media is active
@@ -66,6 +67,7 @@
     public static class CallInfo implements Parcelable
     {
         public String mCallID = "";
+        public String mAccountID = "";
         public String mDisplayName = "";
         public String mPhone = "";
         public String mEmail = "";
@@ -84,6 +86,7 @@
 
             // Don't mess with this order!!!
             list.add(mCallID);
+            list.add(mAccountID);
             list.add(mDisplayName);
             list.add(mPhone);
             list.add(mEmail);
@@ -112,10 +115,11 @@
 
             // Don't mess with this order!!!
             mCallID = list.get(0);
-            mDisplayName = list.get(1);
-            mPhone = list.get(2);
-            mEmail = list.get(3);
-            mRemoteContact = list.get(4);
+            mAccountID = list.get(1);
+            mDisplayName = list.get(2);
+            mPhone = list.get(3);
+            mEmail = list.get(4);
+            mRemoteContact = list.get(5);
 
             mCallState = in.readInt();
             mMediaState = in.readInt();
@@ -145,6 +149,14 @@
         return mCallInfo.mCallID;
     }
 
+    public void setAccountID(String accountID) {
+        mCallInfo.mAccountID = accountID;
+    }
+
+    public String getAccountID() {
+        return mCallInfo.mAccountID;
+    }
+
     public void setDisplayName(String displayName) {
         mCallInfo.mDisplayName = displayName;
     }
@@ -197,7 +209,12 @@
     {
         if(mCallElementList != null)
             mCallElementList.addCall(this); 
-        // mManager.callmanagerJNI.placeCall("IP2IP", "CALL1234", "192.168.40.35");
+    }
+
+    public void receiveCall()
+    {
+        if(mCallElementList != null)
+            mCallElementList.addCall(this); 
     }
 
     public void answer()
@@ -237,6 +254,16 @@
         Log.i(TAG, "Send text message");
     }
 
+    public void printCallInfo()
+    {
+        Log.i(TAG, "CallInfo: CallID: " + mCallInfo.mCallID);
+        Log.i(TAG, "          AccountID: " + mCallInfo.mAccountID);
+        Log.i(TAG, "          Display Name: " + mCallInfo.mDisplayName);
+        Log.i(TAG, "          Phone: " + mCallInfo.mPhone);
+        Log.i(TAG, "          Email: " + mCallInfo.mEmail);
+        Log.i(TAG, "          Contact: " + mCallInfo.mRemoteContact);
+    }
+
     public void launchCallActivity(Context context)
     {
         Log.i(TAG, "Launch Call Activity");
diff --git a/src/com/savoirfairelinux/sflphone/utils/CallList.java b/src/com/savoirfairelinux/sflphone/utils/CallList.java
index 2ac5b08..051bed9 100644
--- a/src/com/savoirfairelinux/sflphone/utils/CallList.java
+++ b/src/com/savoirfairelinux/sflphone/utils/CallList.java
@@ -47,6 +47,7 @@
 {
     static final String TAG = "CallList";
     static ArrayList<SipCall> mList = new ArrayList<SipCall>();
+    private Context mContext = null;
 
     private enum Signals {
         NEW_CALL_CREATED,
@@ -60,8 +61,11 @@
      */
     public static SipCall getCallInstance(SipCall.CallInfo info)
     {
-        if(mList.isEmpty())
-            return new SipCall(info);
+        if(mList.isEmpty()) {
+            SipCall call = new SipCall(info);
+            mList.add(call);
+            return call;
+        }
 
         for(SipCall sipcall : mList) {
             if(sipcall.mCallInfo.mCallID.equals(info.mCallID)) {
@@ -75,6 +79,10 @@
         return call;
     }
 
+    public CallList(Context context) {
+        mContext = context;
+    }
+
     @Override
     public void onReceive(Context context, Intent intent)
     {
@@ -85,17 +93,18 @@
         } else if(signalName.equals(CallManagerCallBack.CALL_STATE_CHANGED)) {
             processCallStateChangedSignal(intent);
         } else if(signalName.equals(CallManagerCallBack.INCOMING_CALL)) {
+            processIncomingCallSignal(intent);
         }
     }
 
     private void processCallStateChangedSignal(Intent intent) {
         Bundle bundle = intent.getBundleExtra("com.savoirfairelinux.sflphone.service.newstate");
-        String callID = bundle.getString("CallID");
-        String newState = bundle.getString("State");
 
         SipCall.CallInfo info = new SipCall.CallInfo();
-        info.mCallID = callID;
-                
+        info.mCallID = bundle.getString("CallID");
+
+        String newState = bundle.getString("State");
+
         SipCall call = getCallInstance(info);
         if(newState.equals("INCOMING")) {
             call.setCallState(SipCall.CALL_STATE_INCOMING);
@@ -103,6 +112,11 @@
             call.setCallState(SipCall.CALL_STATE_RINGING);
         } else if(newState.equals("CURRENT")) {
             call.setCallState(SipCall.CALL_STATE_CURRENT);
+        } else if(newState.equals("HUNGUP")) {
+            Log.i(TAG, "         !!!!!!!!! RECEIVING NEW STATE HANGUP");
+            call.printCallInfo();
+            call.hangup();
+            call.setCallState(SipCall.CALL_STATE_HUNGUP);
         } else if(newState.equals("BUSY")) {
             call.setCallState(SipCall.CALL_STATE_BUSY);
         } else if(newState.equals("FAILURE")) {
@@ -111,6 +125,22 @@
             call.setCallState(SipCall.CALL_STATE_HOLD);
         } else if(newState.equals("UNHOLD")) {
             call.setCallState(SipCall.CALL_STATE_UNHOLD);
+        } else {
+            call.setCallState(SipCall.CALL_STATE_NULL);
         }
     }
+
+    private void processIncomingCallSignal(Intent intent) {
+        Bundle bundle = intent.getBundleExtra("com.savoirfairelinux.sflphone.service.newcall");
+        String accountID = bundle.getString("AccountID");
+        String callID = bundle.getString("CallID");
+        String from = bundle.getString("From");
+
+        SipCall.CallInfo info = new SipCall.CallInfo();
+        info.mCallID = callID;
+                
+        SipCall call = getCallInstance(info);
+        call.placeCall();
+        call.launchCallActivity(mContext); 
+    }
 }
