public void move(Box toBox) {
		if (!(this instanceof gameLogic.Movable)) {
			return;
		}
		
		if (!getBox().isAdjacentTo(toBox)) {
			return;
		}
		
		Box oldBox = getBox();
		
		try {
			getBox().getChart().place(this, toBox);
		} catch (BoxBusyException e) {
			return;
			// TODO: handle exception
		}
		
		// Stream the event
		MoveEvent evt = new MoveEvent((Movable)this, oldBox, toBox);
		
		Object[] listeners = getListeners().getListenerList();
        
        for (int i = 0; i < listeners.length; i += 2) {
            if (listeners[i] == EntityListener.class) {
            	((EntityListener)listeners[i+1]).EntityEventOccurred(evt);
            }
        }
        
        // If it has a turn, process it
        if (this instanceof PlayableEntity) {
        	if (((PlayableEntity)this).isOnTurn()) {
        		((PlayableEntity)this).performTurnAction(Turn.Action.Move);
        	}
        }
	}