protected void processMouseMovedEvent(MouseEvent e) {

		// let the tool tip show the current coordinates
		setToolTipText("(" + format.format((e.getX() - origin.x) / xScale) + ", "
				+ format.format(-(e.getY() - origin.y) / yScale) + ")");

		e.translatePoint(-origin.x, -origin.y);
		int x = e.getX();
		int y = e.getY();

		if (isEnabled()) {

			Ellipse2D hp;
			boolean b = false;

			synchronized (data) {// lock "data"
				if (!data.isEmpty()) {
					for (DataSource ds : data) {
						if (!ds.getHideHotSpot()) {
							hp = ds.getHotSpot();
							if (hp != null) {
								linkHotSpotToHandle(hp);
								if (handle.contains(x, y)) {
									b = true;
									break;
								}
							}
						}
						else {
							Point2D p = ds.isProximate(x / xScale, y / yScale, Math.max(5 / xScale, 5 / yScale));
							if (p != null) {
								b = true;
								break;
							}
						}
					}
				}
			}
			setCursor(b ? Cursor.getPredefinedCursor(Cursor.HAND_CURSOR) : Cursor
					.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
		}

		e.consume();

	}