diff --git a/src/containers/stage.jsx b/src/containers/stage.jsx
index 8e1ac9248396c3faa44f20b8eb50fe0e3066e888..3a61f5b174e82b897e2ad4294fc84ba8c9f0ee94 100644
--- a/src/containers/stage.jsx
+++ b/src/containers/stage.jsx
@@ -342,16 +342,24 @@ class Stage extends React.Component {
     }
     onStartDrag (x, y) {
         if (this.state.dragId) return;
-        const drawableId = this.renderer.pick(x, y);
+
+        // Because pick queries are expensive, only perform them for drawables that are currently draggable.
+        let draggableTargets = this.props.vm.runtime.targets;
+        if (!this.props.useEditorDragStyle) {
+            draggableTargets = draggableTargets.filter(
+                target => Number.isFinite(target.drawableID) && target.draggable
+            );
+        }
+        if (draggableTargets.length === 0) return;
+
+        const draggableIDs = draggableTargets.map(target => target.drawableID);
+        const drawableId = this.renderer.pick(x, y, 1, 1, draggableIDs);
         if (drawableId === null) return;
         const targetId = this.props.vm.getTargetIdForDrawableId(drawableId);
         if (targetId === null) return;
 
         const target = this.props.vm.runtime.getTargetById(targetId);
 
-        // Do not start drag unless in editor drag mode or target is draggable
-        if (!(this.props.useEditorDragStyle || target.draggable)) return;
-
         // Dragging always brings the target to the front
         target.goToFront();