public UAVMetaObject(long objID, String name, UAVDataObject parent) : base(objID, true, name) {
		    this.parent = parent;

		    ownMetadata = new Metadata();

		    ownMetadata.flags = 0; // TODO: Fix flags
		    ownMetadata.gcsTelemetryUpdatePeriod = 0;
		    ownMetadata.loggingUpdatePeriod = 0;


		    List<String> modesBitField = new List<String>();
		    modesBitField.Add("FlightReadOnly");
		    modesBitField.Add("GCSReadOnly");
		    modesBitField.Add("FlightTelemetryAcked");
		    modesBitField.Add("GCSTelemetryAcked");
		    modesBitField.Add("FlightUpdatePeriodic");
		    modesBitField.Add("FlightUpdateOnChange");
		    modesBitField.Add("GCSUpdatePeriodic");
		    modesBitField.Add("GCSUpdateOnChange");

            List<UAVObjectField> fields = new List<UAVObjectField>();
		    fields.Add( new UAVObjectField<bool>("Modes", "", 1, modesBitField, parent) );
            fields.Add(new UAVObjectField<UInt16>("Flight Telemetry Update Period", "ms", 1, null, parent));
            fields.Add(new UAVObjectField<UInt16>("GCS Telemetry Update Period", "ms", 1, null, parent));
            fields.Add(new UAVObjectField<UInt16>("Logging Update Period", "ms", 1, null, parent));

		    int numBytes = fields.Sum(j=>j.getNumBytes());
		    
		    // Initialize object

		    // Initialize parent
		    base.initialize(0);
		    initializeFields(fields, new ByteBuffer(numBytes), numBytes);

		    // Setup metadata of parent
		    parentMetadata = parent.getDefaultMetadata();
	    }