private void addCrew() {
		squareSelector.reset();
		squareSelector.setCriteria(new SquareCriteria() {
			private final String desc = "Add: Crew";

			public String getDescription() { return desc; }

			public boolean isSquareValid( SquareSelector squareSelector, int roomId, int squareId ) {
				if ( roomId < 0 || squareId < 0 ) return false;
				if ( blockedRegions.contains( squareSelector.getSquareRectangle() ) ) return false;

				for (CrewSprite crewSprite : crewSprites) {
					if ( crewSprite.getRoomId() == roomId && crewSprite.getSquareId() == squareId ) {
						return false;
					}
				}
				return true;
			}
		});
		squareSelector.setCallback(new SquareSelectionCallback() {
			public boolean squareSelected( SquareSelector squareSelector, int roomId, int squareId ) {
				Point center = squareSelector.getSquareCenter();
				SavedGameParser.CrewState crewState = new SavedGameParser.CrewState();
				crewState.setRoomId( roomId );
				crewState.setRoomSquare( squareId );
				crewState.setSpriteX( center.x - originX - tileEdge + shipLayout.getOffsetX()*squareSize );
				crewState.setSpriteY( center.y - originY - tileEdge + shipLayout.getOffsetY()*squareSize );
				addCrewSprite( center.x, center.y, crewState );
				shipPanel.repaint();
				return true;
			}
		});
		squareSelector.setVisible(true);
	}