diff --git a/Android.mk b/Android.mk
index fd6c97e..c7dee0b 100755
--- a/Android.mk
+++ b/Android.mk
@@ -13,5 +13,8 @@
 
 #LOCAL_AAPT_FLAGS := -0 .dict
 
+#LOCAL_SDK_VERSION := current
+
+LOCAL_STATIC_JAVA_LIBRARIES := google-common android-common
 include $(BUILD_PACKAGE)
 include $(LOCAL_PATH)/dictionary/Android.mk
diff --git a/src/com/android/inputmethod/latin/CandidateView.java b/src/com/android/inputmethod/latin/CandidateView.java
index a31714e..e6a9d6b 100755
--- a/src/com/android/inputmethod/latin/CandidateView.java
+++ b/src/com/android/inputmethod/latin/CandidateView.java
@@ -139,7 +139,7 @@
             @Override
             public void onLongPress(MotionEvent me) {
                 if (mSuggestions.size() > 0) {
-                    if (me.getX() + mScrollX < mWordWidth[0] && mScrollX < 10) {
+                    if (me.getX() + getScrollX() < mWordWidth[0] && getScrollX() < 10) {
                         longPressFirstWord();
                     }
                 }
@@ -150,14 +150,16 @@
                     float distanceX, float distanceY) {
                 final int width = getWidth();
                 mScrolled = true;
-                mScrollX += (int) distanceX;
-                if (mScrollX < 0) {
-                    mScrollX = 0;
+                int scrollX = getScrollX();
+                scrollX += (int) distanceX;
+                if (scrollX < 0) {
+                    scrollX = 0;
                 }
-                if (distanceX > 0 && mScrollX + width > mTotalWidth) {                    
-                    mScrollX -= (int) distanceX;
+                if (distanceX > 0 && scrollX + width > mTotalWidth) {                    
+                    scrollX -= (int) distanceX;
                 }
-                mTargetScrollX = mScrollX;
+                mTargetScrollX = scrollX;
+                scrollTo(scrollX, getScrollY());
                 hidePreview();
                 invalidate();
                 return true;
@@ -167,7 +169,7 @@
         setWillNotDraw(false);
         setHorizontalScrollBarEnabled(false);
         setVerticalScrollBarEnabled(false);
-        mScrollX = 0;
+        scrollTo(0, getScrollY());
     }
     
     /**
@@ -210,7 +212,7 @@
         final Rect bgPadding = mBgPadding;
         final Paint paint = mPaint;
         final int touchX = mTouchX;
-        final int scrollX = mScrollX;
+        final int scrollX = getScrollX();
         final boolean scrolled = mScrolled;
         final boolean typedWordValid = mTypedWordValid;
         final int y = (int) (height + mPaint.getTextSize() - mDescent) / 2;
@@ -261,23 +263,30 @@
             x += wordWidth;
         }
         mTotalWidth = x;
-        if (mTargetScrollX != mScrollX) {
+        if (mTargetScrollX != scrollX) {
             scrollToTarget();
         }
     }
     
     private void scrollToTarget() {
-        if (mTargetScrollX > mScrollX) {
-            mScrollX += SCROLL_PIXELS;
-            if (mScrollX >= mTargetScrollX) {
-                mScrollX = mTargetScrollX;
+        int scrollX = getScrollX();
+        if (mTargetScrollX > scrollX) {
+            scrollX += SCROLL_PIXELS;
+            if (scrollX >= mTargetScrollX) {
+                scrollX = mTargetScrollX;
+                scrollTo(scrollX, getScrollY());
                 requestLayout();
+            } else {
+                scrollTo(scrollX, getScrollY());
             }
         } else {
-            mScrollX -= SCROLL_PIXELS;
-            if (mScrollX <= mTargetScrollX) {
-                mScrollX = mTargetScrollX;
+            scrollX -= SCROLL_PIXELS;
+            if (scrollX <= mTargetScrollX) {
+                scrollX = mTargetScrollX;
+                scrollTo(scrollX, getScrollY());
                 requestLayout();
+            } else {
+                scrollTo(scrollX, getScrollY());
             }
         }
         invalidate();
@@ -291,7 +300,7 @@
         }
         mShowingCompletions = completions;
         mTypedWordValid = typedWordValid;
-        mScrollX = 0;
+        scrollTo(0, getScrollY());
         mTargetScrollX = 0;
         mHaveMinimalSuggestion = haveMinimalSuggestion;
         // Compute the total width
@@ -305,8 +314,8 @@
         final int count = mSuggestions.size();
         int firstItem = 0; // Actually just before the first item, if at the boundary
         while (i < count) {
-            if (mWordX[i] < mScrollX 
-                    && mWordX[i] + mWordWidth[i] >= mScrollX - 1) {
+            if (mWordX[i] < getScrollX() 
+                    && mWordX[i] + mWordWidth[i] >= getScrollX() - 1) {
                 firstItem = i;
                 break;
             }
@@ -319,9 +328,10 @@
     
     public void scrollNext() {
         int i = 0;
-        int targetX = mScrollX;
+        int scrollX = getScrollX();
+        int targetX = scrollX;
         final int count = mSuggestions.size();
-        int rightEdge = mScrollX + getWidth();
+        int rightEdge = scrollX + getWidth();
         while (i < count) {
             if (mWordX[i] <= rightEdge &&
                     mWordX[i] + mWordWidth[i] >= rightEdge) {
@@ -334,7 +344,7 @@
     }
 
     private void updateScrollPosition(int targetX) {
-        if (targetX != mScrollX) {
+        if (targetX != getScrollX()) {
             // TODO: Animate
             mTargetScrollX = targetX;
             requestLayout();
@@ -452,7 +462,7 @@
                         + mPreviewText.getPaddingLeft() + mPreviewText.getPaddingRight();
                 final int popupHeight = mPreviewText.getMeasuredHeight();
                 //mPreviewText.setVisibility(INVISIBLE);
-                mPopupPreviewX = mWordX[wordIndex] - mPreviewText.getPaddingLeft() - mScrollX;
+                mPopupPreviewX = mWordX[wordIndex] - mPreviewText.getPaddingLeft() - getScrollX();
                 mPopupPreviewY = - popupHeight;
                 mHandler.removeMessages(MSG_REMOVE_PREVIEW);
                 int [] offsetInWindow = new int[2];
