@Override @SuppressWarnings({ "rawtypes", "unchecked" })
	public boolean okMessage(final Environmental myHost, final CMMsg msg)
	{
		if(!super.okMessage(myHost,msg))
			return false;
		if(msg.amITarget(this))
		{
			switch(msg.targetMinor())
			{
			case CMMsg.TYP_PUT:
				if(CMSecurity.isAllowed(msg.source(), msg.source().location(), CMSecurity.SecFlag.CMDITEMS))
					break; // let admins go ahead and put stuff
				else
				if(msg.tool() instanceof ShipComponent)
				{
					if(msg.value()<=0)
					{
						final Ability installA=msg.source().fetchAbility("AstroEngineering");
						if(installA==null)
						{
							msg.source().tell(_("You don't know how to install @x1 into @x2.",((ShipComponent)msg.tool()).name(msg.source()),name(msg.source())));
							return false;
						}
						else
						{
							installA.invoke(msg.source(),new XVector("INSTALL",msg.tool()), (Physical)msg.target(), false, 0);
							return false;
						}
					}
				}
				break;
			case CMMsg.TYP_INSTALL:
				if(msg.value()<=0)
				{
					msg.source().tell(_("You failed to install @x1 into @x2.",((ShipComponent)msg.tool()).name(msg.source()),name(msg.source())));
					return false;
				}
				break;
			}
		}
		return true;
	}