@Override
	public boolean shutdown()
	{
		final boolean debugMem = CMSecurity.isDebugging(CMSecurity.DbgFlag.SHUTDOWN);
		for(Enumeration<Area> a=areasList.elements();a.hasMoreElements();)
		{
			try 
			{
				final Area A = a.nextElement();
				if(A!=null)
				{
					CMProps.setUpAllLowVar(CMProps.Str.MUDSTATUS,"Shutting down Map area '"+A.Name()+"'...");
					LinkedList<Room> rooms=new LinkedList<Room>();
					for(Enumeration<Room> r=A.getProperMap();r.hasMoreElements();)
					{
						try 
						{
							final Room R=r.nextElement();
							if(R!=null)
								rooms.add(R);
						} 
						catch(Exception e) 
						{
						}
					}
					for(Iterator<Room> r=rooms.iterator();r.hasNext();)
					{
						try 
						{
							final Room R=r.next();
							A.delProperRoom(R);
							R.destroy();
						} 
						catch(Exception e) 
						{
						}
					}
				}
				if(debugMem)
				{
					try
					{
						Object obj = new Object();
						WeakReference<Object> ref = new WeakReference<Object>(obj);
						obj = null;
						System.gc();
						System.runFinalization();
						while(ref.get() != null) 
						{
							System.gc();
						}
						Thread.sleep(3000);
					}
					catch (final Exception e)
					{
					}
					final long free=Runtime.getRuntime().freeMemory()/1024;
					final long total=Runtime.getRuntime().totalMemory()/1024;
					if(A!=null)
						Log.debugOut("Memory: CMMap: "+A.Name()+": "+(total-free)+"/"+total);
				}
			}
			catch (Exception e)
			{
			}
		}
		areasList.clear();
		deitiesList.clear();
		shipList.clear();
		space.clear();
		globalHandlers.clear();
		if(CMLib.threads().isTicking(this, TICKID_SUPPORT|Tickable.TICKID_SOLITARYMASK))
		{
			CMLib.threads().deleteTick(this, TICKID_SUPPORT|Tickable.TICKID_SOLITARYMASK);
			serviceClient=null;
		}
		return true;
	}