diff --git a/java/src/com/android/inputmethod/keyboard/EmojiPalettesView.java b/java/src/com/android/inputmethod/keyboard/EmojiPalettesView.java
index 85ae50092..ef9448c2f 100644
--- a/java/src/com/android/inputmethod/keyboard/EmojiPalettesView.java
+++ b/java/src/com/android/inputmethod/keyboard/EmojiPalettesView.java
@@ -459,6 +459,7 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange
         mEmojiPager.setAdapter(mEmojiPalettesAdapter);
         mEmojiPager.setOnPageChangeListener(this);
         mEmojiPager.setOffscreenPageLimit(0);
+        mEmojiPager.setPersistentDrawingCache(ViewPager.PERSISTENT_NO_CACHE);
         final Resources res = getResources();
         final EmojiLayoutParams emojiLp = new EmojiLayoutParams(res);
         emojiLp.setPagerProperties(mEmojiPager);
@@ -607,7 +608,7 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange
     private static class EmojiPalettesAdapter extends PagerAdapter {
         private final ScrollKeyboardView.OnKeyClickListener mListener;
         private final DynamicGridKeyboard mRecentsKeyboard;
-        private final SparseArray<ScrollKeyboardView> mActiveKeyboardView =
+        private final SparseArray<ScrollKeyboardView> mActiveKeyboardViews =
                 CollectionUtils.newSparseArray();
         private final EmojiCategory mEmojiCategory;
         private int mActivePosition = 0;
@@ -623,7 +624,7 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange
         public void flushPendingRecentKeys() {
             mRecentsKeyboard.flushPendingRecentKeys();
             final KeyboardView recentKeyboardView =
-                    mActiveKeyboardView.get(mEmojiCategory.getRecentTabId());
+                    mActiveKeyboardViews.get(mEmojiCategory.getRecentTabId());
             if (recentKeyboardView != null) {
                 recentKeyboardView.invalidateAllKeys();
             }
@@ -636,7 +637,7 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange
             }
             mRecentsKeyboard.addKeyFirst(key);
             final KeyboardView recentKeyboardView =
-                    mActiveKeyboardView.get(mEmojiCategory.getRecentTabId());
+                    mActiveKeyboardViews.get(mEmojiCategory.getRecentTabId());
             if (recentKeyboardView != null) {
                 recentKeyboardView.invalidateAllKeys();
             }
@@ -652,7 +653,7 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange
             if (mActivePosition == position) {
                 return;
             }
-            final ScrollKeyboardView oldKeyboardView = mActiveKeyboardView.get(mActivePosition);
+            final ScrollKeyboardView oldKeyboardView = mActiveKeyboardViews.get(mActivePosition);
             if (oldKeyboardView != null) {
                 oldKeyboardView.releaseCurrentKey();
                 oldKeyboardView.deallocateMemory();
@@ -662,11 +663,11 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange
 
         @Override
         public Object instantiateItem(final ViewGroup container, final int position) {
-            final ScrollKeyboardView oldKeyboardView = mActiveKeyboardView.get(position);
+            final ScrollKeyboardView oldKeyboardView = mActiveKeyboardViews.get(position);
             if (oldKeyboardView != null) {
                 oldKeyboardView.deallocateMemory();
                 // This may be redundant but wanted to be safer..
-                mActiveKeyboardView.remove(position);
+                mActiveKeyboardViews.remove(position);
             }
             final Keyboard keyboard =
                     mEmojiCategory.getKeyboardFromPagePosition(position);
@@ -681,7 +682,7 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange
                     R.id.emoji_keyboard_scroller);
             keyboardView.setScrollView(scrollView);
             container.addView(view);
-            mActiveKeyboardView.put(position, keyboardView);
+            mActiveKeyboardViews.put(position, keyboardView);
             return view;
         }
 
@@ -693,12 +694,13 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange
         @Override
         public void destroyItem(final ViewGroup container, final int position,
                 final Object object) {
-            final ScrollKeyboardView keyboardView = mActiveKeyboardView.get(position);
+            ScrollKeyboardView keyboardView = mActiveKeyboardViews.get(position);
             if (keyboardView != null) {
                 keyboardView.deallocateMemory();
-                mActiveKeyboardView.remove(position);
+                mActiveKeyboardViews.remove(position);
             }
             container.removeView(keyboardView);
+            keyboardView = null;
         }
     }
 
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
index aeb9e67b2..5578713a0 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
@@ -243,6 +243,8 @@ public class KeyboardView extends View {
     }
 
     private void freeOffscreenBuffer() {
+        mOffscreenCanvas.setBitmap(null);
+        mOffscreenCanvas.setMatrix(null);
         if (mOffscreenBuffer != null) {
             mOffscreenBuffer.recycle();
             mOffscreenBuffer = null;
diff --git a/java/src/com/android/inputmethod/keyboard/internal/ScrollKeyboardView.java b/java/src/com/android/inputmethod/keyboard/internal/ScrollKeyboardView.java
index b8ee976e8..9cf68d43d 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/ScrollKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/ScrollKeyboardView.java
@@ -30,8 +30,9 @@ import com.android.inputmethod.keyboard.KeyboardView;
 import com.android.inputmethod.latin.R;
 
 /**
- * This is an extended {@link KeyboardView} class that hosts a scroll keyboard.
+ * This is an extended {@link KeyboardView} class that hosts a vertical scroll keyboard.
  * Multi-touch unsupported. No {@link PointerTracker}s. No gesture support.
+ * TODO: Vertical scroll capability should be removed from this class because it's no longer used.
  */
 // TODO: Implement key popup preview.
 public final class ScrollKeyboardView extends KeyboardView implements