diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
index 61ed26b..b3eb9d4 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
@@ -43,6 +43,8 @@
 import com.android.inputmethod.latin.R;
 import com.android.inputmethod.latin.StaticInnerHandlerWrapper;
 import com.android.inputmethod.latin.StringUtils;
+import com.android.inputmethod.latin.define.ProductionFlag;
+import com.android.inputmethod.research.ResearchLogger;
 
 import java.util.HashSet;
 
@@ -518,6 +520,13 @@
             }
         }
 
+        // ResearchLogging indicator.
+        // TODO: Reimplement using a keyboard background image specific to the ResearchLogger,
+        // and remove this call.
+        if (ProductionFlag.IS_EXPERIMENTAL) {
+            ResearchLogger.getInstance().paintIndicator(this, paint, canvas, width, height);
+        }
+
         mInvalidatedKeys.clear();
         mInvalidatedKeysRect.setEmpty();
         mInvalidateAllKeys = false;
diff --git a/java/src/com/android/inputmethod/research/ResearchLogger.java b/java/src/com/android/inputmethod/research/ResearchLogger.java
index a4234a9..d097ea4 100644
--- a/java/src/com/android/inputmethod/research/ResearchLogger.java
+++ b/java/src/com/android/inputmethod/research/ResearchLogger.java
@@ -28,6 +28,10 @@
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.inputmethodservice.InputMethodService;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Paint.Style;
 import android.os.Build;
 import android.os.IBinder;
 import android.text.TextUtils;
@@ -48,6 +52,7 @@
 import com.android.inputmethod.keyboard.Keyboard;
 import com.android.inputmethod.keyboard.KeyboardId;
 import com.android.inputmethod.keyboard.KeyboardSwitcher;
+import com.android.inputmethod.keyboard.KeyboardView;
 import com.android.inputmethod.keyboard.LatinKeyboardView;
 import com.android.inputmethod.latin.Dictionary;
 import com.android.inputmethod.latin.LatinIME;
@@ -87,7 +92,8 @@
     private static final String FILENAME_SUFFIX = ".txt";
     private static final SimpleDateFormat TIMESTAMP_DATEFORMAT =
             new SimpleDateFormat("yyyyMMddHHmmssS", Locale.US);
-    private static final boolean IS_SHOWING_INDICATOR = false;
+    private static final boolean IS_SHOWING_INDICATOR = true;
+    private static final boolean IS_SHOWING_INDICATOR_CLEARLY = false;
 
     // constants related to specific log points
     private static final String WHITESPACE_SEPARATORS = " \t\n\r";
@@ -528,11 +534,46 @@
     }
 
     public void requestIndicatorRedraw() {
-        // invalidate any existing graphics
-        if (IS_SHOWING_INDICATOR) {
-            if (mKeyboardSwitcher != null) {
-                mKeyboardSwitcher.getKeyboardView().invalidateAllKeys();
+        if (!IS_SHOWING_INDICATOR) {
+            return;
+        }
+        if (mKeyboardSwitcher == null) {
+            return;
+        }
+        final KeyboardView keyboardView = mKeyboardSwitcher.getKeyboardView();
+        if (keyboardView == null) {
+            return;
+        }
+        keyboardView.invalidateAllKeys();
+    }
+
+
+    public void paintIndicator(KeyboardView view, Paint paint, Canvas canvas, int width,
+            int height) {
+        // TODO: Reimplement using a keyboard background image specific to the ResearchLogger
+        // and remove this method.
+        // The check for LatinKeyboardView ensures that a red border is only placed around
+        // the main keyboard, not every keyboard.
+        if (IS_SHOWING_INDICATOR && isAllowedToLog() && view instanceof LatinKeyboardView) {
+            final int savedColor = paint.getColor();
+            paint.setColor(Color.RED);
+            final Style savedStyle = paint.getStyle();
+            paint.setStyle(Style.STROKE);
+            final float savedStrokeWidth = paint.getStrokeWidth();
+            if (IS_SHOWING_INDICATOR_CLEARLY) {
+                paint.setStrokeWidth(5);
+                canvas.drawRect(0, 0, width, height, paint);
+            } else {
+                // Put a tiny red dot on the screen so a knowledgeable user can check whether
+                // it is enabled.  The dot is actually a zero-width, zero-height rectangle,
+                // placed at the lower-right corner of the canvas, painted with a non-zero border
+                // width.
+                paint.setStrokeWidth(3);
+                canvas.drawRect(width, height, width, height, paint);
             }
+            paint.setColor(savedColor);
+            paint.setStyle(savedStyle);
+            paint.setStrokeWidth(savedStrokeWidth);
         }
     }
 
