'Refactoring, and added ISipClient.aidl'
diff --git a/src/com/savoirfairelinux/sflphone/account/AccountManagementUI.java b/src/com/savoirfairelinux/sflphone/account/AccountManagementUI.java
deleted file mode 100644
index d58aa7c..0000000
--- a/src/com/savoirfairelinux/sflphone/account/AccountManagementUI.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- *  Copyright (C) 2004-2012 Savoir-Faire Linux Inc.
- *
- *  Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- *  Additional permission under GNU GPL version 3 section 7:
- *
- *  If you modify this program, or any covered work, by linking or
- *  combining it with the OpenSSL project's OpenSSL library (or a
- *  modified version of that library), containing parts covered by the
- *  terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc.
- *  grants you additional permission to convey the resulting work.
- *  Corresponding Source for a non-source form of such a combination
- *  shall include the source code for the parts of OpenSSL used as well
- *  as that of the covered work.
- */
-package com.savoirfairelinux.sflphone.account;
-
-import java.util.ArrayList;
-
-import com.savoirfairelinux.sflphone.client.receiver.AccountListReceiver;
-
-public interface AccountManagementUI
-{
-    public void setAccountList(AccountListReceiver accountList);
-
-    public void accountSelectedNotifyAccountList(String accountID);
-
-    public void setSelectedAccount(String accountID);
-
-    public void accountAdded(ArrayList<String> newList);
-
-    public void accountRemoved();
-
-    public void accountUpdated();
-}
diff --git a/src/com/savoirfairelinux/sflphone/account/AccountSelectionSpinner.java b/src/com/savoirfairelinux/sflphone/account/AccountSelectionSpinner.java
index f0f63cc..efc6178 100644
--- a/src/com/savoirfairelinux/sflphone/account/AccountSelectionSpinner.java
+++ b/src/com/savoirfairelinux/sflphone/account/AccountSelectionSpinner.java
@@ -45,7 +45,7 @@
 import com.savoirfairelinux.sflphone.client.receiver.AccountListReceiver;
 import com.savoirfairelinux.sflphone.service.ISipService;
 
-public class AccountSelectionSpinner extends Spinner implements AccountManagementUI {
+public class AccountSelectionSpinner extends Spinner  {
     private static final String TAG = AccountSelectionSpinner.class.getSimpleName();
     public static final String DEFAULT_ACCOUNT_ID = "IP2IP";
     private Context mContext;
@@ -82,7 +82,7 @@
                 ((RadioButton) view.findViewById(R.id.account_checked)).toggle();
             }
             mAdapter.setSelectedAccount(pos);
-            accountSelectedNotifyAccountList(mAdapter.getItem(pos));
+//            accountSelectedNotifyAccountList(mAdapter.getItem(pos));
             // setSelection(cursor.getPosition(),true);
 
         }
@@ -107,48 +107,48 @@
      * AccountManagementUI Interface
      ****************************************/
 
-    @Override
-    public void setAccountList(AccountListReceiver accountList) {
-        Log.i(TAG, "setAccountList");
-        mAccountList = accountList;
-
-    }
-
-    @Override
-    public void accountSelectedNotifyAccountList(String accountID) {
-        Log.i(TAG, "->accountSelectedNotifyAccountList");
-        if (mAccountList != null) {
-            mAccountList.accountSelected(accountID, this);
-        }
-    }
-
-    @Override
-    public void setSelectedAccount(String accountID) {
-        Log.i(TAG, "Account Selected");
-        // setText(accountID);
-    }
-
-    @Override
-    public void accountAdded(ArrayList<String> newList) {
-        mAdapter = new AccountSelectionAdapter(mContext, serviceRef, newList);
-        setOnItemSelectedListener(onClick);
-        setAdapter(mAdapter);
-        // Log.i(TAG, "Account added");
-        // mList = newList;
-        //
-        // if(newList.size() == 1) {
-        // setText(newList.get(0));
-        // }
-    }
-
-    @Override
-    public void accountRemoved() {
-        Log.i(TAG, "Account Removed");
-    }
-
-    @Override
-    public void accountUpdated() {
-        Log.i(TAG, "Account Updated");
-    }
+//    @Override
+//    public void setAccountList(AccountListReceiver accountList) {
+//        Log.i(TAG, "setAccountList");
+//        mAccountList = accountList;
+//
+//    }
+//
+//    @Override
+//    public void accountSelectedNotifyAccountList(String accountID) {
+//        Log.i(TAG, "->accountSelectedNotifyAccountList");
+//        if (mAccountList != null) {
+//            mAccountList.accountSelected(accountID, this);
+//        }
+//    }
+//
+//    @Override
+//    public void setSelectedAccount(String accountID) {
+//        Log.i(TAG, "Account Selected");
+//        // setText(accountID);
+//    }
+//
+//    @Override
+//    public void accountAdded(ArrayList<String> newList) {
+//        mAdapter = new AccountSelectionAdapter(mContext, serviceRef, newList);
+//        setOnItemSelectedListener(onClick);
+//        setAdapter(mAdapter);
+//        // Log.i(TAG, "Account added");
+//        // mList = newList;
+//        //
+//        // if(newList.size() == 1) {
+//        // setText(newList.get(0));
+//        // }
+//    }
+//
+//    @Override
+//    public void accountRemoved() {
+//        Log.i(TAG, "Account Removed");
+//    }
+//
+//    @Override
+//    public void accountUpdated() {
+//        Log.i(TAG, "Account Updated");
+//    }
 
 }
diff --git a/src/com/savoirfairelinux/sflphone/adapters/CallElementAdapter.java b/src/com/savoirfairelinux/sflphone/adapters/CallElementAdapter.java
index 35b694f..dc66ecd 100644
--- a/src/com/savoirfairelinux/sflphone/adapters/CallElementAdapter.java
+++ b/src/com/savoirfairelinux/sflphone/adapters/CallElementAdapter.java
@@ -8,7 +8,7 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
+import android.widget.BaseAdapter;
 import android.widget.ImageView;
 import android.widget.TextView;
 
@@ -19,14 +19,14 @@
  * A CursorAdapter that creates and update call elements using corresponding contact infos. TODO: handle contact list separatly to allow showing
  * synchronized contacts on Call cards with multiple contacts etc.
  */
-public class CallElementAdapter extends ArrayAdapter {
+public class CallElementAdapter extends BaseAdapter {
     private ExecutorService infos_fetcher = Executors.newCachedThreadPool();
     private Context mContext;
-    private final List mCallList;
+    private final List<SipCall> mCallList;
     private static final String CURRENT_STATE_LABEL = "    CURRENT STATE: ";
 
-    public CallElementAdapter(Context context, List callList) {
-        super(context, R.layout.item_contact, callList);
+    public CallElementAdapter(Context context, List<SipCall> callList) {
+        super();
         mContext = context;
         mCallList = callList;
     }
@@ -76,6 +76,31 @@
         protected TextView phones;
         public TextView state;
     }
-    
-    
+
+    @Override
+    public int getCount() {
+        return mCallList.size();
+    }
+
+    @Override
+    public Object getItem(int pos) {
+        return mCallList.get(pos);
+    }
+
+    @Override
+    public long getItemId(int arg0) {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+
+    public void add(SipCall c) {
+      mCallList.add(c);
+        
+    }
+
+    public void remove(SipCall c) {
+        mCallList.remove(c);
+        
+    }
+
 }
diff --git a/src/com/savoirfairelinux/sflphone/client/SFLPhoneHomeActivity.java b/src/com/savoirfairelinux/sflphone/client/SFLPhoneHomeActivity.java
index 226a4a3..0ae022e 100644
--- a/src/com/savoirfairelinux/sflphone/client/SFLPhoneHomeActivity.java
+++ b/src/com/savoirfairelinux/sflphone/client/SFLPhoneHomeActivity.java
@@ -44,487 +44,473 @@
 import android.content.ServiceConnection;
 import android.os.Bundle;
 import android.os.IBinder;
+import android.os.RemoteException;
 import android.support.v13.app.FragmentStatePagerAdapter;
-import android.support.v4.content.LocalBroadcastManager;
 import android.support.v4.view.ViewPager;
 import android.util.Log;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.View.OnClickListener;
-import android.view.animation.AlphaAnimation;
-import android.view.animation.Animation;
-import android.view.animation.LinearInterpolator;
 import android.widget.EditText;
 import android.widget.ImageButton;
 
 import com.savoirfairelinux.sflphone.R;
-import com.savoirfairelinux.sflphone.client.receiver.AccountListReceiver;
 import com.savoirfairelinux.sflphone.client.receiver.CallListReceiver;
-import com.savoirfairelinux.sflphone.fragments.ButtonSectionFragment;
 import com.savoirfairelinux.sflphone.fragments.CallElementListFragment;
 import com.savoirfairelinux.sflphone.fragments.ContactListFragment;
 import com.savoirfairelinux.sflphone.fragments.HistoryFragment;
 import com.savoirfairelinux.sflphone.model.SipCall;
-import com.savoirfairelinux.sflphone.service.CallManagerCallBack;
 import com.savoirfairelinux.sflphone.service.ConfigurationManagerCallback;
+import com.savoirfairelinux.sflphone.service.ISipClient;
 import com.savoirfairelinux.sflphone.service.ISipService;
 import com.savoirfairelinux.sflphone.service.SipService;
 
-public class SFLPhoneHomeActivity extends Activity implements ActionBar.TabListener, OnClickListener {
-	SectionsPagerAdapter mSectionsPagerAdapter = null;
-	static final String TAG = "SFLPhoneHome";
-	private static final int REQUEST_CODE_PREFERENCES = 1;
-	ImageButton buttonCall, buttonHangup;
-	static Animation animation;
-	private ContactListFragment mContactListFragment = null;
-	private CallElementListFragment mCallElementList = null;
-	private HistoryFragment mHistorySectionFragment = null;
-	private ButtonSectionFragment mButtonSectionFragment = null;
-	private boolean mBound = false;
-	private ISipService service;
-	public AccountListReceiver mAccountList;
-	public CallListReceiver mCallList = new CallListReceiver(this);
-	private SFLphoneApplication mApplication;
+public class SFLPhoneHomeActivity extends Activity implements ActionBar.TabListener {
+    SectionsPagerAdapter mSectionsPagerAdapter = null;
+    static final String TAG = "SFLPhoneHome";
+    private static final int REQUEST_CODE_PREFERENCES = 1;
+    ImageButton buttonCall, buttonHangup;
+    private ContactListFragment mContactListFragment = null;
+    private CallElementListFragment mCallElementList = null;
+    private HistoryFragment mHistorySectionFragment = null;
+    private boolean mBound = false;
+    private ISipService service;
+//    public AccountListReceiver mAccountList;
+//    public CallListReceiver mCallList = new CallListReceiver(this);
+    private SFLphoneApplication mApplication;
 
-	private static final int ACTION_BAR_TAB_CONTACT = 0;
-	private static final int ACTION_BAR_TAB_CALL = 1;
-	private static final int ACTION_BAR_TAB_HISTORY = 2;
-	private static final int ACTION_BAR_TAB_TEST = 3;
+    private static final int ACTION_BAR_TAB_CONTACT = 0;
+    private static final int ACTION_BAR_TAB_CALL = 1;
+    private static final int ACTION_BAR_TAB_HISTORY = 2;
 
-	/**
-	 * The {@link ViewPager} that will host the section contents.
-	 */
-	ViewPager mViewPager;
+    /**
+     * The {@link ViewPager} that will host the section contents.
+     */
+    ViewPager mViewPager;
 
-	final private int[] icon_res_id = { R.drawable.ic_tab_call, R.drawable.ic_tab_call, R.drawable.ic_tab_history, R.drawable.ic_tab_play_selected };
+    final private int[] icon_res_id = { R.drawable.ic_tab_call, R.drawable.ic_tab_call, R.drawable.ic_tab_history };
 
-	// public SFLPhoneHome extends Activity implements ActionBar.TabListener, OnClickListener
+    // public SFLPhoneHome extends Activity implements ActionBar.TabListener, OnClickListener
 
-	/* called before activity is killed, e.g. rotation */
-	@Override
-	protected void onSaveInstanceState(Bundle bundle) {
-		super.onSaveInstanceState(bundle);
-		for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
-			try {
-				/* putFragment (Bundle bundle, String key, Fragment fragment) */
-				getFragmentManager().putFragment(bundle, mSectionsPagerAdapter.getClassName(i), mSectionsPagerAdapter.getFragment(i));
-			} catch (IllegalStateException e) {
-				Log.e(TAG, "IllegalStateException: fragment=" + mSectionsPagerAdapter.getFragment(i));
-			}
-		}
-		Log.w(TAG, "onSaveInstanceState()");
-	}
+    /* called before activity is killed, e.g. rotation */
+    @Override
+    protected void onSaveInstanceState(Bundle bundle) {
+        super.onSaveInstanceState(bundle);
+        for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
+            try {
+                /* putFragment (Bundle bundle, String key, Fragment fragment) */
+                getFragmentManager().putFragment(bundle, mSectionsPagerAdapter.getClassName(i), mSectionsPagerAdapter.getFragment(i));
+            } catch (IllegalStateException e) {
+                Log.e(TAG, "IllegalStateException: fragment=" + mSectionsPagerAdapter.getFragment(i));
+            }
+        }
+        Log.w(TAG, "onSaveInstanceState()");
+    }
 
-	@Override
-	public void onCreate(Bundle savedInstanceState) {
-		super.onCreate(savedInstanceState);
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
 
-		mApplication = (SFLphoneApplication) getApplication();
+        mApplication = (SFLphoneApplication) getApplication();
 
-		// Bind to LocalService
-		if (!mBound) {
-			Log.i(TAG, "onStart: Binding service...");
-			Intent intent = new Intent(this, SipService.class);
-			bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
-		}
+        // Bind to LocalService
+        if (!mBound) {
+            Log.i(TAG, "onStart: Binding service...");
+            Intent intent = new Intent(this, SipService.class);
+            bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
+        }
 
-		setContentView(R.layout.activity_sflphone_home);
+        setContentView(R.layout.activity_sflphone_home);
 
-		if (mSectionsPagerAdapter == null) {
-			mSectionsPagerAdapter = new SectionsPagerAdapter(getFragmentManager());
-		}
+        if (mSectionsPagerAdapter == null) {
+            mSectionsPagerAdapter = new SectionsPagerAdapter(getFragmentManager());
+        }
 
-		/* getFragment(Bundle, String) */
-		if (savedInstanceState != null) {
-			Log.w(TAG, "Activity restarted, recreating PagerAdapter...");
-			/* getFragment (Bundle bundle, String key) */
-			mContactListFragment = (ContactListFragment) getFragmentManager().getFragment(savedInstanceState,
-			        mSectionsPagerAdapter.getClassName(ACTION_BAR_TAB_CONTACT));
-			mCallElementList = (CallElementListFragment) getFragmentManager().getFragment(savedInstanceState,
-			        mSectionsPagerAdapter.getClassName(ACTION_BAR_TAB_CALL));
-			mHistorySectionFragment = (HistoryFragment) getFragmentManager().getFragment(savedInstanceState,
-			        mSectionsPagerAdapter.getClassName(ACTION_BAR_TAB_HISTORY));
-			mButtonSectionFragment = (ButtonSectionFragment) getFragmentManager().getFragment(savedInstanceState,
-			        mSectionsPagerAdapter.getClassName(ACTION_BAR_TAB_TEST));
-		}
+        /* getFragment(Bundle, String) */
+        if (savedInstanceState != null) {
+            Log.w(TAG, "Activity restarted, recreating PagerAdapter...");
+            /* getFragment (Bundle bundle, String key) */
+            mContactListFragment = (ContactListFragment) getFragmentManager().getFragment(savedInstanceState,
+                    mSectionsPagerAdapter.getClassName(ACTION_BAR_TAB_CONTACT));
+            mCallElementList = (CallElementListFragment) getFragmentManager().getFragment(savedInstanceState,
+                    mSectionsPagerAdapter.getClassName(ACTION_BAR_TAB_CALL));
+            mHistorySectionFragment = (HistoryFragment) getFragmentManager().getFragment(savedInstanceState,
+                    mSectionsPagerAdapter.getClassName(ACTION_BAR_TAB_HISTORY));
+        }
 
-		if (mContactListFragment == null) {
-			mContactListFragment = new ContactListFragment();
-			Log.w(TAG, "Recreated mContactListFragment=" + mContactListFragment);
-		}
-		if (mCallElementList == null) {
-			mCallElementList = new CallElementListFragment();
-			Log.w(TAG, "Recreated mCallElementList=" + mCallElementList);
-		}
-		if (mHistorySectionFragment == null) {
-			mHistorySectionFragment = new HistoryFragment();
-			Log.w(TAG, "Recreated mHistorySectionFragment=" + mHistorySectionFragment);
-		}
-		if (mButtonSectionFragment == null) {
-			mButtonSectionFragment = new ButtonSectionFragment();
-			Log.w(TAG, "Recreated mButtonSectionFragment=" + mButtonSectionFragment);
-		}
+        if (mContactListFragment == null) {
+            mContactListFragment = new ContactListFragment();
+            Log.w(TAG, "Recreated mContactListFragment=" + mContactListFragment);
+        }
+        if (mCallElementList == null) {
+            mCallElementList = new CallElementListFragment();
+            Log.w(TAG, "Recreated mCallElementList=" + mCallElementList);
+        }
+        if (mHistorySectionFragment == null) {
+            mHistorySectionFragment = new HistoryFragment();
+            Log.w(TAG, "Recreated mHistorySectionFragment=" + mHistorySectionFragment);
+        }
 
-		final ActionBar actionBar = getActionBar();
-		actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
-		// final ActionBar actionBar = getActionBar();
+        final ActionBar actionBar = getActionBar();
+        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
+        // final ActionBar actionBar = getActionBar();
 
-		// Set up the ViewPager with the sections adapter.
-		mViewPager = (ViewPager) findViewById(R.id.pager);
-		mViewPager.setAdapter(mSectionsPagerAdapter);
+        // Set up the ViewPager with the sections adapter.
+        mViewPager = (ViewPager) findViewById(R.id.pager);
+        mViewPager.setAdapter(mSectionsPagerAdapter);
 
-		// When swiping between different sections, select the corresponding tab.
-		// We can also use ActionBar.Tab#select() to do this if we have a reference to the
-		// Tab.
-		mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
-			@Override
-			public void onPageSelected(int position) {
-				actionBar.setSelectedNavigationItem(position);
-			}
-		});
+        // When swiping between different sections, select the corresponding tab.
+        // We can also use ActionBar.Tab#select() to do this if we have a reference to the
+        // Tab.
+        mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
+            @Override
+            public void onPageSelected(int position) {
+                actionBar.setSelectedNavigationItem(position);
+            }
+        });
 
-		// For each of the sections in the app, add a tab to the action bar.
-		for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
-			// Create a tab with text corresponding to the page title defined by the adapter.
-			// Also specify this Activity object, which implements the TabListener interface, as the
-			// listener for when this tab is selected.
-			actionBar.addTab(actionBar.newTab().setIcon(icon_res_id[i]).setText(mSectionsPagerAdapter.getPageTitle(i)).setTabListener(this));
-		}
+        // For each of the sections in the app, add a tab to the action bar.
+        for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
+            // Create a tab with text corresponding to the page title defined by the adapter.
+            // Also specify this Activity object, which implements the TabListener interface, as the
+            // listener for when this tab is selected.
+            actionBar.addTab(actionBar.newTab().setIcon(icon_res_id[i]).setText(mSectionsPagerAdapter.getPageTitle(i)).setTabListener(this));
+        }
 
-		actionBar.setSelectedNavigationItem(ACTION_BAR_TAB_CALL);
+        actionBar.setSelectedNavigationItem(ACTION_BAR_TAB_CALL);
 
-		buttonCall = (ImageButton) findViewById(R.id.buttonCall);
-		buttonHangup = (ImageButton) findViewById(R.id.buttonHangUp);
+        buttonCall = (ImageButton) findViewById(R.id.buttonCall);
+        buttonHangup = (ImageButton) findViewById(R.id.buttonHangUp);
 
-		// Change alpha from fully visible to invisible
-		animation = new AlphaAnimation(1, 0);
-		// duration - half a second
-		animation.setDuration(500);
-		// do not alter animation rate
-		animation.setInterpolator(new LinearInterpolator());
-		// Repeat animation infinitely
-		animation.setRepeatCount(Animation.INFINITE);
-		// Reverse
-		animation.setRepeatMode(Animation.REVERSE);
+        buttonCall.setOnClickListener(new OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                processingNewCallAction();
+            }
+        });
+        
+        buttonHangup.setOnClickListener(new OnClickListener() { 
+            @Override
+            public void onClick(View v) {
+                processingHangUpAction();
+                
+            }
+        });
 
-		IntentFilter callFilter = new IntentFilter(CallManagerCallBack.NEW_CALL_CREATED);
-		callFilter.addAction(CallManagerCallBack.INCOMING_CALL);
-		callFilter.addAction(CallManagerCallBack.CALL_STATE_CHANGED);
-		LocalBroadcastManager.getInstance(this).registerReceiver(mCallList, callFilter);
+//        IntentFilter callFilter = new IntentFilter(CallManagerCallBack.NEW_CALL_CREATED);
+//        callFilter.addAction(CallManagerCallBack.INCOMING_CALL);
+//        callFilter.addAction(CallManagerCallBack.CALL_STATE_CHANGED);
+//        LocalBroadcastManager.getInstance(this).registerReceiver(mCallList, callFilter);
+//
+//        mAccountList = mApplication.getAccountList();
+//        Log.w(TAG, "mAccountList=" + mAccountList + ", mCallElementList=" + mCallElementList);
 
-		mAccountList = mApplication.getAccountList();
-		Log.w(TAG, "mAccountList=" + mAccountList + ", mCallElementList=" + mCallElementList);
-
-		IntentFilter accountFilter = new IntentFilter(ConfigurationManagerCallback.ACCOUNTS_CHANGED);
+        IntentFilter accountFilter = new IntentFilter(ConfigurationManagerCallback.ACCOUNTS_CHANGED);
         accountFilter.addAction(ConfigurationManagerCallback.ACCOUNT_STATE_CHANGED);
-		LocalBroadcastManager.getInstance(this).registerReceiver(mAccountList, accountFilter);
+//        LocalBroadcastManager.getInstance(this).registerReceiver(mAccountList, accountFilter);
 
-		SipCall.setSFLPhoneHomeContext(this);
-	}
+        SipCall.setSFLPhoneHomeContext(this);
+    }
 
-	@Override
-	protected void onStart() {
-		Log.i(TAG, "onStart");
-		super.onStart();
-	}
+    @Override
+    protected void onStart() {
+        Log.i(TAG, "onStart");
+        super.onStart();
+    }
 
-	/* user gets back to the activity, e.g. through task manager */
-	@Override
-	protected void onRestart() {
-		super.onRestart();
-	}
+    /* user gets back to the activity, e.g. through task manager */
+    @Override
+    protected void onRestart() {
+        super.onRestart();
+    }
 
-	/* activity gets back to the foreground and user input */
-	@Override
-	protected void onResume() {
-		Log.i(TAG, "onResume");
-		super.onResume();
-	}
+    /* activity gets back to the foreground and user input */
+    @Override
+    protected void onResume() {
+        Log.i(TAG, "onResume");
+        super.onResume();
+    }
 
-	/* activity no more in foreground */
-	@Override
-	protected void onPause() {
-		super.onPause();
-	}
+    /* activity no more in foreground */
+    @Override
+    protected void onPause() {
+        super.onPause();
+    }
 
-	/* activity is no longer visible */
-	@Override
-	protected void onStop() {
-		super.onStop();
-	}
+    /* activity is no longer visible */
+    @Override
+    protected void onStop() {
+        super.onStop();
+    }
 
-	/* activity finishes itself or is being killed by the system */
-	@Override
-	protected void onDestroy() {
-		/* stop the service, if no other bound user, no need to check if it is running */
-		if (mBound) {
-			Log.i(TAG, "onStop: Unbinding service...");
-			unbindService(mConnection);
-			mBound = false;
-		}
+    /* activity finishes itself or is being killed by the system */
+    @Override
+    protected void onDestroy() {
+        /* stop the service, if no other bound user, no need to check if it is running */
+        if (mBound) {
+            Log.i(TAG, "onStop: Unbinding service...");
+            unbindService(mConnection);
+            mBound = false;
+        }
 
-		/* unregister broadcast receiver */
-		LocalBroadcastManager.getInstance(this).unregisterReceiver(mCallList);
-		LocalBroadcastManager.getInstance(this).unregisterReceiver(mAccountList);
+        /* unregister broadcast receiver */
+//        LocalBroadcastManager.getInstance(this).unregisterReceiver(mCallList);
+//        LocalBroadcastManager.getInstance(this).unregisterReceiver(mAccountList);
 
-		super.onDestroy();
-	}
-	
-	
+        super.onDestroy();
+    }
 
-	/** Defines callbacks for service binding, passed to bindService() */
-	private ServiceConnection mConnection = new ServiceConnection() {
+    /** Defines callbacks for service binding, passed to bindService() */
+    private ServiceConnection mConnection = new ServiceConnection() {
 
-		@Override
-		public void onServiceConnected(ComponentName className, IBinder binder) {
-			service = ISipService.Stub.asInterface(binder);
-			mApplication.setSipService(service);
-			mBound = true;
-			mAccountList.setSipService(service);
-			mCallElementList.onServiceSipBinded(service);
-			Log.d(TAG, "Service connected service=" + service);
-		}
+        private ISipClient callback = new ISipClient.Stub() {
+            
+            @Override
+            public void incomingCall() throws RemoteException {
+                Log.i(TAG,"Incoming call transfered from Service");
+                
+            }
+        };
 
-		@Override
-		public void onServiceDisconnected(ComponentName arg0) {
-			mApplication.setSipService(null);
-			mBound = false;
-			Log.d(TAG, "Service disconnected service=" + service);
-		}
-	};
+        @Override
+        public void onServiceConnected(ComponentName className, IBinder binder) {
+            service = ISipService.Stub.asInterface(binder);
+            
+            try {
+                service.registerClient(callback );
+            } catch (RemoteException e) {
+                Log.e(TAG,e.toString());
+            }
+            mApplication.setSipService(service);
+            mBound = true;
+//            mAccountList.setSipService(service);
+            mCallElementList.onServiceSipBinded(service);
+            Log.d(TAG, "Service connected service=" + service);
+        }
+
+        @Override
+        public void onServiceDisconnected(ComponentName arg0) {
+            mApplication.setSipService(null);
+            mBound = false;
+            Log.d(TAG, "Service disconnected service=" + service);
+        }
+    };
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        Log.i("SFLphone", "onOptionsItemSelected " + item.getItemId());
+        if (item.getItemId() != 0) {
+            // When the button is clicked, launch an activity through this intent
+            Intent launchPreferencesIntent = new Intent().setClass(this, SFLPhonePreferenceActivity.class);
+
+            // Make it a subactivity so we know when it returns
+            startActivityForResult(launchPreferencesIntent, REQUEST_CODE_PREFERENCES);
+        }
+
+        return super.onOptionsItemSelected(item);
+    }
+    
+    @Override
+    public void onActivityResult(int requestCode,int resultCode,Intent data){
+        super.onActivityResult(requestCode, resultCode, data);
+        if(service != null){
+            // Refresh Spinner with accounts
+            mCallElementList.onServiceSipBinded(service);
+        }
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        getMenuInflater().inflate(R.menu.activity_sflphone_home, menu);
+        return true;
+    }
+
+    @Override
+    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
+    }
+
+    @Override
+    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
+        // When the given tab is selected, switch to the corresponding page in the ViewPager.
+        mViewPager.setCurrentItem(tab.getPosition());
+    }
+
+    @Override
+    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
+        // Log.d(TAG, "onTabReselected");
+    }
+
+    public void onSelectedCallAction(SipCall call) {
+        int callState = call.getCallStateInt();
+
+        if ((callState == SipCall.CALL_STATE_NONE) || (callState == SipCall.CALL_STATE_CURRENT)) {
+            buttonCall.setEnabled(false);
+            buttonHangup.setEnabled(true);
+        } else {
+            buttonCall.setEnabled(true);
+            buttonHangup.setEnabled(false);
+        }
+
+        buttonCall.setTag(call);
+        buttonHangup.setTag(call);
+    }
+
+    public void onUnselectedCallAction() {
+        buttonCall.setTag(null);
+        buttonCall.setTag(null);
+
+        buttonCall.setEnabled(true);
+        buttonHangup.setEnabled(false);
+    }
 
 
-	@Override
-	public boolean onOptionsItemSelected(MenuItem item) {
-		Log.i("SFLphone", "onOptionsItemSelected " + item.getItemId());
-		if (item.getItemId() != 0) {
-			// When the button is clicked, launch an activity through this intent
-			Intent launchPreferencesIntent = new Intent().setClass(this, SFLPhonePreferenceActivity.class);
 
-			// Make it a subactivity so we know when it returns
-			startActivityForResult(launchPreferencesIntent, REQUEST_CODE_PREFERENCES);
-		}
+    public void processingNewCallAction() {
+        // String accountID = mAccountList.currentAccountID;
+        Log.w(TAG, "processingNewCallAction() mCallElementList=" + mCallElementList);
+        String accountID = mCallElementList.getSelectedAccount();
+        EditText editText = (EditText) findViewById(R.id.phoneNumberTextEntry);
+        String to = editText.getText().toString();
 
-		return super.onOptionsItemSelected(item);
-	}
+        Random random = new Random();
+        String callID = Integer.toString(random.nextInt());
+        SipCall.CallInfo info = new SipCall.CallInfo();
 
-	@Override
-	public boolean onCreateOptionsMenu(Menu menu) {
-		getMenuInflater().inflate(R.menu.activity_sflphone_home, menu);
-		return true;
-	}
+        info.mCallID = callID;
+        info.mAccountID = accountID;
+        info.mDisplayName = "Cool Guy!";
+        info.mPhone = to;
+        info.mEmail = "coolGuy@coolGuy.com";
+        info.mCallType = SipCall.CALL_TYPE_OUTGOING;
 
-	@Override
-	public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
-	}
+        SipCall call = CallListReceiver.getCallInstance(info);
+        call.launchCallActivity(this);
+        call.placeCallUpdateUi();
+        try {
+            service.placeCall(info.mAccountID, info.mCallID, info.mPhone);
+        } catch (RemoteException e) {
+            Log.e(TAG, "Cannot call service method", e);
+        }
 
-	@Override
-	public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
-		// When the given tab is selected, switch to the corresponding page in the ViewPager.
-		mViewPager.setCurrentItem(tab.getPosition());
-	}
+        onSelectedCallAction(call);
+    }
 
-	@Override
-	public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
-		// Log.d(TAG, "onTabReselected");
-	}
+    public void processingHangUpAction() {
+        SipCall call = (SipCall) buttonHangup.getTag();
+        if (call != null)
+            call.notifyServiceHangup(service);
+    }
 
-	public void onSelectedCallAction(SipCall call) {
-		int callState = call.getCallStateInt();
+    /**
+     * A {@link FragmentStatePagerAdapter} that returns a fragment corresponding to one of the primary sections of the app.
+     */
+    public class SectionsPagerAdapter extends FragmentStatePagerAdapter {
 
-		if ((callState == SipCall.CALL_STATE_NONE) || (callState == SipCall.CALL_STATE_CURRENT)) {
-			buttonCall.setEnabled(false);
-			buttonHangup.setEnabled(true);
-		} else {
-			buttonCall.setEnabled(true);
-			buttonHangup.setEnabled(false);
-		}
+        public SectionsPagerAdapter(FragmentManager fm) {
+            super(fm);
+        }
 
-		buttonCall.setTag(call);
-		buttonHangup.setTag(call);
-	}
+        @Override
+        public Fragment getItem(int i) {
+            Fragment fragment;
 
-	public void onUnselectedCallAction() {
-		buttonCall.setTag(null);
-		buttonCall.setTag(null);
+            switch (i) {
+            case 0:
+                mContactListFragment = new ContactListFragment();
+                fragment = mContactListFragment;
+                Log.w(TAG, "getItem() ContactListFragment=" + fragment);
+                break;
+            case 1:
+                mCallElementList = new CallElementListFragment();
+                SipCall.setCallElementList(mCallElementList);
+//                mCallElementList.setAccountList(mAccountList);
+                fragment = mCallElementList;
+                Log.w(TAG, "getItem() CallElementList=" + fragment);
+                break;
+            case 2:
+                fragment = new HistoryFragment();
+                Log.w(TAG, "getItem() HistoryFragment=" + fragment);
+                break;
+            default:
+                Log.e(TAG, "getItem() unknown tab position " + i);
+                return null;
+            }
 
-		buttonCall.setEnabled(true);
-		buttonHangup.setEnabled(false);
-	}
+            // Log.i(TAG, "getItem() fragment is " + fragment);
+            Bundle args = new Bundle();
+            args.putInt(HistoryFragment.ARG_SECTION_NUMBER, i + 1);
+            fragment.setArguments(args);
+            return fragment;
+        }
 
-	public void setIncomingCallID(String accountID, String callID, String from) {
-		Log.i(TAG, "incomingCall(" + accountID + ", " + callID + ", " + from + ")");
-		buttonCall.startAnimation(animation);
-		buttonCall.setImageResource(R.drawable.ic_incomingcall);
-	}
+        public Fragment getFragment(int i) {
+            Fragment fragment;
 
-	/**
-	 * A {@link FragmentStatePagerAdapter} that returns a fragment corresponding to one of the primary sections of the app.
-	 */
-	public class SectionsPagerAdapter extends FragmentStatePagerAdapter {
+            switch (i) {
+            case 0:
+                fragment = mContactListFragment;
+                break;
+            case 1:
+                fragment = mCallElementList;
+                break;
+            case 2:
+                fragment = mHistorySectionFragment;
+                break;
+            default:
+                Log.e(TAG, "getClassName: unknown fragment position " + i);
+                fragment = null;
+            }
 
-		public SectionsPagerAdapter(FragmentManager fm) {
-			super(fm);
-		}
+            // Log.w(TAG, "getFragment: fragment=" + fragment);
+            return fragment;
+        }
 
-		@Override
-		public Fragment getItem(int i) {
-			Fragment fragment;
+        public String getClassName(int i) {
+            String name;
 
-			switch (i) {
-			case 0:
-				mContactListFragment = new ContactListFragment();
-				fragment = mContactListFragment;
-				Log.w(TAG, "getItem() ContactListFragment=" + fragment);
-				break;
-			case 1:
-				mCallElementList = new CallElementListFragment();
-				SipCall.setCallElementList(mCallElementList);
-				mCallElementList.setAccountList(mAccountList);
-				fragment = mCallElementList;
-				Log.w(TAG, "getItem() CallElementList=" + fragment);
-				break;
-			case 2:
-				fragment = new HistoryFragment();
-				Log.w(TAG, "getItem() HistoryFragment=" + fragment);
-				break;
-			case 3:
-				fragment = new ButtonSectionFragment();
-				Log.w(TAG, "getItem() ButtonSectionFragment=" + fragment);
-				break;
-			default:
-				Log.e(TAG, "getItem() unknown tab position " + i);
-				return null;
-			}
+            switch (i) {
+            case 0:
+                name = ContactListFragment.class.getName();
+                break;
+            case 1:
+                name = CallElementListFragment.class.getName();
+                break;
+            case 2:
+                name = HistoryFragment.class.getName();
+                break;
 
-			// Log.i(TAG, "getItem() fragment is " + fragment);
-			Bundle args = new Bundle();
-			args.putInt(HistoryFragment.ARG_SECTION_NUMBER, i + 1);
-			fragment.setArguments(args);
-			return fragment;
-		}
+            default:
+                Log.e(TAG, "getClassName: unknown fragment position " + i);
+                return null;
+            }
 
-		public Fragment getFragment(int i) {
-			Fragment fragment;
+            // Log.w(TAG, "getClassName: name=" + name);
+            return name;
+        }
 
-			switch (i) {
-			case 0:
-				fragment = mContactListFragment;
-				break;
-			case 1:
-				fragment = mCallElementList;
-				break;
-			case 2:
-				fragment = mHistorySectionFragment;
-				break;
-			case 3:
-				fragment = mButtonSectionFragment;
-				break;
-			default:
-				Log.e(TAG, "getClassName: unknown fragment position " + i);
-				fragment = null;
-			}
+        @Override
+        public int getCount() {
+            return 3;
+        }
 
-			// Log.w(TAG, "getFragment: fragment=" + fragment);
-			return fragment;
-		}
+        @Override
+        public CharSequence getPageTitle(int position) {
+            switch (position) {
+            case 0:
+                return getString(R.string.title_section0).toUpperCase();
+            case 1:
+                return getString(R.string.title_section1).toUpperCase();
+            case 2:
+                return getString(R.string.title_section2).toUpperCase();
+            case 3:
+                return getString(R.string.title_section3).toUpperCase();
+            default:
+                Log.e(TAG, "getPageTitle: unknown tab position " + position);
+                break;
+            }
+            return null;
+        }
+    }
 
-		public String getClassName(int i) {
-			String name;
-
-			switch (i) {
-			case 0:
-				name = ContactListFragment.class.getName();
-				break;
-			case 1:
-				name = CallElementListFragment.class.getName();
-				break;
-			case 2:
-				name = HistoryFragment.class.getName();
-				break;
-			case 3:
-				name = ButtonSectionFragment.class.getName();
-				break;
-			default:
-				Log.e(TAG, "getClassName: unknown fragment position " + i);
-				return null;
-			}
-
-			// Log.w(TAG, "getClassName: name=" + name);
-			return name;
-		}
-
-		@Override
-		public int getCount() {
-			return 4;
-		}
-
-		@Override
-		public CharSequence getPageTitle(int position) {
-			switch (position) {
-			case 0:
-				return getString(R.string.title_section0).toUpperCase();
-			case 1:
-				return getString(R.string.title_section1).toUpperCase();
-			case 2:
-				return getString(R.string.title_section2).toUpperCase();
-			case 3:
-				return getString(R.string.title_section3).toUpperCase();
-			default:
-				Log.e(TAG, "getPageTitle: unknown tab position " + position);
-				break;
-			}
-			return null;
-		}
-	}
-
-
-	@Override
-	public void onClick(View view) {
-		Log.i(TAG, "onClic from SFLPhoneHome");
-		switch (view.getId()) {
-		case R.id.buttonCall:
-			processingNewCallAction();
-			break;
-		case R.id.buttonHangUp:
-			processingHangUpAction();
-			break;
-		default:
-			Log.w(TAG, "unknown button " + view.getId());
-			break;
-		}
-	}
-
-	public void processingNewCallAction() {
-		// String accountID = mAccountList.currentAccountID;
-		Log.w(TAG, "processingNewCallAction() mCallElementList=" + mCallElementList);
-		String accountID = mCallElementList.getSelectedAccount();
-		EditText editText = (EditText) findViewById(R.id.phoneNumberTextEntry);
-		String to = editText.getText().toString();
-
-		Random random = new Random();
-		String callID = Integer.toString(random.nextInt());
-		SipCall.CallInfo info = new SipCall.CallInfo();
-
-		info.mCallID = callID;
-		info.mAccountID = accountID;
-		info.mDisplayName = "Cool Guy!";
-		info.mPhone = to;
-		info.mEmail = "coolGuy@coolGuy.com";
-		info.mCallType = SipCall.CALL_TYPE_OUTGOING;
-
-		SipCall call = CallListReceiver.getCallInstance(info);
-		call.launchCallActivity(this);
-		call.placeCallUpdateUi();
-		call.notifyServicePlaceCall(service);
-
-		onSelectedCallAction(call);
-	}
-
-	public void processingHangUpAction() {
-		SipCall call = (SipCall) buttonHangup.getTag();
-		if (call != null)
-			call.notifyServiceHangup(service);
-	}
 }
diff --git a/src/com/savoirfairelinux/sflphone/client/SFLphoneApplication.java b/src/com/savoirfairelinux/sflphone/client/SFLphoneApplication.java
index 4fc4427..1a33306 100644
--- a/src/com/savoirfairelinux/sflphone/client/SFLphoneApplication.java
+++ b/src/com/savoirfairelinux/sflphone/client/SFLphoneApplication.java
@@ -17,7 +17,6 @@
     static final String TAG = "SFLphoneApplication";
     private boolean serviceRunning = false;
     private ISipService sipService;
-    private AccountListReceiver accountList = new AccountListReceiver();
 
     private void startSipService() {
         Thread thread = new Thread("StartSFLphoneService") {
@@ -79,10 +78,6 @@
         sipService = service;
     }
 
-    public AccountListReceiver getAccountList() {
-        return accountList;
-    }
-
     public String getAppPath() {
         PackageManager pkgMng = getPackageManager();
         String pkgName = getPackageName();
diff --git a/src/com/savoirfairelinux/sflphone/client/receiver/AccountListReceiver.java b/src/com/savoirfairelinux/sflphone/client/receiver/AccountListReceiver.java
index efd6c5b..fa17868 100644
--- a/src/com/savoirfairelinux/sflphone/client/receiver/AccountListReceiver.java
+++ b/src/com/savoirfairelinux/sflphone/client/receiver/AccountListReceiver.java
@@ -31,15 +31,14 @@
 
 package com.savoirfairelinux.sflphone.client.receiver;
 
+import java.util.ArrayList;
+
 import android.content.BroadcastReceiver;
-import android.content.Intent;
 import android.content.Context;
+import android.content.Intent;
 import android.os.RemoteException;
 import android.util.Log;
 
-import java.util.ArrayList;
-
-import com.savoirfairelinux.sflphone.account.AccountManagementUI;
 import com.savoirfairelinux.sflphone.service.ConfigurationManagerCallback;
 import com.savoirfairelinux.sflphone.service.ISipService;
 
@@ -49,7 +48,7 @@
     static final String TAG = "AccountList";
     private String currentAccountID = "";
     private ArrayList<String> mList = new ArrayList<String>();
-    private ArrayList<AccountManagementUI> mUserInterfaceList = new ArrayList<AccountManagementUI>();
+//    private ArrayList<AccountManagementUI> mUserInterfaceList = new ArrayList<AccountManagementUI>();
     private static ISipService mService = null;
     // private HashMap<String, AccountPreferenceScreen> mAccountList = new HashMap<String, AccountPreferenceScreen>();
 
@@ -64,17 +63,17 @@
     }
         
 
-    public void addManagementUI(AccountManagementUI ui) {
-        mUserInterfaceList.add(ui);
-    }
-
-    public void accountSelected(String accountID, AccountManagementUI userInterface) {
-        if(!mUserInterfaceList.isEmpty()) {
-            for(AccountManagementUI ui : mUserInterfaceList) {
-                 ui.setSelectedAccount(accountID);
-            }
-        }
-    }
+//    public void addManagementUI(AccountManagementUI ui) {
+//        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)
@@ -112,20 +111,20 @@
 
         newList.remove(DEFAULT_ACCOUNT_ID);
 
-        if(!mUserInterfaceList.isEmpty()) {
-
-            if(newList.size() > mList.size()) {
-                for(AccountManagementUI ui : mUserInterfaceList) {
-                    ui.accountAdded(newList);
-                }
-            }
-        }
+//        if(!mUserInterfaceList.isEmpty()) {
+//
+//            if(newList.size() > mList.size()) {
+//                for(AccountManagementUI ui : mUserInterfaceList) {
+//                    ui.accountAdded(newList);
+//                }
+//            }
+//        }
 
         mList = newList;
     }
 
     private void processAccountStateChanged(Intent intent) {
-        if(!mUserInterfaceList.isEmpty()) {
-        }
+//        if(!mUserInterfaceList.isEmpty()) {
+//        }
     }
 }
diff --git a/src/com/savoirfairelinux/sflphone/fragments/CallElementListFragment.java b/src/com/savoirfairelinux/sflphone/fragments/CallElementListFragment.java
index fb9f83b..9ed7c72 100644
--- a/src/com/savoirfairelinux/sflphone/fragments/CallElementListFragment.java
+++ b/src/com/savoirfairelinux/sflphone/fragments/CallElementListFragment.java
@@ -99,7 +99,6 @@
         super.onAttach(activity);
         sflphoneHome = (SFLPhoneHomeActivity) activity;
         service = ((SFLphoneApplication) sflphoneHome.getApplication()).getSipService();
-        mAccountList = ((SFLphoneApplication) sflphoneHome.getApplication()).getAccountList();
         Log.w(TAG, "onAttach() service=" + service + ", accountList=" + mAccountList);
     }
 
@@ -197,7 +196,7 @@
         setHasOptionsMenu(true);
 
         // Create an empty adapter we will use to display the loaded data.
-        ArrayList calls = new ArrayList();
+        ArrayList<SipCall> calls = new ArrayList<SipCall>();
         mAdapter = new CallElementAdapter(getActivity(), calls);
         setListAdapter(mAdapter);
 
@@ -256,8 +255,8 @@
         View inflatedView = inflater.inflate(R.layout.frag_call_element, container, false);
 
         mAccountSelectionSpinner = (AccountSelectionSpinner) inflatedView.findViewById(R.id.account_selection_button);
-        mAccountList.addManagementUI(mAccountSelectionSpinner);
-        mAccountSelectionSpinner.setAccountList(mAccountList);
+//        mAccountList.addManagementUI(mAccountSelectionSpinner);
+//        mAccountSelectionSpinner.setAccountList(mAccountList);
 
         isReady = true;
         if (service != null) {
@@ -272,7 +271,6 @@
         Log.i(TAG, "Call Clicked: " + call.getCallId());
 
         call.launchCallActivity(getActivity());
-
         sflphoneHome.onSelectedCallAction(call);
     }
 
@@ -331,6 +329,7 @@
      */
     public void onServiceSipBinded(ISipService isip) {
 
+        
         if (isReady) {
             service = isip;
             ArrayList<String> accountList;
diff --git a/src/com/savoirfairelinux/sflphone/fragments/ContactListFragment.java b/src/com/savoirfairelinux/sflphone/fragments/ContactListFragment.java
index 2cdca05..888af04 100644
--- a/src/com/savoirfairelinux/sflphone/fragments/ContactListFragment.java
+++ b/src/com/savoirfairelinux/sflphone/fragments/ContactListFragment.java
@@ -91,7 +91,6 @@
     private SFLPhoneHomeActivity sflphoneHome;
     private SFLphoneApplication sflphoneApplication;
     private ISipService service;
-    private AccountListReceiver mAccountList;
 
     // These are the Contacts rows that we will retrieve.
     static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] { Contacts._ID, Contacts.DISPLAY_NAME, Contacts.PHOTO_ID, Contacts.LOOKUP_KEY };
@@ -104,9 +103,6 @@
         sflphoneHome = (SFLPhoneHomeActivity) activity;
         sflphoneApplication = (SFLphoneApplication) sflphoneHome.getApplication();
         service = sflphoneApplication.getSipService();
-        mAccountList = sflphoneApplication.getAccountList();
-
-        Log.w(TAG, "onAttach() service=" + service + ", mAccountList=" + mAccountList);
     }
 
     public static class InfosLoader implements Runnable {
diff --git a/src/com/savoirfairelinux/sflphone/model/SipCall.java b/src/com/savoirfairelinux/sflphone/model/SipCall.java
index 679d2df..ad3f49c 100644
--- a/src/com/savoirfairelinux/sflphone/model/SipCall.java
+++ b/src/com/savoirfairelinux/sflphone/model/SipCall.java
@@ -292,14 +292,6 @@
             mHome.onSelectedCallAction(this);
     }
 
-    public void notifyServicePlaceCall(ISipService service)
-    {
-        try {
-            service.placeCall(mCallInfo.mAccountID, mCallInfo.mCallID, mCallInfo.mPhone);
-        } catch (RemoteException e) {
-            Log.e(TAG, "Cannot call service method", e);
-        }
-    }
 
     public void receiveCallUpdateUi()
     {
@@ -449,4 +441,16 @@
         intent.putExtras(bundle);
         context.startActivity(intent);
     }
+    
+    /**
+     * Compare sip calls based on call ID
+     */
+    @Override
+    public boolean equals(Object c){
+        if(c instanceof SipCall && ((SipCall) c).mCallInfo.mCallID == mCallInfo.mCallID){
+            return true;
+        }
+        return false;
+        
+    }
 }
diff --git a/src/com/savoirfairelinux/sflphone/service/ISipClient.aidl b/src/com/savoirfairelinux/sflphone/service/ISipClient.aidl
new file mode 100644
index 0000000..2da24cc
--- /dev/null
+++ b/src/com/savoirfairelinux/sflphone/service/ISipClient.aidl
@@ -0,0 +1,5 @@
+package com.savoirfairelinux.sflphone.service;
+
+interface ISipClient {
+    void incomingCall();
+}
\ No newline at end of file
diff --git a/src/com/savoirfairelinux/sflphone/service/ISipService.aidl b/src/com/savoirfairelinux/sflphone/service/ISipService.aidl
index 1bcf4b5..cb7bf46 100644
--- a/src/com/savoirfairelinux/sflphone/service/ISipService.aidl
+++ b/src/com/savoirfairelinux/sflphone/service/ISipService.aidl
@@ -1,5 +1,7 @@
 package com.savoirfairelinux.sflphone.service;
 
+import com.savoirfairelinux.sflphone.service.ISipClient;
+
 interface ISipService {
     void placeCall(String accountID, in String callID, in String to);
     void refuse(in String callID);
@@ -14,4 +16,5 @@
     void setAccountDetails(in String accountId, in Map accountDetails);
     void setAudioPlugin(in String callID);
     String getCurrentAudioOutputPlugin();
+    void registerClient(in ISipClient callback);
 }
diff --git a/src/com/savoirfairelinux/sflphone/service/SipService.java b/src/com/savoirfairelinux/sflphone/service/SipService.java
index ec1f0b6..e84562d 100644
--- a/src/com/savoirfairelinux/sflphone/service/SipService.java
+++ b/src/com/savoirfairelinux/sflphone/service/SipService.java
@@ -39,14 +39,13 @@
 import android.os.IBinder;
 import android.os.Looper;
 import android.os.Message;
-import android.os.Vibrator;
+import android.os.RemoteException;
 import android.support.v4.content.LocalBroadcastManager;
 import android.util.Log;
 import android.widget.Toast;
 
 import com.savoirfairelinux.sflphone.account.AccountDetailsHandler;
 import com.savoirfairelinux.sflphone.client.SFLphoneApplication;
-import com.savoirfairelinux.sflphone.client.receiver.CallListReceiver;
 
 public class SipService extends Service {
 
@@ -63,7 +62,7 @@
     private ConfigurationManagerCallback configurationManagerCallback;
     private ManagerImpl managerImpl;
     private boolean isPjSipStackStarted = false;
-    public CallListReceiver mCallList;
+    ISipClient client;
     
 
     /* Implement public interface for the service */
@@ -253,6 +252,11 @@
                 }
             });
         }
+
+        @Override
+        public void registerClient(ISipClient callback) throws RemoteException {
+           client = callback;
+        }
     };
     private BroadcastReceiver IncomingReceiver = new BroadcastReceiver() {
         
@@ -260,8 +264,15 @@
         public void onReceive(Context context, Intent intent) {
             Log.i(TAG, "Received"+ intent.getAction());
          // Get instance of Vibrator from current Context
-            Vibrator mVibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
-            mVibrator.vibrate(300);
+//            Vibrator mVibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
+//            mVibrator.vibrate(300);
+            if(intent.getAction().contentEquals(CallManagerCallBack.INCOMING_CALL)){
+                try {
+                    client.incomingCall();
+                } catch (RemoteException e) {
+                    Log.e(TAG,e.toString());
+                }
+            }
         }
     };
 
@@ -283,9 +294,8 @@
         super.onCreate();
         sflphoneApp = (SFLphoneApplication) getApplication();
         sipServiceThread = new SipServiceThread();
-        mCallList = new CallListReceiver();
         
-        IntentFilter callFilter = new IntentFilter(CallManagerCallBack.NEW_CALL_CREATED);
+        IntentFilter callFilter = new IntentFilter();
         callFilter.addAction(CallManagerCallBack.INCOMING_CALL);
         LocalBroadcastManager.getInstance(this).registerReceiver(IncomingReceiver , callFilter);
         getExecutor().execute(new StartRunnable());