public ServerOperator(Monopoly monopoly, Loader loader) {
		this.monopoly = monopoly;
		destination = new HashMap<Integer, ClientOperator>();

		FieldCircularList go = monopoly.getGo();
		FieldCircularList currentField = go;
		do {
			//adds eventlisteners to every purchasable field and performs actions if needed
			if(currentField instanceof PurchasableCircularList) {
				final PurchasableCircularList purchasable = (PurchasableCircularList) currentField;
				purchasable.addPurchasableEventListener(new PurchasableEventListener() {
					@Override public void actionPerformed(PurchasableEvent event) {
						//synchronizes new purchasable data with every client
						for(ClientOperator client : destination.values()) {
							client.updateFieldData(purchasable.toFieldData());
						}
					}
				});
			}
			currentField = currentField.getNext();
		} while(!currentField.equals(go));

		Card start;
		Card currentCard;
		CardStack stack;

		//Register events at the event CardStack
		stack = loader.getEvent();
		start = stack.nextCard();
		currentCard = start;
		do {
			currentCard.addMessageEventListener(new MessageEventListener() {
				@Override public void actionPerformed(MessageEvent event) {
					sendCardData(event.getMessageData());
				}
			});
			currentCard = stack.nextCard();
		} while(!start.equals(currentCard));

		//Register Events at the community CardStack
		stack = loader.getCommunity();
		start = stack.nextCard();
		currentCard = start;
		do {
			currentCard.addMessageEventListener(new MessageEventListener() {
				@Override public void actionPerformed(MessageEvent event) {
					sendCardData(event.getMessageData());
				}
			});
			currentCard = stack.nextCard();
		} while(!start.equals(currentCard));
	}