+/* Property Handling */
+
+/* Registers a property for a new device class; device drivers' GClassInitFunc
+ * should call this function for each device-specific property of the class.
+ * If either getter or setter is NULL, then the corresponding operation will
+ * return FALSE.
+ *
+ * Note that this will replace any existing registration (e.g., from a parent
+ * class).
+ */
+void device_class_register_property(DeviceClass *klass, DevicePropertyId id,
+ PropertyAccessFlags access,
+ PropertyGetFn getter,
+ PropertySetFn setter);
+
+/* Set a 'simple' property on the device. This tucks the value away in the
+ * object, to be retrieved by device_simple_property_get_fn. This is most
+ * often used in GInstanceInit functions, but can be used at any time to set or
+ * change the value of a simple property */
+gboolean device_set_simple_property(Device *self, DevicePropertyId id,
+ GValue *val, PropertySurety surety,
+ PropertySource source);
+
+/* Get a simple property set with device_set_simple_property. This is a little
+ * bit quicker than calling device_property_get_ex(), and does not affect the
+ * device's error state. Returns FALSE if the property has not been set.
+ * Surety and source are output parameters and will be ignored if they are
+ * NULL. */
+gboolean device_get_simple_property(Device *self, DevicePropertyId id,
+ GValue *val, PropertySurety *surety,
+ PropertySource *source);
+
+/* A useful PropertySetFn. If your subclass also needs to intercept sets, for
+ * example to flush a cache or update a member variable, then write a stub
+ * function which "calls up" to this function. */
+gboolean device_simple_property_set_fn(Device *self, DevicePropertyBase *base,
+ GValue *val, PropertySurety surety,
+ PropertySource source);
+
+/* A useful PropertyGetFn -- returns the value, source, and surety set with
+ * device_set_simple_property */
+gboolean device_simple_property_get_fn(Device *self, DevicePropertyBase *base,
+ GValue *val, PropertySurety *surety,
+ PropertySource *source);
+