     layoutManager.enumerateLineFragmentsForGlyphRange(visibleGlyphs, usingBlock: fragmentEnumerator)
   }
   
+  private func lineNumberOfLocationInTextView(loc:CGPoint) -> Int {
+    return Int((loc.y - textView.lineSpacing) / (textView.lineSpacing + textView.font.lineHeight) + 1)
+  }
+  
+  private func adjustLineViewsForDragLocation(loc:CGPoint) {
+    //calculate which line the drag is currently on
+    let lineNumber = lineNumberOfLocationInTextView(loc)
+    var maxLine = 0
+    for key in dragOverlayLabels.keys {
+      if key > maxLine {
+        maxLine = key
+      }
+    }
+    
+    //If the drag has moved up, we need to move some lines down potentially
+    if max(0,lineNumber) < draggedLineNumber {
+      for lineToMove in max(lineNumber,0)...(draggedLineNumber - 1) {
+        let labelToMove = dragOverlayLabels[lineToMove]!
+        //check if offset is supposed to move
+        if labelToMove.frame.origin.y == originalDragOverlayLabelOffsets[lineToMove]! {
+          //shift down
+          var oldFrame = labelToMove.frame
+          oldFrame.origin.y += textView.lineSpacing + textView.font.lineHeight
+          labelToMove.frame = oldFrame
+          labelToMove.setNeedsLayout()
+        }
+      }
+    } else if min(lineNumber,maxLine) > draggedLineNumber {
+      for lineToMove in (draggedLineNumber + 1)...min(lineNumber,maxLine) {
+        let labelToMove = dragOverlayLabels[lineToMove]!
+        if labelToMove.frame.origin.y == originalDragOverlayLabelOffsets[lineToMove]! {
+          var oldFrame = labelToMove.frame
+          oldFrame.origin.y -= textView.lineSpacing + textView.font.lineHeight
+          labelToMove.frame = oldFrame
+          labelToMove.setNeedsLayout()
+          println("Moved line \(lineToMove)")
+        }
+      }
+      
+    } else if lineNumber == draggedLineNumber {
+      //println("Should maybe move lines back? Drag on dragged line number!")
+    }
+    
+    
+    
+  }
+  
   private func clearLineOverlayLabels() {
     for (index, label) in dragOverlayLabels {
       label.removeFromSuperview()

      draggedLabel = createDraggedLabel(lineFragmentRect, loc: locationInParentView, characterRange: characterRange)
      draggedCharacterRange = characterRange
      parentViewController!.view.addSubview(draggedLabel)
      
      //Create the solid colored label that covers up the dragged text in the text view
      coverTextView = createCoverTextView(rectToCover: textView.bounds)
      textView.addSubview(coverTextView)

    // Do any additional setup after loading the view.
    dragGestureRecognizer = UIPanGestureRecognizer(target: self, action: "handleDrag:")
    dragGestureRecognizer.delegate = self
  }
  
  func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
  }
