diff --git a/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java b/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java
index a56f098..faf8f72 100644
--- a/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java
+++ b/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java
@@ -57,8 +57,6 @@
 
 import com.savoirfairelinux.sflphone.R;
 import com.savoirfairelinux.sflphone.service.ISipService;
-import com.savoirfairelinux.sflphone.service.SipService;
-import com.savoirfairelinux.sflphone.service.ServiceConstants;
 import com.savoirfairelinux.sflphone.utils.AccountDetail;
 import com.savoirfairelinux.sflphone.utils.AccountDetailsHandler;
 import com.savoirfairelinux.sflphone.utils.AccountDetailBasic;
@@ -73,6 +71,7 @@
     static final String DEFAULT_ACCOUNT_ID = "IP2IP";
     static final int ACCOUNT_CREATE_REQUEST = 1;
     static final int ACCOUNT_EDIT_REQUEST = 2;
+    private SFLPhonePreferenceActivity sflphonePreferenceActivity;
     private ISipService service;
 
     ArrayList<AccountDetail.PreferenceEntry> basicDetailKeys = null;
@@ -82,12 +81,16 @@
     HashMap<String, Preference> accountPreferenceHashMap = null;
     PreferenceScreen mRoot = null;
 
-    Activity context = getActivity();
+    @Override
+    public void onAttach(Activity activity) {
+        super.onAttach(activity);
+        sflphonePreferenceActivity = (SFLPhonePreferenceActivity) activity;
+        service = sflphonePreferenceActivity.getSipService();
+        Log.i(TAG, "onAttach() service " + service);
+    }
 
-    public AccountManagementFragment(ISipService s)
+    public AccountManagementFragment()
     {
-        service = s;
-
         basicDetailKeys =  AccountDetailBasic.getPreferenceEntries();
         advancedDetailKeys = AccountDetailAdvanced.getPreferenceEntries();
         srtpDetailKeys = AccountDetailSrtp.getPreferenceEntries();
diff --git a/src/com/savoirfairelinux/sflphone/client/AccountPreferenceActivity.java b/src/com/savoirfairelinux/sflphone/client/AccountPreferenceActivity.java
index a9f15ef..5c105e0 100644
--- a/src/com/savoirfairelinux/sflphone/client/AccountPreferenceActivity.java
+++ b/src/com/savoirfairelinux/sflphone/client/AccountPreferenceActivity.java
@@ -37,7 +37,6 @@
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.DialogInterface;
-import android.content.ServiceConnection;
 import android.content.Intent;
 import android.os.Bundle;
 import android.os.IBinder;
diff --git a/src/com/savoirfairelinux/sflphone/client/CallElementList.java b/src/com/savoirfairelinux/sflphone/client/CallElementList.java
index 687059e..336bd33 100644
--- a/src/com/savoirfairelinux/sflphone/client/CallElementList.java
+++ b/src/com/savoirfairelinux/sflphone/client/CallElementList.java
@@ -36,6 +36,7 @@
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
+import android.app.Activity;
 import android.app.ListFragment;
 import android.app.LoaderManager;
 import android.app.AlertDialog;
@@ -91,6 +92,14 @@
     static final String[] CONTACTS_PHONES_PROJECTION = new String[] { Phone.NUMBER, Phone.TYPE };
     static final String[] CONTACTS_SIP_PROJECTION = new String[] { SipAddress.SIP_ADDRESS, SipAddress.TYPE };
 
+    @Override
+    public void onAttach(Activity activity) {
+        super.onAttach(activity);
+        sflphoneHome = (SFLPhoneHome) activity;
+        service = ((SFLphoneApplication) sflphoneHome.getApplication()).getSipService();
+        Log.i(TAG, "onAttach() service " + service);
+    }
+
     public String getSelectedAccount() {
         return mAccountSelectionButton.getText().toString();
     }
@@ -238,16 +247,9 @@
         protected TextView state;
     }
 
-    public CallElementList(ISipService s, SFLPhoneHome home)
+    public CallElementList()
     {
         super();
-        service = s;
-        sflphoneHome = home;
-    }
-
-    public void setService(ISipService s)
-    {
-        service = s;
     }
 
     public void setAccountList(AccountList accountList) {
diff --git a/src/com/savoirfairelinux/sflphone/client/ContactListFragment.java b/src/com/savoirfairelinux/sflphone/client/ContactListFragment.java
index 0996cb2..70e1c43 100644
--- a/src/com/savoirfairelinux/sflphone/client/ContactListFragment.java
+++ b/src/com/savoirfairelinux/sflphone/client/ContactListFragment.java
@@ -30,6 +30,7 @@
  */
 package com.savoirfairelinux.sflphone.client;
 
+import android.app.Activity;
 import android.app.ListFragment;
 import android.app.LoaderManager;
 import android.app.AlertDialog;
@@ -87,6 +88,7 @@
     ContactElementAdapter mAdapter;
     Context mContext;
     String mCurFilter;
+    private SFLPhoneHome sflphoneHome;
     private ISipService service;
     private AccountSelectionButton mAccountSelectionButton;
     private AccountList mAccountList;
@@ -97,6 +99,14 @@
     static final String[] CONTACTS_PHONES_PROJECTION = new String[] { Phone.NUMBER, Phone.TYPE };
     static final String[] CONTACTS_SIP_PROJECTION = new String[] { SipAddress.SIP_ADDRESS, SipAddress.TYPE };
 
+    @Override
+    public void onAttach(Activity activity) {
+        super.onAttach(activity);
+        sflphoneHome = (SFLPhoneHome) activity;
+        service = ((SFLphoneApplication) sflphoneHome.getApplication()).getSipService();
+        Log.i(TAG, "onAttach() service " + service);
+    }
+
     public static class InfosLoader implements Runnable
     {
         private View view;
@@ -185,15 +195,9 @@
         }
     };
 
-    public ContactListFragment(ISipService s)
+    public ContactListFragment()
     {
         super();
-        service = s;
-    }
-
-    public void setService(ISipService s)
-    {
-        service = s;
     }
 
     public void setAccountList(AccountList accountList) {
diff --git a/src/com/savoirfairelinux/sflphone/client/PrefManagementFragment.java b/src/com/savoirfairelinux/sflphone/client/PrefManagementFragment.java
index f5326f9..d1f8697 100644
--- a/src/com/savoirfairelinux/sflphone/client/PrefManagementFragment.java
+++ b/src/com/savoirfairelinux/sflphone/client/PrefManagementFragment.java
@@ -52,17 +52,14 @@
 import android.widget.TextView;
 
 import com.savoirfairelinux.sflphone.R;
-import com.savoirfairelinux.sflphone.service.ISipService;
 
 public class PrefManagementFragment extends PreferenceFragment
 {
     static final String TAG = "PrefManagementFragment";
     static final String CURRENT_VALUE = "Current value:: "; 
-    private ISipService service;
 
-    public PrefManagementFragment(ISipService s)
+    public PrefManagementFragment()
     {
-        service = s;
     }
 
     @Override
diff --git a/src/com/savoirfairelinux/sflphone/client/SFLPhoneHome.java b/src/com/savoirfairelinux/sflphone/client/SFLPhoneHome.java
index 8de08a2..ac3e938 100644
--- a/src/com/savoirfairelinux/sflphone/client/SFLPhoneHome.java
+++ b/src/com/savoirfairelinux/sflphone/client/SFLPhoneHome.java
@@ -82,7 +82,6 @@
     static final String TAG = "SFLPhoneHome";
     private ButtonSectionFragment buttonFragment;
     /* default callID */
-    static boolean serviceIsOn = false;
     private String incomingCallID = "";
     private static final int REQUEST_CODE_PREFERENCES = 1;
     ImageButton buttonCall, buttonHangup;
@@ -94,6 +93,7 @@
     private ISipService service;
     public AccountList mAccountList = new AccountList();
     public CallList mCallList = new CallList(this);
+    private SFLphoneApplication mApplication;
 
     private static final int ACTION_BAR_TAB_CONTACT = 0;
     private static final int ACTION_BAR_TAB_CALL = 1;
@@ -113,7 +113,9 @@
     {
         super.onCreate(savedInstanceState);
 
-        if (!serviceIsOn) {
+        mApplication = (SFLphoneApplication) getApplication();
+
+        if (!mApplication.isServiceRunning()) {
             Log.i(TAG, "starting SipService");
             startSipService();
         }
@@ -226,7 +228,7 @@
         }
         Log.i(TAG, "onDestroy: stopping SipService...");
         stopService(new Intent(this, SipService.class));
-        serviceIsOn = false;
+        mApplication.setServiceRunning(false);
         super.onDestroy();
     }
 
@@ -237,15 +239,15 @@
         public void onServiceConnected(ComponentName className,
                 IBinder binder) {
             service = ISipService.Stub.asInterface(binder);
+            mApplication.setSipService(service);
             mBound = true;
-            mContactListFragment.setService(service);
-            mCallElementList.setService(service);
             mAccountList.setSipService(service);
             Log.d(TAG, "Service connected");
         }
 
         @Override
         public void onServiceDisconnected(ComponentName arg0) {
+            mApplication.setSipService(null);
             mBound = false;
             Log.d(TAG, "Service disconnected");
         }
@@ -257,7 +259,7 @@
                 Intent sipServiceIntent = new Intent(SFLPhoneHome.this, SipService.class);
                 //sipServiceIntent.putExtra(ServiceConstants.EXTRA_OUTGOING_ACTIVITY, new ComponentName(SFLPhoneHome.this, SFLPhoneHome.class));
                 startService(sipServiceIntent);
-                serviceIsOn = true;
+                mApplication.setServiceRunning(true);
             };
         };
         try {
@@ -361,12 +363,12 @@
 
             switch (i) {
             case 0:
-                mContactListFragment = new ContactListFragment(service);
+                mContactListFragment = new ContactListFragment();
                 mContactListFragment.setAccountList(mAccountList);
                 fragment = mContactListFragment;
                 break;
             case 1:
-                mCallElementList = new CallElementList(service, mHome);
+                mCallElementList = new CallElementList();
                 SipCall.setCallElementList(mCallElementList);
                 mCallElementList.setAccountList(mAccountList);
                 fragment = mCallElementList;
diff --git a/src/com/savoirfairelinux/sflphone/client/SFLPhonePreferenceActivity.java b/src/com/savoirfairelinux/sflphone/client/SFLPhonePreferenceActivity.java
index 42b5eb1..5070bb3 100644
--- a/src/com/savoirfairelinux/sflphone/client/SFLPhonePreferenceActivity.java
+++ b/src/com/savoirfairelinux/sflphone/client/SFLPhonePreferenceActivity.java
@@ -85,25 +85,6 @@
         } 
     };
 
-    private void startSipService() {
-        Thread thread = new Thread("StartSFLphoneService") {
-            public void run() {
-                Intent sipServiceIntent = new Intent(SFLPhonePreferenceActivity.this, SipService.class);
-                startService(sipServiceIntent);
-                serviceIsOn = true;
-            };
-        };
-        try {
-            thread.start();
-        } catch (IllegalThreadStateException e) {
-            AlertDialog.Builder builder = new AlertDialog.Builder(this);
-            builder.setMessage("Cannot start SFLPhone SipService!");
-            AlertDialog alert = builder.create();
-            alert.show();
-            finish();
-        }
-    }
-
     @Override
     public void onCreate(Bundle savedInstanceState)
     {
@@ -166,6 +147,10 @@
         super.onDestroy();
     }
 
+    public ISipService getSipService() {
+        return service;
+    }
+
     @Override
     public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction)
     {
@@ -202,10 +187,10 @@
 
             switch (position) {
             case 0:
-                fragment = new AccountManagementFragment(service);
+                fragment = new AccountManagementFragment();
                 break;
             case 1:
-                fragment = new PrefManagementFragment(service);
+                fragment = new PrefManagementFragment();
                 break;
             default:
                 Log.i(TAG, "Get new fragment " + position + " is null");
diff --git a/src/com/savoirfairelinux/sflphone/client/SFLphoneApplication.java b/src/com/savoirfairelinux/sflphone/client/SFLphoneApplication.java
index 1dc2d99..17dcd6c 100644
--- a/src/com/savoirfairelinux/sflphone/client/SFLphoneApplication.java
+++ b/src/com/savoirfairelinux/sflphone/client/SFLphoneApplication.java
@@ -6,13 +6,13 @@
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.util.Log;
 
-import com.savoirfairelinux.sflphone.service.SipService;
+import com.savoirfairelinux.sflphone.service.ISipService;
 
 public class SFLphoneApplication extends Application {
 
     static final String TAG = "SFLphoneApplication";
     private boolean serviceRunning;
-    private SipService sipService;
+    private ISipService sipService;
 
     @Override
     public void onCreate() {
@@ -34,11 +34,11 @@
         this.serviceRunning = r;
     }
 
-    public SipService getSipService() {
+    public ISipService getSipService() {
         return sipService;
     }
 
-    public void setSipService(SipService service) {
+    public void setSipService(ISipService service) {
         sipService = service;
     }
 
