@Override
	public List<Environmental> addRealEstateTitles(List<Environmental> V, MOB buyer, CoffeeShop shop, Room myRoom)
	{
		if((myRoom==null)||(buyer==null))
			return V;
		final Area myArea=myRoom.getArea();
		String name=buyer.Name();
		Pair<Clan,Integer> buyerClanPair=null;
		if(shop.isSold(ShopKeeper.DEAL_CLANDSELLER)
		&&((buyerClanPair=CMLib.clans().findPrivilegedClan(buyer, Clan.Function.PROPERTY_OWNER))!=null))
			name=buyerClanPair.first.clanID();
		if((shop.isSold(ShopKeeper.DEAL_LANDSELLER)||(buyerClanPair!=null))
		&&(myArea!=null))
		{
			final HashSet<Environmental> roomsHandling=new HashSet<Environmental>();
			final Map<Environmental,LandTitle> titles=new Hashtable<Environmental,LandTitle>();
			for(final Enumeration<Room> r=myArea.getProperMap();r.hasMoreElements();)
			{
				final Room R=r.nextElement();
				final LandTitle A=CMLib.law().getLandTitle(R);
				if((A!=null)&&(R.roomID().length()>0))
					titles.put(R,A);
			}

			for(final Environmental R : titles.keySet())
			{
				final LandTitle A=titles.get(R);
				if(!roomsHandling.contains(R))
				{
					if(R instanceof Area)
						roomsHandling.add(R);
					else
					{
						final List<Room> V2=A.getAllTitledRooms();
						roomsHandling.addAll(V2);
					}
					if((A.getOwnerName().length()>0)
					&&(!A.getOwnerName().equals(name))
					&&((!A.getOwnerName().equals(buyer.getLiegeID()))||(!buyer.isMarriedToLiege())))
						continue;
					boolean skipThisOne=false;
					if(R instanceof Room)
					{
						for(int d=0;d<4;d++)
						{
							final Room R2=((Room)R).getRoomInDir(d);
							LandTitle L2=null;
							if(R2!=null)
							{
								L2=titles.get(R2);
								if(L2==null)
								{
									skipThisOne = false;
									break;
								}
							}
							else
								continue;
							if((L2.getOwnerName().equals(name))
							||(L2.getOwnerName().equals(buyer.getLiegeID())&&(buyer.isMarriedToLiege())))
							{
								skipThisOne = false;
								break;
							}
							if(L2.getOwnerName().length()>0)
								skipThisOne=true;
						}
					}
					if(skipThisOne)
						continue;
					final Item I=CMClass.getItem("GenTitle");
					if(R instanceof Room)
						((LandTitle)I).setLandPropertyID(CMLib.map().getExtendedRoomID((Room)R));
					else
						((LandTitle)I).setLandPropertyID(R.Name());
					if((((LandTitle)I).getOwnerName().length()>0)
					&&(!I.Name().endsWith(" (Copy)")))
						I.setName(L("@x1 (Copy)",I.Name()));
					I.text();
					I.recoverPhyStats();
					if((A.getOwnerName().length()==0)
					&&(I.Name().endsWith(" (Copy)")))
						I.setName(I.Name().substring(0,I.Name().length()-7));
					V.add(I);
				}
			}
		}
		
		if(shop.isSold(ShopKeeper.DEAL_SHIPSELLER))
		{
			final PlayerStats pStats = buyer.playerStats();
			if((pStats != null)&&(pStats.getExtItems()!=null))
				this.addShipProperty(buyer, V, pStats.getExtItems());
		}
		if(shop.isSold(ShopKeeper.DEAL_CSHIPSELLER))
		{
			buyerClanPair=CMLib.clans().findPrivilegedClan(buyer, Clan.Function.PROPERTY_OWNER);
			if((buyerClanPair != null)&&(buyerClanPair.first!=null)&&(buyerClanPair.first.getExtItems()!=null))
				this.addShipProperty(buyer, V, buyerClanPair.first.getExtItems());
		}
		
		if(V.size()<2)
			return V;
		final Vector<Environmental> V2=new Vector<Environmental>(V.size());
		LandTitle L=null;
		LandTitle L2=null;
		int x=-1;
		int x2=-1;
		while(V.size()>0)
		{
			if(((!(V.get(0) instanceof LandTitle)))
			||((x=(L=(LandTitle)V.get(0)).landPropertyID().lastIndexOf('#'))<0))
			{
				if(V2.size()==0)
					V2.addElement(V.remove(0));
				else
					V2.insertElementAt(V.remove(0),0);
			}
			else
			{
				int lowest=CMath.s_int(L.landPropertyID().substring(x+1).trim());
				int chk=0;
				for(int v=1;v<V.size();v++)
				{
					if(V.get(v) instanceof LandTitle)
					{
						L2=(LandTitle)V.get(v);
						x2=L2.landPropertyID().lastIndexOf('#');
						if(x2>0)
						{
							chk=CMath.s_int(L2.landPropertyID().substring(x2+1).trim());
							if(chk<lowest)
							{
								lowest=chk;
								L=L2;
							}
						}
					}
				}
				V.remove(L);
				V2.addElement(L);
			}
		}
		return V2;
	}