diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index 3fee6c6..d4e3e29 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -203,6 +203,7 @@
     // true if dragging finger is allowed.
     private boolean mIsAllowedDraggingFinger;
 
+    private final GestureStrokeRecognitionPoints mGestureStrokeRecognitionPoints;
     private final GestureStrokeDrawingPoints mGestureStrokeDrawingPoints;
 
     // TODO: Add PointerTrackerFactory singleton and move some class static methods into it.
@@ -286,8 +287,9 @@
 
     private PointerTracker(final int id) {
         mPointerId = id;
-        mGestureStrokeDrawingPoints = new GestureStrokeDrawingPoints(
-                id, sGestureStrokeRecognitionParams, sGestureStrokeDrawingParams);
+        mGestureStrokeRecognitionPoints = new GestureStrokeRecognitionPoints(
+                id, sGestureStrokeRecognitionParams);
+        mGestureStrokeDrawingPoints = new GestureStrokeDrawingPoints(sGestureStrokeDrawingParams);
     }
 
     // Returns true if keyboard has been changed by this callback.
@@ -408,7 +410,7 @@
         mKeyboardLayoutHasBeenChanged = true;
         final int keyWidth = mKeyboard.mMostCommonKeyWidth;
         final int keyHeight = mKeyboard.mMostCommonKeyHeight;
-        mGestureStrokeDrawingPoints.setKeyboardGeometry(keyWidth, mKeyboard.mOccupiedHeight);
+        mGestureStrokeRecognitionPoints.setKeyboardGeometry(keyWidth, mKeyboard.mOccupiedHeight);
         final Key newKey = mKeyDetector.detectHitKey(mKeyX, mKeyY);
         if (newKey != mCurrentKey) {
             if (sDrawingProxy != null) {
@@ -581,7 +583,7 @@
      * @return true if the batch input has started successfully.
      */
     private boolean mayStartBatchInput() {
-        if (!mGestureStrokeDrawingPoints.isStartOfAGesture()) {
+        if (!mGestureStrokeRecognitionPoints.isStartOfAGesture()) {
             return false;
         }
         if (DEBUG_LISTENER) {
@@ -609,13 +611,13 @@
 
     public void updateBatchInputByTimer(final long syntheticMoveEventTime) {
         final int gestureTime = (int)(syntheticMoveEventTime - sGestureFirstDownTime);
-        mGestureStrokeDrawingPoints.duplicateLastPointWith(gestureTime);
+        mGestureStrokeRecognitionPoints.duplicateLastPointWith(gestureTime);
         updateBatchInput(syntheticMoveEventTime);
     }
 
     private void updateBatchInput(final long moveEventTime) {
         synchronized (sAggregatedPointers) {
-            final GestureStrokeRecognitionPoints stroke = mGestureStrokeDrawingPoints;
+            final GestureStrokeRecognitionPoints stroke = mGestureStrokeRecognitionPoints;
             stroke.appendIncrementalBatchPoints(sAggregatedPointers);
             final int size = sAggregatedPointers.getPointerSize();
             if (size > sLastRecognitionPointSize
@@ -642,7 +644,7 @@
     private boolean mayEndBatchInput(final long upEventTime) {
         boolean hasEndBatchInputSuccessfully = false;
         synchronized (sAggregatedPointers) {
-            mGestureStrokeDrawingPoints.appendAllBatchPoints(sAggregatedPointers);
+            mGestureStrokeRecognitionPoints.appendAllBatchPoints(sAggregatedPointers);
             if (getActivePointerTrackerCount() == 1) {
                 hasEndBatchInputSuccessfully = true;
                 sTypingTimeRecorder.onEndBatchInput(upEventTime);
@@ -754,8 +756,12 @@
             if (getActivePointerTrackerCount() == 1) {
                 sGestureFirstDownTime = eventTime;
             }
-            mGestureStrokeDrawingPoints.onDownEvent(x, y, eventTime, sGestureFirstDownTime,
-                    sTypingTimeRecorder.getLastLetterTypingTime());
+            final int elapsedTimeSinceFirstDown = (int)(eventTime - sGestureFirstDownTime);
+            final int elapsedTimeSinceLastTyping = (int)(
+                    eventTime - sTypingTimeRecorder.getLastLetterTypingTime());
+            mGestureStrokeRecognitionPoints.onDownEvent(x, y, elapsedTimeSinceFirstDown,
+                    elapsedTimeSinceLastTyping);
+            mGestureStrokeDrawingPoints.onDownEvent(x, y, elapsedTimeSinceFirstDown);
         }
     }
 
@@ -814,11 +820,11 @@
         if (!mIsDetectingGesture) {
             return;
         }
-        final int beforeLength = mGestureStrokeDrawingPoints.getLength();
-        final int gestureTime = (int)(eventTime - sGestureFirstDownTime);
-        final boolean onValidArea = mGestureStrokeDrawingPoints.addPointOnKeyboard(
-                x, y, gestureTime, isMajorEvent);
-        if (mGestureStrokeDrawingPoints.getLength() > beforeLength) {
+        final int beforeLength = mGestureStrokeRecognitionPoints.getLength();
+        final int elapsedTimeSinceFirstDown = (int)(eventTime - sGestureFirstDownTime);
+        final boolean onValidArea = mGestureStrokeRecognitionPoints.addPointOnKeyboard(
+                x, y, elapsedTimeSinceFirstDown, isMajorEvent);
+        if (mGestureStrokeRecognitionPoints.getLength() > beforeLength) {
             sTimerProxy.startUpdateBatchInputTimer(this);
         }
         // If the move event goes out from valid batch input area, cancel batch input.
@@ -826,6 +832,7 @@
             cancelBatchInput();
             return;
         }
+        mGestureStrokeDrawingPoints.onMoveEvent(x, y, elapsedTimeSinceFirstDown);
         // If the MoreKeysPanel is showing then do not attempt to enter gesture mode. However,
         // the gestured touch points are still being recorded in case the panel is dismissed.
         if (isShowingMoreKeysPanel()) {
diff --git a/java/src/com/android/inputmethod/keyboard/internal/GestureStrokeDrawingPoints.java b/java/src/com/android/inputmethod/keyboard/internal/GestureStrokeDrawingPoints.java
index 0c09cbc..7618682 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/GestureStrokeDrawingPoints.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/GestureStrokeDrawingPoints.java
@@ -20,11 +20,8 @@
 
 /**
  * This class holds drawing points to represent a gesture stroke on the screen.
- * TODO: Currently this class extends {@link GestureStrokeRecognitionPoints} that holds recognition
- * points of a gesture stroke. This class should be independent from
- * {@link GestureStrokeRecognitionPoints}.
  */
-public final class GestureStrokeDrawingPoints extends GestureStrokeRecognitionPoints {
+public final class GestureStrokeDrawingPoints {
     public static final int PREVIEW_CAPACITY = 256;
 
     private final ResizableIntArray mPreviewEventTimes = new ResizableIntArray(PREVIEW_CAPACITY);
@@ -42,16 +39,11 @@
     private int mLastY;
     private double mDistanceFromLastSample;
 
-    public GestureStrokeDrawingPoints(final int pointerId,
-            final GestureStrokeRecognitionParams recognitionParams,
-            final GestureStrokeDrawingParams drawingParams) {
-        super(pointerId, recognitionParams);
+    public GestureStrokeDrawingPoints(final GestureStrokeDrawingParams drawingParams) {
         mDrawingParams = drawingParams;
     }
 
-    @Override
-    protected void reset() {
-        super.reset();
+    private void reset() {
         mStrokeId++;
         mLastPreviewSize = 0;
         mLastInterpolatedPreviewIndex = 0;
@@ -64,6 +56,11 @@
         return mStrokeId;
     }
 
+    public void onDownEvent(final int x, final int y, final int elapsedTimeSinceFirstDown) {
+        reset();
+        onMoveEvent(x, y, elapsedTimeSinceFirstDown);
+    }
+
     private boolean needsSampling(final int x, final int y) {
         mDistanceFromLastSample += Math.hypot(x - mLastX, y - mLastY);
         mLastX = x;
@@ -76,16 +73,12 @@
         return false;
     }
 
-    @Override
-    public boolean addPointOnKeyboard(final int x, final int y, final int time,
-            final boolean isMajorEvent) {
+    public void onMoveEvent(final int x, final int y, final int elapsedTimeSinceFirstDown) {
         if (needsSampling(x, y)) {
-            mPreviewEventTimes.add(time);
+            mPreviewEventTimes.add(elapsedTimeSinceFirstDown);
             mPreviewXCoordinates.add(x);
             mPreviewYCoordinates.add(y);
         }
-        return super.addPointOnKeyboard(x, y, time, isMajorEvent);
-
     }
 
     /**
diff --git a/java/src/com/android/inputmethod/keyboard/internal/GestureStrokeRecognitionPoints.java b/java/src/com/android/inputmethod/keyboard/internal/GestureStrokeRecognitionPoints.java
index 343c898..5d4f5e8 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/GestureStrokeRecognitionPoints.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/GestureStrokeRecognitionPoints.java
@@ -103,19 +103,17 @@
         return mEventTimes.getLength();
     }
 
-    public void onDownEvent(final int x, final int y, final long downTime,
-            final long gestureFirstDownTime, final long lastTypingTime) {
+    public void onDownEvent(final int x, final int y, final int elapsedTimeSinceFirstDown,
+            final int elapsedTimeSinceLastTyping) {
         reset();
-        final long elapsedTimeAfterTyping = downTime - lastTypingTime;
-        if (elapsedTimeAfterTyping < mRecognitionParams.mStaticTimeThresholdAfterFastTyping) {
+        if (elapsedTimeSinceLastTyping < mRecognitionParams.mStaticTimeThresholdAfterFastTyping) {
             mAfterFastTyping = true;
         }
         if (DEBUG) {
             Log.d(TAG, String.format("[%d] onDownEvent: dT=%3d%s", mPointerId,
-                    elapsedTimeAfterTyping, mAfterFastTyping ? " afterFastTyping" : ""));
+                    elapsedTimeSinceLastTyping, mAfterFastTyping ? " afterFastTyping" : ""));
         }
-        final int elapsedTimeFromFirstDown = (int)(downTime - gestureFirstDownTime);
-        addPointOnKeyboard(x, y, elapsedTimeFromFirstDown, true /* isMajorEvent */);
+        addPointOnKeyboard(x, y, elapsedTimeSinceFirstDown, true /* isMajorEvent */);
     }
 
     private int getGestureDynamicDistanceThreshold(final int deltaTime) {
@@ -184,7 +182,7 @@
         }
     }
 
-    protected void reset() {
+    private void reset() {
         mIncrementalRecognitionSize = 0;
         mLastIncrementalBatchSize = 0;
         mEventTimes.setLength(0);
