* #26115 First conference creation
* #26250 design updated
diff --git a/src/com/savoirfairelinux/sflphone/account/HistoryHandler.java b/src/com/savoirfairelinux/sflphone/account/HistoryHandler.java
index ae5dfd3..541dca3 100644
--- a/src/com/savoirfairelinux/sflphone/account/HistoryHandler.java
+++ b/src/com/savoirfairelinux/sflphone/account/HistoryHandler.java
@@ -31,17 +31,7 @@
             Log.i(TAG, swigmap.get(i).get(ServiceConstants.HISTORY_TIMESTAMP_START_KEY));
             Log.i(TAG, swigmap.get(i).get(ServiceConstants.HISTORY_TIMESTAMP_STOP_KEY));
             Log.i(TAG, swigmap.get(i).get(ServiceConstants.HISTORY_AUDIO_CODEC_KEY));
-            try {
-                if(swigmap.get(i).get(ServiceConstants.HISTORY_MISSED_STRING) != null)
-                    Log.i(TAG, swigmap.get(i).get(ServiceConstants.HISTORY_MISSED_STRING));
-                if(swigmap.get(i).get(ServiceConstants.HISTORY_INCOMING_STRING) != null)
-                    Log.i(TAG, swigmap.get(i).get(ServiceConstants.HISTORY_INCOMING_STRING));
-                if(swigmap.get(i).get(ServiceConstants.HISTORY_OUTGOING_STRING) != null)
-                    Log.i(TAG, swigmap.get(i).get(ServiceConstants.HISTORY_OUTGOING_STRING));
-                
-            } catch (Exception e) {
-                Log.e(TAG, e.toString());
-            }
+
 
             entry.put(ServiceConstants.HISTORY_ACCOUNT_ID_KEY, swigmap.get(i).get(ServiceConstants.HISTORY_ACCOUNT_ID_KEY));
             entry.put(ServiceConstants.HISTORY_CALLID_KEY, swigmap.get(i).get(ServiceConstants.HISTORY_CALLID_KEY));
@@ -53,31 +43,7 @@
             entry.put(ServiceConstants.HISTORY_TIMESTAMP_START_KEY, swigmap.get(i).get(ServiceConstants.HISTORY_TIMESTAMP_START_KEY));
             entry.put(ServiceConstants.HISTORY_TIMESTAMP_STOP_KEY, swigmap.get(i).get(ServiceConstants.HISTORY_TIMESTAMP_STOP_KEY));
             entry.put(ServiceConstants.HISTORY_AUDIO_CODEC_KEY, swigmap.get(i).get(ServiceConstants.HISTORY_AUDIO_CODEC_KEY));
-            
-            try {
-                if(swigmap.get(i).get(ServiceConstants.HISTORY_MISSED_STRING) != null)
-                    entry.put(ServiceConstants.HISTORY_MISSED_STRING, swigmap.get(i).get(ServiceConstants.HISTORY_MISSED_STRING)); 
-            } catch (Exception e) {
-                Log.e(TAG, e.toString());
-            }
-            try {
-                if(swigmap.get(i).get(ServiceConstants.HISTORY_INCOMING_STRING) != null)
-                    entry.put(ServiceConstants.HISTORY_INCOMING_STRING, swigmap.get(i).get(ServiceConstants.HISTORY_INCOMING_STRING));
-            } catch (Exception e) {
-                Log.e(TAG, e.toString());
-            }
-            try {
-                if(swigmap.get(i).get(ServiceConstants.HISTORY_OUTGOING_STRING) != null)
-                    entry.put(ServiceConstants.HISTORY_OUTGOING_STRING, swigmap.get(i).get(ServiceConstants.HISTORY_OUTGOING_STRING));
-            } catch (Exception e) {
-                Log.e(TAG, e.toString());
-            }
-           
-            
-            
-            
-            
-            
+ 
             nativemap.add(entry);
         }
 
diff --git a/src/com/savoirfairelinux/sflphone/adapters/CallElementAdapter.java b/src/com/savoirfairelinux/sflphone/adapters/CallElementAdapter.java
deleted file mode 100644
index a9f88a2..0000000
--- a/src/com/savoirfairelinux/sflphone/adapters/CallElementAdapter.java
+++ /dev/null
@@ -1,143 +0,0 @@
-package com.savoirfairelinux.sflphone.adapters;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
-import android.content.Context;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.BaseAdapter;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.savoirfairelinux.sflphone.R;
-import com.savoirfairelinux.sflphone.model.SipCall;
-
-/**
- * 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 BaseAdapter {
-    private ExecutorService infos_fetcher = Executors.newCachedThreadPool();
-    private Context mContext;
-    private final HashMap<String, SipCall> mCallList;
-    private static final String CURRENT_STATE_LABEL = "    CURRENT STATE: ";
-
-    public CallElementAdapter(Context context, List<SipCall> callList) {
-        super();
-        mContext = context;
-        mCallList = new HashMap<String, SipCall>();
-        for (SipCall c : callList) {
-            mCallList.put(c.getCallId(), c);
-        }
-
-    }
-
-    @Override
-    public View getView(int position, View convertView, ViewGroup parent) {
-        View rowView = convertView;
-        CallElementView entryView = null;
-
-        if (rowView == null) {
-            // Get a new instance of the row layout view
-            LayoutInflater inflater = LayoutInflater.from(mContext);
-            rowView = inflater.inflate(R.layout.item_contact, null);
-
-            // Hold the view objects in an object
-            // so they don't need to be re-fetched
-            entryView = new CallElementView();
-            entryView.photo = (ImageView) rowView.findViewById(R.id.photo);
-            entryView.displayName = (TextView) rowView.findViewById(R.id.display_name);
-//            entryView.phones = (TextView) rowView.findViewById(R.id.phones);
-//            entryView.state = (TextView) rowView.findViewById(R.id.callstate);
-
-            // Cache the view obects in the tag
-            // so they can be re-accessed later
-            rowView.setTag(entryView);
-        } else {
-            entryView = (CallElementView) rowView.getTag();
-        }
-
-        // Transfer the stock data from the data object
-        // to the view objects
-
-        SipCall call = (SipCall) mCallList.values().toArray()[position];
-        entryView.displayName.setText(call.getContacts().get(0).getmDisplayName());
-        entryView.phones.setText(call.getContacts().get(0).getPhones().get(0).getNumber());
-        entryView.state.setText(CURRENT_STATE_LABEL + call.getCallStateString());
-
-        return rowView;
-    }
-
-    /*********************
-     * ViewHolder Pattern
-     *********************/
-    public class CallElementView {
-        protected ImageView photo;
-        protected TextView displayName;
-        protected TextView phones;
-        public TextView state;
-    }
-
-    @Override
-    public int getCount() {
-        return mCallList.size();
-    }
-
-    @Override
-    public SipCall getItem(int pos) {
-        return (SipCall) mCallList.values().toArray()[pos];
-    }
-
-    @Override
-    public long getItemId(int arg0) {
-        // TODO Auto-generated method stub
-        return 0;
-    }
-
-    public void add(SipCall c) {
-        mCallList.put(c.getCallId(), c);
-        notifyDataSetChanged();
-
-    }
-
-    public void update(String id, String newState) {
-        if (mCallList.get(id) == null) {
-            return;
-        }
-        if (newState.equals("INCOMING")) {
-            mCallList.get(id).setCallState(SipCall.state.CALL_STATE_INCOMING);
-        } else if (newState.equals("RINGING")) {
-            mCallList.get(id).setCallState(SipCall.state.CALL_STATE_RINGING);
-        } else if (newState.equals("CURRENT")) {
-            mCallList.get(id).setCallState(SipCall.state.CALL_STATE_CURRENT);
-        } else if (newState.equals("HUNGUP")) {
-            mCallList.get(id).setCallState(SipCall.state.CALL_STATE_HUNGUP);
-            mCallList.remove(id);
-        } else if (newState.equals("BUSY")) {
-            mCallList.get(id).setCallState(SipCall.state.CALL_STATE_BUSY);
-            mCallList.remove(id);
-        } else if (newState.equals("FAILURE")) {
-            mCallList.get(id).setCallState(SipCall.state.CALL_STATE_FAILURE);
-            mCallList.remove(id);
-        } else if (newState.equals("HOLD")) {
-            mCallList.get(id).setCallState(SipCall.state.CALL_STATE_HOLD);
-        } else if (newState.equals("UNHOLD")) {
-            mCallList.get(id).setCallState(SipCall.state.CALL_STATE_CURRENT);
-        } else {
-            mCallList.get(id).setCallState(SipCall.state.CALL_STATE_NONE);
-        }
-        notifyDataSetChanged();
-
-    }
-
-    public void clear() {
-        mCallList.clear();
-        notifyDataSetChanged();
-    }
-
-}
diff --git a/src/com/savoirfairelinux/sflphone/adapters/CallPagerAdapter.java b/src/com/savoirfairelinux/sflphone/adapters/CallPagerAdapter.java
deleted file mode 100644
index 88f44e2..0000000
--- a/src/com/savoirfairelinux/sflphone/adapters/CallPagerAdapter.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package com.savoirfairelinux.sflphone.adapters;
-
-import java.util.HashMap;
-
-import android.app.Fragment;
-import android.app.FragmentManager;
-import android.content.Context;
-import android.support.v13.app.FragmentStatePagerAdapter;
-import android.support.v4.view.PagerAdapter;
-import android.util.Log;
-
-import com.savoirfairelinux.sflphone.R;
-import com.savoirfairelinux.sflphone.fragments.HomeFragment;
-import com.savoirfairelinux.sflphone.fragments.CallFragment;
-import com.savoirfairelinux.sflphone.fragments.DialingFragment;
-import com.savoirfairelinux.sflphone.fragments.HistoryFragment;
-
-public class CallPagerAdapter extends FragmentStatePagerAdapter {
-    
-    private static final String TAG = SectionsPagerAdapter.class.getSimpleName();
-    Context mContext;
-    
-
-    
-    HashMap<String,Fragment> calls;
-
-    public CallPagerAdapter(Context c, FragmentManager fm) {
-        super(fm);
-        mContext = c;
-        calls = new HashMap<String,Fragment>();
-    }
-
-    @Override
-    public Fragment getItem(int i) {
-        
-        for(int j = 0 ; j <= i ; ++j){
-            calls.entrySet().iterator().next();
-        }
-
-        return calls.entrySet().iterator().next().getValue();
-    }
-
-//    public Fragment getFragment(int i) {
-//        Fragment fragment;
-//
-//        switch (i) {
-//        case 0:
-//            fragment = new DialingFragment();
-//            break;
-//        case 1:
-//            fragment = new CallElementListFragment();
-//            break;
-//        case 2:
-//            fragment = new HistoryFragment();
-//            break;
-//        default:
-//            Log.e(TAG, "getClassName: unknown fragment position " + i);
-//            fragment = null;
-//        }
-
-        // Log.w(TAG, "getFragment: fragment=" + fragment);
-//        return fragment;
-//    }
-
-    public String getClassName(int i) {
-        String name;
-
-        switch (i) {
-        case 0:
-            name = DialingFragment.class.getName();
-            break;
-        case 1:
-            name = HomeFragment.class.getName();
-            break;
-        case 2:
-            name = HistoryFragment.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 calls.size();
-    }
-
-    @Override
-    public CharSequence getPageTitle(int position) {
-        switch (position) {
-        case 0:
-            return mContext.getString(R.string.title_section0).toUpperCase();
-        case 1:
-            return mContext.getString(R.string.title_section1).toUpperCase();
-        case 2:
-            return mContext.getString(R.string.title_section2).toUpperCase();
-        default:
-            Log.e(TAG, "getPageTitle: unknown tab position " + position);
-            break;
-        }
-        return null;
-    }
-    
-    @Override
-    public int getItemPosition(Object object){
-        return PagerAdapter.POSITION_NONE;
-    }
-
-    public void addCall(String mCallID, CallFragment newCall) {
-        Log.w(TAG, "Put "+mCallID);
-        calls.put(mCallID,newCall);
-        notifyDataSetChanged();
-    }
-
-    public Fragment getCall(String callID) {
-        Log.w(TAG, "Get "+callID);
-        return calls.get(callID);
-        
-    }
-
-    public void remove(String callID) {
-        calls.remove(callID);
-        notifyDataSetChanged();
-        
-    }
-}
\ No newline at end of file
diff --git a/src/com/savoirfairelinux/sflphone/adapters/HistoryAdapter.java b/src/com/savoirfairelinux/sflphone/adapters/HistoryAdapter.java
index 8aea633..54cb93c 100644
--- a/src/com/savoirfairelinux/sflphone/adapters/HistoryAdapter.java
+++ b/src/com/savoirfairelinux/sflphone/adapters/HistoryAdapter.java
@@ -49,6 +49,9 @@
             entryView.displayName = (TextView) rowView.findViewById(R.id.display_name);
             entryView.duration = (TextView) rowView.findViewById(R.id.duration);
             entryView.date = (TextView) rowView.findViewById(R.id.date_start);
+            entryView.missed = (TextView) rowView.findViewById(R.id.missed);
+            entryView.incoming = (TextView) rowView.findViewById(R.id.incomings);
+            entryView.outgoing = (TextView) rowView.findViewById(R.id.outgoings);
             entryView.call_button = (ImageButton) rowView.findViewById(R.id.action_call);
             entryView.call_button.setOnClickListener(new OnClickListener() {
                 
@@ -71,7 +74,9 @@
         
         infos_fetcher.execute(new ContactPictureLoader(mContext.getActivity(), entryView.photo, dataset.get(pos).getContact().getId()));
 
-        
+        entryView.missed.setText("Missed:"+dataset.get(pos).getMissed_sum());
+        entryView.incoming.setText("In:"+dataset.get(pos).getIncoming_sum());
+        entryView.outgoing.setText("Out:"+dataset.get(pos).getOutgoing_sum());
 
         entryView.date.setText(dataset.get(pos).getCalls().lastEntry().getValue().getDate("yyyy-MM-dd"));
         entryView.duration.setText(dataset.get(pos).getTotalDuration());
@@ -92,6 +97,10 @@
         protected TextView date;
         public TextView duration;
         private ImageButton call_button;
+        
+        private TextView missed;
+        private TextView outgoing;
+        private TextView incoming;
     }
 
     @Override
diff --git a/src/com/savoirfairelinux/sflphone/client/CallActivity.java b/src/com/savoirfairelinux/sflphone/client/CallActivity.java
index 6147e57..bdfd992 100644
--- a/src/com/savoirfairelinux/sflphone/client/CallActivity.java
+++ b/src/com/savoirfairelinux/sflphone/client/CallActivity.java
@@ -34,8 +34,6 @@
 package com.savoirfairelinux.sflphone.client;
 
 import java.util.HashMap;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
 
 import android.app.Activity;
 import android.content.ComponentName;
@@ -54,7 +52,6 @@
 import android.widget.Toast;
 
 import com.savoirfairelinux.sflphone.R;
-import com.savoirfairelinux.sflphone.fragments.TransferDFragment;
 import com.savoirfairelinux.sflphone.fragments.CallFragment;
 import com.savoirfairelinux.sflphone.fragments.CallListFragment;
 import com.savoirfairelinux.sflphone.interfaces.CallInterface;
@@ -71,7 +68,6 @@
     static final String TAG = "CallActivity";
     private ISipService service;
 
-    private ExecutorService infos_fetcher = Executors.newCachedThreadPool();
     CallReceiver receiver;
 
     CallPaneLayout slidingPaneLayout;
@@ -185,7 +181,7 @@
                 CallContact c = CallContact.ContactBuilder.buildUnknownContact(u.getSchemeSpecificPart());
                 try {
                     service.destroyNotification();
-                    SipCall call = SipCall.SipCallBuilder.getInstance().startCallCreation().addContact(c)
+                    SipCall call = SipCall.SipCallBuilder.getInstance().startCallCreation().setContact(c)
                             .setAccountID(service.getAccountList().get(1).toString()).setCallType(SipCall.state.CALL_TYPE_OUTGOING).build();
                     Bundle b = new Bundle();
                     b.putParcelable("CallInfo", call);
diff --git a/src/com/savoirfairelinux/sflphone/client/SFLPhoneHomeActivity.java b/src/com/savoirfairelinux/sflphone/client/SFLPhoneHomeActivity.java
index 816e4ed..cc1300a 100644
--- a/src/com/savoirfairelinux/sflphone/client/SFLPhoneHomeActivity.java
+++ b/src/com/savoirfairelinux/sflphone/client/SFLPhoneHomeActivity.java
@@ -36,7 +36,6 @@
 import java.util.TimerTask;
 
 import android.app.Activity;
-import android.app.Fragment;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
@@ -62,28 +61,24 @@
 import android.widget.Toast;
 
 import com.savoirfairelinux.sflphone.R;
-import com.savoirfairelinux.sflphone.adapters.AccountSelectionAdapter;
 import com.savoirfairelinux.sflphone.adapters.SectionsPagerAdapter;
 import com.savoirfairelinux.sflphone.fragments.ContactListFragment;
 import com.savoirfairelinux.sflphone.fragments.DialingFragment;
 import com.savoirfairelinux.sflphone.fragments.HistoryFragment;
 import com.savoirfairelinux.sflphone.fragments.HomeFragment;
 import com.savoirfairelinux.sflphone.fragments.MenuFragment;
-import com.savoirfairelinux.sflphone.interfaces.AccountsInterface;
 import com.savoirfairelinux.sflphone.interfaces.CallInterface;
 import com.savoirfairelinux.sflphone.loaders.LoaderConstants;
 import com.savoirfairelinux.sflphone.model.CallContact;
 import com.savoirfairelinux.sflphone.model.SipCall;
-import com.savoirfairelinux.sflphone.receivers.AccountsReceiver;
 import com.savoirfairelinux.sflphone.receivers.CallReceiver;
 import com.savoirfairelinux.sflphone.service.CallManagerCallBack;
-import com.savoirfairelinux.sflphone.service.ConfigurationManagerCallback;
 import com.savoirfairelinux.sflphone.service.ISipService;
 import com.savoirfairelinux.sflphone.service.SipService;
 import com.savoirfairelinux.sflphone.views.CustomSlidingDrawer;
 
-public class SFLPhoneHomeActivity extends Activity implements DialingFragment.Callbacks, ContactListFragment.Callbacks,
-        HomeFragment.Callbacks, HistoryFragment.Callbacks, CallInterface, AccountsInterface {
+public class SFLPhoneHomeActivity extends Activity implements DialingFragment.Callbacks, ContactListFragment.Callbacks, HomeFragment.Callbacks,
+        HistoryFragment.Callbacks, CallInterface, MenuFragment.Callbacks {
 
     SectionsPagerAdapter mSectionsPagerAdapter = null;
     static final String TAG = "SFLPhoneHomeActivity";
@@ -95,7 +90,7 @@
     // private DialingFragment mDialingFragment = null;
     // private CallElementListFragment mCallElementList = null;
     // private HistoryFragment mHistorySectionFragment = null;
-    private Fragment fMenu;
+    private MenuFragment fMenu;
 
     private boolean mBound = false;
     private ISipService service;
@@ -103,16 +98,12 @@
     private CharSequence mDrawerTitle;
     private CharSequence mTitle;
 
-    AccountSelectionAdapter mAdapter;
-//    private Spinner spinnerAccounts;
+    // AccountSelectionAdapter mAdapter;
+    // private Spinner spinnerAccounts;
 
     public static final int REQUEST_CODE_PREFERENCES = 1;
     private static final int REQUEST_CODE_CALL = 2;
 
-//    private static final int ACTION_BAR_TAB_DIALING = 0;
-//    private static final int ACTION_BAR_TAB_CALL = 1;
-//    private static final int ACTION_BAR_TAB_HISTORY = 2;
-
     RelativeLayout mSliderButton;
     CustomSlidingDrawer mDrawer;
     private DrawerLayout mDrawerLayout;
@@ -123,7 +114,6 @@
     ViewPager mViewPager;
 
     CallReceiver callReceiver;
-    AccountsReceiver accountReceiver;
 
     private TabHost mTabHost;
 
@@ -150,7 +140,7 @@
         super.onCreate(savedInstanceState);
 
         callReceiver = new CallReceiver(this);
-        accountReceiver = new AccountsReceiver(this);
+
         // String libraryPath = getApplicationInfo().dataDir + "/lib";
         // Log.i(TAG, libraryPath);
 
@@ -169,7 +159,6 @@
             getFragmentManager().beginTransaction().replace(R.id.contacts_frame, mContactsFragment).commit();
         }
 
-
         mDrawer = (CustomSlidingDrawer) findViewById(R.id.custom_sliding_drawer);
 
         mContactsFragment.setHandleView((RelativeLayout) findViewById(R.id.slider_button));
@@ -179,7 +168,6 @@
         // Set up the ViewPager with the sections adapter.
         mViewPager = (ViewPager) findViewById(R.id.pager);
         mViewPager.setPageTransformer(true, new ZoomOutPageTransformer(0.7f));
-        
 
         mTitle = mDrawerTitle = getTitle();
         mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
@@ -219,9 +207,6 @@
             }
         });
 
-
-        fMenu = new MenuFragment();
-        getFragmentManager().beginTransaction().replace(R.id.left_drawer, fMenu).commit();
     }
 
     private void initialiseTabHost(Bundle args) {
@@ -239,8 +224,7 @@
                 this,
                 this.mTabHost,
                 this.mTabHost.newTabSpec("Tab2").setIndicator(mSectionsPagerAdapter.getPageTitle(1),
-                        getResources().getDrawable(mSectionsPagerAdapter.getIconOf(1))), (tabInfo = new TabInfo("Tab2",
-                        HomeFragment.class, args)));
+                        getResources().getDrawable(mSectionsPagerAdapter.getIconOf(1))), (tabInfo = new TabInfo("Tab2", HomeFragment.class, args)));
         this.mapTabInfo.put(tabInfo.tag, tabInfo);
         SFLPhoneHomeActivity
                 .AddTab(this,
@@ -249,8 +233,6 @@
                                 getResources().getDrawable(mSectionsPagerAdapter.getIconOf(2))), (tabInfo = new TabInfo("Tab3",
                                 HistoryFragment.class, args)));
         this.mapTabInfo.put(tabInfo.tag, tabInfo);
-        
-        
 
         mTabHost.setOnTabChangedListener(new OnTabChangeListener() {
 
@@ -284,30 +266,23 @@
         intentFilter.addAction(CallManagerCallBack.INCOMING_TEXT);
         intentFilter.addAction(CallManagerCallBack.CALL_STATE_CHANGED);
         registerReceiver(callReceiver, intentFilter);
-        
-        
-        IntentFilter intentFilter2 = new IntentFilter();
-        intentFilter2.addAction(ConfigurationManagerCallback.ACCOUNT_STATE_CHANGED);
-        intentFilter2.addAction(ConfigurationManagerCallback.ACCOUNTS_CHANGED);
-        registerReceiver(accountReceiver, intentFilter2);
-        
+
     }
-    
+
     private boolean isClosing = false;
     private Timer t = new Timer();
-    
-    
+
     @Override
     public void onBackPressed() {
-        
-        if(getActionBar().getCustomView() != null){
+
+        if (getActionBar().getCustomView() != null) {
             getActionBar().setDisplayShowCustomEnabled(false);
             getActionBar().setCustomView(null);
             // Display all the contacts again
             getLoaderManager().restartLoader(LoaderConstants.CONTACT_LOADER, null, mContactsFragment);
             return;
         }
-        
+
         if (mDrawer.isOpened()) {
             mDrawer.animateClose();
             return;
@@ -335,7 +310,6 @@
     protected void onPause() {
         super.onPause();
         unregisterReceiver(callReceiver);
-        unregisterReceiver(accountReceiver);
         try {
             service.createNotification();
 
@@ -358,7 +332,7 @@
         /* stop the service, if no other bound user, no need to check if it is running */
         if (mBound) {
             Log.i(TAG, "onDestroy: Unbinding service...");
-            
+
             unbindService(mConnection);
             mBound = false;
 
@@ -386,6 +360,8 @@
 
             try {
 
+                fMenu = new MenuFragment();
+                getFragmentManager().beginTransaction().replace(R.id.left_drawer, fMenu).commit();
                 mSectionsPagerAdapter = new SectionsPagerAdapter(SFLPhoneHomeActivity.this, getFragmentManager());
                 initialiseTabHost(null);
                 mViewPager.setAdapter(mSectionsPagerAdapter);
@@ -426,8 +402,8 @@
 
         switch (requestCode) {
         case REQUEST_CODE_PREFERENCES:
-            Log.w(TAG, "Result out of PreferenceActivity");
-            ((DialingFragment)mSectionsPagerAdapter.getItem(0)).updateAllAccounts();
+            Log.w(TAG, "In Activity");
+            fMenu.updateAllAccounts();
             break;
         case REQUEST_CODE_CALL:
             Log.w(TAG, "Result out of CallActivity");
@@ -485,52 +461,52 @@
     public void onContactSelected(final CallContact c) {
 
         Thread launcher = new Thread(new Runnable() {
-            
+
             final String[] CONTACTS_PHONES_PROJECTION = new String[] { Phone.NUMBER, Phone.TYPE };
             final String[] CONTACTS_SIP_PROJECTION = new String[] { SipAddress.SIP_ADDRESS, SipAddress.TYPE };
-            
+
             @Override
             public void run() {
                 SipCall.SipCallBuilder callBuilder = SipCall.SipCallBuilder.getInstance();
                 try {
-                    callBuilder.startCallCreation().setAccountID(service.getAccountList().get(1).toString()).setCallType(SipCall.state.CALL_TYPE_OUTGOING);
-                    Cursor cPhones = getContentResolver().query(Phone.CONTENT_URI, CONTACTS_PHONES_PROJECTION,
-                          Phone.CONTACT_ID + " =" + c.getId(), null, null);
+                    callBuilder.startCallCreation().setAccountID(service.getAccountList().get(1).toString())
+                            .setCallType(SipCall.state.CALL_TYPE_OUTGOING);
+                    Cursor cPhones = getContentResolver().query(Phone.CONTENT_URI, CONTACTS_PHONES_PROJECTION, Phone.CONTACT_ID + " =" + c.getId(),
+                            null, null);
 
-                  while (cPhones.moveToNext()) {
-                      c.addPhoneNumber(cPhones.getString(cPhones.getColumnIndex(Phone.NUMBER)), cPhones.getInt(cPhones.getColumnIndex(Phone.TYPE)));
-                  }
-                  cPhones.close();
-      
-                  Cursor cSip = getContentResolver().query(Phone.CONTENT_URI, CONTACTS_SIP_PROJECTION,
-                          Phone.CONTACT_ID + "=" + c.getId(), null, null);
-      
-                  while (cSip.moveToNext()) {
-                      c.addSipNumber(cSip.getString(cSip.getColumnIndex(SipAddress.SIP_ADDRESS)), cSip.getInt(cSip.getColumnIndex(SipAddress.TYPE)));
-                  }
-                  cSip.close();
-                    callBuilder.addContact(c);
+                    while (cPhones.moveToNext()) {
+                        c.addPhoneNumber(cPhones.getString(cPhones.getColumnIndex(Phone.NUMBER)), cPhones.getInt(cPhones.getColumnIndex(Phone.TYPE)));
+                    }
+                    cPhones.close();
+
+                    Cursor cSip = getContentResolver().query(Phone.CONTENT_URI, CONTACTS_SIP_PROJECTION, Phone.CONTACT_ID + "=" + c.getId(), null,
+                            null);
+
+                    while (cSip.moveToNext()) {
+                        c.addSipNumber(cSip.getString(cSip.getColumnIndex(SipAddress.SIP_ADDRESS)), cSip.getInt(cSip.getColumnIndex(SipAddress.TYPE)));
+                    }
+                    cSip.close();
+                    callBuilder.setContact(c);
                     launchCallActivity(callBuilder.build());
                 } catch (RemoteException e1) {
                     Log.e(TAG, e1.toString());
                 } catch (Exception e) {
                     Log.e(TAG, e.toString());
                 }
-                
+
             }
         });
         launcher.start();
         mDrawer.close();
-        
 
     }
 
     @Override
-    public void onCallDialed(String accountID, String to) {
+    public void onCallDialed(String to) {
 
         SipCall.SipCallBuilder callBuilder = SipCall.SipCallBuilder.getInstance();
-        callBuilder.startCallCreation().setAccountID(accountID).setCallType(SipCall.state.CALL_TYPE_OUTGOING);
-        callBuilder.addContact(CallContact.ContactBuilder.buildUnknownContact(to));
+        callBuilder.startCallCreation().setAccountID(fMenu.getSelectedAccount().getAccountID()).setCallType(SipCall.state.CALL_TYPE_OUTGOING);
+        callBuilder.setContact(CallContact.ContactBuilder.buildUnknownContact(to));
 
         try {
             launchCallActivity(callBuilder.build());
@@ -604,16 +580,4 @@
         mDrawer.animateOpen();
     }
 
-    @Override
-    public void accountsChanged() {
-        ((DialingFragment)mSectionsPagerAdapter.getItem(0)).updateAllAccounts();
-        
-    }
-
-    @Override
-    public void accountStateChanged(Intent accountState) {
-        ((DialingFragment)mSectionsPagerAdapter.getItem(0)).updateAccount(accountState);
-        
-    }
-
 }
diff --git a/src/com/savoirfairelinux/sflphone/fragments/AccountManagementFragment.java b/src/com/savoirfairelinux/sflphone/fragments/AccountManagementFragment.java
index a257d81..327c69f 100644
--- a/src/com/savoirfairelinux/sflphone/fragments/AccountManagementFragment.java
+++ b/src/com/savoirfairelinux/sflphone/fragments/AccountManagementFragment.java
@@ -295,13 +295,13 @@
         HashMap<String, String> accountDetails = null;
         try {
             accountDetails = (HashMap<String, String>) service.getAccountDetails(accountID);
-            ArrayList<Integer> tmp = (ArrayList<Integer>) service.getAudioCodecList(accountID);
-            for(Integer i : tmp){
-                Log.w(TAG,"Codec : "+i);
-            }
+//            ArrayList<Integer> tmp = (ArrayList<Integer>) service.getAudioCodecList(accountID);
+//            for(Integer i : tmp){
+//                Log.w(TAG,"Codec : "+i);
+//            }
 
-            if (accountDetails.containsKey("TLS.negotiationTimeoutSec"))
-                Log.i(TAG, "localinterface existe");
+//            if (accountDetails.containsKey("TLS.negotiationTimeoutSec"))
+//                Log.i(TAG, "localinterface existe");
         } catch (RemoteException e) {
             Log.e(TAG, "Cannot call service method", e);
         }
diff --git a/src/com/savoirfairelinux/sflphone/fragments/CallFragment.java b/src/com/savoirfairelinux/sflphone/fragments/CallFragment.java
index 90342d5..f454d99 100644
--- a/src/com/savoirfairelinux/sflphone/fragments/CallFragment.java
+++ b/src/com/savoirfairelinux/sflphone/fragments/CallFragment.java
@@ -135,7 +135,7 @@
             return null;
         }
     };
-    
+
     /**
      * The Activity calling this fragment has to implement this interface
      * 
@@ -184,9 +184,9 @@
         mCallbacks = sDummyCallbacks;
         // rootView.requestDisallowInterceptTouchEvent(false);
     }
-    
+
     @Override
-    public void onStop(){
+    public void onStop() {
         super.onStop();
     }
 
@@ -212,18 +212,12 @@
 
         callStatusTxt.setText("0 min");
 
-        int radiusCalls = model.width / 2 - 150;
-        int angle_part = 360 / mCall.getContacts().size();
-        double dX = 0;
-        double dY = 0;
+
 
         getBubbleFor(myself, model.width / 2, model.height / 2);
-        for (int i = 0; i < mCall.getContacts().size(); ++i) {
-            dX = Math.cos(Math.toRadians(angle_part * i)) * radiusCalls;
-            dY = Math.sin(Math.toRadians(angle_part * i)) * radiusCalls;
-            
-            getBubbleFor(mCall.getContacts().get(i),(int) (model.width / 2 + dX), (int) (model.height / 2 + dY));
-        }
+
+            getBubbleFor(mCall.getContact(), (int) (model.width / 2), (int) (model.height / 3));
+        
 
         model.clearAttractors();
         model.addAttractor(new Attractor(new PointF(model.width / 2, model.height * .8f), ATTRACTOR_SIZE, new Attractor.Callback() {
@@ -243,8 +237,8 @@
 
         callStatusTxt.setText("Incomming call");
 
-        Bubble contact_bubble = getBubbleFor(mCall.getContacts().get(0), model.width / 2, model.height / 2);
-        contacts.put(mCall.getContacts().get(0), contact_bubble);
+        Bubble contact_bubble = getBubbleFor(mCall.getContact(), model.width / 2, model.height / 2);
+        contacts.put(mCall.getContact(), contact_bubble);
 
         model.clearAttractors();
         model.addAttractor(new Attractor(new PointF(4 * model.width / 5, model.height / 2), ATTRACTOR_SIZE, new Attractor.Callback() {
@@ -270,9 +264,10 @@
         callStatusTxt.setText("Calling...");
 
         // TODO off-thread image loading
-        getBubbleFor(mCall.getContacts().get(0), model.width / 2, model.height / 3);
         getBubbleFor(myself, model.width / 2, model.height / 2);
 
+        getBubbleFor(mCall.getContact(), (int) (model.width / 2), (int) (model.height / 3 ));
+
         model.clearAttractors();
         model.addAttractor(new Attractor(new PointF(model.width / 2, model.height * .8f), 40, new Attractor.Callback() {
             @Override
diff --git a/src/com/savoirfairelinux/sflphone/fragments/CallListFragment.java b/src/com/savoirfairelinux/sflphone/fragments/CallListFragment.java
index f91c24d..68babaa 100644
--- a/src/com/savoirfairelinux/sflphone/fragments/CallListFragment.java
+++ b/src/com/savoirfairelinux/sflphone/fragments/CallListFragment.java
@@ -48,6 +48,7 @@
 import android.view.ViewGroup;
 import android.view.animation.Animation;
 import android.view.animation.AnimationUtils;
+import android.view.animation.RotateAnimation;
 import android.widget.BaseExpandableListAdapter;
 import android.widget.Button;
 import android.widget.ExpandableListView;
@@ -199,7 +200,7 @@
                 String to = data.getStringExtra("to_number");
                 transfer = data.getParcelableExtra("transfer");
                 try {
-                    Toast.makeText(getActivity(), "Transferring " + transfer.getContacts().get(0).getmDisplayName() + " to " + to, Toast.LENGTH_SHORT)
+                    Toast.makeText(getActivity(), "Transferring " + transfer.getContact().getmDisplayName() + " to " + to, Toast.LENGTH_SHORT)
                             .show();
                     mCallbacks.getService().transfer(transfer.getCallId(), to);
 
@@ -212,14 +213,19 @@
             default:
                 break;
             }
-        } else if(requestCode == REQUEST_CONF){
+        } else if (requestCode == REQUEST_CONF) {
             switch (resultCode) {
             case 0:
                 SipCall call1 = data.getParcelableExtra("call1");
                 SipCall call2 = data.getParcelableExtra("call2");
                 try {
 
-                    mCallbacks.getService().createConference(call1.getCallId(), call2.getCallId());
+                    mCallbacks.getService().joinParticipant(call1.getCallId(), call2.getCallId());
+
+                    // ArrayList<String> tmp = new ArrayList<String>();
+                    // tmp.add(call1.getCallId());
+                    // tmp.add(call2.getCallId());
+                    // mCallbacks.getService().createConfFromParticipantList(tmp);
 
                 } catch (RemoteException e) {
                     // TODO Auto-generated catch block
@@ -388,7 +394,7 @@
                 convertView = LayoutInflater.from(mContext).inflate(R.layout.item_calllist, null);
 
             SipCall call = getGroup(groupPosition);
-            ((TextView) convertView.findViewById(R.id.call_title)).setText(call.getContacts().get(0).getmDisplayName());
+            ((TextView) convertView.findViewById(R.id.call_title)).setText(call.getContact().getmDisplayName());
             ((TextView) convertView.findViewById(R.id.call_status)).setText("" + call.getCallStateString());
 
             ((RelativeLayout) convertView.findViewById(R.id.call_entry)).setOnClickListener(new OnClickListener() {
@@ -404,14 +410,17 @@
 
                 @Override
                 public void onClick(View v) {
-                    final Animation animRotate = AnimationUtils.loadAnimation(getActivity(), R.animator.anim_rotate);
+
                     if (isExpanded) {
                         list.collapseGroup(groupPosition);
-                        // ((ImageButton) v).startAnimation(animRotate);
+
+                        final Animation animRotate = AnimationUtils.loadAnimation(getActivity(), R.animator.reverse);
+                        ((ImageButton) v).startAnimation(animRotate);
                         ((ImageButton) v).setRotation(0);
                     } else {
                         list.expandGroup(groupPosition);
-                        // ((ImageButton) v).startAnimation(animRotate);
+                        final Animation animRotate = AnimationUtils.loadAnimation(getActivity(), R.animator.reverse);
+                        ((ImageButton) v).startAnimation(animRotate);
                         ((ImageButton) v).setRotation(180);
 
                     }
diff --git a/src/com/savoirfairelinux/sflphone/fragments/ConferenceDFragment.java b/src/com/savoirfairelinux/sflphone/fragments/ConferenceDFragment.java
index f8ba81d..9f0b4e5 100644
--- a/src/com/savoirfairelinux/sflphone/fragments/ConferenceDFragment.java
+++ b/src/com/savoirfairelinux/sflphone/fragments/ConferenceDFragment.java
@@ -87,7 +87,7 @@
 
         
 
-        final AlertDialog a = new AlertDialog.Builder(getActivity()).setView(rootView).setTitle("Transfer " + call_selected.getContacts().get(0))
+        final AlertDialog a = new AlertDialog.Builder(getActivity()).setView(rootView).setTitle("Transfer " + call_selected.getContact())
                 .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
                     public void onClick(DialogInterface dialog, int whichButton) {
 
@@ -147,7 +147,7 @@
                 tv = (TextView) mInflater.inflate(android.R.layout.simple_dropdown_item_1line, parent, false);
             }
 
-            tv.setText(calls.get(position).getContacts().get(0).getmDisplayName());
+            tv.setText(calls.get(position).getContact().getmDisplayName());
             return tv;
         }
 
diff --git a/src/com/savoirfairelinux/sflphone/fragments/ContactListFragment.java b/src/com/savoirfairelinux/sflphone/fragments/ContactListFragment.java
index 1f40bd9..8c356d0 100644
--- a/src/com/savoirfairelinux/sflphone/fragments/ContactListFragment.java
+++ b/src/com/savoirfairelinux/sflphone/fragments/ContactListFragment.java
@@ -301,17 +301,12 @@
     }
 
     public void setHandleView(RelativeLayout handle) {
-//        mHandle = handle;
-        
-
-
-        // ((ImageButton) handle.findViewById(R.id.contact_search)).setTag(R.id.contact_search, false);
-
         
         ((ImageButton)handle.findViewById(R.id.contact_search_button)).setOnClickListener(new OnClickListener() {
             
             @Override
             public void onClick(View v) {
+                Log.i(TAG,"onClick");
                 SearchView search = new SearchView(getActivity());
                 //Get the ID for the search bar LinearLayout
                 int searchBarId = search.getContext().getResources().getIdentifier("android:id/search_bar", null, null);
diff --git a/src/com/savoirfairelinux/sflphone/fragments/DialingFragment.java b/src/com/savoirfairelinux/sflphone/fragments/DialingFragment.java
index 73a4e76..dedf36f 100644
--- a/src/com/savoirfairelinux/sflphone/fragments/DialingFragment.java
+++ b/src/com/savoirfairelinux/sflphone/fragments/DialingFragment.java
@@ -31,51 +31,36 @@
 
 package com.savoirfairelinux.sflphone.fragments;
 
-import java.util.ArrayList;
-
 import android.app.Activity;
 import android.app.Fragment;
-import android.app.LoaderManager.LoaderCallbacks;
 import android.content.Context;
-import android.content.Intent;
-import android.content.Loader;
 import android.os.Bundle;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
 import android.view.inputmethod.EditorInfo;
 import android.view.inputmethod.InputMethodManager;
-import android.widget.AdapterView;
-import android.widget.AdapterView.OnItemSelectedListener;
 import android.widget.Button;
 import android.widget.ImageButton;
-import android.widget.RadioButton;
-import android.widget.Spinner;
 import android.widget.Toast;
 
 import com.savoirfairelinux.sflphone.R;
-import com.savoirfairelinux.sflphone.adapters.AccountSelectionAdapter;
-import com.savoirfairelinux.sflphone.loaders.AccountsLoader;
-import com.savoirfairelinux.sflphone.loaders.LoaderConstants;
-import com.savoirfairelinux.sflphone.model.Account;
 import com.savoirfairelinux.sflphone.service.ISipService;
 import com.savoirfairelinux.sflphone.views.ClearableEditText;
 
-public class DialingFragment extends Fragment implements LoaderCallbacks<ArrayList<Account>> {
+public class DialingFragment extends Fragment {
 
     private static final String TAG = DialingFragment.class.getSimpleName();
     public static final String ARG_SECTION_NUMBER = "section_number";
-    private boolean isReady;
-    private ISipService service;
+
 
     ClearableEditText textField;
     // private AccountSelectionSpinner mAccountSelectionSpinner;
 
-    AccountSelectionAdapter mAdapter;
+//    AccountSelectionAdapter mAdapter;
     private Callbacks mCallbacks = sDummyCallbacks;
-    private Spinner spinnerAccounts;
+//    private Spinner spinnerAccounts;
 
     
 
@@ -84,7 +69,7 @@
      */
     private static Callbacks sDummyCallbacks = new Callbacks() {
         @Override
-        public void onCallDialed(String account, String to) {
+        public void onCallDialed(String to) {
         }
 
         @Override
@@ -99,7 +84,7 @@
      * 
      */
     public interface Callbacks {
-        void onCallDialed(String account, String to);
+        void onCallDialed(String account);
 
         public ISipService getService();
 
@@ -133,42 +118,18 @@
     public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
         View inflatedView = inflater.inflate(R.layout.frag_dialing, parent, false);
 
-        spinnerAccounts = (Spinner) inflatedView.findViewById(R.id.account_selection);
-
-        spinnerAccounts.setOnItemSelectedListener(new OnItemSelectedListener() {
-
-            @Override
-            public void onItemSelected(AdapterView<?> arg0, View view, int pos, long arg3) {
-                // public void onClick(DialogInterface dialog, int which) {
-
-                Log.i(TAG, "Selected Account: " + mAdapter.getItem(pos));
-                if (null != view) {
-                    ((RadioButton) view.findViewById(R.id.account_checked)).toggle();
-                }
-                mAdapter.setSelectedAccount(pos);
-                // accountSelectedNotifyAccountList(mAdapter.getItem(pos));
-                // setSelection(cursor.getPosition(),true);
-
-            }
-
-            @Override
-            public void onNothingSelected(AdapterView<?> arg0) {
-                // TODO Auto-generated method stub
-
-            }
-        });
+        
 
         textField = (ClearableEditText) inflatedView.findViewById(R.id.textField);
         ((ImageButton) inflatedView.findViewById(R.id.buttonCall)).setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View v) {
 
-                Account account = mAdapter.getSelectedAccount();
                 String to = textField.getText().toString();
                 if (to.contentEquals("")) {
                     Toast.makeText(getActivity(), "Enter a number", Toast.LENGTH_LONG).show();
                 } else {
-                    mCallbacks.onCallDialed(account.getAccountID(), to);
+                    mCallbacks.onCallDialed(to);
                 }
             }
         });
@@ -193,18 +154,12 @@
             }
         });
 
-        isReady = true;
-
         return inflatedView;
     }
 
     @Override
     public void onResume() {
         super.onResume();
-        if (mCallbacks.getService() != null) {
-
-            onServiceSipBinded(mCallbacks.getService());
-        }
     }
 
     @Override
@@ -213,58 +168,4 @@
 
     }
 
-    public Account getSelectedAccount() {
-        return mAdapter.getSelectedAccount();
-    }
-
-    /**
-     * Called by activity to pass a reference to sipservice to Fragment.
-     * 
-     * @param isip
-     */
-    public void onServiceSipBinded(ISipService isip) {
-
-        if (isReady) {
-            service = isip;
-
-            mAdapter = new AccountSelectionAdapter(getActivity(), service, new ArrayList<Account>());
-            spinnerAccounts.setAdapter(mAdapter);
-            getActivity().getLoaderManager().initLoader(LoaderConstants.ACCOUNTS_LOADER, null, this);
-        }
-
-    }
-
-    @Override
-    public Loader<ArrayList<Account>> onCreateLoader(int id, Bundle args) {
-        AccountsLoader l = new AccountsLoader(getActivity(), service);
-        l.forceLoad();
-        return l;
-    }
-
-    @Override
-    public void onLoadFinished(Loader<ArrayList<Account>> loader, ArrayList<Account> results) {
-        mAdapter.removeAll();
-        mAdapter.addAll(results);
-
-    }
-
-    @Override
-    public void onLoaderReset(Loader<ArrayList<Account>> arg0) {
-        // TODO Auto-generated method stub
-
-    }
-
-    public void updateAllAccounts() {
-        if (getActivity() != null)
-            getActivity().getLoaderManager().restartLoader(LoaderConstants.ACCOUNTS_LOADER, null, this);
-
-    }
-
-    public void updateAccount(Intent accountState) {
-
-        if (mAdapter != null)
-            mAdapter.updateAccount(accountState);
-
-    }
-
 }
diff --git a/src/com/savoirfairelinux/sflphone/fragments/HistoryFragment.java b/src/com/savoirfairelinux/sflphone/fragments/HistoryFragment.java
index 1f494a4..e141b5b 100644
--- a/src/com/savoirfairelinux/sflphone/fragments/HistoryFragment.java
+++ b/src/com/savoirfairelinux/sflphone/fragments/HistoryFragment.java
@@ -68,7 +68,7 @@
      */
     private static Callbacks sDummyCallbacks = new Callbacks() {
         @Override
-        public void onCallDialed(String account, String to) {
+        public void onCallDialed(String to) {
         }
 
         @Override
@@ -80,7 +80,7 @@
     };
 
     public interface Callbacks {
-        public void onCallDialed(String account, String to);
+        public void onCallDialed(String to);
 
         public ISipService getService();
 
@@ -128,12 +128,10 @@
     public void onStart() {
         super.onStart();
         Log.w(TAG, "onStart");
-        getLoaderManager().restartLoader(LoaderConstants.HISTORY_LOADER, null, this);
-
     }
 
     public void makeNewCall(int position) {
-        mCallbacks.onCallDialed(String.valueOf(mAdapter.getItem(position).getAccountID()), mAdapter.getItem(position).getNumber());
+        mCallbacks.onCallDialed(mAdapter.getItem(position).getNumber());
     }
 
     @Override
diff --git a/src/com/savoirfairelinux/sflphone/fragments/HomeFragment.java b/src/com/savoirfairelinux/sflphone/fragments/HomeFragment.java
index 4f57d1c..dfc190e 100644
--- a/src/com/savoirfairelinux/sflphone/fragments/HomeFragment.java
+++ b/src/com/savoirfairelinux/sflphone/fragments/HomeFragment.java
@@ -30,14 +30,10 @@
  */
 package com.savoirfairelinux.sflphone.fragments;
 
-import java.util.ArrayList;
 import java.util.HashMap;
 
 import android.app.Activity;
-import android.app.AlertDialog;
 import android.app.Fragment;
-import android.content.Context;
-import android.content.DialogInterface;
 import android.os.Bundle;
 import android.os.RemoteException;
 import android.util.Log;
@@ -47,14 +43,10 @@
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
-import android.widget.AdapterView;
-import android.widget.AdapterView.OnItemLongClickListener;
 import android.widget.Button;
-import android.widget.ListView;
 import android.widget.Toast;
 
 import com.savoirfairelinux.sflphone.R;
-import com.savoirfairelinux.sflphone.adapters.CallElementAdapter;
 import com.savoirfairelinux.sflphone.model.SipCall;
 import com.savoirfairelinux.sflphone.service.ISipService;
 
@@ -63,7 +55,7 @@
  */
 public class HomeFragment extends Fragment {
     private static final String TAG = HomeFragment.class.getSimpleName();
-    private CallElementAdapter mAdapter;
+
 
 
     private Callbacks mCallbacks = sDummyCallbacks;
@@ -157,14 +149,6 @@
      * @Override public void run() { } }); } }
      */
 
-    public void addCall(SipCall c) {
-        // Log.i(TAG, "Adding call " + c.mCallInfo.mDisplayName);
-        if (mAdapter == null) {
-            Log.w(TAG, "mAdapter is null");
-            return;
-        }
-        mAdapter.add(c);
-    }
 
     // public void removeCall(SipCall c) {
     // Log.i(TAG, "Removing call " + c.mCallInfo.mDisplayName);
@@ -174,7 +158,7 @@
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        mAdapter = new CallElementAdapter(getActivity(), new ArrayList<SipCall>());
+//        mAdapter = new CallElementAdapter(getActivity(), new ArrayList<SipCall>());
         
     }
 
@@ -214,13 +198,7 @@
 //        return super.onOptionsItemSelected(item);
 //    }
 
-    public void updateCall(String iD, String newState) {
-        if (mAdapter == null) {
-            Log.w(TAG, "mAdapter is null");
-            return;
-        }
-        mAdapter.update(iD, newState);
-    }
+
 
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
diff --git a/src/com/savoirfairelinux/sflphone/fragments/MenuFragment.java b/src/com/savoirfairelinux/sflphone/fragments/MenuFragment.java
index 8a64d0b..10a8bce 100644
--- a/src/com/savoirfairelinux/sflphone/fragments/MenuFragment.java
+++ b/src/com/savoirfairelinux/sflphone/fragments/MenuFragment.java
@@ -30,42 +30,89 @@
  */
 package com.savoirfairelinux.sflphone.fragments;
 
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
+import java.util.ArrayList;
 
 import android.app.Activity;
 import android.app.Fragment;
+import android.app.LoaderManager.LoaderCallbacks;
 import android.content.Intent;
-import android.database.Cursor;
-import android.net.Uri;
+import android.content.IntentFilter;
+import android.content.Loader;
 import android.os.Bundle;
+import android.os.RemoteException;
 import android.provider.ContactsContract.Profile;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.AdapterView;
 import android.widget.AdapterView.OnItemClickListener;
+import android.widget.AdapterView.OnItemSelectedListener;
 import android.widget.ArrayAdapter;
-import android.widget.ImageView;
 import android.widget.ListView;
-import android.widget.TextView;
+import android.widget.RadioButton;
+import android.widget.Spinner;
 
 import com.savoirfairelinux.sflphone.R;
+import com.savoirfairelinux.sflphone.adapters.AccountSelectionAdapter;
 import com.savoirfairelinux.sflphone.adapters.MenuAdapter;
 import com.savoirfairelinux.sflphone.client.SFLPhoneHomeActivity;
 import com.savoirfairelinux.sflphone.client.SFLPhonePreferenceActivity;
+import com.savoirfairelinux.sflphone.interfaces.AccountsInterface;
+import com.savoirfairelinux.sflphone.loaders.AccountsLoader;
+import com.savoirfairelinux.sflphone.loaders.LoaderConstants;
+import com.savoirfairelinux.sflphone.model.Account;
+import com.savoirfairelinux.sflphone.receivers.AccountsReceiver;
+import com.savoirfairelinux.sflphone.service.CallManagerCallBack;
+import com.savoirfairelinux.sflphone.service.ConfigurationManagerCallback;
+import com.savoirfairelinux.sflphone.service.ISipService;
 
-public class MenuFragment extends Fragment {
+public class MenuFragment extends Fragment implements LoaderCallbacks<ArrayList<Account>>, AccountsInterface {
 
     private static final String TAG = MenuFragment.class.getSimpleName();
     public static final String ARG_SECTION_NUMBER = "section_number";
 
     MenuAdapter mAdapter;
     String[] mProjection = new String[] { Profile._ID, Profile.DISPLAY_NAME_PRIMARY, Profile.LOOKUP_KEY, Profile.PHOTO_THUMBNAIL_URI };
+    AccountSelectionAdapter mAccountAdapter;
+    private Spinner spinnerAccounts;
+    AccountsReceiver accountReceiver;
+
+    private Callbacks mCallbacks = sDummyCallbacks;
+    // private Spinner spinnerAccounts;
+
+    /**
+     * A dummy implementation of the {@link Callbacks} interface that does nothing. Used only when this fragment is not attached to an activity.
+     */
+    private static Callbacks sDummyCallbacks = new Callbacks() {
+
+        @Override
+        public ISipService getService() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+    };
+
+    /**
+     * The Activity calling this fragment has to implement this interface
+     * 
+     */
+    public interface Callbacks {
+
+        public ISipService getService();
+
+    }
 
     @Override
     public void onAttach(Activity activity) {
         super.onAttach(activity);
+        if (!(activity instanceof Callbacks)) {
+            throw new IllegalStateException("Activity must implement fragment's callbacks.");
+        }
+
+        mCallbacks = (Callbacks) activity;
+        getLoaderManager().initLoader(LoaderConstants.ACCOUNTS_LOADER, null, this);
+        
 
     }
 
@@ -79,6 +126,7 @@
         super.onCreate(savedInstanceState);
 
         mAdapter = new MenuAdapter(getActivity());
+        accountReceiver = new AccountsReceiver(this);
 
         String[] categories = getResources().getStringArray(R.array.menu_categories);
         ArrayAdapter<String> paramAdapter = new ArrayAdapter<String>(getActivity(), R.layout.item_menu, getResources().getStringArray(
@@ -92,6 +140,23 @@
 
     }
 
+    public void onResume() {
+        super.onResume();
+
+        IntentFilter intentFilter2 = new IntentFilter();
+        intentFilter2.addAction(ConfigurationManagerCallback.ACCOUNT_STATE_CHANGED);
+        intentFilter2.addAction(ConfigurationManagerCallback.ACCOUNTS_CHANGED);
+        getActivity().registerReceiver(accountReceiver, intentFilter2);
+
+    }
+
+    @Override
+    public void onPause() {
+        super.onPause();
+        getActivity().unregisterReceiver(accountReceiver);
+    }
+
+
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
         View inflatedView = inflater.inflate(R.layout.frag_menu, parent, false);
@@ -108,18 +173,44 @@
             }
         });
 
-        Cursor mProfileCursor = getActivity().getContentResolver().query(Profile.CONTENT_URI, mProjection, null, null, null);
+        spinnerAccounts = (Spinner) inflatedView.findViewById(R.id.account_selection);
+        mAccountAdapter = new AccountSelectionAdapter(getActivity(), mCallbacks.getService(), new ArrayList<Account>());
+        spinnerAccounts.setAdapter(mAccountAdapter);
+        spinnerAccounts.setOnItemSelectedListener(new OnItemSelectedListener() {
 
-        if (mProfileCursor.getCount() > 0) {
-            mProfileCursor.moveToFirst();
-            String photo_uri = mProfileCursor.getString(mProfileCursor.getColumnIndex(Profile.PHOTO_THUMBNAIL_URI));
-            if (photo_uri != null) {
-                ((ImageView) inflatedView.findViewById(R.id.user_photo)).setImageURI(Uri.parse(photo_uri));
+            @Override
+            public void onItemSelected(AdapterView<?> arg0, View view, int pos, long arg3) {
+                // public void onClick(DialogInterface dialog, int which) {
+
+                Log.i(TAG, "Selected Account: " + mAdapter.getItem(pos));
+                if (null != view) {
+                    ((RadioButton) view.findViewById(R.id.account_checked)).toggle();
+                }
+                mAccountAdapter.setSelectedAccount(pos);
+                // accountSelectedNotifyAccountList(mAdapter.getItem(pos));
+                // setSelection(cursor.getPosition(),true);
+
             }
-            ((TextView) inflatedView.findViewById(R.id.user_name)).setText(mProfileCursor.getString(mProfileCursor
-                    .getColumnIndex(Profile.DISPLAY_NAME_PRIMARY)));
-            mProfileCursor.close();
-        }
+
+            @Override
+            public void onNothingSelected(AdapterView<?> arg0) {
+                // TODO Auto-generated method stub
+
+            }
+        });
+
+        // Cursor mProfileCursor = getActivity().getContentResolver().query(Profile.CONTENT_URI, mProjection, null, null, null);
+        //
+        // if (mProfileCursor.getCount() > 0) {
+        // mProfileCursor.moveToFirst();
+        // String photo_uri = mProfileCursor.getString(mProfileCursor.getColumnIndex(Profile.PHOTO_THUMBNAIL_URI));
+        // if (photo_uri != null) {
+        // ((ImageView) inflatedView.findViewById(R.id.user_photo)).setImageURI(Uri.parse(photo_uri));
+        // }
+        // ((TextView) inflatedView.findViewById(R.id.user_name)).setText(mProfileCursor.getString(mProfileCursor
+        // .getColumnIndex(Profile.DISPLAY_NAME_PRIMARY)));
+        // mProfileCursor.close();
+        // }
         return inflatedView;
     }
 
@@ -129,4 +220,60 @@
 
     }
 
+    public Account getSelectedAccount() {
+        return mAccountAdapter.getSelectedAccount();
+    }
+
+    @Override
+    public Loader<ArrayList<Account>> onCreateLoader(int id, Bundle args) {
+        AccountsLoader l = new AccountsLoader(getActivity(), mCallbacks.getService());
+        l.forceLoad();
+        return l;
+    }
+
+    @Override
+    public void onLoadFinished(Loader<ArrayList<Account>> loader, ArrayList<Account> results) {
+        mAccountAdapter.removeAll();
+        mAccountAdapter.addAll(results);
+
+    }
+
+    @Override
+    public void onLoaderReset(Loader<ArrayList<Account>> arg0) {
+        // TODO Auto-generated method stub
+
+    }
+
+    /**
+     * Called by activity to pass a reference to sipservice to Fragment.
+     * 
+     * @param isip
+     */
+    public void onServiceSipBinded(ISipService isip) {
+
+    }
+
+    public void updateAllAccounts() {
+        if (getActivity() != null)
+            getActivity().getLoaderManager().restartLoader(LoaderConstants.ACCOUNTS_LOADER, null, this);
+
+    }
+
+    public void updateAccount(Intent accountState) {
+        if (mAccountAdapter != null)
+            mAccountAdapter.updateAccount(accountState);
+    }
+    
+  @Override
+  public void accountsChanged() {
+      updateAllAccounts();
+      
+  }
+
+  @Override
+  public void accountStateChanged(Intent accountState) {
+      updateAccount(accountState);
+      
+  }
+
 }
diff --git a/src/com/savoirfairelinux/sflphone/fragments/TransferDFragment.java b/src/com/savoirfairelinux/sflphone/fragments/TransferDFragment.java
index 18bc424..7e5a080 100644
--- a/src/com/savoirfairelinux/sflphone/fragments/TransferDFragment.java
+++ b/src/com/savoirfairelinux/sflphone/fragments/TransferDFragment.java
@@ -89,7 +89,7 @@
         mEditText.setAdapter(autoCompleteAdapter);
 
         final AlertDialog a = new AlertDialog.Builder(getActivity()).setView(rootView)
-                .setTitle("Transfer " + call_selected.getContacts().get(0))
+                .setTitle("Transfer " + call_selected.getContact())
                 .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                     public void onClick(DialogInterface dialog, int whichButton) {
                         
@@ -244,7 +244,7 @@
                 tv = (TextView) mInflater.inflate(android.R.layout.simple_dropdown_item_1line, parent, false);
             }
 
-            tv.setText(calls.get(position).getContacts().get(0).getmDisplayName());
+            tv.setText(calls.get(position).getContact().getmDisplayName());
             return tv;
         }
 
diff --git a/src/com/savoirfairelinux/sflphone/loaders/HistoryLoader.java b/src/com/savoirfairelinux/sflphone/loaders/HistoryLoader.java
index fea6fd3..8448d63 100644
--- a/src/com/savoirfairelinux/sflphone/loaders/HistoryLoader.java
+++ b/src/com/savoirfairelinux/sflphone/loaders/HistoryLoader.java
@@ -50,18 +50,12 @@
                 entry.get(ServiceConstants.HISTORY_ACCOUNT_ID_KEY);
                 long timestampEnd = Long.parseLong(entry.get(ServiceConstants.HISTORY_TIMESTAMP_STOP_KEY));
                 long timestampStart = Long.parseLong(entry.get(ServiceConstants.HISTORY_TIMESTAMP_START_KEY));
-
-                System.out.println("HISTORY_TIMESTAMP_START_KEY" + entry.get(ServiceConstants.HISTORY_TIMESTAMP_START_KEY));
-                System.out.println("HISTORY_INCOMING_STRING" + entry.get(ServiceConstants.HISTORY_INCOMING_STRING));
-                System.out.println("HISTORY_OUTGOING_STRING" + entry.get(ServiceConstants.HISTORY_OUTGOING_STRING));
-                System.out.println("HISTORY_MISSED_STRING" + entry.get(ServiceConstants.HISTORY_MISSED_STRING));
-                
-                System.out.println("HISTORY_STATE_KEY" + entry.get(ServiceConstants.HISTORY_STATE_KEY));
+                String call_state = entry.get(ServiceConstants.HISTORY_STATE_KEY);
 
                 String number_called = entry.get(ServiceConstants.HISTORY_PEER_NUMBER_KEY);
                 CallContact c = null;
                 if (historyEntries.containsKey(number_called)) {
-                    historyEntries.get(number_called).addHistoryCall(new HistoryCall(timestampStart, timestampEnd, number_called));
+                    historyEntries.get(number_called).addHistoryCall(new HistoryCall(timestampStart, timestampEnd, number_called, call_state));
                 } else {
 
                     Pattern p = Pattern.compile("<sip:([^@]+)@([^>]+)>");
@@ -82,13 +76,15 @@
                                     result.getLong(result.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_ID)));
                             builder.addPhoneNumber(number_called, 0);
                             c = builder.build();
+                        } else {
+                            c = ContactBuilder.buildUnknownContact(number_called);
                         }
                         result.close();
                     } else {
                         c = ContactBuilder.buildUnknownContact(number_called);
                     }
-                    HistoryEntry e = new HistoryEntry(entry.get(ServiceConstants.HISTORY_ACCOUNT_ID_KEY), c, timestampStart, timestampEnd,
-                            number_called);
+                    HistoryEntry e = new HistoryEntry(entry.get(ServiceConstants.HISTORY_ACCOUNT_ID_KEY), c);
+                    e.addHistoryCall(new HistoryCall(timestampStart, timestampEnd, number_called, call_state));
                     historyEntries.put(number_called, e);
                 }
 
diff --git a/src/com/savoirfairelinux/sflphone/model/BubbleModel.java b/src/com/savoirfairelinux/sflphone/model/BubbleModel.java
index 9feed1e..8650230 100644
--- a/src/com/savoirfairelinux/sflphone/model/BubbleModel.java
+++ b/src/com/savoirfairelinux/sflphone/model/BubbleModel.java
@@ -102,7 +102,9 @@
 				float attractor_dist = (attractor_pos.x-bx)*(attractor_pos.x-bx) + (attractor_pos.y-by)*(attractor_pos.x-by);
 
 				for(int j=0; j<attr_n; j++) {
+				    try{
 					Attractor t = attractors.get(j);
+				    
 					float dx = t.pos.x-bx, dy = t.pos.y-by;
 					float adist = dx*dx + dy*dy;
 					if(adist < attractor_dist) {
@@ -110,6 +112,9 @@
 						attractor_pos = t.pos;
 						attractor_dist = adist;
 					}
+				    } catch (IndexOutOfBoundsException e){
+                        // Try to update when layout was changing
+                    }
 				}
 
 				//float friction_coef = 1.f-FRICTION_VISCOUS*dt;
diff --git a/src/com/savoirfairelinux/sflphone/model/Conference.java b/src/com/savoirfairelinux/sflphone/model/Conference.java
new file mode 100644
index 0000000..f7578f7
--- /dev/null
+++ b/src/com/savoirfairelinux/sflphone/model/Conference.java
@@ -0,0 +1,31 @@
+package com.savoirfairelinux.sflphone.model;
+
+import java.util.ArrayList;
+
+public class Conference {
+    
+    private long id;
+    private String state;
+    private ArrayList<SipCall> participants;
+    
+    
+    public long getId() {
+        return id;
+    }
+    public void setId(long id) {
+        this.id = id;
+    }
+    public String getState() {
+        return state;
+    }
+    public void setState(String state) {
+        this.state = state;
+    }
+    public ArrayList<SipCall> getParticipants() {
+        return participants;
+    }
+    public void setParticipants(ArrayList<SipCall> participants) {
+        this.participants = participants;
+    }
+
+}
diff --git a/src/com/savoirfairelinux/sflphone/model/HistoryEntry.java b/src/com/savoirfairelinux/sflphone/model/HistoryEntry.java
index 640016c..8809e2e 100644
--- a/src/com/savoirfairelinux/sflphone/model/HistoryEntry.java
+++ b/src/com/savoirfairelinux/sflphone/model/HistoryEntry.java
@@ -8,12 +8,26 @@
 import java.util.TimeZone;
 import java.util.TreeMap;
 
+import com.savoirfairelinux.sflphone.service.ServiceConstants;
+
 public class HistoryEntry {
 
     private CallContact contact;
     private NavigableMap<Long, HistoryCall> calls;
     private String accountID;
+    int missed_sum;
+    int outgoing_sum;
+    int incoming_sum;
 
+
+
+    public HistoryEntry(String account, CallContact c) {
+        contact = c;
+        calls = new TreeMap<Long, HistoryEntry.HistoryCall>();
+        accountID = account;
+        missed_sum = outgoing_sum = incoming_sum = 0;
+    }
+    
     public String getAccountID() {
         return accountID;
     }
@@ -26,22 +40,21 @@
         return calls;
     }
 
-    public HistoryEntry(String account, CallContact c, long call_start, long call_end, String number) {
-        contact = c;
-        calls = new TreeMap<Long, HistoryEntry.HistoryCall>();
-        calls.put(call_start, new HistoryCall(call_start, call_end, number));
-        accountID = account;
-    }
-
     public static class HistoryCall {
         long call_start;
         long call_end;
         String number;
+        String state;
 
-        public HistoryCall(long start, long end, String n) {
+        public String getState() {
+            return state;
+        }
+
+        public HistoryCall(long start, long end, String n, String s) {
             call_start = start;
             call_end = end;
             number = n;
+            state = s;
         }
 
         public String getDate(String format) {
@@ -83,7 +96,13 @@
 
     public void addHistoryCall(HistoryCall historyCall) {
         calls.put(historyCall.call_start, historyCall);
-
+        if(historyCall.getState().contentEquals(ServiceConstants.HISTORY_MISSED_STRING)){
+            ++missed_sum;
+        } else if(historyCall.getState().contentEquals(ServiceConstants.HISTORY_INCOMING_STRING)){
+            ++incoming_sum;
+        } else {
+            ++outgoing_sum;
+        }
     }
 
     public String getNumber() {
@@ -102,4 +121,16 @@
 
         return duration / 60 + "min";
     }
+
+    public int getMissed_sum() {
+        return missed_sum;
+    }
+
+    public int getOutgoing_sum() {
+        return outgoing_sum;
+    }
+
+    public int getIncoming_sum() {
+        return incoming_sum;
+    }
 }
diff --git a/src/com/savoirfairelinux/sflphone/model/SipCall.java b/src/com/savoirfairelinux/sflphone/model/SipCall.java
index 62c719a..42014f2 100644
--- a/src/com/savoirfairelinux/sflphone/model/SipCall.java
+++ b/src/com/savoirfairelinux/sflphone/model/SipCall.java
@@ -33,25 +33,17 @@
 import java.util.ArrayList;
 import java.util.Random;
 
-import android.content.Intent;
-import android.os.Bundle;
-import android.os.Environment;
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.os.RemoteException;
 import android.util.Log;
 
-import com.savoirfairelinux.sflphone.model.Account.AccountBuilder;
-import com.savoirfairelinux.sflphone.model.CallContact.ContactBuilder;
-import com.savoirfairelinux.sflphone.service.ISipService;
-
 public class SipCall implements Parcelable {
 
     private static final String TAG = SipCall.class.getSimpleName();
 
     private String mCallID = "";
     private String mAccountID = "";
-    private ArrayList<CallContact> contacts = new ArrayList<CallContact>();
+    private CallContact contact = null;
 
     private int mCallType = state.CALL_TYPE_UNDETERMINED;
     private int mCallState = state.CALL_STATE_NONE;
@@ -73,7 +65,7 @@
         // mEmail = list.get(4);
         // mRemoteContact = list.get(5);
 
-        contacts = in.createTypedArrayList(CallContact.CREATOR);
+        contact = in.readParcelable(CallContact.class.getClassLoader());
 
         mCallType = in.readInt();
         mCallState = in.readInt();
@@ -84,13 +76,13 @@
 
     // }
 
-    public SipCall(String id, String account, int call_type, int call_state, int media_state, ArrayList<CallContact> c) {
+    public SipCall(String id, String account, int call_type, int call_state, int media_state, CallContact c) {
         mCallID = id;
         mAccountID = account;
         mCallType = call_type;
         mCallState = call_state;
         mMediaState = media_state;
-        this.contacts = new ArrayList<CallContact>(c);
+        contact = c;
     }
 
     // public SipCall() {
@@ -132,7 +124,7 @@
         list.add(mAccountID);
 
         out.writeStringList(list);
-        out.writeTypedList(contacts);
+        out.writeParcelable(contact, 0);
         out.writeInt(mCallType);
         out.writeInt(mCallState);
         out.writeInt(mMediaState);
@@ -207,12 +199,12 @@
         this.mAccountID = mAccountID;
     }
 
-    public ArrayList<CallContact> getContacts() {
-        return contacts;
+    public CallContact getContact() {
+        return contact;
     }
 
-    public void setContacts(ArrayList<CallContact> contacts) {
-        this.contacts = contacts;
+    public void setContact(CallContact contacts) {
+        contact = contacts;
     }
 
     public int getmCallType() {
@@ -279,7 +271,7 @@
 
         private String bCallID = "";
         private String bAccountID = "";
-        private ArrayList<CallContact> bContacts = new ArrayList<CallContact>();
+        private CallContact bContact = null;
 
         private int bCallType = state.CALL_TYPE_UNDETERMINED;
         private int bCallState = state.CALL_STATE_NONE;
@@ -304,7 +296,6 @@
 
         public SipCallBuilder startCallCreation(String id) {
             bCallID = id;
-            bContacts = new ArrayList<CallContact>();
             bCallType = SipCall.state.CALL_TYPE_INCOMING;
             return this;
         }
@@ -312,7 +303,6 @@
         public SipCallBuilder startCallCreation() {
             Random random = new Random();
             bCallID = Integer.toString(random.nextInt());
-            bContacts = new ArrayList<CallContact>();
             return this;
         }
 
@@ -322,16 +312,16 @@
             return this;
         }
 
-        public SipCallBuilder addContact(CallContact c) {
-            bContacts.add(c);
+        public SipCallBuilder setContact(CallContact c) {
+            bContact = c;
             return this;
         }
 
         public SipCall build() throws Exception {
-            if (bCallID.contentEquals("") || bAccountID.contentEquals("") || bContacts.size() == 0) {
+            if (bCallID.contentEquals("") || bAccountID.contentEquals("") || bContact == null) {
                 throw new Exception("SipCallBuilder's parameters missing");
             }
-            return new SipCall(bCallID, bAccountID, bCallType, bCallState, bMediaState, bContacts);
+            return new SipCall(bCallID, bAccountID, bCallType, bCallState, bMediaState, bContact);
         }
 
         public static SipCallBuilder getInstance() {
@@ -400,11 +390,12 @@
         } else {
             setCallState(SipCall.state.CALL_STATE_NONE);
         }
-        
+
     }
 
     public boolean isOngoing() {
-        if (mCallState == state.CALL_STATE_RINGING || mCallState == state.CALL_STATE_NONE || mCallState == state.CALL_STATE_FAILURE || mCallState == state.CALL_STATE_BUSY || mCallState == state.CALL_STATE_HUNGUP)
+        if (mCallState == state.CALL_STATE_RINGING || mCallState == state.CALL_STATE_NONE || mCallState == state.CALL_STATE_FAILURE
+                || mCallState == state.CALL_STATE_BUSY || mCallState == state.CALL_STATE_HUNGUP)
             return false;
 
         return true;
diff --git a/src/com/savoirfairelinux/sflphone/receivers/IncomingReceiver.java b/src/com/savoirfairelinux/sflphone/receivers/IncomingReceiver.java
index 94216ab..e3ac34f 100644
--- a/src/com/savoirfairelinux/sflphone/receivers/IncomingReceiver.java
+++ b/src/com/savoirfairelinux/sflphone/receivers/IncomingReceiver.java
@@ -42,7 +42,7 @@
             SipCall.SipCallBuilder callBuilder = SipCall.SipCallBuilder.getInstance();
             callBuilder.startCallCreation(b.getString("CallID")).setAccountID(b.getString("AccountID"))
                     .setCallState(SipCall.state.CALL_STATE_RINGING).setCallType(SipCall.state.CALL_TYPE_INCOMING);
-            callBuilder.addContact(CallContact.ContactBuilder.buildUnknownContact(b.getString("From")));
+            callBuilder.setContact(CallContact.ContactBuilder.buildUnknownContact(b.getString("From")));
 
             Intent toSend = new Intent(CallManagerCallBack.INCOMING_CALL);
             try {
diff --git a/src/com/savoirfairelinux/sflphone/service/CallManagerCallBack.java b/src/com/savoirfairelinux/sflphone/service/CallManagerCallBack.java
index ab92b6b..b1a7d81 100644
--- a/src/com/savoirfairelinux/sflphone/service/CallManagerCallBack.java
+++ b/src/com/savoirfairelinux/sflphone/service/CallManagerCallBack.java
@@ -15,6 +15,8 @@
     static public final String CALL_STATE_CHANGED = "call-state-changed";
     static public final String INCOMING_CALL = "incoming-call";
     static public final String INCOMING_TEXT = "incoming-text";
+    static public final String CONF_CREATED = "conf_created";
+
 
     public CallManagerCallBack(Context context) {
         mContext = context;
@@ -46,6 +48,11 @@
     @Override
     public void on_conference_created(String confID){
         Log.w(TAG,"CONFERENCE CREATED:"+confID);
+        Bundle bundle = new Bundle();
+        bundle.putString("confID", confID);
+        Intent intent = new Intent(NEW_CALL_CREATED);
+        intent.putExtra("com.savoirfairelinux.sflphone.service.newcall", bundle);
+        LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent);
     }
     
     @Override
diff --git a/src/com/savoirfairelinux/sflphone/service/ConfigurationManagerJNI.java b/src/com/savoirfairelinux/sflphone/service/ConfigurationManagerJNI.java
index 9521c21..78fee6d 100644
--- a/src/com/savoirfairelinux/sflphone/service/ConfigurationManagerJNI.java
+++ b/src/com/savoirfairelinux/sflphone/service/ConfigurationManagerJNI.java
@@ -83,10 +83,6 @@
     return new StringVect(SFLPhoneserviceJNI.ConfigurationManagerJNI_getAccountList(swigCPtr, this), true);
   }
 
-  public IntVect getAudioCodecList() {
-    return new IntVect(SFLPhoneserviceJNI.ConfigurationManagerJNI_getAudioCodecList(swigCPtr, this), true);
-  }
-
   public StringVect getSupportedTlsMethod() {
     return new StringVect(SFLPhoneserviceJNI.ConfigurationManagerJNI_getSupportedTlsMethod(swigCPtr, this), true);
   }
@@ -163,22 +159,6 @@
     SFLPhoneserviceJNI.ConfigurationManagerJNI_setEchoCancelState(swigCPtr, this, state);
   }
 
-  public int getEchoCancelTailLength() {
-    return SFLPhoneserviceJNI.ConfigurationManagerJNI_getEchoCancelTailLength(swigCPtr, this);
-  }
-
-  public void setEchoCancelTailLength(int length) {
-    SFLPhoneserviceJNI.ConfigurationManagerJNI_setEchoCancelTailLength(swigCPtr, this, length);
-  }
-
-  public int getEchoCancelDelay() {
-    return SFLPhoneserviceJNI.ConfigurationManagerJNI_getEchoCancelDelay(swigCPtr, this);
-  }
-
-  public void setEchoCancelDelay(int delay) {
-    SFLPhoneserviceJNI.ConfigurationManagerJNI_setEchoCancelDelay(swigCPtr, this, delay);
-  }
-
   public int isIax2Enabled() {
     return SFLPhoneserviceJNI.ConfigurationManagerJNI_isIax2Enabled(swigCPtr, this);
   }
diff --git a/src/com/savoirfairelinux/sflphone/service/ISipService.aidl b/src/com/savoirfairelinux/sflphone/service/ISipService.aidl
index bfcfeb5..7d1e842 100644
--- a/src/com/savoirfairelinux/sflphone/service/ISipService.aidl
+++ b/src/com/savoirfairelinux/sflphone/service/ISipService.aidl
@@ -40,10 +40,10 @@
     void attendedTransfer(in String transferID, in String targetID);
     
     /* Conference related methods */
-    void createConference(in String call1, in String call2);
+
     void removeConference(in String confID);
     void joinParticipant(in String sel_callID, in String drag_callID);
-    void createConfFromParticipantList(in List participants);
+
     void addParticipant(in String callID, in String confID);
     void addMainParticipant(in String confID);
     void detachParticipant(in String callID);
diff --git a/src/com/savoirfairelinux/sflphone/service/ServiceConstants.java b/src/com/savoirfairelinux/sflphone/service/ServiceConstants.java
index 271ecb2..7e82a0c 100644
--- a/src/com/savoirfairelinux/sflphone/service/ServiceConstants.java
+++ b/src/com/savoirfairelinux/sflphone/service/ServiceConstants.java
@@ -82,6 +82,7 @@
     public static final String HISTORY_TIMESTAMP_STOP_KEY =    "timestamp_stop";
     public static final String HISTORY_AUDIO_CODEC_KEY =       "audio_codec";
     public static final String HISTORY_VIDEO_CODEC_KEY =       "video_codec";
+    
     public static final String HISTORY_MISSED_STRING =         "missed";
     public static final String HISTORY_INCOMING_STRING =       "incoming";
     public static final String HISTORY_OUTGOING_STRING =       "outgoing";
diff --git a/src/com/savoirfairelinux/sflphone/service/SipService.java b/src/com/savoirfairelinux/sflphone/service/SipService.java
index 51c823b..1fe89c0 100644
--- a/src/com/savoirfairelinux/sflphone/service/SipService.java
+++ b/src/com/savoirfairelinux/sflphone/service/SipService.java
@@ -126,7 +126,7 @@
             Toast.makeText(this, "Sflphone Service started", Toast.LENGTH_SHORT).show();
         }
 
-        return START_STICKY; /* started and stopped explicitly */
+        return START_NOT_STICKY; /* started and stopped explicitly */
     }
 
     @Override
@@ -345,7 +345,7 @@
                 @Override
                 protected void doRun() throws SameThreadException {
                     Log.i(TAG, "SipService.placeCall() thread running...");
-                    callManagerJNI.placeCall(call.getAccountID(), call.getCallId(), call.getContacts().get(0).getPhones().get(0).getNumber());
+                    callManagerJNI.placeCall(call.getAccountID(), call.getCallId(), call.getContact().getPhones().get(0).getNumber());
                     getCurrent_calls().put(call.getCallId(), call);
                 }
             });
@@ -668,17 +668,6 @@
 
         }
 
-        @Override
-        public void createConfFromParticipantList(final List participants) throws RemoteException {
-            getExecutor().execute(new SipRunnable() {
-                @Override
-                protected void doRun() throws SameThreadException, RemoteException {
-                    Log.i(TAG, "SipService.createConfFromParticipantList() thread running...");
-                    // callManagerJNI.createConfFromParticipantList(participants);
-                }
-            });
-
-        }
 
         @Override
         public void addParticipant(final String callID, final String confID) throws RemoteException {
@@ -790,31 +779,59 @@
         }
 
         @Override
-        public List getParticipantList(String confID) throws RemoteException {
-            Log.e(TAG, "getConferenceList not implemented");
-            return null;
+        public List getParticipantList(final String confID) throws RemoteException {
+            class PartList extends SipRunnableWithReturn {
+                @Override
+                protected StringVect doRun() throws SameThreadException {
+                    Log.i(TAG, "SipService.getAccountList() thread running...");
+                    return callManagerJNI.getParticipantList(confID);
+                }
+            }
+            ;
+            PartList runInstance = new PartList();
+            getExecutor().execute(runInstance);
+            while (!runInstance.isDone()) {
+                // Log.w(TAG, "Waiting for getConferenceList");
+            }
+            StringVect swigvect = (StringVect) runInstance.getVal();
+
+            ArrayList<String> nativelist = new ArrayList<String>();
+
+            for (int i = 0; i < swigvect.size(); i++)
+                nativelist.add(swigvect.get(i));
+
+            return nativelist;
         }
         
         @Override
-        public void createConference(final String call1, final String call2) throws RemoteException {
-            getExecutor().execute(new SipRunnable() {
-                @Override
-                protected void doRun() throws SameThreadException, RemoteException {
-                    Log.i(TAG, "SipService.createConference() thread running...");
-                    callManagerJNI.createConference(call1, call2);
-                }
-            });
-        }
-
-        @Override
         public String getConferenceId(String callID) throws RemoteException {
             Log.e(TAG, "getConferenceList not implemented");
             return null;
         }
 
         @Override
-        public Map getConferenceDetails(String callID) throws RemoteException {
-            Log.e(TAG, "getConferenceList not implemented");
+        public Map getConferenceDetails(final String callID) throws RemoteException {
+//            class ConfDetails extends SipRunnableWithReturn {
+//                @Override
+//                protected StringMap doRun() throws SameThreadException {
+//                    Log.i(TAG, "SipService.getAccountList() thread running...");
+//                    return callManagerJNI.getConferenceDetails(callID);
+//                }
+//            }
+//            ;
+//            ConfDetails runInstance = new ConfDetails();
+//            getExecutor().execute(runInstance);
+//            while (!runInstance.isDone()) {
+//                // Log.w(TAG, "Waiting for getConferenceList");
+//            }
+//            StringMap swigvect = (StringMap) runInstance.getVal();
+//
+//            HashMap<String,String> nativelist = new HashMap<String,String>();
+//
+//            for (int i = 0; i < swigvect.size(); i++)
+//                nativelist.put(swigvect.);
+//
+//            return nativelist;
             return null;
         }
 
@@ -876,25 +893,26 @@
 
         @Override
         public List getAudioCodecList(String accountID) throws RemoteException {
-            class AudioCodecList extends SipRunnableWithReturn {
-
-                @Override
-                protected IntVect doRun() throws SameThreadException {
-                    Log.i(TAG, "SipService.getAudioCodecList() thread running...");
-                    return configurationManagerJNI.getAudioCodecList();
-                }
-            }
-
-            AudioCodecList runInstance = new AudioCodecList();
-            getExecutor().execute(runInstance);
-            while (!runInstance.isDone()) {
-                Log.w(TAG, "Waiting for getAudioCodecList");
-            }
-            IntVect swigmap = (IntVect) runInstance.getVal();
-
-            ArrayList<Integer> codecs = AudioHandler.convertSwigToNative(swigmap);
-
-            return codecs;
+//            class AudioCodecList extends SipRunnableWithReturn {
+//
+//                @Override
+//                protected IntVect doRun() throws SameThreadException {
+//                    Log.i(TAG, "SipService.getAudioCodecList() thread running...");
+//                    return configurationManagerJNI.getAudioCodecList();
+//                }
+//            }
+//
+//            AudioCodecList runInstance = new AudioCodecList();
+//            getExecutor().execute(runInstance);
+//            while (!runInstance.isDone()) {
+//                Log.w(TAG, "Waiting for getAudioCodecList");
+//            }
+//            IntVect swigmap = (IntVect) runInstance.getVal();
+//
+//            ArrayList<Integer> codecs = AudioHandler.convertSwigToNative(swigmap);
+//
+//            return codecs;
+            return null;
         }
 
         @Override
diff --git a/src/com/savoirfairelinux/sflphone/views/CustomSlidingDrawer.java b/src/com/savoirfairelinux/sflphone/views/CustomSlidingDrawer.java
index 972cc7a..7b9eb6e 100644
--- a/src/com/savoirfairelinux/sflphone/views/CustomSlidingDrawer.java
+++ b/src/com/savoirfairelinux/sflphone/views/CustomSlidingDrawer.java
@@ -22,21 +22,16 @@
 import com.savoirfairelinux.sflphone.R;
 
 /**
- * SlidingDrawer hides content out of the screen and allows the user to drag a
- * handle to bring the content on screen. SlidingDrawer can be used vertically
- * or horizontally.
+ * SlidingDrawer hides content out of the screen and allows the user to drag a handle to bring the content on screen. SlidingDrawer can be used
+ * vertically or horizontally.
  * 
- * A special widget composed of two children views: the handle, that the users
- * drags, and the content, attached to the handle and dragged with it.
+ * A special widget composed of two children views: the handle, that the users drags, and the content, attached to the handle and dragged with it.
  * 
- * SlidingDrawer should be used as an overlay inside layouts. This means
- * SlidingDrawer should only be used inside of a FrameLayout or a RelativeLayout
- * for instance. The size of the SlidingDrawer defines how much space the
- * content will occupy once slid out so SlidingDrawer should usually use
+ * SlidingDrawer should be used as an overlay inside layouts. This means SlidingDrawer should only be used inside of a FrameLayout or a RelativeLayout
+ * for instance. The size of the SlidingDrawer defines how much space the content will occupy once slid out so SlidingDrawer should usually use
  * match_parent for both its dimensions.
  * 
- * Inside an XML layout, SlidingDrawer must define the id of the handle and of
- * the content:
+ * Inside an XML layout, SlidingDrawer must define the id of the handle and of the content:
  * 
  * <pre class="prettyprint">
  * &lt;SlidingDrawer
@@ -166,8 +161,7 @@
     }
 
     /**
-     * Creates a new SlidingDrawer from a specified set of attributes defined in
-     * XML.
+     * Creates a new SlidingDrawer from a specified set of attributes defined in XML.
      * 
      * @param context
      *            The application's environment.
@@ -179,8 +173,7 @@
     }
 
     /**
-     * Creates a new SlidingDrawer from a specified set of attributes defined in
-     * XML.
+     * Creates a new SlidingDrawer from a specified set of attributes defined in XML.
      * 
      * @param context
      *            The application's environment.
@@ -262,10 +255,12 @@
 
         if (mVertical) {
             int height = heightSpecSize - handle.getMeasuredHeight() - mTopOffset;
-            mContent.measure(MeasureSpec.makeMeasureSpec(widthSpecSize, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
+            mContent.measure(MeasureSpec.makeMeasureSpec(widthSpecSize, MeasureSpec.EXACTLY),
+                    MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
         } else {
             int width = widthSpecSize - handle.getMeasuredWidth() - mTopOffset;
-            mContent.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(heightSpecSize, MeasureSpec.EXACTLY));
+            mContent.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
+                    MeasureSpec.makeMeasureSpec(heightSpecSize, MeasureSpec.EXACTLY));
         }
 
         setMeasuredDimension(widthSpecSize, heightSpecSize);
@@ -337,6 +332,7 @@
     @Override
     public boolean onInterceptTouchEvent(MotionEvent event) {
 
+        Log.i(TAG, "onInterceptTouchEvent");
         if (mLocked) {
             Log.i(TAG, "Locked");
             return false;
@@ -349,22 +345,26 @@
 
         final Rect frame = mFrame;
         final View handle = mHandle;
+        
+        
 
         // New code
         View trackHandle = mTrackHandle;
+        
         // set the rect frame to the mTrackHandle view borders instead of the
         // hole handle view
-        
+
         Resources r = getResources();
         int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50, r.getDisplayMetrics());
 
         // getParent() => The right and left are valid, but we need to get the
         // parent top and bottom to have absolute values (in screen)
-        frame.set(trackHandle.getLeft(), ((ViewGroup) trackHandle.getParent()).getTop(), trackHandle.getRight() - px, ((ViewGroup) trackHandle.getParent()).getBottom());
+        frame.set(trackHandle.getLeft(), ((ViewGroup) trackHandle.getParent()).getTop(), trackHandle.getRight() - px,
+                ((ViewGroup) trackHandle.getParent()).getBottom());
 
-//      handle.getHitRect(frame);
+        // handle.getHitRect(frame);
         if (!mTracking && !frame.contains((int) x, (int) y)) {
-//            Log.i(TAG, "not tracking and not in frame");
+            Log.i(TAG, "not tracking and not in frame");
             return false;
         }
 
@@ -390,9 +390,10 @@
                 prepareTracking(left);
             }
             mVelocityTracker.addMovement(event);
+            return true;
         }
+        return false;
 
-        return true;
     }
 
     @Override
@@ -401,6 +402,7 @@
             return true;
         }
 
+        Log.i(TAG, "onTouchEvent");
         if (mTracking) {
             mVelocityTracker.addMovement(event);
             final int action = event.getAction();
@@ -445,8 +447,10 @@
                 final int left = mHandle.getLeft();
 
                 if (Math.abs(velocity) < mMaximumTapVelocity) {
-                    if (vertical ? (mExpanded && top < mTapThreshold + mTopOffset) || (!mExpanded && top > mBottomOffset + getBottom() - getTop() - mHandleHeight - mTapThreshold) : (mExpanded && left < mTapThreshold + mTopOffset)
-                            || (!mExpanded && left > mBottomOffset + getRight() - getLeft() - mHandleWidth - mTapThreshold)) {
+                    if (vertical ? (mExpanded && top < mTapThreshold + mTopOffset)
+                            || (!mExpanded && top > mBottomOffset + getBottom() - getTop() - mHandleHeight - mTapThreshold)
+                            : (mExpanded && left < mTapThreshold + mTopOffset)
+                                    || (!mExpanded && left > mBottomOffset + getRight() - getLeft() - mHandleWidth - mTapThreshold)) {
 
                         if (mAllowSingleTap) {
                             playSoundEffect(SoundEffectConstants.CLICK);
@@ -489,7 +493,8 @@
         mAnimatedVelocity = velocity;
 
         if (mExpanded) {
-            if (always || (velocity > mMaximumMajorVelocity || (position > mTopOffset + (mVertical ? mHandleHeight : mHandleWidth) && velocity > -mMaximumMajorVelocity))) {
+            if (always
+                    || (velocity > mMaximumMajorVelocity || (position > mTopOffset + (mVertical ? mHandleHeight : mHandleWidth) && velocity > -mMaximumMajorVelocity))) {
                 // We are expanded, but they didn't move sufficiently to cause
                 // us to retract. Animate back to the expanded position.
                 mAnimatedAcceleration = mMaximumAcceleration;
@@ -504,7 +509,8 @@
                 }
             }
         } else {
-            if (!always && (velocity > mMaximumMajorVelocity || (position > (mVertical ? getHeight() : getWidth()) / 2 && velocity > -mMaximumMajorVelocity))) {
+            if (!always
+                    && (velocity > mMaximumMajorVelocity || (position > (mVertical ? getHeight() : getWidth()) / 2 && velocity > -mMaximumMajorVelocity))) {
                 // We are collapsed, and they moved enough to allow us to
                 // expand.
                 mAnimatedAcceleration = mMaximumAcceleration;
@@ -628,12 +634,14 @@
             if (mVertical) {
                 final int childHeight = mHandleHeight;
                 int height = getBottom() - getTop() - childHeight - mTopOffset;
-                content.measure(MeasureSpec.makeMeasureSpec(getRight() - getLeft(), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
+                content.measure(MeasureSpec.makeMeasureSpec(getRight() - getLeft(), MeasureSpec.EXACTLY),
+                        MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
                 content.layout(0, mTopOffset + childHeight, content.getMeasuredWidth(), mTopOffset + childHeight + content.getMeasuredHeight());
             } else {
                 final int childWidth = mHandle.getWidth();
                 int width = getRight() - getLeft() - childWidth - mTopOffset;
-                content.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(getBottom() - getTop(), MeasureSpec.EXACTLY));
+                content.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
+                        MeasureSpec.makeMeasureSpec(getBottom() - getTop(), MeasureSpec.EXACTLY));
                 content.layout(childWidth + mTopOffset, 0, mTopOffset + childWidth + content.getMeasuredWidth(), content.getMeasuredHeight());
             }
         }
@@ -783,7 +791,7 @@
      * @see #toggle()
      */
     public void animateOpen() {
-        
+
         if (mExpanded) {
             return;
         }
@@ -845,8 +853,7 @@
     }
 
     /**
-     * Sets the listener that receives a notification when the drawer becomes
-     * open.
+     * Sets the listener that receives a notification when the drawer becomes open.
      * 
      * @param onDrawerOpenListener
      *            The listener to be notified when the drawer is opened.
@@ -856,8 +863,7 @@
     }
 
     /**
-     * Sets the listener that receives a notification when the drawer becomes
-     * close.
+     * Sets the listener that receives a notification when the drawer becomes close.
      * 
      * @param onDrawerCloseListener
      *            The listener to be notified when the drawer is closed.
@@ -867,8 +873,7 @@
     }
 
     /**
-     * Sets the listener that receives a notification when the drawer starts or
-     * ends a scroll. A fling is considered as a scroll. A fling will also
+     * Sets the listener that receives a notification when the drawer starts or ends a scroll. A fling is considered as a scroll. A fling will also
      * trigger a drawer opened or drawer closed event.
      * 
      * @param onDrawerScrollListener
@@ -881,8 +886,7 @@
     /**
      * Returns the handle of the drawer.
      * 
-     * @return The View reprenseting the handle of the drawer, identified by the
-     *         "handle" id in XML.
+     * @return The View reprenseting the handle of the drawer, identified by the "handle" id in XML.
      */
     public View getHandle() {
         return mHandle;
@@ -891,8 +895,7 @@
     /**
      * Returns the content of the drawer.
      * 
-     * @return The View reprenseting the content of the drawer, identified by
-     *         the "content" id in XML.
+     * @return The View reprenseting the content of the drawer, identified by the "content" id in XML.
      */
     public View getContent() {
         return mContent;