private void saveLibraryEntry(LibraryEntry libraryEntry, List<SlateObject> filterList, boolean saveChallengeMonster)
	{
		List<Piece> pieces = new ArrayList<Piece>();
	
		Iterator<Entry<Integer,Map<Long,SlateObject>>> iterator = slateComponent.getObjectMap().entrySet().iterator();
		while (iterator.hasNext())
		{
			Entry<Integer,Map<Long,SlateObject>> entry = iterator.next();
			Integer symbolId = entry.getKey();
			if (!slateComponent.isTangible(symbolId)) continue;
			
			Map<Long,SlateObject> map = entry.getValue();
			Iterator<Entry<Long,SlateObject>> mapIterator = map.entrySet().iterator();
			while (mapIterator.hasNext())
			{
				Entry<Long,SlateObject> mapEntry = mapIterator.next();
				SlateObject slateObject = mapEntry.getValue();
			
				if ((filterList != null) && 
					slateComponent.isInFilterList(slateObject, filterList)) {
					continue;
				}
				
				Piece piece = slateComponent.getPiece(slateObject);
				pieces.add(piece);
			}
		}
		
		// save challenge monster
		Logger.info(saveChallengeMonster + "," + (challengeMonster != null));
		if (saveChallengeMonster && (challengeMonster != null))
		{
			Piece piece = slateComponent.getPiece(challengeMonster);
			pieces.add(piece);
		}
		
		if (pieces.size() > 0) {
			libraryEntry.setPieces(pieces);
			slateComponent.getLibrary().addLibraryEntry(libraryEntry);
		}
	}