public synchronized boolean moveDown(int slotID) {
        if (!_isOpen) {
            return false;
        }
        if ((slotID < 0) || (slotID >= _slots.size())) {
            return false;
        }
        if (!_slots.get(slotID).isOccupied()) {
            return false;
        }
        
        int nextSlotID = slotID;
        do {
            nextSlotID = (nextSlotID + 1) % _slots.size();
            
            if (_slots.get(nextSlotID).isOpen()) {
                Player player = _slots.get(slotID).getPlayer();
                _slots.get(slotID).setOpen();
                _slots.get(nextSlotID).setOccupied(player);
                break;
            }
        } while (slotID != nextSlotID);
        
        ArrayList<ClientThread> clients = new ArrayList<>(_clients.values());
        for (ClientThread client : clients) {
            client.send("moveDown");
            client.send(slotID);
        }

        return true;
    }