@Override
	public void addProperRoom(Room R)
	{
		if(R==null) return;
		if(R.getArea()!=this)
		{
			R.setArea(this);
			return;
		}
		synchronized(properRooms)
		{
			final String roomID=R.roomID();
			if(roomID.length()==0)
			{
				if((R.getGridParent()!=null)
				&&(R.getGridParent().roomID().length()>0))
				{
					// for some reason, grid children always get the back of the bus.
					addProperRoomnumber(R.getGridParent().getGridChildCode(R));
					addMetroRoom(R);
				}
				return;
			}
			if(!properRooms.containsKey(R.roomID()))
				properRooms.put(R.roomID(),R);
			addProperRoomnumber(roomID);
			addMetroRoom(R);
		}
	}