private void drawTokens(Graphics2D g2d) {
		g2d.setColor(Color.black);
		
		// stores a list of all tokens placed on a field
		HashMap<Field, List<Token> > fieldTokenMap = new HashMap<Field, List<Token> >();
		
		// in the first step group all tokens by fields
		for (Player p: this.game.getPlayers()) {
			Token token = p.getToken();
			int fieldIndex = token.getFieldIndex();
			Field field = this.gameBoard.getFields().get(fieldIndex);
			List<Token> tokenList = fieldTokenMap.get(field);
					
			if (tokenList != null) {
				tokenList.add(token);
			} else {
				List<Token> newTokenList = new ArrayList<Token>();
				newTokenList.add(token);
				fieldTokenMap.put(field,newTokenList);
			}
		}
		
		// iterate over all fields containing tokens
		for (Field currentField : fieldTokenMap.keySet()) {
			List<Token> tokenList = fieldTokenMap.get(currentField);
			int amountOfTokensOnField = tokenList.size();
			
			if (amountOfTokensOnField == 1) {
				// we only have on token, draw it centered
				Rectangle drawRect = currentField.getDrawingRectangle();
		     	AffineTransform oldTransform = g2d.getTransform();
		     	g2d.setTransform(currentField.getTransform());
		     		
				g2d.fillOval((int) (drawRect.x+(0.5*drawRect.width)), (int) (drawRect.y+(0.5*drawRect.height)), 10, 10);
				
				g2d.setTransform(oldTransform);
			} else {
				// we have multiple tokens, draw tokens at edge positions
				int i = 0;
				for (Token token: tokenList) {
	
					Rectangle newDrawRect = new Rectangle();
					
					int right 	= currentField.getDrawingRectangle().x + currentField.getDrawingRectangle().width;
					int left 	= currentField.getDrawingRectangle().x;
					int bottom 	= currentField.getDrawingRectangle().y + currentField.getDrawingRectangle().height;
					int top 	= currentField.getDrawingRectangle().y; 
					
			     	 switch (i) {
					 	case 0:  newDrawRect.x = right;
					 			 newDrawRect.y = top;
					 	 		 break;
			            case 1:  newDrawRect.x = right;
			 			 		 newDrawRect.y = bottom;
			                     break;
			            case 2:  newDrawRect.x = left;
			 			 	     newDrawRect.y = bottom;
			                     break;
			            case 3:  newDrawRect.x = left;
			 			 		 newDrawRect.y = top;
			 			 		 break;
					 }
			     	 
			     	AffineTransform oldTransform = g2d.getTransform();
			     	
			     	g2d.setTransform(currentField.getTransform());
					 
			     	//TODO: let token draw itself

					g2d.fillOval(newDrawRect.x, newDrawRect.y , 10, 10);
					
					g2d.setTransform(oldTransform);

					i++;
				}
			}	
		}

	}