Initial location of Node before drop

I want to swap locations of 2 nodes when Node A is Dropped on Node B.
I am doing this in DraggingTool.DropOnto method what is the most reliable way of finding out Node A’s location from where it was dragged so I can set that as location of Node B and move it o Node A’s Location. I dont think I can use FirstMousePointInModel as Node is quite big and has a small rectangle inside it set as LocationElement.

public class SwappingTool : DraggingTool {
private Point OriginalLocation;

public override void DoActivate() {
  if (this.CurrentPart is Node) {
    this.OriginalLocation = ((Node)this.CurrentPart).Location;

protected override void DropOnto(Point pt) {
  Node overPart = this.Diagram.Panel.FindElementAt<Node>(pt, Part.FindAncestor<Node>, n => (n != this.CurrentPart), SearchLayers.Nodes);
  if (overPart != null && this.CurrentPart is Node) {
    overPart.Location = this.OriginalLocation;
  } else {


Install by setting Diagram.DraggingTool with a new instance of this class, either in code or in XAML.

Thanks Walter

I forgot to mention that you should also deal with multiple selection. This code does not handle that.