diff --git a/tools/emulator/system/camera/EmulatedFakeCamera2.cpp b/tools/emulator/system/camera/EmulatedFakeCamera2.cpp
index 711c2d2..9fcab91 100644
--- a/tools/emulator/system/camera/EmulatedFakeCamera2.cpp
+++ b/tools/emulator/system/camera/EmulatedFakeCamera2.cpp
@@ -517,7 +517,9 @@
 
 EmulatedFakeCamera2::ConfigureThread::ConfigureThread(EmulatedFakeCamera2 *parent):
         Thread(false),
-        mParent(parent) {
+        mParent(parent),
+        mNextBuffers(NULL),
+        mRequestCount(0) {
     mRunning = false;
 }
 
@@ -567,8 +569,8 @@
 }
 
 int EmulatedFakeCamera2::ConfigureThread::getInProgressCount() {
-    Mutex::Autolock lock(mInternalsMutex);
-    return mNextBuffers == NULL ? 0 : 1;
+    Mutex::Autolock lock(mInputMutex);
+    return mRequestCount;
 }
 
 bool EmulatedFakeCamera2::ConfigureThread::threadLoop() {
@@ -610,6 +612,9 @@
             Mutex::Autolock lock(mInputMutex);
             mActive = false;
             return true;
+        } else {
+            Mutex::Autolock lock(mInputMutex);
+            mRequestCount++;
         }
         // Get necessary parameters for sensor config
 
@@ -770,6 +775,10 @@
     mRequest = NULL;
     mNextBuffers = NULL;
 
+    Mutex::Autolock lock(mInputMutex);
+    mRequestCount--;
+
+
     return true;
 }
 
@@ -778,7 +787,9 @@
         mParent(parent),
         mRunning(false),
         mActive(false),
-        mRequest(NULL)
+        mRequest(NULL),
+        mBuffers(NULL),
+        mRequestCount(0)
 {
     mInFlightQueue = new InFlightQueue[kInFlightQueueSize];
     mInFlightHead = 0;
@@ -818,6 +829,7 @@
     mInFlightQueue[mInFlightTail].request = request;
     mInFlightQueue[mInFlightTail].buffers = buffers;
     mInFlightTail = (mInFlightTail + 1) % kInFlightQueueSize;
+    mRequestCount++;
 
     if (!mActive) {
         mActive = true;
@@ -850,14 +862,8 @@
 
 int EmulatedFakeCamera2::ReadoutThread::getInProgressCount() {
     Mutex::Autolock lock(mInputMutex);
-    Mutex::Autolock iLock(mInternalsMutex);
 
-    int requestCount =
-            ((mInFlightTail + kInFlightQueueSize) - mInFlightHead)
-            % kInFlightQueueSize;
-    requestCount += (mBuffers == NULL) ? 0 : 1;
-
-    return requestCount;
+    return mRequestCount;
 }
 
 bool EmulatedFakeCamera2::ReadoutThread::threadLoop() {
@@ -996,9 +1002,8 @@
                 ALOGV("Sending image buffer %d to output stream %d",
                         i, b.streamId);
                 GraphicBufferMapper::get().unlock(*(b.buffer));
-                res = mParent->getStreamInfo(b.streamId).ops->enqueue_buffer(
-                    mParent->getStreamInfo(b.streamId).ops,
-                    captureTime, b.buffer);
+                const Stream &s = mParent->getStreamInfo(b.streamId);
+                res = s.ops->enqueue_buffer(s.ops, captureTime, b.buffer);
                 if (res != OK) {
                     ALOGE("Error enqueuing image buffer %p: %s (%d)", b.buffer,
                             strerror(-res), res);
@@ -1018,6 +1023,9 @@
         mBuffers = NULL;
     }
 
+    Mutex::Autolock l(mInputMutex);
+    mRequestCount--;
+
     return true;
 }
 
diff --git a/tools/emulator/system/camera/EmulatedFakeCamera2.h b/tools/emulator/system/camera/EmulatedFakeCamera2.h
index 9a0b676..8af700b 100644
--- a/tools/emulator/system/camera/EmulatedFakeCamera2.h
+++ b/tools/emulator/system/camera/EmulatedFakeCamera2.h
@@ -185,10 +185,11 @@
         bool mRunning;
         bool threadLoop();
 
-        Mutex mInputMutex; // Protects mActive
+        Mutex mInputMutex; // Protects mActive, mRequestCount
         Condition mInputSignal;
         bool mActive; // Whether we're waiting for input requests or actively
                       // working on them
+        size_t mRequestCount;
 
         camera_metadata_t *mRequest;
 
@@ -222,7 +223,7 @@
         bool threadLoop();
 
         // Inputs
-        Mutex mInputMutex; // Protects mActive, mInFlightQueue
+        Mutex mInputMutex; // Protects mActive, mInFlightQueue, mRequestCount
         Condition mInputSignal;
         bool mActive;
 
@@ -235,6 +236,8 @@
         size_t mInFlightHead;
         size_t mInFlightTail;
 
+        size_t mRequestCount;
+
         // Internals
         Mutex mInternalsMutex;
         camera_metadata_t *mRequest;
