diff --git a/media/java/android/media/videoeditor/MediaArtistNativeHelper.java b/media/java/android/media/videoeditor/MediaArtistNativeHelper.java
index b9105cb..297c4df 100644
--- a/media/java/android/media/videoeditor/MediaArtistNativeHelper.java
+++ b/media/java/android/media/videoeditor/MediaArtistNativeHelper.java
@@ -23,6 +23,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.concurrent.Semaphore;
+import java.util.concurrent.TimeUnit;
 
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
@@ -3058,6 +3059,8 @@
                 Log.e(TAG, "Runtime exception in nativeStartPreview");
                 throw ex;
             }
+        } else {
+            throw new IllegalStateException("generatePreview is in progress");
         }
     }
 
@@ -3085,7 +3088,10 @@
     long renderPreviewFrame(Surface surface, long time, int surfaceWidth,
             int surfaceHeight, VideoEditor.OverlayData overlayData) {
         if (mInvalidatePreviewArray) {
-            throw new RuntimeException("Call generate preview first");
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "Call generate preview first");
+            }
+            throw new IllegalStateException("Call generate preview first");
         }
 
         long timeMs = 0;
@@ -3913,6 +3919,27 @@
     }
 
     /**
+     * Tries to grab the semaphore with a specified time out which arbitrates access to the editor
+     *
+     * @param timeoutMs time out in ms.
+     *
+     * @return true if the semaphore is acquired, false otherwise
+     * @throws InterruptedException
+     */
+    boolean lock(long timeoutMs) throws InterruptedException {
+        if (Log.isLoggable(TAG, Log.DEBUG)) {
+            Log.d(TAG, "lock: grabbing semaphore with timeout " + timeoutMs, new Throwable());
+        }
+
+        boolean acquireSem = mLock.tryAcquire(timeoutMs, TimeUnit.MILLISECONDS);
+        if (Log.isLoggable(TAG, Log.DEBUG)) {
+            Log.d(TAG, "lock: grabbed semaphore status " + acquireSem);
+        }
+
+        return acquireSem;
+    }
+
+    /**
      * Release the semaphore which arbitrates access to the editor
      */
     void unlock() {
diff --git a/media/java/android/media/videoeditor/VideoEditorImpl.java b/media/java/android/media/videoeditor/VideoEditorImpl.java
index 7608c05..27ab799 100755
--- a/media/java/android/media/videoeditor/VideoEditorImpl.java
+++ b/media/java/android/media/videoeditor/VideoEditorImpl.java
@@ -112,6 +112,7 @@
     private static final String ATTR_OVERLAY_RESIZED_RGB_FRAME_WIDTH = "resized_RGBframe_width";
     private static final String ATTR_OVERLAY_RESIZED_RGB_FRAME_HEIGHT = "resized_RGBframe_height";
 
+    private static final int ENGINE_ACCESS_MAX_TIMEOUT_MS = 500;
     /*
      *  Instance variables
      */
@@ -852,8 +853,10 @@
 
         boolean semAcquireDone = false;
         try {
-            mMANativeHelper.lock();
-            semAcquireDone = true;
+            semAcquireDone = mMANativeHelper.lock(ENGINE_ACCESS_MAX_TIMEOUT_MS);
+            if (semAcquireDone == false) {
+                throw new IllegalStateException("Timeout waiting for semaphore");
+            }
 
             if (mMediaItems.size() > 0) {
                 final Rect frame = surfaceHolder.getSurfaceFrame();
@@ -862,8 +865,9 @@
             } else {
                 result = 0;
             }
-        } catch (InterruptedException  ex) {
-            Log.e(TAG, "Sem acquire NOT successful in renderPreviewFrame");
+        } catch (InterruptedException ex) {
+            Log.w(TAG, "The thread was interrupted", new Throwable());
+            throw new IllegalStateException("The thread was interrupted");
         } finally {
             if (semAcquireDone) {
                 mMANativeHelper.unlock();
@@ -1582,8 +1586,10 @@
 
         boolean semAcquireDone = false;
         try{
-            mMANativeHelper.lock();
-            semAcquireDone = true;
+            semAcquireDone = mMANativeHelper.lock(ENGINE_ACCESS_MAX_TIMEOUT_MS);
+            if (semAcquireDone == false) {
+                throw new IllegalStateException("Timeout waiting for semaphore");
+            }
 
             if (mMediaItems.size() > 0) {
                 mMANativeHelper.previewStoryBoard(mMediaItems, mTransitions,
@@ -1595,17 +1601,9 @@
             /**
              *  release on complete by calling stopPreview
              */
-        } catch (InterruptedException  ex) {
-            Log.e(TAG, "Sem acquire NOT successful in startPreview");
-        } catch (IllegalArgumentException ex) {
-            Log.e(TAG, "Illegal Argument exception in do preview");
-            throw ex;
-        } catch (IllegalStateException ex) {
-            Log.e(TAG, "Illegal State exception in do preview");
-            throw ex;
-        } catch (RuntimeException ex) {
-            Log.e(TAG, "Runtime exception in do preview");
-            throw ex;
+        } catch (InterruptedException ex) {
+            Log.w(TAG, "The thread was interrupted", new Throwable());
+            throw new IllegalStateException("The thread was interrupted");
         } finally {
             if (semAcquireDone) {
                 mMANativeHelper.unlock();
