public synchronized boolean moveUp(int slotID) {
        if (!_isOpen) {
            return false;
        }
        if ((slotID < 0) || (slotID >= _slots.size())) {
            return false;
        }
        if (!_slots.get(slotID).isOccupied()) {
            return false;
        }

        int prevSlotID = slotID;  
        do {
            prevSlotID = (prevSlotID - 1 + _slots.size()) % _slots.size();

            if (_slots.get(prevSlotID).isOpen()) {
                Player player = _slots.get(slotID).getPlayer();
                _slots.get(slotID).setOpen();
                _slots.get(prevSlotID).setOccupied(player);
                break;
            }
        } while (slotID != prevSlotID);

        ArrayList<ClientThread> clients = new ArrayList<>(_clients.values());
        for (ClientThread client : clients) {
            client.send("moveUp");
            client.send(slotID);
        }

        return true;
    }