   let textContainer = NSTextContainer()
   var draggedLabel:UILabel!
   var draggedCharacterRange:NSRange!
+  var draggedLineNumber = -1
   var coverTextView:UIView!
   var deleteOverlayView:UIView!
   let deleteOverlayWidth:CGFloat = 75
   var dragGestureRecognizer:UIPanGestureRecognizer!
   var dragOverlayLabels:[Int:UILabel] = Dictionary<Int,UILabel>()
+  var originalDragOverlayLabelOffsets:[Int:CGFloat] = Dictionary<Int,CGFloat>()
   let currentFont = UIFont(name: "Courier", size: 22)
   var textView:EditorTextView! {
     didSet {

    layoutManager.enumerateLineFragmentsForGlyphRange(visibleGlyphs, usingBlock: fragmentEnumerator)
  }
  
  private func clearLineOverlayLabels() {
    for (index, label) in dragOverlayLabels {
      label.removeFromSuperview()

    let visibleCharacterRange = layoutManager.glyphRangeForBoundingRect(textView.frame, inTextContainer: textContainer)
    let visibleGlyphs = layoutManager.glyphRangeForCharacterRange(visibleCharacterRange, actualCharacterRange: nil)
    //when I refer to line numbers, I am referring to them by height, not in the document
    var currentLineNumber = 1
    func fragmentEnumerator(aRect:CGRect, aUsedRect:CGRect, textContainer:NSTextContainer!, glyphRange:NSRange, stop:UnsafeMutablePointer<ObjCBool>) -> Void {
      let fragmentCharacterRange = layoutManager.characterRangeForGlyphRange(glyphRange, actualGlyphRange: nil)
      let fragmentParagraphRange = textStorage.string()!.paragraphRangeForRange(fragmentCharacterRange)
      if NSEqualRanges(draggedCharacterRange, fragmentParagraphRange) {
        //This means we've found the dragged line
        currentLineNumber++
        return
      }
      if fragmentCharacterRange.location == fragmentCharacterRange.location {
        //get the bounding rect for the paragraph
        var labelTextFrame = aRect
        labelTextFrame.size.height = textView.font.lineHeight + textView.lineSpacing
        let label = UILabel(frame: aRect)
