diff --git a/src/plugins/qmlprofiler/qml/MainView.qml b/src/plugins/qmlprofiler/qml/MainView.qml
index e8bce8ea0dbf42c0ae46fa631b124e6a4f35b6bd..8d8fe25d69b1f247ef2c5507ed722bf5ecb32570 100644
--- a/src/plugins/qmlprofiler/qml/MainView.qml
+++ b/src/plugins/qmlprofiler/qml/MainView.qml
@@ -309,8 +309,11 @@ Rectangle {
         boundsBehavior: Flickable.StopAtBounds
 
         // ScrollView will try to deinteractivate it. We don't want that
-        // as the horizontal flickable is interactive, too.
-        onInteractiveChanged: interactive = true
+        // as the horizontal flickable is interactive, too. We do occasionally
+        // switch to non-interactive ourselves, though.
+        property bool stayInteractive: true
+        onInteractiveChanged: interactive = stayInteractive
+        onStayInteractiveChanged: interactive = stayInteractive
 
         // ***** child items
         TimeMarks {
@@ -429,6 +432,9 @@ Rectangle {
                 onPressed:  {
                     selectionRange.pressedOnCreation();
                 }
+                onCanceled: {
+                    selectionRange.releasedOnCreation();
+                }
                 onPositionChanged: {
                     selectionRange.movedOnCreation();
                 }
diff --git a/src/plugins/qmlprofiler/qml/SelectionRange.qml b/src/plugins/qmlprofiler/qml/SelectionRange.qml
index 78e09cfb40c8da092cf918471a67d9bdb8ee98cc..381aa27c74517c61e09430386f3ce9edab1bd734 100644
--- a/src/plugins/qmlprofiler/qml/SelectionRange.qml
+++ b/src/plugins/qmlprofiler/qml/SelectionRange.qml
@@ -42,6 +42,7 @@ RangeMover {
     property real duration: Math.max(getWidth() * viewTimePerPixel, 500)
     property real viewTimePerPixel: 1
     property int creationState : 0
+    property int creationReference : 0
 
     Connections {
         target: zoomControl
@@ -65,6 +66,7 @@ RangeMover {
     function reset(setVisible) {
         setRight(getLeft() + 1);
         creationState = 0;
+        creationReference = 0;
         visible = setVisible;
     }
 
@@ -75,18 +77,21 @@ RangeMover {
             pos = width;
 
         switch (creationState) {
-        case 1: {
+        case 1:
+            creationReference = pos;
             setLeft(pos);
             setRight(pos + 1);
             break;
-        }
-        case 2: {
-            setLeft(Math.min(getLeft(), pos));
-            setRight(Math.max(getRight(), pos));
+        case 2:
+            if (pos > creationReference) {
+                setLeft(creationReference);
+                setRight(pos);
+            } else if (pos < creationReference) {
+                setLeft(pos);
+                setRight(creationReference);
+            }
             break;
         }
-        default: return;
-        }
     }
 
 
@@ -104,6 +109,7 @@ RangeMover {
     function releasedOnCreation() {
         if (selectionRange.creationState === 2) {
             flick.interactive = true;
+            vertflick.stayInteractive = true;
             selectionRange.creationState = 3;
             selectionRangeControl.enabled = false;
         }
@@ -112,6 +118,7 @@ RangeMover {
     function pressedOnCreation() {
         if (selectionRange.creationState === 1) {
             flick.interactive = false;
+            vertflick.stayInteractive = false;
             selectionRange.setPos(selectionRangeControl.mouseX + flick.contentX);
             selectionRange.creationState = 2;
         }