diff --git a/src/org/sflphone/client/HomeActivity.java b/src/org/sflphone/client/HomeActivity.java
index 854d4ce..d365403 100644
--- a/src/org/sflphone/client/HomeActivity.java
+++ b/src/org/sflphone/client/HomeActivity.java
@@ -40,9 +40,9 @@
 import java.util.Timer;
 import java.util.TimerTask;
 
-import android.app.*;
-import android.support.v4.app.ActionBarDrawerToggle;
-import android.support.v4.app.FragmentActivity;
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.support.v4.app.*;
 import org.sflphone.R;
 import org.sflphone.fragments.AboutFragment;
 import org.sflphone.fragments.AccountsManagementFragment;
@@ -311,7 +311,7 @@
             return;
         }
 
-        if (getFragmentManager().getBackStackEntryCount() > 1) {
+        if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
             popCustomBackStack();
             fMenu.backToHome();
             return;
@@ -334,9 +334,9 @@
     }
 
     private void popCustomBackStack() {
-        FragmentManager.BackStackEntry entry = getFragmentManager().getBackStackEntryAt(0);
-        fContent = getFragmentManager().findFragmentByTag(entry.getName());
-        FragmentManager fm = getFragmentManager();
+        FragmentManager fm = getSupportFragmentManager();
+        FragmentManager.BackStackEntry entry = fm.getBackStackEntryAt(0);
+        fContent = fm.findFragmentByTag(entry.getName());
         for (int i = 0; i < fm.getBackStackEntryCount() - 1; ++i) {
             fm.popBackStack();
         }
@@ -391,7 +391,7 @@
 
                 fMenu = new MenuFragment();
                 fContent = new HomeFragment();
-                getFragmentManager().beginTransaction().replace(R.id.left_drawer, fMenu).replace(R.id.main_frame, fContent, "Home").addToBackStack("Home").commit();
+                getSupportFragmentManager().beginTransaction().replace(R.id.left_drawer, fMenu).replace(R.id.main_frame, fContent, "Home").addToBackStack("Home").commit();
 
                 service.destroyNotification();
             } catch (RemoteException e) {
@@ -641,7 +641,7 @@
                 if (fContent instanceof HomeFragment)
                     break;
 
-                if (getFragmentManager().getBackStackEntryCount() == 1)
+                if (getSupportFragmentManager().getBackStackEntryCount() == 1)
                     break;
 
                 popCustomBackStack();
@@ -651,13 +651,13 @@
                 if (fContent instanceof AccountsManagementFragment)
                     break;
                 fContent = new AccountsManagementFragment();
-                getFragmentManager().beginTransaction().setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).replace(R.id.main_frame, fContent, "Accounts").addToBackStack("Accounts").commit();
+                getSupportFragmentManager().beginTransaction().setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).replace(R.id.main_frame, fContent, "Accounts").addToBackStack("Accounts").commit();
                 break;
             case 2:
                 if (fContent instanceof AboutFragment)
                     break;
                 fContent = new AboutFragment();
-                getFragmentManager().beginTransaction().setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).replace(R.id.main_frame, fContent, "About").addToBackStack("About").commit();
+                getSupportFragmentManager().beginTransaction().setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).replace(R.id.main_frame, fContent, "About").addToBackStack("About").commit();
                 break;
         }
 
