diff --git a/clutter/clutter-actor.c b/clutter/clutter-actor.c
index 87b2d573e..d7d4b0bf2 100644
--- a/clutter/clutter-actor.c
+++ b/clutter/clutter-actor.c
@@ -36,97 +36,125 @@
* it parent with the childs origin being its anchor point (also top
* left by default).
*
- * The actors 2D surface is contained inside its bounding box,
- * described by the #ClutterActorBox structure:
+ *
+ * Actor bounding box and transformations
+ * Any actor's 2D surface is contained inside its bounding box,
+ * as described by the #ClutterActorBox structure:
+ *
+ * The actor box represents the untransformed area occupied by an
+ * actor. Each visible actor that has been put on a #ClutterStage also
+ * has a transformed area, depending on the actual transformations
+ * applied to it by the developer (scale, rotation). Tranforms will
+ * also be applied to any child actors. Also applied to all actors by
+ * the #ClutterStage is a perspective transformation. API is provided
+ * for both tranformed and untransformed actor geometry information.
+ * The GL 'modelview' transform matrix for the actor is constructed
+ * from the actor settings by the following order of operations:
+ *
+ * Translation by actor x, y coords,
+ * Translation by actor depth (z),
+ * Scaling by scale_x, scale_y,
+ * Rotation around z axis,
+ * Rotation around y axis,
+ * Rotation around x axis,
+ * Negative translation by anchor point x,
+ * y,
+ * Rectangular Clip is applied (this is not an operation
+ * on the matrix as such, but it is done as part of the transform set
+ * up).
+ *
+ * An actor can either be explicitly sized and positioned, using the
+ * various size and position accessors, like clutter_actor_set_x() or
+ * clutter_actor_set_width(); or it can have a preferred width and
+ * height, which then allows a layout manager to implicitly size and
+ * position it by "allocating" an area for an actor. This allows for
+ * actors to be manipulated in both a fixed (or static) parent container
+ * (i.e. children of #ClutterGroup) and a more automatic (or dynamic)
+ * layout based parent container.
+ * When accessing the position and size of an actor, the simple
+ * accessors like clutter_actor_get_width() and clutter_actor_get_x()
+ * will return a value depending on whether the actor has been explicitly
+ * sized and positioned by the developer or implicitly by the layout
+ * manager.
+ * Depending on whether you are querying an actor or implementing a
+ * layout manager, you should either use the simple accessors or use the
+ * size negotiation API.
+ *
*
- *
+ *
+ * Event Handling
+ * Clutter actors are also able to receive input events and react to
+ * them. Events are handled in the following ways:
+ *
+ * Actors emit pointer events if set reactive, see
+ * clutter_actor_set_reactive()
+ * The stage is always reactive
+ * Events are handled by connecting signal handlers to
+ * the numerous event signal types.
+ * Event handlers must return %TRUE if they handled
+ * the event and wish to block the event emission chain, or %FALSE
+ * if the emission chain must continue
+ * Keyboard events are emitted if actor has focus, see
+ * clutter_stage_set_key_focus()
+ * Motion events (motion, enter, leave) are not emitted
+ * if clutter_set_motion_events_enabled() is called with %FALSE.
+ * See clutter_set_motion_events_enabled() documentation for more
+ * information.
+ * Once emitted, an event emission chain has two
+ * phases: capture and bubble. An emitted event starts in the capture
+ * phase (see ClutterActor::captured-event) beginning at the stage and
+ * traversing every child actor until the event source actor is reached.
+ * The emission then enters the bubble phase, traversing back up the
+ * chain via parents until it reaches the stage. Any event handler can
+ * abort this chain by returning %TRUE (meaning "event handled").
+ *
+ * Pointer events will 'pass through' non reactive
+ * overlapping actors.
+ *
+ *
+ * Every '?' box in the diagram above is an entry point for
+ * application code.
+ *
*
- * The actor box represents the untransformed area occupied by an
- * actor. Each visible actor that has been put on a #ClutterStage also
- * has a transformed area, depending on the actual transformations
- * applied to it by the developer (scale, rotation). Tranforms will
- * also be applied to any child actors. Also applied to all actors by
- * the #ClutterStage is a perspective transformation. API is provided
- * for both tranformed and untransformed actor geometry information.
+ *
+ * Implementing a ClutterActor
+ * For implementing a new custom actor class, please read the corresponding
+ * section of the API reference.
+ *
*
- * The 'modelview' transform matrix for the actor is constructed from
- * the actor settings by the following order of operations:
- *
- * Translation by actor x, y coords,
- * Translation by actor depth (z),
- * Scaling by scale_x, scale_y,
- * Rotation around z axis,
- * Rotation around y axis,
- * Rotation around x axis,
- * Negative translation by anchor point x,
- * y,
- * Rectangular Clip is applied (this is not an operation on
- * the matrix as such, but it is done as part of the transform set
- * up).
- *
- *
- * An actor can either be explicitly sized and positioned, using the
- * various size and position accessors, like clutter_actor_set_x() or
- * clutter_actor_set_width(); or it can have a preferred width and
- * height, which then allows a layout manager to implicitly size and
- * position it by "allocating" an area for an actor. This allows for
- * actors to be manipulated in both a fixed (or static) parent container
- * (i.e. children of #ClutterGroup) and a more automatic (or dynamic)
- * layout based parent container.
- *
- * When accessing the position and size of an actor, the simple accessors
- * like clutter_actor_get_width() and clutter_actor_get_x() will return
- * a value depending on whether the actor has been explicitly sized and
- * positioned by the developer or implicitly by the layout manager.
- *
- * Depending on whether you are querying an actor or implementing a
- * layout manager, you should either use the simple accessors or use the
- * size negotiation API.
- *
- * Clutter actors are also able to receive input events and react to
- * them. Events are handled in the following ways:
- *
- *
- * Actors emit pointer events if set reactive, see
- * clutter_actor_set_reactive()
- * The stage is always reactive
- * Events are handled by connecting signal handlers to
- * the numerous event signal types.
- * Event handlers must return %TRUE if they handled
- * the event and wish to block the event emission chain, or %FALSE
- * if the emission chain must continue
- * Keyboard events are emitted if actor has focus, see
- * clutter_stage_set_key_focus()
- * Motion events (motion, enter, leave) are not emitted
- * if clutter_set_motion_events_enabled() is called with %FALSE.
- * See clutter_set_motion_events_enabled() documentation for more
- * information.
- * Once emitted, an event emission chain has two
- * phases: capture and bubble. An emitted event starts in the capture
- * phase (see ClutterActor::captured-event) beginning at the stage and
- * traversing every child actor until the event source actor is reached.
- * The emission then enters the bubble phase, traversing back up the
- * chain via parents until it reaches the stage. Any event handler can
- * abort this chain by returning %TRUE (meaning "event handled").
- *
- * Pointer events will 'pass through' non reactive
- * overlapping actors.
- *
- *
- *
- *
- * Every '?' box in the diagram above is an entry point for application
- * code.
- *
- * For implementing a new custom actor class, please read the corresponding section
- * of the API reference.
+ *
+ * ClutterActor custom properties for #ClutterScript
+ * #ClutterActor defines a custom "rotation" property which
+ * allows a short-hand description of the rotations to be applied
+ * to an actor.
+ * The syntax of the "rotation" property is the following:
+ *
+ *
+ * "rotation" : [
+ * { "<axis>" : [ <angle>, [ <center> ] ] }
+ * ]
+ *
+ *
+ * where the axis is the name of an enumeration
+ * value of type #ClutterRotateAxis and angle is a
+ * floating point value representing the rotation angle on the given axis,
+ * in degrees.
+ * The center array is optional, and if present
+ * it must contain the center of rotation as described by two coordinates:
+ * Y and Z for "x-axis"; X and Z for "y-axis"; and X and Y for
+ * "z-axis".
+ * #ClutterActor will also parse every positional and dimensional
+ * property defined as a string through clutter_units_from_string(); you
+ * should read the documentation for the #ClutterUnits parser format for
+ * the valid units and syntax.
+ *
*/
/**