anchor.diff:  open MonoDevelop.Ide.Editor
   open MonoDevelop.Ide.Editor.Extension
   
  -type FSharpIndentationTracker(data:TextEditor) = 
  +type FSharpTextPasteHandler(editor:TextEditor) =
  +    inherit TextPasteHandler()
  +    override x.GetCopyData(_offset, _length) = [||]
  +    override x.PostFomatPastedText (_offset, _length) = ()
  +
  +    override x.FormatPlainText(offset, text, _copyData) =
  +        if editor.Options.IndentStyle = IndentStyle.Smart ||
  +           editor.Options.IndentStyle = IndentStyle.Virtual then
  +            let location = editor.OffsetToLocation offset
  +            if location.Column > 1 then
  +                let getIndent (line:string) =
  +                    line.Length - (String.trimStart [|' '|] line).Length
  +
  +                let fixIndent (line:string, indentDifference:int) =
  +                    if indentDifference > 0 then
  +                        (String(' ', indentDifference)) + line
  +                    else
  +                        line.Substring -indentDifference
  +
  +                let line = location.Line
  +
  +                let indent = editor.GetLineIndent line
  +                let lines = String.getLines text
  +                let firstLine = lines.[0]
  +                let indentDifference = indent.Length - getIndent firstLine
  +                let remainingLines = lines |> Seq.skip (1) 
  +                                           |> Seq.map(fun line -> fixIndent(line, indentDifference))
  +                let lines = remainingLines
  +                            |> Seq.append (seq [(String.trimStart [|' '|] firstLine)])
  +                let res = String.Join (editor.Options.DefaultEolMarker, lines)
  +                res
  +            else
  +                text
  +        else
  +            text
  +
  +type FSharpIndentationTracker(editor:TextEditor) = 
       inherit IndentationTracker ()
  -    let indentSize = data.Options.IndentationSize
  +    let indentSize = editor.Options.IndentationSize
  +    do
  +         editor.SetTextPasteHandler (FSharpTextPasteHandler(editor))
   
       // Lines ending in  these strings will be indented
       let indenters = ["=";" do"; "("; "{";"[";"[|";"->";" try"; " then"; " else"; "("]
  
positive.code:     let rec getIndentation lineDistance (line: IDocumentLine) = 
          if line = null then "" else
  
          match data.GetLineText(line.LineNumber).TrimEnd() with
          | x when String.IsNullOrWhiteSpace(x) -> getIndentation (lineDistance + 1) line.PreviousLine
          | Match i   when lineDistance < 2 -> String(' ', i)
          | AddIndent when lineDistance < 2 -> String(' ', line.GetIndentation(data).Length + indentSize)
          | _ -> line.GetIndentation data
    
      let getIndentString lineNumber =  
          let caretColumn = data.CaretColumn
          let line = data.GetLine lineNumber
  
          let indentation = getIndentation 0 line
          if line = null then indentation else
          // Find white space in front of the caret and strip it out
          let text = data.GetLineText(line.LineNumber)
          //TODO using 0 instead of column, which we dont have now
          let reIndent = 0 = text.Length + 1 && caretColumn = 1 
          if not reIndent then indentation else
  
negative.code: 
      override x.GetIndentationString (lineNumber) =
          try
              let line = editor.GetLine (lineNumber)
              let indent =
                if line = null then "" else
                  getIndentString lineNumber
  