public CommandHandle (CommandHandle other)
		{
			interface_ = other.interface_;
			name_ = other.getName ();
			field_ = other.getField ();
			new_value_ = other.new_value_;
		}
		public bool enabled (CommandHandle handle)
		{
			if ( handle == null || !handle.connected () )
				return false;
			string resource = handle.getName ();
			return enabled_.ContainsKey ( resource );
		}
		public void CopyFrom (CommandHandle other)
		{
			if ( other == null )
				return;
			interface_ = other.interface_;
			name_ = other.getName ();
			field_ = other.getField ();
			new_value_ = other.new_value_;
		}
		public bool preempt (CommandHandle handle)
		{
			string resource = handle.getName ();
			if ( outputs_.ContainsKey ( resource ) )
			{
				CommandHandle output = outputs_ [ resource ];
				if ( output != null )
				{
					output.setPreempted ();
					return true;
				}
			}
			return false;
		}
		public void disconnect (CommandHandle handle)
		{
			if ( handle == null )
				return;
			string resource = handle.getName ();
			if ( inputs_.ContainsKey ( resource ) )
			{
				CommandHandle input = inputs_ [ resource ];
				if ( (CommandHandle) input.get () != handle )
					input.reset ();
			}
			if ( outputs_.ContainsKey ( resource ) )
			{
				CommandHandle output = outputs_ [ resource ];
				if ( (CommandHandle) output.get () != handle )
					output.reset ();
			}
		}
		public bool stop (CommandHandle handle)
		{
			if ( handle == null )
				return false;
			string resource = handle.getName ();

			if ( enabled_.ContainsKey ( resource ) )
			{
				if ( enabled_ [ resource ] == handle )
				{
					enabled_.Remove ( resource );
					ROS.Info ( "quadrotor_interface", "Disabled %s control", resource );
					return true;
				}
			}

			return false;
		}
		public bool start (CommandHandle handle)
		{
			if ( handle == null || !handle.connected () )
				return false;
			string resource = handle.getName ();

			if ( enabled_.ContainsKey ( resource ) )
			{
				if ( enabled_ [ resource ] == handle )
					return true;
				
			} else
			{
				enabled_.Add ( resource, handle );
				ROS.Info ( "quadrotor_interface", "Enabled %s output", resource );
				return true;
			}

			return false;
		}
		public CommandHandle_ (CommandHandle other) : base (other)
		{
			command_ = default (T);
		}