public void handleMovement() {
		synchronized (this.moving) { // we don't want anyone to modify this list while we're manipulating things
			for (final Mobile mobile : this.moving) {
				// synchronized(player) {
				// if the player is moving (something else could change this)
				if (mobile.isMoving()) {
					boolean isPlayer = false;

					Player player = null;

					if (mobile instanceof Player && !(mobile instanceof NPC)) {
						// final Player player = (Player) mobile;
						player = (Player) mobile;
						isPlayer = true;
					}

					final Point position = mobile.getPosition();       // current player position
					final Point destination = mobile.getDestination(); // current player destination

					if (position.getX() != destination.getX() || position.getY() != destination.getY() || position.getZ() != destination.getZ()) {
						if (isPlayer) {
							final String pos = position.getX() + ", " + position.getY();
							addMessage( new Message(null, player, "Current Location: " + pos) );
						}

						// move diagonally to reach the destination
						// NOTE: not the best way, but it'll have to til I can
						// implement some kind of pathfinding
						if (position.getX() < destination.getX()) {
							mobile.changePosition(1, 0, 0);
						}
						else if (position.getX() > destination.getX()) {
							mobile.changePosition(-1, 0, 0);
						}

						if (position.getY() < destination.getY()) {
							mobile.changePosition(0, 1, 0);
						}
						else if (position.getY() > destination.getY()) {
							mobile.changePosition(0, -1, 0);
						}

						if (position.getZ() < destination.getZ()) {
							mobile.changePosition(0, 0, 1);
						}
						else if (position.getZ() > destination.getZ()) {
							mobile.changePosition(0, 0, -1);
						}

						if (isPlayer) {
							// tell us about our new location
							String loc = position.getX() + ", " + position.getY();
							String dest = destination.getX() + ", " + destination.getY();
							
							addMessage( new Message(null, player, "New Location:         " + loc) );
							addMessage( new Message(null, player, "Destination Location: " + dest) );
						}

						// tell us if we reached the destination this time
						if (position.getX() == destination.getX() && position.getY() == destination.getY() && position.getY() == destination.getY()) {
							mobile.setMoving(false);

							// if the mobile is a Player (or NPC) and flys to
							// the ground they will be marked as not flying
							if (isPlayer) {
								final Race race = player.getRace();

								if (race.canFly()) {
									if (player.isFlying()) {
										final Point pt = player.getPosition();

										if (pt.getZ() == 0) {
											player.setFlying(false);
										}
									}
								}
							}

							moving.remove(mobile);

							if (isPlayer) {
								addMessage( new Message(null, player, "You have reached your destination") );
							}
						}
					}
				}
			}
		}