diff --git a/InCallUI/src/com/android/incallui/CallButtonPresenter.java b/InCallUI/src/com/android/incallui/CallButtonPresenter.java
index 8a5170c..1f7a36f 100644
--- a/InCallUI/src/com/android/incallui/CallButtonPresenter.java
+++ b/InCallUI/src/com/android/incallui/CallButtonPresenter.java
@@ -41,7 +41,6 @@
     private boolean mAutomaticallyMuted = false;
     private boolean mPreviousMuteState = false;
     private boolean mShowManageConference = false;
-    private InCallCameraManager mInCallCameraManager;
 
     public CallButtonPresenter() {
     }
@@ -55,7 +54,6 @@
         // register for call state changes last
         InCallPresenter.getInstance().addListener(this);
         InCallPresenter.getInstance().addIncomingCallListener(this);
-        mInCallCameraManager = InCallPresenter.getInstance().getInCallCameraManager();
     }
 
     @Override
@@ -65,7 +63,6 @@
         InCallPresenter.getInstance().removeListener(this);
         AudioModeProvider.getInstance().removeListener(this);
         InCallPresenter.getInstance().removeIncomingCallListener(this);
-        mInCallCameraManager = null;
     }
 
     @Override
@@ -236,14 +233,15 @@
      *     false if we should switch to using the back-facing camera.
      */
     public void switchCameraClicked(boolean useFrontFacingCamera) {
-        mInCallCameraManager.setUseFrontFacingCamera(useFrontFacingCamera);
+        InCallCameraManager cameraManager = InCallPresenter.getInstance().getInCallCameraManager();
+        cameraManager.setUseFrontFacingCamera(useFrontFacingCamera);
 
         VideoCall videoCall = mCall.getVideoCall();
         if (videoCall == null) {
             return;
         }
 
-        String cameraId = mInCallCameraManager.getActiveCameraId();
+        String cameraId = cameraManager.getActiveCameraId();
         if (cameraId != null) {
             videoCall.setCamera(cameraId);
             videoCall.requestCameraCapabilities();
@@ -268,7 +266,9 @@
                     mCall.getVideoState() | VideoProfile.VideoState.PAUSED);
             videoCall.sendSessionModifyRequest(videoProfile);
         } else {
-            videoCall.setCamera(mInCallCameraManager.getActiveCameraId());
+            InCallCameraManager cameraManager = InCallPresenter.getInstance().
+                    getInCallCameraManager();
+            videoCall.setCamera(cameraManager.getActiveCameraId());
             VideoProfile videoProfile = new VideoProfile(
                     mCall.getVideoState() & ~VideoProfile.VideoState.PAUSED);
             videoCall.sendSessionModifyRequest(videoProfile);
diff --git a/InCallUI/src/com/android/incallui/InCallCameraManager.java b/InCallUI/src/com/android/incallui/InCallCameraManager.java
index 084a98f..ded9387 100644
--- a/InCallUI/src/com/android/incallui/InCallCameraManager.java
+++ b/InCallUI/src/com/android/incallui/InCallCameraManager.java
@@ -103,8 +103,22 @@
      * @param context The context.
      */
     private void initializeCameraList(Context context) {
-        CameraManager cameraManager = (CameraManager) context.getSystemService(
-                Context.CAMERA_SERVICE);
+        if (context == null) {
+            return;
+        }
+
+        CameraManager cameraManager = null;
+        try {
+            cameraManager = (CameraManager) context.getSystemService(
+                    Context.CAMERA_SERVICE);
+        } catch (Exception e) {
+            Log.e(this, "Could not get camera service.");
+            return;
+        }
+
+        if (cameraManager == null) {
+            return;
+        }
 
         String[] cameraIds = {};
         try {
diff --git a/InCallUI/src/com/android/incallui/VideoCallPresenter.java b/InCallUI/src/com/android/incallui/VideoCallPresenter.java
index f218de2..4523605 100644
--- a/InCallUI/src/com/android/incallui/VideoCallPresenter.java
+++ b/InCallUI/src/com/android/incallui/VideoCallPresenter.java
@@ -125,11 +125,6 @@
     private boolean mIsVideoCall;
 
     /**
-     * Determines the active camera for transmitted video.
-     */
-    private InCallCameraManager mInCallCameraManager;
-
-    /**
      * Determines the device orientation (portrait/lanscape).
      */
     private int mDeviceOrientation;
@@ -183,8 +178,6 @@
         InCallVideoCallListenerNotifier.getInstance().addSurfaceChangeListener(this);
         InCallVideoCallListenerNotifier.getInstance().addVideoEventListener(this);
         InCallVideoCallListenerNotifier.getInstance().addSessionModificationListener(this);
-
-        mInCallCameraManager = InCallPresenter.getInstance().getInCallCameraManager();
         mIsVideoCall = false;
     }
 
@@ -203,8 +196,6 @@
         InCallVideoCallListenerNotifier.getInstance().removeSurfaceChangeListener(this);
         InCallVideoCallListenerNotifier.getInstance().removeVideoEventListener(this);
         InCallVideoCallListenerNotifier.getInstance().removeSessionModificationListener(this);
-
-        mInCallCameraManager = null;
     }
 
     /**
@@ -425,7 +416,9 @@
             }
 
             mPreviewSurfaceState = PreviewSurfaceState.CAMERA_SET;
-            mVideoCall.setCamera(mInCallCameraManager.getActiveCameraId());
+            InCallCameraManager cameraManager = InCallPresenter.getInstance().
+                    getInCallCameraManager();
+            mVideoCall.setCamera(cameraManager.getActiveCameraId());
             mVideoCall.requestCameraCapabilities();
 
             if (ui.isDisplayVideoSurfaceCreated()) {
