                 // We are drawing
                 currentStroke.addPoint(point)
                 
-            } else if let dragStart = makeConnectionDragStart {
+            } else if let drawConnectionInfo = currentDrawingConnection {
                 // 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)
+                var dragLine: CAShapeLayer?
+                switch drawConnectionInfo {
+                case let .FromConnector(connectorLabel):
+                    let targetPort = connectorPortAtLocation(point)?.ConnectorPort
+                    let labelPoint = closestPointOnRectPerimeter(point, CGRectInset(connectorLabel.frame, 1, 1))
+                    dragLine = createConnectionLayer(labelPoint, endPoint: point, color: targetPort?.color)
+                case let .FromConnectorPort(constraintView, connectorPort):
+                    let startPoint = self.scrollView.convertPoint(connectorPort.center, fromView: constraintView)
+                    var endPoint = point
+                    if let targetConnector = connectorLabelAtPoint(point) {
+                        endPoint = closestPointOnRectPerimeter(startPoint, targetConnector.frame)
+                    }
+                    dragLine = createConnectionLayer(startPoint, endPoint: endPoint, color: connectorPort.color)
+                }
+                
                 self.scrollView.layer.addSublayer(dragLine)
                 self.currentDrawConnectionLine = dragLine
             }

        self.unprocessedStrokes.removeAll(keepCapacity: false)
    }
    
    func connectorPortForDragAtLocation(location: CGPoint) -> (ConstraintView: ConstraintView, ConnectorPort: ConnectorPort)? {
        for constraintView in constraintViews {
            let point = constraintView.convertPoint(location, fromView: self.scrollView)
            if let port = constraintView.connectorPortForDragAtLocation(point) {

        
        switch recognizer.state {
        case .Began:
            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
