void processMouseMoved(MouseEvent e) {

		super.processMouseMoved(e);

		if (model.getJob() != null && !model.getJob().isStopped())
			return;

		int x = e.getX();
		int y = e.getY();

		if (callOutMouseMoved(x, y))
			return;
		if (handleMouseMoved(x, y))
			return;

		switch (actionID) {

		case SELE_ID:
			if (selectedComponent instanceof RectangularObstacle) {
				switch (((RectangularObstacle) selectedComponent).getPositionCode(x, y)) {
				case RectangularObstacle.NW:
					setCursor(Cursor.getPredefinedCursor(Cursor.NW_RESIZE_CURSOR));
					return;
				case RectangularObstacle.NORTH:
					setCursor(Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR));
					return;
				case RectangularObstacle.NE:
					setCursor(Cursor.getPredefinedCursor(Cursor.NE_RESIZE_CURSOR));
					return;
				case RectangularObstacle.EAST:
					setCursor(Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR));
					return;
				case RectangularObstacle.SE:
					setCursor(Cursor.getPredefinedCursor(Cursor.SE_RESIZE_CURSOR));
					return;
				case RectangularObstacle.SOUTH:
					setCursor(Cursor.getPredefinedCursor(Cursor.S_RESIZE_CURSOR));
					return;
				case RectangularObstacle.SW:
					setCursor(Cursor.getPredefinedCursor(Cursor.SW_RESIZE_CURSOR));
					return;
				case RectangularObstacle.WEST:
					setCursor(Cursor.getPredefinedCursor(Cursor.W_RESIZE_CURSOR));
					return;
				}
			}
			ModelComponent mc = getRolloverComponent(x, y);
			setCursor(mc != null ? UserAction.getCursor(actionID) : Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
			break;

		case ADDA_ID:
		case ADDB_ID:
		case ADDC_ID:
		case ADDD_ID:
			addAtomIndicator.x = x - addAtomIndicator.width * 0.5f;
			addAtomIndicator.y = y - addAtomIndicator.height * 0.5f;
			repaint();
			break;

		case ADDI_ID:
		case WATE_ID:
		case BENZ_ID:
		case ADCH_ID:
			if (addObjectIndicator != null) {
				addObjectIndicator.setPainted(true);
				addObjectIndicator.setLocation(x, y);
				repaint();
			}
			break;

		case RCUR_ID:
		case SCUR_ID:
		case SFRE_ID:
			if (smartPoly != null) {
				updateSmartShape(x, y);
				repaint();
			}
			break;

		case RCIR_ID:
		case SCIR_ID:
		case RREC_ID:
		case SREC_ID:
			updateSmartShape(x, y);
			repaint();
			break;

		case HEAT_ID:
		case COOL_ID:
			pointHeater.setLocation(x, y);
			repaint();
			break;

		case ROTA_ID:
			if (selectedComponent instanceof Rotatable) {
				setCursor(((Rotatable) selectedComponent).getRotationHandle(x, y) != -1 ? rotateCursor1 : previousCursor);
			}
			break;

		case VELO_ID:
			if (selectedComponent instanceof Atom) {
				Atom a = (Atom) selectedComponent;
				if (a.velocitySelected()) {
					if (a.isVelocityHandleSelected(x, y)) {
						setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
						readyToAdjustVelocityVector = true;
					} else {
						setCursor(previousCursor);
						readyToAdjustVelocityVector = false;
					}
				}
			}
			break;

		case MEAS_ID:
			if (selectedComponent instanceof Atom) {
				Atom a = (Atom) selectedComponent;
				indexOfSelectedMeasurement = a.getMeasurement(x, y);
				if (indexOfSelectedMeasurement >= 0) {
					setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
					readyToAdjustDistanceVector = true;
				} else {
					setCursor(previousCursor);
					readyToAdjustDistanceVector = false;
				}
			}
			break;

		case SBOU_ID:
			if (boundary.getBoundRectUpperLeft().contains(x, y)) {
				boundary.setHandle(RectangularBoundary.UPPER_LEFT);
				setCursor(Cursor.getPredefinedCursor(Cursor.NW_RESIZE_CURSOR));
				return;
			}
			if (boundary.getBoundRectLowerLeft().contains(x, y)) {
				boundary.setHandle(RectangularBoundary.LOWER_LEFT);
				setCursor(Cursor.getPredefinedCursor(Cursor.NE_RESIZE_CURSOR));
				return;
			}
			if (boundary.getBoundRectUpperRight().contains(x, y)) {
				boundary.setHandle(RectangularBoundary.UPPER_RIGHT);
				setCursor(Cursor.getPredefinedCursor(Cursor.SW_RESIZE_CURSOR));
				return;
			}
			if (boundary.getBoundRectLowerRight().contains(x, y)) {
				boundary.setHandle(RectangularBoundary.LOWER_RIGHT);
				setCursor(Cursor.getPredefinedCursor(Cursor.SE_RESIZE_CURSOR));
				return;
			}
			boundary.setHandle(-1);
			setCursor(previousCursor);
			break;

		}

		e.consume();

	}