diff --git a/gtk/gtk.symbols b/gtk/gtk.symbols
index 39f32f3..a5db838 100644
--- a/gtk/gtk.symbols
+++ b/gtk/gtk.symbols
@@ -3153,6 +3153,7 @@ gtk_range_get_fill_level
 gtk_range_get_inverted
 gtk_range_get_lower_stepper_sensitivity
 gtk_range_get_restrict_to_fill_level
+gtk_range_get_jump_to_position
 gtk_range_get_show_fill_level
 gtk_range_get_type G_GNUC_CONST
 gtk_range_get_update_policy
@@ -3165,6 +3166,7 @@ gtk_range_set_inverted
 gtk_range_set_lower_stepper_sensitivity
 gtk_range_set_range
 gtk_range_set_restrict_to_fill_level
+gtk_range_set_jump_to_position
 gtk_range_set_show_fill_level
 gtk_range_set_update_policy
 gtk_range_set_upper_stepper_sensitivity
diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c
index e926f70..d61f3da 100644
--- a/gtk/gtkrange.c
+++ b/gtk/gtkrange.c
@@ -53,7 +53,8 @@ enum {
   PROP_UPPER_STEPPER_SENSITIVITY,
   PROP_SHOW_FILL_LEVEL,
   PROP_RESTRICT_TO_FILL_LEVEL,
-  PROP_FILL_LEVEL
+  PROP_FILL_LEVEL,
+  PROP_JUMP_TO_POSITION
 };
 
 enum {
@@ -114,6 +115,7 @@ struct _GtkRangeLayout
   guint repaint_id;
 
   gdouble fill_level;
+  gboolean jump_to_position;
 
   GQuark slider_detail_quark;
   GQuark stepper_detail_quark;
@@ -441,6 +443,22 @@ gtk_range_class_init (GtkRangeClass *class)
                                                         G_MAXDOUBLE,
                                                         GTK_PARAM_READWRITE));
 
+  /**
+   * GtkRange:jump-to-position:
+   *
+   * Whether to jump to the destined position immediately
+   * instead of moving a number of steps
+   *
+   * Since: 2.16
+   */
+  g_object_class_install_property (gobject_class,
+                                   PROP_JUMP_TO_POSITION,
+                                   g_param_spec_boolean ("jump-to-position",
+                                                         P_("Jump to Position"),
+                                                         P_("Whether to jump to the destined position immediately instead of moving a number of steps"),
+                                                         FALSE,
+                                                         GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
   gtk_widget_class_install_style_property (widget_class,
 					   g_param_spec_int ("slider-width",
 							     P_("Slider Width"),
@@ -596,6 +614,9 @@ gtk_range_set_property (GObject      *object,
     case PROP_FILL_LEVEL:
       gtk_range_set_fill_level (range, g_value_get_double (value));
       break;
+    case PROP_JUMP_TO_POSITION:
+      gtk_range_set_jump_to_position (range, g_value_get_boolean (value));
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -639,6 +660,9 @@ gtk_range_get_property (GObject      *object,
     case PROP_FILL_LEVEL:
       g_value_set_double (value, gtk_range_get_fill_level (range));
       break;
+    case PROP_JUMP_TO_POSITION:
+      g_value_set_boolean (value, gtk_range_get_jump_to_position (range));
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -1180,6 +1204,50 @@ gtk_range_get_fill_level (GtkRange *range)
   return range->layout->fill_level;
 }
 
+/**
+ * gtk_range_set_jump_to_position:
+ * @range: A #GtkRange
+ * @jump_to_position: Whether to jump to the position immediately
+ *
+ * Sets whether scrolling through user interaction should
+ * jump directly to the destined position, as opposed to moving
+ * a number of steps towards the destination.
+ *
+ * Since: 2.16
+ **/
+void
+gtk_range_set_jump_to_position (GtkRange *range,
+                                gboolean  jump_to_position)
+{
+  g_return_if_fail (GTK_IS_RANGE (range));
+
+  if (jump_to_position != range->layout->jump_to_position)
+    {
+      range->layout->jump_to_position = jump_to_position;
+      g_object_notify (G_OBJECT (range), "jump-to-position");
+    }
+}
+
+/**
+ * gtk_range_get_jump_to_position:
+ * @range: A #GtkRange
+ *
+ * Determines whether the value should jump immediately to the
+ * destined position as opposed to moving a number of steps.
+ * See also gtk_range_set_jump_to_position().
+ *
+ * Return value: %TRUE if @range jumps directly to the destination
+ *
+ * Since: 2.16
+ **/
+gboolean
+gtk_range_get_jump_to_position (GtkRange *range)
+{
+  g_return_val_if_fail (GTK_IS_RANGE (range), FALSE);
+
+  return range->layout->jump_to_position;
+}
+
 static gboolean
 should_invert (GtkRange *range)
 {  
@@ -1976,7 +2044,7 @@ gtk_range_button_press (GtkWidget      *widget,
     gtk_widget_queue_draw (widget);
     
   if (range->layout->mouse_location == MOUSE_TROUGH  &&
-      event->button == 1)
+      event->button == 1 && !range->layout->jump_to_position)
     {
       /* button 1 steps by page increment, as with button 2 on a stepper
        */
@@ -2021,7 +2089,7 @@ gtk_range_button_press (GtkWidget      *widget,
       return TRUE;
     }
   else if ((range->layout->mouse_location == MOUSE_TROUGH &&
-            event->button == 2) ||
+            (event->button == 2 || range->layout->jump_to_position)) ||
            range->layout->mouse_location == MOUSE_SLIDER)
     {
       gboolean need_value_update = FALSE;
@@ -2032,7 +2100,7 @@ gtk_range_button_press (GtkWidget      *widget,
        * On button 2 press, we warp the slider to mouse position,
        * then begin the slider drag.
        */
-      if (event->button == 2)
+      if (event->button == 2 || range->layout->jump_to_position)
         {
           gdouble slider_low_value, slider_high_value, new_value;
           
diff --git a/gtk/gtkrange.h b/gtk/gtkrange.h
index 08860f8..4789e47 100644
--- a/gtk/gtkrange.h
+++ b/gtk/gtkrange.h
@@ -173,6 +173,10 @@ gboolean           gtk_range_get_restrict_to_fill_level    (GtkRange      *range
 void               gtk_range_set_fill_level                (GtkRange      *range,
                                                             gdouble        fill_level);
 gdouble            gtk_range_get_fill_level                (GtkRange      *range);
+void               gtk_range_set_jump_to_position          (GtkRange      *range,
+                                                            gboolean       jump_to_position);
+gboolean           gtk_range_get_jump_to_position          (GtkRange      *range);
+
 
 /* internal API */
 gdouble            _gtk_range_get_wheel_delta              (GtkRange      *range,
