private void tick() {
	for (Iterator<Remote> it = remotes.iterator(); it.hasNext();) {
	    final Remote r = it.next();
	    if (r instanceof Server && !remoteThreads.containsKey(r)) {
		Thread t = new Thread() {
		    public void run() {
			while (true) {
			    ((Server) r).processPackets();

			    try {
				Thread.sleep(10);
			    } catch (InterruptedException e) {
				e.printStackTrace();
			    }
			}
		    }
		};
		remoteThreads.put(r, t);
		t.start();
	    }
	    if (r.left() || r.getSocket().isClosed()) {
		try {
		    remoteThreads.get(r).join(10);
		} catch (InterruptedException e) {
		}
		remoteThreads.remove(r);
	    }
	}
	for (Iterator<Remote> it = remotes.iterator(); it.hasNext();) {
	    if (it.next().left())
		it.remove();
	}
	if (currentScreen != null)
	    currentScreen.tick();
    }