         
         switch recognizer.state {
         case .Began:
-            for connectorLabel in self.connectorLabels {
-                if CGRectContainsPoint(connectorLabel.frame, point) {
-                    // We are dragging from a label
-                    makeConnectionDragStart = connectorLabel
-                    return
-                }
+            if let connectorLabel  = connectorLabelAtPoint(point) {
+                // We are dragging from a label
+                currentDrawingConnection = DrawConnectionInfo.FromConnector(connectorLabel)
+                return
+            }
+            if let (constraintView, connectorPort) = connectorPortAtLocation(point) {
+                // We are dragging from a constraint view
+                currentDrawingConnection = DrawConnectionInfo.FromConnectorPort(constraintView, connectorPort)
+                return
             }
             
             self.processStrokesCounter += 1

                // We are drawing
                currentStroke.addPoint(point)
                
            } else if let dragStart = makeConnectionDragStart {
                // We are dragging between connectors
                let targetConnector = connectorPortForDragAtLocation(point)?.ConnectorPort
                
                if let oldDragLine = currentDrawConnectionLine {
                    oldDragLine.removeFromSuperlayer()
                }
                let labelPoint = closestPointOnRectPerimeter(point, CGRectInset(dragStart.frame, 1, 1))
                let dragLine = createConnectionLayer(labelPoint, endPoint: point, color: targetConnector?.color)
                self.scrollView.layer.addSublayer(dragLine)
                self.currentDrawConnectionLine = dragLine
            }

        case FromConnectorPort(ConstraintView, ConnectorPort)
    }
    var currentDrawingConnection: DrawConnectionInfo?
    var currentDrawConnectionLine: CAShapeLayer?
    
    // For dragging views around
