#17105: Go up to the Activity or the Application to get a service reference
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;
     }