diff --git a/api/current.xml b/api/current.xml
index 7cb44d1..8a9e4ce 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -177258,6 +177258,8 @@
 </parameter>
 <parameter name="maxOverscrollY" type="int">
 </parameter>
+<parameter name="isTouchEvent" type="boolean">
+</parameter>
 </method>
 <method name="performClick"
  return="boolean"
@@ -385546,7 +385548,7 @@
  deprecated="not deprecated"
  visibility="public"
 >
-<parameter name="text" type="java.lang.String">
+<parameter name="message" type="java.lang.String">
 </parameter>
 </method>
 </class>
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index e83b9b5..e1d9c30 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -8686,13 +8686,15 @@
      *          along the X axis.
      * @param maxOverscrollY Number of pixels to overscroll by in either direction
      *          along the Y axis.
+     * @param isTouchEvent true if this scroll operation is the result of a touch event.
      * @return true if scrolling was clamped to an overscroll boundary along either
      *          axis, false otherwise.
      */
     protected boolean overscrollBy(int deltaX, int deltaY,
             int scrollX, int scrollY,
             int scrollRangeX, int scrollRangeY,
-            int maxOverscrollX, int maxOverscrollY) {
+            int maxOverscrollX, int maxOverscrollY,
+            boolean isTouchEvent) {
         final int overscrollMode = mOverscrollMode;
         final boolean canScrollHorizontal = 
                 computeHorizontalScrollRange() > computeHorizontalScrollExtent();
@@ -8770,10 +8772,11 @@
             clampedY = true;
         }
         
-        // Bump the device with some haptic feedback if we're at the edge
-        // and didn't start there.
-        if ((overscrollHorizontal && clampedX && scrollX != left && scrollX != right) ||
-                (overscrollVertical && clampedY && scrollY != top && scrollY != bottom)) {
+        // Bump the device with some haptic feedback if we're at the edge,
+        // didn't start there, and the scroll is the result of a touch event.
+        if (isTouchEvent &&
+                ((overscrollHorizontal && clampedX && scrollX != left && scrollX != right) ||
+                (overscrollVertical && clampedY && scrollY != top && scrollY != bottom))) {
             performHapticFeedback(HapticFeedbackConstants.SCROLL_BARRIER);
         }
 
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 3a34fb4..39b87fe 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -2670,7 +2670,7 @@
             if (oldX != x || oldY != y) {
                 overscrollBy(x - oldX, y - oldY, oldX, oldY,
                         computeMaxScrollX(), computeMaxScrollY(),
-                        getViewWidth() / 3, getViewHeight() / 3);
+                        getViewWidth() / 3, getViewHeight() / 3, false);
                 onScrollChanged(mScrollX, mScrollY, oldX, oldY);
             }
         } else {
@@ -5021,7 +5021,7 @@
         if ((deltaX | deltaY) != 0) {
             overscrollBy(deltaX, deltaY, mScrollX, mScrollY,
                     computeMaxScrollX(), computeMaxScrollY(),
-                    getViewWidth() / 3, getViewHeight() / 3);
+                    getViewWidth() / 3, getViewHeight() / 3, true);
         }
         if (!getSettings().getBuiltInZoomControls()) {
             boolean showPlusMinus = mMinZoomScale < mMaxZoomScale;
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index e901cc5..a78429e 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -2133,7 +2133,7 @@
                             int overscroll = -incrementalDeltaY - 
                                     (motionViewRealTop - motionViewPrevTop);
                             overscrollBy(0, overscroll, 0, mScrollY, 0, 0,
-                                    0, getOverscrollMax());
+                                    0, getOverscrollMax(), true);
                             mTouchMode = TOUCH_MODE_OVERSCROLL;
                             invalidate();
                         }
@@ -2178,7 +2178,7 @@
                         }
                     } else {
                         overscrollBy(0, -incrementalDeltaY, 0, mScrollY, 0, 0,
-                                0, getOverscrollMax());
+                                0, getOverscrollMax(), true);
                         invalidate();
                     }
                     mLastY = y;
@@ -2674,7 +2674,8 @@
                     if (motionView != null) {
                         // Tweak the scroll for how far we overshot
                         int overshoot = -(delta - (motionView.getTop() - oldTop));
-                        overscrollBy(0, overshoot, 0, mScrollY, 0, 0, 0, getOverscrollMax());
+                        overscrollBy(0, overshoot, 0, mScrollY, 0, 0,
+                                0, getOverscrollMax(), false);
                     }
                     float vel = scroller.getCurrVelocity();
                     if (delta > 0) {
@@ -2706,7 +2707,8 @@
                 if (scroller.computeScrollOffset()) {
                     final int scrollY = mScrollY;
                     final int deltaY = scroller.getCurrY() - scrollY;
-                    if (overscrollBy(0, deltaY, 0, scrollY, 0, 0, 0, getOverscrollMax())) {
+                    if (overscrollBy(0, deltaY, 0, scrollY, 0, 0,
+                            0, getOverscrollMax(), false)) {
                         startSpringback();
                     } else {
                         invalidate();
diff --git a/core/java/android/widget/HorizontalScrollView.java b/core/java/android/widget/HorizontalScrollView.java
index d80a5e3..702ce0a 100644
--- a/core/java/android/widget/HorizontalScrollView.java
+++ b/core/java/android/widget/HorizontalScrollView.java
@@ -508,7 +508,7 @@
                     final int oldX = mScrollX;
                     final int oldY = mScrollY;                    
                     overscrollBy(deltaX, 0, mScrollX, 0, getScrollRange(), 0,
-                            getOverscrollMax(), 0);
+                            getOverscrollMax(), 0, true);
                     onScrollChanged(mScrollX, mScrollY, oldX, oldY);
                 }
                 break;
@@ -1042,7 +1042,7 @@
 
             if (oldX != x || oldY != y) {
                 overscrollBy(x - oldX, y - oldY, oldX, oldY, getScrollRange(), 0,
-                        getOverscrollMax(), 0);
+                        getOverscrollMax(), 0, false);
                 onScrollChanged(mScrollX, mScrollY, oldX, oldY);
             }
 
diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java
index d7dfa86..68c0ff0 100644
--- a/core/java/android/widget/ScrollView.java
+++ b/core/java/android/widget/ScrollView.java
@@ -506,7 +506,7 @@
                     final int oldX = mScrollX;
                     final int oldY = mScrollY;
                     overscrollBy(0, deltaY, 0, mScrollY, 0, getScrollRange(),
-                            0, getOverscrollMax());
+                            0, getOverscrollMax(), true);
                     onScrollChanged(mScrollX, mScrollY, oldX, oldY);
                 }
                 break;
@@ -1044,7 +1044,7 @@
 
             if (oldX != x || oldY != y) {
                 overscrollBy(x - oldX, y - oldY, oldX, oldY, 0, getScrollRange(),
-                        0, getOverscrollMax());
+                        0, getOverscrollMax(), false);
                 onScrollChanged(mScrollX, mScrollY, oldX, oldY);
             }
             
