public String saveBoardAsLevel(final IGameData<E> gameData) throws InvalidLevelDataException {
		
		IBoard<E> board = gameData.getStepManager();
		StringBuffer line = null;
		StringBuffer result = new StringBuffer();
		for (int y = 0; y < board.getHeight(); y++) {
			line = new StringBuffer();
			for (int x = 0; x < board.getWidth(); x++) {
				try {
					line.append(levelInfoProvider.parseField(board.getElements(x, y)));
				} catch (InvalidLevelDataException e) {
					throw new InvalidLevelDataException("Could not store the field at " + x + "|" + y + " cause of invalid level data", e);
				}
			}

			while (line.length() > 0 && line.charAt(line.length() - 1) == SPACE) {
				line.deleteCharAt(line.length() - 1);
			}
			result.append(line);
			result.append("\n");
		}
		String tmp = levelInfoProvider.getNoneBoardInformationLineFor(gameData);
		if ((tmp != null) && (tmp.length() > 0)) {
			if (!tmp.startsWith(levelInfoProvider.getLinePrefixForNonBoardLines())) {
				result.append(levelInfoProvider.getLinePrefixForNonBoardLines());
			} 
			result.append(tmp);
		}
		return result.toString();
	}