anchor.diff:  open MonoDevelop.Projects
   open MonoDevelop.Ide
   open MonoDevelop.Ide.Gui
  +open MonoDevelop.Ide.Gui.Pads.ProjectPad
   
   open System.Collections.Generic
   open System.Linq
  
positive.code:         let findByIncludeFile name seq = 
              seq |> where (fun elem -> (elem |> attributeValue "Include") = Path.GetFileName(name) )
                  |> firstOrNone
  
          let movingElement = compileNodes |> findByIncludeFile movingNode.Name
          let moveToElement = compileNodes |> findByIncludeFile moveToNode.Name
  
          let addFunction (moveTo:XElement) (position:DropPosition) =
              match position with
  
negative.code:       if (file1.Project = file2.Project) && (file1.Project :? DotNetProject) && ((file1.Project :?> DotNetProject).LanguageName = "F#") then
              file1.Project.Files.IndexOf(file1).CompareTo(file2.Project.Files.IndexOf(file2))
        else NodeBuilder.DefaultSort
      | (:? ProjectFolder as folder1), (:? ProjectFolder as folder2) ->
           use file = IO.File.Open(folder1.Project.FileName.ToString(), FileMode.Open)
           let xdoc = XElement.Load(file)
           file.Close()
  
           //get the folders
           let folders = xdoc |> descendants (xs "http://schemas.microsoft.com/developer/msbuild/2003" "Folder") |> Seq.toArray
           let includes = folders |> Array.map (attributeValue "Include")
  
           //This can probably be replaced with something like whats in ProjectFile.VirtualProjectPath
           let getRealName (pf:ProjectFolder) =
               let rec loop (pf:ProjectFolder) current =
                   match pf.Parent with
                   | :? ProjectFolder as ppf ->
                      loop ppf (pf :: current)
                   | _ -> pf :: current
               let bits = loop pf []
               let path = bits |> Seq.map (fun pf -> pf.Name) |> String.concat "\\"
               path + "\\"
  
           let folder1RealName = getRealName folder1
           let folder2RealName = getRealName folder2
           let folder1Index = includes |> Array.tryFindIndex ((=) folder1RealName)
           let folder2Index = includes |> Array.tryFindIndex ((=) folder2RealName)
           match folder1Index, folder2Index with
           | Some(i1), Some(i2) -> 
              i2.CompareTo(i1)
           | _ -> NodeBuilder.DefaultSort
      | _ -> NodeBuilder.DefaultSort
  
    override x.CommandHandlerType = typeof<FSharpProjectNodeCommandHandler>
  