public void run() {
		boolean failDrag = false;
		for (int pass = 0; pass < 2; pass++) {
			if ( failDrag ) {
				break;
			}
			for (CoverDetails cd : sels) {
				// Should we fail all covers in the drag if one is over another cover
				Point p = new Point(cd.getX()+pDelta.x, cd.getY()+pDelta.y);
				if ( pass == 0 ) {
				    if ( p.x < 0 || p.y < 0 ) {
				        failDrag = true;
				        break;
				    }
					CoverDetails curr = viewer.getSelectedAt(p.x, p.y);
					if ( curr != null && !sels.contains(curr) && !curr.isUndefinedPosition() ) {
						System.out.println("Already got "+viewer.getSelectedAt(p.x, p.y)+" at "+p);
						failDrag = true;
						break;
					}
				} else {
					cd.setHidden(false);
					cd.setUndefinedPosition(false);
					cd.setXY(p.x, p.y);
				}
			}
		}
		viewer.mainViewer.saveLayout();
	}