You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2019/01/09 07:25:59 UTC

[isis] 04/04: ISIS-2081: updates .adocs

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 5fcad441e71f7d7f02860686f481bf52a2d41a0d
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jan 9 08:15:51 2019 +0100

    ISIS-2081: updates .adocs
---
 .../rgant/_rgant-ActionLayout_bookmarking.adoc     |  15 +--
 .../guides/rgant/_rgant-ActionLayout_cssClass.adoc |  22 ++--
 .../rgant/_rgant-ActionLayout_cssClassFa.adoc      |  21 +---
 .../rgant/_rgant-ActionLayout_describedAs.adoc     |  22 ++--
 .../guides/rgant/_rgant-ActionLayout_hidden.adoc   |  31 ++---
 .../guides/rgant/_rgant-ActionLayout_named.adoc    |  29 ++---
 .../guides/rgant/_rgant-ActionLayout_position.adoc |  11 +-
 .../rgant/_rgant-ActionLayout_promptStyle.adoc     |   3 +
 .../guides/rgant/_rgant-ActionLayout_redirect.adoc |   2 +
 .../guides/rgant/_rgant-Action_hidden.adoc         |   9 +-
 .../guides/rgant/_rgant-Action_typeOf.adoc         |   8 +-
 .../rgant/_rgant-CollectionLayout_cssClass.adoc    |  16 ++-
 .../rgant/_rgant-CollectionLayout_defaultView.adoc |  19 +--
 .../rgant/_rgant-CollectionLayout_describedAs.adoc |  12 +-
 .../rgant/_rgant-CollectionLayout_hidden.adoc      |  32 ++---
 .../rgant/_rgant-CollectionLayout_named.adoc       |  36 +++---
 .../rgant/_rgant-CollectionLayout_paged.adoc       |  24 ++--
 .../rgant/_rgant-CollectionLayout_render.adoc      |  19 +--
 .../rgant/_rgant-CollectionLayout_sortedBy.adoc    |  14 +--
 .../guides/rgant/_rgant-Collection_editing.adoc    |  11 +-
 .../guides/rgant/_rgant-Collection_hidden.adoc     |  10 +-
 .../guides/rgant/_rgant-Collection_typeOf.adoc     |   6 +-
 .../guides/rgant/_rgant-DomainObjectLayout.adoc    |   6 +
 .../_rgant-DomainObjectLayout_bookmarking.adoc     |   3 +
 .../rgant/_rgant-DomainObjectLayout_cssClass.adoc  |  21 +++-
 .../_rgant-DomainObjectLayout_cssClassFa.adoc      |   9 +-
 .../_rgant-DomainObjectLayout_cssClassUiEvent.adoc |   4 +
 .../_rgant-DomainObjectLayout_describedAs.adoc     |  16 ++-
 .../_rgant-DomainObjectLayout_iconUiEvent.adoc     |   4 +
 .../_rgant-DomainObjectLayout_layoutUiEvent.adoc   |  18 ++-
 .../rgant/_rgant-DomainObjectLayout_named.adoc     |  15 ++-
 .../rgant/_rgant-DomainObjectLayout_paged.adoc     |   9 +-
 .../rgant/_rgant-DomainObjectLayout_plural.adoc    |   6 +-
 .../_rgant-DomainObjectLayout_titleUiEvent.adoc    |   7 ++
 .../rgant/_rgant-DomainServiceLayout_named.adoc    |  13 +-
 .../guides/rgant/_rgant-DomainService_nature.adoc  |   9 +-
 .../rgant/_rgant-ParameterLayout_cssClass.adoc     |  13 +-
 .../_rgant-ParameterLayout_labelPosition.adoc      |  24 ++--
 .../guides/rgant/_rgant-ParameterLayout_named.adoc |  14 ++-
 .../guides/rgant/_rgant-Parameter_maxLength.adoc   |   8 +-
 .../rgant/_rgant-Parameter_regexPattern.adoc       |   7 +-
 .../rgant/_rgant-PropertyLayout_cssClass.adoc      |  26 ++--
 .../rgant/_rgant-PropertyLayout_describedAs.adoc   |  13 +-
 .../guides/rgant/_rgant-PropertyLayout_hidden.adoc |  35 +++---
 .../rgant/_rgant-PropertyLayout_labelPosition.adoc |  31 +++--
 .../rgant/_rgant-PropertyLayout_multiLine.adoc     |  20 +--
 .../guides/rgant/_rgant-PropertyLayout_named.adoc  |  38 +++---
 .../rgant/_rgant-PropertyLayout_promptStyle.adoc   |   1 -
 .../_rgant-PropertyLayout_renderedAsDayBefore.adoc |  13 +-
 .../rgant/_rgant-PropertyLayout_typicalLength.adoc |   4 +-
 .../guides/rgant/_rgant-Property_editing.adoc      |   8 +-
 .../guides/rgant/_rgant-Property_hidden.adoc       |  11 +-
 .../guides/rgant/_rgant-Property_maxLength.adoc    |  14 ++-
 .../guides/rgant/_rgant-Property_regexPattern.adoc |  14 ++-
 .../guides/rgant/_rgant-ViewModelLayout.adoc       |  27 +++-
 ...doc => _rgant-ViewModelLayout_bookmarking.adoc} |  22 +---
 .../rgant/_rgant-ViewModelLayout_cssClass.adoc     |  21 +---
 .../rgant/_rgant-ViewModelLayout_cssClassFa.adoc   |  30 +----
 ...=> _rgant-ViewModelLayout_cssClassUiEvent.adoc} |  24 +---
 .../rgant/_rgant-ViewModelLayout_describedAs.adoc  |  16 +--
 ...doc => _rgant-ViewModelLayout_iconUiEvent.adoc} |  25 ++--
 ...c => _rgant-ViewModelLayout_layoutUiEvent.adoc} |  24 +---
 .../guides/rgant/_rgant-ViewModelLayout_named.adoc |  28 +----
 .../guides/rgant/_rgant-ViewModelLayout_paged.adoc |  28 +----
 .../rgant/_rgant-ViewModelLayout_plural.adoc       |  13 +-
 ...oc => _rgant-ViewModelLayout_titleUiEvent.adoc} |  24 +---
 .../guides/rgcfg/_rgcfg_configuring-core.adoc      |  36 ++++++
 .../isis/applib/annotation/ViewModelLayout.java    |  48 ++++++++
 ...wModelLayoutAnnotationUsingCssClassUiEvent.java | 123 +++++++++++++++++++
 .../DomainObjectLayoutFacetFactory.java            |  15 +++
 ...aViewModelLayoutAnnotationUsingIconUiEvent.java | 122 ++++++++++++++++++
 ...iewModelLayoutAnnotationUsingLayoutUiEvent.java | 123 +++++++++++++++++++
 ...ViewModelLayoutAnnotationUsingTitleUiEvent.java | 136 +++++++++++++++++++++
 73 files changed, 1111 insertions(+), 580 deletions(-)

diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_bookmarking.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_bookmarking.adoc
index 6db7334..c266d06 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_bookmarking.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_bookmarking.adoc
@@ -49,17 +49,6 @@ The enum value `AS_CHILD` has no meaning for actions; it relates only to bookmar
 ====
 
 
+== Alternatives
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
-
-NOTE: FIXME - change to .layout.xml syntax instead.
-
-[source,javascript]
-----
-"notYetComplete": {
-    "actionLayout": { "bookmarking": "AS_ROOT" }
-}
-----
-
-
-
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead.
\ No newline at end of file
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_cssClass.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_cssClass.adoc
index 4d02afd..8f970d6 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_cssClass.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_cssClass.adoc
@@ -8,8 +8,6 @@
 
 The `cssClass()` attribute can be used to render additional CSS classes in the HTML (a wrapping `<div>`) that represents the action.   xref:../rgcfg/rgcfg.adoc#_rgcfg_application-specific_application-css[Application-specific CSS] can then be used to target and adjust the UI representation of that particular element.
 
-This attribute can also be applied to xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_cssClass[domain objects], xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_cssClass[view models],  xref:../rgant/rgant.adoc#_rgant-PropertyLayout_cssClass[properties],  xref:../rgant/rgant.adoc#_rgant-CollectionLayout_cssClass[collections] and xref:../rgant/rgant.adoc#_rgant-ParameterLayout_cssClass[parameters].
-
 
 For example:
 
@@ -30,13 +28,17 @@ to apply CSS, specifically to add http://fortawesome.github.io/Font-Awesome/icon
 
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+== Alternatives
 
-NOTE: FIXME - change to .layout.xml syntax instead.
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead.
+
+== See also
+
+This attribute can also be applied to:
+
+* xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_cssClass[domain objects]
+* xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_cssClass[view models]
+* xref:../rgant/rgant.adoc#_rgant-PropertyLayout_cssClass[properties]
+* xref:../rgant/rgant.adoc#_rgant-CollectionLayout_cssClass[collections]
+* xref:../rgant/rgant.adoc#_rgant-ParameterLayout_cssClass[parameters].
 
-[source,javascript]
-----
-"postpone": {
-    "actionLayout": { "cssClass": "x-key" }
-}
-----
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_cssClassFa.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_cssClassFa.adoc
index c4f596b..1028733 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_cssClassFa.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_cssClassFa.adoc
@@ -31,26 +31,9 @@ public class ToDoItem {
 There can be multiple "fa-" classes, eg to mirror or rotate the icon. There is no need to include the mandatory `fa` "marker" CSS class; it will be automatically added to the list.  The `fa-` prefix can also be omitted from the class names; it will be prepended to each if required.
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
-
-NOTE: FIXME - change to .layout.xml syntax instead.
-
-[source,javascript]
-----
-"previous": {
-    "actionLayout": {
-        "cssClassFa": "fa-step-backward",
-        "cssClassFaPosition": "LEFT"
-    }
-},
-"next": {
-    "actionLayout": {
-        "cssClassFa": "fa-step-forward",
-        "cssClassFaPosition": "RIGHT"
-    }
-}
-----
+== Alternatives
 
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead.
 
 
 [NOTE]
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_describedAs.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_describedAs.adoc
index 79f10b2..9d77fab 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_describedAs.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_describedAs.adoc
@@ -8,8 +8,6 @@
 
 The `describedAs()` attribute is used to provide a short description of the action to the user.  In the xref:../ugvw/ugvw.adoc#[Wicket viewer] it is displayed as a 'tool tip'.
 
-This attribute can also be specified for xref:../rgant/rgant.adoc#_rgant-CollectionLayout_describedAs[collections],  xref:../rgant/rgant.adoc#_rgant-PropertyLayout_describedAs[properties], xref:../rgant/rgant.adoc#_rgant-ParameterLayout_describedAs[parameters], xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_describedAs[domain objects] and xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_describedAs[view models].
-
 
 For example:
 
@@ -24,15 +22,19 @@ public class Customer {
 
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+== Alternatives
 
-NOTE: FIXME - change to .layout.xml syntax instead.
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead.
 
-[source,javascript]
-----
-"postpone": {
-    "actionLayout": { "describedAs": "Place a repeat order of the last (most recently placed) order" }
-}
-----
 
 
+== See also
+
+This attribute can also be specified for:
+
+* xref:../rgant/rgant.adoc#_rgant-CollectionLayout_describedAs[collections]
+* xref:../rgant/rgant.adoc#_rgant-PropertyLayout_describedAs[properties]
+* xref:../rgant/rgant.adoc#_rgant-ParameterLayout_describedAs[parameters]
+* xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_describedAs[domain objects]
+* xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_describedAs[view models].
+
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_hidden.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_hidden.adoc
index 7f74052..3757978 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_hidden.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_hidden.adoc
@@ -5,11 +5,13 @@
 :_imagesdir: images/
 
 
-The `hidden()` attribute indicates where (in the UI) the action should be hidden from the user.  This attribute can also be applied to xref:../rgant/rgant.adoc#_rgant-PropertyLayout_hidden[properties] and xref:../rgant/rgant.adoc#_rgant-CollectionLayout_hidden[collections].
+The `hidden()` attribute indicates where (in the UI) the action should be hidden from the user.
+
 
 [TIP]
 ====
-It is also possible to use xref:../rgant/rgant.adoc#_rgant-Action_hidden[`@Action#hidden()`] to hide an action at the domain layer.  Both options are provided with a view that in the future the view-layer semantics may be under the control of (expert) users, whereas domain-layer semantics should never be overridden or modified by the user.
+It is also possible to use xref:../rgant/rgant.adoc#_rgant-Action_hidden[`@Action#hidden()`] to hide an action at the domain layer.
+Both options are provided with a view that in the future the view-layer semantics may be under the control of (expert) users, whereas domain-layer semantics should never be overridden or modified by the user.
 ====
 
 For example:
@@ -37,22 +39,23 @@ The action should not be hidden.
 The other values of the `Where` enum have no meaning for a collection.
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
-
-NOTE: FIXME - change to .layout.xml syntax instead.
-
-[source,javascript]
-----
-"updateStatus": {
-    "actionLayout": { "hidden": "EVERYWHERE" }
-}
-----
-
-
 [NOTE]
 ====
 For actions of domain services the visibility is dependent upon its xref:../rgant/rgant.adoc#_rgant-DomainService_nature[`@DomainService#nature()`] and also on whether it is contributed (as per  xref:../rgant/rgant.adoc#_rgant-ActionLayout_contributedAs[`@ActionLayout#contributedAs()`]).
 ====
 
 
+== Alternatives
+
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead.
+
+
+
+
+
+
+== See also
 
+This attribute can also be applied to:
+* xref:../rgant/rgant.adoc#_rgant-PropertyLayout_hidden[properties]
+* xref:../rgant/rgant.adoc#_rgant-CollectionLayout_hidden[collections].
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_named.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_named.adoc
index 9aa6542..0abd89e 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_named.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_named.adoc
@@ -5,11 +5,13 @@
 :_imagesdir: images/
 
 
-The `named()` attribute explicitly specifies the action's name, overriding the name that would normally be inferred from the Java source code.  This attribute can also be specified for xref:../rgant/rgant.adoc#_rgant-CollectionLayout_named[collections], xref:../rgant/rgant.adoc#_rgant-PropertyLayout_named[properties], xref:../rgant/rgant.adoc#_rgant-ParameterLayout_named[parameters], xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_named[domain objects], xref:../rgant/rgant.adoc#_rgant [...]
+The `named()` attribute explicitly specifies the action's name, overriding the name that would normally be inferred from the Java source code.
+
 
 [TIP]
 ====
-Following the link:http://en.wikipedia.org/wiki/Don%27t_repeat_yourself[don't repeat yourself] principle, we recommend that you only use this attribute when the desired name cannot be used in Java source code.  Examples of that include a name that would be a reserved Java keyword (eg "package"), or a name that has punctuation, eg apostrophes.
+Following the link:http://en.wikipedia.org/wiki/Don%27t_repeat_yourself[don't repeat yourself] principle, we recommend that you only use this attribute when the desired name cannot be used in Java source code.
+Examples of that include a name that would be a reserved Java keyword (eg "package"), or a name that has punctuation, eg apostrophes.
 ====
 
 
@@ -25,22 +27,21 @@ public class Customer {
 ----
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
-
-NOTE: FIXME - change to .layout.xml syntax instead.
+== Alternatives
 
-[source,javascript]
-----
-"obtainCreditRating": {
-    "actionLayout": { "named": "Get credit rating" }
-}
-----
 
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead.
 
-[TIP]
-====
 The framework also provides a separate, powerful mechanism for xref:../ugbtb/ugbtb.adoc#_ugbtb_i18n[internationalization].
-====
 
 
 
+== See also
+
+This attribute can also be specified for:
+* xref:../rgant/rgant.adoc#_rgant-CollectionLayout_named[collections]
+* xref:../rgant/rgant.adoc#_rgant-PropertyLayout_named[properties]
+* xref:../rgant/rgant.adoc#_rgant-ParameterLayout_named[parameters]
+* xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_named[domain objects]
+* xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_named[view models]
+* xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_named[domain services].
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_position.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_position.adoc
index 50a6279..dc37791 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_position.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_position.adoc
@@ -67,15 +67,8 @@ image::{_imagesdir}reference-annotations/ActionLayout/position-PANEL_DROPDOWN.pn
 If there are multiple actions associated with a single property then the positioning can be mix'ed-and-match'ed as required.  If the `PANEL` or `PANEL_DROPDOWN` are used, then (as the screenshots above show) the actions from potentially multiple properties grouped by that panel will be shown together.
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+== Alternatives
 
-NOTE: FIXME - change to .layout.xml syntax instead.
-
-[source,javascript]
-----
-"obtainCreditRating": {
-    "actionLayout": { "named": "Get credit rating" }
-}
-----
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead.
 
 The fact that the layout is dynamic (does not require a rebuild/restart) is particularly useful in that the look-n-feel can be easily experimented with and adjusted.
\ No newline at end of file
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_promptStyle.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_promptStyle.adoc
index e3b58f4..513295e 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_promptStyle.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_promptStyle.adoc
@@ -47,6 +47,9 @@ Assuming that the corresponding property is not itself editable, this means that
 The net effect is that a property conceptually consisting of different parts (eg a name, an address or a date) can be updated using an action that lets each separate part be specified independently.
 
 
+== Alternatives
+
+
 As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead.
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_redirect.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_redirect.adoc
index 45111bd..5221123 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_redirect.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ActionLayout_redirect.adoc
@@ -55,6 +55,8 @@ public class Customer {
 If `switchToEditMode()` action is invoked, then the UI will attempt to render the customer using a `Customer.layout.edit.xml` layout file (instead of the default `Customer.layout.xml`).
 
 
+== Alternatives
+
 As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead.
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Action_hidden.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Action_hidden.adoc
index d0b2e99..489a36e 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Action_hidden.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Action_hidden.adoc
@@ -7,7 +7,7 @@
 
 
 
-Actions can be hidden at the domain-level, indicating that they are not visible to the end-user. This attribute can also be applied to xref:../rgant/rgant.adoc#_rgant-Property_hidden[properties] and xref:../rgant/rgant.adoc#_rgant-Collection_hidden[collections].
+Actions can be hidden at the domain-level, indicating that they are not visible to the end-user.
 
 [TIP]
 ====
@@ -48,3 +48,10 @@ For actions of domain services the visibility is dependent upon its xref:../rgan
 
 
 
+== See also
+
+This attribute can also be applied to:
+
+* xref:../rgant/rgant.adoc#_rgant-Property_hidden[properties]
+* xref:../rgant/rgant.adoc#_rgant-Collection_hidden[collections].
+
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Action_typeOf.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Action_typeOf.adoc
index ddc093d..a44cafc 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Action_typeOf.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Action_typeOf.adoc
@@ -6,7 +6,7 @@
 
 
 
-The `typeOf()` attribute specifies the expected type of an element returned by the action (returning a collection), when for whatever reason the type cannot be inferred from the generic type, or to provide a hint about the actual run-time (as opposed to compile-time) type.  This attribute can also be specified for xref:../rgant/rgant.adoc#_rgant-Collection_typeOf[collections].
+The `typeOf()` attribute specifies the expected type of an element returned by the action (returning a collection), when for whatever reason the type cannot be inferred from the generic type, or to provide a hint about the actual run-time (as opposed to compile-time) type.
 
 
 For example:
@@ -29,3 +29,9 @@ public void AccountService {
 ====
 In general we recommend that you use generics instead, eg `List<Customer>`.
 ====
+
+
+== See also
+
+This attribute can also be specified for xref:../rgant/rgant.adoc#_rgant-Collection_typeOf[collections].
+
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_cssClass.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_cssClass.adoc
index f58be5b..551723b 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_cssClass.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_cssClass.adoc
@@ -7,7 +7,6 @@
 
 The `cssClass()` attribute can be used to render additional CSS classes in the HTML (a wrapping `<div>`) that represents the collection.   xref:../rgcfg/rgcfg.adoc#_rgcfg_application-specific_application-css[Application-specific CSS] can then be used to target and adjust the UI representation of that particular element.
 
-This attribute can also be applied to xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_cssClass[domain objects], xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_cssClass[view models], xref:../rgant/rgant.adoc#_rgant-ActionLayout_cssClass[actions], xref:../rgant/rgant.adoc#_rgant-PropertyLayout_cssClass[properties] and xref:../rgant/rgant.adoc#_rgant-ParameterLayout_cssClass[parameters].
 
 
 For example:
@@ -24,14 +23,13 @@ public class ToDoItem {
 ----
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+== Alternatives
 
-NOTE: FIXME - change to .layout.xml syntax instead.
 
-[source,javascript]
-----
-"dependencies": {
-    "collectionLayout": { "cssClass": "x-important" }
-}
-----
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead.
 
+
+== See also
+
+
+This attribute can also be applied to xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_cssClass[domain objects], xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_cssClass[view models], xref:../rgant/rgant.adoc#_rgant-ActionLayout_cssClass[actions], xref:../rgant/rgant.adoc#_rgant-PropertyLayout_cssClass[properties] and xref:../rgant/rgant.adoc#_rgant-ParameterLayout_cssClass[parameters].
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_defaultView.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_defaultView.adoc
index b2c58c3..7577b3d 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_defaultView.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_defaultView.adoc
@@ -25,21 +25,14 @@ public class BusRoute {
 ----
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
-
-NOTE: FIXME - change to .layout.xml syntax instead.
-
-[source,javascript]
-----
-"dependencies": {
-    "collectionLayout": {
-        "defaultView": "map"
-    }
-}
-----
-
 [NOTE]
 ====
 This attribute takes precedence over any value for the xref:../rgant/rgant.adoc#_rgant-CollectionLayout_render[`@CollectionLayout#render()`] attribute.  For example, if the
 `defaultView` attribute is defined to "table", then the table will be show even if `render` is set to `LAZILY`.
 ====
+
+== Alternatives
+
+
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead.
+
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_describedAs.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_describedAs.adoc
index 0055bac..c97936a 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_describedAs.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_describedAs.adoc
@@ -24,16 +24,8 @@ public class ToDoItem {
 ----
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+== Alternatives
 
-NOTE: FIXME - change to .layout.xml syntax instead.
 
-[source,javascript]
-----
-"dependencies": {
-    "collectionLayout": {
-        "describedAs": "Other todo items that must be completed before this one"
-    }
-}
-----
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead.
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_hidden.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_hidden.adoc
index f9f4a47..43cc453 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_hidden.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_hidden.adoc
@@ -5,12 +5,14 @@
 :_imagesdir: images/
 
 
-The `hidden()` attribute indicates where (in the UI) the collection should be hidden from the user.  This attribute can also be applied to xref:../rgant/rgant.adoc#_rgant-ActionLayout_hidden[actions] and xref:../rgant/rgant.adoc#_rgant-PropertyLayout_hidden[properties].
+The `hidden()` attribute indicates where (in the UI) the collection should be hidden from the user.
+
 
 
 [TIP]
 ====
-It is also possible to use xref:../rgant/rgant.adoc#_rgant-Collection_hidden[`@Collection#hidden()`] to hide an action at the domain layer.  Both options are provided with a view that in the future the view-layer semantics may be under the control of (expert) users, whereas domain-layer semantics should never be overridden or modified by the user.
+It is also possible to use xref:../rgant/rgant.adoc#_rgant-Collection_hidden[`@Collection#hidden()`] to hide an action at the domain layer.
+Both options are provided with a view that in the future the view-layer semantics may be under the control of (expert) users, whereas domain-layer semantics should never be overridden or modified by the user.
 ====
 
 For example:
@@ -28,32 +30,34 @@ public class ToDoItem {
 
 The acceptable values for the `where` parameter are:
 
-* `Where.EVERYWHERE` or `Where.ANYWHERE` +
+* `Where.EVERYWHERE` or `Where.ANYWHERE`
 +
 The collection should be hidden everywhere.
 
-* `Where.ANYWHERE` +
+* `Where.ANYWHERE`
 +
 Synonym for everywhere.
 
-* `Where.OBJECT_FORMS` +
+* `Where.OBJECT_FORMS`
 +
 The collection should be hidden when displayed within an object form.
 
-* `Where.NOWHERE` +
+* `Where.NOWHERE`
 +
 The collection should not be hidden.
 
 The other values of the `Where` enum have no meaning for a collection.
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+== Alternatives
 
-NOTE: FIXME - change to .layout.xml syntax instead.
 
-[source,javascript]
-----
-"dependencies": {
-    "collectionLayout": { "hidden": "EVERYWHERE" }
-}
-----
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead.
+
+
+== See also
+
+This attribute can also be applied to:
+
+* xref:../rgant/rgant.adoc#_rgant-ActionLayout_hidden[actions]
+* xref:../rgant/rgant.adoc#_rgant-PropertyLayout_hidden[properties].
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_named.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_named.adoc
index d91ca28..ea087b4 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_named.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_named.adoc
@@ -6,15 +6,18 @@
 
 
 
-The `named()` attribute explicitly specifies the collection's name, overriding the name that would normally be inferred from the Java source code.  This attribute can also be specified for xref:../rgant/rgant.adoc#_rgant-ActionLayout_named[actions], xref:../rgant/rgant.adoc#_rgant-PropertyLayout_named[properties], xref:../rgant/rgant.adoc#_rgant-ParameterLayout_named[parameters], xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_named[domain objects], xref:../rgant/rgant.adoc#_rgant-Vie [...]
+The `named()` attribute explicitly specifies the collection's name, overriding the name that would normally be inferred from the Java source code.
+
 
 [TIP]
 ====
-Following the link:http://en.wikipedia.org/wiki/Don%27t_repeat_yourself[don't repeat yourself] principle, we recommend that you only use this attribute when the desired name cannot be used in Java source code.  Examples of that include a name that would be a reserved Java keyword (eg "package"), or a name that has punctuation, eg apostrophes.
+Following the link:http://en.wikipedia.org/wiki/Don%27t_repeat_yourself[don't repeat yourself] principle, we recommend that you only use this attribute when the desired name cannot be used in Java source code.
+Examples of that include a name that would be a reserved Java keyword (eg "package"), or a name that has punctuation, eg apostrophes.
 ====
 
 
-By default the name is HTML escaped.  To allow HTML markup, set the related `namedEscaped()` attribute to `false`.
+By default the name is HTML escaped.
+To allow HTML markup, set the related `namedEscaped()` attribute to `false`.
 
 
 For example:
@@ -33,22 +36,19 @@ public class ToDoItem {
 
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+== Alternatives
 
-NOTE: FIXME - change to .layout.xml syntax instead.
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead.
 
-[source,javascript]
-----
-"dependencies": {
-    "collectionLayout": {
-        "named": "Todo items that are <i>dependencies</i> of this item",
-        "namedEscaped": false,
-    }
-}
-----
+The framework also provides a separate, powerful mechanism for xref:../ugbtb/ugbtb.adoc#_ugbtb_i18n[internationalization].
 
 
-[TIP]
-====
-The framework also provides a separate, powerful mechanism for xref:../ugbtb/ugbtb.adoc#_ugbtb_i18n[internationalization].
-====
+== See also
+
+This attribute can also be specified for:
+* xref:../rgant/rgant.adoc#_rgant-ActionLayout_named[actions]
+* xref:../rgant/rgant.adoc#_rgant-PropertyLayout_named[properties]
+* xref:../rgant/rgant.adoc#_rgant-ParameterLayout_named[parameters]
+* xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_named[domain objects]
+* xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_named[view models]
+* xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_named[domain services].
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_paged.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_paged.adoc
index 38192b8..c6308a6 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_paged.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_paged.adoc
@@ -5,12 +5,14 @@
 :_imagesdir: images/
 
 
-The `paged()` attribute specifies the number of rows to display in a (parented) collection. This attribute can also be applied to xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_paged[domain objects] and xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_paged[view models].
+The `paged()` attribute specifies the number of rows to display in a (parented) collection.
+
 
 
 [WARNING]
 ====
-The xref:../ugvro/ugvro.adoc#[RestfulObjects viewer] currently does not support paging.   The xref:../ugvw/ugvw.adoc#[Wicket viewer] _does_ support paging, but note that the paging is performed client-side rather than server-side.
+The xref:../ugvro/ugvro.adoc#[RestfulObjects viewer] currently does not support paging.
+The xref:../ugvw/ugvw.adoc#[Wicket viewer] _does_ support paging, but note that the paging is performed client-side rather than server-side.
 
 We therefore recommend that large collections should instead be modelled as actions (to allow filtering to be applied to limit the number of rows).
 ====
@@ -31,16 +33,14 @@ It is also possible to specify a global default for the page size of standalone
 
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+== Alternatives
 
-NOTE: FIXME - change to .layout.xml syntax instead.
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead.
 
-[source,javascript]
-----
-"details": {
-    "collectionLayout": {
-        "paged": 15
-    }
-}
-----
 
+== See also
+
+This attribute can also be applied to:
+
+* xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_paged[domain objects]
+* xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_paged[view models].
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_render.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_render.adoc
index 3466f1d..49480ef 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_render.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_render.adoc
@@ -20,20 +20,6 @@ public class Order {
 ----
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
-
-NOTE: FIXME - change to .layout.xml syntax instead.
-
-[source,javascript]
-----
-"details": {
-    "collectionLayout": {
-        "render": "EAGERLY"
-    }
-}
-----
-
-
 [NOTE]
 ====
 Note that xref:../ugfun/ugfun.adoc#_ugfun_how-tos_contributed-members[contributed collections] (which, under the covers are just action invocations against a domain service) are always rendered eagerly.
@@ -41,3 +27,8 @@ Note that xref:../ugfun/ugfun.adoc#_ugfun_how-tos_contributed-members[contribute
 Also, if a xref:../rgant/rgant.adoc#_rgant-CollectionLayout_defaultView[`@CollectionLayout#defaultView()`] attribute has been specified then that will take precedence over the value of the `render()` attribute.
 ====
 
+== Alternatives
+
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead.
+
+
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_sortedBy.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_sortedBy.adoc
index b84adcf..a19dafd 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_sortedBy.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-CollectionLayout_sortedBy.adoc
@@ -45,16 +45,6 @@ Without this annotation, the order would have been inverted (because the natural
 
 
 
+== Alternatives
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
-
-NOTE: FIXME - change to .layout.xml syntax instead.
-
-[source,javascript]
-----
-"dependencies": {
-    "collectionLayout": {
-        "sortedBy": "com.mycompany.myapp.dom.ToDoItem.DependenciesComparator"
-    }
-}
-----
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead.
\ No newline at end of file
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_editing.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_editing.adoc
index 4bef2ef..367d743 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_editing.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_editing.adoc
@@ -6,7 +6,7 @@
 
 
 
-The `editing()` annotation indicates whether a collection can be added to or removed from within the UI.  This attribute can also be specified for xref:../rgant/rgant.adoc#_rgant-Property_editing[properties], and can also be specified for the xref:../rgant/rgant.adoc#_rgant-DomainObject_editing[domain object]
+The `editing()` annotation indicates whether a collection can be added to or removed from within the UI.
 
 The related `editingDisabledReason()` attribute specifies the a hard-coded reason why the collection cannot be modified directly.
 
@@ -47,3 +47,12 @@ public class ToDoItem {
 ====
 To reiterate, it is _not_ possible to enable editing for a collection if editing has been disabled at the object-level.
 ====
+
+
+== See also
+
+This attribute can also be specified for:
+
+* xref:../rgant/rgant.adoc#_rgant-Property_editing[properties]
+* xref:../rgant/rgant.adoc#_rgant-DomainObject_editing[domain object]
+
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_hidden.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_hidden.adoc
index e252f41..d71882e 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_hidden.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_hidden.adoc
@@ -5,7 +5,8 @@
 :_imagesdir: images/
 
 
-Collections can be hidden at the domain-level, indicating that they are not visible to the end-user.  This attribute can also be applied to xref:../rgant/rgant.adoc#_rgant-Action_hidden[actions] and xref:../rgant/rgant.adoc#_rgant-Property_hidden[properties].
+Collections can be hidden at the domain-level, indicating that they are not visible to the end-user.
+
 
 [TIP]
 ====
@@ -53,3 +54,10 @@ The xref:../ugvw/ugvw.adoc#[Wicket viewer] suppresses collections when displayin
 
 The xref:../ugvro/ugvro.adoc#[RestfulObjects viewer] by default suppress collections when rendering a domain object.
 ====
+
+== See also
+
+This attribute can also be applied to:
+
+* xref:../rgant/rgant.adoc#_rgant-Action_hidden[actions]
+* xref:../rgant/rgant.adoc#_rgant-Property_hidden[properties].
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_typeOf.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_typeOf.adoc
index ed6e4c2..d784c55 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_typeOf.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_typeOf.adoc
@@ -5,7 +5,8 @@
 :_imagesdir: images/
 
 
-The `typeOf()` attribute specifies the expected type of an element contained within a collection when for whatever reason the type cannot be inferred from the generic type, or to provide a hint about the actual run-time (as opposed to compile-time) type.  This attribute can also be specified for xref:../rgant/rgant.adoc#_rgant-Action_typeOf[actions].
+The `typeOf()` attribute specifies the expected type of an element contained within a collection when for whatever reason the type cannot be inferred from the generic type, or to provide a hint about the actual run-time (as opposed to compile-time) type.
+
 
 For example:
 
@@ -24,3 +25,6 @@ In general we recommend that you use generics instead, eg `SortedSet<Order>`.
 ====
 
 
+== See also
+
+This attribute can also be specified for xref:../rgant/rgant.adoc#_rgant-Action_typeOf[actions].
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout.adoc
index 99035be..dca4ae7 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout.adoc
@@ -62,6 +62,11 @@ The table below summarizes the annotation's attributes.
 (`IconUiEvent.Default`)
 |the event type to be posted to the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] to obtain the icon (name) for the domain object.
 
+|xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_layoutUiEvent[`layoutUiEvent()`]
+|subtype of `LayoutUiEvent` +
+(`LayoutUiEvent.Default`)
+|the event type to be posted to the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] to obtain the layout (name) for the domain object.
+
 |xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_named[`named()`]
 |String.
 |to override the name inferred from the action's name in code. +
@@ -124,6 +129,7 @@ include::_rgant-DomainObjectLayout_cssClassFa.adoc[leveloffset=+1]
 include::_rgant-DomainObjectLayout_cssClassUiEvent.adoc[leveloffset=+1]
 include::_rgant-DomainObjectLayout_describedAs.adoc[leveloffset=+1]
 include::_rgant-DomainObjectLayout_iconUiEvent.adoc[leveloffset=+1]
+include::_rgant-DomainObjectLayout_layoutUiEvent.adoc[leveloffset=+1]
 include::_rgant-DomainObjectLayout_named.adoc[leveloffset=+1]
 include::_rgant-DomainObjectLayout_paged.adoc[leveloffset=+1]
 include::_rgant-DomainObjectLayout_plural.adoc[leveloffset=+1]
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_bookmarking.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_bookmarking.adoc
index 281cbdc..383caea 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_bookmarking.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_bookmarking.adoc
@@ -65,4 +65,7 @@ The nesting can be done to any level; the Estatio screenshot also shows a bookma
 
 
 
+== See also
+
+This attribute can also be applied to xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_bookmarking[view models].
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_cssClass.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_cssClass.adoc
index 27251fb..7dba668 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_cssClass.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_cssClass.adoc
@@ -6,16 +6,16 @@
 
 
 
-The `cssClass()` attribute can be used to render additional CSS classes in the HTML (a wrapping `<div>`) that represents the domain object.   xref:../rgcfg/rgcfg.adoc#_rgcfg_application-specific_application-css[Application-specific CSS] can then be used to target and adjust the UI representation of that particular element.
-
-This attribute can also be applied to xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_cssClass[domain objects], xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_cssClass[view models], xref:../rgant/rgant.adoc#_rgant-ActionLayout_cssClass[actions] xref:../rgant/rgant.adoc#_rgant-PropertyLayout_cssClass[properties],  xref:../rgant/rgant.adoc#_rgant-CollectionLayout_cssClass[collections] and xref:../rgant/rgant.adoc#_rgant-ParameterLayout_cssClass[parameters].
+The `cssClass()` attribute can be used to render additional CSS classes in the HTML (a wrapping `<div>`) that represents the domain object.
+xref:../rgcfg/rgcfg.adoc#_rgcfg_application-specific_application-css[Application-specific CSS] can then be used to target and adjust the UI representation of that particular element.
 
 
 For example:
 
 [source,java]
 ----
-@DomainObject(
+@DomainObject
+@DomainObjectLayout(
     cssClass="x-core-entity"
 )
 public class ToDoItem { ... }
@@ -26,9 +26,18 @@ public class ToDoItem { ... }
 
 [NOTE]
 ====
-The similar xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_cssClassFa[`@DomainObjectLayout#cssClassFa()`] annotation attribute is also used as a hint to apply CSS, but in particular to allow http://fortawesome.github.io/Font-Awesome/icons/[Font Awesome icons]
-to be rendered as the icon for classes.
+The similar xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_cssClassFa[`@DomainObjectLayout#cssClassFa()`] annotation attribute is also used as a hint to apply CSS, but in particular to allow http://fortawesome.github.io/Font-Awesome/icons/[Font Awesome icons] to be rendered as the icon for classes.
 ====
 
 
 
+== See also
+
+This attribute can also be applied to:
+
+* xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_cssClass[view models]
+* xref:../rgant/rgant.adoc#_rgant-ActionLayout_cssClass[actions]
+* xref:../rgant/rgant.adoc#_rgant-PropertyLayout_cssClass[properties],
+* xref:../rgant/rgant.adoc#_rgant-CollectionLayout_cssClass[collections]
+* xref:../rgant/rgant.adoc#_rgant-ParameterLayout_cssClass[parameters].
+
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_cssClassFa.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_cssClassFa.adoc
index 9045c53..cf61be7 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_cssClassFa.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_cssClassFa.adoc
@@ -8,8 +8,6 @@
 
 The `cssClassFa()` attribute is used to specify the name of a link:http://fortawesome.github.io/Font-Awesome/icons/[Font Awesome icon] name, to be rendered as the domain object's icon.
 
-These attributes can also be applied to xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_cssClassFa[view models] to specify the object's icon, and to xref:../rgant/rgant.adoc#_rgant-ActionLayout_cssClassFa[actions] to specify an icon for the action's representation as a button or menu item.
-
 If necessary the icon specified can be overridden by a particular object instance using the xref:../rgcms/rgcms.adoc#_rgcms_methods_reserved_iconName[`iconName()`] method.
 
 
@@ -38,3 +36,10 @@ The similar xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_cssClass[`@Domain
 ====
 
 
+== See also
+
+These attributes can also be applied to:
+
+* xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_cssClassFa[view models] to specify the object's icon, and
+* xref:../rgant/rgant.adoc#_rgant-ActionLayout_cssClassFa[actions] to specify an icon for the action's representation as a button or menu item.
+
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_cssClassUiEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_cssClassUiEvent.adoc
index c44e31e..040aeec 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_cssClassUiEvent.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_cssClassUiEvent.adoc
@@ -114,3 +114,7 @@ Normally events are only raised for interactions through the UI.
 However, events can be raised programmatically by calling the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] API directly.
 
 
+== See also
+
+This attribute can also be applied to xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_cssClassUiEvent[view models].
+
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_describedAs.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_describedAs.adoc
index 25d7fbb..e4da6f2 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_describedAs.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_describedAs.adoc
@@ -7,14 +7,14 @@
 
 The `describedAs()` attribute is used to provide a short description of the domain object to the user.
 In the xref:../ugvw/ugvw.adoc#[Wicket viewer] it is displayed as a 'tool tip'.
-The attribute can also be specified for xref:../rgant/rgant.adoc#_rgant-CollectionLayout_describedAs[collections],  xref:../rgant/rgant.adoc#_rgant-PropertyLayout_describedAs[properties], xref:../rgant/rgant.adoc#_rgant-ActionLayout_describedAs[actions], xref:../rgant/rgant.adoc#_rgant-ParameterLayout_describedAs[parameters] and xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_describedAs[view models].
 
 For example:
 
 [source,java]
 ----
-@DomainObjectLayout(describedAs="A customer who may have originally become known to us via " +
-             "the marketing system or who may have contacted us directly.")
+@DomainObjectLayout(
+    describedAs="A customer who may have originally become known to us via the marketing system or who may have contacted us directly."
+ )
 public class ProspectiveSale {
    ...
 }
@@ -22,3 +22,13 @@ public class ProspectiveSale {
 
 
 
+== See also
+
+The attribute can also be specified for:
+
+* xref:../rgant/rgant.adoc#_rgant-CollectionLayout_describedAs[collections]
+* xref:../rgant/rgant.adoc#_rgant-PropertyLayout_describedAs[properties]
+* xref:../rgant/rgant.adoc#_rgant-ActionLayout_describedAs[actions]
+* xref:../rgant/rgant.adoc#_rgant-ParameterLayout_describedAs[parameters] and
+* xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_describedAs[view models].
+
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_iconUiEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_iconUiEvent.adoc
index 24bdad2..4acb006 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_iconUiEvent.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_iconUiEvent.adoc
@@ -109,3 +109,7 @@ Normally events are only raised for interactions through the UI.
 However, events can be raised programmatically by calling the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] API directly.
 
 
+== See also
+
+This attribute can also be applied to xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_iconNameUiEvent[view models].
+
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_layoutUiEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_layoutUiEvent.adoc
index 07eed8e..9198967 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_layoutUiEvent.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_layoutUiEvent.adoc
@@ -5,19 +5,13 @@
 :_imagesdir: images/
 
 
-Whenever a domain object is to be rendered, the framework fires off an CSS class UI event to obtain a CSS class to use in any wrapping ``<div>``s and ``<span>``s that render the domain object.
+Whenever a domain object is to be rendered, the framework fires off an layout UI event to obtain an alternative layout name with which to render the domain object.
 This is as an alternative to implementing xref:../rgcms/rgcms.adoc#_rgcms_methods_reserved_layout[`layout()`] reserved method.
 (If `layout()` is present, then it will take precedence).
 
 Subscribers subscribe through the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] and can use obtain a reference to the domain object from the event.
 From this they can, if they wish, specify a CSS class for the domain object using the event's API.
 
-[NOTE]
-====
-The feature was originally introduced so that xref:../rgant/rgant.adoc#_rgant-XmlRootElement[`@XmlRootElement`]-annotated xref:../ugfun/ugfun.adoc#_ugfun_building-blocks_types-of-domain-objects_view-models[view model]s could be kept as minimal as possible, just defining the data.
-UI events allow subscribers to provide UI hints, while xref:../ugfun/ugfun.adoc#_ugfun_building-blocks_types-of-domain-objects_mixins[mixin]s can be used to provide the behaviour.
-====
-
 By default the event raised is `LayoutUiEvent.Default`.
 For example:
 
@@ -53,9 +47,7 @@ The benefit is that subscribers can be more targeted as to the events that they
 
 == Subscribers
 
-Subscribers (which must be domain services) subscribe using either the link:https://github.com/google/guava[Guava] API
-or (if the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] has been appropriately configured)
-using the link:http://www.axonframework.org/[Axon Framework] API.
+Subscribers (which must be domain services) subscribe using either the link:https://github.com/google/guava[Guava] API or (if the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] has been appropriately configured) using the link:http://www.axonframework.org/[Axon Framework] API.
 The examples below are compatible with both.
 
 Subscribers can be either coarse-grained (if they subscribe to the top-level event type):
@@ -114,3 +106,9 @@ Normally events are only raised for interactions through the UI.
 However, events can be raised programmatically by calling the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] API directly.
 
 
+
+
+== See also
+
+This attribute can also be applied to xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_layoutUiEvent[view models].
+
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_named.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_named.adoc
index 07524e6..d6f6b58 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_named.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_named.adoc
@@ -6,12 +6,13 @@
 
 
 The `named()` attribute explicitly specifies the domain object's name, overriding the name that would normally be inferred from the Java source code.
-The attribute can also be specified for xref:../rgant/rgant.adoc#_rgant-ActionLayout_named[actions], xref:../rgant/rgant.adoc#_rgant-CollectionLayout_named[collections], xref:../rgant/rgant.adoc#_rgant-PropertyLayout_named[properties], xref:../rgant/rgant.adoc#_rgant-ParameterLayout_named[parameters], xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_named[view models] and xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_named[domain services].
+
 
 
 [TIP]
 ====
-Following the link:http://en.wikipedia.org/wiki/Don%27t_repeat_yourself[don't repeat yourself] principle, we recommend that you only use this attribute when the desired name cannot be used in Java source code.  Examples of that include a name that would be a reserved Java keyword (eg "package"), or a name that has punctuation, eg apostrophes.
+Following the link:http://en.wikipedia.org/wiki/Don%27t_repeat_yourself[don't repeat yourself] principle, we recommend that you only use this attribute when the desired name cannot be used in Java source code.
+Examples of that include a name that would be a reserved Java keyword (eg "package"), or a name that has punctuation, eg apostrophes.
 ====
 
 
@@ -36,3 +37,13 @@ The framework also provides a separate, powerful mechanism for xref:../ugbtb/ugb
 ====
 
 
+== See also
+
+The attribute can also be specified for:
+
+* xref:../rgant/rgant.adoc#_rgant-ActionLayout_named[actions]
+* xref:../rgant/rgant.adoc#_rgant-CollectionLayout_named[collections]
+* xref:../rgant/rgant.adoc#_rgant-PropertyLayout_named[properties]
+* xref:../rgant/rgant.adoc#_rgant-ParameterLayout_named[parameters]
+* xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_named[view models]
+* xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_named[domain services].
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_paged.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_paged.adoc
index e9632ba..692d8b9 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_paged.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_paged.adoc
@@ -7,7 +7,7 @@
 
 
 The `paged()` attribute specifies the number of rows to display in a standalone collection, as returned from an action invocation.
-This attribute can also be applied to xref:../rgant/rgant.adoc#_rgant-CollectionLayout_paged[collections] and xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_paged[view models].
+
 
 
 [WARNING]
@@ -33,3 +33,10 @@ public class Order {
 It is also possible to specify a global default for the page size of standalone collections, using the xref:../rgcfg/rgcfg.adoc#_rgcfg_configuring-core[configuration property] `isis.viewer.paged.standalone`.
 
 
+
+== See also
+
+This attribute can also be applied to:
+
+* xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_paged[view models], and
+* xref:../rgant/rgant.adoc#_rgant-CollectionLayout_paged[collections]
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_plural.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_plural.adoc
index c1f979c..7b392f5 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_plural.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_plural.adoc
@@ -7,11 +7,8 @@
 
 
 When Apache Isis displays a standalone collection of several objects, it will label the collection using the plural form of the object type.
-
 By default the plural name will be derived from the end of the singular name, with support for some basic English language defaults (eg using "ies" for names ending with a "y").
-
 The `plural()` attribute allows the plural form of the class name to be specified explicitly.
-This attribute is also supported for xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_plural[view models].
 
 For example:
 
@@ -24,6 +21,7 @@ public class Child {
 ----
 
 
+== See also
 
-
+This attribute is also supported for xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_plural[view models].
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_titleUiEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_titleUiEvent.adoc
index 123f72b..5ed1021 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_titleUiEvent.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_titleUiEvent.adoc
@@ -106,3 +106,10 @@ And, conversely, the framework also provides `TitleUiEvent.Noop`; if `titleUiEve
 
 Normally events are only raised for interactions through the UI.
 However, events can be raised programmatically either by calling the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] API directly, or as a result of calling the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer[`DomainObjectContainer`]'s `titleOf(...)` method.
+
+
+
+== See also
+
+This attribute can also be applied to xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_titleUiEvent[view models].
+
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainServiceLayout_named.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainServiceLayout_named.adoc
index 030b5b4..41dc084 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainServiceLayout_named.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainServiceLayout_named.adoc
@@ -5,7 +5,8 @@
 :_imagesdir: images/
 
 
-The `named()` attribute explicitly specifies the domain service's name, overriding the name that would normally be inferred from the Java source code.  This attribute can also be specified for xref:../rgant/rgant.adoc#_rgant-ActionLayout_named[actions], xref:../rgant/rgant.adoc#_rgant-CollectionLayout_named[collections], xref:../rgant/rgant.adoc#_rgant-PropertyLayout_named[properties], xref:../rgant/rgant.adoc#_rgant-ParameterLayout_named[parameters], xref:../rgant/rgant.adoc#_rgant-Doma [...]
+The `named()` attribute explicitly specifies the domain service's name, overriding the name that would normally be inferred from the Java source code.
+
 
 
 [TIP]
@@ -27,3 +28,13 @@ public class CustomerRepository {
 ----
 
 
+== See also
+
+This attribute can also be specified for:
+
+* xref:../rgant/rgant.adoc#_rgant-ActionLayout_named[actions]
+* xref:../rgant/rgant.adoc#_rgant-CollectionLayout_named[collections]
+* xref:../rgant/rgant.adoc#_rgant-PropertyLayout_named[properties]
+* xref:../rgant/rgant.adoc#_rgant-ParameterLayout_named[parameters]
+* xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_named[domain objects]
+* xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_named[view models].
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainService_nature.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainService_nature.adoc
index 568303b..303ebfb 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainService_nature.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainService_nature.adoc
@@ -5,7 +5,9 @@
 :_imagesdir: images/
 
 
-By default, a domain service's actions will be rendered in the application menu bar _and_ be contributed _and_ appear in the REST API _and_ (of course) be available to invoke programmatically wherever that domain service is injected.  This is great for initial prototyping, but later on you may prefer to add a little more structure.  This is the purpose of the `nature()` attribute: to indicates the intent of (all of) the actions defined within the domain service.
+By default, a domain service's actions will be rendered in the application menu bar _and_ be contributed _and_ appear in the REST API _and_ (of course) be available to invoke programmatically wherever that domain service is injected.
+This is great for initial prototyping, but later on you may prefer to add a little more structure.
+This is the purpose of the `nature()` attribute: to indicates the intent of (all of) the actions defined within the domain service.
 
 The values of the enum are:
 
@@ -19,7 +21,7 @@ The service's actions appear on menus and in the REST API, but are not contribut
 
 * `VIEW_CONTRIBUTIONS_ONLY` +
 +
-The service's actions are intended only to be used as contributed actions/associations to domain objects and view models. +
+The service's actions are intended only to be used as contributed actions/associations to domain objects and view model
 +
 The related xref:../rgant/rgant.adoc#_rgant-ActionLayout_contributedAs[`@ActionLayout#contributedAs()`] determines whether any given (1-arg) action is contributed as an association rather than an action.
 
@@ -50,7 +52,8 @@ public class LoanContributions {                                  // <1>
     public Borrower newLoan(Borrower borrower, Book book) { ... }
 }
 ----
-<1> `Contributions` as a suffix for a domain service that contributes a number of actions to ``Borrower``s.  Note that `Borrower` could be a (marker) interface, so this functionality is "mixed in" merely by the class (eg `LibraryMember`) implementing this interface
+<1> `Contributions` as a suffix for a domain service that contributes a number of actions to ``Borrower``s.
+Note that `Borrower` could be a (marker) interface, so this functionality is "mixed in" merely by the class (eg `LibraryMember`) implementing this interface
 <2> actions contibuted as associations (a collection in this case) must have safe semantics
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ParameterLayout_cssClass.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ParameterLayout_cssClass.adoc
index 5ba4b7e..f34771a 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ParameterLayout_cssClass.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ParameterLayout_cssClass.adoc
@@ -9,7 +9,6 @@
 
 The `cssClass()` attribute can be used to render additional CSS classes in the HTML (a wrapping `<div>`) that represents the action parameter.   xref:../rgcfg/rgcfg.adoc#_rgcfg_application-specific_application-css[Application-specific CSS] can then be used to target and adjust the UI representation of that particular element.
 
-This attribute can also be applied to xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_cssClass[domain objects], xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_cssClass[view models], xref:../rgant/rgant.adoc#_rgant-ActionLayout_cssClass[actions] xref:../rgant/rgant.adoc#_rgant-PropertyLayout_cssClass[properties],  xref:../rgant/rgant.adoc#_rgant-CollectionLayout_cssClass[collections] and xref:../rgant/rgant.adoc#_rgant-ParameterLayout_cssClass[parameters].
 
 For example:
 
@@ -27,3 +26,15 @@ public class ToDoItem {
 }
 ----
 
+
+== See also
+
+
+This attribute can also be applied to:
+
+* xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_cssClass[domain objects]
+* xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_cssClass[view models]
+* xref:../rgant/rgant.adoc#_rgant-ActionLayout_cssClass[actions]
+* xref:../rgant/rgant.adoc#_rgant-PropertyLayout_cssClass[properties],
+* xref:../rgant/rgant.adoc#_rgant-CollectionLayout_cssClass[collections]
+* xref:../rgant/rgant.adoc#_rgant-ParameterLayout_cssClass[parameters].
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ParameterLayout_labelPosition.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ParameterLayout_labelPosition.adoc
index 610b0ed..af33c90 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ParameterLayout_labelPosition.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ParameterLayout_labelPosition.adoc
@@ -6,7 +6,7 @@
 
 
 
-The `labelPosition()` attribute determines the positioning of labels for parameters.  This attribute can also be specified for xref:../rgant/rgant.adoc#_rgant-PropertyLayout_labelPosition[properties].
+The `labelPosition()` attribute determines the positioning of labels for parameters.
 
 The positioning of labels is typically `LEFT`, but can be positioned to the `TOP`.  The one exception is xref:../rgant/rgant.adoc#_rgant-ParameterLayout_multiLine[`multiLine()`] string parameters, where the label defaults to `TOP` automatically (to provide as much real-estate for the multiline text field as possible).
 
@@ -20,15 +20,15 @@ For example:
 ----
 public class Order {
     public Order changeStatus(
-                    OrderStatus newStatus
-                    @Parameter(
-                        optionality=Optionality.OPTIONAL
-                    )
-                    @ParameterLayout(
-                        named="Reason",
-                        labelPosition=LabelPosition.TOP
-                    )
-                    String reason) {
+            OrderStatus newStatus
+            @Parameter(
+                optionality=Optionality.OPTIONAL
+            )
+            @ParameterLayout(
+                named="Reason",
+                labelPosition=LabelPosition.TOP
+            )
+            String reason) {
         ...
     }
     ...
@@ -39,3 +39,7 @@ public class Order {
 To get an idea of how these are rendered (in the xref:../ugvw/ugvw.adoc#[Wicket viewer]), see xref:../rgant/rgant.adoc#_rgant-PropertyLayout_labelPosition[PropertyLayout#labelPosition()].
 
 
+== See also
+
+This attribute can also be specified for xref:../rgant/rgant.adoc#_rgant-PropertyLayout_labelPosition[properties].
+
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ParameterLayout_named.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ParameterLayout_named.adoc
index 8ec32c9..79bc1dc 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ParameterLayout_named.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ParameterLayout_named.adoc
@@ -6,7 +6,7 @@
 
 
 
-The `named()` attribute explicitly specifies the action parameter's name. This attribute can also be specified for xref:../rgant/rgant.adoc#_rgant-ActionLayout_named[actions], xref:../rgant/rgant.adoc#_rgant-CollectionLayout_named[collections], xref:../rgant/rgant.adoc#_rgant-PropertyLayout_named[properties], xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_named[domain objects], xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_named[view models] and xref:../rgant/rgant.adoc#_rgant-Doma [...]
+The `named()` attribute explicitly specifies the action parameter's name.
 
 Unlike most other aspects of the Apache Isis metamodel, the name of method parameters cannot (prior to Java 8, at least) be inferred from the Java source code.
 Without other information, Apache Isis uses the object's type (`int`, `String` etc) as the name instead.
@@ -47,3 +47,15 @@ public class Customer {
 ====
 The framework also provides a separate, powerful mechanism for xref:../ugbtb/ugbtb.adoc#_ugbtb_i18n[internationalization].
 ====
+
+== See also
+
+This attribute can also be specified for:
+
+* xref:../rgant/rgant.adoc#_rgant-ActionLayout_named[actions]
+* xref:../rgant/rgant.adoc#_rgant-CollectionLayout_named[collections]
+* xref:../rgant/rgant.adoc#_rgant-PropertyLayout_named[properties]
+* xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_named[domain objects]
+* xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_named[view models]
+* xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_named[domain services].
+
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Parameter_maxLength.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Parameter_maxLength.adoc
index 08bf48d..b19b1d3 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Parameter_maxLength.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Parameter_maxLength.adoc
@@ -6,7 +6,8 @@
 
 
 
-The `maxLength()` attribute applies only to `String` parameters, indicating the maximum number of characters that the user may enter (for example in a text field in the UI).  It is ignored if applied to parameters of any other type.  This attribute can also be applied to xref:../rgant/rgant.adoc#_rgant-Property_maxLength[properties].
+The `maxLength()` attribute applies only to `String` parameters, indicating the maximum number of characters that the user may enter (for example in a text field in the UI).  It is ignored if applied to parameters of any other type.
+
 
 For example:
 
@@ -29,7 +30,6 @@ public class CustomerRepository {
 
 
 
+== See also
 
-
-
-
+This attribute can also be applied to xref:../rgant/rgant.adoc#_rgant-Property_maxLength[properties].
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Parameter_regexPattern.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Parameter_regexPattern.adoc
index 103ad2e..2c41a85 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Parameter_regexPattern.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Parameter_regexPattern.adoc
@@ -8,7 +8,7 @@
 
 There are three attributes related to enforcing regular expressions:
 
-* The `regexPattern()` attribute validates the contents of any string parameter with respect to a regular expression pattern. It is ignored if applied to parameters of any other type. This attribute can also be specified for xref:../rgant/rgant.adoc#_rgant-Property_regexPattern[properties].
+* The `regexPattern()` attribute validates the contents of any string parameter with respect to a regular expression pattern. It is ignored if applied to parameters of any other type.
 
 * The `regexPatternFlags()` attribute specifies flags that modify the handling of the pattern.  The values are those
 that would normally be passed to `java.util.regex.Pattern#compile(String,int)`.
@@ -35,3 +35,8 @@ public class Customer {
 ----
 <1> Note that there is currently no i18n support for this phrase.
 
+
+
+== See also
+
+This attribute can also be specified for xref:../rgant/rgant.adoc#_rgant-Property_regexPattern[properties].
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_cssClass.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_cssClass.adoc
index 31192f2..f501425 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_cssClass.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_cssClass.adoc
@@ -5,10 +5,8 @@
 :_imagesdir: images/
 
 
-The `cssClass()` attribute can be used to render additional CSS classes in the HTML (a wrapping `<div>`) that represents the property.   xref:../rgcfg/rgcfg.adoc#_rgcfg_application-specific_application-css[Application-specific CSS] can then be used to target and adjust the UI representation of that particular element.
-
-This attribute can also be applied to xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_cssClass[domain objects], xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_cssClass[view models], xref:../rgant/rgant.adoc#_rgant-ActionLayout_cssClass[actions] xref:../rgant/rgant.adoc#_rgant-CollectionLayout_cssClass[collections] and xref:../rgant/rgant.adoc#_rgant-ParameterLayout_cssClass[parameters].
-
+The `cssClass()` attribute can be used to render additional CSS classes in the HTML (a wrapping `<div>`) that represents the property.
+xref:../rgcfg/rgcfg.adoc#_rgcfg_application-specific_application-css[Application-specific CSS] can then be used to target and adjust the UI representation of that particular element.
 
 For example:
 
@@ -23,15 +21,19 @@ public class ToDoItem {
 
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+== Alternatives
 
-NOTE: FIXME - change to .layout.xml syntax instead.
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead.
 
-[source,javascript]
-----
-"dueBy": {
-    "propertyLayout": { "cssClass": "x-key" }
-}
-----
+
+== See also
+
+This attribute can also be applied to:
+
+* xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_cssClass[domain objects]
+* xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_cssClass[view models]
+* xref:../rgant/rgant.adoc#_rgant-ActionLayout_cssClass[actions]
+* xref:../rgant/rgant.adoc#_rgant-CollectionLayout_cssClass[collections]
+* xref:../rgant/rgant.adoc#_rgant-ParameterLayout_cssClass[parameters].
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_describedAs.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_describedAs.adoc
index 1e65f56..084761d 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_describedAs.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_describedAs.adoc
@@ -20,15 +20,6 @@ public class Customer {
 ----
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+== Alternatives
 
-NOTE: FIXME - change to .layout.xml syntax instead.
-
-[source,javascript]
-----
-"firstName:" {
-    "propertyLayout": {
-        "describedAs": "The name that the customer has indicated that they wish to be addressed as (e.g. Johnny rather than Jonathan)"
-     }
-}
-----
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead.
\ No newline at end of file
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_hidden.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_hidden.adoc
index 35b43f5..bcc1a27 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_hidden.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_hidden.adoc
@@ -6,7 +6,7 @@
 
 
 
-The `hidden()` attribute indicates where (in the UI) the property should be hidden from the user.  This attribute can also be applied to xref:../rgant/rgant.adoc#_rgant-Action_hidden[actions] and xref:../rgant/rgant.adoc#_rgant-Collection_hidden[collections].
+The `hidden()` attribute indicates where (in the UI) the property should be hidden from the user.
 
 [TIP]
 ====
@@ -30,33 +30,33 @@ public class Customer {
 
 The acceptable values for the `where` parameter are:
 
-* `Where.EVERYWHERE` or `Where.ANYWHERE` +
+* `Where.EVERYWHERE` or `Where.ANYWHERE`
 +
 The property should be hidden everywhere.
 
-* `Where.ANYWHERE` +
+* `Where.ANYWHERE`
 +
 Synonym for everywhere.
 
-* `Where.OBJECT_FORMS` +
+* `Where.OBJECT_FORMS`
 +
 The property should be hidden when displayed within an object form.
 
-* `Where.PARENTED_TABLES` +
+* `Where.PARENTED_TABLES`
 +
 The property should be hidden when displayed as a column of a table within a parent object's collection.
 
-* `Where.STANDALONE_TABLES` +
+* `Where.STANDALONE_TABLES`
 +
 The property should be hidden when displayed as a column of a table showing a standalone list of objects, for example as returned by a repository query.
 
-* `Where.ALL_TABLES` +
+* `Where.ALL_TABLES`
 +
 The property should be hidden when displayed as a column of a table, either an object's * collection or a standalone list. This combines `PARENTED_TABLES` and `STANDALONE_TABLES`.
 
-* `Where.NOWHERE` +
+* `Where.NOWHERE`
 +
-The property should not be hidden, overriding any other metadata/conventions that would normally cause the property to be hidden. +
+The property should not be hidden, overriding any other metadata/conventions that would normally cause the property to be hidden.
 
 For example, if a property is annotated with xref:../rgant/rgant.adoc#_rgant-Title[`@Title`], then normally this should be hidden from all
 tables. Annotating with `@Property(where=Where.NOWHERE)` overrides this.
@@ -68,13 +68,14 @@ The xref:../ugvro/ugvro.adoc#[RestfulObjects viewer] has only partial support fo
 ====
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+== Alternatives
 
-NOTE: FIXME - change to .layout.xml syntax instead.
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead.
+
+== See also
+
+This attribute can also be applied to:
+
+* xref:../rgant/rgant.adoc#_rgant-Action_hidden[actions]
+* xref:../rgant/rgant.adoc#_rgant-Collection_hidden[collections].
 
-[source,javascript]
-----
-"internalId": {
-    "propertyLayout": { "hidden": "ALL_TABLES" }
-}
-----
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_labelPosition.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_labelPosition.adoc
index 294c15a..4fc5483 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_labelPosition.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_labelPosition.adoc
@@ -7,9 +7,10 @@
 
 
 
-The `labelPosition()` attribute determines the positioning of labels for properties.  This attribute can also be specified for xref:../rgant/rgant.adoc#_rgant-ParameterLayout_labelPosition[parameters].
+The `labelPosition()` attribute determines the positioning of labels for properties.
 
-The positioning of labels is typically `LEFT`, but can be positioned to the `TOP`.  The one exception is xref:../rgant/rgant.adoc#_rgant-ParameterLayout_multiLine[`multiLine()`] string properties, where the label defaults to `TOP` automatically (to provide as much real-estate for the multiline text field as possible).
+The positioning of labels is typically `LEFT`, but can be positioned to the `TOP`.
+The one exception is xref:../rgant/rgant.adoc#_rgant-ParameterLayout_multiLine[`multiLine()`] string properties, where the label defaults to `TOP` automatically (to provide as much real-estate for the multiline text field as possible).
 
 For boolean properties a positioning of `RIGHT` is also allowed; this is ignored for all other types.
 
@@ -58,21 +59,6 @@ image::{_imagesdir}reference-annotations/PropertyLayout/labelPosition-boolean-RI
 
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
-
-NOTE: FIXME - change to .layout.xml syntax instead.
-
-[source,javascript]
-----
-"description": {
-    "propertyLayout": {
-        "labelPosition": "TOP"
-    }
-}
-----
-
-
-
 [TIP]
 .Specifying a default setting for label positions
 ====
@@ -95,3 +81,14 @@ isis.viewers.propertyLayout.labelPosition=LEFT
 If these are not present then Apache Isis will render according to internal defaults. At the time of writing, this means labels are to the left for all datatypes except multiline strings.
 ====
 
+
+== Alternatives
+
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead.
+
+
+
+== See also
+
+This attribute can also be specified for xref:../rgant/rgant.adoc#_rgant-ParameterLayout_labelPosition[parameters].
+
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_multiLine.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_multiLine.adoc
index d1b3b02..d9e05b2 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_multiLine.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_multiLine.adoc
@@ -24,22 +24,12 @@ public class BugReport {
 Here the `stepsToReproduce` will be displayed in a text area of 10 rows.
 
 
-
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
-
-NOTE: FIXME - change to .layout.xml syntax instead.
-
-[source,javascript]
-----
-"stepsToReproduce": {
-    "propertyLayout": {
-        "numberOfLines": 10
-    }
-}
-----
-
-
 [NOTE]
 ====
 If set > 1 (as would normally be the case), then the default xref:../rgant/rgant.adoc#_rgant-PropertyLayout_labelPosition[`labelPosition`] defaults to `TOP` (rather than `LEFT`, as would normally be the case).
 ====
+
+== Alternatives
+
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead.
+
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_named.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_named.adoc
index 04167b0..266737a 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_named.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_named.adoc
@@ -5,15 +5,17 @@
 :_imagesdir: images/
 
 
-The `named()` attribute explicitly specifies the property's name, overriding the name that would normally be inferred from the Java source code.  This attribute can also be specified for xref:../rgant/rgant.adoc#_rgant-ActionLayout_named[actions], xref:../rgant/rgant.adoc#_rgant-CollectionLayout_named[collections], xref:../rgant/rgant.adoc#_rgant-ParameterLayout_named[parameters], xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_named[domain objects], xref:../rgant/rgant.adoc#_rgant-Vi [...]
+The `named()` attribute explicitly specifies the property's name, overriding the name that would normally be inferred from the Java source code.
 
 [TIP]
 ====
-Following the link:http://en.wikipedia.org/wiki/Don%27t_repeat_yourself[don't repeat yourself] principle, we recommend that you only use this attribute when the desired name cannot be used in Java source code.  Examples of that include a name that would be a reserved Java keyword (eg "package"), or a name that has punctuation, eg apostrophes.
+Following the link:http://en.wikipedia.org/wiki/Don%27t_repeat_yourself[don't repeat yourself] principle, we recommend that you only use this attribute when the desired name cannot be used in Java source code.
+Examples of that include a name that would be a reserved Java keyword (eg "package"), or a name that has punctuation, eg apostrophes.
 ====
 
 
-By default the name is HTML escaped.  To allow HTML markup, set the related `namedEscaped()` attribute to `false`.
+By default the name is HTML escaped.
+To allow HTML markup, set the related `namedEscaped()` attribute to `false`.
 
 For example:
 
@@ -31,22 +33,22 @@ public class ToDoItem {
 
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+== Alternatives
 
-NOTE: FIXME - change to .layout.xml syntax instead.
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead.
 
-[source,javascript]
-----
-"description": {
-    "propertyLayout": {
-        "named": "Description of this <i>item</i>",
-        "namedEscaped": false
-    }
-}
-----
 
-
-[TIP]
-====
 The framework also provides a separate, powerful mechanism for xref:../ugbtb/ugbtb.adoc#_ugbtb_i18n[internationalization].
-====
+
+
+== See also
+
+This attribute can also be specified for:
+
+* xref:../rgant/rgant.adoc#_rgant-ActionLayout_named[actions]
+* xref:../rgant/rgant.adoc#_rgant-CollectionLayout_named[collections]
+* xref:../rgant/rgant.adoc#_rgant-ParameterLayout_named[parameters]
+* xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_named[domain objects]
+* xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_named[view models]
+* xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_named[domain services].
+
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_promptStyle.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_promptStyle.adoc
index bf32d2c..5abd006 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_promptStyle.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_promptStyle.adoc
@@ -27,4 +27,3 @@ Note that the value `INLINE_AS_IF_EDIT` does not make sense for properties; if s
 
 Alternatively, the `promptStyle()` can be specified using xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layouts].
 
-NOTE: FIXME - provide an example here
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_renderedAsDayBefore.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_renderedAsDayBefore.adoc
index e29987f..a393c5b 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_renderedAsDayBefore.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_renderedAsDayBefore.adoc
@@ -32,15 +32,6 @@ public class Tenancy {
 
 
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+== Alternatives
 
-NOTE: FIXME - change to .layout.xml syntax instead.
-
-[source,javascript]
-----
-"endDate": {
-    "propertyLayout": {
-        "renderedAsDayBefore": true
-    }
-}
-----
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead.
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_typicalLength.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_typicalLength.adoc
index 6fa3a03..32ba1b4 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_typicalLength.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_typicalLength.adoc
@@ -23,6 +23,6 @@ public class Customer {
 }
 ----
 
-As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead, eg:
+== Alternatives
 
-NOTE: FIXME - provide a .layout.xml example here.
+As an alternative to using the annotation, the dynamic xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[file-based layout] can be used instead.
\ No newline at end of file
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property_editing.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property_editing.adoc
index e565f7e..d38c980 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property_editing.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property_editing.adoc
@@ -5,7 +5,7 @@
 :_imagesdir: images/
 
 
-The `editing()` attribute can be used to prevent a property from being modified or cleared, ie to make it read-only. This attribute can also be specified for xref:../rgant/rgant.adoc#_rgant-Collection_editing[collections], and can also be specified for the xref:../rgant/rgant.adoc#_rgant-DomainObject_editing[domain object].
+The `editing()` attribute can be used to prevent a property from being modified or cleared, ie to make it read-only.
 
 The related `editingDisabledReason()` attribute specifies the a hard-coded reason why the property cannot be modified directly.
 
@@ -41,3 +41,9 @@ To reiterate, it is _not_ possible to enable editing for a property if editing h
 
 
 
+== See also
+
+This attribute can also be specified for:
+
+* xref:../rgant/rgant.adoc#_rgant-Collection_editing[collections]
+* xref:../rgant/rgant.adoc#_rgant-DomainObject_editing[domain object].
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property_hidden.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property_hidden.adoc
index 6b9aa83..749602d 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property_hidden.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property_hidden.adoc
@@ -6,7 +6,8 @@
 
 
 
-Properties can be hidden at the domain-level, indicating that they are not visible to the end-user.  This attribute can also be applied to xref:../rgant/rgant.adoc#_rgant-ActionLayout_hidden[actions] and xref:../rgant/rgant.adoc#_rgant-CollectionLayout_hidden[collections].
+Properties can be hidden at the domain-level, indicating that they are not visible to the end-user.
+
 
 [TIP]
 ====
@@ -64,3 +65,11 @@ tables. Annotating with `@Property(where=Where.NOWHERE)` overrides this.
 ====
 The xref:../ugvro/ugvro.adoc#[RestfulObjects viewer] has only partial support for these `Where` enums.
 ====
+
+
+== See also
+
+This attribute can also be applied to:
+
+* xref:../rgant/rgant.adoc#_rgant-ActionLayout_hidden[actions]
+* xref:../rgant/rgant.adoc#_rgant-CollectionLayout_hidden[collections].
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property_maxLength.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property_maxLength.adoc
index 1cfceae..e040e6a 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property_maxLength.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property_maxLength.adoc
@@ -6,10 +6,12 @@
 
 
 
-The `maxLength()` attribute applies only to `String` properties, indicating the maximum number of characters that the user may enter (for example in a text field in the UI).  The attribute It is ignored if applied to properties of any other type.  This attribute can also be applied to xref:../rgant/rgant.adoc#_rgant-Parameter_maxLength[parameters].
+The `maxLength()` attribute applies only to `String` properties, indicating the maximum number of characters that the user may enter (for example in a text field in the UI).
+The attribute It is ignored if applied to properties of any other type.
 
 
-That said, properties are most commonly defined on persistent domain objects (entities), in which case the JDO xref:../rgant/rgant.adoc#_rgant-Column[`@Column`] will in any case need to be specified.  Apache Isis can infer the `maxLength` semantic directly from the equivalent `@Column#length()` annotation/attribute.
+That said, properties are most commonly defined on persistent domain objects (entities), in which case the JDO xref:../rgant/rgant.adoc#_rgant-Column[`@Column`] will in any case need to be specified.
+Apache Isis can infer the `maxLength` semantic directly from the equivalent `@Column#length()` annotation/attribute.
 
 For example:
 
@@ -29,7 +31,8 @@ In this case there is therefore no need for the `@Property#maxLength()` attribut
 
 == Non-persistent properties
 
-Of course, not every property is persistent (it could instead be derived), and neither is every domain object an entity (it could be a view model).  For these non persistable properties the `maxLength()` attribute is still required.
+Of course, not every property is persistent (it could instead be derived), and neither is every domain object an entity (it could be a view model).
+For these non persistable properties the `maxLength()` attribute is still required.
 
 For example:
 
@@ -47,3 +50,8 @@ public class Customer {
 <2> implementation would most likely derive full name from constituent parts (eg first name, middle initial, last name)
 <3> implementation would most likely parse the input and update the constituent parts
 
+
+== See also
+
+This attribute can also be applied to xref:../rgant/rgant.adoc#_rgant-Parameter_maxLength[parameters].
+
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property_regexPattern.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property_regexPattern.adoc
index bad33cc..d24c4ab 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property_regexPattern.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property_regexPattern.adoc
@@ -8,13 +8,13 @@
 
 There are three attributes related to enforcing regular expressions:
 
-* The `regexPattern()` attribute validates the contents of any string property with respect to a regular expression pattern. It is ignored if applied to properties of any other type. This attribute can also be specified for xref:../rgant/rgant.adoc#_rgant-Parameter_regexPattern[parameters].
+* The `regexPattern()` attribute validates the contents of any string property with respect to a regular expression pattern.
+It is ignored if applied to properties of any other type.
 
-* The `regexPatternFlags()` attribute specifies flags that modify the handling of the pattern.  The values are those
-that would normally be passed to `java.util.regex.Pattern#compile(String,int)`.
+* The `regexPatternFlags()` attribute specifies flags that modify the handling of the pattern.
+The values are those that would normally be passed to `java.util.regex.Pattern#compile(String,int)`.
 
-* The related `regexPatternReplacement()` attribute specifies the error message to show if
-the provided argument does not match the regex pattern.
+* The related `regexPatternReplacement()` attribute specifies the error message to show if the provided argument does not match the regex pattern.
 
 For example:
 
@@ -33,3 +33,7 @@ public class Customer {
 
 
 
+== See also
+
+This attribute can also be specified for xref:../rgant/rgant.adoc#_rgant-Parameter_regexPattern[parameters].
+
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout.adoc
index 8526bb0..5ef0f37 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout.adoc
@@ -36,11 +36,25 @@ The table below summarizes the annotation's attributes.
 |Currently unused.
 
 
+|xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_cssClassUiEvent[`cssClassUiEvent()`]
+|subtype of `CssClassUiEvent` +
+(`CssClassUiEvent.Default`)
+|the event type to be posted to the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] to obtain a CSS class for the domain object.
+
+
 |xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_describedAs[`describedAs()`]
 |String.
 |description of this class, eg to be rendered in a tooltip.
 
+|xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_iconUiEvent[`iconUiEvent()`]
+|subtype of `IconUiEvent` +
+(`IconUiEvent.Default`)
+|the event type to be posted to the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] to obtain the icon (name) for the domain object.
 
+|xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_layoutUiEvent[`layoutUiEvent()`]
+|subtype of `LayoutUiEvent` +
+(`LayoutUiEvent.Default`)
+|the event type to be posted to the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] to obtain the layout (name) for the domain object.
 
 |xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_named[`named()`]
 |String.
@@ -59,6 +73,11 @@ A typical use case is if the desired name is a reserved Java keyword, such as `d
 |the plural name of the class
 
 
+|xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_titleUiEvent[`titleUiEvent()`]
+|subtype of `TitleUiEvent` +
+(`TitleUiEvent.Default`)
+|the event type to be posted to the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] to obtain the title for the domain object.
+
 |===
 
 
@@ -77,7 +96,8 @@ For example:
 )
 public class CategoryPieChart { ... }
 ----
-<1> this annotation is intended for use with `@ViewModel`.  If a view model has been specified using the equivalent xref:../rgant/rgant.adoc#_rgant-DomainObject_nature[`@DomainObject(nature=Nature.VIEW_MODEL)`], then we recommend you use xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout[`@DomainObjectLayout`] instead.
+<1> this annotation is intended for use with `@ViewModel`.
+If a view model has been specified using the equivalent xref:../rgant/rgant.adoc#_rgant-DomainObject_nature[`@DomainObject(nature=Nature.VIEW_MODEL)`], then we recommend you use xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout[`@DomainObjectLayout`] instead.
 
 
 [NOTE]
@@ -89,11 +109,14 @@ Note that there is (currently) no support for specifying UI hints for view model
 
 include::_rgant-ViewModelLayout_cssClass.adoc[leveloffset=+1]
 include::_rgant-ViewModelLayout_cssClassFa.adoc[leveloffset=+1]
+include::_rgant-ViewModelLayout_cssClassUiEvent.adoc[leveloffset=+1]
 include::_rgant-ViewModelLayout_describedAs.adoc[leveloffset=+1]
+include::_rgant-ViewModelLayout_iconUiEvent.adoc[leveloffset=+1]
+include::_rgant-ViewModelLayout_layoutUiEvent.adoc[leveloffset=+1]
 include::_rgant-ViewModelLayout_named.adoc[leveloffset=+1]
 include::_rgant-ViewModelLayout_paged.adoc[leveloffset=+1]
 include::_rgant-ViewModelLayout_plural.adoc[leveloffset=+1]
-
+include::_rgant-ViewModelLayout_titleUiEvent.adoc[leveloffset=+1]
 
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_typeOf.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_bookmarking.adoc
similarity index 55%
copy from adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_typeOf.adoc
copy to adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_bookmarking.adoc
index ed6e4c2..bc70881 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_typeOf.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_bookmarking.adoc
@@ -1,26 +1,12 @@
-[[_rgant-Collection_typeOf]]
-= `typeOf()`
+[[_rgant-ViewModelLayout_bookmarking]]
+= `bookmarking()`
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 :_basedir: ../../
 :_imagesdir: images/
 
 
-The `typeOf()` attribute specifies the expected type of an element contained within a collection when for whatever reason the type cannot be inferred from the generic type, or to provide a hint about the actual run-time (as opposed to compile-time) type.  This attribute can also be specified for xref:../rgant/rgant.adoc#_rgant-Action_typeOf[actions].
 
-For example:
-
-[source,java]
-----
-public void Customer {
-    @Collection(typeOf=Order.class)
-    public SortedSet getOutstandingOrders() { ... }
-    ...
-}
-----
-
-[TIP]
-====
-In general we recommend that you use generics instead, eg `SortedSet<Order>`.
-====
+The `bookmarking()` attribute indicates that a view model is automatically bookmarked.
 
+This is equivalent to xref:rgant.adoc#_rgant_DomainObjectLayout_bookmarking[`@DomainObjectLayout#bookmarking()`], but for view models instead of entities.
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_cssClass.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_cssClass.adoc
index 167d28e..1a89d9b 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_cssClass.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_cssClass.adoc
@@ -8,23 +8,4 @@
 
 The `cssClass()` attribute can be used to render additional CSS classes in the HTML (a wrapping `<div>`) that represents the view model.   xref:../rgcfg/rgcfg.adoc#_rgcfg_application-specific_application-css[Application-specific CSS] can then be used to target and adjust the UI representation of that particular element.
 
-This attribute can also be applied to xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_cssClass[domain objects], xref:../rgant/rgant.adoc#_rgant-ActionLayout_cssClass[actions] xref:../rgant/rgant.adoc#_rgant-PropertyLayout_cssClass[properties],  xref:../rgant/rgant.adoc#_rgant-CollectionLayout_cssClass[collections] and xref:../rgant/rgant.adoc#_rgant-ParameterLayout_cssClass[parameters].
-
-
-For example:
-
-[source,java]
-----
-@ViewModel
-@ViewModelLayout(cssClass="x-analysis")
-public class CategoryPieChart { ... }
-----
-
-
-
-
-[NOTE]
-====
-The similar xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_cssClassFa[`@ViewModelLayout#cssClassFa()`] annotation attribute is also used as a hint to apply CSS, but in particular to allow http://fortawesome.github.io/Font-Awesome/icons/[Font Awesome icons] to be rendered as the icon for classes.
-====
-
+This is equivalent to xref:rgant.adoc#_rgant_DomainObjectLayout_cssClass[`@DomainObjectLayout#cssClass()`], but for view models instead of entities.
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_cssClassFa.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_cssClassFa.adoc
index e42d659..69c4cad 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_cssClassFa.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_cssClassFa.adoc
@@ -9,33 +9,5 @@
 
 The `cssClassFa()` attribute is used to specify the name of a link:http://fortawesome.github.io/Font-Awesome/icons/[Font Awesome icon] name, to be rendered as the domain object's icon.
 
-These attribute can also be applied to xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_cssClassFa[domain objects] to specify the object's icon, and to xref:../rgant/rgant.adoc#_rgant-ActionLayout_cssClassFa[actions] to specify an icon for the action's representation as a button or menu item.
-
-
-If necessary the icon specified can be overridden by a particular object instance using the xref:../rgcms/rgcms.adoc#_rgcms_methods_reserved_iconName[`iconName()`] method.
-
-
-
-
-For example:
-
-[source,java]
-----
-@ViewModel
-@ViewModelLayout(
-    cssClassFa="fa-piechart"
-)
-public class CategoryPieChart { ... }
-----
-
-There can be multiple "fa-" classes, eg to mirror or rotate the icon. There is no need to include the mandatory `fa` "marker" CSS class; it will be automatically added to the list.  The `fa-` prefix can also be omitted from the class names; it will be prepended to each if required.
-
-
-The related `cssClassFaPosition()` attribute is currently unused for domain objects; the icon is always rendered to the left.
-
-
-[NOTE]
-====
-The similar xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_cssClass[`@ViewModelLayout#cssClass()`] annotation attribute is also used as a hint to apply CSS, but for wrapping the representation of an object or object member so that it can be styled in an application-specific way.
-====
+This is equivalent to xref:rgant.adoc#_rgant_DomainObjectLayout_cssClassFa[`@DomainObjectLayout#cssClassFa()`], but for view models instead of entities.
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_typeOf.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_cssClassUiEvent.adoc
similarity index 55%
copy from adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_typeOf.adoc
copy to adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_cssClassUiEvent.adoc
index ed6e4c2..eee4d14 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_typeOf.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_cssClassUiEvent.adoc
@@ -1,26 +1,12 @@
-[[_rgant-Collection_typeOf]]
-= `typeOf()`
+[[_rgant-ViewModelLayout_cssClassUiEvent]]
+= cssClassUiEvent()
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 :_basedir: ../../
 :_imagesdir: images/
 
 
-The `typeOf()` attribute specifies the expected type of an element contained within a collection when for whatever reason the type cannot be inferred from the generic type, or to provide a hint about the actual run-time (as opposed to compile-time) type.  This attribute can also be specified for xref:../rgant/rgant.adoc#_rgant-Action_typeOf[actions].
-
-For example:
-
-[source,java]
-----
-public void Customer {
-    @Collection(typeOf=Order.class)
-    public SortedSet getOutstandingOrders() { ... }
-    ...
-}
-----
-
-[TIP]
-====
-In general we recommend that you use generics instead, eg `SortedSet<Order>`.
-====
+Whenever a view model is to be rendered, the framework fires off an CSS class UI event to obtain a CSS class to use in any wrapping ``<div>``s and ``<span>``s that render the domain object.
 
+This attribute is the same as xref:rgant.adoc#_rgant_DomainObjectLayout_cssClass[`@DomainObjectLayout#cssClass()`], but for view models instead of entities.
 
+A default event that is emitted if none specified, unless the `isis.reflector.facet.viewModelLayoutAnnotation.cssClassUiEvent.postForDefault` configuration property is set to "false".
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_describedAs.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_describedAs.adoc
index 97826b7..4d7fa22 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_describedAs.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_describedAs.adoc
@@ -5,19 +5,7 @@
 :_imagesdir: images/
 
 
-The `describedAs()` attribute is used to provide a short description of the view model to the user.  In the xref:../ugvw/ugvw.adoc#[Wicket viewer] it is displayed as a 'tool tip'.  The `describedAs()` attribute can also be specified for xref:../rgant/rgant.adoc#_rgant-CollectionLayout_describedAs[collections],  xref:../rgant/rgant.adoc#_rgant-PropertyLayout_describedAs[properties], xref:../rgant/rgant.adoc#_rgant-ActionLayout_describedAs[actions], xref:../rgant/rgant.adoc#_rgant-Paramete [...]
-
-For example:
-
-[source,java]
-----
-@ViewModel
-@ViewModelLayout(
-    cssClass="x-analysis",
-    cssClassFa="fa-piechart",
-    describedAs="Analysis of todo items by category"
-)
-public class CategoryPieChart { ... }
-----
+The `describedAs()` attribute is used to provide a short description of the view model to the user; in the xref:../ugvw/ugvw.adoc#[Wicket viewer] it is displayed as a 'tool tip'.
 
+This attribute is the same as xref:rgant.adoc#_rgant_DomainObjectLayout_describedAs[`@DomainObjectLayout#describedAs()`], but for view models instead of entities.
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_typeOf.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_iconUiEvent.adoc
similarity index 52%
copy from adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_typeOf.adoc
copy to adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_iconUiEvent.adoc
index ed6e4c2..8161006 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_typeOf.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_iconUiEvent.adoc
@@ -1,26 +1,15 @@
-[[_rgant-Collection_typeOf]]
-= `typeOf()`
+[[_rgant-ViewModelLayout_iconUiEvent]]
+= iconUiEvent()
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 :_basedir: ../../
 :_imagesdir: images/
 
 
-The `typeOf()` attribute specifies the expected type of an element contained within a collection when for whatever reason the type cannot be inferred from the generic type, or to provide a hint about the actual run-time (as opposed to compile-time) type.  This attribute can also be specified for xref:../rgant/rgant.adoc#_rgant-Action_typeOf[actions].
+Whenever a view model is to be rendered, the framework fires off an icon UI event to obtain an icon (name) for the object (if possible).
+This is as an alternative to implementing xref:../rgcms/rgcms.adoc#_rgcms_methods_reserved_iconName[`iconName()`] reserved method.
+(If `iconName()` is present, then it will take precedence).
 
-For example:
-
-[source,java]
-----
-public void Customer {
-    @Collection(typeOf=Order.class)
-    public SortedSet getOutstandingOrders() { ... }
-    ...
-}
-----
-
-[TIP]
-====
-In general we recommend that you use generics instead, eg `SortedSet<Order>`.
-====
+This attribute is the same as xref:rgant.adoc#_rgant_DomainObjectLayout_iconUiEvent[`@DomainObjectLayout#iconUiEvent()`], but for view models instead of entities.
 
+A default event that is emitted if none specified, unless the `isis.reflector.facet.viewModelLayoutAnnotation.iconUiEvent.postForDefault` configuration property is set to "false".
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_typeOf.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_layoutUiEvent.adoc
similarity index 55%
copy from adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_typeOf.adoc
copy to adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_layoutUiEvent.adoc
index ed6e4c2..4861da3 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_typeOf.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_layoutUiEvent.adoc
@@ -1,26 +1,12 @@
-[[_rgant-Collection_typeOf]]
-= `typeOf()`
+[[_rgant-ViewModelLayout_layoutUiEvent]]
+= layoutUiEvent()
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 :_basedir: ../../
 :_imagesdir: images/
 
 
-The `typeOf()` attribute specifies the expected type of an element contained within a collection when for whatever reason the type cannot be inferred from the generic type, or to provide a hint about the actual run-time (as opposed to compile-time) type.  This attribute can also be specified for xref:../rgant/rgant.adoc#_rgant-Action_typeOf[actions].
-
-For example:
-
-[source,java]
-----
-public void Customer {
-    @Collection(typeOf=Order.class)
-    public SortedSet getOutstandingOrders() { ... }
-    ...
-}
-----
-
-[TIP]
-====
-In general we recommend that you use generics instead, eg `SortedSet<Order>`.
-====
+Whenever a view model is to be rendered, the framework fires off an layout UI event to obtain an alternative layout name with which to render the domain object.
 
+This attribute is the same as xref:rgant.adoc#_rgant_DomainObjectLayout_layoutUiEvent[`@DomainObjectLayout#layoutUiEvent()`], but for view models instead of entities.
 
+A default event that is emitted if none specified, unless the `isis.reflector.facet.viewModelLayoutAnnotation.layoutUiEvent.postForDefault` configuration property is set to "false".
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_named.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_named.adoc
index 606045f..33126c8 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_named.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_named.adoc
@@ -5,31 +5,7 @@
 :_imagesdir: images/
 
 
-The `named()` attribute explicitly specifies the view model's name, overriding the name that would normally be inferred from the Java source code.  This attribute can also be specified for xref:../rgant/rgant.adoc#_rgant-ActionLayout_named[actions], xref:../rgant/rgant.adoc#_rgant-CollectionLayout_named[collections], xref:../rgant/rgant.adoc#_rgant-PropertyLayout_named[properties], xref:../rgant/rgant.adoc#_rgant-ParameterLayout_named[parameters], xref:../rgant/rgant.adoc#_rgant-DomainOb [...]
+The `named()` attribute explicitly specifies the view model's name, overriding the name that would normally be inferred from the Java source code.
 
-[TIP]
-====
-Following the link:http://en.wikipedia.org/wiki/Don%27t_repeat_yourself[don't repeat yourself] principle, we recommend that you only use this attribute when the desired name cannot be used in Java source code.  Examples of that include a name that would be a reserved Java keyword (eg "package"), or a name that has punctuation, eg apostrophes.
-====
+This attribute is the same as xref:rgant.adoc#_rgant_DomainObjectLayout_named[`@DomainObjectLayout#named()`], but for view models instead of entities.
 
-
-
-For example:
-
-[source,java]
-----
-@ViewModel
-@ViewModelLayout(
-    named="PieChartAnalysis"
-)
-public class PieChartAnalysisViewModel {
-   ...
-}
-----
-
-
-
-[TIP]
-====
-The framework also provides a separate, powerful mechanism for xref:../ugbtb/ugbtb.adoc#_ugbtb_i18n[internationalization].
-====
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_paged.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_paged.adoc
index 358f404..f031543 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_paged.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_paged.adoc
@@ -5,30 +5,6 @@
 :_imagesdir: images/
 
 
-The `paged()` attribute specifies the number of rows to display in a standalone collection, as returned from an action invocation.  This attribute can also be applied to xref:../rgant/rgant.adoc#_rgant-CollectionLayout_paged[collections] and xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_paged[domain objects].
-
-
-
-[WARNING]
-====
-The xref:../ugvro/ugvro.adoc#[RestfulObjects viewer] currently does not support paging.   The xref:../ugvw/ugvw.adoc#[Wicket viewer] _does_ support paging, but note that the paging is performed client-side rather than server-side.
-
-We therefore recommend that large collections should instead be modelled as actions (to allow filtering to be applied to limit the number of rows).
-====
-
-
-For example:
-
-[source,java]
-----
-@ViewModel
-@ViewModelLayout(paged=15)
-public class OrderAnalysis {
-    ...
-}
-----
-
-
-It is also possible to specify a global default for the page size of standalone collections, using the xref:../rgcfg/rgcfg.adoc#_rgcfg_configuring-core[configuration property] `isis.viewer.paged.standalone`.
-
+The `paged()` attribute specifies the number of rows to display in a standalone collection, as returned from an action invocation.
 
+This attribute is the same as xref:rgant.adoc#_rgant_DomainObjectLayout_paged[`@DomainObjectLayout#paged()`], but for view models instead of entities.
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_plural.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_plural.adoc
index e178f51..fb8718c 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_plural.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_plural.adoc
@@ -7,18 +7,9 @@
 
 
 When Apache Isis displays a standalone collection of several objects, it will label the collection using the plural form of the object type.
-
 By default the plural name will be derived from the end of the singular name, with support for some basic English language defaults (eg using "ies" for names ending with a "y").
+The `plural()` attribute allows the plural form of the class name to be specified explicitly.
 
-The `plural()` attribute allows the plural form of the class name to be specified explicitly.  This attribute is also supported for xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_plural[domain objects].
+This attribute is the same as xref:rgant.adoc#_rgant_DomainObjectLayout_plural[`@DomainObjectLayout#plural()`], but for view models instead of entities.
 
-For example:
 
-[source,java]
-----
-@ViewModel
-@ViewModelLayout(plural="Children")
-public class Child {
-    ...
-}
-----
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_typeOf.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_titleUiEvent.adoc
similarity index 55%
copy from adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_typeOf.adoc
copy to adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_titleUiEvent.adoc
index ed6e4c2..0246336 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_typeOf.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModelLayout_titleUiEvent.adoc
@@ -1,26 +1,12 @@
-[[_rgant-Collection_typeOf]]
-= `typeOf()`
+[[_rgant-ViewModelLayout_titleUiEvent]]
+= titleUiEvent()
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 :_basedir: ../../
 :_imagesdir: images/
 
 
-The `typeOf()` attribute specifies the expected type of an element contained within a collection when for whatever reason the type cannot be inferred from the generic type, or to provide a hint about the actual run-time (as opposed to compile-time) type.  This attribute can also be specified for xref:../rgant/rgant.adoc#_rgant-Action_typeOf[actions].
-
-For example:
-
-[source,java]
-----
-public void Customer {
-    @Collection(typeOf=Order.class)
-    public SortedSet getOutstandingOrders() { ... }
-    ...
-}
-----
-
-[TIP]
-====
-In general we recommend that you use generics instead, eg `SortedSet<Order>`.
-====
+Whenever a view model is to be rendered, the framework fires off a title UI event to obtain a title for the object.
 
+This attribute is the same as xref:rgant.adoc#_rgant_DomainObjectLayout_titleUiEvent[`@DomainObjectLayout#titleUiEvent()`], but for view models instead of entities.
 
+A default event that is emitted if none specified, unless the `isis.reflector.facet.viewModelLayoutAnnotation.titleUiEvent.postForDefault` configuration property is set to "false".
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgcfg/_rgcfg_configuring-core.adoc b/adocs/documentation/src/main/asciidoc/guides/rgcfg/_rgcfg_configuring-core.adoc
index bfc748f..c4eabdc 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgcfg/_rgcfg_configuring-core.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgcfg/_rgcfg_configuring-core.adoc
@@ -167,12 +167,48 @@ In order for these events to fire the class must be annotated using `@DomainObje
 
 |`isis.reflector.facet.` +
 `domainObjectLayoutAnnotation.` +
+`layoutUiEvent.postForDefault`
+|`true`,`false` +
+(`true`)
+|Whether an event should be posted if xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_layoutUiEvent[`@DomainObjectLayout#layoutUiEvent()`] is not specified (is set to `LayoutUiEvent.Default`).
+
+|`isis.reflector.facet.` +
+`domainObjectLayoutAnnotation.` +
 `titleUiEvent.postForDefault`
 |`true`,`false` +
 (`true`)
 |Whether an event should be posted if xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout_titleUiEvent[`@DomainObjectLayout#titleUiEvent()`] is not specified (is set to `TitleUiEvent.Default`).
 
 
+|`isis.reflector.facet.` +
+`viewModelLayoutAnnotation.` +
+`cssClassUiEvent.postForDefault`
+|`true`,`false` +
+(`true`)
+|Whether an event should be posted if xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_cssClassUiEvent[`@ViewModelLayout#cssClassUiEvent()`] is not specified (is set to `CssClassUiEvent.Default`).
+
+|`isis.reflector.facet.` +
+`viewModelLayoutAnnotation.` +
+`iconUiEvent.postForDefault`
+|`true`,`false` +
+(`true`)
+|Whether an event should be posted if xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_iconUiEvent[`@ViewModelLayout#iconUiEvent()`] is not specified (is set to `IconUiEvent.Default`).
+
+|`isis.reflector.facet.` +
+`viewModelLayoutAnnotation.` +
+`layoutUiEvent.postForDefault`
+|`true`,`false` +
+(`true`)
+|Whether an event should be posted if xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_layoutUiEvent[`@ViewModelLayout#layoutUiEvent()`] is not specified (is set to `LayoutUiEvent.Default`).
+
+|`isis.reflector.facet.` +
+`viewModelLayoutAnnotation.` +
+`titleUiEvent.postForDefault`
+|`true`,`false` +
+(`true`)
+|Whether an event should be posted if xref:../rgant/rgant.adoc#_rgant-ViewModelLayout_titleUiEvent[`@ViewModelLayout#titleUiEvent()`] is not specified (is set to `TitleUiEvent.Default`).
+
+
 
 |===
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/ViewModelLayout.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/ViewModelLayout.java
index 626497c..f1b69ef 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/ViewModelLayout.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/ViewModelLayout.java
@@ -25,6 +25,11 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
+import org.apache.isis.applib.services.eventbus.CssClassUiEvent;
+import org.apache.isis.applib.services.eventbus.IconUiEvent;
+import org.apache.isis.applib.services.eventbus.LayoutUiEvent;
+import org.apache.isis.applib.services.eventbus.TitleUiEvent;
+
 /**
  * Layout hints for view models.
  *
@@ -46,6 +51,49 @@ import java.lang.annotation.Target;
 public @interface ViewModelLayout {
 
     /**
+     * Which subclass of {@link TitleUiEvent} should be used to obtain a title.
+     *
+     * <p>
+     * This subclass must provide a no-arg constructor; the fields are set reflectively.
+     * </p>
+     */
+    Class<? extends TitleUiEvent<?>> titleUiEvent() default TitleUiEvent.Default.class;
+
+    // //////////////////////////////////////
+
+    /**
+     * Which subclass of {@link IconUiEvent} should be used to obtain an icon.
+     *
+     * <p>
+     * This subclass must provide a no-arg constructor; the fields are set reflectively.
+     * </p>
+     */
+    Class<? extends IconUiEvent<?>> iconUiEvent() default IconUiEvent.Default.class;
+
+    // //////////////////////////////////////
+
+    /**
+     * Which subclass of {@link CssClassUiEvent} should be used to obtain a CSS class.
+     *
+     * <p>
+     * This subclass must provide a no-arg constructor; the fields are set reflectively.
+     * </p>
+     */
+    Class<? extends CssClassUiEvent<?>> cssClassUiEvent() default CssClassUiEvent.Default.class;
+
+    // //////////////////////////////////////
+
+    /**
+     * Which subclass of {@link LayoutUiEvent} should be used to obtain a layout.
+     *
+     * <p>
+     * This subclass must provide a no-arg constructor; the fields are set reflectively.
+     * </p>
+     */
+    Class<? extends LayoutUiEvent<?>> layoutUiEvent() default LayoutUiEvent.Default.class;
+
+
+    /**
      * Indicates the css class that a domain class (type) should have.
      */
     String cssClass() default "";
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetViaViewModelLayoutAnnotationUsingCssClassUiEvent.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetViaViewModelLayoutAnnotationUsingCssClassUiEvent.java
new file mode 100644
index 0000000..0ad34b5
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetViaViewModelLayoutAnnotationUsingCssClassUiEvent.java
@@ -0,0 +1,123 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.facets.object.domainobjectlayout;
+
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.isis.applib.NonRecoverableException;
+import org.apache.isis.applib.annotation.ViewModelLayout;
+import org.apache.isis.applib.services.eventbus.CssClassUiEvent;
+import org.apache.isis.applib.services.eventbus.EventBusService;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
+import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacetAbstract;
+import org.apache.isis.core.metamodel.services.ServicesInjector;
+import org.apache.isis.core.metamodel.util.EventUtil;
+
+public class CssClassFacetViaViewModelLayoutAnnotationUsingCssClassUiEvent extends FacetAbstract implements
+        CssClassFacet {
+
+    private static final Logger LOG = LoggerFactory.getLogger(
+            CssClassFacetViaViewModelLayoutAnnotationUsingCssClassUiEvent.class);
+
+    public static Facet create(
+            final ViewModelLayout viewModelLayout,
+            final ServicesInjector servicesInjector,
+            final IsisConfiguration configuration, final FacetHolder facetHolder) {
+        if(viewModelLayout == null) {
+            return null;
+        }
+        final Class<? extends CssClassUiEvent<?>> cssClassUiEventClass = viewModelLayout.cssClassUiEvent();
+
+        if(!EventUtil.eventTypeIsPostable(
+                cssClassUiEventClass,
+                CssClassUiEvent.Noop.class,
+                CssClassUiEvent.Default.class,
+                "isis.reflector.facet.viewModelLayoutAnnotation.cssClassUiEvent.postForDefault",
+                configuration)) {
+            return null;
+        }
+
+        final EventBusService eventBusService = servicesInjector.lookupService(EventBusService.class);
+
+        return new CssClassFacetViaViewModelLayoutAnnotationUsingCssClassUiEvent(
+                cssClassUiEventClass, eventBusService, facetHolder);
+    }
+
+    private final Class<? extends CssClassUiEvent<?>> cssClassUiEventClass;
+    private final EventBusService eventBusService;
+
+    public CssClassFacetViaViewModelLayoutAnnotationUsingCssClassUiEvent(
+            final Class<? extends CssClassUiEvent<?>> cssClassUiEventClass,
+            final EventBusService eventBusService,
+            final FacetHolder holder) {
+        super(CssClassFacetAbstract.type(), holder, Derivation.NOT_DERIVED);
+        this.cssClassUiEventClass = cssClassUiEventClass;
+        this.eventBusService = eventBusService;
+    }
+
+    @Override
+    public String cssClass(final ObjectAdapter owningAdapter) {
+
+        final CssClassUiEvent<Object> cssClassUiEvent = newCssClassUiEvent(owningAdapter);
+
+        eventBusService.post(cssClassUiEvent);
+
+        final String cssClass = cssClassUiEvent.getCssClass();
+
+        if(cssClass == null) {
+            // ie no subscribers out there...
+            final Facet underlyingFacet = getUnderlyingFacet();
+            if(underlyingFacet instanceof CssClassFacet) {
+                final CssClassFacet underlyingCssClassFacet = (CssClassFacet) underlyingFacet;
+                return underlyingCssClassFacet.cssClass(owningAdapter);
+            }
+        }
+
+        return cssClass;
+    }
+
+    private CssClassUiEvent<Object> newCssClassUiEvent(final ObjectAdapter owningAdapter) {
+        final Object domainObject = owningAdapter.getObject();
+        return newCssClassUiEvent(domainObject);
+    }
+
+    private CssClassUiEvent<Object> newCssClassUiEvent(final Object domainObject) {
+        try {
+            final CssClassUiEvent<Object> cssClassUiEvent = (CssClassUiEvent<Object>) cssClassUiEventClass.newInstance();
+            cssClassUiEvent.setSource(domainObject);
+            return cssClassUiEvent;
+        } catch (InstantiationException | IllegalAccessException ex) {
+            throw new NonRecoverableException(ex);
+        }
+    }
+
+    @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
+        super.appendAttributesTo(attributeMap);
+        attributeMap.put("cssClassUiEventClass", cssClassUiEventClass);
+    }
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java
index 7c1280a..5618abb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java
@@ -44,14 +44,29 @@ public class DomainObjectLayoutFacetFactory extends FacetFactoryAbstract {
                 TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.create(
                         domainObjectLayout, servicesInjector, getConfiguration(), facetHolder));
         FacetUtil.addFacet(
+                TitleFacetViaViewModelLayoutAnnotationUsingTitleUiEvent.create(
+                        viewModelLayout, servicesInjector, getConfiguration(), facetHolder));
+
+        FacetUtil.addFacet(
                 IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.create(
                         domainObjectLayout, servicesInjector, getConfiguration(), facetHolder));
         FacetUtil.addFacet(
+                IconFacetViaViewModelLayoutAnnotationUsingIconUiEvent.create(
+                        viewModelLayout, servicesInjector, getConfiguration(), facetHolder));
+
+        FacetUtil.addFacet(
                 CssClassFacetViaDomainObjectLayoutAnnotationUsingCssClassUiEvent.create(
                         domainObjectLayout, servicesInjector, getConfiguration(), facetHolder));
         FacetUtil.addFacet(
+                CssClassFacetViaViewModelLayoutAnnotationUsingCssClassUiEvent.create(
+                        viewModelLayout, servicesInjector, getConfiguration(), facetHolder));
+
+        FacetUtil.addFacet(
                 LayoutFacetViaDomainObjectLayoutAnnotationUsingLayoutUiEvent.create(
                         domainObjectLayout, servicesInjector, getConfiguration(), facetHolder));
+        FacetUtil.addFacet(
+                LayoutFacetViaViewModelLayoutAnnotationUsingLayoutUiEvent.create(
+                        viewModelLayout, servicesInjector, getConfiguration(), facetHolder));
 
         FacetUtil.addFacet(
                 CssClassFacetForDomainObjectLayoutAnnotation.create(domainObjectLayout, facetHolder));
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/IconFacetViaViewModelLayoutAnnotationUsingIconUiEvent.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/IconFacetViaViewModelLayoutAnnotationUsingIconUiEvent.java
new file mode 100644
index 0000000..596f2d8
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/IconFacetViaViewModelLayoutAnnotationUsingIconUiEvent.java
@@ -0,0 +1,122 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.facets.object.domainobjectlayout;
+
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.isis.applib.NonRecoverableException;
+import org.apache.isis.applib.annotation.ViewModelLayout;
+import org.apache.isis.applib.services.eventbus.EventBusService;
+import org.apache.isis.applib.services.eventbus.IconUiEvent;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.icon.IconFacet;
+import org.apache.isis.core.metamodel.facets.object.icon.IconFacetAbstract;
+import org.apache.isis.core.metamodel.services.ServicesInjector;
+import org.apache.isis.core.metamodel.util.EventUtil;
+
+public class IconFacetViaViewModelLayoutAnnotationUsingIconUiEvent extends IconFacetAbstract {
+
+    private static final Logger LOG = LoggerFactory.getLogger(
+            IconFacetViaViewModelLayoutAnnotationUsingIconUiEvent.class);
+
+    public static Facet create(
+            final ViewModelLayout viewModelLayout,
+            final ServicesInjector servicesInjector,
+            final IsisConfiguration configuration, final FacetHolder facetHolder) {
+        if(viewModelLayout == null) {
+            return null;
+        }
+        final Class<? extends IconUiEvent<?>> iconUiEventClass = viewModelLayout.iconUiEvent();
+
+        if(!EventUtil.eventTypeIsPostable(
+                iconUiEventClass,
+                IconUiEvent.Noop.class,
+                IconUiEvent.Default.class,
+                "isis.reflector.facet.viewModelLayoutAnnotation.iconUiEvent.postForDefault",
+                configuration)) {
+            return null;
+        }
+
+        final EventBusService eventBusService = servicesInjector.lookupService(EventBusService.class);
+
+        return new IconFacetViaViewModelLayoutAnnotationUsingIconUiEvent(
+                iconUiEventClass, eventBusService, facetHolder);
+    }
+
+    private final Class<? extends IconUiEvent<?>> iconUiEventClass;
+    private final EventBusService eventBusService;
+
+    public IconFacetViaViewModelLayoutAnnotationUsingIconUiEvent(
+            final Class<? extends IconUiEvent<?>> iconUiEventClass,
+            final EventBusService eventBusService,
+            final FacetHolder holder) {
+        super(holder);
+        this.iconUiEventClass = iconUiEventClass;
+        this.eventBusService = eventBusService;
+    }
+
+    @Override
+    public String iconName(final ObjectAdapter owningAdapter) {
+
+        final IconUiEvent<Object> iconUiEvent = newIconUiEvent(owningAdapter);
+
+        eventBusService.post(iconUiEvent);
+
+        final String iconName = iconUiEvent.getIconName();
+
+        if(iconName == null) {
+            // ie no subscribers out there...
+            final Facet underlyingFacet = getUnderlyingFacet();
+            if(underlyingFacet instanceof IconFacet) {
+                final IconFacet underlyingIconFacet = (IconFacet) underlyingFacet;
+                return underlyingIconFacet.iconName(owningAdapter);
+            }
+        }
+
+        return iconName; // could be null
+    }
+
+    private IconUiEvent<Object> newIconUiEvent(final ObjectAdapter owningAdapter) {
+        final Object domainObject = owningAdapter.getObject();
+        return newIconUiEvent(domainObject);
+    }
+
+    private IconUiEvent<Object> newIconUiEvent(final Object domainObject) {
+        try {
+            final IconUiEvent<Object> iconUiEvent = (IconUiEvent<Object>) iconUiEventClass.newInstance();
+            iconUiEvent.setSource(domainObject);
+            return iconUiEvent;
+        } catch (InstantiationException | IllegalAccessException ex) {
+            throw new NonRecoverableException(ex);
+        }
+    }
+
+    @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
+        super.appendAttributesTo(attributeMap);
+        attributeMap.put("iconUiEventClass", iconUiEventClass);
+    }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/LayoutFacetViaViewModelLayoutAnnotationUsingLayoutUiEvent.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/LayoutFacetViaViewModelLayoutAnnotationUsingLayoutUiEvent.java
new file mode 100644
index 0000000..a2c17b8
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/LayoutFacetViaViewModelLayoutAnnotationUsingLayoutUiEvent.java
@@ -0,0 +1,123 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.facets.object.domainobjectlayout;
+
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.isis.applib.NonRecoverableException;
+import org.apache.isis.applib.annotation.ViewModelLayout;
+import org.apache.isis.applib.services.eventbus.EventBusService;
+import org.apache.isis.applib.services.eventbus.LayoutUiEvent;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.layout.LayoutFacet;
+import org.apache.isis.core.metamodel.facets.object.layout.LayoutFacetAbstract;
+import org.apache.isis.core.metamodel.services.ServicesInjector;
+import org.apache.isis.core.metamodel.util.EventUtil;
+
+public class LayoutFacetViaViewModelLayoutAnnotationUsingLayoutUiEvent extends FacetAbstract implements
+        LayoutFacet {
+
+    private static final Logger LOG = LoggerFactory.getLogger(
+            LayoutFacetViaViewModelLayoutAnnotationUsingLayoutUiEvent.class);
+
+    public static Facet create(
+            final ViewModelLayout viewModelLayout,
+            final ServicesInjector servicesInjector,
+            final IsisConfiguration configuration, final FacetHolder facetHolder) {
+        if(viewModelLayout == null) {
+            return null;
+        }
+        final Class<? extends LayoutUiEvent<?>> layoutUiEventClass = viewModelLayout.layoutUiEvent();
+
+        if(!EventUtil.eventTypeIsPostable(
+                layoutUiEventClass,
+                LayoutUiEvent.Noop.class,
+                LayoutUiEvent.Default.class,
+                "isis.reflector.facet.viewModelLayoutAnnotation.layoutUiEvent.postForDefault",
+                configuration)) {
+            return null;
+        }
+
+        final EventBusService eventBusService = servicesInjector.lookupService(EventBusService.class);
+
+        return new LayoutFacetViaViewModelLayoutAnnotationUsingLayoutUiEvent(
+                layoutUiEventClass, eventBusService, facetHolder);
+    }
+
+    private final Class<? extends LayoutUiEvent<?>> layoutUiEventClass;
+    private final EventBusService eventBusService;
+
+    public LayoutFacetViaViewModelLayoutAnnotationUsingLayoutUiEvent(
+            final Class<? extends LayoutUiEvent<?>> layoutUiEventClass,
+            final EventBusService eventBusService,
+            final FacetHolder holder) {
+        super(LayoutFacetAbstract.type(), holder, Derivation.NOT_DERIVED);
+        this.layoutUiEventClass = layoutUiEventClass;
+        this.eventBusService = eventBusService;
+    }
+
+    @Override
+    public String layout(final ObjectAdapter owningAdapter) {
+
+        final LayoutUiEvent<Object> layoutUiEvent = newLayoutUiEvent(owningAdapter);
+
+        eventBusService.post(layoutUiEvent);
+
+        final String layout = layoutUiEvent.getLayout();
+
+        if(layout == null) {
+            // ie no subscribers out there...
+            final Facet underlyingFacet = getUnderlyingFacet();
+            if(underlyingFacet instanceof LayoutFacet) {
+                final LayoutFacet underlyingLayoutFacet = (LayoutFacet) underlyingFacet;
+                return underlyingLayoutFacet.layout(owningAdapter);
+            }
+        }
+
+        return layout;
+    }
+
+    private LayoutUiEvent<Object> newLayoutUiEvent(final ObjectAdapter owningAdapter) {
+        final Object domainObject = owningAdapter.getObject();
+        return newLayoutUiEvent(domainObject);
+    }
+
+    private LayoutUiEvent<Object> newLayoutUiEvent(final Object domainObject) {
+        try {
+            final LayoutUiEvent<Object> layoutUiEvent = (LayoutUiEvent<Object>) layoutUiEventClass.newInstance();
+            layoutUiEvent.setSource(domainObject);
+            return layoutUiEvent;
+        } catch (InstantiationException | IllegalAccessException ex) {
+            throw new NonRecoverableException(ex);
+        }
+    }
+
+    @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
+        super.appendAttributesTo(attributeMap);
+        attributeMap.put("layoutUiEventClass", layoutUiEventClass);
+    }
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaViewModelLayoutAnnotationUsingTitleUiEvent.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaViewModelLayoutAnnotationUsingTitleUiEvent.java
new file mode 100644
index 0000000..e16b058
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaViewModelLayoutAnnotationUsingTitleUiEvent.java
@@ -0,0 +1,136 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.facets.object.domainobjectlayout;
+
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.isis.applib.NonRecoverableException;
+import org.apache.isis.applib.annotation.ViewModelLayout;
+import org.apache.isis.applib.services.eventbus.EventBusService;
+import org.apache.isis.applib.services.eventbus.TitleUiEvent;
+import org.apache.isis.applib.services.i18n.TranslatableString;
+import org.apache.isis.applib.services.i18n.TranslationService;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
+import org.apache.isis.core.metamodel.facets.object.title.TitleFacetAbstract;
+import org.apache.isis.core.metamodel.services.ServicesInjector;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.util.EventUtil;
+
+public class TitleFacetViaViewModelLayoutAnnotationUsingTitleUiEvent extends TitleFacetAbstract {
+
+    private static final Logger LOG = LoggerFactory.getLogger(
+            TitleFacetViaViewModelLayoutAnnotationUsingTitleUiEvent.class);
+
+    public static Facet create(
+            final ViewModelLayout viewModelLayout,
+            final ServicesInjector servicesInjector,
+            final IsisConfiguration configuration, final FacetHolder facetHolder) {
+        if(viewModelLayout == null) {
+            return null;
+        }
+        final Class<? extends TitleUiEvent<?>> titleUiEventClass = viewModelLayout.titleUiEvent();
+
+        if(!EventUtil.eventTypeIsPostable(
+                titleUiEventClass,
+                TitleUiEvent.Noop.class,
+                TitleUiEvent.Default.class,
+                "isis.reflector.facet.viewModelLayoutAnnotation.titleUiEvent.postForDefault",
+                configuration)) {
+            return null;
+        }
+
+        final TranslationService translationService = servicesInjector.lookupService(TranslationService.class);
+        final ObjectSpecification facetHolderAsSpec = (ObjectSpecification) facetHolder; // bit naughty...
+        final String translationContext = facetHolderAsSpec.getCorrespondingClass().getCanonicalName();
+        final EventBusService eventBusService = servicesInjector.lookupService(EventBusService.class);
+
+        return new TitleFacetViaViewModelLayoutAnnotationUsingTitleUiEvent(
+                titleUiEventClass, translationService, translationContext, eventBusService, facetHolder);
+    }
+
+    private final Class<? extends TitleUiEvent<?>> titleUiEventClass;
+    private final TranslationService translationService;
+    private final String translationContext;
+    private final EventBusService eventBusService;
+
+    public TitleFacetViaViewModelLayoutAnnotationUsingTitleUiEvent(
+            final Class<? extends TitleUiEvent<?>> titleUiEventClass,
+            final TranslationService translationService,
+            final String translationContext,
+            final EventBusService eventBusService,
+            final FacetHolder holder) {
+        super(holder);
+        this.titleUiEventClass = titleUiEventClass;
+        this.translationService = translationService;
+        this.translationContext = translationContext;
+        this.eventBusService = eventBusService;
+    }
+
+    @Override
+    public String title(final ObjectAdapter owningAdapter) {
+
+        final TitleUiEvent<Object> titleUiEvent = newTitleUiEvent(owningAdapter);
+
+        eventBusService.post(titleUiEvent);
+
+        final TranslatableString translatedTitle = titleUiEvent.getTranslatableTitle();
+        if(translatedTitle != null) {
+            return translatedTitle.translate(translationService, translationContext);
+        }
+        final String title = titleUiEvent.getTitle();
+
+        if(title == null) {
+            // ie no subscribers out there...
+            final Facet underlyingFacet = getUnderlyingFacet();
+            if(underlyingFacet instanceof TitleFacet) {
+                final TitleFacet underlyingTitleFacet = (TitleFacet) underlyingFacet;
+                return underlyingTitleFacet.title(owningAdapter);
+            }
+        }
+        return title;
+    }
+
+    private TitleUiEvent<Object> newTitleUiEvent(final ObjectAdapter owningAdapter) {
+        final Object domainObject = owningAdapter.getObject();
+        return newTitleUiEvent(domainObject);
+    }
+
+    private TitleUiEvent<Object> newTitleUiEvent(final Object domainObject) {
+        try {
+            final TitleUiEvent<Object> titleUiEvent = (TitleUiEvent<Object>) titleUiEventClass.newInstance();
+            titleUiEvent.setSource(domainObject);
+            return titleUiEvent;
+        } catch (InstantiationException | IllegalAccessException ex) {
+            throw new NonRecoverableException(ex);
+        }
+    }
+
+    @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
+        super.appendAttributesTo(attributeMap);
+        attributeMap.put("titleUiEventClass", titleUiEventClass);
+    }
+}