diff --git a/src/com/android/camera/Camera.java b/src/com/android/camera/Camera.java
index 6bded2c..5a1beb6 100644
--- a/src/com/android/camera/Camera.java
+++ b/src/com/android/camera/Camera.java
@@ -42,6 +42,7 @@
 import android.hardware.Camera.Parameters;
 import android.hardware.Camera.PictureCallback;
 import android.hardware.Camera.Size;
+import android.hardware.CameraSound;
 import android.location.Location;
 import android.media.CameraProfile;
 import android.net.Uri;
@@ -182,6 +183,8 @@
     // generating thumbnails. This reduces the shot-to-shot time.
     private ImageSaver mImageSaver;
 
+    private CameraSound mCameraSound;
+
     private Runnable mDoSnapRunnable = new Runnable() {
         public void run() {
             onShutterButtonClick();
@@ -1062,7 +1065,7 @@
 
     @Override
     public void playSound(int soundId) {
-        mCameraDevice.playSound(soundId);
+        mCameraSound.playSound(soundId);
     }
 
     private boolean saveDataToFile(String filePath, byte[] data) {
@@ -1200,6 +1203,7 @@
         // Do this after starting preview because it depends on camera
         // parameters.
         initializeIndicatorControl();
+        mCameraSound = new CameraSound();
 
         // Make sure preview is started.
         try {
@@ -1571,6 +1575,7 @@
         stopPreview();
         // Close the camera now because other activities may need to use it.
         closeCamera();
+        mCameraSound.release();
         resetScreenOn();
 
         // Clear UI.
diff --git a/src/com/android/camera/EffectsRecorder.java b/src/com/android/camera/EffectsRecorder.java
index 3d2aebf..b649bc2 100644
--- a/src/com/android/camera/EffectsRecorder.java
+++ b/src/com/android/camera/EffectsRecorder.java
@@ -32,6 +32,7 @@
 
 import android.graphics.SurfaceTexture;
 import android.hardware.Camera;
+import android.hardware.CameraSound;
 import android.media.MediaRecorder;
 import android.media.CamcorderProfile;
 import android.os.Handler;
@@ -117,6 +118,7 @@
 
     private boolean mLogVerbose = Log.isLoggable(TAG, Log.VERBOSE);
     private static final String TAG = "effectsrecorder";
+    private CameraSound mCameraSound;
 
     /** Determine if a given effect is supported at runtime
      * Some effects require libraries not available on all devices
@@ -136,6 +138,7 @@
         if (mLogVerbose) Log.v(TAG, "EffectsRecorder created (" + this + ")");
         mContext = context;
         mHandler = new Handler(Looper.getMainLooper());
+        mCameraSound = new CameraSound();
     }
 
     public void setCamera(Camera cameraDevice) {
@@ -690,7 +693,7 @@
         recorder.setInputValue("maxFileSize", mMaxFileSize);
         recorder.setInputValue("maxDurationMs", mMaxDurationMs);
         recorder.setInputValue("recording", true);
-        mCameraDevice.playSound(Camera.Sound.START_VIDEO_RECORDING);
+        mCameraSound.playSound(CameraSound.START_VIDEO_RECORDING);
         mState = STATE_RECORD;
     }
 
@@ -710,7 +713,7 @@
         }
         Filter recorder = mRunner.getGraph().getFilter("recorder");
         recorder.setInputValue("recording", false);
-        mCameraDevice.playSound(Camera.Sound.STOP_VIDEO_RECORDING);
+        mCameraSound.playSound(CameraSound.STOP_VIDEO_RECORDING);
         mState = STATE_PREVIEW;
     }
 
@@ -740,6 +743,7 @@
         } catch(IOException e) {
             throw new RuntimeException("Unable to connect camera to effect input", e);
         }
+        mCameraSound.release();
 
         mState = STATE_CONFIGURE;
         mOldRunner = mRunner;
diff --git a/src/com/android/camera/FocusManager.java b/src/com/android/camera/FocusManager.java
index 8c3f14d..72a0919 100644
--- a/src/com/android/camera/FocusManager.java
+++ b/src/com/android/camera/FocusManager.java
@@ -26,7 +26,7 @@
 import android.graphics.RectF;
 import android.hardware.Camera.Area;
 import android.hardware.Camera.Parameters;
-import android.hardware.Camera.Sound;
+import android.hardware.CameraSound;
 import android.os.Handler;
 import android.os.Message;
 import android.util.Log;
@@ -224,7 +224,7 @@
                 // so the state is always STATE_FOCUSING.
                 if (!Parameters.FOCUS_MODE_CONTINUOUS_PICTURE.
                         equals(mFocusMode)) {
-                    mListener.playSound(Sound.FOCUS_COMPLETE);
+                    mListener.playSound(CameraSound.FOCUS_COMPLETE);
                 }
             } else {
                 mState = STATE_FAIL;
diff --git a/src/com/android/camera/panorama/PanoramaActivity.java b/src/com/android/camera/panorama/PanoramaActivity.java
index 69fcc83..d446e41 100755
--- a/src/com/android/camera/panorama/PanoramaActivity.java
+++ b/src/com/android/camera/panorama/PanoramaActivity.java
@@ -49,7 +49,7 @@
 import android.graphics.YuvImage;
 import android.hardware.Camera.Parameters;
 import android.hardware.Camera.Size;
-import android.hardware.Camera.Sound;
+import android.hardware.CameraSound;
 import android.hardware.Sensor;
 import android.hardware.SensorManager;
 import android.media.ExifInterface;
@@ -176,6 +176,8 @@
 
     private RotateDialogController mRotateDialog;
 
+    private CameraSound mCameraSound;
+
     private class MosaicJpeg {
         public MosaicJpeg(byte[] data, int width, int height) {
             this.data = data;
@@ -271,6 +273,7 @@
         mDialogOkString = getResources().getString(R.string.dialog_ok);
         mDialogPanoramaFailedString =
                 getResources().getString(R.string.pano_dialog_panorama_failed);
+        mCameraSound = new CameraSound();
 
         mMainHandler = new Handler() {
             @Override
@@ -733,11 +736,11 @@
         // right now.
         switch (mCaptureState) {
             case CAPTURE_STATE_VIEWFINDER:
-                mCameraDevice.playSound(Sound.START_VIDEO_RECORDING);
+                mCameraSound.playSound(CameraSound.START_VIDEO_RECORDING);
                 startCapture();
                 break;
             case CAPTURE_STATE_MOSAIC:
-                mCameraDevice.playSound(Sound.STOP_VIDEO_RECORDING);
+                mCameraSound.playSound(CameraSound.STOP_VIDEO_RECORDING);
                 stopCapture(false);
         }
     }
@@ -977,6 +980,7 @@
         clearMosaicFrameProcessorIfNeeded();
         mOrientationEventListener.disable();
         resetScreenOn();
+        mCameraSound.release();
         System.gc();
     }
 
