diff --git a/src/com/android/server/telecom/CallsManager.java b/src/com/android/server/telecom/CallsManager.java
index 1697d38..85fe91d 100644
--- a/src/com/android/server/telecom/CallsManager.java
+++ b/src/com/android/server/telecom/CallsManager.java
@@ -109,6 +109,7 @@
     private final InCallController mInCallController;
     private final CallAudioManager mCallAudioManager;
     private final Ringer mRinger;
+    private final InCallWakeLockController mInCallWakeLockController;
     // For this set initial table size to 16 because we add 13 listeners in
     // the CallsManager constructor.
     private final Set<CallsManagerListener> mListeners = Collections.newSetFromMap(
@@ -171,6 +172,7 @@
         mDtmfLocalTonePlayer = new DtmfLocalTonePlayer(context);
         mConnectionServiceRepository = new ConnectionServiceRepository(mPhoneAccountRegistrar,
                 context);
+        mInCallWakeLockController = new InCallWakeLockController(context, this);
 
         mListeners.add(statusBarNotifier);
         mListeners.add(mCallLogManager);
diff --git a/src/com/android/server/telecom/InCallWakeLockController.java b/src/com/android/server/telecom/InCallWakeLockController.java
new file mode 100644
index 0000000..d97e171
--- /dev/null
+++ b/src/com/android/server/telecom/InCallWakeLockController.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.telecom;
+
+import android.content.Context;
+import android.os.PowerManager;
+import android.telecom.CallState;
+
+/**
+ * Handles acquisition and release of wake locks relating to call state.
+ */
+class InCallWakeLockController extends CallsManagerListenerBase {
+
+    private static final String TAG = "InCallWakeLockContoller";
+
+    private final Context mContext;
+    private final PowerManager.WakeLock mFullWakeLock;
+    private final CallsManager mCallsManager;
+
+    InCallWakeLockController(Context context, CallsManager callsManager) {
+        mContext = context;
+        mCallsManager = callsManager;
+
+        PowerManager powerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
+        mFullWakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, TAG);
+
+        callsManager.addListener(this);
+    }
+
+    @Override
+    public void onCallAdded(Call call) {
+        handleWakeLock();
+    }
+
+    @Override
+    public void onCallRemoved(Call call) {
+        handleWakeLock();
+    }
+
+    @Override
+    public void onCallStateChanged(Call call, int oldState, int newState) {
+        handleWakeLock();
+    }
+
+    private void handleWakeLock() {
+        // We grab a full lock as long as there exists a ringing call.
+        Call ringingCall = mCallsManager.getRingingCall();
+        if (ringingCall != null) {
+            mFullWakeLock.acquire();
+            Log.i(this, "Acquiring full wake lock");
+        } else if (mFullWakeLock.isHeld()) {
+            mFullWakeLock.release();
+            Log.i(this, "Releasing full wake lock");
+        }
+    }
+}
