Merge branch 'release/2.1-RC1'
diff --git a/.gitignore b/.gitignore
index 0e4a69d..9a8a6de 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,4 +15,4 @@
 .nb-gradle-properties
 .nb-gradle
 .gradletasknamecache
-
+private/cache
diff --git a/KEYS b/KEYS
new file mode 100644
index 0000000..1aa2d38
--- /dev/null
+++ b/KEYS
@@ -0,0 +1,258 @@
+This file contains the GPG keys of Apache Zest developers.
+
+Users:    gpg --import KEYS
+
+Developers:
+  Create a key:
+    gpg --gen-key
+
+  Adding you key to this file:
+    (gpg --list-sigs <key id> && gpg --armor --export <key id>) >> this file.
+
+  Publish the key:
+    gpg --keyserver pgp.mit.edu --send-keys <key id>
+
+  Signing another developers key:
+    gpg --keyserver pgp.mit.edu --search-keys <name or email>
+    gpg --keyserver pgp.mit.edu --recv-keys <other key id>
+    gpg -u <your key id> --sign-key <other key id>
+    gpg --keyserver pgp.mit.edu --send-keys <other key id>
+
+  Additional Information:
+    http://www.apache.org/dev/openpgp.html#generate-key
+
+********************************* PLEASE NOTE **********************************
+
+  Releases will be signed using one of the keys present in this file. This file
+  will be available with the distributed Apache Zest releases at:
+
+      https://dist.apache.org/repos/dist/zest/KEYS
+
+********************************************************************************
+
+pub   4096R/32D40AD6 2009-09-19
+uid                  Niclas Hedhman <niclas@hedhman.org>
+sig 3        32D40AD6 2009-09-19  Niclas Hedhman <niclas@hedhman.org>
+sig          33D70FC3 2009-09-19  [User ID not found]
+sig          B071346D 2009-09-19  [User ID not found]
+sig          7D0391AC 2015-04-27  Paul Merlin (Apache) <paulmerlin@apache.org>
+uid                  Niclas Hedhman (Apache Code Signing Key) <niclas@apache.org>
+sig 3        32D40AD6 2009-09-19  Niclas Hedhman <niclas@hedhman.org>
+sig          7D0391AC 2015-04-27  Paul Merlin (Apache) <paulmerlin@apache.org>
+sub   4096R/31AAEB75 2009-09-19
+sig          32D40AD6 2009-09-19  Niclas Hedhman <niclas@hedhman.org>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG/MacGPG2 v2.0.22 (Darwin)
+
+mQINBEq00/IBEACxIpFtAKw7FgCue3Jjy0cHeaiwjASN9NET3sOhXPgIoaqjbc7d
+ae9nUlF2MhnXjLgnpkzOPfckyQGW2OTYm5N7jjN4qhETJU7c0acsAJPGF1cEWBgX
+FXy3D/CAvkBjXCziwLC+KXPY9WoAxlz85CfIPDXWfFmiVbXwFypmShsLhyYqxvI1
+ZndCu/5jddkleXim/CakU3xZW7jSjb00tNNLlBiNLtzWoj4qE2HSIrLsXB4BWEHl
+mEMgO7qfotjbrTG88QslCCqmHfyHsq+hEsCk5ZkkD6460s0qIg40Z7NET5D3Q9s0
+dTThKtuuDfTOcIMa2yq1+SptxbVxJ5LO0AwCe6gSInNq642iQ4DkTWDUM6bwXE3+
+fnPEnfVU1AmUWhAyWHuY52FUNEDB044FYpbILjWIA1ywKS3Ywm8ssmci5jjtBNQA
+fzG15VLtt63t/5apKxoFFgdU9tF6rhmM20qQU2pZgncTdVsWdTY867d7ynluwbAc
+N9Gxm/bRSESa2gJqu9DOBBrAI1Ev9dFuh5p+nRnb+G5IfxWwZyz/lHb8wx33J95J
+n+FYBjZh3vP+qAKrIF7yDP1QwsYxamFT6SicKuuOwk/H1Fbx67d5EzQh1hUa4Amc
+mZtDJbtXXyU0BLDbhQ9U+y6ChwcJTB+F3SAKsAHPhK+mbAwX5Th8Bc0ogQARAQAB
+tCNOaWNsYXMgSGVkaG1hbiA8bmljbGFzQGhlZGhtYW4ub3JnPokCOgQTAQoAJAIb
+AwULCQgHAwUVCgkICwUWAgMBAAIeAQIXgAUCSrTbHQIZAQAKCRCZWt70MtQK1qMg
+EACeR4YIIN2bU/wqMShBZaNhHl6Y5yml7a9QNmhxfpdZ3nDfUtgs+iVsUaCZJIqg
+v5K1oMSnFFJLLBUIdyIKJulX+FMAPqqSY/pSWOPWJzSKTys6dqyq14IJiL9vMKb+
+iFeI4P0zSYKjXXcRvLdL/SHG0/TOf1d8Et0ls8eY2VEIZOditd0uMIiI35ik8eLS
+fTU/y8F6BvUvZQTVhtf1YLt8aLn2LqH3pfluJGGbdD35WUJth3a9LobKYeywif+z
+YujQfmVpxKGJ0A+FgvHMOu0X4SRlIEt6pKpeOIwbzU7EKfQJHNXdbBKcKFphioLD
+Kr+4HqvRoAKcWM4eqyvWczCfuV8EWxRj3D5CAwMWnQ3RTjWD0gfRs8NQ2bNh6y0n
+XOzhN2fkwiPk+PEd22oHu5o/DegCSJdW7Zyhzmb6LtdG/yx5ibmAfSw8JNeQurMa
+11zTRT+BLky/Za+ykmK/+o4m2tcDDscmhZt3WSHShglhlZW4J2lr5JxuO7yYbI5X
+KQ4PX7KU6HU+UTD2XxdBxSkkeji5pp4cs8j3BUrjeWSbcAi7jGJ2d5kdsXYpXAyg
+BSPZFjb+mAZlQtjZC07xGXc8Yudl4m/HR57hLLZhsgZBnYQTTIvuDa+NWLaVJqRn
+TPjkyDO+EOfETd4xQduhNrk726kFZgRsdAnaEm4YqADvCohGBBARCgAGBQJKtNoj
+AAoJEMY0vooz1w/DuO8AoLj5XGETHw9mLjjIWQoUCDNZ9bGdAKD9W62+vPlbyWxB
+pKY22M2yCBDuJYhGBBARCgAGBQJKtNpRAAoJEKkqgDmwcTRtQxwAn1AybUieJRrj
+5nG4fF+LZDNCILE1AKDfrBxMncaAF5HEjTWiPLslIT8ai4kEGwQQAQoABgUCVT4v
+hAAKCRDXnexJfQORrDlpH/QK1GH0wr40N+L+xfxx9ScsLGAMO0ob0x7KXcNfzx5G
+Y2Ayq2/Yl4fwxXsmktZ9K9cV3ls0yAuHXPFUiJiuzxxUxJTywserQXEEDW+rjJrJ
+UMvoVGH7PYsEiqhwBneIJWWe7amXwTTkgZwGQDqBasHt+GJIeTF0Mx7Un8ScJn4z
+Q9ZnVfo8dKuGX8k9pOTotXO2kwVdMPPYuhc+rPJRlRfag8u+oulcR1J5DkQSfEB6
+ywKgqtjZUpAKXyScOI4kv7rdipKqXZJHGxm+xTbCS2g08O/78ZsTGqVaBG/fbPOg
+xdlRD3l7ACuBA++3yiWTjKiGxXYC2tSnWAvgK+IV0bwa9ixmt95aznXNy2iUm6sC
+jsIUfiRa1BEzngd0ZFr+lBV9FxJfdlIg/4v3rMkL/gNBGXsoO4mK8R04YXdf9L4O
+kGV34luXosO4SiZCR5jbeQ42SMLdLqknNup8duKacLbNhCaItBiqxu0weeEewTAq
+BHfDbilApe6nN8Pqt02zSdP4ft1f00i++1yh0NljoZamSZeprUmp1rahYiYuvtrp
+7mcMeO/59+GopnrdggzEgpIPOGfIAkOiCObcHAA8HmH9E7ANXZFbMU26cOc9t1dR
+acBto5z2Km8Gm9D6+AiphLKv0KrICSc4KravT000VNIGQebWF2QEVgWSXZ4/FQBN
+DzVM8FFeDq/D5Aewfv20L1bYcIZ1ur+ePqG7p/J/FhVsTSbXqTRHKRpBLv9RkCHI
+/NLHBpw37v6vwadeWTP89SZVes6nDlR+C+zupz6mzXA2Zi6R/LHLwZOxDT5pSgU7
+ie/PMXja+Ig9ohnvWVUuXrF32ST5blgv2tdQZLrXTCHfWJcjBUXn6X8oiMysuLve
+2KcYXUTqPpTJh8R07jyyqtSVQETShuusTP0GtOX9/4FbL0IAZJNIONZ9O3V1bGL8
+85qN8Vvxe1M5RtUpA5V3rSkGndogbP5qilxGy/bANlvGSs8Arua4FS8rrEP33meX
+GdJSB0PcalIL3mNOMacbAag68ZpIb4i1Z/agmTU2LVx02lU1FvTsQ6aW/YKs/Miv
+a0HZTC1Tmi6bK+8sndXSnciME8fPEUEUHjr25oP5Z/W03/aZyaAc3jFOxdmdL3k9
+wM8A+ZImUC1mmIx2P05nJbWkHR2zn4KFx19Iv618gcys5/l7sNn5MIROrlBIw91P
+iVrRhkFVHpRqwhuJmF2YjUl6IpnzU1uRjHjpSM+2dI1PVyoLjievHsLXqmfarjs/
++Sn+wNcuqJiLa9wwtHE0iJlZHje5oe0YMkW+2jZuoUxIZ79GaJrJqtP7xipcz0nk
+pbbVrjOuYtzAf3iOKc1rVox93U0XkMsHJLj2OVgfe9y0PE5pY2xhcyBIZWRobWFu
+IChBcGFjaGUgQ29kZSBTaWduaW5nIEtleSkgPG5pY2xhc0BhcGFjaGUub3JnPokC
+NwQTAQoAIQUCSrTaywIbAwULCQgHAwUVCgkICwUWAgMBAAIeAQIXgAAKCRCZWt70
+MtQK1ilpEACVVKP/KkCmg5l+XDJEM/aENc5BUyFVCunbIwbnJCQAfTAfbJqnwm0b
+cF9hQDcBO+3yz2bvPVnIylnI1XJRCmlzn+GIYxMYmMvQLYy0Ha6rRfgHmxJHc9+N
+yaOEh2aKlTYJa+Y3ZYXtrnIq3VTeRSrfRN+2/9MqR6uLjSQJBrloOy2SIob3AXV9
+vjmgp5PYG5rvbFXgb93ynlgieX35l4XrM3W6fGRypvWw3Tf9wekhDOtYc9WJrMkS
+H6VEt68zUQHSe8yAajliLF0Kwt7SuAKBNejtsxo2IBX/MxnrV6EYbBQOkrV/m2ey
+g3DXx8nuvtEo/QP+mn2IoP4Rko2zKtFBwLbO+s3eGKcrFe8OtJkfPrJpoa95P3Dm
+L7WIrGbeA1tBH+hawPmfsEiX+uNHxI53x/Lps5JsQxQjmH8oGk+BSmk7sg9ZBDmM
+Zfz+ZLzHLCM9vHxGX47/oghO80qrFsK2vhmj+aJZ1c6i76GHVm4CibvhQyRUfX15
+RWABZ0O4WajV2XxxdEr2kIi8aoV+JD3VlROwPnq26jDDtClL9onzkbER0EiaZzCi
+6CjBoh/h2rISl8iDwdZ9OXVUqzCKvuMPc82MmgAdG3Wq/ezdGQxQ/tMvzGxHHqj+
+HKBy6mll+wMLK0i+JscRS+JL6xisXOzt4k8XoW7vEoG6Q4WP0UYdfIkEHAQQAQoA
+BgUCVT4vjQAKCRDXnexJfQORrDi7H/9hUtfaNDpYDh6wzDERYOIfSpiu6kFOQJzr
+qql3/RZw02syd0UKzBNfWsJmzlwU4O6JKzEoWVZ/bg1F2BEYF3+pRHEdSthT3wuV
+/beAYdYgvJ8hNkNSaAfKrG3NMC5EtPtLb+RTSd34nmjsAlgBlFlfuYs//v4vMcMS
+dxyyCdukRQjLj3+lApccXJrSP0lMzcEaa27ADIKnZ8lEjc9HB+kRqEQFq3nQ4pOE
+gkF2YegO1J7KELst2AfuqVGTsdihHPNbWrTBs99CnDL+gJSd1jlEMzfE1QkvPQDR
+Zfsr1mjI5qgMBjR6/N16/oEMvFlSvyq0rSHe3/UKOXhc3DXyWxjx/thwsE9Nw8tV
+T4ab689bLlYRKcoeuUlnkie3bhPsyIb8ICzee4HHD3zY9dZ/fJ1tkK51DVafUcoj
+Gaf614bMsCpsStioPpplpqu8CGs6PQkTjEX6/VGJcqUTp7NiSTTIIGULP0UYe+Bq
+pFtQcf3ocL4mQd8VwRZNEQzDmmAu8f87PJKpwRjOboy/vO+KsJ+Vcyv1qU2GP1At
+l0cvU6pkINJ2TIUvZvZ2k0+E/pSZsvW62vLqS/UUrbTGBe0X1lqberYtIosLQnmU
+RHhuvLyOA7MkO6hWhFar44dHanmNSa3zV3QZjzsOtRUK2oWubDxXNJ6+6qUBND3B
+SypwJwVo+ScneF3/NM/AA3Npgp0HuFtWy5RnFBes67SZhC6I+r27S87SUUEhKl0y
+hFoeJTEQmjxGFxB/hl8/BuuOk2TsKUII0/j9qhIcUwjQYGgKYTQtZi3P2A229gex
+bE7qj3gaOzn/+Raf8LO2gAxAZe3c/DdX/4gS1jbNdClUs888veqOsgz4Nj1VLuvr
+XMTAbIiJBrtvuwJwNDwjEkViVwxjOm7PKiQZyX175G4vRAioksw3KHjJQK+xq77V
+B3/nElByqNTuX+0+z6Y3ZNEoLlld9mry6IPoFw3ylLMWZPqpn2UJxUFqXkZRdJvs
+mNhOfwSKVJDhXIC1P2o0nB/t54rebmm0WBwlFxDxuO/HzoIirx3BnezwjU/KjofO
+mleMgaeEynT0FTtlK+HXqQLkKWnSzPwmL3a7JgQ+FD+k2ShRu9e1JpcGqnGJpgfT
+mKYvCAvb3XdEO/C8JjQ0ox0IL93qguJFEZHl4nhsJml2dVwN6UEd0xujaqF19JT8
+Po42E8g9mN4aQSIh137S5N7IBVKgv9Y77rWipMb3dDpTVuFkQ7kTT48YtHomB2bA
+kbomul0IkqBnZMPeNXDrT760iLDZzbo34taWLsABjRv3Boqggg79vyQppmlnZ6z1
+82oSjdPmBNC99UvN9xKLqNL5bL90nTwkEfpMZEMlVAjDtPeAIjsSuQINBEq00/IB
+EAC3WuK+klOWmXo0VpJaEco6DD50p3zGILAN2EP6ymvTP2Z+xAEqRFOoosafX02d
+cpBfIeq8BAfI4SFGQFwH50IxNqVFc5TkHFvfo8EBb0xYoWw3lOJVxfsycRFxakjI
+q6HneLx2F/0vA1A9a6G1yora/v2I1tIV0durMpPRwVtczexICAe1Jn7q+OsX36yB
+K3BFLiQ7yWS8g5SnNl7HaNfvA4CVw/JzU8oC7kd7Cog2MSGZA+bhiQQmm2ZqfpYl
+sE2uQqgmNjwZVg2XZdI9FxQ3M90sXOvaSTiGPjMV1GLzOl85qepVUxe993mRj86q
++KlKwVKoGUrYloHWMnny5dhubNBOLWYnELVJonsv5RbhFZzsbSm8JALpP08zYSxv
+qJlaTIgnu7xGus+mg+2lKl0dM4xEiaeRRgEbdSTn7ExK2j/GUb5NzdPMyiBtJtuC
+sR+dlcYhxRGr5wIZdOE7RELocHgK43wokZ3koVTz4o/GA9UUoCIq6dCroxl0aZ94
+mFaIPzYpnvt2/md5MzeCsqGmp5l0Q6GlCGiL+m7APuYKoaJFvFKC+lip38+fPzji
+MJfP/SGoSNl689/Jud61bgqCpDKTsvvLIYcZMhegb+rAUcrhzKNwxk3p7R7f2eWv
+JQAhfel9hYpD4EzPATTDEC/luKjN8UoU9tQpxyPQRg0NtQARAQABiQIfBBgBCgAJ
+BQJKtNPyAhsMAAoJEJla3vQy1ArWmEQP/3RnIjb2vaQvyVoNC3t6y2xQUQJAffm/
+jo/FlOyb8c36fIDSLFNfjMUzwvo116VAD44BZcolIaBAjmCMIplg699IW+7Slr4s
+yKj0G8Z4kR4rn4YC57j+7aMT6Z6DfHiUUZHiApAYlIf14DsMYU8OGIb7i3UxpqTw
+3Y5RwnKWNIQ3cJ9PO+MJb++TnMt+LRi2Ha1Lnuy0iDF77ip0WjndCSBS7eOn+Jct
+fKTT/wMs8hecHB86Z8WlFL8YKyw0LsxVGEe5jqCEyjjl9nQcYwU1GHQgjmu95EEZ
+EU2HnWupvtT89q22K1aGvglO6AUgVatZ9kL6b6nsACF4x3U8/Tl8saXA4e7m7WwK
+Hg4OsaxMTT8XnN+iZf5d3yRvBBudgW8ku+5yimOL4Q+dyQduvoBMM+yEHWm3K+zE
+lx5P5E3Ql+vJxgCcfq+7WK5UyuykI1UGKRy6IwbcOMTY9310hLcUf5hR31jf+7j8
+MBDJE6P4SKcLSd1sy9VEEorLj8s0Syj1+k797axl5u24SDXe3GJQAA0cYOZ1iEyn
+LlwU1ErSix3lzilwD40h4zHIJa1oUczUvbpo6V5SvTRqW5ByfZoAFDAbM0Tl2hnr
+7jP4+cktZ+ejEjA4OTOoVeVanV3QuAMO5ETl7OX5+vNz3rxoGEmCk5fHm1c6XpgS
+jTyg19IQRme7
+=plln
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+pub   8192R/7D0391AC 2015-04-27
+uid                  Paul Merlin (Apache) <paulmerlin@apache.org>
+sig 3        7D0391AC 2015-04-27  Paul Merlin (Apache) <paulmerlin@apache.org>
+sub   8192R/091BA717 2015-04-27
+sig          7D0391AC 2015-04-27  Paul Merlin (Apache) <paulmerlin@apache.org>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG/MacGPG2 v2.0.22 (Darwin)
+
+mQQNBFU+CXUBIACuVDHLPl+jLxMee9HRGVSPQDdhPmaiYLxaam9revTR+cJyUZqU
+EZ7sOB7oY8mNr2XBZf++r3CWE03MT3vV0d862ZpHB2cIpgU9822hCAh4RBvEEc2Z
+gb74k88tACMo4IiJYdtnCyqLbotRC0vry5WsPuRlNTwrqE6sjC7RB2fN/o9tMVBf
+uXguyMTHzxF+pe+/WgyXSXUew+Z/5RdcRidfdt9XbfbbXx2BZ+Btez8X7W6ORPOK
+8DfhFeM2ceJ77fpdv7wUqypD4fC3Cy8tWBev5pE94mfW22h90lVWlvcSDI62uXk2
+WiO3X5cMKIpRFme+Ol8qF0cIjLD3sKEfKAEkGfgTcEuxm6yq3GrHqksbU26M/Oix
+rBW4OCYN1+eAUcDkmk6CNDjJCVM5RmhPRtRpVWWqe3EsyzGneglGQwAdEoSmPwbx
+fjErrJopAgoTxNmJMwm+ZtCOr8i2IICRv5FBxfqYtFj4JiSAb65WYI1hqVt2ud6+
+6MP4V3Hq0KNOmAzksDt+BIu3X4ktxxTH/VPPCGKJHpRbu55clYbBwZeHWkWAMVwq
+rTcPqaj46SY5xOlesvwz437RF0ngIJuw3ZlZq/3EMuvKdz2JNXLoI0EIvtRrm1sZ
+tHF5sutXJCsS0WoJ+nRyMayvecIhLUzlC/iOQZ7fFMlfQGOa4N0jxl0uewvFQGgW
+QWOIpevRyp1mrwsnYQHkSPx1UMmVH6iIj6WKtuzIWffIee+oYn7JvcVmKYxxHgAb
+6WEbltxo4ZgZBwTQmEzutI6HeIO+1MOsoTHHweubSo/4yDgvrSyQuSqlepp3cmhz
+cWxUfIFOyqmIWMroJXkqnW9X3vHyknnokXM/G259EIaFcgDNeJNP5sbLblq5RqB0
+FUC+tFUJr8NaE4ahWpzKjM6kfiAEvpUfmDI3V5RCo3Opu59EvflNpeZxoqQFCSnO
+Emri1mXxs0BbHUS2+1mYmvz/dJpDVSNOwfVfw657fgYCj/JNXm6hGZOLYUXvDmSJ
+40ycGhMDyuaw7lzhZW5PDTw7x+yZGtTNyW9///63g3A2leDiMB0ZnZNK7aliOeUy
+Qahblu29o5rv9xTsQAYXKc7lqtJjXQp2mUxyLMOF7NtjAhW/30T6HF1sGGdTy5oJ
+GkgHhtwSNAtK6FK1XJnAU7b4Yl1NFP5NFdilSf9GR0pGEREUNoH9a/tagnnCnHhn
+nUhIKmolHPP0zJZgMLGVsQdGwxll41s8mhqdrcl54FoPUuSZ239lnHohKBP14acH
+5+gIB+7LMmifB4+Aixm44IkyvHzN0F2prNpFSRwWJ5w/367rANtmfRVXV3iSN/CL
+JmzQAK03nnQ+hqWqHCfDgiK4OMSA5RYj6OC5ABEBAAG0LFBhdWwgTWVybGluIChB
+cGFjaGUpIDxwYXVsbWVybGluQGFwYWNoZS5vcmc+iQQ3BBMBCgAhBQJVPgl1AhsD
+BQsJCAcDBRUKCQgLBRYCAwEAAh4BAheAAAoJENed7El9A5GsoYcf/jg0vYJKz1Lq
+wUniMSUdwEnr7n2Gu0PY/ZfPmDnefPuTEr2AV2NVdRoe6fzpoRc/n0L4NLDjqSbu
+ud3qLZYyMeenVPef0/chEDCJpUVXj0+8LkrFQHbolIIyHowJ29j5L0Q2MqvzVcS0
+b5PMvHWlmbphkb9T0Yi0v7fZDom7deSrb9eFkBZR3hRTTmoYSzyFsdZbxSkp9D1j
+kJj1XDsC/yj7LbM/IUL2dfPTOzjjFdzQh7J20TM8z3oPRR4LQKOt4Ij2xhNWezM+
+ByBrNlq6586QRVjOCyY43V+uqq0P8+ayw8PMIl0m3JJfIXE4hDxfop+jbmkPoY2+
+EmSPH985hff6iza1A2a7TLkfzbBrzrQP1jSpjFKFRGbHX8LWCfKoSKUc1l2+CZFD
+D7k66jVrsx8t7feHSO6nkQUD0AV8L7yr/9Q0MYEVFx9F/38NtefLAG/LiQHqyb06
+PCw0pD12Y9dGf8SQbwaWP1Es3vjnmiepIBr0pIc47whd/V2/qrpz2LuOKz/kkuhC
+96Oo6dCftAUkt3jWNYVc6oDJNhP631bsjfaf9oZGw5NiymP52JkJYce0jufdKbnV
+RlDY9YmXUl2R+KvZ5Pu+fQNEOllx2a0lcPS3L1gzGijti0sxYRVhQByUggf2JzlT
+EfRO+Ee+S0K8mOOW+kAQzz30d43mlgJ440ma3hKK9W88xGOWoObKUj4yrfaovEci
+moAhpqr1FznjgNCs65PIHK2yQv7IHKIiEoDBMsEJySNHa7torVYYFiJzx9+nJMx7
+AS/+qWkgpRvR0XPyv2xJJigyJUIo6Raz0d+d0CbEbAkokQJn0nuvw9INHNKqlMIw
+CAMHv/iNWdsSHxyaxAWhicYBO+1U7umAcqv4wcgOhc5K1gEO3NyQQiOjP6E3ILJO
+j5FzFyxmO1Y7p1ZpuIBjr2Y6vHsIXlQgKY41iT1CAta8/RGKRURR96E1UV2yqUqR
+mdrhYUqeiAhhbL+24Fd2r0rsl3VZbXS28/Jas4pDesmjKFi+vM4HNzz6JoqDYj/8
+LA9DjUEvkmwXzhiGkFa4Q1mbOdD8FhRhNhiKNJSNCAcqY6bDxwV7wDqnO1vK2K1A
+Ah/4IKibZVq8nwrwZE7NBMrKGH/+U+9nNO5U6hFJKVxj16YH5UbdI7Mwj2pRh0bc
+dQKLKaSRnQa/keLdmYyl0mf+jma2Q94bhRhpY3H2yebEmHjv37NfqApu/yeacgcr
+7syU1NpHrGH1VtGt3F3gLB63y5qREyBXnAqhPGH9U2GrQ5RZ42v78X5oCJM5isLg
+J2tMJT6TyU+CCyMm2frwqHzpurqOd82Ll5CvlIPL2SNRIQMzYhkZ8OPixWPkp+VH
+w3gl5dr6BNa5BA0EVT4JdQEgANfiTJEMZYIshEa/Em0DddFOlAIREU0hjKrDL7Yh
+aibi3fItHhgUfcqKAlt6lLEyCeLN9cUxg9pemWqVH23ECG7NGP4mlXDjq2zvLJAC
+ZjnXvFfHzzOpJyZGcN8dqlNuMRwuUQyNjSdbyJ0CpfgUaxqQFPBRjAqnG7zUinbe
+HYvxHpYRWnrs1pBzL3ISy+Csrmr08pxAtGfeQU1o9IUEa0HDmOh2RstLyP7crcKC
+M3LooklXaRlHumGVO90frQpnrJQVt3ryO6n82Cc2fwSYu1afCisFzbjVnyVZUsMY
+duPItSD9GvhfNoUwzT7EGGLtk6ZfyXYpumVSVO2vOI8fdqinJZKc6VVIVe4R2TWg
+dVk/MNy4MPmU3M8Zg182VkbOcB4SYfrNRA1/TsJwODB6BN3F8QJR2bNKlkWb8f+E
+tKWG5vgpL2antDQ7vbbqGdTdCs1OW//auVBKyRvEOF6ZmG9Wc2T68UvSA7ENAZ6X
+KZSEDsg6H8t4CBWb+SC5s/E266/hgYeLlw/Nn5fYZ6bZa8/7biWPQyxBS/1xO5Ty
+1tWw4iTorIxDQBdNl1FGdkd0TS64XzUxGUA9nmuhKhUO6a4J9CYmCUJJt7hRWgxw
+fU3cTVi+wIyj/U4e+3RK+ZKPvSUEoM9KizRjAApaVi6d0rczVDq2qIfmobhLExWY
+FfpBrK7SMEeYxWH5nShRDuU/Rzc22O8tSo2aP/DbEiMlo0OO9rFEnoEcc5GQaM4S
+hobwIjRq1KSlEJ4ULWqsJ211eoUDt6bYTVCP7a97eGpDYL5gXiUrzyR9lNCMYBEL
+8VIUEvsQyZ5F0W3/zFEQkhf69p4BlefzdjP2sClE4KV161QEh2FRMpNcDzFrll56
+r/1Yd93P+ktJ7Pj6BqnsRSlCDyvaF5sJO6mXZ3az0IylbFqEQWNRiamxyKyB2vmz
+t0PhfQKQVaSCB51hH9uWIhNoPX0dFXGzfN3Uf3ePULuYqxr3prPohjdcmBvWfrTF
+gni+sRaIqNja8Zw4dMzg3GgfwZy8du7s17ZFDo6efetH+5iaBQ9Ee1JcE1QnXlYV
+1nGf/aj3QFTCWTQi4IgpGz8BX6XhWSWnSJU6oj5y+tK67JSAjVDXfekHqkNDZTR/
+3oPbMOSBQnV1RqekJmqm62NmaCZHXmrY6ke78hX+nILFeR6/tKzubw0+esSjnfom
+R+T86qsww55bB9quyZgv3TUYzNvTfekgmnLHdYI0AV7HlAU7Q3g5T42mP0WUyM6M
+19sShIiyrJjY/jN+DbLYmgP5W3YMOpJWIPqzKg3Bl379Qckh8b9wKFDkxUTq6jUM
+p3wyn/xNGPsQDAMY4q9M8HMqTE9a5t3Qo9S5n/dyw96TyacAEQEAAYkEHwQYAQoA
+CQUCVT4JdQIbDAAKCRDXnexJfQORrA01IACaAip1udN6HXyinmC4BkVTNzR36Jpd
+tjzKRoNCah+F7+Jmah2mrvgu42BpNkZFa/qCjwS/X1H4LvIvypyuRfsrv7Zs/tdB
+hIN2Uhp7XbNCZLHFXcHZRIwxIcpKr3Jcxa0hIYJgLrWSuH28kwvMeVXI4TYIzBuc
+qjBqR6G/yh92fACyvKIgTDaK81VHUztGmLeRSBH2BVgm4A7ERdL2p6ZHTcx4AdQP
+f0i7fXX4xAS9/UIv33nHbW4RlMc8DhtePJCBNkjLPU58/EUeUuXSKSWMC3blX5og
+UMZFf9vM34IP/S7mi0U2Ee31MTAbqRZiQ8zEuBQV0eE0+pIOjts66C22avMNkkg3
+4Y91CAZ210ycGMhBUhay9mH+nZ9gQMJ1HCJyYppUwxiRwid5ghjtN9UuC4zzNWA1
+BGCasyocmg58rUvO7pnteamI+mo2lkieciBrachy/L0aiJIkH/ge6fzl7mUM4ueL
++g1Aa08MOV2Jmw+cxBSD7p+Sx1foyH2qA04kn5+y9U7M9r3Noen0SyUPAZfNzqYw
+JZxlVEizmDaEcKMSs7lCG98VdcULRyVJf3N6jrbiddct+7ZtnouM+H/bBRBVNuPN
+sWKAoCRLFZ/kE5V4+ShFYYwHasvvUNqgEMYvNNOHkpjzyPQhUoE0VPr7MyT+jZTe
+vh68P4vNHph9HtOqYbQP+SfWhuo4bdbkD//LoMYocnMgaPglIQr0+xAmDpZb8ldc
+89iYvTwypZcwnitkCbqrMnuy3wR6m427atXYhV28R2nnOPuuiywxH4aT8eLoAV3j
+9XBXzefd+fBjm04iYQOHUKbvuKN9nrA8N2uBv/RNMSG/+EeMQVzGQwHsBSJarcZj
+3mzY8zgqpO4l6Y0OkZVIimcuJSz5eNak+ocm7PZUiLvVwJR17UREQOIL1Om5HOw7
+OW+tJNYPfa0IkkXav58yLQUW+Kf2gg76c35Bc1oQqLXWSm/ioaLTXQqcz6FIeNJA
+7pjBG1dRU0/623jURF2b75xyZngXen6VtVrd8KonfdjIgLF8REZWP5ZJKT7WHHSb
+bqxuU7c4tAcMMHMqHyy0CsmYn/AB3h+Rrp6LyWPBhj8yrCGNRqxTLy7je18bYn1U
+VaIBM059ISKzmQoREuQHZLvWMQTjmbamFKrnZrlfdOgjN1mevAvHrVc1HwXVv2vs
+WoAhZaCSqXaWcmUAG7IRhqrtgm2XJDp0XeN7FeeL9HoIxV5oReRlRuLfI2Lg6ttS
+BNeBpJmJjuvVEcTOXdeU9nElnpQri0l64wBtBE/vcRWyvejdCjDNutsGjD8+9Jsj
+s+fTgGMI3j1AnT8C/FH0aB6wx7eZU4y+9EfL0MrbCfFpKxSdUM2NI95p
+=k7KG
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/LICENSE.txt b/LICENSE.txt
index f433b1a..83c4864 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -175,3 +175,115 @@
       of your accepting any such warranty or additional liability.
 
    END OF TERMS AND CONDITIONS
+
+=======================================================================
+
+Apache Zest™ subcomponents:
+
+The Apache Zest™ project contains subcomponents with separate copyright
+notices and license terms. Your use of the source code for the these
+subcomponents is subject to the terms and conditions of the following
+licenses.
+
+-----------------------------------------------------------------------
+ The MIT License
+-----------------------------------------------------------------------
+
+The Apache Zest™ project bundles the following files under the MIT License:
+
+- jQuery v1.6.4 (https://jquery.com/)
+  Bundled in the documentation minisite.
+  Copyright 2014 jQuery Foundation and other contributors.
+- jQuery.ScrollTo v1.4.2 (https://github.com/flesler/jquery.scrollTo)
+  Bundled in the documentation minisite.
+  Copyright (c) 2007-2009 Ariel Flesler.
+- SyntaxHighlighter v3.0.83 (http://alexgorbatchev.com/SyntaxHighlighter/)
+  Bundled in the documentation minisite.
+  Copyright (C) 2004-2010 Alex Gorbatchev.
+
+All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+-----------------------------------------------------------------------
+ The BSD 3-Clauses License
+-----------------------------------------------------------------------
+
+The Apache Zest™ project bundles the following files under the BSD
+3-Clauses License:
+
+-----------------------------------------------------------------------
+ The W3C Software License
+-----------------------------------------------------------------------
+
+The Apache Zest™ project bundles the following files under the W3C Software
+License:
+
+- The "xml:" Namespace (http://www.w3.org/XML/1998/namespace)
+  Bundled in the Rental sample.
+  Copyright © 1994-2001 World Wide Web Consortium, (Massachusetts Institute
+  of Technology, Institut National de Recherche en Informatique et en
+  Automatique, Keio University).
+- XHTML 1.0 (2nd ed) Strict in XML Schema (http://www.w3.org/TR/xhtml1-schema/)
+  Bundled in the Rental sample.
+  Copyright © 1994-2001 World Wide Web Consortium, (Massachusetts Institute
+  of Technology, Institut National de Recherche en Informatique et en
+  Automatique, Keio University).
+
+All Rights Reserved. http://www.w3.org/Consortium/Legal/
+
+This W3C work (including software, documents, or other related items) is being
+provided by the copyright holders under the following license. By obtaining,
+using and/or copying this work, you (the licensee) agree that you have read,
+understood, and will comply with the following terms and conditions:
+
+Permission to use, copy, modify, and distribute this software and its
+documentation, with or without modification, for any purpose and without fee or
+royalty is hereby granted, provided that you include the following on ALL
+copies of the software and documentation or portions thereof, including
+modifications, that you make:
+
+1. The full text of this NOTICE in a location viewable to users of the
+   redistributed or derivative work.
+
+2. Any pre-existing intellectual property disclaimers, notices, or terms and
+   conditions. If none exist, a short notice of the following form (hypertext
+   is preferred, text is permitted) should be used within the body of any
+   redistributed or derivative code: "Copyright © [$date-of-software] World
+   Wide Web Consortium, (Massachusetts Institute of Technology, Institut
+   National de Recherche en Informatique et en Automatique, Keio University).
+   All Rights Reserved. http://www.w3.org/Consortium/Legal/"
+
+3. Notice of any changes or modifications to the W3C files, including the date
+   changes were made. (We recommend you provide URIs to the location from which
+   the code is derived.)
+
+THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE
+NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT
+THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY
+PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
+
+COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION.
+
+The name and trademarks of copyright holders may NOT be used in advertising or
+publicity pertaining to the software without specific, written prior
+permission. Title to copyright in this software and any associated
+documentation will at all times remain with copyright holders.
diff --git a/NOTICE.txt b/NOTICE.txt
index 97f9b57..abdd654 100644
--- a/NOTICE.txt
+++ b/NOTICE.txt
@@ -1,12 +1,5 @@
-Qi4j SDK
-Copyright 2007-2009, The Qi4j Development Team of individuals.
+Apache Zest™ (Java Edition) SDK
+Copyright 2015 The Apache Software Foundation.
 
-See http://www.qi4j.org/contributors.html for list of of individuals.
-Also see each file for additional information of Copyright claims.
-
-Qi4j is a community aggregated works under Copyright law.
-All parts of the original works at Qi4j is licensed under the
-Apache License ver 2.0 http://www.apache.org/licenses
-
-See NOTICE files in core/, libraries/ and extensions/ for further
-notices.
\ No newline at end of file
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/README.txt b/README.txt
index 0cc0bcd..dcbe6df 100644
--- a/README.txt
+++ b/README.txt
@@ -1,48 +1,64 @@
 
-Welcome to the world of Qi4j
+Welcome to the world of Apache Zest
    - Composite Oriented Programming on the Java platform.
 
 
-This Qi4j SDK contains everything you need to create Qi4j applications.
+This Apache Zest™ Source Distribution contains everything you need to
+create Zest™ applications.
 
 
-Qi4j started in 2007, and is still in heavy development. We would like
+Zest™ started in 2007, and is still in heavy development under the umbrella of
+the Apache Zest™ project at the Apache Software Foundation. We would like
 developers around the world to participate in the advancement of this
 cool, new and challenging technology. We are especially interested in
 people willing to help improve the SDK, samples, tutorials, documentation
 and other supporting material.
 
-Please see http://qi4j.org for more information.
+Please see https://zest.apache.org for more information.
 
 
 Licensing
 ---------
-All Qi4j code is licensed under an Apache License.
+All Zest™ code is licensed under an Apache License.
 
 Third-Party Dependencies may be licensed under other terms. The only
 required dependencies are SLF4J (MIT Licence), ASM (BSD Licence) and
 Joda-Time (Apache Licence).
 
-
-Dependencies not included
--------------------------
-The binary distributions contains Qi4j artifacts only to keep the download
-size small. Each Qi4j artifact comes with a file prefixed ..-runtime-deps.txt
-that contains the list of its dependencies. Moreover, at the SDK root you'll
-find a Metalink file named qi4j-sdk-runtime-deps.metalink that you can use to
-download all needed dependencies jars. Metalink files can be downloaded using
-curl, aria2 and a lot of other download tools. Support in wget is coming.
-
-Finally, Qi4j TestSupport depends on JUnit 4.x and its dependencies, which
+Finally, Zest™ TestSupport depends on JUnit 4.x and its dependencies, which
 is also not included in the SDK itself, as it is present among most Java
 developers.
 
+
+Dependencies not included
+-------------------------
+The source distribution contains Zest™ sources only to keep the download
+size small. The Gradle build automatically downloads needed dependencies.
+If you need to go offline type `./gradlew goOffline` to ensure all needed
+dependencies are cached by Gradle.
+
 If you prefer to use a dependency management system, go to:
-http://qi4j.org/latest/howto-depend-on-qi4j.html
+https://zest.apache.org/java/latest/howto-depend-on-zest.html
 
 
-Thank you for trying out Qi4j and Composite Oriented Programming.
+Building Apache Zest
+---------------------
+To build Zest™ from sources you only need to have a valid Java JDK >= 7
+installation.
+
+If you want to build the Zest™ manual, then you also need valid Asciidoc
+(http://www.methods.co.nz/asciidoc/) and Docbook-XSL installations.
+
+Here is how to run a full build with checks:
+
+    ./gradlew check assemble
+
+Read the Zest™ Build System tutorial for more details:
+https://zest.apache.org/java/latest/build-system.html
 
 
--- Qi4j Core Dev Team
+Thank you for trying out Apache Zest™ and Composite Oriented Programming.
+
+
+-- Apache Zest™ Team
 
diff --git a/bin/git-create-remote-branch.sh b/bin/git-create-remote-branch.sh
deleted file mode 100755
index a378610..0000000
--- a/bin/git-create-remote-branch.sh
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/sh
-# git-create-remote-branch <branch_name>
-
-if [ $# -ne 1 ]; then
-         echo 1>&2 Usage: $0 branch_name
-         exit 127
-fi
- 
-export branch_name=$1
-git push origin origin:refs/heads/${branch_name}
-git fetch origin
-git checkout --track -b ${branch_name} origin/${branch_name}
-git pull
diff --git a/bin/migrate/develop.sh b/bin/migrate/develop.sh
deleted file mode 100755
index 9f37dfe..0000000
--- a/bin/migrate/develop.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/sh
-
-git clone git://github.com/Qi4j/qi4j-sdk.git
-cd qi4j-sdk
-git rm .gitmodules
-git commit -a -m "Removing submodules and merging qi4j-core, qi4j-libraries and qi4j-extensions via subtree-merge"
-
-git remote add -f core git@github.com:Qi4j/qi4j-core.git
-git merge -s ours --no-commit core/develop
-git read-tree --prefix=core/ -u core/develop
-git commit -m "Merge 'qi4j-core' as into SDK"
-git pull -s subtree core develop
-
-git remote add -f libraries git@github.com:Qi4j/qi4j-libraries.git
-git merge -s ours --no-commit libraries/develop
-git read-tree --prefix=libraries/ -u libraries/develop
-git commit -m "Merge 'qi4j-libraries' as into SDK"
-git pull -s subtree libraries develop
-
-git remote add -f extensions git@github.com:Qi4j/qi4j-extensions.git
-git merge -s ours --no-commit extensions/develop
-git read-tree --prefix=extensions/ -u extensions/develop
-git commit -m "Merge 'qi4j-extensions' as into SDK"
-git pull -s subtree extensions develop
-
diff --git a/bin/tag.sh b/bin/tag.sh
deleted file mode 100755
index 7319179..0000000
--- a/bin/tag.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-
-VERSION=$1
-MESSAGE=$2
-git tag -s -m $MESSAGE $VERSION
-git push --tags
diff --git a/build.gradle b/build.gradle
index 20f215e..d7666e6 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,11 +1,42 @@
+/*
+ * 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.
+ */
+
 project.ext {
-  title = "Qi4j SDK"
-  description = "Qi4j™ is a framework for domain centric application development, including evolved concepts from AOP, DI and DDD."
+  title = "Apache Zest™ (Java Edition) SDK"
+  description = "Apache Zest™ (Java Edition) is a framework for domain centric application development, including evolved concepts from AOP, DI and DDD."
   testFailures = [ ]
   mainClassName = 'org.qi4j.container.Main'
   groovycMain_mx = "700m"
-  groovycMain_permSize = "256m"
-  groovycMain_maxPermSize = "256m"
+  groovycMain_permSize = "512m"
+  groovycMain_maxPermSize = "512m"
+}
+
+buildscript {
+  repositories {
+    maven { url "https://plugins.gradle.org/m2/" }
+    jcenter()
+  }
+  dependencies {
+    classpath 'gradle.plugin.org.nosphere.apache:creadur-rat-gradle:0.1.2'
+    classpath 'gradle.plugin.org.nosphere.honker:honker-gradle:0.2.1'
+    classpath 'org.hibernate.build.gradle:gradle-maven-publish-auth:2.0.1'
+  }
 }
 
 
@@ -13,9 +44,10 @@
 apply plugin: 'idea'
 apply plugin: 'signing'
 apply plugin: 'maven'
-apply from: 'maven-compat.gradle'
+apply plugin: 'maven-publish-auth'
 apply plugin: 'project-report'
 apply from: 'libraries.gradle'
+apply plugin: 'org.nosphere.apache.rat'
 
 targetCompatibility = "1.7"
 sourceCompatibility = "1.7"
@@ -23,14 +55,48 @@
 // Collect the modules that fulfills the Release Criteria.
 project.ext {
   releaseSpec = new org.qi4j.gradle.plugin.ModuleReleaseSpecification()
+  releaseApprovedProjects = allprojects.findAll( { p -> rootProject.releaseSpec.satisfiedBy( p ) } )
 }
 
-def releaseApprovedProjects = allprojects.findAll( { project ->  rootProject.ext.releaseSpec.satisfiedBy( project ) } )
+// Toggle signing, used by the source distribution by setting the skipSigning property in gradle.properties
+project.ext.skipSigning = rootProject.hasProperty( 'skipSigning' ) ? rootProject.skipSigning : false
 
-buildscript {
-  repositories {
-    mavenCentral()
-  }
+rat {
+    onlyIf { version != '0' }
+    excludes = [
+        '**/.DS_Store/**', '**/._*',
+        // Git Files
+        '**/.git/**', '**/.gitignore',
+        // Gradle Files
+        'gradle/wrapper/**', '**/gradlew', '**/gradlew.bat', '**/.gradle/**',
+        // Build Output
+        '**/build/**', '**/derby.log', 'out/**',
+        // IDE Files
+        '**/.idea/**', '**/*.iml', '**/*.ipr', '**/*.iws',
+        '**/.settings/**', '**/.classpath', '**/.project',
+        '**/.gradletasknamecache', '**/private/cache/**',
+        '**/.nb-gradle-properties', '**/.nb-gradle/**',
+        // JSON files are not allowed to have comments, according to http://www.json.org/ and http://www.ietf.org/rfc/rfc4627.txt
+        '**/*.json',
+        // Various Text Resources
+        '**/README.*','**/README*.*', '**/TODO',
+        '**/src/main/resources/**/*.txt',
+        '**/src/test/resources/**/*.txt',
+        'libraries/rest-server/src/main/resources/**/*.htm',
+        'libraries/rest-server/src/main/resources/**/*.atom',
+        'tools/qidea/src/main/resources/**/*.ft',
+        'tools/qidea/src/main/resources/**/*.template',
+        // Graphic Resources
+        '**/*.svg', '**/*.gif', '**/*.png', '**/*.jpg', '**/*.psd',
+        // Keystores
+        '**/*.jceks',
+        // Syntax Highlighter - MIT
+        'manual/**/sh*.css', 'manual/**/sh*.js',
+        // jQuery & plugins - MIT
+        'manual/**/jquery*.js',
+        // W3C XML Schemas - W3C Software License
+        'samples/rental/src/main/resources/*.xsd',
+    ]
 }
 
 
@@ -51,8 +117,7 @@
 def repos_urls = [
   mavenCentral: "http://repo1.maven.org/maven2/",
   ops4j: "http://repository.ops4j.org/maven2/",
-  restlet: 'http://maven.restlet.org',
-  javanet: "http://download.java.net/maven/2",
+  restlet: 'http://maven.restlet.org/',
   clojars: "http://clojars.org/repo/",
 ]
 
@@ -65,12 +130,15 @@
 //  apply plugin: 'checkstyle'
   apply plugin: 'project-report'
   apply plugin: 'maven'
+  apply plugin: 'org.nosphere.honker'
 
 
   defaultTasks 'classes', 'test'
 
-  group = name.substring( 0, name.lastIndexOf( '.' ) )
-  version = System.properties.version ?: "0"
+  group = name == 'org.qi4j' ? 'org.qi4j' : name.substring( 0, name.lastIndexOf( '.' ) )
+  if( version == 'unspecified' ) {
+    version = System.properties.version ?: "0"
+  }
   
   // UTF-8 For all compilations and javadocs
   // Deprecation warnings for all compilations
@@ -85,13 +153,22 @@
   }
   tasks.withType(Javadoc) {
     options.encoding = 'UTF-8'
+    options.docEncoding = 'UTF-8'
+    options.charSet = 'UTF-8'
+    options.noTimestamp = true
+    options.links = [
+      'http://docs.oracle.com/javase/7/docs/api/',
+      'http://www.joda.org/joda-time/apidocs/',
+      'http://www.json.org/javadoc/',
+      'http://junit.org/javadoc/latest/'
+    ]
+    // exclude '**/internal/**'
   }
 
   repositories {
     mavenCentral()
     maven { name 'ops4j-repo'; url repos_urls.ops4j }
     maven { name 'restlet-repo'; url repos_urls.restlet }
-    maven { name 'maven2-repository.dev.java.net'; url repos_urls.javanet }
     maven { name 'clojars-repo'; url repos_urls.clojars }
   }
 
@@ -109,16 +186,22 @@
   def uploadReleaseSpec = rootProject.hasProperty('uploadReleaseSpec') \
                              ? rootProject.uploadReleaseSpec : uploadReleases \
                              ? true : false
-  // By default RELEASES are uploaded using SSH, SNAPSHOTS using WEBDAV
+  // By default RELEASES and SNAPSHOTS are uploaded using HTTP
   // Used Wagon can be overriden by setting the uploadWagon property
-  // def wagonSSH = "org.apache.maven.wagon:wagon-ssh:1.0-beta-2"
-  def wagonWEBDAV = "org.apache.maven.wagon:wagon-webdav:1.0-beta-2"
+  // def wagonSSH = "org.apache.maven.wagon:wagon-ssh:2.2"
+  // def wagonWEBDAV = "org.apache.maven.wagon:wagon-webdav:1.0-beta-2"
+  def wagonHTTP = "org.apache.maven.wagon:wagon-http:2.2"
   def uploadWagon = rootProject.hasProperty('uploadWagon') \
-                        ? rootProject.uploadWagon : wagonWEBDAV
-  // By default RELEASES are uploaded to OPS4J, SNAPSHOTS to Cloudbees
+                        ? rootProject.uploadWagon : wagonHTTP
+  // By default RELEASES and SNAPSHOTS are uploaded to Apache Nexus
   // Target repository can be overriden by setting the uploadRepository property
-  def releasesRepository = "dav:https://repository-qi4j.forge.cloudbees.com/release/"
-  def snapshotsRepository = "dav:https://repository-qi4j.forge.cloudbees.com/snapshot/"
+  def releasesRepositoryName = "apache.releases.https"
+  def releasesRepository = "https://repository.apache.org/service/local/staging/deploy/maven2"
+  def snapshotsRepositoryName = "apache.snapshots.https"
+  def snapshotsRepository = "https://repository.apache.org/content/repositories/snapshots"
+  def uploadRepositoryName = rootProject.hasProperty('uploadRepositoryName') \
+                            ? rootProject.uploadRepositoryName \
+                            : uploadReleases ? releasesRepositoryName : snapshotsRepositoryName
   def uploadRepository = rootProject.hasProperty('uploadRepository') \
                             ? rootProject.uploadRepository \
                             : uploadReleases ? releasesRepository : snapshotsRepository
@@ -156,6 +239,11 @@
   }
 
   sourceSets {
+    main {
+      output.dir( honkerGenDependencies.outputDir, builtBy: honkerGenDependencies )
+      output.dir( honkerGenLicense.outputDir, builtBy: honkerGenLicense )
+      output.dir( honkerGenNotice.outputDir, builtBy: honkerGenNotice )
+    }
     docs {
       resources {
         srcDir 'src/docs'
@@ -163,17 +251,41 @@
     }
   }
 
+  honker {
+    // Project License, applied to all submodules
+    license 'Apache 2'
+    // Dependencies (transitive or not) with no license information, overriding them
+    licenseOverride { candidate ->
+      if( candidate.group == 'asm' || candidate.module == 'prefuse-core' ) {
+        candidate.license = 'BSD 3-Clause'
+      }
+      if( candidate.group == 'org.apache.httpcomponents'
+          || candidate.group == 'jdbm'
+          || candidate.group == 'org.osgi'
+          || candidate.group.startsWith( 'org.restlet' ) ) {
+        candidate.license = 'Apache 2'
+      }
+    }
+  }
+  honkerGenNotice {
+    header = 'Apache Zest'
+    footer = 'This product includes software developed at\nThe Apache Software Foundation (http://www.apache.org/).\n'
+  }
+  check.dependsOn honkerCheck
+
   project.ext {
     javaDir = new File( "$projectDir/src/main/java" )
     scalaDir = new File( "$projectDir/src/main/scala" )
+    groovyDir = new File( "$projectDir/src/main/groovy")
     documentationDir = new File( "$projectDir/src/docs" )
     testJavaDir = new File( "$projectDir/src/tests/java" )
     testScalaDir = new File( "$projectDir/src/tests/scala" )
+    testGroovyDir = new File( "$projectDir/src/tests/groovy")
   }
 
   // Actual code projects BEGIN -------------------------------------------
-  if( ext.javaDir.isDirectory() || ext.scalaDir.isDirectory() ||
-      ext.testJavaDir.isDirectory() || ext.testScalaDir.isDirectory() )
+  if( ext.javaDir.isDirectory() || ext.scalaDir.isDirectory() || ext.groovyDir.isDirectory() ||
+      ext.testJavaDir.isDirectory() || ext.testScalaDir.isDirectory() || ext.testGroovyDir.isDirectory() )
   {
     apply plugin: 'jacoco'
     apply plugin: 'osgi'
@@ -208,17 +320,18 @@
     jar {
       manifest {
         license = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
-        docURL = 'http://www.qi4j.org'
-        description = project.description ?: 'Qi4j is a platform for Composite Oriented Programming'
-        vendor = 'Qi4j Community, http://www.qi4j.org'
+        docURL = 'https://zest.apache.org'
+        description = project.description ?: 'Apache Zest™ (Java Edition) is a platform for Composite Oriented Programming'
+        vendor = 'The Apache Software Foundation, https://www.apache.org'
         instruction '-debug', 'true'
       }
     }
 
     signing {
-      required { uploadSigned }
+      required { rootProject.version != '0' && uploadSigned }
       sign configurations.archives
     }
+    signArchives.onlyIf { !rootProject.skipSigning }
 
     task sourceJar( type: Jar ) {
       classifier = "sources"
@@ -301,16 +414,18 @@
       if( uploadSigned )
         beforeDeployment { MavenDeployment deployment -> signing.signPom( deployment ) }
       configuration = configurations.deployerJars
-      repository(url: uploadRepository) {
+      repository(id: uploadRepositoryName, url: uploadRepository) {
         if( uploadUsername )
           authentication(userName: uploadUsername, password: uploadPassword)
       }
-      snapshotRepository(url: uploadRepository) {
+      snapshotRepository(id: uploadRepositoryName, url: uploadRepository) {
         if( uploadUsername )
           authentication(userName: uploadUsername, password: uploadPassword)
       }
     }
   }
+  apply from: "$rootProject.projectDir/maven-compat.gradle"
+  apply plugin: 'maven-publish-auth' // Bug in maven-publish-auth require apply after uploadArchives setup
 
   idea.module.iml {
     whenMerged { module ->
@@ -319,6 +434,14 @@
   }
 } // allprojects END -------------------------------------------------------
 
+// Allow easy download of all dependencies to go offline
+// ./gradlew goOffline
+task goOffline {
+  doLast {
+    allprojects.configurations.flatten()*.resolvedConfiguration
+  }
+}
+
 gradle.taskGraph.whenReady {taskGraph ->
   taskGraph.allTasks.last().doLast {
     if( rootProject.ext.testFailures )
@@ -366,7 +489,7 @@
       executiondata {
         coveredProjects.collect { p -> fileset( dir: "${p.buildDir.path}/jacoco" ) { include( name: '*.exec' ) } }
       }
-      structure( name: "Qi4j SDK" ) {
+      structure( name: "Apache Zest™ (Java Edition) SDK" ) {
         group( name: "Core" ) {
           classfiles { coreProjects.collect { p -> fileset dir: "${p.buildDir.path}/classes/main" } }
           sourcefiles { coreProjects.collect { p -> fileset dir: "${p.projectDir.path}/src/main/java" } }
@@ -394,7 +517,7 @@
       }
       csv  destfile: "${outputPath}/jacoco.csv", encoding: "UTF-8"
       xml  destfile: "${outputPath}/jacoco.xml", encoding: "UTF-8"
-      html destdir:  outputPath, encoding: "UTF-8", locale: "en", footer: "Qi4j SDK"
+      html destdir:  outputPath, encoding: "UTF-8", locale: "en", footer: "Apache Zest™ (Java Edition) SDK"
     }
   }
   inputs.dir subprojects.collect { p -> "${p.buildDir.path}/jacoco" }
@@ -407,7 +530,7 @@
 
   options.docFilesSubDirs = true
   options.encoding = "UTF-8"
-  options.overview = "${rootProject.projectDir}/buildSrc/src/javadoc/overview.html"
+  options.overview = "${rootProject.projectDir}/src/javadoc/overview.html"
   title = "${rootProject.title} ${version}"
   def apiSources = releaseApprovedProjects.findAll( { project ->
     ( project.name.startsWith( 'org.qi4j.core' ) && !project.name.startsWith( 'org.qi4j.core.runtime' ) ) ||
@@ -418,12 +541,11 @@
   source apiSources.collect { project ->
     project.sourceSets.main.allJava
   }
-  destinationDir = new File( "" + buildDir + '/docs/javadoc' )
+  destinationDir = project.file( "$project.docsDir/javadocs" )
   // Might need a classpath
   classpath = files( apiSources.collect { project ->
     project.sourceSets.main.compileClasspath
   } )
-  options.links( "http://docs.oracle.com/javase/7/docs/api/" )
   options.group( [ "Core API": [ "org.qi4j.api", "org.qi4j.api.*", "org.qi4j.io", "org.qi4j.functional" ],
                          "Core Bootstrap": [ "org.qi4j.bootstrap", "org.qi4j.bootstrap.*" ],
                          "Core SPI": [ "org.qi4j.spi", "org.qi4j.spi.*" ],
@@ -440,11 +562,11 @@
 
   if( rootProject.version == '0' || rootProject.version.contains( "SNAPSHOT" ) )
   {
-    into( "$rootProject.projectDir/../qi4j.github.com/develop/javadocs/" )
+    into( "$rootProject.projectDir/../zest-web/site/content/java/develop/javadocs/" )
   }
   else
   {
-    into( "$rootProject.projectDir/../qi4j.github.com/$version/javadocs/" )
+    into( "$rootProject.projectDir/../zest-web/site/content/java/$version/javadocs/" )
   }
   from( 'build/docs/javadoc/' )
 }
@@ -452,42 +574,161 @@
 
 // Build All
 task buildAll( dependsOn: [
-    archiveJavadocs,
-    test,
+    javadocs,
+    check,
     jar,
     subprojects*.dependencyReport,
     subprojects*.assemble,
     ':org.qi4j.manual:website'
 ] ) { }
 
-// Prepare runtime dependencies download facility (metalink)
-buildAll.doLast {
-    def runtimeDepsMetalink = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<metalink xmlns=\"urn:ietf:params:xml:ns:metalink\">\n"
-    runtimeDepsMetalink = runtimeDepsMetalink + " <identity>qi4j-sdk-runtime-deps</identity>\n"
-    runtimeDepsMetalink = runtimeDepsMetalink + " <version>${version}</version>\n"
-    def handledGavPaths = []
-    releaseApprovedProjects.each { p ->
-      p.configurations.runtime.allDependencies.each { dep ->
-        def gavpath = dep.group.replace(".","/") + "/" + dep.name + "/" + dep.version + "/" + dep.name + "-" + dep.version + ".jar"
-        if( !dep.group.startsWith("org.qi4j") && !handledGavPaths.contains( gavpath ) ) {
-          runtimeDepsMetalink = runtimeDepsMetalink + "  <file name=\"${dep.group}-${dep.name}-${dep.version}.jar\">\n"
-          repos_urls.each { repo_url ->
-            runtimeDepsMetalink = runtimeDepsMetalink + "    <url>" + repo_url.value + dep.group.replace(".","/") + "/" + dep.name + "/" + dep.version + "/" + dep.name + "-" + dep.version + ".jar" + "</url>\n"
-          }
-          runtimeDepsMetalink = runtimeDepsMetalink + "  </file>\n\n"
-          handledGavPaths << gavpath
-        }
-      }
-    }
-    runtimeDepsMetalink = runtimeDepsMetalink + "</metalink>\n"
-    new File( buildDir.toString(), "reports" ).mkdirs()
-    new File( buildDir.toString(), "reports/qi4j-sdk-runtime-deps.metalink" ).text = runtimeDepsMetalink
+// Generate license headers with comment styles
+def licenseHeader_wrap( base, top, left, bottom ) {
+  ( top ? "$top\n" : '' ) + base.readLines().collect{ "${left}${it}" }.join( '\n' ) + '\n' + ( bottom ? "$bottom\n" : '' )
+}
+def licenseHeader( flavour ) {
+  def base = project.file( 'etc/header.txt' ).text
+  def header
+  switch( flavour ) {
+    case 'java': case 'groovy': case 'scala': case 'js':
+      header = licenseHeader_wrap( base, '/*', ' * ', ' */' ) ; break
+    case 'xml': case 'html':
+      header = licenseHeader_wrap( base, '<!--', '  ', '-->' ) ; break
+    case 'txt': case 'shell': case 'python': case 'ruby':
+      header = licenseHeader_wrap( base, null, '# ', null ) ; break
+    case 'adoc': case 'asciidoc':
+      header = licenseHeader_wrap( base, null, '// ', null ) ; break
+    default:
+      header = base
+  }
+  header
 }
 
-def srcDistImage = copySpec {
+task generateBinDistGoOfflineHelpers {
+  def goOfflineGradleFile = file( 'build/go-offline-helpers/go-offline.gradle' )
+  def goOfflinePomFile = file( 'build/go-offline-helpers/go-offline.pom')
+  outputs.files goOfflineGradleFile
+  outputs.files goOfflinePomFile
+  doLast {
+
+    def goOfflineGradle = licenseHeader( 'java' )
+    goOfflineGradle += '// This gradle build file has the sole purpose of downloading all dependencies in a directory relative to this file named \'dependencies\'.\n'
+    goOfflineGradle += '// Use the following command: gradle -b go-offline.gradle download\n'
+    goOfflineGradle += 'apply plugin: \'java\'\nconfigurations { download }\nrepositories {\n'
+    def goOfflinePom = licenseHeader( 'xml' )
+    goOfflinePom += '<project>\n  <modelVersion>4.0.0</modelVersion>\n'
+    goOfflinePom += "  <groupId>org.qi4j</groupId>\n  <artifactId>go-offline-helper</artifactId>\n  <version>$version</version>\n"
+    goOfflinePom += '  <packaging>pom</packaging>\n'
+    goOfflinePom += '  <!--\n  This pom has the sole purpose of downloading all dependencies in a directory relative to this file named \'dependencies\'.\n'
+    goOfflinePom += '  Use the following command:\n\n  mvn -f go-offline.pom validate\n  -->\n  <repositories>\n'
+
+    def repoCount = 1
+    repos_urls.each { repo_url ->
+      goOfflineGradle += "  maven { url '${repo_url.value}' }\n"
+      goOfflinePom += "    <repository><id>go-offline-repo-$repoCount</id><url>${repo_url.value}</url></repository>\n"
+      repoCount++
+    }
+
+    goOfflineGradle += '}\ndependencies {\n'
+    goOfflinePom += '  </repositories>\n  <dependencies>\n'
+
+    // Do the global dependency resolution here so there won't be any suprise when using the helpers
+    // This also allow to apply the resolution strategy defined in libraries.gradle
+    // WARN some of our modules depends on != versions of some artifacts, this resolution flatten this using the most up to date
+    def allRuntimeDeps = releaseApprovedProjects.collect{ it.configurations.runtime.allDependencies }.flatten()
+    rootProject.configurations.create( 'goOfflineHelpers' )
+    rootProject.dependencies { allRuntimeDeps.each{ goOfflineHelpers it } }
+    rootProject.configurations.goOfflineHelpers.incoming.resolutionResult.allComponents.each { comp ->
+      def depCoords = "${comp.moduleVersion.group}:${comp.moduleVersion.name}:${comp.moduleVersion.version}"
+      if( !comp.moduleVersion.group.startsWith( 'org.qi4j' ) ) {
+        goOfflineGradle += "  download( '$depCoords' ) { transitive = false }\n"
+        goOfflinePom += "    <dependency><groupId>${comp.moduleVersion.group}</groupId><artifactId>${comp.moduleVersion.name}</artifactId><version>${comp.moduleVersion.version}</version></dependency>\n"
+      }
+    }
+
+    goOfflineGradle += """}
+task download( type: Copy ) {
+  def sources = configurations.download.resolvedConfiguration.resolvedArtifacts.collect { artifact ->
+    project.dependencies.create( [ group: artifact.moduleVersion.id.group, name: artifact.moduleVersion.id.name, version: artifact.moduleVersion.id.version, classifier: 'sources' ] )
+  }
+  def javadocs = configurations.download.resolvedConfiguration.resolvedArtifacts.collect { artifact ->
+    project.dependencies.create( [ group: artifact.moduleVersion.id.group, name: artifact.moduleVersion.id.name, version: artifact.moduleVersion.id.version, classifier: 'javadoc' ] )
+  }
+  from configurations.download
+  from configurations.detachedConfiguration( sources as Dependency[] ).resolvedConfiguration.lenientConfiguration.getFiles( Specs.SATISFIES_ALL )
+  from configurations.detachedConfiguration( javadocs as Dependency[] ).resolvedConfiguration.lenientConfiguration.getFiles( Specs.SATISFIES_ALL )
+  into file( 'dependencies/' )
+}
+"""
+
+    goOfflinePom += """  </dependencies>\n  <build><plugins><plugin>
+    <groupId>org.apache.maven.plugins</groupId>
+    <artifactId>maven-dependency-plugin</artifactId>
+    <version>2.10</version>
+    <executions>
+      <execution>
+        <id>go-offline-jars</id><phase>validate</phase>
+        <goals><goal>copy-dependencies</goal></goals>
+        <configuration>
+          <outputDirectory>\${project.basedir}/dependencies</outputDirectory>
+          <excludeTransitive>true</excludeTransitive>
+        </configuration>
+      </execution>
+      <execution>
+        <id>go-offline-sources</id><phase>validate</phase>
+        <goals><goal>copy-dependencies</goal></goals>
+        <configuration>
+          <classifier>sources</classifier><failOnMissingClassifierArtifact>false</failOnMissingClassifierArtifact>
+          <outputDirectory>\${project.basedir}/dependencies</outputDirectory>
+          <excludeTransitive>true</excludeTransitive>
+        </configuration>
+      </execution>
+      <execution>
+        <id>go-offline-javadocs</id><phase>validate</phase>
+        <goals><goal>copy-dependencies</goal></goals>
+        <configuration>
+          <classifier>javadoc</classifier><failOnMissingClassifierArtifact>false</failOnMissingClassifierArtifact>
+          <outputDirectory>\${project.basedir}/dependencies</outputDirectory>
+          <excludeTransitive>true</excludeTransitive>
+        </configuration>
+      </execution>
+    </executions>
+  </plugin></plugins></build>
+</project>
+"""
+
+    goOfflineGradleFile.parentFile.mkdirs()
+    goOfflinePomFile.parentFile.mkdirs()
+
+    goOfflineGradleFile.text = goOfflineGradle
+    goOfflinePomFile.text = goOfflinePom
+  }
+}
+
+
+def srcDistFilesImages = copySpec {
   from '.'
+  include '*.txt'
+  include 'doap.rdf'
+  include '*.gradle'
+  include 'gradlew*'
+  include 'gradle/**'
+  include 'etc/**'
+  include 'buildSrc/**'
+  include 'src/**'
+  releaseApprovedProjects.each { p ->
+    def relPath = new File( project.projectDir.toURI().relativize( p.projectDir.toURI() ).toString() )
+    include "$relPath/**"
+  }
+  include 'manual/**'
+  include 'samples/**'
+  include 'tests/**'
+  include 'tutorials/**'
+  // Filtered, see below
+  exclude 'settings.gradle'
+  exclude 'gradle.properties'
+  // Excludes
   exclude '**/build/'               // Build output
-  exclude '**/bin/'                 // Helper scripts
   exclude 'derby.log'               // Derby test garbage
   exclude '**/*.iml'                // IDEA files
   exclude '**/*.ipr'                // IDEA files
@@ -502,9 +743,53 @@
   exclude '**/.git/'                // Git directories
   exclude '**/.git*'                // Git files
   exclude '**/.gradle/'             // Gradle management files
-  exclude '**/gradle.properties'    // Gradle properties
   exclude '**/.gradletasknamecache' // Gradle cache
-  into "qi4j-sdk-$version/src/"
+  into '.'
+}
+
+task srcDistFilteredFiles() {
+  // Generates various files for the source distribution
+  // - settings.gradle
+  // - gradle.properties to set version !
+  def filteredDir = new File( "$project.buildDir/tmp/srcDistFilteredFiles")
+  outputs.file filteredDir
+  doLast {
+    // Settings
+    def settingsFile = new File( filteredDir,  'settings.gradle' )
+    settingsFile.parentFile.mkdirs()
+    def filteredSettings = ''
+    project.file( 'settings.gradle' ).readLines().each { line ->
+      if( line.contains( '\'libraries:' ) || line.contains( '\'extensions:' ) || line.contains( '\'tools:' ) ) {
+        def accepted = false
+        releaseApprovedProjects.collect{it.projectDir}.each { acceptedProjectDir ->
+          if( line.contains( "'${acceptedProjectDir.parentFile.name}:${acceptedProjectDir.name}'" ) ) {
+            accepted = true
+          }
+        }
+        if( accepted ) {
+          filteredSettings += "$line\n"
+        }
+      } else {
+        filteredSettings += "$line\n"
+      }
+    }
+    settingsFile.text = filteredSettings
+    // gradle.properties
+    def gradlePropsFile = new File( filteredDir, 'gradle.properties' )
+    gradlePropsFile.parentFile.mkdirs()
+    gradlePropsFile.text = project.file( 'gradle.properties' ).text + "\nskipSigning=true\nskipAsciidocIfAbsent=true\n\nversion=$version\n"
+  }
+}
+
+def srcDistFilteredFilesImage = copySpec {
+  from srcDistFilteredFiles
+  into '.'
+}
+
+def srcDistImage = copySpec {
+  into "apache-zest-java-$version-src"
+  with srcDistFilesImages
+  with srcDistFilteredFilesImage
 }
 
 def reportsDistImage = copySpec {
@@ -522,12 +807,11 @@
   releaseApprovedProjects.collect { p ->
     into( "libs/" ) {
       from "$p.buildDir/reports/project/dependencies.txt"
-      rename 'dependencies.txt', p.name + '-' + p.version + '-runtime-deps.txt'
+      rename 'dependencies.txt', "${p.name}-${p.version}-runtime-deps.txt"
     }
   }
-  into( "libs/" ) {
-    from "build/reports/qi4j-sdk-runtime-deps.metalink"
-    rename 'qi4j-sdk-runtime-deps.metalink', 'qi4j-sdk-' + version + '-runtime-deps.metalink'
+  into( '.' ) {
+    from generateBinDistGoOfflineHelpers.outputs
   }
 }
 
@@ -536,73 +820,166 @@
     into( "libs/" ) {
       from proj.configurations.archives.artifacts.files
       exclude '**-testsources.jar'
-      exclude '**-javadoc.jar'
       exclude '**/*.asc'
     }
   }
 }
 
-def samplesImage = copySpec {
-  from( "$projectDir/samples" )
-  from( "$projectDir/samples/*/build/docs/javadoc" )
-  into( "samples" )
-  exclude '**/*.iml'
-  exclude '**/build/'     // build output
-}
-
-def tutorialsImage = copySpec {
-  from( "$projectDir/tutorials" )
-  exclude '**/build/'
-  into( "tutorials" )
-  from( "$projectDir/tutorials/*/build/docs/javadoc" )
-  exclude '**/*.iml'
+def binDistNoticesImage = copySpec {
+  from( "$projectDir/LICENSE.txt")
+  from( "$projectDir/src/bin-dist" )
+  into( "." )
 }
 
 def binDistImage = copySpec {
-  into "qi4j-sdk-$version"
+  into "apache-zest-java-$version-bin"
+  with binDistNoticesImage
   with docsImage
   with reportsDistImage
   with runtimeDependenciesListImage
   with libsImage
-  with samplesImage
-  with tutorialsImage
 }
 
-task zipSources( type: Zip, dependsOn: [ buildAll ] ) {
-  baseName = 'qi4j-sdk'
+task zipSources( type: Zip ) {
+  baseName = 'apache-zest-java'
   with srcDistImage
   classifier = 'src'
 }
 
-task tarSources( type: Tar, dependsOn: [ buildAll ] ) {
-  baseName = 'qi4j-sdk'
+task tarSources( type: Tar ) {
+  baseName = 'apache-zest-java'
   with srcDistImage
   compression = Compression.GZIP
   classifier = 'src'
 }
 
-task zipBinaries( type: Zip, dependsOn: [ buildAll ] ) {
-  baseName = 'qi4j-sdk'
+task zipBinaries( type: Zip, dependsOn: buildAll ) {
+  baseName = 'apache-zest-java'
   classifier = 'bin'
   with binDistImage
 }
 
-task tarBinaries( type: Tar, dependsOn: [ buildAll ] ) {
-  baseName = 'qi4j-sdk'
+task tarBinaries( type: Tar, dependsOn: buildAll ) {
+  baseName = 'apache-zest-java'
   classifier = 'bin'
   compression = Compression.GZIP
   with binDistImage
 }
 
+// Checksum distributions
+tasks.withType( Zip ) { task ->
+  task.doLast {
+    ant.checksum file: task.archivePath, algorithm: 'MD5'
+    ant.checksum file: task.archivePath, algorithm: 'SHA-512'
+  }
+}
+tasks.withType( Tar ) { task ->
+  task.doLast {
+    ant.checksum file: task.archivePath, algorithm: 'MD5'
+    ant.checksum file: task.archivePath, algorithm: 'SHA-512'
+  }
+}
+
 artifacts {
   archives zipSources, tarSources, zipBinaries, tarBinaries
 }
 
+signing {
+  required { rootProject.version != '0' && !rootProject.version.contains( 'SNAPSHOT' ) }
+  sign configurations.archives
+}
+signArchives.onlyIf { !rootProject.skipSigning }
+
 task dist( type: Copy, dependsOn: install ) {
+  description "Unpack the binary distribution"
+  group = "distributions"
   with binDistImage
   into "$buildDir/dist"
 }
 
+// Tasks for source and binary distributions checks
+def unpackedSrcDistDir = file( "build/unpacked-distributions/src/apache-zest-java-$version-src" )
+def unpackedBinDistDir = file( "build/unpacked-distributions/bin/apache-zest-java-$version-bin" )
+task unpackSrcDist( type: Copy ) {
+  description "Unpack the source distribution"
+  group = "distributions"
+  with srcDistImage
+  into 'build/unpacked-distributions/src'
+}
+task checkSrcDist( type: GradleBuild, dependsOn: unpackSrcDist ) {
+  description = "Check the source distribution by running the 'check' and 'assemble' tasks inside"
+  group = "distributions"
+  buildFile = "$unpackedSrcDistDir/build.gradle"
+  tasks = [ 'check', 'assemble' ]
+}
+task unpackBinDist( type: Copy, dependsOn: buildAll ) {
+  description "Unpack the binary distribution"
+  group = "distributions"
+  with binDistImage
+  into 'build/unpacked-distributions/bin'
+}
+task checkBinDist_rat( type: org.apache.rat.gradle.RatTask, dependsOn: unpackBinDist ) {
+  description "Check the binary distribution using Apache RAT"
+  group = "distributions"
+  inputDir = unpackedBinDistDir
+  reportDir = file( 'build/reports/rat-bin-dist' )
+  excludes = []
+}
+task checkBinDist_goOfflineGradle( type: GradleBuild, dependsOn: unpackBinDist ) {
+  description "Check the binary distribution Gradle go-offline helper"
+  group = "distributions"
+  def dependenciesDir = new File( unpackedBinDistDir, 'dependencies' )
+  doFirst { dependenciesDir.deleteDir() }
+  buildFile = "$unpackedBinDistDir/go-offline.gradle"
+  tasks = [ 'download' ]
+  doLast {
+    releaseApprovedProjects*.configurations.runtime.allDependencies.findAll({it.name}).each { dep ->
+      def jarArtifactId = dep.name instanceof String ? dep.name : dep.name.last()
+      def jarVersion = dep.version instanceof String ? dep.version : dep.version.last()
+      if( !jarArtifactId.startsWith( 'org.qi4j' ) ) {
+        def jarName = "${jarArtifactId}-${jarVersion}.jar"
+        if( !new File( dependenciesDir, jarName ).exists() ) {
+          throw new GradleException( "Binary distribution go-offline.gradle failed! Missing: $jarName" );
+        }
+      }
+    }
+  }
+}
+task checkBinDist_goOfflineMaven( type: Exec, dependsOn: unpackBinDist ) {
+  description "Check the binary distribution Maven go-offline helper"
+  group = "distributions"
+  onlyIf {
+    def pathDirs = System.getenv( 'PATH' ).split( File.pathSeparator )
+    pathDirs.collect( { new File( it, 'mvn') } ).flatten().findAll( { it.isFile() } )
+  }
+  def dependenciesDir = new File( unpackedBinDistDir, 'dependencies' )
+  doFirst { dependenciesDir.deleteDir() }
+  workingDir unpackedBinDistDir
+  commandLine 'mvn', '-e', '-f', 'go-offline.pom', 'validate'
+  doLast {
+    releaseApprovedProjects*.configurations.runtime.allDependencies.findAll({it.name}).each { dep ->
+      def jarArtifactId = dep.name instanceof String ? dep.name : dep.name.last()
+      def jarVersion = dep.version instanceof String ? dep.version : dep.version.last()
+      if( !jarArtifactId.startsWith( 'org.qi4j' ) ) {
+        def jarName = "${jarArtifactId}-${jarVersion}.jar"
+        if( !new File( dependenciesDir, jarName ).exists() ) {
+          throw new GradleException( "Binary distribution go-offline.pom failed! Missing: $jarName" );
+        }
+      }
+    }
+  }
+}
+task checkBinDist {
+  description "Check the binary distribution"
+  group = "distributions"
+  dependsOn /*checkBinDist_rat,*/ checkBinDist_goOfflineGradle, checkBinDist_goOfflineMaven
+}
+task checkDists {
+  description "Check the souce and binary distributions"
+  group = "distributions"
+  dependsOn checkSrcDist, checkBinDist
+}
+
 task checkReleaseSpec {
   description = "Ensure that no releasable module depend on module(s) that don't fit the release criteria."
   group = 'release'
@@ -642,7 +1019,7 @@
       throw new GradleException( "'version' must be given as a system property to perform a release." )
     }
   }
-  dependsOn checkReleaseSpec, archiveJavadocs, ':org.qi4j.manual:copyWebsite', allprojects*.uploadArchives, dist
+  dependsOn checkReleaseSpec, rat, archiveJavadocs, ':org.qi4j.manual:copyWebsite', allprojects*.uploadArchives, dist
 }
 
 //
@@ -651,7 +1028,7 @@
 // This task should be run by "build master" and the resulting ouput committed to source control.  Its outputs include:
 //  1) /gradlew which is the *NIX shell script for executing builds
 //  2) /gradlew.bat which is the windows bat script for for executing builds
-//  3) /wrapper which is a directory named by the "jarPath" config which contains other needed files.
+//  3) /gradle/wrapper which is a directory named by the "jarPath" config which contains other needed files.
 task wrapper( type: Wrapper ) {
-  gradleVersion = '2.2.1'
+  gradleVersion = '2.5'
 }
diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle
index 139597f..042f3ce 100644
--- a/buildSrc/build.gradle
+++ b/buildSrc/build.gradle
@@ -1,2 +1,18 @@
-
-
+/*
+ * 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.
+ */
diff --git a/buildSrc/src/bin/devstatus.conf b/buildSrc/src/bin/devstatus.conf
index b5b87aa..1ab3f7b 100644
--- a/buildSrc/src/bin/devstatus.conf
+++ b/buildSrc/src/bin/devstatus.conf
@@ -1,3 +1,18 @@
+# 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.
+
 #
 # AsciiDoc Snippet filter configuration file.
 #
diff --git a/buildSrc/src/bin/devstatus.py b/buildSrc/src/bin/devstatus.py
index b127eb0..aa4a106 100755
--- a/buildSrc/src/bin/devstatus.py
+++ b/buildSrc/src/bin/devstatus.py
@@ -1,5 +1,19 @@
 #!/usr/bin/env python
 # -*- mode: Python; coding: utf-8 -*-
+# 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.
 """
 source=ignored
 tag=self-test
diff --git a/buildSrc/src/bin/snippet.conf b/buildSrc/src/bin/snippet.conf
index 95b695c..e0ba039 100644
--- a/buildSrc/src/bin/snippet.conf
+++ b/buildSrc/src/bin/snippet.conf
@@ -1,3 +1,18 @@
+# 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.
+
 #
 # AsciiDoc Snippet filter configuration file.
 #
diff --git a/buildSrc/src/bin/snippet.py b/buildSrc/src/bin/snippet.py
index bd8d537..9cb0bfb 100755
--- a/buildSrc/src/bin/snippet.py
+++ b/buildSrc/src/bin/snippet.py
@@ -1,5 +1,19 @@
 #!/usr/bin/env python
 # -*- mode: Python; coding: utf-8 -*-
+# 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.
 """
 source=ignored
 tag=self-test
diff --git a/buildSrc/src/javadoc/overview.html b/buildSrc/src/javadoc/overview.html
deleted file mode 100644
index 6056527..0000000
--- a/buildSrc/src/javadoc/overview.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<html>
-    <body>
-        <h3>Welcome to the Qi4j SDK Javadoc.</h3>
-        <p>Qi4j is a framework for domain centric application development, including evolved concepts from AOP, DI and DDD.</p>
-        <p><a href="http://qi4j.org" target="_blank">qi4j.org</a></p>
-    </body>
-</html>
diff --git a/buildSrc/src/main/groovy/Xslt.groovy b/buildSrc/src/main/groovy/Xslt.groovy
index a194461..70bd263 100644
--- a/buildSrc/src/main/groovy/Xslt.groovy
+++ b/buildSrc/src/main/groovy/Xslt.groovy
@@ -1,3 +1,22 @@
+/*
+ * 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.
+ */
+
 /**
  *  Gradle plug-in for running a set of one or more
  *  files through an XSLT transform.  A styleSheet
diff --git a/buildSrc/src/main/groovy/org/qi4j/gradle/plugin/Documentation.groovy b/buildSrc/src/main/groovy/org/qi4j/gradle/plugin/Documentation.groovy
index bf2a416..ad8ca04 100644
--- a/buildSrc/src/main/groovy/org/qi4j/gradle/plugin/Documentation.groovy
+++ b/buildSrc/src/main/groovy/org/qi4j/gradle/plugin/Documentation.groovy
@@ -17,94 +17,152 @@
 
 import org.gradle.api.DefaultTask
 import org.gradle.api.tasks.TaskAction
+import org.gradle.api.tasks.Input
+import org.gradle.api.tasks.InputDirectory
+import org.gradle.api.tasks.InputFile
+import org.gradle.api.tasks.InputFiles
+import org.gradle.api.tasks.OutputDirectory
 
-// TODO: use proper project variables for 'src' and other locations
-// TODO: extract out every location into configurable property
 // TODO: try to use dependencies for FOP and execute within the same JVM.
 // TODO: move the bulk of resources into this plugin, instead of sitting in the project.
 class Documentation extends DefaultTask
 {
-  private String docName
+  @Input def String docName
+  @Input def String docType
+  void setDocName( String docName ) { this.docName = docName }
+  void setDocType( String docType ) { this.docType = docType }
 
-  private String docType
+  @InputDirectory def File getCommonResourcesDir() { project.file( 'src/resources' ) }
+  @InputDirectory def File getConfigDir() { project.file( 'src/conf' ) }
+  @InputDirectory def File getDocsDir() { project.file( 'src/docs') }
+  @InputDirectory def File getSrcMainDir() { project.file( 'src/main') }
+  @InputDirectory def File getXslDir() { project.file( 'src/xsl') }
+  @InputDirectory def File getBuildSrcDir() { project.rootProject.file( 'buildSrc/src' ) }
+
+  @InputFiles def getSubProjectsDocsDirs() { project.rootProject.subprojects.collect { p -> p.file( 'src/docs' ) } }
+  @InputFiles def getSubProjectsTestDirs() { project.rootProject.subprojects.collect { p -> p.file( 'src/test' ) } }
+
+  @OutputDirectory def File getOutputDir() { project.file( "${project.buildDir}/docs/${docName}/" ) }
+
+  def File getTempAsciidocDir() { project.file( "${project.buildDir}/tmp-asciidoc" ) }
+  def File getTempDir() { project.file( "${project.buildDir}/tmp/docs/${docName}") }
 
   @TaskAction
   def void generate()
   {
-    def userHome = new File(System.getProperty("user.home"))
-    def snippetDir = new File(userHome, ".asciidoc/filters/snippet").absoluteFile
+    installAsciidocFilters()
+
+    [ outputDir, tempAsciidocDir, tempDir ]*.deleteDir()
+    [ outputDir, tempAsciidocDir, tempDir ]*.mkdirs()
+
+    copySubProjectsDocsResources()
+    generateAsciidocAccordingToReleaseSpecification()
+    generateXDoc()
+    generateChunkedHtml()
+    // generateSingleHtml()
+    // generatePdf()
+  }
+
+  def void installAsciidocFilters()
+  {
+    def userHome = new File( System.getProperty( 'user.home' ) )
+    def snippetDir = new File( userHome, '.asciidoc/filters/snippet' ).absoluteFile
     if( !snippetDir.exists() )
     {
       println "Installing [snippet] into $snippetDir"
       snippetDir.mkdirs()
       project.copy {
-        from "$project.rootDir/buildSrc/src/bin"
+        from "${project.rootDir}/buildSrc/src/bin"
         into snippetDir
         include 'snippet.*'
       }
-      ant.chmod(dir: snippetDir, perm: "755", includes: "snippet.py")
+      ant.chmod( dir: snippetDir, perm: '755', includes: 'snippet.py' )
     }
 
-    def devstatusDir = new File(userHome, ".asciidoc/filters/devstatus").absoluteFile
+    def devstatusDir = new File( userHome, '.asciidoc/filters/devstatus' ).absoluteFile
     if( !devstatusDir.exists() )
     {
       println "Installing [devstatus] into $devstatusDir"
       snippetDir.mkdirs()
       project.copy {
-        from "$project.rootDir/buildSrc/src/bin"
+        from "${project.rootDir}/buildSrc/src/bin"
         into devstatusDir
         include 'devstatus.*'
       }
-      ant.chmod(dir: devstatusDir, perm: "755", includes: "devstatus.py")
+      ant.chmod( dir: devstatusDir, perm: '755', includes: 'devstatus.py' )
     }
-
-    new File(project.buildDir, "docs/$docName".toString()).mkdirs()
-    new File(project.buildDir, "tmp/docs/$docName".toString()).mkdirs()
-
-    copyResources()
-    generateXDoc()
-    generateChunkedHtml()
-    generateSingleHtml()
-    generatePdf()
   }
 
-  def void copyResources()
+  def void copySubProjectsDocsResources()
   {
-    project.parent.subprojects.each { p ->
+    project.rootProject.subprojects.each { p ->
       p.copy {
-        from 'src/docs/resources'
-        into "build/docs/$docName/"
+        from p.file( 'src/docs/resources' )
+        into outputDir
         include '**'
       }
     }
   }
 
+  def void generateAsciidocAccordingToReleaseSpecification()
+  {
+    project.copy {
+      from docsDir
+      into tempAsciidocDir
+      include '**'
+    }
+    if( project.version != '0' && !project.version.contains( 'SNAPSHOT' ) ) {
+      def licenseFile = new File( tempAsciidocDir, 'userguide/libraries.txt' )
+      def extensionsFile = new File( tempAsciidocDir, 'userguide/extensions.txt' )
+      def toolsFile = new File( tempAsciidocDir, 'userguide/tools.txt' )
+      [ licenseFile, extensionsFile, toolsFile ].each { asciidocFile ->
+        def filteredFileContent = ''
+        asciidocFile.readLines().each { line ->
+          if( line.startsWith( 'include::' ) ) {
+            def approved = false
+            project.rootProject.releaseApprovedProjects.collect{it.projectDir}.each { approvedProjectDir ->
+              if( line.contains( "${approvedProjectDir.parentFile.name}/${approvedProjectDir.name}" ) ) {
+                approved = true
+              }
+            }
+            if( approved ) {
+              filteredFileContent += "$line\n"
+            }
+          } else {
+            filteredFileContent += "$line\n"
+          }
+        }
+        asciidocFile.text = filteredFileContent
+      }
+    }
+  }
+
   def void generateXDoc()
   {
     project.exec {
       executable = 'asciidoc'
-      workingDir = ".."
-      def commonResourcesDir = 'manual/src/resources'
-      def asciidocConfigFile = 'manual/src/conf/asciidoc.conf'
-      def docbookConfigFile = 'manual/src/conf/docbook45.conf'
-      def linkimagesConfigFile = 'manual/src/conf/linkedimages.conf'
-      def xdocOutputFile = "manual/build/tmp/docs/$docName/xdoc-temp.xml".toString()
-      def asciiDocFile = "manual/src/docs/$docName/index.txt".toString()
+      workingDir = '..'
+      def commonResourcesPath = relativePath( project.rootDir, commonResourcesDir )
+      def asciidocConfigPath = relativePath( project.rootDir, new File( configDir, 'asciidoc.conf' ) )
+      def docbookConfigPath = relativePath( project.rootDir, new File( configDir, 'docbook45.conf' ) )
+      def linkimagesConfigPath = relativePath( project.rootDir, new File( configDir, 'linkedimages.conf' ) )
+      def xdocOutputPath =  relativePath( project.rootDir, new File( tempDir, 'xdoc-temp.xml' ) )
+      def asciidocIndexPath = relativePath( project.rootDir, new File( tempAsciidocDir, "$docName/index.txt" ) )
       args = [
               '--attribute', 'revnumber=' + project.version,
               '--attribute', 'level1=' + (docType.equals('article') ? 1 : 0),
               '--attribute', 'level2=' + (docType.equals('article') ? 2 : 1),
               '--attribute', 'level3=' + (docType.equals('article') ? 3 : 2),
               '--attribute', 'level4=' + (docType.equals('article') ? 4 : 3),
-              '--attribute', 'importdir=' + commonResourcesDir,
+              '--attribute', 'importdir=' + commonResourcesPath,
               '--backend', 'docbook',
               '--attribute', 'docinfo1',
               '--doctype', docType,
-              '--conf-file=' + asciidocConfigFile,
-              '--conf-file=' + docbookConfigFile,
-              '--conf-file=' + linkimagesConfigFile,
-              '--out-file', xdocOutputFile,
-              asciiDocFile
+              '--conf-file=' + asciidocConfigPath,
+              '--conf-file=' + docbookConfigPath,
+              '--conf-file=' + linkimagesConfigPath,
+              '--out-file', xdocOutputPath,
+              asciidocIndexPath
       ]
     }
   }
@@ -112,25 +170,26 @@
   def void generateChunkedHtml()
   {
     project.copy {
-      from 'src/resources'
-      into "build/docs/$docName/"
+      from commonResourcesDir
+      into outputDir
       include '**'
     }
     project.copy {
-      from "src/docs/$docName/resources"
-      into "build/docs/$docName/"
+      from "$docsDir/$docName/resources"
+      into outputDir
       include '**'
     }
 
     project.exec {
-      String xsltFile = "src/docs/$docName/xsl/chunked.xsl"
+      def xsltFile = "$docsDir/$docName/xsl/chunked.xsl"
+      def outputPath = relativePath( project.projectDir, outputDir ) + '/'
       executable = 'xsltproc'
       args = [
               '--nonet',
               '--noout',
-              '--output', "build/docs/$docName/",
+              '--output', outputPath,
               xsltFile,
-              "build/tmp/docs/$docName/xdoc-temp.xml"
+              "$tempDir/xdoc-temp.xml"
       ]
     }
   }
@@ -139,59 +198,43 @@
   {
     project.exec {
       // XML_CATALOG_FILES=
-      String xsltFile = 'src/xsl/xhtml.xsl'
+      String xsltFile = "$xslDir/xhtml.xsl"
       executable = 'xsltproc'
       args = [
               '--nonet',
               '--noout',
-              '--output', "build/docs/$docName/$docName" + ".html",
+              '--output', "$outputDir/${docName}.html",
               xsltFile,
-              "build/tmp/docs/$docName/xdoc-temp.xml"
+              "$tempDir/xdoc-temp.xml"
       ]
     }
   }
 
   def void generatePdf()
   {
-// $ xsltproc --nonet ../docbook-xsl/fo.xsl article.xml > article.fo
+    // $ xsltproc --nonet ../docbook-xsl/fo.xsl article.xml > article.fo
     // $ fop article.fo article.pdf
-
-    //    project.exec {
-    //      String xsltFile = 'src/xsl/fo.xsl'
-    //      executable = 'xsltproc'
-    //      args = [
-    //              '--nonet',
-    //              '--output', "build/tmp/docs/$docName/$docName"+".fo",
-    //              xsltFile,
-    //              "build/tmp/docs/$docName/xdoc-temp.xml"
-    //      ]
-    //    }
-    //    project.exec {
-    //      executable = 'fop'
-    //      args = [
-    //              "build/tmp/docs/$docName/$docName"+".fo",
-    //              "build/docs/$docName/$docName" + ".pdf"
-    //      ]
-    //    }
+    project.exec {
+      String xsltFile = "$xslDir/fo.xsl"
+      executable = 'xsltproc'
+      args = [
+        '--nonet',
+        '--output', "$tempDir/${docName}.fo",
+        xsltFile,
+        "$tempDir/xdoc-temp.xml"
+      ]
+    }
+    project.exec {
+      executable = 'fop'
+      args = [
+        "$tempDir/${docName}.fo",
+        "$outputDir/${docName}.pdf"
+      ]
+    }
   }
 
-  String getDocName( )
+  def String relativePath( File root, File target )
   {
-    return docName
-  }
-
-  void setDocName( String docName )
-  {
-    this.docName = docName
-  }
-
-  String getDocType( )
-  {
-    return docType
-  }
-
-  void setDocType( String docType )
-  {
-    this.docType = docType
+    new File( root.toURI().relativize( target.toURI() ).toString() ).path
   }
 }
diff --git a/core/.gitignore b/core/.gitignore
deleted file mode 100644
index 71353e4..0000000
--- a/core/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-build/
-*.iml
-out/
diff --git a/core/LICENSE b/core/LICENSE
deleted file mode 100644
index f433b1a..0000000
--- a/core/LICENSE
+++ /dev/null
@@ -1,177 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
diff --git a/core/NOTICE b/core/NOTICE
deleted file mode 100644
index a95f34b..0000000
--- a/core/NOTICE
+++ /dev/null
@@ -1,21 +0,0 @@
-Qi4j Core
-Copyright 2007-2011, The Qi4j Development Team of individuals.
-
-See http://www.qi4j.org/contributors.html for list of of individuals.
-Also see each file for additional information of Copyright claims.
-
-Qi4j is a community aggregated works under Copyright law.
-All parts of the original works at Qi4j is licensed under the
-Apache License ver 2.0 http://www.apache.org/licenses
-
-Below follows a list of binary dependencies and their licenses;
-----------------------------------------------------------------
-
-This module uses ASM, Copyright (c) 2000-2005 INRIA, France Telecom,
-All rights reserved. See licenses/asm.license
-
-This module uses JUnit, under Common Public License 1.0 from the
-http://www.junit.org community. See http://www.junit.org/license
-
-
-END OF NOTICE
\ No newline at end of file
diff --git a/core/api/build.gradle b/core/api/build.gradle
index ccaa0f2..ab89613 100644
--- a/core/api/build.gradle
+++ b/core/api/build.gradle
@@ -1,4 +1,23 @@
-jar { manifest { name = "Qi4j Core API"}}
+/*
+ * 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.
+ */
+
+jar { manifest { name = "Apache Zest™ Core API"}}
 
 dependencies {
 
@@ -10,6 +29,5 @@
   testCompile project( ':org.qi4j.extensions:org.qi4j.extension.valueserialization-orgjson' )
 
   testRuntime project( ':org.qi4j.core:org.qi4j.core.runtime' )
-  testRuntime libraries.slf4j_simple
 
 }
diff --git a/core/api/dev-status.xml b/core/api/dev-status.xml
index 598e7dd..a17ec6f 100644
--- a/core/api/dev-status.xml
+++ b/core/api/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/core/api/src/docs/api.txt b/core/api/src/docs/api.txt
index 4e0256e..e3825b8 100644
--- a/core/api/src/docs/api.txt
+++ b/core/api/src/docs/api.txt
@@ -21,7 +21,7 @@
 source=core/api/dev-status.xml
 --------------
 
-The Qi4j Core API is the primary interface for client application code during the main execution phase, i.e. after the
+The Zest™ Core API is the primary interface for client application code during the main execution phase, i.e. after the
 application has been activated.
 
 include::../../build/docs/buildinfo/artifact.txt[]
diff --git a/core/api/src/docs/application.txt b/core/api/src/docs/application.txt
index e04653f..bf97b53 100644
--- a/core/api/src/docs/application.txt
+++ b/core/api/src/docs/application.txt
@@ -15,13 +15,13 @@
 
 [[core-api-application,Application]]
 = Application =
-There is one and only one Application instance per Qi4j runtime instance. But there is nothing preventing code to
-create additional Qi4j Runtime instances inside the same JVM. However, these runtimes are isolated from each other.
+There is one and only one Application instance per Zest™ runtime instance. But there is nothing preventing code to
+create additional Zest™ Runtime instances inside the same JVM. However, these runtimes are isolated from each other.
 
 The main purpose of the Application structure artifact is to keep everything in the same box, and allowing us to
 navigate the Structure. So, from a client code perspective, the Application is of no use, other than being part of
-bring Qi4j to life. Qi4j doesn't start automatically and can be run in most environments, by requiring that the
-bootstrapping of Qi4j is done by client code. We call this the Bootstrap Phase. The code in the custom bootstrapper
+bring Zest™ to life. Zest™ doesn't start automatically and can be run in most environments, by requiring that the
+bootstrapping of Zest™ is done by client code. We call this the Bootstrap Phase. The code in the custom bootstrapper
 will need to access additional Jars from the regular domain code, and we strongly recommend that you make this
 separation in your project as well.
 
@@ -49,7 +49,7 @@
 
     * Create, obtain or lookup Assemblers.
     * Establish the application structures.
-    * Create a Qi4j Runtime instance.
+    * Create a Zest™ Runtime instance.
     * Create an ApplicationAssemblyFactory.
     * Create an ApplicationFactory.
     * Call ApplicationFactory.newApplication() to create an ApplicationContext.
@@ -72,7 +72,7 @@
 = Single Module Layering =
 
 Behind the scenes of the SingletonAssembler a little bit more elaborate bootstrap sequence is happening. The code below
-shows what is the actual required sequence to start up Qi4j.
+shows what is the actual required sequence to start up Zest.
 
 [snippet,java]
 -----------
@@ -83,7 +83,7 @@
 In the above example we are only creating an Application with a single Layer and a single Module in that Layer. This is
 derived from the fact that the factory.newApplicationAssembly() method takes a single Assembler argument.
 
-The Assembler.assemble( ModuleAssembly assembly ) method is called when the Qi4j Runtime needs to populate the
+The Assembler.assemble( ModuleAssembly assembly ) method is called when the Zest™ Runtime needs to populate the
 ModuleAssembly with its Composites, Objects, Services and other information.
 
 == "Pancake" Layering ==
diff --git a/core/api/src/docs/association.txt b/core/api/src/docs/association.txt
index e69de29..fc7aac6 100644
--- a/core/api/src/docs/association.txt
+++ b/core/api/src/docs/association.txt
@@ -0,0 +1,18 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
diff --git a/core/api/src/docs/composition.txt b/core/api/src/docs/composition.txt
index fecece1..467fd7a 100644
--- a/core/api/src/docs/composition.txt
+++ b/core/api/src/docs/composition.txt
@@ -20,14 +20,14 @@
 1. the ability to assemble (compose) objects from smaller pieces, called Fragments.
 2. the construction of applications by assembling Composites into Modules and Modules into Layers.
 
-In Qi4j, we use the term Assembly for the second case of composition. See separate chapter.
+In Zest, we use the term Assembly for the second case of composition. See separate chapter.
 
 Composition will allow library authors a new level of flexibility in how functionality is provided to client code. More
 on that later.
 
 == Fragments ==
 
-There are 4 types of Fragments in Qi4j;
+There are 4 types of Fragments in Zest;
 
     * <<core-api-mixin>> - The state carrying part of a Composite.
     * <<core-api-constraint>> - Rules for in and out arguments, typically used for validation.
@@ -47,14 +47,14 @@
     * Service - Service is injectable to other composites and java objects. They are not persistable, but if
       referenced from an Entity or Value, a new reference to the Service will be injected when the Entity/Value is
       deserialized. Services are singletons. There are 'hosted' and 'imported' Services. The 'hosted' Service has
-      Configuration and its life cycle controlled by the Qi4j runtime, whereas the 'imported' Services are external
+      Configuration and its life cycle controlled by the Zest™ runtime, whereas the 'imported' Services are external
       references.
     * Transient - Short-lived composites that are not persistable. Equals/hashCode/toString are forwarded to the
       Mixin Type declaring those methods explicitly.
 
-In versions of Qi4j prior to 2.0, composite types had to extend one of these 4 meta types, but in 2.0 and later, the
+In versions of Zest™ prior to 2.0 (then Qi4j), composite types had to extend one of these 4 meta types, but in 2.0 and later, the
 meta type interface is added dynamically during <<core-bootstrap-assembly>>.
-We can therefor get rid of a lot of additional types, and use Qi4j-free interfaces directly;
+We can therefor get rid of a lot of additional types, and use Zest-free interfaces directly;
 
 [snippet,java]
 -----------
diff --git a/core/api/src/docs/concern.txt b/core/api/src/docs/concern.txt
index 6a941fb..3d6e36f 100644
--- a/core/api/src/docs/concern.txt
+++ b/core/api/src/docs/concern.txt
@@ -34,12 +34,12 @@
 ensure that the state in the entire composite is valid), coordinating services, handling events and much more.
 
 Typed Concerns doesn't have to implement all the methods in the Mixin Type. By making the class abstract and only
-implementing the methods of interest, Qi4j will subclass the concern (otherwise not valid for the JVM), but the generated
-methods will never be invoked.
+implementing the methods of interest, Zest™ runtime will subclass the concern (otherwise not valid for the JVM), but the
+generated methods will never be invoked.
 
 == Generic Concern ==
 In classic AOP, all advice are effectively _generic_. There is no type information in the advice implementation and the
-pointcut can be defined anywhere in the code, and the implementation uses proxy InvocationHandlers. Qi4j supports this
+pointcut can be defined anywhere in the code, and the implementation uses proxy InvocationHandlers. Zest™ supports this
 construct as well, and we call it *Generic Concern*.
 
 Generic Concerns will be added to all methods that the AppliesToFilter evaluates to true. By default, that is all methods.
diff --git a/core/api/src/docs/configuration.txt b/core/api/src/docs/configuration.txt
index 8483b52..75ce54d 100644
--- a/core/api/src/docs/configuration.txt
+++ b/core/api/src/docs/configuration.txt
@@ -15,14 +15,14 @@
 
 [[core-api-service-configuration,Service Configuration]]
 = Service Configuration =
-Configuration in Qi4j is for Qi4j <<core-api-service>> only. The Configuration is stored in a visible Entity
+Configuration in Zest™ is for Zest™ <<core-api-service>> only. The Configuration is stored in a visible Entity
 Store and is therefor runtime modifiable and not static in properties or XML files as in most other dependency
 injection frameworks.
 
 The Configuration system itself will handle all the details with interfacing with reading and writing the configuration.
 The normal UnitOfWork management is used, but handled internally by the configuration system.
 
-In Qi4j, Configuration are strongly typed and refactoring-friendly. Configuration is read from the entity store, but if
+In Zest, Configuration are strongly typed and refactoring-friendly. Configuration is read from the entity store, but if
 it can not be found, then it will try to bootstrap it from a properties file, with the same name as the
 ServiceDescriptor.identifiedBy(), which is set during <<core-bootstrap-assembly>> and defaults to the fully qualified
 classname of the <<core-api-service>> type.
diff --git a/core/api/src/docs/dependency-injection.txt b/core/api/src/docs/dependency-injection.txt
index e69de29..fc7aac6 100644
--- a/core/api/src/docs/dependency-injection.txt
+++ b/core/api/src/docs/dependency-injection.txt
@@ -0,0 +1,18 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
diff --git a/core/api/src/docs/entitycomposite.txt b/core/api/src/docs/entitycomposite.txt
index e8b06a9..b445f4b 100644
--- a/core/api/src/docs/entitycomposite.txt
+++ b/core/api/src/docs/entitycomposite.txt
@@ -22,7 +22,7 @@
 creating objects that survives over long periods of time is a difficult one.
 
 Eric Evans points out in his book that Entities is a very definite and distinct concept that needs to be handled
-explicitly. Composite Oriented Programming in general, and Qi4j in particular, takes this point very seriously and
+explicitly. Composite Oriented Programming in general, and Zest™ in particular, takes this point very seriously and
 makes Entities a central part of the whole system. And likewise, we are convinced that it is not possible to develop
 domain-knowledge-rich applications without a conscious and well-defined strategy on Entities. So, instead of spending
 endless hours trying to get Hibernate mapping to do the right thing, we introduce a Composite meta type called
diff --git a/core/api/src/docs/indexing.txt b/core/api/src/docs/indexing.txt
index e69de29..fc7aac6 100644
--- a/core/api/src/docs/indexing.txt
+++ b/core/api/src/docs/indexing.txt
@@ -0,0 +1,18 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
diff --git a/core/api/src/docs/metrics.txt b/core/api/src/docs/metrics.txt
index e116d39..65f80a7 100644
--- a/core/api/src/docs/metrics.txt
+++ b/core/api/src/docs/metrics.txt
@@ -15,7 +15,7 @@
 
 [[core-api-metrics, Metrics API]]
 = Metrics API =
-The Qi4j platform defines an advanced Metrics SPI to capture runtime metrics of Qi4j's internals as well be used by
+The Zest™ platform defines an advanced Metrics SPI to capture runtime metrics of Zest's internals as well be used by
 application code (via this API) to provide production metrics for operations personnel, ensuring healthy state of
 the applications.
 
@@ -25,7 +25,7 @@
 factory for each component type, to allow for additional components to be created in the future without breaking
 compatibility in the existing implementations.
 
-The MetricsProvider is a standard Qi4j Service and simply acquired via the @Service annotation on a field or
+The MetricsProvider is a standard Zest™ Service and simply acquired via the @Service annotation on a field or
 constructor argument.
 
 [snippet,java]
diff --git a/core/api/src/docs/mixin.txt b/core/api/src/docs/mixin.txt
index d5cbb89..625f894 100644
--- a/core/api/src/docs/mixin.txt
+++ b/core/api/src/docs/mixin.txt
@@ -122,16 +122,16 @@
 tag=partial
 -----------
 
-Above the SpeedMixin only implements the accelerate() method, and Qi4j will only map that method to this mixin. The
+Above the SpeedMixin only implements the accelerate() method, and Zest™ will only map that method to this mixin. The
 other method of the SpeedLocation interface is not satisfied as the example is written and will generate a runtime
 exception.
 
 == Private Mixins ==
-Public mixins expose their methods in the composite interface, and this is not always desirable. Qi4j supports
+Public mixins expose their methods in the composite interface, and this is not always desirable. Zest™ supports
 _Private Mixins_, which are only visible within the composite itself. That means that other fragments in the composite
 can see/use it, but it is not visible to the clients of the composite.
 
-Private Mixins are handled automatically. When Qi4j detects a @This annotation referring to a type that is not defined
+Private Mixins are handled automatically. When Zest™ detects a +@This+ annotation referring to a type that is not defined
 in the Composite interface, then that is a Private Mixin. The Mixin implementation class, however, must exist in the
 list of Mixins in the @Mixins annotation. But often, the Private Mixin only list internal Property methods in the Mixin
 Type, which will be satisfied by the standard PropertyMixin and hence always available.
@@ -172,7 +172,7 @@
 and sometimes Generic Mixin implementations are "last resort".
 
 Experience shows that Generic Mixin implementations are rare, and should only be used in extreme cases. They are
-less frequent than Generic Concern or Generic SideEffect implementations, but inside the Qi4j API are a couple of
+less frequent than Generic Concern or Generic SideEffect implementations, but inside the Zest™ API are a couple of
 Generic Mixin implementations that are always present to make the life of the developer easier, such as PropertyMixin,
 AssociationMixin, ManyAssociationMixin, NoopMixin. The first 3 are declared on the Composite and EntityComposite
 interfaces and automatically included if needed. They also serve as excellent example of what they can be used for.
@@ -193,6 +193,6 @@
 
 Typed Mixin implementations are much preferred in general business logic, as they will be first-class citizens of
 the IDE as well, for navigation, find usage, refactoring and many other common tasks. This is one of the main
-advantages of the Qi4j way of doing AOP compared to AspectJ et al, where "weaving" is something bolted onto an
+advantages of the Zest™ way of doing AOP compared to AspectJ et al, where "weaving" is something bolted onto an
 application's classes via regular expressions and known naming conventions, which can change in an instance by a
 developer being unaware of which PointCuts applies to his code.
diff --git a/core/api/src/docs/property.txt b/core/api/src/docs/property.txt
index e69de29..fc7aac6 100644
--- a/core/api/src/docs/property.txt
+++ b/core/api/src/docs/property.txt
@@ -0,0 +1,18 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
diff --git a/core/api/src/docs/query.txt b/core/api/src/docs/query.txt
index e69de29..fc7aac6 100644
--- a/core/api/src/docs/query.txt
+++ b/core/api/src/docs/query.txt
@@ -0,0 +1,18 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
diff --git a/core/api/src/docs/reference/ref-api.txt b/core/api/src/docs/reference/ref-api.txt
index 52458a5..eec16ce 100644
--- a/core/api/src/docs/reference/ref-api.txt
+++ b/core/api/src/docs/reference/ref-api.txt
@@ -14,10 +14,10 @@
 //////////////////////
 
 [[ref-core-api, Core API]]
-= Qi4j Core API =
+= Zest™ Core API =
 
-The Qi4j Core API is main API that Qi4j developers interact with. In fact, if you need to use classes/interfaces
-in the Qi4j Core SPI or Qi4j Core Runtime, then please contact the Qi4j Community and explain your use-case.
+The Zest™ Core API is main API that Zest™ developers interact with. In fact, if you need to use classes/interfaces
+in the Zest™ Core SPI or Zest™ Core Runtime, then please contact the Zest™ Community and explain your use-case.
 
 The Core API is strictly layered, with no _spaghetti_ cross packages. The package list is fairly long, and
 we will look at each one in detail further down.
diff --git a/core/api/src/docs/servicecomposite.txt b/core/api/src/docs/servicecomposite.txt
index 4a870d1..0736d90 100644
--- a/core/api/src/docs/servicecomposite.txt
+++ b/core/api/src/docs/servicecomposite.txt
@@ -16,7 +16,7 @@
 [[core-api-service,ServiceComposite]]
 = Service Composite =
 Any service added, via the ModuleAssembly.addServices(), ModuleAssembly.services() and ModuleAssembly.importServices()
-methods, will have the ServiceComposite meta type added to it. In Qi4j, when we speak of _Services_ we mean instances
+methods, will have the ServiceComposite meta type added to it. In Zest, when we speak of _Services_ we mean instances
 of _ServiceComposite_.
 
 Most programmers are familiar with the term "Service", and after the failure of Object Oriented Programming's promise
@@ -24,8 +24,8 @@
 decoupling and re-use was to make the objects into data containers and deploy services that acted upon those data
 containers. Very much what functions did on structs back in the C and Pascal days.
 
-Qi4j will bring a lot of the behavior back to the Composite itself, but we still need Services for cross-composite
-functionality. The Qi4j Service model is fairly simple, yet powerful and flexible enough to accommodate most
+Zest™ will bring a lot of the behavior back to the Composite itself, but we still need Services for cross-composite
+functionality. The Zest™ Service model is fairly simple, yet powerful and flexible enough to accommodate most
 service-oriented patterns and ability to integrate well with external systems whether they are in-JVM or remote,
 such as Spring, OSGi, WS-*, Rest and others.
 
@@ -37,7 +37,7 @@
     * It has an optional Configuration.
 
 
-_Services_ in Qi4j are _singletons_, one instance per definition. That means that there may exist multiple instances
+_Services_ in Zest™ are _singletons_, one instance per definition. That means that there may exist multiple instances
 of the same service type, but they can not be created on the fly in runtime, but has to be explicitly defined during
 <<core-bootstrap-assembly>>.
 
@@ -46,7 +46,7 @@
 need to declare/call the instantiateOnStartup() method on the _ServiceDescriptor_ during the bootstrap.
 
 == Service Configuration ==
-The configuration for a service is well supported in Qi4j. See the <<core-api-service-configuration>> chapter for details.
+The configuration for a service is well supported in Zest. See the <<core-api-service-configuration>> chapter for details.
 
 == Service Activation ==
 Services are activated (injected and instantiated) either on application start-up, or upon first use. This is controlled
diff --git a/core/api/src/docs/structure.txt b/core/api/src/docs/structure.txt
index 1ab7687..ac4d81e 100644
--- a/core/api/src/docs/structure.txt
+++ b/core/api/src/docs/structure.txt
@@ -15,17 +15,17 @@
 
 [[core-api-structure,Structure]]
 = Structure =
-Qi4j promotes a conventional view of application structure, that computer science has been using for decades.
+Zest™ promotes a conventional view of application structure, that computer science has been using for decades.
 
 The definition is as follows;
 
-    * One Application per Qi4j runtime instance.
+    * One Application per Zest™ runtime instance.
     * One or more Layers per Application.
     * Zero, one or more Modules per Layer.
     * Zero, one or more Assemblies per Module.
 
 The principle of this Structure is to assist the programmer to create well modularized applications, that are easily
-extended and maintained. Qi4j will restrict access between Modules, so that code can only reach Composites and Objects
+extended and maintained. Zest™ will restrict access between Modules, so that code can only reach Composites and Objects
 in Modules (including itself) of the same or lower Layers.
 
 Each Layer has to be declared which lower Layer(s) it uses, and it is not allowed that a lower Layer uses a higher
@@ -33,20 +33,20 @@
 
 [[core-api-application,Application]]
 = Application =
-Every Qi4j runtime has _one and only one_ Application in it. It is possible to run multiple Qi4j runtimes in the same
-JVM, and it is even possible to embed a Qi4j runtime within a Qi4j Application, but there can only be one Application
-in a Qi4j runtime.
+Every Zest™ runtime has _one and only one_ Application in it. It is possible to run multiple Zest™ runtimes in the same
+JVM, and it is even possible to embed a Zest™ runtime within a Zest™ Application, but there can only be one Application
+in a Zest™ runtime.
 
 An Application is then broken into layers and modules are placed within those layers. Composites are placed within
-modules. This forms the Application Structure and is enforced by the Qi4j runtime.
+modules. This forms the Application Structure and is enforced by the Zest™ runtime.
 
 [[core-api-layer,Layer]]
 = Layer =
-A Qi4j Application must consist of at least one layer. More layers are common, often dividing the application along the
+A Zest™ Application must consist of at least one layer. More layers are common, often dividing the application along the
 common architectural diagrams used on whiteboards, perhaps with a UI layer at the top, followed by a service or application
 layer, then with a domain layer and finally some persistence layer at the bottom.
 
-Qi4j enforces this layering by requiring the <<core-bootstrap-assembly>> to declare which layer uses which other layer. And
+Zest™ enforces this layering by requiring the <<core-bootstrap-assembly>> to declare which layer uses which other layer. And
 <<core-api-visibility>> rules define that layers below can not locate composites in layers above. Also, defining that
 "Layer1 uses Layer2" and "Layer2 uses Layer3" does NOT imply that Layer1 has <<core-api-visibility>> to Layer3. If that
 is wanted, then it must be declared explicitly.
@@ -60,7 +60,7 @@
     * Composites from Modules in the same Layer, with Visibility set to Visibility.layer
     * Composites from Modules in Layers below, with Visibility set to Visibility.application
 
-Modules contains a lot of the Qi4j infrastructure, which are the enforcers of these wise modularization principles.
+Modules contains a lot of the Zest™ infrastructure, which are the enforcers of these wise modularization principles.
 
 It is not possible to modify the Modules, their resolution nor binding in any way after the application starts.
 
diff --git a/core/api/src/docs/type-lookup.txt b/core/api/src/docs/type-lookup.txt
index 2e84167..2340fab 100644
--- a/core/api/src/docs/type-lookup.txt
+++ b/core/api/src/docs/type-lookup.txt
@@ -1,10 +1,29 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[core-api-type-lookup,Composite Types Lookup]]
 = Composite Types Lookup =
 
 Composite Types Lookup can occurs when you explicitely lookup for a Composite by Type
 (ex. ServiceFinder.findService(..) methods), when you ask for an injection or when you create a new composite instance.
 
-All theses type lookup start from a Module, are lazy, cached and obey the Qi4j Visibility rules. Type Lookup works
+All theses type lookup start from a Module, are lazy, cached and obey the Zest™ Visibility rules. Type Lookup works
 equally accross Composite Types with some subtle differences when it comes to Services and Entities.
 
 
diff --git a/core/api/src/docs/unitofwork.txt b/core/api/src/docs/unitofwork.txt
index 04e4f26..d8ad3bc 100644
--- a/core/api/src/docs/unitofwork.txt
+++ b/core/api/src/docs/unitofwork.txt
@@ -19,7 +19,7 @@
 to other threads until the UnitOfWork is completed. It is also possible to discard these operations, as if they were
 never executed.
 
-NOTE: UnitOfWork has many similarities with the Transaction concept used with RDBMSes. But since Qi4j introduced several deviations to the common definitions of Transactions, we chose to use a different term.
+NOTE: UnitOfWork has many similarities with the Transaction concept used with RDBMSes. But since Zest™ introduced several deviations to the common definitions of Transactions, we chose to use a different term.
 
 There are several key characteristics of UnitOfWork;
 
@@ -44,5 +44,5 @@
 <<core-api-layer>>)
 
 Since it is very common to have all, or nearly all, methods in the _transaction boundary_ to handle the creation and
-completion, possibly with retry, in the same class, module or even layer, Qi4j provides annotations to easily declare
+completion, possibly with retry, in the same class, module or even layer, Zest™ provides annotations to easily declare
 UnitOfWork concern: @UnitOfWorkPropagation, @UnitOfWorkDiscardOn and @UnitOfWorkRetry
diff --git a/core/api/src/docs/valuecomposite.txt b/core/api/src/docs/valuecomposite.txt
index cc7166e..7f06ec7 100644
--- a/core/api/src/docs/valuecomposite.txt
+++ b/core/api/src/docs/valuecomposite.txt
@@ -21,7 +21,7 @@
 the value exists or it doesn't, no need for synchronization. Values are typically very easy to test and very robust to
 refactoring.
 
-Qi4j defines values as a primary meta type through the ValueComposite, as we think the benefits of values are great.
+Zest™ defines values as a primary meta type through the ValueComposite, as we think the benefits of values are great.
 The ValueComposite is very light-weight compared to the EntityComposite, and its value can still be persisted as part
 of an EntityComposite via a Property.
 
diff --git a/core/api/src/main/java/org/qi4j/api/Qi4j.java b/core/api/src/main/java/org/qi4j/api/Qi4j.java
index 317153c..cfd8a89 100644
--- a/core/api/src/main/java/org/qi4j/api/Qi4j.java
+++ b/core/api/src/main/java/org/qi4j/api/Qi4j.java
@@ -25,6 +25,7 @@
 import org.qi4j.api.composite.ModelDescriptor;
 import org.qi4j.api.composite.TransientDescriptor;
 import org.qi4j.api.entity.EntityDescriptor;
+import org.qi4j.api.entity.Identity;
 import org.qi4j.api.property.Property;
 import org.qi4j.api.property.PropertyDescriptor;
 import org.qi4j.api.service.ServiceDescriptor;
@@ -33,7 +34,7 @@
 import org.qi4j.functional.Function;
 
 /**
- * Encapsulation of the Qi4j API.
+ * Encapsulation of the Zest API.
  */
 public interface Qi4j
 {
@@ -42,8 +43,9 @@
      * then that reference must be dereferenced using this method
      * before handing it out for others to use.
      *
-     * @param <T> Parameterized type of the Composite
+     * @param <T>       Parameterized type of the Composite
      * @param composite instance reference injected in Modified using @This
+     *
      * @return the dereferenced Composite
      */
     <T> T dereference( T composite );
@@ -53,6 +55,7 @@
      *
      * @param compositeOrUow The Composite (Service, Value, Entity or Transient) or UnitOfWork to lookup the Module it
      *                       belongs to.
+     *
      * @return The Module instance where the Composite or UnitOfWork belongs to.
      */
     Module moduleOf( Object compositeOrUow );
@@ -62,6 +65,7 @@
      *
      * @param compositeOrServiceReference The Composite (Service, Value, Entity or Transient) for which to lookup the
      *                                    ModelDescriptor
+     *
      * @return The ModelDescriptor of the Composite
      */
     ModelDescriptor modelDescriptorFor( Object compositeOrServiceReference );
@@ -71,6 +75,7 @@
      *
      * @param compositeOrServiceReference The Composite (Service, Value, Entity or Transient) for which to lookup the
      *                                    CompositeDescriptor
+     *
      * @return The CompositeDescriptor of the Composite
      */
     CompositeDescriptor compositeDescriptorFor( Object compositeOrServiceReference );
@@ -79,6 +84,7 @@
      * Returns the TransientDescriptor of the TransientComposite.
      *
      * @param transsient The TransientComposite for which to lookup the TransientDescriptor
+     *
      * @return The TransientDescriptor of the TransientComposite
      */
     TransientDescriptor transientDescriptorFor( Object transsient );
@@ -87,6 +93,7 @@
      * Returns the EntityDescriptor of the EntityComposite.
      *
      * @param entity The EntityComposite for which to lookup the EntityDescriptor
+     *
      * @return The EntityDescriptor of the EntityComposite
      */
     EntityDescriptor entityDescriptorFor( Object entity );
@@ -95,6 +102,7 @@
      * Returns the ValueDescriptor of the ValueComposite.
      *
      * @param value The ValueComposite for which to lookup the ValueDescriptor
+     *
      * @return The ValueDescriptor of the ValueComposite
      */
     ValueDescriptor valueDescriptorFor( Object value );
@@ -103,6 +111,7 @@
      * Returns the ServiceDescriptor of the ServiceComposite.
      *
      * @param service The ServiceComposite for which to lookup the ServiceDescriptor
+     *
      * @return The ServiceDescriptor of the ServiceComposite
      */
     ServiceDescriptor serviceDescriptorFor( Object service );
@@ -111,6 +120,7 @@
      * Returns the PropertyDescriptor of the Property.
      *
      * @param property The Property for which to lookup the PropertyDescriptor
+     *
      * @return The PropertyDescriptor of the Property
      */
     PropertyDescriptor propertyDescriptorFor( Property<?> property );
@@ -119,6 +129,7 @@
      * Returns the AssociationDescriptor of the Association.
      *
      * @param association The Association for which to lookup the AssociationDescriptor
+     *
      * @return The AssociationDescriptor of the Association
      */
     AssociationDescriptor associationDescriptorFor( AbstractAssociation association );
diff --git a/core/api/src/main/java/org/qi4j/api/activation/Activation.java b/core/api/src/main/java/org/qi4j/api/activation/Activation.java
index 5b413dc..32f26e4 100644
--- a/core/api/src/main/java/org/qi4j/api/activation/Activation.java
+++ b/core/api/src/main/java/org/qi4j/api/activation/Activation.java
@@ -18,7 +18,7 @@
 /**
  * Interface used by Structure elements and Services that can be activated and passivated.
  * <p>Application and Layer expose this interface so you can activate and passivate them.</p>
- * <p>Module and ServiceComposite activation/passivation is handled by the Qi4j runtime.</p>
+ * <p>Module and ServiceComposite activation/passivation is handled by the Zest runtime.</p>
  */
 public interface Activation
 {
diff --git a/core/api/src/main/java/org/qi4j/api/activation/ActivationEvent.java b/core/api/src/main/java/org/qi4j/api/activation/ActivationEvent.java
index e3fdf70..1852251 100644
--- a/core/api/src/main/java/org/qi4j/api/activation/ActivationEvent.java
+++ b/core/api/src/main/java/org/qi4j/api/activation/ActivationEvent.java
@@ -15,7 +15,7 @@
 package org.qi4j.api.activation;
 
 /**
- * ActivationEvents are fired during activation and passivation of instances in Qi4j.
+ * ActivationEvents are fired during activation and passivation of instances in Zest.
  */
 public final class ActivationEvent
 {
diff --git a/core/api/src/main/java/org/qi4j/api/activation/ApplicationPassivationThread.java b/core/api/src/main/java/org/qi4j/api/activation/ApplicationPassivationThread.java
index facec4f..62b1f67 100644
--- a/core/api/src/main/java/org/qi4j/api/activation/ApplicationPassivationThread.java
+++ b/core/api/src/main/java/org/qi4j/api/activation/ApplicationPassivationThread.java
@@ -18,8 +18,9 @@
 package org.qi4j.api.activation;
 
 import java.io.PrintStream;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import org.qi4j.api.structure.Application;
-import org.slf4j.Logger;
 
 /**
  * Application Passivation Thread to use as a Shutdown Hook.
@@ -92,7 +93,7 @@
                 String message = application.name() + " " + ex.getMessage();
                 if( logger != null )
                 {
-                    logger.error( message, ex );
+                    logger.log( Level.SEVERE, message, ex );
                 }
                 else if( output != null )
                 {
@@ -101,8 +102,7 @@
                 }
                 else
                 {
-                    System.err.println( message );
-                    ex.printStackTrace( System.err );
+                    ex.printStackTrace();
                 }
             }
         }
diff --git a/core/api/src/main/java/org/qi4j/api/activation/package.html b/core/api/src/main/java/org/qi4j/api/activation/package.html
index fc0c1c5..47b333a 100644
--- a/core/api/src/main/java/org/qi4j/api/activation/package.html
+++ b/core/api/src/main/java/org/qi4j/api/activation/package.html
@@ -1,8 +1,24 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Activation API.</h2>
         <p>
-            The Activation API package contains types used by client code to integrate with the Qi4j Runtime activation
+            The Activation API package contains types used by client code to integrate with the Zest™ Runtime activation
             mechanism. In assembly, client code can easily listen to Structure (Application, Layers and Modules) and
             Services activation events, or, declare Structure and Service Activators.
         </p>
diff --git a/core/api/src/main/java/org/qi4j/api/association/Association.java b/core/api/src/main/java/org/qi4j/api/association/Association.java
index f262a8c..acd406f 100644
--- a/core/api/src/main/java/org/qi4j/api/association/Association.java
+++ b/core/api/src/main/java/org/qi4j/api/association/Association.java
@@ -14,6 +14,8 @@
 
 package org.qi4j.api.association;
 
+import org.qi4j.api.entity.EntityReference;
+
 /**
  * Association to a single EntityComposite.
  */
@@ -36,4 +38,9 @@
      */
     void set( T associated )
         throws IllegalArgumentException, IllegalStateException;
+
+    /**
+     * @return the the reference of the associated entity.
+     */
+    EntityReference reference();
 }
diff --git a/core/api/src/main/java/org/qi4j/api/association/AssociationWrapper.java b/core/api/src/main/java/org/qi4j/api/association/AssociationWrapper.java
index 4e907de..68777b3 100644
--- a/core/api/src/main/java/org/qi4j/api/association/AssociationWrapper.java
+++ b/core/api/src/main/java/org/qi4j/api/association/AssociationWrapper.java
@@ -1,8 +1,28 @@
+/*
+ * 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.qi4j.api.association;
 
+import org.qi4j.api.entity.EntityReference;
+
 /**
  * If you want to catch getting and setting association, then create a GenericConcern
- * that wraps the Qi4j-supplied Association instance with AssociationWrappers. Override
+ * that wraps the Zest-supplied Association instance with AssociationWrappers. Override
  * get() and/or set() to perform your custom code.
  */
 public class AssociationWrapper
@@ -34,6 +54,12 @@
     }
 
     @Override
+    public EntityReference reference()
+    {
+        return next.reference();
+    }
+
+    @Override
     public int hashCode()
     {
         return next.hashCode();
diff --git a/core/api/src/main/java/org/qi4j/api/association/ManyAssociation.java b/core/api/src/main/java/org/qi4j/api/association/ManyAssociation.java
index 707d53a..37d7211 100644
--- a/core/api/src/main/java/org/qi4j/api/association/ManyAssociation.java
+++ b/core/api/src/main/java/org/qi4j/api/association/ManyAssociation.java
@@ -16,12 +16,17 @@
 
 import java.util.List;
 import java.util.Set;
+import org.qi4j.api.entity.EntityReference;
 
 /**
  * Association to a collection of entities.
  */
 public interface ManyAssociation<T> extends Iterable<T>, AbstractAssociation
 {
+    /**
+     * Returns the number of references in this association.
+     * @return the number of references in this association.
+     */
     int count();
 
     boolean contains( T entity );
@@ -37,4 +42,10 @@
     List<T> toList();
 
     Set<T> toSet();
+
+    /**
+     * Returns an unmodifiable Iterable of the references to the associated entities.
+     * @return the references to the associated entities.
+     */
+    Iterable<EntityReference> references();
 }
diff --git a/core/api/src/main/java/org/qi4j/api/association/ManyAssociationWrapper.java b/core/api/src/main/java/org/qi4j/api/association/ManyAssociationWrapper.java
index 748af83..aee7804 100644
--- a/core/api/src/main/java/org/qi4j/api/association/ManyAssociationWrapper.java
+++ b/core/api/src/main/java/org/qi4j/api/association/ManyAssociationWrapper.java
@@ -1,12 +1,31 @@
+/*
+ * 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.qi4j.api.association;
 
 import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
+import org.qi4j.api.entity.EntityReference;
 
 /**
  * If you want to catch calls to ManyAssociations, then create a GenericConcern
- * that wraps the Qi4j-supplied ManyAssociation instance with ManyAssociationWrappers. Override
+ * that wraps the Zest-supplied ManyAssociation instance with ManyAssociationWrappers. Override
  * methods to perform your custom code.
  */
 public class ManyAssociationWrapper
@@ -73,6 +92,12 @@
     }
 
     @Override
+    public Iterable<EntityReference> references()
+    {
+        return next.references();
+    }
+
+    @Override
     public Iterator<Object> iterator()
     {
         return next.iterator();
diff --git a/core/api/src/main/java/org/qi4j/api/association/NamedAssociation.java b/core/api/src/main/java/org/qi4j/api/association/NamedAssociation.java
index e8abe32..61c9c9a 100644
--- a/core/api/src/main/java/org/qi4j/api/association/NamedAssociation.java
+++ b/core/api/src/main/java/org/qi4j/api/association/NamedAssociation.java
@@ -19,6 +19,7 @@
 package org.qi4j.api.association;
 
 import java.util.Map;
+import org.qi4j.api.entity.EntityReference;
 
 /**
  * Association to named Entities.
@@ -75,4 +76,16 @@
      */
     Map<String, T> toMap();
 
+    /**
+     * Returns an unmodifiable Iterable of the references to the associated entities.
+     * @return the references to the associated entities.
+     */
+    Iterable<EntityReference> references();
+
+    /** Returns the EntityReference for the Association with the given name.
+     *
+     * @param name The name of the association to return the EntityReference for
+     * @return The EntityReference of the association.
+     */
+    EntityReference referenceOf( String name );
 }
diff --git a/core/api/src/main/java/org/qi4j/api/association/NamedAssociationWrapper.java b/core/api/src/main/java/org/qi4j/api/association/NamedAssociationWrapper.java
index 581948e..814644a 100644
--- a/core/api/src/main/java/org/qi4j/api/association/NamedAssociationWrapper.java
+++ b/core/api/src/main/java/org/qi4j/api/association/NamedAssociationWrapper.java
@@ -20,10 +20,11 @@
 
 import java.util.Iterator;
 import java.util.Map;
+import org.qi4j.api.entity.EntityReference;
 
 /**
  * If you want to catch calls to NamedAssociations, then create a GenericConcern
- * that wraps the Qi4j-supplied NamedAssociations instance with NamedAssociationsWrapper. Override
+ * that wraps the Zest-supplied NamedAssociations instance with NamedAssociationsWrapper. Override
  * methods to perform your custom code.
  */
 public class NamedAssociationWrapper
@@ -90,6 +91,18 @@
     }
 
     @Override
+    public Iterable<EntityReference> references()
+    {
+        return next.references();
+    }
+
+    @Override
+    public EntityReference referenceOf( String name )
+    {
+        return next.referenceOf( name );
+    }
+
+    @Override
     public int hashCode()
     {
         return next.hashCode();
@@ -106,5 +119,4 @@
     {
         return next.toString();
     }
-
 }
diff --git a/core/api/src/main/java/org/qi4j/api/association/package.html b/core/api/src/main/java/org/qi4j/api/association/package.html
index 8e97e39..cf48596 100644
--- a/core/api/src/main/java/org/qi4j/api/association/package.html
+++ b/core/api/src/main/java/org/qi4j/api/association/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Association API.</h2>
diff --git a/core/api/src/main/java/org/qi4j/api/cache/package.html b/core/api/src/main/java/org/qi4j/api/cache/package.html
index 97ef2a7..a62da34 100644
--- a/core/api/src/main/java/org/qi4j/api/cache/package.html
+++ b/core/api/src/main/java/org/qi4j/api/cache/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Cache API.</h2>
diff --git a/core/api/src/main/java/org/qi4j/api/common/AppliesTo.java b/core/api/src/main/java/org/qi4j/api/common/AppliesTo.java
index ccdff03..b23f204 100644
--- a/core/api/src/main/java/org/qi4j/api/common/AppliesTo.java
+++ b/core/api/src/main/java/org/qi4j/api/common/AppliesTo.java
@@ -38,7 +38,7 @@
  * </p>
  * <pre><code>
  *
- * &#64;AppliesTo( Sessional.class )   // Tells Qi4j to apply this concern on methods with &#64;Sessional annotation
+ * &#64;AppliesTo( Sessional.class )   // Tells Zest to apply this concern on methods with &#64;Sessional annotation
  * public class SessionConcern extends GenericConcern
  * {
  *     public Object invoke( Object proxy, Method method, Object[] args )
diff --git a/core/api/src/main/java/org/qi4j/api/common/AppliesToFilter.java b/core/api/src/main/java/org/qi4j/api/common/AppliesToFilter.java
index 2a07c00..f356cf4 100644
--- a/core/api/src/main/java/org/qi4j/api/common/AppliesToFilter.java
+++ b/core/api/src/main/java/org/qi4j/api/common/AppliesToFilter.java
@@ -19,9 +19,9 @@
 /**
  * Implementations of this interface can be specified in the &#64;AppliesTo.
  * <p>
- * AppliesTo filters are one of the driving technologies in Qi4j. They allow you to apply fragments (Mixins,
+ * AppliesTo filters are one of the driving technologies in Zest. They allow you to apply fragments (Mixins,
  * Concerns, SideEffects), often generic ones, depending on the context that they are evaluated under. This
- * mechanism is heavily used internally in Qi4j to achieve many other features.
+ * mechanism is heavily used internally in Zest to achieve many other features.
  * </p>
  * <p>
  * The starting point is the basic use of AppliesToFilter, where the &#64;AppliesTo annotation is given an
@@ -57,7 +57,7 @@
      * fragment.
      * <p>
      * There is no reason for user code to use this AppliesToFilter directly, and should be perceived as an
-     * internal class in Qi4j.
+     * internal class in Zest.
      * </p>
      */
     AppliesToFilter ALWAYS = new AppliesToFilter()
diff --git a/core/api/src/main/java/org/qi4j/api/common/Optional.java b/core/api/src/main/java/org/qi4j/api/common/Optional.java
index 0a85b32..3a070c3 100644
--- a/core/api/src/main/java/org/qi4j/api/common/Optional.java
+++ b/core/api/src/main/java/org/qi4j/api/common/Optional.java
@@ -37,8 +37,8 @@
  * </li>
  * </ul>
  * <p>
- * Optionality is not the default in Qi4j, and if injections, property values and parameters in methods are not
- * non-null, the Qi4j runtime will throw an {@link org.qi4j.api.constraint.ConstraintViolationException}, indicating
+ * Optionality is not the default in Zest, and if injections, property values and parameters in methods are not
+ * non-null, the Zest runtime will throw an {@link org.qi4j.api.constraint.ConstraintViolationException}, indicating
  * which field/property/parameter in which composite and mixin the problem has been detected.
  * </p>
  * <p>
@@ -51,7 +51,7 @@
  *
  * &#64;Service
  * YourService other;   // If no YourService instance is declared and visible to this service injection point
- *                      // the Qi4j runtime will throw a ConstraintViolationException.
+ *                      // the Zest runtime will throw a ConstraintViolationException.
  *
  * </code></pre>
  */
diff --git a/core/api/src/main/java/org/qi4j/api/common/QualifiedName.java b/core/api/src/main/java/org/qi4j/api/common/QualifiedName.java
index cb66205..a869791 100644
--- a/core/api/src/main/java/org/qi4j/api/common/QualifiedName.java
+++ b/core/api/src/main/java/org/qi4j/api/common/QualifiedName.java
@@ -27,7 +27,7 @@
  * </p>
  * <p>
  * <strong>NOTE: Unless you do very generic libraries, entity stores and other extensions that is deeply coupled into
- * the Qi4j runtime, it is very unlikely you will need to use this class directly.</strong>
+ * the Zest runtime, it is very unlikely you will need to use this class directly.</strong>
  * </p>
  * <p>
  * It is also important to notice that the QualifiedName needs to be long-term stable, as the names are written
diff --git a/core/api/src/main/java/org/qi4j/api/common/TypeName.java b/core/api/src/main/java/org/qi4j/api/common/TypeName.java
index df9d6c5..6a485e6 100644
--- a/core/api/src/main/java/org/qi4j/api/common/TypeName.java
+++ b/core/api/src/main/java/org/qi4j/api/common/TypeName.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.common;
 
 import java.io.Serializable;
diff --git a/core/api/src/main/java/org/qi4j/api/common/UseDefaults.java b/core/api/src/main/java/org/qi4j/api/common/UseDefaults.java
index 8478d99..94f4446 100644
--- a/core/api/src/main/java/org/qi4j/api/common/UseDefaults.java
+++ b/core/api/src/main/java/org/qi4j/api/common/UseDefaults.java
@@ -46,7 +46,7 @@
  * </p>
  * <p>
  * It is also possible to change the default values for Composites during the assembly. This is done by calling the
- * {@link org.qi4j.bootstrap.ModuleAssembly#forMixin(Class)} method.
+ * {@code org.qi4j.bootstrap.ModuleAssembly#forMixin(Class)} method.
  * </p>
  * <p>
  * Example;
diff --git a/core/api/src/main/java/org/qi4j/api/common/Visibility.java b/core/api/src/main/java/org/qi4j/api/common/Visibility.java
index a910a80..0f38f36 100644
--- a/core/api/src/main/java/org/qi4j/api/common/Visibility.java
+++ b/core/api/src/main/java/org/qi4j/api/common/Visibility.java
@@ -14,7 +14,7 @@
 package org.qi4j.api.common;
 
 /**
- * Visibility is a core concept in the Qi4j structure system. It defines the locale of composites and objects, i.e.
+ * Visibility is a core concept in the Zest structure system. It defines the locale of composites and objects, i.e.
  * how far they can be 'seen' and therefor be used.
  * <p>
  * When a Composite or Object is declared in the assembly phase, and no visibility is set, only other
diff --git a/core/api/src/main/java/org/qi4j/api/common/package.html b/core/api/src/main/java/org/qi4j/api/common/package.html
index d84e0bd..f29de5d 100644
--- a/core/api/src/main/java/org/qi4j/api/common/package.html
+++ b/core/api/src/main/java/org/qi4j/api/common/package.html
@@ -1,8 +1,24 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Common API.</h2>
         <p>
-            The Common API package is a collection of really low-level types needed at the core of the Qi4j Runtime. It is also
+            The Common API package is a collection of really low-level types needed at the core of the Zest™ Runtime. It is also
             a collection of types that are not particularly cohesive, and effectively this package contains the loose ends
             that does not belong elsewhere.
         </p>
@@ -14,7 +30,7 @@
             <li>QualifiedName</li>
             <li>TypeName</li>
         </ul>
-        <p>UNLESS you are into deep integration into the Qi4j Runtime.</p>
+        <p>UNLESS you are into deep integration into the Zest™ Runtime.</p>
 
         <h3>&#64;AppliesTo and AppliesToFilter</h3>
         <p>
@@ -24,7 +40,7 @@
 
         <h3>&#64;Optional</h3>
         <p>
-            In Qi4j, method arguments, property values and injected fields are not allowed to be null by default. To allow
+            In Zest™, method arguments, property values and injected fields are not allowed to be null by default. To allow
             any of these to be null, i.e. undeclared, it is required that the argument, field or method is marked with the
             &#64;Optional annotation.
         </p>
@@ -32,14 +48,14 @@
         <h3>&#64;UseDefaults</h3>
         <p>
             Since null is not allowed without the &#64;Optional annotation, it can sometimes by tedious to initialize all
-            the property values. And the &#64;UseDefaults annotation allows us to declare that Qi4j should set the Property
+            the property values. And the &#64;UseDefaults annotation allows us to declare that Zest™ should set the Property
             to a default value. These are either the pre-defined ones, or can be set per property declaration during the
             assembly.
         </p>
 
         <h3>&#64;Visibility</h3>
         <p>
-            Visibility is another innovative concept in Qi4j, which leverage the structure system (Application, Layer, Module)
+            Visibility is another innovative concept in Zest™, which leverage the structure system (Application, Layer, Module)
             to limit the 'reach' when requesting composites and objects. The Visibility is declared per Composite/Object,
             preferably in the most restrictive mode possible, and the visibility resolver will ensure a predictable resolution
             algorithm;
diff --git a/core/api/src/main/java/org/qi4j/api/composite/ModelDescriptor.java b/core/api/src/main/java/org/qi4j/api/composite/ModelDescriptor.java
index ab76493..b0651f0 100644
--- a/core/api/src/main/java/org/qi4j/api/composite/ModelDescriptor.java
+++ b/core/api/src/main/java/org/qi4j/api/composite/ModelDescriptor.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.composite;
 
 import org.qi4j.api.common.Visibility;
diff --git a/core/api/src/main/java/org/qi4j/api/composite/PropertyMapper.java b/core/api/src/main/java/org/qi4j/api/composite/PropertyMapper.java
index 3543260..054a369 100644
--- a/core/api/src/main/java/org/qi4j/api/composite/PropertyMapper.java
+++ b/core/api/src/main/java/org/qi4j/api/composite/PropertyMapper.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.composite;
 
 import java.io.IOException;
diff --git a/core/api/src/main/java/org/qi4j/api/composite/StatefulCompositeDescriptor.java b/core/api/src/main/java/org/qi4j/api/composite/StatefulCompositeDescriptor.java
index 13ecf70..ba44494 100644
--- a/core/api/src/main/java/org/qi4j/api/composite/StatefulCompositeDescriptor.java
+++ b/core/api/src/main/java/org/qi4j/api/composite/StatefulCompositeDescriptor.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.composite;
 
 /**
diff --git a/core/api/src/main/java/org/qi4j/api/composite/package.html b/core/api/src/main/java/org/qi4j/api/composite/package.html
index 9f1951c..00feaed 100644
--- a/core/api/src/main/java/org/qi4j/api/composite/package.html
+++ b/core/api/src/main/java/org/qi4j/api/composite/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Composite API.</h2>
diff --git a/core/api/src/main/java/org/qi4j/api/concern/internal/package.html b/core/api/src/main/java/org/qi4j/api/concern/internal/package.html
index 40ac9f9..9351f10 100644
--- a/core/api/src/main/java/org/qi4j/api/concern/internal/package.html
+++ b/core/api/src/main/java/org/qi4j/api/concern/internal/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h1>Internal/Private package for the Concern API.</h1>
diff --git a/core/api/src/main/java/org/qi4j/api/concern/package.html b/core/api/src/main/java/org/qi4j/api/concern/package.html
index 0a025ad..fcc7ef7 100644
--- a/core/api/src/main/java/org/qi4j/api/concern/package.html
+++ b/core/api/src/main/java/org/qi4j/api/concern/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Concern API.</h2>
diff --git a/core/api/src/main/java/org/qi4j/api/configuration/Configuration.java b/core/api/src/main/java/org/qi4j/api/configuration/Configuration.java
index bb97640..77c373d 100644
--- a/core/api/src/main/java/org/qi4j/api/configuration/Configuration.java
+++ b/core/api/src/main/java/org/qi4j/api/configuration/Configuration.java
@@ -20,12 +20,17 @@
 import org.qi4j.api.Qi4j;
 import org.qi4j.api.composite.Composite;
 import org.qi4j.api.composite.PropertyMapper;
+import org.qi4j.api.constraint.ConstraintViolationException;
 import org.qi4j.api.entity.EntityBuilder;
+import org.qi4j.api.entity.Identity;
+import org.qi4j.api.injection.scope.Service;
 import org.qi4j.api.injection.scope.Structure;
 import org.qi4j.api.injection.scope.This;
 import org.qi4j.api.mixin.Mixins;
 import org.qi4j.api.service.ServiceComposite;
 import org.qi4j.api.service.ServiceDescriptor;
+import org.qi4j.api.service.ServiceReference;
+import org.qi4j.api.service.qualifier.ServiceTags;
 import org.qi4j.api.structure.Module;
 import org.qi4j.api.unitofwork.EntityTypeNotFoundException;
 import org.qi4j.api.unitofwork.NoSuchEntityException;
@@ -33,6 +38,7 @@
 import org.qi4j.api.unitofwork.UnitOfWorkCompletionException;
 import org.qi4j.api.usecase.Usecase;
 import org.qi4j.api.usecase.UsecaseBuilder;
+import org.qi4j.api.value.ValueSerialization;
 
 import static org.qi4j.functional.Iterables.first;
 
@@ -52,7 +58,7 @@
  * <p>
  * If a new Configuration instance is created then it will be populated with properties
  * from the properties file whose filesystem name is the same as the identity (e.g. "MyService.properties").
- * If a service is not given a name via the {@link org.qi4j.bootstrap.ServiceDeclaration#identifiedBy(String)}, the
+ * If a service is not given a name via the {@code org.qi4j.bootstrap.ServiceDeclaration#identifiedBy(String)}, the
  * name will default to the FQCN of the ServiceComposite type.
  * </p>
  * <p>
@@ -62,7 +68,7 @@
  * a request.
  * </p>
  * <p>
- * The Configuration will be automatically refreshed when the Service is activated by the Qi4j runtime.
+ * The Configuration will be automatically refreshed when the Service is activated by the Zest runtime.
  * Any refreshes at other points will have to be done manually or triggered through some other
  * mechanism.
  * </p>
@@ -107,7 +113,6 @@
  *     :
  * }
  * </code></pre>
- *
  */
 @SuppressWarnings( "JavadocReference" )
 @Mixins( Configuration.ConfigurationMixin.class )
@@ -116,7 +121,7 @@
     /**
      * Retrieves the user configuration instance managed by this Configuration.
      * <p>
-     * Even if the user configuration is initialized from properties file, the consistency rules of Qi4j composites
+     * Even if the user configuration is initialized from properties file, the consistency rules of Zest composites
      * still applies. If the the properties file is missing a value, then the initialization will fail with a
      * RuntimeException. If Constraints has been defined, those will need to be satisfied as well. The user
      * configuration instance returned will fulfill the constraints and consistency normal to all composites, and
@@ -129,7 +134,7 @@
 
     /**
      * Updates the values of the managed user ConfigurationComposite instance from the underlying
-     * {@link org.qi4j.spi.entitystore.EntityStore}.  Any modified values in the current user configuration that
+     * {@code org.qi4j.spi.entitystore.EntityStore}.  Any modified values in the current user configuration that
      * has not been saved, via {@link #save()} method, will be lost.
      */
     void refresh();
@@ -142,7 +147,7 @@
     /**
      * Implementation of Configuration.
      * <p>
-     * This is effectively an internal class in Qi4j and should never be used directly by user code.
+     * This is effectively an internal class in Zest and should never be used directly by user code.
      * </p>
      *
      * @param <T>
@@ -162,6 +167,9 @@
         @Structure
         private Module module;
 
+        @Service
+        private Iterable<ServiceReference<ValueSerialization>> valueSerialization;
+
         public ConfigurationMixin()
         {
         }
@@ -238,10 +246,10 @@
         }
 
         @SuppressWarnings( "unchecked" )
-        private <V> V initializeConfigurationInstance( ServiceComposite serviceComposite,
-                                                       UnitOfWork uow,
-                                                       ServiceDescriptor serviceModel,
-                                                       String identity
+        private <V extends Identity> V initializeConfigurationInstance( ServiceComposite serviceComposite,
+                                                                        UnitOfWork uow,
+                                                                        ServiceDescriptor serviceModel,
+                                                                        String identity
         )
             throws InstantiationException
         {
@@ -249,22 +257,68 @@
             Usecase usecase = UsecaseBuilder.newUsecase( "Configuration:" + me.identity().get() );
             UnitOfWork buildUow = module.newUnitOfWork( usecase );
 
-            EntityBuilder<V> configBuilder = buildUow.newEntityBuilder( serviceModel.<V>configurationType(), identity );
+            Class<?> type = first( api.serviceDescriptorFor( serviceComposite ).types() );
+            Class<V> configType = serviceModel.configurationType();
 
             // Check for defaults
-            String s = identity + ".properties";
-            Class<?> type = first( api.serviceDescriptorFor( serviceComposite ).types() );
-            // Load defaults from classpath root if available
-            if ( type.getResource( s ) == null && type.getResource( "/" + s ) != null )
+            V config = tryLoadPropertiesFile( buildUow, type, configType, identity );
+            if( config == null )
             {
-                s = "/" + s;
+                config = tryLoadJsonFile( buildUow, type, configType, identity );
+                if( config == null )
+                {
+                    config = tryLoadYamlFile( buildUow, type, configType, identity );
+                    if( config == null )
+                    {
+                        config = tryLoadXmlFile( buildUow, type, configType, identity );
+                        if( config == null )
+                        {
+                            try
+                            {
+                                EntityBuilder<V> configBuilder = buildUow.newEntityBuilder( serviceModel.<V>configurationType(), identity );
+                                configBuilder.newInstance();
+                            }
+                            catch( ConstraintViolationException e )
+                            {
+                                throw new NoSuchConfigurationException( configType, identity, e );
+                            }
+                        }
+                    }
+                }
             }
-            InputStream asStream = type.getResourceAsStream( s );
+
+            try
+            {
+                buildUow.complete();
+
+                // Try again
+                return (V) findConfigurationInstanceFor( serviceComposite, uow );
+            }
+            catch( Exception e1 )
+            {
+                InstantiationException ex = new InstantiationException(
+                    "Could not instantiate configuration, and no configuration initialization file was found (" + identity + ")" );
+                ex.initCause( e1 );
+                throw ex;
+            }
+        }
+
+        private <C, V> V tryLoadPropertiesFile( UnitOfWork buildUow,
+                                                Class<C> compositeType,
+                                                Class<V> configType,
+                                                String identity
+        )
+            throws InstantiationException
+        {
+            EntityBuilder<V> configBuilder = buildUow.newEntityBuilder( configType, identity );
+            String resourceName = identity + ".properties";
+            InputStream asStream = getResource( compositeType, resourceName );
             if( asStream != null )
             {
                 try
                 {
                     PropertyMapper.map( asStream, (Composite) configBuilder.instance() );
+                    return configBuilder.newInstance();
                 }
                 catch( IOException e1 )
                 {
@@ -274,22 +328,69 @@
                     throw exception;
                 }
             }
+            return null;
+        }
 
-            try
+        private InputStream getResource( Class<?> type, String resourceName )
+        {
+            // Load defaults from classpath root if available
+            if( type.getResource( resourceName ) == null && type.getResource( "/" + resourceName ) != null )
             {
-                configBuilder.newInstance();
-                buildUow.complete();
+                resourceName = "/" + resourceName;
+            }
+            return type.getResourceAsStream( resourceName );
+        }
 
-                // Try again
-                return (V) findConfigurationInstanceFor( serviceComposite, uow );
-            }
-            catch( Exception e1 )
+        private <C, V extends Identity> V tryLoadJsonFile( UnitOfWork uow,
+                                                           Class<C> compositeType,
+                                                           Class<V> configType,
+                                                           String identity
+        )
+        {
+            return readConfig( uow, compositeType, configType, identity, ValueSerialization.Formats.JSON, ".json" );
+        }
+
+        private <C, V extends Identity> V tryLoadYamlFile( UnitOfWork uow,
+                                                           Class<C> compositeType,
+                                                           Class<V> configType,
+                                                           String identity
+        )
+        {
+            return readConfig( uow, compositeType, configType, identity, ValueSerialization.Formats.YAML, ".yaml" );
+        }
+
+        private <C, V extends Identity> V tryLoadXmlFile( UnitOfWork uow,
+                                                          Class<C> compositeType,
+                                                          Class<V> configType,
+                                                          String identity
+        )
+        {
+            return readConfig( uow, compositeType, configType, identity, ValueSerialization.Formats.XML, ".xml" );
+        }
+
+        private <C, V extends Identity> V readConfig( UnitOfWork uow,
+                                                      Class<C> compositeType,
+                                                      Class<V> configType,
+                                                      String identity,
+                                                      String format,
+                                                      String extension
+        )
+        {
+            for( ServiceReference<ValueSerialization> serializerRef : valueSerialization )
             {
-                InstantiationException ex = new InstantiationException(
-                    "Could not instantiate configuration, and no Properties file was found (" + s + ")" );
-                ex.initCause( e1 );
-                throw ex;
+                ServiceTags serviceTags = serializerRef.metaInfo( ServiceTags.class );
+                if( serviceTags.hasTag( format ) )
+                {
+                    String resourceName = identity + extension;
+                    InputStream asStream = getResource( compositeType, resourceName );
+                    if( asStream != null )
+                    {
+                        V configObject = serializerRef.get().deserialize( configType, asStream );
+                        return uow.toEntity( configType, configObject );
+                    }
+                }
             }
+            return null;
         }
     }
 }
diff --git a/core/api/src/main/java/org/qi4j/api/configuration/ConfigurationComposite.java b/core/api/src/main/java/org/qi4j/api/configuration/ConfigurationComposite.java
index a2919f2..39fb149 100644
--- a/core/api/src/main/java/org/qi4j/api/configuration/ConfigurationComposite.java
+++ b/core/api/src/main/java/org/qi4j/api/configuration/ConfigurationComposite.java
@@ -14,7 +14,9 @@
 
 package org.qi4j.api.configuration;
 
+import org.qi4j.api.composite.Composite;
 import org.qi4j.api.entity.EntityComposite;
+import org.qi4j.api.entity.Identity;
 import org.qi4j.api.entity.Queryable;
 
 /**
@@ -25,6 +27,6 @@
  */
 @Queryable( false )
 public interface ConfigurationComposite
-    extends EntityComposite
+    extends Identity, Composite
 {
 }
diff --git a/core/api/src/main/java/org/qi4j/api/configuration/NoSuchConfigurationException.java b/core/api/src/main/java/org/qi4j/api/configuration/NoSuchConfigurationException.java
new file mode 100644
index 0000000..b3d3ed1
--- /dev/null
+++ b/core/api/src/main/java/org/qi4j/api/configuration/NoSuchConfigurationException.java
@@ -0,0 +1,48 @@
+/*
+ *  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.qi4j.api.configuration;
+
+import org.qi4j.api.constraint.ConstraintViolationException;
+import org.qi4j.api.entity.Identity;
+
+public class NoSuchConfigurationException extends RuntimeException
+{
+    private final Class<? extends Identity> configType;
+    private final String identity;
+
+    public NoSuchConfigurationException( Class<? extends Identity> configType,
+                                         String identity,
+                                         ConstraintViolationException cause
+    )
+    {
+        super( "No configuration found for '" + identity + "' and configuration " + configType.getName() + " has one or more non-Optional properties.", cause );
+        this.configType = configType;
+        this.identity = identity;
+    }
+
+    public Class<? extends Identity> configType()
+    {
+        return configType;
+    }
+
+    public String identity()
+    {
+        return identity;
+    }
+}
diff --git a/core/api/src/main/java/org/qi4j/api/configuration/package.html b/core/api/src/main/java/org/qi4j/api/configuration/package.html
index 28de410..7f8a892 100644
--- a/core/api/src/main/java/org/qi4j/api/configuration/package.html
+++ b/core/api/src/main/java/org/qi4j/api/configuration/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Configuration API.</h2>
diff --git a/core/api/src/main/java/org/qi4j/api/constraint/package.html b/core/api/src/main/java/org/qi4j/api/constraint/package.html
index 50ec1fc..2e4d340 100644
--- a/core/api/src/main/java/org/qi4j/api/constraint/package.html
+++ b/core/api/src/main/java/org/qi4j/api/constraint/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Constraint API.</h2>
diff --git a/core/api/src/main/java/org/qi4j/api/dataset/DataSet.java b/core/api/src/main/java/org/qi4j/api/dataset/DataSet.java
index c62db9c..2e4bdc3 100644
--- a/core/api/src/main/java/org/qi4j/api/dataset/DataSet.java
+++ b/core/api/src/main/java/org/qi4j/api/dataset/DataSet.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.dataset;
 
 import org.qi4j.functional.Function;
diff --git a/core/api/src/main/java/org/qi4j/api/dataset/DataSetSource.java b/core/api/src/main/java/org/qi4j/api/dataset/DataSetSource.java
index 90e3ed5..4cf68f1 100644
--- a/core/api/src/main/java/org/qi4j/api/dataset/DataSetSource.java
+++ b/core/api/src/main/java/org/qi4j/api/dataset/DataSetSource.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.dataset;
 
 /**
diff --git a/core/api/src/main/java/org/qi4j/api/dataset/Query.java b/core/api/src/main/java/org/qi4j/api/dataset/Query.java
index 651462f..61edd73 100644
--- a/core/api/src/main/java/org/qi4j/api/dataset/Query.java
+++ b/core/api/src/main/java/org/qi4j/api/dataset/Query.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.dataset;
 
 import org.qi4j.api.property.Property;
diff --git a/core/api/src/main/java/org/qi4j/api/dataset/iterable/IterableDataSet.java b/core/api/src/main/java/org/qi4j/api/dataset/iterable/IterableDataSet.java
index 8808427..3300ea4 100644
--- a/core/api/src/main/java/org/qi4j/api/dataset/iterable/IterableDataSet.java
+++ b/core/api/src/main/java/org/qi4j/api/dataset/iterable/IterableDataSet.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.dataset.iterable;
 
 import org.qi4j.api.dataset.DataSet;
diff --git a/core/api/src/main/java/org/qi4j/api/dataset/iterable/IterableQuery.java b/core/api/src/main/java/org/qi4j/api/dataset/iterable/IterableQuery.java
index d63e6f8..b816a25 100644
--- a/core/api/src/main/java/org/qi4j/api/dataset/iterable/IterableQuery.java
+++ b/core/api/src/main/java/org/qi4j/api/dataset/iterable/IterableQuery.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.dataset.iterable;
 
 import java.util.HashMap;
diff --git a/core/api/src/main/java/org/qi4j/api/dataset/iterable/package.html b/core/api/src/main/java/org/qi4j/api/dataset/iterable/package.html
index 12244dc..9874cb5 100644
--- a/core/api/src/main/java/org/qi4j/api/dataset/iterable/package.html
+++ b/core/api/src/main/java/org/qi4j/api/dataset/iterable/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Iterable DataSets.</h2>
diff --git a/core/api/src/main/java/org/qi4j/api/dataset/package.html b/core/api/src/main/java/org/qi4j/api/dataset/package.html
index f7bf752..f324682 100644
--- a/core/api/src/main/java/org/qi4j/api/dataset/package.html
+++ b/core/api/src/main/java/org/qi4j/api/dataset/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>DataSet API.</h2>
diff --git a/core/api/src/main/java/org/qi4j/api/entity/EntityBuilderTemplate.java b/core/api/src/main/java/org/qi4j/api/entity/EntityBuilderTemplate.java
index 0ebedff..4473844 100644
--- a/core/api/src/main/java/org/qi4j/api/entity/EntityBuilderTemplate.java
+++ b/core/api/src/main/java/org/qi4j/api/entity/EntityBuilderTemplate.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.entity;
 
 import org.qi4j.api.structure.Module;
diff --git a/core/api/src/main/java/org/qi4j/api/entity/EntityReference.java b/core/api/src/main/java/org/qi4j/api/entity/EntityReference.java
index 60c4d1b..967647c 100644
--- a/core/api/src/main/java/org/qi4j/api/entity/EntityReference.java
+++ b/core/api/src/main/java/org/qi4j/api/entity/EntityReference.java
@@ -55,6 +55,13 @@
         return new EntityReference( (EntityComposite) object );
     }
 
+    public static EntityReference create( Identity identity )
+    {
+        if( identity == null )
+            return null;
+        return new EntityReference( identity.identity().get() );
+    }
+
     private static final long serialVersionUID = 1L;
 
     private String identity;
diff --git a/core/api/src/main/java/org/qi4j/api/entity/Identity.java b/core/api/src/main/java/org/qi4j/api/entity/Identity.java
index 0c82ca9..b4adbc5 100644
--- a/core/api/src/main/java/org/qi4j/api/entity/Identity.java
+++ b/core/api/src/main/java/org/qi4j/api/entity/Identity.java
@@ -41,7 +41,7 @@
     /**
      * Default Identity implementation.
      */
-    public class IdentityMixin
+    class IdentityMixin
         implements Identity
     {
         @State
diff --git a/core/api/src/main/java/org/qi4j/api/entity/Lifecycle.java b/core/api/src/main/java/org/qi4j/api/entity/Lifecycle.java
index 650f456..3eabd78 100644
--- a/core/api/src/main/java/org/qi4j/api/entity/Lifecycle.java
+++ b/core/api/src/main/java/org/qi4j/api/entity/Lifecycle.java
@@ -17,7 +17,7 @@
 /**

  * Lifecycle interface for all Composites.

  * <p>

- * This Lifecycle interface is a built-in feature of the Qi4j runtime, similar to the Initializable interface.

+ * This Lifecycle interface is a built-in feature of the Zest runtime, similar to the Initializable interface.

  * Any Mixin that implements this interface AND is part of an EntityComposite will have these two methods called

  * upon creation/removal of the EntityComposite instance to/from the EntityStore. Meaning, the create method is called

  * only when the identifiable EntityComposite is created the first time, and not when it is read from its persisted

@@ -64,7 +64,7 @@
     /**

      * Creation callback method.

      * <p>

-     * Called by the Qi4j runtime before the newInstance of the entity completes, before the constraints are checked,

+     * Called by the Zest runtime before the newInstance of the entity completes, before the constraints are checked,

      * allowing for additional initialization.

      * </p>

      * @throws LifecycleException if the entity could not be created

@@ -75,7 +75,7 @@
     /**

      * Removal callback method.

      * <p>

-     * Called by the Qi4j runtime before the entity is removed from the system, allowing

+     * Called by the Zest runtime before the entity is removed from the system, allowing

      * for clean-up operations.

      * </p>

      * @throws LifecycleException if the entity could not be removed

diff --git a/core/api/src/main/java/org/qi4j/api/entity/package.html b/core/api/src/main/java/org/qi4j/api/entity/package.html
index 829c7b7..0386d8c 100644
--- a/core/api/src/main/java/org/qi4j/api/entity/package.html
+++ b/core/api/src/main/java/org/qi4j/api/entity/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Entity API.</h2>
diff --git a/core/api/src/main/java/org/qi4j/api/event/package.html b/core/api/src/main/java/org/qi4j/api/event/package.html
index 1679350..a5ed0a7 100644
--- a/core/api/src/main/java/org/qi4j/api/event/package.html
+++ b/core/api/src/main/java/org/qi4j/api/event/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Event API.</h2>
diff --git a/core/api/src/main/java/org/qi4j/api/injection/package.html b/core/api/src/main/java/org/qi4j/api/injection/package.html
index 757c200..c41b495 100644
--- a/core/api/src/main/java/org/qi4j/api/injection/package.html
+++ b/core/api/src/main/java/org/qi4j/api/injection/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Dependency Injection API.</h2>
diff --git a/core/api/src/main/java/org/qi4j/api/injection/scope/package.html b/core/api/src/main/java/org/qi4j/api/injection/scope/package.html
index 8b55436..b0ec496 100644
--- a/core/api/src/main/java/org/qi4j/api/injection/scope/package.html
+++ b/core/api/src/main/java/org/qi4j/api/injection/scope/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Dependency Injection Scopes.</h2>
diff --git a/core/api/src/main/java/org/qi4j/api/metrics/MetricsNotSupportedException.java b/core/api/src/main/java/org/qi4j/api/metrics/MetricsNotSupportedException.java
index d3312a4..aec7859 100644
--- a/core/api/src/main/java/org/qi4j/api/metrics/MetricsNotSupportedException.java
+++ b/core/api/src/main/java/org/qi4j/api/metrics/MetricsNotSupportedException.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.metrics;
 
 /**
diff --git a/core/api/src/main/java/org/qi4j/api/metrics/MetricsProvider.java b/core/api/src/main/java/org/qi4j/api/metrics/MetricsProvider.java
index 404b31d..c11996b 100644
--- a/core/api/src/main/java/org/qi4j/api/metrics/MetricsProvider.java
+++ b/core/api/src/main/java/org/qi4j/api/metrics/MetricsProvider.java
@@ -18,16 +18,39 @@
 
 /**
  * Metrics Provider SPI.
+ * <p>
+ * The Zest Runtime will automatically ook for a service that implements the MetricsProvider interdace
+ * and use it for internal Runtime metrics, such as the UnitOfWork measuring the time from creation to close.
+ * </p>
+ * <p>
+ * The Metrics Library is available to add metric functionality to applications in the same way, and
+ * will use the same MetricsProvider.
+ * </p>
+ * <p>
+ * Note that the usual visibitlity rules applies, so you might have more than one MetricsProvider server,
+ * perhaps per layer.
+ * </p>
  */
 public interface MetricsProvider
 {
     /**
      * Creates a new factory instance.
      *
+     * The instanctiation is done by providing a Metric type, which is one of
+     * <ul>
+     * <li>{@link MetricsCounter}</li>
+     * <li>{@link MetricsGauge}</li>
+     * <li>{@link MetricsHealthCheck}</li>
+     * <li>{@link MetricsHistogram}</li>
+     * <li>{@link MetricsMeter}</li>
+     * <li>{@link MetricsTimer}</li>
+     * </ul>
+     *
      * @param factoryType The class of the metric type needed.
      * @param <T>         The metric type requested.
      *
      * @return A factory instance
+     *
      * @throws MetricsNotSupportedException when the MetricsProvider is not supporting the factory type requested.
      */
     <T extends MetricsFactory> T createFactory( Class<T> factoryType )
diff --git a/core/api/src/main/java/org/qi4j/api/metrics/package.html b/core/api/src/main/java/org/qi4j/api/metrics/package.html
index a06567f..d0280bd 100644
--- a/core/api/src/main/java/org/qi4j/api/metrics/package.html
+++ b/core/api/src/main/java/org/qi4j/api/metrics/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Metrics API.</h2>
diff --git a/core/api/src/main/java/org/qi4j/api/mixin/package.html b/core/api/src/main/java/org/qi4j/api/mixin/package.html
index 1723b68..a0ebe07 100644
--- a/core/api/src/main/java/org/qi4j/api/mixin/package.html
+++ b/core/api/src/main/java/org/qi4j/api/mixin/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Mixin API.</h2>
diff --git a/core/api/src/main/java/org/qi4j/api/object/package.html b/core/api/src/main/java/org/qi4j/api/object/package.html
index 877535c..1e06504 100644
--- a/core/api/src/main/java/org/qi4j/api/object/package.html
+++ b/core/api/src/main/java/org/qi4j/api/object/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Object API.</h2>
diff --git a/core/api/src/main/java/org/qi4j/api/package.html b/core/api/src/main/java/org/qi4j/api/package.html
index 80f77d7..ff7d9af 100644
--- a/core/api/src/main/java/org/qi4j/api/package.html
+++ b/core/api/src/main/java/org/qi4j/api/package.html
@@ -1,5 +1,21 @@
+<!--
+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.
+-->
 <html>
     <body>
-        <h2>Qi4j API.</h2>
+        <h2>Apache Zest™ API.</h2>
     </body>
 </html>
diff --git a/core/api/src/main/java/org/qi4j/api/property/InvalidPropertyTypeException.java b/core/api/src/main/java/org/qi4j/api/property/InvalidPropertyTypeException.java
index c98007e..6afee4d 100644
--- a/core/api/src/main/java/org/qi4j/api/property/InvalidPropertyTypeException.java
+++ b/core/api/src/main/java/org/qi4j/api/property/InvalidPropertyTypeException.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.property;
 
 import java.lang.reflect.AccessibleObject;
diff --git a/core/api/src/main/java/org/qi4j/api/property/PropertyWrapper.java b/core/api/src/main/java/org/qi4j/api/property/PropertyWrapper.java
index afe3292..dc2259d 100644
--- a/core/api/src/main/java/org/qi4j/api/property/PropertyWrapper.java
+++ b/core/api/src/main/java/org/qi4j/api/property/PropertyWrapper.java
@@ -1,8 +1,26 @@
+/*
+ * 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.qi4j.api.property;
 
 /**
  * If you want to catch getting and setting properties, then create a GenericConcern
- * that wraps the Qi4j-supplied Property instance with PropertyWrappers. Override
+ * that wraps the Zest-supplied Property instance with PropertyWrappers. Override
  * get() and/or set() to perform your custom code.
  */
 public class PropertyWrapper
diff --git a/core/api/src/main/java/org/qi4j/api/property/package.html b/core/api/src/main/java/org/qi4j/api/property/package.html
index 44ab58d..8fc2a93 100644
--- a/core/api/src/main/java/org/qi4j/api/property/package.html
+++ b/core/api/src/main/java/org/qi4j/api/property/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Property API.</h2>
diff --git a/core/api/src/main/java/org/qi4j/api/query/QueryExpressions.java b/core/api/src/main/java/org/qi4j/api/query/QueryExpressions.java
index 75276a0..45501ee 100644
--- a/core/api/src/main/java/org/qi4j/api/query/QueryExpressions.java
+++ b/core/api/src/main/java/org/qi4j/api/query/QueryExpressions.java
@@ -85,7 +85,7 @@
         }
         catch( NoSuchMethodException e )
         {
-            throw new InternalError( "Qi4j Core API codebase is corrupted. Contact Qi4j team: QueryExpressions" );
+            throw new InternalError( "Zest Core API codebase is corrupted. Contact Zest team: QueryExpressions" );
         }
     }
 
diff --git a/core/api/src/main/java/org/qi4j/api/query/grammar/AndSpecification.java b/core/api/src/main/java/org/qi4j/api/query/grammar/AndSpecification.java
index 9644235..138ad00 100644
--- a/core/api/src/main/java/org/qi4j/api/query/grammar/AndSpecification.java
+++ b/core/api/src/main/java/org/qi4j/api/query/grammar/AndSpecification.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.query.grammar;
 
 import org.qi4j.api.composite.Composite;
diff --git a/core/api/src/main/java/org/qi4j/api/query/grammar/AssociationNotNullSpecification.java b/core/api/src/main/java/org/qi4j/api/query/grammar/AssociationNotNullSpecification.java
index 86797df..64d6def 100644
--- a/core/api/src/main/java/org/qi4j/api/query/grammar/AssociationNotNullSpecification.java
+++ b/core/api/src/main/java/org/qi4j/api/query/grammar/AssociationNotNullSpecification.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.query.grammar;
 
 import org.qi4j.api.association.Association;
diff --git a/core/api/src/main/java/org/qi4j/api/query/grammar/AssociationNullSpecification.java b/core/api/src/main/java/org/qi4j/api/query/grammar/AssociationNullSpecification.java
index 5834d4b..9f06b98 100644
--- a/core/api/src/main/java/org/qi4j/api/query/grammar/AssociationNullSpecification.java
+++ b/core/api/src/main/java/org/qi4j/api/query/grammar/AssociationNullSpecification.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.query.grammar;
 
 import org.qi4j.api.association.Association;
diff --git a/core/api/src/main/java/org/qi4j/api/query/grammar/BinarySpecification.java b/core/api/src/main/java/org/qi4j/api/query/grammar/BinarySpecification.java
index f251f99..07c5d99 100644
--- a/core/api/src/main/java/org/qi4j/api/query/grammar/BinarySpecification.java
+++ b/core/api/src/main/java/org/qi4j/api/query/grammar/BinarySpecification.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.query.grammar;
 
 import org.qi4j.api.composite.Composite;
diff --git a/core/api/src/main/java/org/qi4j/api/query/grammar/ComparisonSpecification.java b/core/api/src/main/java/org/qi4j/api/query/grammar/ComparisonSpecification.java
index b8c743e..f855054 100644
--- a/core/api/src/main/java/org/qi4j/api/query/grammar/ComparisonSpecification.java
+++ b/core/api/src/main/java/org/qi4j/api/query/grammar/ComparisonSpecification.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.query.grammar;
 
 import org.qi4j.api.composite.Composite;
diff --git a/core/api/src/main/java/org/qi4j/api/query/grammar/ContainsAllSpecification.java b/core/api/src/main/java/org/qi4j/api/query/grammar/ContainsAllSpecification.java
index adf9c76..7ff3e1b 100644
--- a/core/api/src/main/java/org/qi4j/api/query/grammar/ContainsAllSpecification.java
+++ b/core/api/src/main/java/org/qi4j/api/query/grammar/ContainsAllSpecification.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.query.grammar;
 
 import java.util.Collection;
diff --git a/core/api/src/main/java/org/qi4j/api/query/grammar/ContainsSpecification.java b/core/api/src/main/java/org/qi4j/api/query/grammar/ContainsSpecification.java
index 1622c52..ea049de 100644
--- a/core/api/src/main/java/org/qi4j/api/query/grammar/ContainsSpecification.java
+++ b/core/api/src/main/java/org/qi4j/api/query/grammar/ContainsSpecification.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.query.grammar;
 
 import java.util.Collection;
diff --git a/core/api/src/main/java/org/qi4j/api/query/grammar/EqSpecification.java b/core/api/src/main/java/org/qi4j/api/query/grammar/EqSpecification.java
index e195380..b4c1d90 100644
--- a/core/api/src/main/java/org/qi4j/api/query/grammar/EqSpecification.java
+++ b/core/api/src/main/java/org/qi4j/api/query/grammar/EqSpecification.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.query.grammar;
 
 /**
diff --git a/core/api/src/main/java/org/qi4j/api/query/grammar/ExpressionSpecification.java b/core/api/src/main/java/org/qi4j/api/query/grammar/ExpressionSpecification.java
index d1338a2..9886ca9 100644
--- a/core/api/src/main/java/org/qi4j/api/query/grammar/ExpressionSpecification.java
+++ b/core/api/src/main/java/org/qi4j/api/query/grammar/ExpressionSpecification.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.query.grammar;
 
 import org.qi4j.api.composite.Composite;
diff --git a/core/api/src/main/java/org/qi4j/api/query/grammar/GeSpecification.java b/core/api/src/main/java/org/qi4j/api/query/grammar/GeSpecification.java
index bc68456..82e9e38 100644
--- a/core/api/src/main/java/org/qi4j/api/query/grammar/GeSpecification.java
+++ b/core/api/src/main/java/org/qi4j/api/query/grammar/GeSpecification.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.query.grammar;
 
 /**
diff --git a/core/api/src/main/java/org/qi4j/api/query/grammar/GtSpecification.java b/core/api/src/main/java/org/qi4j/api/query/grammar/GtSpecification.java
index 33946b6..883120b 100644
--- a/core/api/src/main/java/org/qi4j/api/query/grammar/GtSpecification.java
+++ b/core/api/src/main/java/org/qi4j/api/query/grammar/GtSpecification.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.query.grammar;
 
 /**
diff --git a/core/api/src/main/java/org/qi4j/api/query/grammar/LeSpecification.java b/core/api/src/main/java/org/qi4j/api/query/grammar/LeSpecification.java
index f74babd..3715ffd 100644
--- a/core/api/src/main/java/org/qi4j/api/query/grammar/LeSpecification.java
+++ b/core/api/src/main/java/org/qi4j/api/query/grammar/LeSpecification.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.query.grammar;
 
 /**
diff --git a/core/api/src/main/java/org/qi4j/api/query/grammar/LtSpecification.java b/core/api/src/main/java/org/qi4j/api/query/grammar/LtSpecification.java
index 06f5c1a..6d3002a 100644
--- a/core/api/src/main/java/org/qi4j/api/query/grammar/LtSpecification.java
+++ b/core/api/src/main/java/org/qi4j/api/query/grammar/LtSpecification.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.query.grammar;
 
 /**
diff --git a/core/api/src/main/java/org/qi4j/api/query/grammar/MatchesSpecification.java b/core/api/src/main/java/org/qi4j/api/query/grammar/MatchesSpecification.java
index 101d64d..6cde577 100644
--- a/core/api/src/main/java/org/qi4j/api/query/grammar/MatchesSpecification.java
+++ b/core/api/src/main/java/org/qi4j/api/query/grammar/MatchesSpecification.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.query.grammar;
 
 import org.qi4j.api.composite.Composite;
diff --git a/core/api/src/main/java/org/qi4j/api/query/grammar/NeSpecification.java b/core/api/src/main/java/org/qi4j/api/query/grammar/NeSpecification.java
index b9c9380..e864184 100644
--- a/core/api/src/main/java/org/qi4j/api/query/grammar/NeSpecification.java
+++ b/core/api/src/main/java/org/qi4j/api/query/grammar/NeSpecification.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.query.grammar;
 
 /**
diff --git a/core/api/src/main/java/org/qi4j/api/query/grammar/NotSpecification.java b/core/api/src/main/java/org/qi4j/api/query/grammar/NotSpecification.java
index a17ea82..a85500d 100644
--- a/core/api/src/main/java/org/qi4j/api/query/grammar/NotSpecification.java
+++ b/core/api/src/main/java/org/qi4j/api/query/grammar/NotSpecification.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.query.grammar;
 
 import org.qi4j.api.composite.Composite;
diff --git a/core/api/src/main/java/org/qi4j/api/query/grammar/OrSpecification.java b/core/api/src/main/java/org/qi4j/api/query/grammar/OrSpecification.java
index 1c6454a..ac775d6 100644
--- a/core/api/src/main/java/org/qi4j/api/query/grammar/OrSpecification.java
+++ b/core/api/src/main/java/org/qi4j/api/query/grammar/OrSpecification.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.query.grammar;
 
 import org.qi4j.api.composite.Composite;
diff --git a/core/api/src/main/java/org/qi4j/api/query/grammar/PropertyNotNullSpecification.java b/core/api/src/main/java/org/qi4j/api/query/grammar/PropertyNotNullSpecification.java
index d92bb02..c73afa8 100644
--- a/core/api/src/main/java/org/qi4j/api/query/grammar/PropertyNotNullSpecification.java
+++ b/core/api/src/main/java/org/qi4j/api/query/grammar/PropertyNotNullSpecification.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.query.grammar;
 
 import org.qi4j.api.composite.Composite;
diff --git a/core/api/src/main/java/org/qi4j/api/query/grammar/PropertyNullSpecification.java b/core/api/src/main/java/org/qi4j/api/query/grammar/PropertyNullSpecification.java
index 65b33b5..7f7908f 100644
--- a/core/api/src/main/java/org/qi4j/api/query/grammar/PropertyNullSpecification.java
+++ b/core/api/src/main/java/org/qi4j/api/query/grammar/PropertyNullSpecification.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.query.grammar;
 
 import org.qi4j.api.composite.Composite;
diff --git a/core/api/src/main/java/org/qi4j/api/query/grammar/PropertyReference.java b/core/api/src/main/java/org/qi4j/api/query/grammar/PropertyReference.java
index 9b8f73d..7b865de 100644
--- a/core/api/src/main/java/org/qi4j/api/query/grammar/PropertyReference.java
+++ b/core/api/src/main/java/org/qi4j/api/query/grammar/PropertyReference.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.query.grammar;
 
 import org.qi4j.api.composite.Composite;
diff --git a/core/api/src/main/java/org/qi4j/api/query/grammar/QuerySpecification.java b/core/api/src/main/java/org/qi4j/api/query/grammar/QuerySpecification.java
index cdc3861..3c033d7 100644
--- a/core/api/src/main/java/org/qi4j/api/query/grammar/QuerySpecification.java
+++ b/core/api/src/main/java/org/qi4j/api/query/grammar/QuerySpecification.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.query.grammar;
 
 import org.qi4j.api.composite.Composite;
diff --git a/core/api/src/main/java/org/qi4j/api/query/grammar/Variable.java b/core/api/src/main/java/org/qi4j/api/query/grammar/Variable.java
index efcef51..205347b 100644
--- a/core/api/src/main/java/org/qi4j/api/query/grammar/Variable.java
+++ b/core/api/src/main/java/org/qi4j/api/query/grammar/Variable.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.query.grammar;
 
 /**
diff --git a/core/api/src/main/java/org/qi4j/api/query/grammar/package.html b/core/api/src/main/java/org/qi4j/api/query/grammar/package.html
index f86abb2..e0b80f6 100644
--- a/core/api/src/main/java/org/qi4j/api/query/grammar/package.html
+++ b/core/api/src/main/java/org/qi4j/api/query/grammar/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Query Grammar.</h2>
diff --git a/core/api/src/main/java/org/qi4j/api/query/package.html b/core/api/src/main/java/org/qi4j/api/query/package.html
index a4b7265..27e4455 100644
--- a/core/api/src/main/java/org/qi4j/api/query/package.html
+++ b/core/api/src/main/java/org/qi4j/api/query/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Query API.</h2>
diff --git a/core/api/src/main/java/org/qi4j/api/service/Availability.java b/core/api/src/main/java/org/qi4j/api/service/Availability.java
index 8125ebc..3905a1d 100644
--- a/core/api/src/main/java/org/qi4j/api/service/Availability.java
+++ b/core/api/src/main/java/org/qi4j/api/service/Availability.java
@@ -15,7 +15,7 @@
 package org.qi4j.api.service;
 
 /**
- * Services can implement this interface in order to allow Qi4j to ask
+ * Services can implement this interface in order to allow Zest to ask
  * it whether it is currently available for use or not. This is accessed
  * by clients through the ServiceReference of the service. Services that do not
  * implement this are always considered to be available.
diff --git a/core/api/src/main/java/org/qi4j/api/service/IdentityDescriptor.java b/core/api/src/main/java/org/qi4j/api/service/IdentityDescriptor.java
index 1fc3e59..13e0ee5 100644
--- a/core/api/src/main/java/org/qi4j/api/service/IdentityDescriptor.java
+++ b/core/api/src/main/java/org/qi4j/api/service/IdentityDescriptor.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.service;
 
 /**
diff --git a/core/api/src/main/java/org/qi4j/api/service/ServiceFinder.java b/core/api/src/main/java/org/qi4j/api/service/ServiceFinder.java
index efaaff9..3ffb213 100644
--- a/core/api/src/main/java/org/qi4j/api/service/ServiceFinder.java
+++ b/core/api/src/main/java/org/qi4j/api/service/ServiceFinder.java
@@ -30,7 +30,7 @@
  * should be included</li>
  * </ol>
  * <p>
- * Both native Qi4j services and imported services are considered, with preference to native services.
+ * Both native Zest services and imported services are considered, with preference to native services.
  * </p>
  */
 public interface ServiceFinder
diff --git a/core/api/src/main/java/org/qi4j/api/service/importer/package.html b/core/api/src/main/java/org/qi4j/api/service/importer/package.html
index 6af926a..d960b3d 100644
--- a/core/api/src/main/java/org/qi4j/api/service/importer/package.html
+++ b/core/api/src/main/java/org/qi4j/api/service/importer/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Service Importers.</h2>
diff --git a/core/api/src/main/java/org/qi4j/api/service/package.html b/core/api/src/main/java/org/qi4j/api/service/package.html
index 80e3865..587937c 100644
--- a/core/api/src/main/java/org/qi4j/api/service/package.html
+++ b/core/api/src/main/java/org/qi4j/api/service/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Service API.</h2>
diff --git a/core/api/src/main/java/org/qi4j/api/service/qualifier/package.html b/core/api/src/main/java/org/qi4j/api/service/qualifier/package.html
index 103541e..ec0edd3 100644
--- a/core/api/src/main/java/org/qi4j/api/service/qualifier/package.html
+++ b/core/api/src/main/java/org/qi4j/api/service/qualifier/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Service Qualifiers.</h2>
diff --git a/core/api/src/main/java/org/qi4j/api/sideeffect/internal/package.html b/core/api/src/main/java/org/qi4j/api/sideeffect/internal/package.html
index 118bb22..269774e 100644
--- a/core/api/src/main/java/org/qi4j/api/sideeffect/internal/package.html
+++ b/core/api/src/main/java/org/qi4j/api/sideeffect/internal/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h1>Internal/Private package for the API.</h1>
diff --git a/core/api/src/main/java/org/qi4j/api/sideeffect/package.html b/core/api/src/main/java/org/qi4j/api/sideeffect/package.html
index 87dcd81..a658adb 100644
--- a/core/api/src/main/java/org/qi4j/api/sideeffect/package.html
+++ b/core/api/src/main/java/org/qi4j/api/sideeffect/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>SideEffect API.</h2>
diff --git a/core/api/src/main/java/org/qi4j/api/structure/Application.java b/core/api/src/main/java/org/qi4j/api/structure/Application.java
index 0e57fff..6023942 100644
--- a/core/api/src/main/java/org/qi4j/api/structure/Application.java
+++ b/core/api/src/main/java/org/qi4j/api/structure/Application.java
@@ -18,7 +18,7 @@
 import org.qi4j.api.activation.ActivationEventListenerRegistration;
 
 /**
- * The Application represents a whole Qi4j application.
+ * The Application represents a whole Zest application.
  */
 public interface Application
     extends ActivationEventListenerRegistration, Activation, MetaInfoHolder
diff --git a/core/api/src/main/java/org/qi4j/api/structure/ApplicationDescriptor.java b/core/api/src/main/java/org/qi4j/api/structure/ApplicationDescriptor.java
index 42e7b61..b33f134 100644
--- a/core/api/src/main/java/org/qi4j/api/structure/ApplicationDescriptor.java
+++ b/core/api/src/main/java/org/qi4j/api/structure/ApplicationDescriptor.java
@@ -24,7 +24,7 @@
 {
     /**
      * Create a new instance of the Application.
-     * @param runtime Qi4j Runtime
+     * @param runtime Zest Runtime
      * @param importedServiceInstances Imported Services instances
      * @return a new instance of the Application.
      */
diff --git a/core/api/src/main/java/org/qi4j/api/structure/Layer.java b/core/api/src/main/java/org/qi4j/api/structure/Layer.java
index fbde8c4..4268764 100644
--- a/core/api/src/main/java/org/qi4j/api/structure/Layer.java
+++ b/core/api/src/main/java/org/qi4j/api/structure/Layer.java
@@ -19,7 +19,7 @@
 import org.qi4j.api.activation.ActivationEventListenerRegistration;
 
 /**
- * The Layer represents a single layer in a Qi4j application.
+ * The Layer represents a single layer in a Zest application.
  */
 public interface Layer
     extends ActivationEventListenerRegistration, Activation, MetaInfoHolder
diff --git a/core/api/src/main/java/org/qi4j/api/structure/Module.java b/core/api/src/main/java/org/qi4j/api/structure/Module.java
index 7360f96..47ffab8 100644
--- a/core/api/src/main/java/org/qi4j/api/structure/Module.java
+++ b/core/api/src/main/java/org/qi4j/api/structure/Module.java
@@ -26,6 +26,9 @@
 import org.qi4j.api.unitofwork.UnitOfWorkFactory;
 import org.qi4j.api.value.ValueBuilderFactory;
 import org.qi4j.api.value.ValueDescriptor;
+import org.qi4j.functional.Function;
+import org.qi4j.functional.Visitable;
+import org.qi4j.functional.Visitor;
 
 /**
  * API for interacting with a Module. Instances
@@ -76,4 +79,5 @@
      * @return the descriptor for a value composite or null if the class could not be found or the value composite is not visible
      */
     ValueDescriptor valueDescriptor( String typeName );
+
 }
diff --git a/core/api/src/main/java/org/qi4j/api/structure/package.html b/core/api/src/main/java/org/qi4j/api/structure/package.html
index f98e2d3..3134a90 100644
--- a/core/api/src/main/java/org/qi4j/api/structure/package.html
+++ b/core/api/src/main/java/org/qi4j/api/structure/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Application Structure API.</h2>
diff --git a/core/api/src/main/java/org/qi4j/api/type/HasTypes.java b/core/api/src/main/java/org/qi4j/api/type/HasTypes.java
index 521ebc6..0ad36a4 100644
--- a/core/api/src/main/java/org/qi4j/api/type/HasTypes.java
+++ b/core/api/src/main/java/org/qi4j/api/type/HasTypes.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.type;
 
 /**
diff --git a/core/api/src/main/java/org/qi4j/api/type/MapType.java b/core/api/src/main/java/org/qi4j/api/type/MapType.java
index ddf03c5..1cb1700 100644
--- a/core/api/src/main/java/org/qi4j/api/type/MapType.java
+++ b/core/api/src/main/java/org/qi4j/api/type/MapType.java
@@ -27,6 +27,7 @@
 
     private ValueType keyType;
     private ValueType valueType;
+    private final Serialization.Variant variant;
 
     public static boolean isMap( Type type )
     {
@@ -39,11 +40,22 @@
         return new MapType( Map.class, ValueType.of( keyType ), ValueType.of( valueType ) );
     }
 
+    public static MapType of( Class<?> keyType, Class<?> valueType, Serialization.Variant variant )
+    {
+        return new MapType( Map.class, ValueType.of( keyType ), ValueType.of( valueType ), variant );
+    }
+
     public MapType( Class<?> type, ValueType keyType, ValueType valueType )
     {
+        this( type, keyType, valueType, Serialization.Variant.entry );
+    }
+
+    public MapType( Class<?> type, ValueType keyType, ValueType valueType, Serialization.Variant variant )
+    {
         super( type );
         this.keyType = keyType;
         this.valueType = valueType;
+        this.variant = variant;
         if( !isMap( type ) )
         {
             throw new IllegalArgumentException( type + " is not a Map." );
@@ -60,6 +72,11 @@
         return valueType;
     }
 
+    public Serialization.Variant variant()
+    {
+        return variant;
+    }
+
     @Override
     public String toString()
     {
diff --git a/core/api/src/main/java/org/qi4j/api/type/Serialization.java b/core/api/src/main/java/org/qi4j/api/type/Serialization.java
new file mode 100644
index 0000000..57184a0
--- /dev/null
+++ b/core/api/src/main/java/org/qi4j/api/type/Serialization.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2009, Rickard Öberg. All Rights Reserved.
+ *
+ * Licensed 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.qi4j.api.type;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Serialization options for Property intstances.
+ * <p>
+ * The {@code entry} type represents the explicit key=keyValue, value=valueValue. For JSON serialization;
+ * </p>
+ * <pre>
+ *     [
+ *         { "key1" : "value1" },
+ *         { "key2" : "value2" }
+ *     ]
+ * </pre>
+ * <p>
+ * For XML serialization;
+ * </p>
+ * <pre>
+ *     &lt;object&gt;
+ *         &lt;
+ *     &lt;/object&gt;
+ * </pre>
+ * <p>
+ * The {@code object} type represents the explicit keyValue=valueValue.
+ * </p>
+ */
+@Retention( RetentionPolicy.RUNTIME )
+@Target( { ElementType.TYPE, ElementType.METHOD } )
+@Documented
+public @interface Serialization
+{
+    Variant value();
+
+    enum Variant
+    {
+        entry, object
+    }
+}
diff --git a/core/api/src/main/java/org/qi4j/api/type/package.html b/core/api/src/main/java/org/qi4j/api/type/package.html
index fac704d..d42baa3 100644
--- a/core/api/src/main/java/org/qi4j/api/type/package.html
+++ b/core/api/src/main/java/org/qi4j/api/type/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Type API.</h2>
diff --git a/core/api/src/main/java/org/qi4j/api/unitofwork/EntityTypeNotFoundException.java b/core/api/src/main/java/org/qi4j/api/unitofwork/EntityTypeNotFoundException.java
index 311da62..39765fd 100644
--- a/core/api/src/main/java/org/qi4j/api/unitofwork/EntityTypeNotFoundException.java
+++ b/core/api/src/main/java/org/qi4j/api/unitofwork/EntityTypeNotFoundException.java
@@ -15,8 +15,12 @@
  */
 package org.qi4j.api.unitofwork;
 
+import org.qi4j.functional.Function;
+
+import static org.qi4j.functional.Iterables.fold;
+
 /**
- * Qi4j exception to be thrown in case that an entity composite
+ * Zest exception to be thrown in case that an entity composite
  * was not found during a lookup call.
  */
 public class EntityTypeNotFoundException
@@ -24,12 +28,32 @@
 {
     private final String compositeType;
 
-    public EntityTypeNotFoundException( String entityType )
+    public EntityTypeNotFoundException( String entityType, String moduleName, Iterable<String> visibility )
     {
-        super("Could not find an EntityComposite of type " + entityType);
+        super( "Could not find an EntityComposite of type " + entityType + " in module [" + moduleName + "].\n" +
+               "\tThe following entity types are visible:\n" + join(visibility) );
         this.compositeType = entityType;
     }
 
+    private static String join( Iterable<String> visibility )
+    {
+        return fold( new Function<String, String>()
+        {
+            StringBuilder result;
+            {
+                result = new StringBuilder();
+            }
+
+            @Override
+            public String map( String type )
+            {
+                result.append( type );
+                result.append( "\n" );
+                return result.toString();
+            }
+        }, visibility );
+    }
+
     public String compositeType()
     {
         return compositeType;
diff --git a/core/api/src/main/java/org/qi4j/api/unitofwork/NoSuchEntityException.java b/core/api/src/main/java/org/qi4j/api/unitofwork/NoSuchEntityException.java
index aff3bfa..cbffe9d 100644
--- a/core/api/src/main/java/org/qi4j/api/unitofwork/NoSuchEntityException.java
+++ b/core/api/src/main/java/org/qi4j/api/unitofwork/NoSuchEntityException.java
@@ -14,6 +14,7 @@
 package org.qi4j.api.unitofwork;
 
 import org.qi4j.api.entity.EntityReference;
+import org.qi4j.api.usecase.Usecase;
 import org.qi4j.functional.Function;
 import org.qi4j.functional.Iterables;
 
@@ -25,25 +26,28 @@
     extends UnitOfWorkException
 {
     private final EntityReference identity;
+    private final Usecase usecase;
     private final Class<?>[] mixinTypes;
 
-    public NoSuchEntityException( EntityReference identity, Class<?> mixinType )
+    public NoSuchEntityException( EntityReference identity, Class<?> mixinType, Usecase usecase )
     {
-        super( "Could not find entity (" + identity + ") of type " + mixinType.getName() );
+        super( "Could not find entity (" + identity + ") of type " + mixinType.getName() + " in usecase '" + usecase.name() + "'" );
         this.identity = identity;
+        this.usecase = usecase;
         this.mixinTypes = new Class<?>[]{ mixinType };
     }
 
-    public NoSuchEntityException( EntityReference identity, Class<?>[] mixinTypes )
+    public NoSuchEntityException( EntityReference identity, Class<?>[] mixinTypes, Usecase usecase )
     {
-        super( "Could not find entity (" + identity + ") of type " + toString( mixinTypes ) );
+        super( "Could not find entity (" + identity + ") of type " + toString( mixinTypes ) + " in usecase '" + usecase.name() + "'" );
         this.identity = identity;
         this.mixinTypes = mixinTypes;
+        this.usecase = usecase;
     }
 
-    public NoSuchEntityException( EntityReference identity, Iterable<Class<?>> types )
+    public NoSuchEntityException( EntityReference identity, Iterable<Class<?>> types, Usecase usecase )
     {
-        this( identity, castToArray( types ) );
+        this( identity, castToArray( types ), usecase );
     }
 
     public EntityReference identity()
@@ -56,6 +60,11 @@
         return mixinTypes;
     }
 
+    public Usecase usecase()
+    {
+        return usecase;
+    }
+
     private static Class<?>[] castToArray( Iterable<Class<?>> iterableClasses )
     {
         Iterable<Class> types = Iterables.cast( iterableClasses );
diff --git a/core/api/src/main/java/org/qi4j/api/unitofwork/UnitOfWork.java b/core/api/src/main/java/org/qi4j/api/unitofwork/UnitOfWork.java
index e17bc07..2ce6855 100644
--- a/core/api/src/main/java/org/qi4j/api/unitofwork/UnitOfWork.java
+++ b/core/api/src/main/java/org/qi4j/api/unitofwork/UnitOfWork.java
@@ -20,6 +20,7 @@
 import org.qi4j.api.composite.AmbiguousTypeException;
 import org.qi4j.api.entity.EntityBuilder;
 import org.qi4j.api.entity.EntityReference;
+import org.qi4j.api.entity.Identity;
 import org.qi4j.api.entity.LifecycleException;
 import org.qi4j.api.property.PropertyDescriptor;
 import org.qi4j.api.query.Query;
@@ -348,4 +349,81 @@
      * @param callback a callback to be unregistered with this UnitOfWork
      */
     void removeUnitOfWorkCallback( UnitOfWorkCallback callback );
+
+    /**
+     * Converts the provided Entity to a Value of the same type.
+     * This is a convenience method to convert an EntityComposite to a ValueComposite.
+     * <p>
+     * All Property values are transferred across as-is, and the Association, ManyAssociation
+     * and NamedAssociatino values are kept in the ValueComposite as EntityReferences
+     * until they are dereferenced (get() and other methods), and IF a UnitOfWork is
+     * present at dereferencing the corresponding EntityCompoiste is retrieved from the
+     * EntityStore. If there is not an UnitOfWork present, an exception is thrown.
+     * </p>
+     * <p>
+     * For this to work, the Composites (both Entity and Value) must not declare the
+     * EntityComposite and ValueComposite super types, but rely on the declaration in
+     * the assembly, and also extend the Identity supertype.
+     * </p>
+     * Example;
+     * <pre><code>
+     *     public interface Person extends Identity { ... };
+     *     public class MyAssembler
+     *     {
+     *         public void assemble( ModuleAssembly module )
+     *         {
+     *             module.values( Person.class );
+     *             module.entities( Person.class );
+     *         }
+     *     }
+     * </code></pre>
+     *
+     * @param primaryType The shared type for which the properties and associations will
+     *                    be converted. Properties outside this type will be ignored.
+     * @param entityComposite The entity to be convered.
+     */
+    <T extends Identity> T toValue( Class<T> primaryType, T entityComposite );
+
+    /**
+     * Converts the provided Value to an Entity of the same type.
+     * This is a convenience method to convert a ValueComposite to an EntityComposite.
+     * <p>
+     * All Property values are transferred across as-is (no deep copy in case mutable
+     * types (DISCOURAGED!) are used), and the Association, ManyAssociation
+     * and NamedAssociatino that were in the ValueComposite as EntityReferences are
+     * transferred into the EntityComposite correctly, and can be dereferenced.
+     * </p>
+     * <p>
+     * This method MUST be called within a UnitOfWork.
+     * </p>
+     * <p>
+     * If an Entity with the Identity in the ValueComposite already exists, then that
+     * Entity is updated with the values from the ValueComposite. If an Entity of
+     * that Identity doesn't exist and new one is created.
+     * </p>
+     * <p>
+     * For this to work, the Composites (both Entity and Value) must not declare the
+     * EntityComposite and ValueComposite super types, but rely on the declaration in
+     * the assembly, and also extend the Identity supertype.
+     * </p>
+     * Example;
+     * <pre><code>
+     *     public interface Person extends Identity { ... };
+     *     public class MyAssembler
+     *     {
+     *         public void assemble( ModuleAssembly module )
+     *         {
+     *             module.values( Person.class );
+     *             module.entities( Person.class );
+     *         }
+     *     }
+     * </code></pre>
+     *
+     * @param primaryType The shared type for which the properties and associations will
+     *                    be converted. Properties outside this type will be ignored.
+     * @param valueComposite The Value to be convered into an Entity.
+     */
+    <T extends Identity> T toEntity( Class<T> primaryType, T valueComposite );
+
+
 }
diff --git a/core/api/src/main/java/org/qi4j/api/unitofwork/UnitOfWorkOptions.java b/core/api/src/main/java/org/qi4j/api/unitofwork/UnitOfWorkOptions.java
index 1150854..33e544d 100644
--- a/core/api/src/main/java/org/qi4j/api/unitofwork/UnitOfWorkOptions.java
+++ b/core/api/src/main/java/org/qi4j/api/unitofwork/UnitOfWorkOptions.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.unitofwork;
 
 /**
diff --git a/core/api/src/main/java/org/qi4j/api/unitofwork/UnitOfWorkTemplate.java b/core/api/src/main/java/org/qi4j/api/unitofwork/UnitOfWorkTemplate.java
index da208ab..e8663b4 100644
--- a/core/api/src/main/java/org/qi4j/api/unitofwork/UnitOfWorkTemplate.java
+++ b/core/api/src/main/java/org/qi4j/api/unitofwork/UnitOfWorkTemplate.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.unitofwork;
 
 import org.qi4j.api.structure.Module;
diff --git a/core/api/src/main/java/org/qi4j/api/unitofwork/concern/UnitOfWorkConcern.java b/core/api/src/main/java/org/qi4j/api/unitofwork/concern/UnitOfWorkConcern.java
index 3c80b1d..c684385 100644
--- a/core/api/src/main/java/org/qi4j/api/unitofwork/concern/UnitOfWorkConcern.java
+++ b/core/api/src/main/java/org/qi4j/api/unitofwork/concern/UnitOfWorkConcern.java
@@ -22,6 +22,7 @@
 import org.qi4j.api.concern.GenericConcern;
 import org.qi4j.api.injection.scope.Invocation;
 import org.qi4j.api.injection.scope.Structure;
+import org.qi4j.api.injection.scope.Uses;
 import org.qi4j.api.structure.Module;
 import org.qi4j.api.unitofwork.ConcurrentEntityModificationException;
 import org.qi4j.api.unitofwork.UnitOfWork;
diff --git a/core/api/src/main/java/org/qi4j/api/unitofwork/concern/UnitOfWorkRetry.java b/core/api/src/main/java/org/qi4j/api/unitofwork/concern/UnitOfWorkRetry.java
index 4b2bdea..de386f9 100644
--- a/core/api/src/main/java/org/qi4j/api/unitofwork/concern/UnitOfWorkRetry.java
+++ b/core/api/src/main/java/org/qi4j/api/unitofwork/concern/UnitOfWorkRetry.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.unitofwork.concern;
 
 import java.lang.annotation.Documented;
diff --git a/core/api/src/main/java/org/qi4j/api/unitofwork/concern/package.html b/core/api/src/main/java/org/qi4j/api/unitofwork/concern/package.html
index adb838a..68cbe0e 100644
--- a/core/api/src/main/java/org/qi4j/api/unitofwork/concern/package.html
+++ b/core/api/src/main/java/org/qi4j/api/unitofwork/concern/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>UnitOfWork Concerns.</h2>
diff --git a/core/api/src/main/java/org/qi4j/api/unitofwork/package.html b/core/api/src/main/java/org/qi4j/api/unitofwork/package.html
index 4a6cf69..1bc08fa 100644
--- a/core/api/src/main/java/org/qi4j/api/unitofwork/package.html
+++ b/core/api/src/main/java/org/qi4j/api/unitofwork/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>UnitOfWork API.</h2>
diff --git a/core/api/src/main/java/org/qi4j/api/usecase/package.html b/core/api/src/main/java/org/qi4j/api/usecase/package.html
index 723baf6..71c696a 100644
--- a/core/api/src/main/java/org/qi4j/api/usecase/package.html
+++ b/core/api/src/main/java/org/qi4j/api/usecase/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Usecase API.</h2>
diff --git a/core/api/src/main/java/org/qi4j/api/util/Constructors.java b/core/api/src/main/java/org/qi4j/api/util/Constructors.java
index c9a50d6..17062ca 100644
--- a/core/api/src/main/java/org/qi4j/api/util/Constructors.java
+++ b/core/api/src/main/java/org/qi4j/api/util/Constructors.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.util;
 
 import java.lang.reflect.Constructor;
diff --git a/core/api/src/main/java/org/qi4j/api/util/Fields.java b/core/api/src/main/java/org/qi4j/api/util/Fields.java
index ea8d6e2..c68d131 100644
--- a/core/api/src/main/java/org/qi4j/api/util/Fields.java
+++ b/core/api/src/main/java/org/qi4j/api/util/Fields.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.util;
 
 import java.lang.reflect.Field;
diff --git a/core/api/src/main/java/org/qi4j/api/util/Methods.java b/core/api/src/main/java/org/qi4j/api/util/Methods.java
index d59632f..93b78cf 100644
--- a/core/api/src/main/java/org/qi4j/api/util/Methods.java
+++ b/core/api/src/main/java/org/qi4j/api/util/Methods.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.util;
 
 import java.lang.reflect.Method;
diff --git a/core/api/src/main/java/org/qi4j/api/util/package.html b/core/api/src/main/java/org/qi4j/api/util/package.html
index bc47e31..ea75db3 100644
--- a/core/api/src/main/java/org/qi4j/api/util/package.html
+++ b/core/api/src/main/java/org/qi4j/api/util/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>API Utilities.</h2>
diff --git a/core/api/src/main/java/org/qi4j/api/value/ValueBuilderTemplate.java b/core/api/src/main/java/org/qi4j/api/value/ValueBuilderTemplate.java
index 3aedbe6..11cbddb 100644
--- a/core/api/src/main/java/org/qi4j/api/value/ValueBuilderTemplate.java
+++ b/core/api/src/main/java/org/qi4j/api/value/ValueBuilderTemplate.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.value;
 
 import org.qi4j.api.structure.Module;
diff --git a/core/api/src/main/java/org/qi4j/api/value/ValueSerialization.java b/core/api/src/main/java/org/qi4j/api/value/ValueSerialization.java
index 503aa5c..31a4af0 100644
--- a/core/api/src/main/java/org/qi4j/api/value/ValueSerialization.java
+++ b/core/api/src/main/java/org/qi4j/api/value/ValueSerialization.java
@@ -43,6 +43,10 @@
          * Tag a ValueSerialization service that support the XML format.
          */
         String XML = "xml";
+        /**
+         * Tag a ValueSerialization service that support the YAML format.
+         */
+        String YAML = "yaml";
     }
 
 }
diff --git a/core/api/src/main/java/org/qi4j/api/value/ValueSerializer.java b/core/api/src/main/java/org/qi4j/api/value/ValueSerializer.java
index 13a8831..337c37e 100644
--- a/core/api/src/main/java/org/qi4j/api/value/ValueSerializer.java
+++ b/core/api/src/main/java/org/qi4j/api/value/ValueSerializer.java
@@ -174,6 +174,7 @@
          * Default to TRUE.
          */
         public static final String INCLUDE_TYPE_INFO = "includeTypeInfo";
+        public static final String MAP_ENTRIES_AS_OBJECTS = "mapentriesasobjects";
         private final Map<String, String> options = new HashMap<>();
 
         /**
@@ -181,17 +182,8 @@
          */
         public Options()
         {
-            options.put( INCLUDE_TYPE_INFO, "true" );
-        }
-
-        /**
-         * Create new ValueSerializer Options from given Map.
-         * @param options Options to copy in the new Options instance
-         */
-        public Options( Map<String, String> options )
-        {
-            this();
-            options.putAll( options );
+            this.options.put( INCLUDE_TYPE_INFO, "true" );
+            this.options.put( MAP_ENTRIES_AS_OBJECTS, "false" );
         }
 
         /**
@@ -212,6 +204,16 @@
             return put( INCLUDE_TYPE_INFO, false );
         }
 
+        public Options withMapEntriesAsObjects()
+        {
+            return put( MAP_ENTRIES_AS_OBJECTS, true );
+        }
+
+        public Options withMapEntriesAsKeyValuePairs()
+        {
+            return put( MAP_ENTRIES_AS_OBJECTS, false );
+        }
+
         /**
          * Get Boolean option value.
          * @param option The option
@@ -318,5 +320,4 @@
             return new HashMap<>( options );
         }
     }
-
 }
diff --git a/core/api/src/main/java/org/qi4j/api/value/package.html b/core/api/src/main/java/org/qi4j/api/value/package.html
index 3f203ad..540b3f6 100644
--- a/core/api/src/main/java/org/qi4j/api/value/package.html
+++ b/core/api/src/main/java/org/qi4j/api/value/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Value API.</h2>
diff --git a/core/api/src/test/java/org/qi4j/api/OperatorsTest.java b/core/api/src/test/java/org/qi4j/api/OperatorsTest.java
index 1ffaa92..6f467e5 100644
--- a/core/api/src/test/java/org/qi4j/api/OperatorsTest.java
+++ b/core/api/src/test/java/org/qi4j/api/OperatorsTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api;
 
 import org.junit.Assert;
diff --git a/core/api/src/test/java/org/qi4j/api/activation/PassivationExceptionTest.java b/core/api/src/test/java/org/qi4j/api/activation/PassivationExceptionTest.java
index 46ae026..348e32d 100644
--- a/core/api/src/test/java/org/qi4j/api/activation/PassivationExceptionTest.java
+++ b/core/api/src/test/java/org/qi4j/api/activation/PassivationExceptionTest.java
@@ -113,7 +113,7 @@
         {
             Module moduleA = app.findModule( "Layer 1", "Module A" );
             TestService service = moduleA.findService( TestService.class ).get();
-            assertThat( service.hello(), equalTo( "Hello Qi4j!" ) );
+            assertThat( service.hello(), equalTo( "Hello Zest!" ) );
         }
         finally
         {
@@ -158,7 +158,7 @@
             public String hello()
             {
                 module.name();
-                return "Hello Qi4j!";
+                return "Hello Zest!";
             }
         }
 
diff --git a/core/api/src/test/java/org/qi4j/api/common/QualifiedNameTest.java b/core/api/src/test/java/org/qi4j/api/common/QualifiedNameTest.java
index c9c0583..44015e0 100644
--- a/core/api/src/test/java/org/qi4j/api/common/QualifiedNameTest.java
+++ b/core/api/src/test/java/org/qi4j/api/common/QualifiedNameTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.common;
 
 import org.junit.Test;
diff --git a/core/api/src/test/java/org/qi4j/api/concern/DocumentationSupport.java b/core/api/src/test/java/org/qi4j/api/concern/DocumentationSupport.java
index 7d9bf6a..69cfc5c 100644
--- a/core/api/src/test/java/org/qi4j/api/concern/DocumentationSupport.java
+++ b/core/api/src/test/java/org/qi4j/api/concern/DocumentationSupport.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.concern;
 
 import java.lang.annotation.Documented;
diff --git a/core/api/src/test/java/org/qi4j/api/configuration/ConfigurationTest.java b/core/api/src/test/java/org/qi4j/api/configuration/ConfigurationTest.java
index c6ea7a2..c72afe7 100644
--- a/core/api/src/test/java/org/qi4j/api/configuration/ConfigurationTest.java
+++ b/core/api/src/test/java/org/qi4j/api/configuration/ConfigurationTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.configuration;
 
 import org.junit.Test;
diff --git a/core/api/src/test/java/org/qi4j/api/dataset/iterable/IterableDataSetTest.java b/core/api/src/test/java/org/qi4j/api/dataset/iterable/IterableDataSetTest.java
index 3830f1e..6a6c3b8 100644
--- a/core/api/src/test/java/org/qi4j/api/dataset/iterable/IterableDataSetTest.java
+++ b/core/api/src/test/java/org/qi4j/api/dataset/iterable/IterableDataSetTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.dataset.iterable;
 
 import org.junit.Before;
diff --git a/core/api/src/test/java/org/qi4j/api/docsupport/ApplicationDocs.java b/core/api/src/test/java/org/qi4j/api/docsupport/ApplicationDocs.java
index 87225ee..0db8620 100644
--- a/core/api/src/test/java/org/qi4j/api/docsupport/ApplicationDocs.java
+++ b/core/api/src/test/java/org/qi4j/api/docsupport/ApplicationDocs.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.docsupport;
 
 import org.qi4j.api.structure.Application;
diff --git a/core/api/src/test/java/org/qi4j/api/docsupport/CompositionDocs.java b/core/api/src/test/java/org/qi4j/api/docsupport/CompositionDocs.java
index f4a8e37..a6a366c 100644
--- a/core/api/src/test/java/org/qi4j/api/docsupport/CompositionDocs.java
+++ b/core/api/src/test/java/org/qi4j/api/docsupport/CompositionDocs.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.docsupport;
 
 import org.qi4j.api.mixin.Mixins;
diff --git a/core/api/src/test/java/org/qi4j/api/docsupport/package.html b/core/api/src/test/java/org/qi4j/api/docsupport/package.html
index fe65d66..f6fa115 100644
--- a/core/api/src/test/java/org/qi4j/api/docsupport/package.html
+++ b/core/api/src/test/java/org/qi4j/api/docsupport/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
 <body>
 This package exists to contain snippets for documentation.
diff --git a/core/api/src/test/java/org/qi4j/api/mixin/BankAccount.java b/core/api/src/test/java/org/qi4j/api/mixin/BankAccount.java
index ce27553..218a79c 100644
--- a/core/api/src/test/java/org/qi4j/api/mixin/BankAccount.java
+++ b/core/api/src/test/java/org/qi4j/api/mixin/BankAccount.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.mixin;
 
 
diff --git a/core/api/src/test/java/org/qi4j/api/mixin/Car.java b/core/api/src/test/java/org/qi4j/api/mixin/Car.java
index 442a979..434952b 100644
--- a/core/api/src/test/java/org/qi4j/api/mixin/Car.java
+++ b/core/api/src/test/java/org/qi4j/api/mixin/Car.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.mixin;
 
 // START SNIPPET: mixins
diff --git a/core/api/src/test/java/org/qi4j/api/mixin/Something.java b/core/api/src/test/java/org/qi4j/api/mixin/Something.java
index 86de418..027404f 100644
--- a/core/api/src/test/java/org/qi4j/api/mixin/Something.java
+++ b/core/api/src/test/java/org/qi4j/api/mixin/Something.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.mixin;
 
 // START SNIPPET: something
diff --git a/core/api/src/test/java/org/qi4j/api/mixin/SomethingMixin.java b/core/api/src/test/java/org/qi4j/api/mixin/SomethingMixin.java
index a79af9f..63153c4 100644
--- a/core/api/src/test/java/org/qi4j/api/mixin/SomethingMixin.java
+++ b/core/api/src/test/java/org/qi4j/api/mixin/SomethingMixin.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.mixin;
 
 // START SNIPPET: something
diff --git a/core/api/src/test/java/org/qi4j/api/mixin/StartMixin.java b/core/api/src/test/java/org/qi4j/api/mixin/StartMixin.java
index 71b3202..dbe1076 100644
--- a/core/api/src/test/java/org/qi4j/api/mixin/StartMixin.java
+++ b/core/api/src/test/java/org/qi4j/api/mixin/StartMixin.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.mixin;
 
 public abstract class StartMixin implements Startable
diff --git a/core/api/src/test/java/org/qi4j/api/mixin/Startable.java b/core/api/src/test/java/org/qi4j/api/mixin/Startable.java
index 593036c..3603ca2 100644
--- a/core/api/src/test/java/org/qi4j/api/mixin/Startable.java
+++ b/core/api/src/test/java/org/qi4j/api/mixin/Startable.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.mixin;
 
 // START SNIPPET: mixins
diff --git a/core/api/src/test/java/org/qi4j/api/mixin/Vehicle.java b/core/api/src/test/java/org/qi4j/api/mixin/Vehicle.java
index 3d9d442..22705b6 100644
--- a/core/api/src/test/java/org/qi4j/api/mixin/Vehicle.java
+++ b/core/api/src/test/java/org/qi4j/api/mixin/Vehicle.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.mixin;
 
 // START SNIPPET: mixins
diff --git a/core/api/src/test/java/org/qi4j/api/mixin/VehicleMixin.java b/core/api/src/test/java/org/qi4j/api/mixin/VehicleMixin.java
index 0310f34..ad19d46 100644
--- a/core/api/src/test/java/org/qi4j/api/mixin/VehicleMixin.java
+++ b/core/api/src/test/java/org/qi4j/api/mixin/VehicleMixin.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.mixin;
 
 public abstract class VehicleMixin
diff --git a/core/api/src/test/java/org/qi4j/api/mixin/decoratorMixin/DecoratorMixinTest.java b/core/api/src/test/java/org/qi4j/api/mixin/decoratorMixin/DecoratorMixinTest.java
index 8b2a27f..d761d1a 100644
--- a/core/api/src/test/java/org/qi4j/api/mixin/decoratorMixin/DecoratorMixinTest.java
+++ b/core/api/src/test/java/org/qi4j/api/mixin/decoratorMixin/DecoratorMixinTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.mixin.decoratorMixin;
 
 import java.lang.reflect.InvocationHandler;
diff --git a/core/api/src/test/java/org/qi4j/api/mixin/decoratorMixin/FooModel.java b/core/api/src/test/java/org/qi4j/api/mixin/decoratorMixin/FooModel.java
index 7f051e7..bf74db4 100644
--- a/core/api/src/test/java/org/qi4j/api/mixin/decoratorMixin/FooModel.java
+++ b/core/api/src/test/java/org/qi4j/api/mixin/decoratorMixin/FooModel.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.mixin.decoratorMixin;
 
 import org.qi4j.api.composite.DecoratorMixin;
diff --git a/core/api/src/test/java/org/qi4j/api/mixin/decoratorMixin/FooModelImpl.java b/core/api/src/test/java/org/qi4j/api/mixin/decoratorMixin/FooModelImpl.java
index c28e05f..1ad5aee 100644
--- a/core/api/src/test/java/org/qi4j/api/mixin/decoratorMixin/FooModelImpl.java
+++ b/core/api/src/test/java/org/qi4j/api/mixin/decoratorMixin/FooModelImpl.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.mixin.decoratorMixin;
 
 public class FooModelImpl
diff --git a/core/api/src/test/java/org/qi4j/api/mixin/decoratorMixin/FooModelInvocationHandler.java b/core/api/src/test/java/org/qi4j/api/mixin/decoratorMixin/FooModelInvocationHandler.java
index 294b60c..eca17f3 100644
--- a/core/api/src/test/java/org/qi4j/api/mixin/decoratorMixin/FooModelInvocationHandler.java
+++ b/core/api/src/test/java/org/qi4j/api/mixin/decoratorMixin/FooModelInvocationHandler.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.mixin.decoratorMixin;
 
 import java.lang.reflect.InvocationHandler;
diff --git a/core/api/src/test/java/org/qi4j/api/mixin/decoratorMixin/View1.java b/core/api/src/test/java/org/qi4j/api/mixin/decoratorMixin/View1.java
index 2ab4194..a890433 100644
--- a/core/api/src/test/java/org/qi4j/api/mixin/decoratorMixin/View1.java
+++ b/core/api/src/test/java/org/qi4j/api/mixin/decoratorMixin/View1.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.mixin.decoratorMixin;
 
 import org.qi4j.api.injection.scope.This;
diff --git a/core/api/src/test/java/org/qi4j/api/mixin/decoratorMixin/View2.java b/core/api/src/test/java/org/qi4j/api/mixin/decoratorMixin/View2.java
index 4824fcd..4033072 100644
--- a/core/api/src/test/java/org/qi4j/api/mixin/decoratorMixin/View2.java
+++ b/core/api/src/test/java/org/qi4j/api/mixin/decoratorMixin/View2.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.mixin.decoratorMixin;
 
 import org.qi4j.api.injection.scope.This;
diff --git a/core/api/src/test/java/org/qi4j/api/mixin/partial/Car.java b/core/api/src/test/java/org/qi4j/api/mixin/partial/Car.java
index eca0117..cd2a668 100644
--- a/core/api/src/test/java/org/qi4j/api/mixin/partial/Car.java
+++ b/core/api/src/test/java/org/qi4j/api/mixin/partial/Car.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.mixin.partial;
 
 import org.qi4j.api.mixin.Mixins;
diff --git a/core/api/src/test/java/org/qi4j/api/mixin/partial/CrashResultMixin.java b/core/api/src/test/java/org/qi4j/api/mixin/partial/CrashResultMixin.java
index c0064d1..830cb74 100644
--- a/core/api/src/test/java/org/qi4j/api/mixin/partial/CrashResultMixin.java
+++ b/core/api/src/test/java/org/qi4j/api/mixin/partial/CrashResultMixin.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.mixin.partial;
 
 public class CrashResultMixin implements Crashable
diff --git a/core/api/src/test/java/org/qi4j/api/mixin/partial/Crashable.java b/core/api/src/test/java/org/qi4j/api/mixin/partial/Crashable.java
index 838a311..7ca07d0 100644
--- a/core/api/src/test/java/org/qi4j/api/mixin/partial/Crashable.java
+++ b/core/api/src/test/java/org/qi4j/api/mixin/partial/Crashable.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.mixin.partial;
 
 public interface Crashable
diff --git a/core/api/src/test/java/org/qi4j/api/mixin/partial/SpeedLocation.java b/core/api/src/test/java/org/qi4j/api/mixin/partial/SpeedLocation.java
index 63fd749..e8119da 100644
--- a/core/api/src/test/java/org/qi4j/api/mixin/partial/SpeedLocation.java
+++ b/core/api/src/test/java/org/qi4j/api/mixin/partial/SpeedLocation.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.mixin.partial;
 
 // START SNIPPET: partial
diff --git a/core/api/src/test/java/org/qi4j/api/mixin/partial/SpeedMixin.java b/core/api/src/test/java/org/qi4j/api/mixin/partial/SpeedMixin.java
index 23bb740..3f2cf6d 100644
--- a/core/api/src/test/java/org/qi4j/api/mixin/partial/SpeedMixin.java
+++ b/core/api/src/test/java/org/qi4j/api/mixin/partial/SpeedMixin.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.mixin.partial;
 
 // START SNIPPET: partial
diff --git a/core/api/src/test/java/org/qi4j/api/mixin/partial/Vehicle.java b/core/api/src/test/java/org/qi4j/api/mixin/partial/Vehicle.java
index e71537d..4fa3597 100644
--- a/core/api/src/test/java/org/qi4j/api/mixin/partial/Vehicle.java
+++ b/core/api/src/test/java/org/qi4j/api/mixin/partial/Vehicle.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.mixin.partial;
 
 // START SNIPPET: partial
diff --git a/core/api/src/test/java/org/qi4j/api/mixin/privateMixin/Cargo.java b/core/api/src/test/java/org/qi4j/api/mixin/privateMixin/Cargo.java
index f462889..d8a8dcc 100644
--- a/core/api/src/test/java/org/qi4j/api/mixin/privateMixin/Cargo.java
+++ b/core/api/src/test/java/org/qi4j/api/mixin/privateMixin/Cargo.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.mixin.privateMixin;
 
 import org.qi4j.api.entity.EntityComposite;
diff --git a/core/api/src/test/java/org/qi4j/api/mixin/privateMixin/CargoMixin.java b/core/api/src/test/java/org/qi4j/api/mixin/privateMixin/CargoMixin.java
index bde6f2b..4bb059a 100644
--- a/core/api/src/test/java/org/qi4j/api/mixin/privateMixin/CargoMixin.java
+++ b/core/api/src/test/java/org/qi4j/api/mixin/privateMixin/CargoMixin.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.mixin.privateMixin;
 
 import org.qi4j.api.injection.scope.This;
diff --git a/core/api/src/test/java/org/qi4j/api/mixin/privateMixin/CargoState.java b/core/api/src/test/java/org/qi4j/api/mixin/privateMixin/CargoState.java
index 65d495c..f348aee 100644
--- a/core/api/src/test/java/org/qi4j/api/mixin/privateMixin/CargoState.java
+++ b/core/api/src/test/java/org/qi4j/api/mixin/privateMixin/CargoState.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.mixin.privateMixin;
 
 import org.qi4j.api.property.Property;
diff --git a/core/api/src/test/java/org/qi4j/api/unitofwork/UnitOfWorkTemplateTest.java b/core/api/src/test/java/org/qi4j/api/unitofwork/UnitOfWorkTemplateTest.java
index 7527c96..21212ae 100644
--- a/core/api/src/test/java/org/qi4j/api/unitofwork/UnitOfWorkTemplateTest.java
+++ b/core/api/src/test/java/org/qi4j/api/unitofwork/UnitOfWorkTemplateTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.unitofwork;
 
 import org.junit.Test;
diff --git a/core/api/src/test/java/org/qi4j/api/value/ValueBuilderTemplateTest.java b/core/api/src/test/java/org/qi4j/api/value/ValueBuilderTemplateTest.java
index 19e62f2..420d48e 100644
--- a/core/api/src/test/java/org/qi4j/api/value/ValueBuilderTemplateTest.java
+++ b/core/api/src/test/java/org/qi4j/api/value/ValueBuilderTemplateTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.api.value;
 
 import org.junit.Test;
diff --git a/core/api/src/test/java/org/qi4j/api/value/ValueCompositeTest.java b/core/api/src/test/java/org/qi4j/api/value/ValueCompositeTest.java
index 9d4717e..1c545a4 100644
--- a/core/api/src/test/java/org/qi4j/api/value/ValueCompositeTest.java
+++ b/core/api/src/test/java/org/qi4j/api/value/ValueCompositeTest.java
@@ -240,9 +240,11 @@
             unitOfWork.discard();
         }
 
+        // Should allow the toString() to print the entityRefs.
+        System.out.println( associationValue.toString() );
         try
         {
-            System.out.println( associationValue.toString() );
+            associationValue.some().get();
             fail( "Should have thrown an exception" );
         }
         catch( Exception e )
diff --git a/core/api/src/test/resources/org/qi4j/api/configuration/MyService.properties b/core/api/src/test/resources/org/qi4j/api/configuration/MyService.properties
index dcb6353..6ed5ff6 100644
--- a/core/api/src/test/resources/org/qi4j/api/configuration/MyService.properties
+++ b/core/api/src/test/resources/org/qi4j/api/configuration/MyService.properties
@@ -1 +1,16 @@
+# 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.
+
 me = { name : Niclas, address={ street1 : "Henan Lu 555", street2 : "Block 15", city : { cityName : "Shanghai", country : { countryName : "China" } } } }
\ No newline at end of file
diff --git a/core/bootstrap/build.gradle b/core/bootstrap/build.gradle
index 0d2f882..7f43cdc 100644
--- a/core/bootstrap/build.gradle
+++ b/core/bootstrap/build.gradle
@@ -1,10 +1,28 @@
-jar { manifest { name = "Qi4j Core Bootstrap"}}
+/*
+ * 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.
+ */
+
+jar { manifest { name = "Apache Zest™ Core Bootstrap"}}
 
 dependencies {
 
   compile project( ':org.qi4j.core:org.qi4j.core.spi' )
 
   testRuntime project( ':org.qi4j.core:org.qi4j.core.runtime' )
-  testRuntime libraries.slf4j_simple
 
 }
diff --git a/core/bootstrap/dev-status.xml b/core/bootstrap/dev-status.xml
index 55048fe..4f034dc 100644
--- a/core/bootstrap/dev-status.xml
+++ b/core/bootstrap/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/core/bootstrap/src/docs/bootstrap.txt b/core/bootstrap/src/docs/bootstrap.txt
index 80da48e..56be2d0 100644
--- a/core/bootstrap/src/docs/bootstrap.txt
+++ b/core/bootstrap/src/docs/bootstrap.txt
@@ -22,15 +22,16 @@
 source=core/bootstrap/dev-status.xml
 --------------
 
-Qi4j has a distinct bootstrap phase, also known as the _Assembly_ of an application, where the applications structure
+Zest™ has a distinct bootstrap phase, also known as the _Assembly_ of an application, where the applications structure
 is defined programmatically. Once all the layers, modules and all the composite types in each module have been defined
-the model is instantiated into an application. This enables the entire _structure_ system in Qi4j, where types "belongs"
+the model is instantiated into an application. This enables the entire _structure_ system in Zest, where types "belongs"
 to a module and visibility rules define default behaviors, enforcement of architectural integrity and much more.
 
 The _assembly_ is preceeded by the creation of the _Qi4j Runtime_. The _assembly_ can be declared fully by defining
 all modules and layers, and how the layers are sitting on top of each other, OR one can utilize one of the two
 convenience assemblies, one for a _pancake_ pattern, where all layers are top on each other, or one with a single module
-in a single layer, useful for small applications, spikes and tests.
+in a single layer, useful for small applications, spikes and tests. The +bootstrap+ system has several ways to acheive
+this, and they are listed below in <<core-bootstrap-assembly-layered>>.
 
 During _assembly_, the application (JVM level) architecture and the application model is defined. You define which
 layers exist and how they relate to each other. For each layer, you define which modules it contains. And for each
@@ -42,7 +43,7 @@
     * Add additional interfaces to composites dynamically.
     * Add concerns, mixins, constraints and side effects dynamically.
     * Set _meta information_ on defined types.
-    * Import external services to be available as Qi4j services.
+    * Import external services to be available as Zest™ services.
     * Tag services with markers
 
 include::../../build/docs/buildinfo/artifact.txt[]
@@ -125,15 +126,6 @@
 == Setting meta information on assembled types ==
 
 
-== Facilities ==
-
-=== Assembly Specifications ===
-
-=== Class Scanner ===
-
-=== Application Builder ===
-
-
 == Using Assemblers ==
 Many <<libraries,libraries>> and <<extensions,extensions>> provides a cookie-cutter _Assembler_, to simplify the set up
 of such component. Often these are suitable, but sometimes they won't fit the application in hand, in which case the
@@ -173,10 +165,48 @@
 --------------
 
 
+[[core-bootstrap-assembly-layered,Layered Application Assembler]]
+== Layered Application Assembler (RECOMMENDED!) ==
+
+In 2.1, a new way to instantiate Zest™ applications was introduced. It starts with subclassing the
++LayeredApplicationAssembler+, and implementing the +assembleLayers()+ method.
+
+In the +assembleLayers()+ method, one is epected to either call the +createLayer()+ method in the super class
+with the Class of the LayerAssembler,
+
+[source,java]
+----
+    LayerAssembly domainLayer = createLayer( DomainLayer.class );
+----
+
+OR manually instantiate and call the LayerAssembler.
+
+[source,java]
+----
+    LayerAssembly infraLayer = new InfrastructureLayer( configModule ).assemble( assembly.layer( InfrastructureLayer.NAME  ));
+----
+
+This is to make the normal case as simple as possible, yet allow the special needs that occssionally surfaces.
+
+Each LayerAssembler implementation may optionally extend the +LayeredLayerAssembler+, to get access to the
++createModule()+ method, which again simplifies the creation of modules in the +assemble()+ method.
+
+[source,java]
+----
+    createModule( layer, InvoicingModule.class );
+----
+
++ModuleAssembler+ implementations typically use +Assembler+ classes to put together, or call the +entities()+,
++values()+ methods described elsewhere on this page. There is no superclass to use.
+
++ModuleAssembler+ implementations should have a name ending with "Module" and the naming will insert a human-readable
+space within the module name, e.g. +InvoicingModule+ will be named "Invoicing Module".
+
+For example code, see the tutorial <<howto-assemble-application>>.
 
 
 == Singleton Assembler ==
-Every Qi4j runtime instance consist of One Application, with one or more Layers and one or more Modules in each Layer.
+Every Zest™ runtime instance consist of One Application, with one or more Layers and one or more Modules in each Layer.
 So the minimal application is still one layer with one module. This is not recommended other than for testing purposes
 and really trivial applications.
 
@@ -188,12 +218,44 @@
 tag=singleton
 --------------
 
-Once the SingletonAssembler constructor returns, the Qi4j application is up and running.
+Once the SingletonAssembler constructor returns, the Zest™ application is up and running.
 
 The SingletonAssembler also makes common system resources available from the bootstrap code, such as
 Module, UnitOfWorkFactory and others. This is possible since there is only one Module.
 
+== Application Builder ==
+Some applications has no need for runtime determination of the exact application structure, and no need for
+advanced alterations to a staright-forward layered application structure. By using the +ApplicationBuilder+
+it is possible to define the application structure from a JSON document, AND call the provided +main()+ class,
+taking the JSON document as input on +System.in+.
 
+The format of the JSON document, directly reflects the application structure, such as
+[source,json]
+----
+{
+    "name": "Build from JSON test.",
+    "layers": [
+        { "name": "service", "uses": [ "domain", "config"] },
+        { "name": "donfig" },
+        {
+            "name": "domain",
+            "modules" : [
+                {
+                    "name" : "Invoicing",
+                    "assemblers" : [
+                        "org.hedhman.niclas.bootstrap.InvoicingAssembler"
+                    ]
+                }
+            ]
+        }
+    ]
+}
+----
+
+At the moment, the JSON format only support +Assembler+ classes to do the work.
+
+Another way to use the +ApplicationBuilder+ is to subclass it, optionally use the +configureFromJSON()+ method,
+and then programmatically enhance the structure before calling +newApplication()+.
 
 == Pancake Assembly ==
 There is one case that stands out as a common case, and forms a reasonable middle-ground. It is where each layer sits
@@ -210,14 +272,12 @@
 tag=pancake
 --------------
 
-
-
 == Full Assembly ==
 Full Assembly means that you have the opportunity to create any layer/module hierarchy that are within the rules of the
-Qi4j runtime. It requires more support in your code to be useful, and the example below is by no means a recommended way
+Zest™ runtime. It requires more support in your code to be useful, and the example below is by no means a recommended way
 to organize large application assemblies.
 
-In principle, you first start the Qi4j runtime, call newApplication with an ApplicationAssembler instance and call
+In principle, you first start the Zest™ runtime, call newApplication with an ApplicationAssembler instance and call
 activate() on the returned application. The ApplicationAssembler instance will be called with an
 ApplicationAssemblyFactory, which is used to create an ApplicationAssembly describing the application structure.
 
diff --git a/core/bootstrap/src/docs/reference/ref-bootstrap.txt b/core/bootstrap/src/docs/reference/ref-bootstrap.txt
index e69de29..fc7aac6 100644
--- a/core/bootstrap/src/docs/reference/ref-bootstrap.txt
+++ b/core/bootstrap/src/docs/reference/ref-bootstrap.txt
@@ -0,0 +1,18 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
diff --git a/core/bootstrap/src/main/java/org/qi4j/bootstrap/ApplicationAssemblyFactory.java b/core/bootstrap/src/main/java/org/qi4j/bootstrap/ApplicationAssemblyFactory.java
index 977627c..5d86bf9 100644
--- a/core/bootstrap/src/main/java/org/qi4j/bootstrap/ApplicationAssemblyFactory.java
+++ b/core/bootstrap/src/main/java/org/qi4j/bootstrap/ApplicationAssemblyFactory.java
@@ -19,7 +19,7 @@
 package org.qi4j.bootstrap;
 
 /**
- * Factory for creating new Qi4j application assemblies. Typically
+ * Factory for creating new Zest application assemblies. Typically
  * you will implement one or more Assemblers, wrap them in an ApplicationAssembler,
  * which then uses this factory to assemble and create applications.
  */
diff --git a/core/bootstrap/src/main/java/org/qi4j/bootstrap/Assembler.java b/core/bootstrap/src/main/java/org/qi4j/bootstrap/Assembler.java
index 5914a87..b2ffe34 100644
--- a/core/bootstrap/src/main/java/org/qi4j/bootstrap/Assembler.java
+++ b/core/bootstrap/src/main/java/org/qi4j/bootstrap/Assembler.java
@@ -18,7 +18,7 @@
  * ModuleAssemblies are configured by Assemblers. This
  * is the interface you would implement in order to provide
  * all configuration and additional metainfo that is needed
- * to instantiate a Qi4j application.
+ * to instantiate a Zest application.
  */
 public interface Assembler
 {
diff --git a/core/bootstrap/src/main/java/org/qi4j/bootstrap/AssemblySpecifications.java b/core/bootstrap/src/main/java/org/qi4j/bootstrap/AssemblySpecifications.java
index a8294d8..66fafc7 100644
--- a/core/bootstrap/src/main/java/org/qi4j/bootstrap/AssemblySpecifications.java
+++ b/core/bootstrap/src/main/java/org/qi4j/bootstrap/AssemblySpecifications.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.bootstrap;
 
 import org.qi4j.api.type.HasTypes;
diff --git a/core/bootstrap/src/main/java/org/qi4j/bootstrap/BindingException.java b/core/bootstrap/src/main/java/org/qi4j/bootstrap/BindingException.java
index c3d9004..dbadbfd 100644
--- a/core/bootstrap/src/main/java/org/qi4j/bootstrap/BindingException.java
+++ b/core/bootstrap/src/main/java/org/qi4j/bootstrap/BindingException.java
@@ -15,7 +15,7 @@
 package org.qi4j.bootstrap;
 
 /**
- * Thrown by the Qi4j runtime if a dependency can not be bound.
+ * Thrown by the Zest runtime if a dependency can not be bound.
  */
 public class BindingException
     extends Exception
diff --git a/core/bootstrap/src/main/java/org/qi4j/bootstrap/ConfigurationAssembly.java b/core/bootstrap/src/main/java/org/qi4j/bootstrap/ConfigurationAssembly.java
new file mode 100644
index 0000000..8f45332
--- /dev/null
+++ b/core/bootstrap/src/main/java/org/qi4j/bootstrap/ConfigurationAssembly.java
@@ -0,0 +1,28 @@
+/*
+ *  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.qi4j.bootstrap;
+
+import org.qi4j.api.type.HasTypes;
+
+/**
+ * This represents the assembly information of a single ConfigurationComposite in a Module.
+ */
+public interface ConfigurationAssembly
+    extends HasTypes
+{
+}
diff --git a/core/bootstrap/src/main/java/org/qi4j/bootstrap/ConfigurationDeclaration.java b/core/bootstrap/src/main/java/org/qi4j/bootstrap/ConfigurationDeclaration.java
new file mode 100644
index 0000000..ef10c35
--- /dev/null
+++ b/core/bootstrap/src/main/java/org/qi4j/bootstrap/ConfigurationDeclaration.java
@@ -0,0 +1,87 @@
+/*
+ *  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.qi4j.bootstrap;
+
+import org.qi4j.api.common.Visibility;
+
+/**
+ * Fluent API for declaring configurations. Instances
+ * of this API are acquired by calling {@link ModuleAssembly#configurations(Class[])}.
+ */
+public interface ConfigurationDeclaration
+{
+    /**
+     * Set additional metainfo for this configuration declaration.
+     *
+     * @param info metainfo that can be retrieved from the CompositeDescriptor.
+     *
+     * @return This instance for a fluid DSL
+     */
+    ConfigurationDeclaration setMetaInfo( Object info );
+
+    /**
+     * Set visibility for declared entities.
+     *
+     * @param visibility The {@link Visibility} that this ConfigurationComposite will have.
+     *
+     * @return This instance for a fluid DSL
+     */
+    ConfigurationDeclaration visibleIn( Visibility visibility );
+
+    /**
+     * Declare additional concerns for these configurations.
+     *
+     * @param concerns The concerns that are to be added to the ConfigurationComposite beyond the statically declared ones.
+     *
+     * @return This instance for a fluid DSL
+     */
+    ConfigurationDeclaration withConcerns( Class<?>... concerns );
+
+    /**
+     * Declare additional side-effects for these configurations.
+     *
+     * @param sideEffects The sideeffects that are to be added to the ConfigurationComposite beyond the statically declared ones.
+     *
+     * @return This instance for a fluid DSL
+     */
+    ConfigurationDeclaration withSideEffects( Class<?>... sideEffects );
+
+    /**
+     * Declare additional mixins for these configurations.
+     * <p>
+     * This can be useful to override any default mixins from the configuration interface.
+     * </p>
+     * @param mixins The mixins that are to be added to the ConfigurationComposite beyond the statically declared ones.
+     *
+     * @return This instance for a fluid DSL
+     */
+    ConfigurationDeclaration withMixins( Class<?>... mixins );
+
+    /**
+     * Declare additional interfaces for these declared interfaces.
+     * <p>
+     * This can be useful to add types that the Configuration should implement, but
+     * which you do not want to include in the entity interface itself.
+     * </p>
+     * @param types list of interfaces to add
+     *
+     * @return This instance for a fluid DSL
+     */
+    ConfigurationDeclaration withTypes( Class<?>... types );
+}
diff --git a/core/bootstrap/src/main/java/org/qi4j/bootstrap/Energy4Java.java b/core/bootstrap/src/main/java/org/qi4j/bootstrap/Energy4Java.java
index 71dd525..d9cdc18 100644
--- a/core/bootstrap/src/main/java/org/qi4j/bootstrap/Energy4Java.java
+++ b/core/bootstrap/src/main/java/org/qi4j/bootstrap/Energy4Java.java
@@ -24,7 +24,7 @@
 import org.qi4j.spi.Qi4jSPI;
 
 /**
- * Main bootstrap class for starting Qi4j and creating new applications.
+ * Main bootstrap class for starting Zest and creating new applications.
  * <p>
  * Instantiate this and call one of the factory methods to get started.
  * </p>
@@ -51,7 +51,7 @@
     {
         if( runtime == null )
         {
-            throw new BootstrapException( "Can not create Qi4j without a Qi4j Runtime." );
+            throw new BootstrapException( "Can not create Zest without a Zest Runtime." );
         }
         this.runtime = runtime;
     }
diff --git a/core/bootstrap/src/main/java/org/qi4j/bootstrap/EntityAssembly.java b/core/bootstrap/src/main/java/org/qi4j/bootstrap/EntityAssembly.java
index fe8dff1..ef608ed 100644
--- a/core/bootstrap/src/main/java/org/qi4j/bootstrap/EntityAssembly.java
+++ b/core/bootstrap/src/main/java/org/qi4j/bootstrap/EntityAssembly.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.bootstrap;
 
 import org.qi4j.api.type.HasTypes;
diff --git a/core/bootstrap/src/main/java/org/qi4j/bootstrap/ImportedServiceAssembly.java b/core/bootstrap/src/main/java/org/qi4j/bootstrap/ImportedServiceAssembly.java
index fb46ded..2d9320e 100644
--- a/core/bootstrap/src/main/java/org/qi4j/bootstrap/ImportedServiceAssembly.java
+++ b/core/bootstrap/src/main/java/org/qi4j/bootstrap/ImportedServiceAssembly.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.bootstrap;
 
 import org.qi4j.api.type.HasTypes;
diff --git a/core/bootstrap/src/main/java/org/qi4j/bootstrap/InjectionException.java b/core/bootstrap/src/main/java/org/qi4j/bootstrap/InjectionException.java
index a2ed3b6..bb0d782 100644
--- a/core/bootstrap/src/main/java/org/qi4j/bootstrap/InjectionException.java
+++ b/core/bootstrap/src/main/java/org/qi4j/bootstrap/InjectionException.java
@@ -15,7 +15,7 @@
 package org.qi4j.bootstrap;
 
 /**
- * Thrown by the Qi4j runtime if a dependency can not be injected.
+ * Thrown by the Zest runtime if a dependency can not be injected.
  */
 public class InjectionException
     extends RuntimeException
diff --git a/core/bootstrap/src/main/java/org/qi4j/bootstrap/InvalidInjectionException.java b/core/bootstrap/src/main/java/org/qi4j/bootstrap/InvalidInjectionException.java
index 0c2512c..d3f18d9 100644
--- a/core/bootstrap/src/main/java/org/qi4j/bootstrap/InvalidInjectionException.java
+++ b/core/bootstrap/src/main/java/org/qi4j/bootstrap/InvalidInjectionException.java
@@ -1,7 +1,25 @@
+/*
+ * 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.qi4j.bootstrap;
 
 /**
- * Thrown by the Qi4j runtime if a dependency injection declaration is invalid.
+ * Thrown by the Zest runtime if a dependency injection declaration is invalid.
  */
 public class InvalidInjectionException
     extends Exception
diff --git a/core/bootstrap/src/main/java/org/qi4j/bootstrap/ModuleAssembly.java b/core/bootstrap/src/main/java/org/qi4j/bootstrap/ModuleAssembly.java
index 805b232..4e473b4 100644
--- a/core/bootstrap/src/main/java/org/qi4j/bootstrap/ModuleAssembly.java
+++ b/core/bootstrap/src/main/java/org/qi4j/bootstrap/ModuleAssembly.java
@@ -21,6 +21,7 @@
 
 import org.qi4j.api.activation.Activator;
 import org.qi4j.api.structure.Module;
+import org.qi4j.api.type.HasTypes;
 import org.qi4j.functional.Specification;
 
 /**
@@ -66,6 +67,8 @@
      */
     String name();
 
+    ModuleAssembly setMetaInfo( Object info );
+
     /**
      * Set the module activators. Activators are executed in order around the
      * Module activation and passivation.
@@ -138,6 +141,27 @@
     EntityDeclaration entities( Specification<? super EntityAssembly> specification );
 
     /**
+     * Declare a list of Configuration Composites for this Module. Use the ConfigurationDeclaration that is returned to
+     * declare further settings. Note that the ConfigurationDeclaration works on all of the types specified.
+     *
+     * @param configurationTypes The types that specifies the Configuration types.
+     *
+     * @return An ConfigurationDeclaration for the specified Configuration types.
+     */
+    ConfigurationDeclaration configurations( Class<?>... configurationTypes );
+
+    /**
+     * Given a Specification for ConfigurationAssembly's, returns a ConfigurationDeclaration that can
+     * be used to work with all of the assemblies matched by the specification.
+     *
+     * @param specification The Specification that specifies the ConfigurationComposite types of interest.
+     *
+     * @return An ConfigurationDeclaration for the specified EntityComposite types.
+     */
+    ConfigurationDeclaration configurations( Specification<HasTypes> specification );
+
+
+    /**
      * Declare a list of object classes for this Module. Use the ObjectDeclaration that is returned to
      * declare further settings. Note that the ObjectDeclaration works on all of the types specified.
      *
diff --git a/core/bootstrap/src/main/java/org/qi4j/bootstrap/ObjectAssembly.java b/core/bootstrap/src/main/java/org/qi4j/bootstrap/ObjectAssembly.java
index 3e15edb..e424cf6 100644
--- a/core/bootstrap/src/main/java/org/qi4j/bootstrap/ObjectAssembly.java
+++ b/core/bootstrap/src/main/java/org/qi4j/bootstrap/ObjectAssembly.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.bootstrap;
 
 import org.qi4j.api.type.HasTypes;
diff --git a/core/bootstrap/src/main/java/org/qi4j/bootstrap/Qi4jRuntime.java b/core/bootstrap/src/main/java/org/qi4j/bootstrap/Qi4jRuntime.java
index fcf4d1c..76e6130 100644
--- a/core/bootstrap/src/main/java/org/qi4j/bootstrap/Qi4jRuntime.java
+++ b/core/bootstrap/src/main/java/org/qi4j/bootstrap/Qi4jRuntime.java
@@ -18,7 +18,7 @@
 import org.qi4j.spi.Qi4jSPI;
 
 /**
- * This interface has to be implemented by Qi4j runtimes.
+ * This interface has to be implemented by Zest runtimes.
  */
 public interface Qi4jRuntime
 {
diff --git a/core/bootstrap/src/main/java/org/qi4j/bootstrap/RuntimeFactory.java b/core/bootstrap/src/main/java/org/qi4j/bootstrap/RuntimeFactory.java
index 6dd5d2a..b4efd24 100644
--- a/core/bootstrap/src/main/java/org/qi4j/bootstrap/RuntimeFactory.java
+++ b/core/bootstrap/src/main/java/org/qi4j/bootstrap/RuntimeFactory.java
@@ -1,14 +1,32 @@
+/*
+ * 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.qi4j.bootstrap;
 
 /**
- * Qi4j runtime factory.
+ * Zest runtime factory.
  */
 public interface RuntimeFactory
 {
     Qi4jRuntime createRuntime();
 
     /**
-     * Standalone application Qi4j runtime factory.
+     * Standalone application Zest runtime factory.
      */
     public final class StandaloneApplicationRuntimeFactory
         implements RuntimeFactory
@@ -24,11 +42,11 @@
             }
             catch( ClassNotFoundException e )
             {
-                System.err.println( "Qi4j Runtime jar is not present in the classpath." );
+                System.err.println( "Zest Runtime jar is not present in the classpath." );
             }
             catch( InstantiationException | IllegalAccessException e )
             {
-                System.err.println( "Invalid Qi4j Runtime class. If you are providing your own Qi4j Runtime, please " +
+                System.err.println( "Invalid Zest Runtime class. If you are providing your own Zest Runtime, please " +
                                     "contact qi4j-dev at Google Groups for assistance." );
             }
             return null;
diff --git a/core/bootstrap/src/main/java/org/qi4j/bootstrap/ServiceAssembly.java b/core/bootstrap/src/main/java/org/qi4j/bootstrap/ServiceAssembly.java
index c45d2bf..27ce698 100644
--- a/core/bootstrap/src/main/java/org/qi4j/bootstrap/ServiceAssembly.java
+++ b/core/bootstrap/src/main/java/org/qi4j/bootstrap/ServiceAssembly.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.bootstrap;
 
 import org.qi4j.api.type.HasTypes;
diff --git a/core/bootstrap/src/main/java/org/qi4j/bootstrap/ServiceDeclaration.java b/core/bootstrap/src/main/java/org/qi4j/bootstrap/ServiceDeclaration.java
index bdbdeea..c566c59 100644
--- a/core/bootstrap/src/main/java/org/qi4j/bootstrap/ServiceDeclaration.java
+++ b/core/bootstrap/src/main/java/org/qi4j/bootstrap/ServiceDeclaration.java
@@ -23,7 +23,7 @@
 import org.qi4j.api.common.Visibility;
 
 /**
- * Fluent API for declaring services hosted in Qi4j. Instances
+ * Fluent API for declaring services hosted in Zest. Instances
  * of this API are acquired by calling {@link ModuleAssembly#services(Class[])}.
  */
 public interface ServiceDeclaration
diff --git a/core/bootstrap/src/main/java/org/qi4j/bootstrap/SingletonAssembler.java b/core/bootstrap/src/main/java/org/qi4j/bootstrap/SingletonAssembler.java
index 255bd29..7d2542d 100644
--- a/core/bootstrap/src/main/java/org/qi4j/bootstrap/SingletonAssembler.java
+++ b/core/bootstrap/src/main/java/org/qi4j/bootstrap/SingletonAssembler.java
@@ -35,7 +35,7 @@
     private final Module moduleInstance;
 
     /**
-     * Creates a Qi4j Runtime instance containing one Layer with one Module.
+     * Creates a Zest Runtime instance containing one Layer with one Module.
      * The Layer will be named "Layer 1" and the Module will be named "Module 1". It is possible to add
      * additional layers and modules via the Assembler interface that must be implemented in the subclass of this
      * class.
diff --git a/core/bootstrap/src/main/java/org/qi4j/bootstrap/TransientAssembly.java b/core/bootstrap/src/main/java/org/qi4j/bootstrap/TransientAssembly.java
index 2d9f0d9..f3e2a58 100644
--- a/core/bootstrap/src/main/java/org/qi4j/bootstrap/TransientAssembly.java
+++ b/core/bootstrap/src/main/java/org/qi4j/bootstrap/TransientAssembly.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.bootstrap;
 
 import org.qi4j.api.type.HasTypes;
diff --git a/core/bootstrap/src/main/java/org/qi4j/bootstrap/ValueAssembly.java b/core/bootstrap/src/main/java/org/qi4j/bootstrap/ValueAssembly.java
index e16591c..9f98406 100644
--- a/core/bootstrap/src/main/java/org/qi4j/bootstrap/ValueAssembly.java
+++ b/core/bootstrap/src/main/java/org/qi4j/bootstrap/ValueAssembly.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.bootstrap;
 
 import org.qi4j.api.type.HasTypes;
diff --git a/core/bootstrap/src/main/java/org/qi4j/bootstrap/builder/ApplicationBuilder.java b/core/bootstrap/src/main/java/org/qi4j/bootstrap/builder/ApplicationBuilder.java
index c008e5f..d68a3d5 100644
--- a/core/bootstrap/src/main/java/org/qi4j/bootstrap/builder/ApplicationBuilder.java
+++ b/core/bootstrap/src/main/java/org/qi4j/bootstrap/builder/ApplicationBuilder.java
@@ -180,6 +180,19 @@
     {
         String applicationName = root.getString( "name" );
         ApplicationBuilder builder = new ApplicationBuilder( applicationName );
+        builder.configureWithJson( root );
+        return builder;
+    }
+
+    /** Configures the application struucture from a JSON document.
+     *
+     * @param root The JSON document root.
+     * @throws JSONException if the JSON document isn't valid.
+     * @throws AssemblyException if probelms in the Assemblers provided in the JSON document.
+     */
+    protected void configureWithJson( JSONObject root )
+        throws JSONException, AssemblyException
+    {
         JSONArray layers = root.optJSONArray( "layers" );
         if( layers != null )
         {
@@ -187,7 +200,7 @@
             {
                 JSONObject layerObject = layers.getJSONObject( i );
                 String layerName = layerObject.getString( "name" );
-                LayerDeclaration layerDeclaration = builder.withLayer( layerName );
+                LayerDeclaration layerDeclaration = withLayer( layerName );
                 JSONArray using = layerObject.optJSONArray( "uses" );
                 if( using != null )
                 {
@@ -209,14 +222,14 @@
                         {
                             for( int m = 0; m < assemblers.length(); m++ )
                             {
-                                moduleDeclaration.withAssembler( assemblers.getString( m ) );
+                                String string = assemblers.getString( m );
+                                moduleDeclaration.withAssembler( string );
                             }
                         }
                     }
                 }
             }
         }
-        return builder;
     }
 
     /**
diff --git a/core/bootstrap/src/main/java/org/qi4j/bootstrap/builder/package.html b/core/bootstrap/src/main/java/org/qi4j/bootstrap/builder/package.html
index 8188d35..663b016 100644
--- a/core/bootstrap/src/main/java/org/qi4j/bootstrap/builder/package.html
+++ b/core/bootstrap/src/main/java/org/qi4j/bootstrap/builder/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Application Builder.</h2>
diff --git a/libraries/struts2-codebehind/src/main/resources/struts-plugin.xml b/core/bootstrap/src/main/java/org/qi4j/bootstrap/layered/LayerAssembler.java
similarity index 61%
copy from libraries/struts2-codebehind/src/main/resources/struts-plugin.xml
copy to core/bootstrap/src/main/java/org/qi4j/bootstrap/layered/LayerAssembler.java
index ccf2c42..c8a7b88 100644
--- a/libraries/struts2-codebehind/src/main/resources/struts-plugin.xml
+++ b/core/bootstrap/src/main/java/org/qi4j/bootstrap/layered/LayerAssembler.java
@@ -1,8 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
 /*
- * $Id: pom.xml 559206 2007-07-24 21:01:18Z apetrelli $
- *
  * 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
@@ -11,7 +7,7 @@
  * "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
+ *   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
@@ -20,13 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
--->
+package org.qi4j.bootstrap.layered;
 
-<!DOCTYPE struts PUBLIC
-  "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-  "http://struts.apache.org/dtds/struts-2.0.dtd">
+import org.qi4j.bootstrap.ApplicationAssembly;
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.LayerAssembly;
 
-<struts>
-  <bean type="com.opensymphony.xwork2.config.PackageProvider" name="qi4j"
-        class="org.qi4j.library.struts2.codebehind.Qi4jCodebehindPackageProvider"/>
-</struts>
+public interface LayerAssembler
+{
+    LayerAssembly assemble( LayerAssembly layer )
+        throws AssemblyException;
+}
diff --git a/core/bootstrap/src/main/java/org/qi4j/bootstrap/layered/LayeredApplicationAssembler.java b/core/bootstrap/src/main/java/org/qi4j/bootstrap/layered/LayeredApplicationAssembler.java
new file mode 100644
index 0000000..b399711
--- /dev/null
+++ b/core/bootstrap/src/main/java/org/qi4j/bootstrap/layered/LayeredApplicationAssembler.java
@@ -0,0 +1,212 @@
+/*
+ * 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.qi4j.bootstrap.layered;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.HashMap;
+import org.qi4j.api.activation.ActivationException;
+import org.qi4j.api.activation.PassivationException;
+import org.qi4j.api.structure.Application;
+import org.qi4j.api.structure.ApplicationDescriptor;
+import org.qi4j.bootstrap.ApplicationAssembler;
+import org.qi4j.bootstrap.ApplicationAssembly;
+import org.qi4j.bootstrap.ApplicationAssemblyFactory;
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.Energy4Java;
+import org.qi4j.bootstrap.LayerAssembly;
+
+public abstract class LayeredApplicationAssembler
+    implements ApplicationAssembler
+{
+    protected Application application;
+    protected String name;
+    protected String version;
+    private final Application.Mode mode;
+    private ApplicationAssembly assembly;
+
+    private HashMap<Class<? extends LayerAssembler>, LayerAssembler> assemblers = new HashMap<>();
+
+    public LayeredApplicationAssembler( String name, String version, Application.Mode mode )
+        throws AssemblyException
+    {
+        this.name = name;
+        this.version = version;
+        this.mode = mode;
+        Energy4Java qi4j = new Energy4Java();
+        ApplicationDescriptor model = qi4j.newApplicationModel( this );
+        onModelCreated( model );
+        instantiateApplication( qi4j, model );
+    }
+
+    public ApplicationAssembly assembly()
+    {
+        return assembly;
+    }
+
+    /**
+     * This method is called from the constructor to instantiate the Zest application from the application model.
+     *
+     * <p>
+     * The default implementation simply calls;
+     * </p>
+     * <pre><code>
+     *   application = model.newInstance( qi4j.spi() );
+     * </code></pre>
+     *
+     * @param qi4j  The Zest runtime engine.
+     * @param model The application model descriptor.
+     */
+    protected void instantiateApplication( Energy4Java qi4j, ApplicationDescriptor model )
+    {
+        application = model.newInstance( qi4j.spi() );
+    }
+
+    /**
+     * This method is called after the Application Model has been created, before the instantiation of the Zest
+     * application.
+     *
+     * <p>
+     * The default implementation does nothing. Applications may have advanced features to inspect or
+     * modify the model prior to instantiation, and this is the place where such advanced manipulation is
+     * expected to take place.
+     * </p>
+     *
+     * @param model
+     */
+    protected void onModelCreated( ApplicationDescriptor model )
+    {
+    }
+
+    public Application application()
+    {
+        return application;
+    }
+
+    public void start()
+        throws ActivationException
+    {
+        application.activate();
+    }
+
+    public void stop()
+        throws PassivationException
+    {
+        application.passivate();
+    }
+
+    @Override
+    public ApplicationAssembly assemble( ApplicationAssemblyFactory applicationFactory )
+        throws AssemblyException
+    {
+        assembly = applicationFactory.newApplicationAssembly();
+        assembly.setName( name );
+        assembly.setVersion( version );
+        assembly.setMode( mode );
+        assembleLayers( assembly );
+        return assembly;
+    }
+
+    protected LayerAssembly createLayer( Class<? extends LayerAssembler> layerAssemblerClass )
+        throws IllegalArgumentException
+    {
+        try
+        {
+            String classname = layerAssemblerClass.getSimpleName();
+            if( classname.endsWith( "Layer" ) )
+            {
+                classname = classname.substring( 0, classname.length() - 5 ) + " Layer";
+            }
+            setNameIfPresent( layerAssemblerClass, classname );
+            LayerAssembly layer = assembly.layer( classname );
+
+            LayerAssembler layerAssembler = instantiateAssembler( layerAssemblerClass, layer );
+            assemblers.put( layerAssemblerClass, layerAssembler );
+            LayerAssembly assembly = layerAssembler.assemble( layer );
+            if( assembly == null )
+            {
+                // Assume that people forgot, and let's not require a "return layer", since we can do that ourselves.
+                return layer;
+            }
+            return assembly;
+        }
+        catch( Exception e )
+        {
+            throw new IllegalArgumentException( "Unable to instantiate layer with " + layerAssemblerClass.getSimpleName(), e );
+        }
+    }
+
+    private LayerAssembler instantiateAssembler( Class<? extends LayerAssembler> layerAssemblerClass,
+                                                 LayerAssembly layer
+    )
+        throws InstantiationException, IllegalAccessException, java.lang.reflect.InvocationTargetException
+    {
+        LayerAssembler layerAssembler;
+        try
+        {
+            Constructor<? extends LayerAssembler> assemblyConstructor = layerAssemblerClass.getConstructor( LayerAssembly.class );
+            layerAssembler = assemblyConstructor.newInstance( layer );
+        }
+        catch( NoSuchMethodException e )
+        {
+            // Use default constructor then.
+            layerAssembler = layerAssemblerClass.newInstance();
+        }
+        return layerAssembler;
+    }
+
+    static void setNameIfPresent( Class<?> clazz, String classname )
+        throws IllegalAccessException
+    {
+        try
+        {
+            Field field = clazz.getDeclaredField( "NAME" );
+            if( Modifier.isStatic( field.getModifiers() ) )
+            {
+                field.setAccessible( true );
+                field.set( null, classname );
+            }
+        }
+        catch( Exception e )
+        {
+            // Ignore and consider normal.
+        }
+    }
+
+    @SuppressWarnings( "unchecked" )
+    protected <T extends LayerAssembler> T assemblerOf( Class<T> layerAssemblerClass )
+    {
+        return (T) assemblers.get( layerAssemblerClass );
+    }
+
+    /**
+     * Called from the constructor to assemble the layers in the applcation.
+     *
+     * <p>
+     * This method must be implemented, and is typically a list of LayerAssmebler instantitations, followed
+     * by {@link LayerAssembly#uses(LayerAssembly...)} declarations.
+     * </p>
+     * <pre><code>
+     *
+     * </code></pre>
+     */
+    protected abstract void assembleLayers( ApplicationAssembly assembly )
+        throws AssemblyException;
+}
diff --git a/core/bootstrap/src/main/java/org/qi4j/bootstrap/layered/LayeredLayerAssembler.java b/core/bootstrap/src/main/java/org/qi4j/bootstrap/layered/LayeredLayerAssembler.java
new file mode 100644
index 0000000..def4a46
--- /dev/null
+++ b/core/bootstrap/src/main/java/org/qi4j/bootstrap/layered/LayeredLayerAssembler.java
@@ -0,0 +1,86 @@
+/*
+ * 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.qi4j.bootstrap.layered;
+
+import java.lang.reflect.Constructor;
+import java.util.HashMap;
+import org.qi4j.bootstrap.LayerAssembly;
+import org.qi4j.bootstrap.ModuleAssembly;
+
+public abstract class LayeredLayerAssembler
+    implements LayerAssembler
+{
+    private HashMap<Class<? extends ModuleAssembler>, ModuleAssembler> assemblers = new HashMap<>();
+
+    protected ModuleAssembly createModule( LayerAssembly layer, Class<? extends ModuleAssembler> modulerAssemblerClass )
+    {
+        try
+        {
+            ModuleAssembler moduleAssembler = instantiateAssembler( layer, modulerAssemblerClass );
+            String moduleName = createModuleName( modulerAssemblerClass );
+            LayeredApplicationAssembler.setNameIfPresent( modulerAssemblerClass, moduleName );
+            ModuleAssembly module = layer.module( moduleName );
+            assemblers.put( modulerAssemblerClass, moduleAssembler );
+            ModuleAssembly assembly = moduleAssembler.assemble( layer, module );
+            if( assembly == null )
+            {
+                return module;
+            }
+            return assembly;
+        }
+        catch( Exception e )
+        {
+            throw new IllegalArgumentException( "Unable to instantiate module with " + modulerAssemblerClass.getSimpleName(), e );
+        }
+    }
+
+    protected String createModuleName( Class<? extends ModuleAssembler> modulerAssemblerClass )
+    {
+        String moduleName = modulerAssemblerClass.getSimpleName();
+        if( moduleName.endsWith( "Module" ) )
+        {
+            moduleName = moduleName.substring( 0, moduleName.length() - 6 ) + " Module";
+        }
+        return moduleName;
+    }
+
+    private ModuleAssembler instantiateAssembler( LayerAssembly layer,
+                                                  Class<? extends ModuleAssembler> modulerAssemblerClass
+    )
+        throws InstantiationException, IllegalAccessException, java.lang.reflect.InvocationTargetException
+    {
+        ModuleAssembler moduleAssembler;
+        try
+        {
+            Constructor<? extends ModuleAssembler> assemblyConstructor = modulerAssemblerClass.getConstructor( ModuleAssembly.class );
+            moduleAssembler = assemblyConstructor.newInstance( layer );
+        }
+        catch( NoSuchMethodException e )
+        {
+            moduleAssembler = modulerAssemblerClass.newInstance();
+        }
+        return moduleAssembler;
+    }
+
+    @SuppressWarnings( "unchecked" )
+    protected <T extends ModuleAssembler> T assemblerOf( Class<T> moduleAssemblerType )
+    {
+        return (T) assemblers.get( moduleAssemblerType );
+    }
+}
diff --git a/libraries/struts2-codebehind/src/main/resources/struts-plugin.xml b/core/bootstrap/src/main/java/org/qi4j/bootstrap/layered/ModuleAssembler.java
similarity index 61%
rename from libraries/struts2-codebehind/src/main/resources/struts-plugin.xml
rename to core/bootstrap/src/main/java/org/qi4j/bootstrap/layered/ModuleAssembler.java
index ccf2c42..17c8765 100644
--- a/libraries/struts2-codebehind/src/main/resources/struts-plugin.xml
+++ b/core/bootstrap/src/main/java/org/qi4j/bootstrap/layered/ModuleAssembler.java
@@ -1,8 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
 /*
- * $Id: pom.xml 559206 2007-07-24 21:01:18Z apetrelli $
- *
  * 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
@@ -11,7 +7,7 @@
  * "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
+ *   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
@@ -20,13 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
--->
+package org.qi4j.bootstrap.layered;
 
-<!DOCTYPE struts PUBLIC
-  "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-  "http://struts.apache.org/dtds/struts-2.0.dtd">
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.LayerAssembly;
+import org.qi4j.bootstrap.ModuleAssembly;
 
-<struts>
-  <bean type="com.opensymphony.xwork2.config.PackageProvider" name="qi4j"
-        class="org.qi4j.library.struts2.codebehind.Qi4jCodebehindPackageProvider"/>
-</struts>
+public interface ModuleAssembler
+{
+    ModuleAssembly assemble( LayerAssembly layer, ModuleAssembly module )
+        throws AssemblyException;
+}
diff --git a/core/bootstrap/src/main/java/org/qi4j/bootstrap/layered/package.html b/core/bootstrap/src/main/java/org/qi4j/bootstrap/layered/package.html
new file mode 100644
index 0000000..60cdec2
--- /dev/null
+++ b/core/bootstrap/src/main/java/org/qi4j/bootstrap/layered/package.html
@@ -0,0 +1,21 @@
+<!--
+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.
+-->
+<html>
+    <body>
+        <h2>Layered Assembly.</h2>
+    </body>
+</html>
diff --git a/core/bootstrap/src/main/java/org/qi4j/bootstrap/package.html b/core/bootstrap/src/main/java/org/qi4j/bootstrap/package.html
index a0bdb78..0458761 100644
--- a/core/bootstrap/src/main/java/org/qi4j/bootstrap/package.html
+++ b/core/bootstrap/src/main/java/org/qi4j/bootstrap/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Assembly and Bootstrap API.</h2>
diff --git a/core/bootstrap/src/test/java/org/qi4j/bootstrap/ClassScannerTest.java b/core/bootstrap/src/test/java/org/qi4j/bootstrap/ClassScannerTest.java
index 476b097..33c9e21 100644
--- a/core/bootstrap/src/test/java/org/qi4j/bootstrap/ClassScannerTest.java
+++ b/core/bootstrap/src/test/java/org/qi4j/bootstrap/ClassScannerTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.bootstrap;
 
 import org.junit.Assert;
diff --git a/core/bootstrap/src/test/java/org/qi4j/bootstrap/DocumentationSupport.java b/core/bootstrap/src/test/java/org/qi4j/bootstrap/DocumentationSupport.java
index 547cf87..ae57305 100644
--- a/core/bootstrap/src/test/java/org/qi4j/bootstrap/DocumentationSupport.java
+++ b/core/bootstrap/src/test/java/org/qi4j/bootstrap/DocumentationSupport.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.bootstrap;
 
 import org.qi4j.api.activation.ActivationException;
@@ -309,7 +327,7 @@
         public static void main( String[] args )
                 throws Exception
         {
-            // Create a Qi4j Runtime
+            // Create a Zest Runtime
             qi4j = new Energy4Java();
             application = qi4j.newApplication( new ApplicationAssembler()
             {
diff --git a/core/bootstrap/src/test/java/org/qi4j/bootstrap/TestValue.java b/core/bootstrap/src/test/java/org/qi4j/bootstrap/TestValue.java
index 8c2bb84..c94b1ff 100644
--- a/core/bootstrap/src/test/java/org/qi4j/bootstrap/TestValue.java
+++ b/core/bootstrap/src/test/java/org/qi4j/bootstrap/TestValue.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.bootstrap;
 
 import org.qi4j.api.value.ValueComposite;
diff --git a/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/LayeredApplicationAssemblerTest.java b/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/LayeredApplicationAssemblerTest.java
new file mode 100644
index 0000000..b1212ae
--- /dev/null
+++ b/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/LayeredApplicationAssemblerTest.java
@@ -0,0 +1,41 @@
+/*
+ * 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.qi4j.bootstrap.assembly;
+
+import org.junit.Test;
+import org.qi4j.api.activation.ActivationException;
+import org.qi4j.api.structure.Application;
+import org.qi4j.bootstrap.AssemblyException;
+
+import static org.hamcrest.core.IsEqual.equalTo;
+import static org.junit.Assert.assertThat;
+
+public class LayeredApplicationAssemblerTest
+{
+    @Test
+    public void validateThatAssemblerCreatesApplication()
+        throws AssemblyException, ActivationException
+    {
+        TestApplication assembler = new TestApplication( "Test Application", "1.0.1", Application.Mode.test );
+        assembler.start();
+
+        assertThat( assembler.application().name(), equalTo("Test Application") );
+        assertThat( assembler.application().version(), equalTo("1.0.1") );
+    }
+}
diff --git a/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/TestApplication.java b/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/TestApplication.java
new file mode 100644
index 0000000..03422cc
--- /dev/null
+++ b/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/TestApplication.java
@@ -0,0 +1,61 @@
+/*
+ * 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.qi4j.bootstrap.assembly;
+
+import org.qi4j.api.structure.Application;
+import org.qi4j.bootstrap.ApplicationAssembly;
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.layered.LayeredApplicationAssembler;
+import org.qi4j.bootstrap.LayerAssembly;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.bootstrap.assembly.config.ConfigurationLayer;
+import org.qi4j.bootstrap.assembly.connectivity.ConnectivityLayer;
+import org.qi4j.bootstrap.assembly.domain.DomainLayer;
+import org.qi4j.bootstrap.assembly.infrastructure.InfrastructureLayer;
+import org.qi4j.bootstrap.assembly.service.ServiceLayer;
+
+// START SNIPPET: application
+public class TestApplication extends LayeredApplicationAssembler
+{
+
+    public TestApplication( String name, String version, Application.Mode mode )
+        throws AssemblyException
+    {
+        super( name, version, mode );
+    }
+
+    @Override
+    protected void assembleLayers( ApplicationAssembly assembly )
+        throws AssemblyException
+    {
+        LayerAssembly configLayer = createLayer( ConfigurationLayer.class );
+        ModuleAssembly configModule = configLayer.module( "Configuration Module" );
+        LayerAssembly infraLayer = new InfrastructureLayer( configModule ).assemble( assembly.layer( InfrastructureLayer.NAME  ));
+        LayerAssembly domainLayer = createLayer( DomainLayer.class );
+        LayerAssembly serviceLayer = createLayer( ServiceLayer.class );
+        LayerAssembly connectivityLayer = createLayer( ConnectivityLayer.class );
+
+        connectivityLayer.uses( serviceLayer );
+        connectivityLayer.uses( domainLayer );
+        serviceLayer.uses( domainLayer );
+        domainLayer.uses( infraLayer );
+        infraLayer.uses( configLayer );
+    }
+}
+// END SNIPPET: application
diff --git a/libraries/struts2-codebehind/src/main/resources/struts-plugin.xml b/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/config/ConfigurationLayer.java
similarity index 61%
copy from libraries/struts2-codebehind/src/main/resources/struts-plugin.xml
copy to core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/config/ConfigurationLayer.java
index ccf2c42..1a35879 100644
--- a/libraries/struts2-codebehind/src/main/resources/struts-plugin.xml
+++ b/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/config/ConfigurationLayer.java
@@ -1,8 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
 /*
- * $Id: pom.xml 559206 2007-07-24 21:01:18Z apetrelli $
- *
  * 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
@@ -11,7 +7,7 @@
  * "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
+ *   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
@@ -20,13 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
--->
+package org.qi4j.bootstrap.assembly.config;
 
-<!DOCTYPE struts PUBLIC
-  "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-  "http://struts.apache.org/dtds/struts-2.0.dtd">
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.layered.LayerAssembler;
+import org.qi4j.bootstrap.LayerAssembly;
 
-<struts>
-  <bean type="com.opensymphony.xwork2.config.PackageProvider" name="qi4j"
-        class="org.qi4j.library.struts2.codebehind.Qi4jCodebehindPackageProvider"/>
-</struts>
+public class ConfigurationLayer implements LayerAssembler
+{
+    @Override
+    public LayerAssembly assemble( LayerAssembly layer )
+        throws AssemblyException
+    {
+        return layer;
+    }
+}
diff --git a/libraries/struts2-codebehind/src/main/resources/struts-plugin.xml b/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/connectivity/ConnectivityLayer.java
similarity index 60%
copy from libraries/struts2-codebehind/src/main/resources/struts-plugin.xml
copy to core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/connectivity/ConnectivityLayer.java
index ccf2c42..1002d37 100644
--- a/libraries/struts2-codebehind/src/main/resources/struts-plugin.xml
+++ b/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/connectivity/ConnectivityLayer.java
@@ -1,8 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
 /*
- * $Id: pom.xml 559206 2007-07-24 21:01:18Z apetrelli $
- *
  * 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
@@ -11,7 +7,7 @@
  * "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
+ *   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
@@ -20,13 +16,20 @@
  * specific language governing permissions and limitations
  * under the License.
  */
--->
+package org.qi4j.bootstrap.assembly.connectivity;
 
-<!DOCTYPE struts PUBLIC
-  "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-  "http://struts.apache.org/dtds/struts-2.0.dtd">
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.layered.LayerAssembler;
+import org.qi4j.bootstrap.LayerAssembly;
 
-<struts>
-  <bean type="com.opensymphony.xwork2.config.PackageProvider" name="qi4j"
-        class="org.qi4j.library.struts2.codebehind.Qi4jCodebehindPackageProvider"/>
-</struts>
+public class ConnectivityLayer implements LayerAssembler
+{
+    public static final String NAME = "Connectivity";
+
+    @Override
+    public LayerAssembly assemble( LayerAssembly layer )
+        throws AssemblyException
+    {
+        return null;
+    }
+}
diff --git a/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/domain/DomainLayer.java b/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/domain/DomainLayer.java
new file mode 100644
index 0000000..8eac88b
--- /dev/null
+++ b/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/domain/DomainLayer.java
@@ -0,0 +1,35 @@
+/*
+ * 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.qi4j.bootstrap.assembly.domain;
+
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.LayerAssembly;
+import org.qi4j.bootstrap.layered.LayeredLayerAssembler;
+
+public class DomainLayer extends LayeredLayerAssembler
+{
+    @Override
+    public LayerAssembly assemble( LayerAssembly layer )
+        throws AssemblyException
+    {
+        createModule( layer, InvoicingModule.class );
+        createModule( layer, OrderModule.class );
+        return layer;
+    }
+}
diff --git a/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/domain/InvoicingModule.java b/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/domain/InvoicingModule.java
new file mode 100644
index 0000000..62a4640
--- /dev/null
+++ b/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/domain/InvoicingModule.java
@@ -0,0 +1,35 @@
+/*
+ * 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.qi4j.bootstrap.assembly.domain;
+
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.LayerAssembly;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.bootstrap.layered.ModuleAssembler;
+
+public class InvoicingModule
+    implements ModuleAssembler
+{
+    @Override
+    public ModuleAssembly assemble( LayerAssembly layer, ModuleAssembly module )
+        throws AssemblyException
+    {
+        return module;
+    }
+}
diff --git a/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/domain/OrderModule.java b/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/domain/OrderModule.java
new file mode 100644
index 0000000..9e506e3
--- /dev/null
+++ b/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/domain/OrderModule.java
@@ -0,0 +1,56 @@
+/*
+ * 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.qi4j.bootstrap.assembly.domain;
+
+import org.qi4j.api.association.Association;
+import org.qi4j.api.property.Property;
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.LayerAssembly;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.bootstrap.layered.ModuleAssembler;
+
+public class OrderModule
+    implements ModuleAssembler
+{
+    @Override
+    public ModuleAssembly assemble( LayerAssembly layer, ModuleAssembly module )
+        throws AssemblyException
+    {
+        module.entities( Order.class, Customer.class );
+        module.values( Address.class );
+        return module;
+    }
+
+    public interface Order
+    {
+        Association<Customer> customer();
+
+        Property<Address> invoicingAddress();
+
+        Property<Address> deliveryAddress();
+    }
+
+    public interface Customer
+    {
+    }
+
+    public interface Address
+    {
+    }
+}
diff --git a/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/infrastructure/IndexingModule.java b/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/infrastructure/IndexingModule.java
new file mode 100644
index 0000000..437f4f9
--- /dev/null
+++ b/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/infrastructure/IndexingModule.java
@@ -0,0 +1,44 @@
+/*
+ * 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.qi4j.bootstrap.assembly.infrastructure;
+
+import org.qi4j.api.common.Visibility;
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.LayerAssembly;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.bootstrap.layered.ModuleAssembler;
+
+public class IndexingModule
+    implements ModuleAssembler
+{
+    public static final String NAME = "Indexing Module";
+    private final ModuleAssembly configModule;
+
+    public IndexingModule( ModuleAssembly configModule )
+    {
+        this.configModule = configModule;
+    }
+
+    @Override
+    public ModuleAssembly assemble( LayerAssembly layer, ModuleAssembly module )
+        throws AssemblyException
+    {
+        return module;
+    }
+}
diff --git a/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/infrastructure/InfrastructureLayer.java b/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/infrastructure/InfrastructureLayer.java
new file mode 100644
index 0000000..a75ef35
--- /dev/null
+++ b/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/infrastructure/InfrastructureLayer.java
@@ -0,0 +1,47 @@
+/*
+ * 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.qi4j.bootstrap.assembly.infrastructure;
+
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.LayerAssembly;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.bootstrap.layered.LayerAssembler;
+import org.qi4j.bootstrap.layered.LayeredLayerAssembler;
+
+public class InfrastructureLayer extends LayeredLayerAssembler
+    implements LayerAssembler
+{
+    public static final String NAME = "Infrastructure Layer";
+    private final ModuleAssembly configModule;
+
+    public InfrastructureLayer( ModuleAssembly configModule )
+    {
+        this.configModule = configModule;
+    }
+
+    @Override
+    public LayerAssembly assemble( LayerAssembly layer )
+        throws AssemblyException
+    {
+        new StorageModule( configModule ).assemble( layer, layer.module( StorageModule.NAME ) );
+        new IndexingModule( configModule ).assemble( layer, layer.module( IndexingModule.NAME ) );
+        createModule( layer, SerializationModule.class );
+        return layer;
+    }
+}
diff --git a/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/infrastructure/SerializationModule.java b/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/infrastructure/SerializationModule.java
new file mode 100644
index 0000000..ad33c16
--- /dev/null
+++ b/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/infrastructure/SerializationModule.java
@@ -0,0 +1,36 @@
+/*
+ * 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.qi4j.bootstrap.assembly.infrastructure;
+
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.LayerAssembly;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.bootstrap.layered.ModuleAssembler;
+
+public class SerializationModule
+    implements ModuleAssembler
+{
+    @Override
+    public ModuleAssembly assemble( LayerAssembly layer, ModuleAssembly module
+    )
+        throws AssemblyException
+    {
+        return null;
+    }
+}
diff --git a/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/infrastructure/StorageModule.java b/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/infrastructure/StorageModule.java
new file mode 100644
index 0000000..0b51230
--- /dev/null
+++ b/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/infrastructure/StorageModule.java
@@ -0,0 +1,44 @@
+/*
+ * 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.qi4j.bootstrap.assembly.infrastructure;
+
+import org.qi4j.api.common.Visibility;
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.LayerAssembly;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.bootstrap.layered.ModuleAssembler;
+
+public class StorageModule
+    implements ModuleAssembler
+{
+    public static final String NAME = "Storage Module";
+    private final ModuleAssembly configModule;
+
+    public StorageModule( ModuleAssembly configModule )
+    {
+        this.configModule = configModule;
+    }
+
+    @Override
+    public ModuleAssembly assemble( LayerAssembly layer, ModuleAssembly module )
+        throws AssemblyException
+    {
+        return module;
+    }
+}
diff --git a/libraries/struts2-codebehind/src/main/resources/struts-plugin.xml b/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/service/ServiceLayer.java
similarity index 61%
copy from libraries/struts2-codebehind/src/main/resources/struts-plugin.xml
copy to core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/service/ServiceLayer.java
index ccf2c42..85e29a1 100644
--- a/libraries/struts2-codebehind/src/main/resources/struts-plugin.xml
+++ b/core/bootstrap/src/test/java/org/qi4j/bootstrap/assembly/service/ServiceLayer.java
@@ -1,8 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
 /*
- * $Id: pom.xml 559206 2007-07-24 21:01:18Z apetrelli $
- *
  * 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
@@ -11,7 +7,7 @@
  * "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
+ *   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
@@ -20,13 +16,20 @@
  * specific language governing permissions and limitations
  * under the License.
  */
--->
+package org.qi4j.bootstrap.assembly.service;
 
-<!DOCTYPE struts PUBLIC
-  "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-  "http://struts.apache.org/dtds/struts-2.0.dtd">
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.layered.LayerAssembler;
+import org.qi4j.bootstrap.LayerAssembly;
 
-<struts>
-  <bean type="com.opensymphony.xwork2.config.PackageProvider" name="qi4j"
-        class="org.qi4j.library.struts2.codebehind.Qi4jCodebehindPackageProvider"/>
-</struts>
+public class ServiceLayer implements LayerAssembler
+{
+    public static final String NAME = "Service";
+
+    @Override
+    public LayerAssembly assemble( LayerAssembly layer )
+        throws AssemblyException
+    {
+        return null;
+    }
+}
diff --git a/core/bootstrap/src/test/java/org/qi4j/bootstrap/builder/ApplicationBuilderTest.java b/core/bootstrap/src/test/java/org/qi4j/bootstrap/builder/ApplicationBuilderTest.java
index 2533f05..56f17f7 100644
--- a/core/bootstrap/src/test/java/org/qi4j/bootstrap/builder/ApplicationBuilderTest.java
+++ b/core/bootstrap/src/test/java/org/qi4j/bootstrap/builder/ApplicationBuilderTest.java
@@ -51,7 +51,7 @@
         Application application = builder.newApplication();
         Module module = application.findModule( "layer3", "test module" );
         TestService service = module.findService( TestService.class ).get();
-        assertThat( service.sayHello(), equalTo( "Hello Qi4j!" ) );
+        assertThat( service.sayHello(), equalTo( "Hello Zest!" ) );
     }
 
     @Test
@@ -62,7 +62,7 @@
         Application application = builder.newApplication();
         Module module = application.findModule( "layer3", "test module" );
         TestService service = module.findService( TestService.class ).get();
-        assertThat( service.sayHello(), equalTo( "Hello Qi4j!" ) );
+        assertThat( service.sayHello(), equalTo( "Hello Zest!" ) );
     }
 
     @Test
@@ -74,7 +74,7 @@
         Application application = builder.newApplication();
         Module module = application.findModule( "layer3", "test module" );
         TestService service = module.findService( TestService.class ).get();
-        assertThat( service.sayHello(), equalTo( "Hello Qi4j!" ) );
+        assertThat( service.sayHello(), equalTo( "Hello Zest!" ) );
     }
 
 
@@ -126,7 +126,7 @@
             @Override
             public String sayHello()
             {
-                return "Hello Qi4j!";
+                return "Hello Zest!";
             }
         }
     }
diff --git a/core/bootstrap/src/test/java/org/qi4j/bootstrap/somepackage/Test2Value.java b/core/bootstrap/src/test/java/org/qi4j/bootstrap/somepackage/Test2Value.java
index af3dad3..5b0d6c9 100644
--- a/core/bootstrap/src/test/java/org/qi4j/bootstrap/somepackage/Test2Value.java
+++ b/core/bootstrap/src/test/java/org/qi4j/bootstrap/somepackage/Test2Value.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.bootstrap.somepackage;
 
 import org.qi4j.api.value.ValueComposite;
diff --git a/core/functional/build.gradle b/core/functional/build.gradle
index 6872d43..e8408b3 100644
--- a/core/functional/build.gradle
+++ b/core/functional/build.gradle
@@ -1,9 +1,24 @@
-jar { manifest { name = "Qi4j Functional"}}
+/*
+ * 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.
+ */
+
+jar { manifest { name = "Apache Zest™ Functional"}}
 
 dependencies {
 
-  compile libraries.slf4j_api
-
-  testRuntime libraries.slf4j_simple
-
 }
diff --git a/core/functional/dev-status.xml b/core/functional/dev-status.xml
index 41fa22f..ed93800 100644
--- a/core/functional/dev-status.xml
+++ b/core/functional/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/core/functional/src/docs/functional.txt b/core/functional/src/docs/functional.txt
index 30a2a2b..461e091 100644
--- a/core/functional/src/docs/functional.txt
+++ b/core/functional/src/docs/functional.txt
@@ -21,9 +21,9 @@
 source=core/functional/dev-status.xml
 --------------
 
-The Qi4j Core Functional API is a generic package to work with Iterables in a "functional programming language" style.
+The Zest™ Core Functional API is a generic package to work with Iterables in a "functional programming language" style.
 
-This package is completely independent of everything else in Qi4j and may be used on its own in any kind of environment
+This package is completely independent of everything else in Zest™ and may be used on its own in any kind of environment
 such as Spring or Java EE applications.
 
 include::../../build/docs/buildinfo/artifact.txt[]
@@ -38,7 +38,7 @@
 tag=func1
 -----------
 
-With the Qi4j Core Functional API, you go about it in a different way. The code ends up looking like this;
+With the Zest™ Core Functional API, you go about it in a different way. The code ends up looking like this;
 
 [snippet,java]
 -----------
@@ -50,11 +50,11 @@
 
 == The Big Picture ==
 
-The Qi4j Core Functional API are divided a handful of powerful concepts, especially when used together;
+The Zest™ Core Functional API are divided a handful of powerful concepts, especially when used together;
 
    * *Iterables* - many methods to deal with Iterable data, so that the loops in your programs can largely be removed.
 
-   * *Functions* - f(x) and f(x,y) are well-know from mathematics and used in functional programming languages. Qi4j is
+   * *Functions* - f(x) and f(x,y) are well-know from mathematics and used in functional programming languages. Zest™ is
      not capable of introducing lambda calculus due to limitations in Java itself, but we can simulate a lot to allow
      people to create more readable code.
 
diff --git a/core/functional/src/docs/reference/ref-functional.txt b/core/functional/src/docs/reference/ref-functional.txt
index e69de29..fc7aac6 100644
--- a/core/functional/src/docs/reference/ref-functional.txt
+++ b/core/functional/src/docs/reference/ref-functional.txt
@@ -0,0 +1,18 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
diff --git a/core/functional/src/main/java/org/qi4j/functional/HierarchicalVisitorAdapter.java b/core/functional/src/main/java/org/qi4j/functional/HierarchicalVisitorAdapter.java
index eea3a15..2023655 100644
--- a/core/functional/src/main/java/org/qi4j/functional/HierarchicalVisitorAdapter.java
+++ b/core/functional/src/main/java/org/qi4j/functional/HierarchicalVisitorAdapter.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.functional;
 
 /**
diff --git a/core/functional/src/main/java/org/qi4j/functional/Iterables.java b/core/functional/src/main/java/org/qi4j/functional/Iterables.java
index a3daf56..ec5ae43 100644
--- a/core/functional/src/main/java/org/qi4j/functional/Iterables.java
+++ b/core/functional/src/main/java/org/qi4j/functional/Iterables.java
@@ -26,16 +26,12 @@
 import java.util.List;
 import java.util.NoSuchElementException;
 import java.util.Set;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * Utility methods for working with Iterables. See test for examples of how to use.
  */
 public final class Iterables
 {
-    private static Logger debugLogger = LoggerFactory.getLogger( Iterables.class );
-
     @SuppressWarnings( "raw" )
     private static final Iterable EMPTY = new Iterable()
     {
@@ -580,21 +576,15 @@
             @Override
             public T map( T t )
             {
-                if( functions.length == 0 )
-                {
-                    debugLogger.info( msgFormat.format( new Object[]{ t } ) );
-                }
-                else
+                if( functions.length != 0 )
                 {
                     String[] mapped = new String[ functions.length ];
                     for( int i = 0; i < functions.length; i++ )
                     {
                         Function<T, String> function = functions[i];
                         mapped[i] = function.map( t );
-                        debugLogger.info( msgFormat.format( mapped ) );
                     }
                 }
-
                 return t;
             }
         }, iterable );
diff --git a/core/functional/src/main/java/org/qi4j/functional/Visitable.java b/core/functional/src/main/java/org/qi4j/functional/Visitable.java
index 4085c87..b1ed8ba 100644
--- a/core/functional/src/main/java/org/qi4j/functional/Visitable.java
+++ b/core/functional/src/main/java/org/qi4j/functional/Visitable.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.functional;
 
 /**
diff --git a/core/functional/src/main/java/org/qi4j/functional/VisitableHierarchy.java b/core/functional/src/main/java/org/qi4j/functional/VisitableHierarchy.java
index 8fa04c8..fe37d1f 100644
--- a/core/functional/src/main/java/org/qi4j/functional/VisitableHierarchy.java
+++ b/core/functional/src/main/java/org/qi4j/functional/VisitableHierarchy.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.functional;
 
 /**
diff --git a/core/functional/src/main/java/org/qi4j/functional/Visitor.java b/core/functional/src/main/java/org/qi4j/functional/Visitor.java
index f319dfc..3cf6005 100644
--- a/core/functional/src/main/java/org/qi4j/functional/Visitor.java
+++ b/core/functional/src/main/java/org/qi4j/functional/Visitor.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.functional;
 
 /**
diff --git a/core/functional/src/main/java/org/qi4j/functional/package.html b/core/functional/src/main/java/org/qi4j/functional/package.html
index 82421c5..920a9ef 100644
--- a/core/functional/src/main/java/org/qi4j/functional/package.html
+++ b/core/functional/src/main/java/org/qi4j/functional/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Functional API.</h2>
diff --git a/core/functional/src/test/java/org/qi4j/functional/FunctionsTest.java b/core/functional/src/test/java/org/qi4j/functional/FunctionsTest.java
index 5f13459..a5e1956 100644
--- a/core/functional/src/test/java/org/qi4j/functional/FunctionsTest.java
+++ b/core/functional/src/test/java/org/qi4j/functional/FunctionsTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.functional;
 
 import java.util.Collections;
diff --git a/core/functional/src/test/java/org/qi4j/functional/docsupport/FunctionalDocs.java b/core/functional/src/test/java/org/qi4j/functional/docsupport/FunctionalDocs.java
index 30bb31b..7110a21 100644
--- a/core/functional/src/test/java/org/qi4j/functional/docsupport/FunctionalDocs.java
+++ b/core/functional/src/test/java/org/qi4j/functional/docsupport/FunctionalDocs.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.functional.docsupport;
 
 import java.util.ArrayList;
diff --git a/core/io/build.gradle b/core/io/build.gradle
index 2c4dd9d..e67866f 100644
--- a/core/io/build.gradle
+++ b/core/io/build.gradle
@@ -1,4 +1,23 @@
-jar { manifest { name = "Qi4j I/O"}}
+/*
+ * 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.
+ */
+
+jar { manifest { name = "Apache Zest™ I/O"}}
 
 dependencies {
 
diff --git a/core/io/dev-status.xml b/core/io/dev-status.xml
index 41fa22f..ed93800 100644
--- a/core/io/dev-status.xml
+++ b/core/io/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/core/io/src/docs/io.txt b/core/io/src/docs/io.txt
index 6e02896..d8ffef8 100644
--- a/core/io/src/docs/io.txt
+++ b/core/io/src/docs/io.txt
@@ -21,10 +21,10 @@
 source=core/io/dev-status.xml
 --------------
 
-The Qi4j Core I/O API is completely generic and not tied to the Qi4j programming model as a whole. It can be used
-independently of Qi4j, together with the Qi4j Core Functional API, which the Core I/O API depends on.
+The Zest™ Core I/O API is completely generic and not tied to the Zest™ programming model as a whole. It can be used
+independently of Zest, together with the Zest™ Core Functional API, which the Core I/O API depends on.
 
-The Qi4j Core I/O API tries to address the problem around shuffling data around from various I/O inputs and outputs,
+The Zest™ Core I/O API tries to address the problem around shuffling data around from various I/O inputs and outputs,
 possibly with transformations and filtering along the way. It was identified that there is a general mix-up of concerns
 in the stereotypical I/O handling codebases that people deal with all the time. The reasoning around this, can be found
 in the <<howto-use-io>>, and is recommended reading.
@@ -44,7 +44,7 @@
 
 It seems natural to do, yet it is not present for us. We need to involve FileInputStream/FileOutputStream, wrap them
 in Buffered versions of it, do our own looping, close the streams afterwards and what not. So, the java.io.File does
-not have this simple feature and in the Qi4j Core API, we need to work around this limitation. We also want to
+not have this simple feature and in the Zest™ Core API, we need to work around this limitation. We also want to
 make the abstraction a little bit more encompassing than "just" files. So how does that look like then?
 
 == First Examples ==
@@ -60,7 +60,7 @@
 -----------
 
 Pretty much self-explanatory, wouldn't you say? But what happened to the handling of exceptions and closing of
-resources? It is all handled inside the Qi4j Core I/O API. There is nothing you can forget to do.
+resources? It is all handled inside the Zest™ Core I/O API. There is nothing you can forget to do.
 
 Another simple example, where we want to count the number of lines in the text;
 
@@ -127,7 +127,7 @@
 Sender/Receiver are effectively dealing with the data itself.
 
 == org.qi4j.io.Transforms ==
-The 3 component in the Qi4j Core I/O API is the transformations that are possible. Interestingly enough, with the
+The 3 component in the Zest™ Core I/O API is the transformations that are possible. Interestingly enough, with the
 above separation of concerns, we don't need an InputOutput type that can both receive and send data. Instead, we
 simply need to prepare easy to use static factory methods, which are found in the org.qi4j.io.Transforms class. Again,
 it is fairly straight forward to create your own Transforms if you need something not provided here.
@@ -176,7 +176,7 @@
 
 It combines the Counter and the Log implementations, so that the count is forwarded to the Log at a given interval, such
 as every 1000 items. This may not be what you think a ProgressLog should look like, but it serves as a good example on
-how you can combine the general principles found in the Qi4j Core API package.
+how you can combine the general principles found in the Zest™ Core API package.
 
 == How to write a filter specification? ==
 The filter transform takes a specification implementation which has a very simple method, isSatisfiedBy() (read more
diff --git a/core/io/src/docs/reference/ref-io.txt b/core/io/src/docs/reference/ref-io.txt
index e69de29..fc7aac6 100644
--- a/core/io/src/docs/reference/ref-io.txt
+++ b/core/io/src/docs/reference/ref-io.txt
@@ -0,0 +1,18 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
diff --git a/core/io/src/main/java/org/qi4j/io/Files.java b/core/io/src/main/java/org/qi4j/io/Files.java
index 4e16dc7..562d03c 100644
--- a/core/io/src/main/java/org/qi4j/io/Files.java
+++ b/core/io/src/main/java/org/qi4j/io/Files.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.io;
 
 import java.io.File;
diff --git a/core/io/src/main/java/org/qi4j/io/Transforms.java b/core/io/src/main/java/org/qi4j/io/Transforms.java
index 71b94a8..a5d0040 100644
--- a/core/io/src/main/java/org/qi4j/io/Transforms.java
+++ b/core/io/src/main/java/org/qi4j/io/Transforms.java
@@ -19,9 +19,9 @@
 import java.text.MessageFormat;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.Lock;
+import java.util.logging.Logger;
 import org.qi4j.functional.Function;
 import org.qi4j.functional.Specification;
-import org.slf4j.Logger;
 
 /**
  * Utility class for I/O transforms
diff --git a/core/io/src/main/java/org/qi4j/io/package.html b/core/io/src/main/java/org/qi4j/io/package.html
index c635c88..aac8a54 100644
--- a/core/io/src/main/java/org/qi4j/io/package.html
+++ b/core/io/src/main/java/org/qi4j/io/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>I/O API.</h2>
diff --git a/core/io/src/test/java/org/qi4j/io/InputOutputTest.java b/core/io/src/test/java/org/qi4j/io/InputOutputTest.java
index 72f2885..220e856 100644
--- a/core/io/src/test/java/org/qi4j/io/InputOutputTest.java
+++ b/core/io/src/test/java/org/qi4j/io/InputOutputTest.java
@@ -33,12 +33,12 @@
 import java.util.List;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
+import java.util.logging.Logger;
 import org.hamcrest.CoreMatchers;
 import org.junit.Assert;
 import org.junit.Test;
 import org.qi4j.functional.Function;
 import org.qi4j.functional.Visitor;
-import org.slf4j.LoggerFactory;
 
 import static java.util.Arrays.asList;
 import static org.qi4j.functional.Iterables.iterable;
@@ -145,7 +145,7 @@
         File source = sourceFile();
 
         text( source ).transferTo(
-            Transforms.map( new Transforms.Log<String>( LoggerFactory.getLogger( getClass() ), "Line: {0}" ),
+            Transforms.map( new Transforms.Log<String>( Logger.getLogger( getClass().getName() ), "Line: {0}" ),
                             Outputs.<String>noop() ) );
     }
 
@@ -159,7 +159,7 @@
         Inputs.iterable( iterable( data ) ).transferTo(
             Transforms.map(
                 new Transforms.ProgressLog<Integer>(
-                    LoggerFactory.getLogger( InputOutputTest.class ), "Data transferred: {0}", 10 ),
+                    Logger.getLogger( InputOutputTest.class.getName() ), "Data transferred: {0}", 10 ),
                 Outputs.<Integer>noop() ) );
     }
 
@@ -282,7 +282,7 @@
 
         input.transferTo(
             Transforms.map(
-                new Transforms.Log<String>( LoggerFactory.getLogger( getClass() ), "Line: {0}" ),
+                new Transforms.Log<String>( Logger.getLogger( getClass().getName() ), "Line: {0}" ),
                 Outputs.systemOut()
             )
         );
diff --git a/core/io/src/test/java/org/qi4j/io/docsupport/IoDocs.java b/core/io/src/test/java/org/qi4j/io/docsupport/IoDocs.java
index 8abba41..6028886 100644
--- a/core/io/src/test/java/org/qi4j/io/docsupport/IoDocs.java
+++ b/core/io/src/test/java/org/qi4j/io/docsupport/IoDocs.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.io.docsupport;
 
 import java.io.File;
diff --git a/core/runtime/build.gradle b/core/runtime/build.gradle
index c9827a0..1ddf701 100644
--- a/core/runtime/build.gradle
+++ b/core/runtime/build.gradle
@@ -1,17 +1,33 @@
-jar { manifest { name = "Qi4j Core Runtime"}}
+/*
+ * 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.
+ */
+
+jar { manifest { name = "Apache Zest™ Core Runtime" } }
 
 dependencies {
 
   provided libraries.osgi_core
 
-  compile project(":org.qi4j.core:org.qi4j.core.bootstrap")
+  compile project( ":org.qi4j.core:org.qi4j.core.bootstrap" )
   compile libraries.asm
   compile libraries.asm_util
   compile libraries.asm_commons
 
-  testCompile project(":org.qi4j.core:org.qi4j.core.testsupport")
-  testCompile project(":org.qi4j.libraries:org.qi4j.library.constraints")
-
-  testRuntime libraries.slf4j_simple
-
+  testCompile project( ":org.qi4j.core:org.qi4j.core.testsupport" )
+  testCompile project( ":org.qi4j.libraries:org.qi4j.library.constraints" )
 }
diff --git a/core/runtime/dev-status.xml b/core/runtime/dev-status.xml
index 55048fe..4f034dc 100644
--- a/core/runtime/dev-status.xml
+++ b/core/runtime/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/core/runtime/src/docs/reference/ref-runtime.txt b/core/runtime/src/docs/reference/ref-runtime.txt
index e69de29..fc7aac6 100644
--- a/core/runtime/src/docs/reference/ref-runtime.txt
+++ b/core/runtime/src/docs/reference/ref-runtime.txt
@@ -0,0 +1,18 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/Qi4jRuntimeImpl.java b/core/runtime/src/main/java/org/qi4j/runtime/Qi4jRuntimeImpl.java
index 737e6bd..232ad6f 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/Qi4jRuntimeImpl.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/Qi4jRuntimeImpl.java
@@ -15,12 +15,16 @@
 
 import java.lang.reflect.InvocationHandler;
 import java.util.Arrays;
+import java.util.Map;
 import org.qi4j.api.Qi4j;
 import org.qi4j.api.association.AbstractAssociation;
+import org.qi4j.api.association.Association;
 import org.qi4j.api.association.AssociationDescriptor;
 import org.qi4j.api.association.AssociationStateHolder;
 import org.qi4j.api.association.AssociationWrapper;
+import org.qi4j.api.association.ManyAssociation;
 import org.qi4j.api.association.ManyAssociationWrapper;
+import org.qi4j.api.association.NamedAssociation;
 import org.qi4j.api.association.NamedAssociationWrapper;
 import org.qi4j.api.composite.Composite;
 import org.qi4j.api.composite.CompositeDescriptor;
@@ -30,6 +34,7 @@
 import org.qi4j.api.composite.TransientDescriptor;
 import org.qi4j.api.entity.EntityComposite;
 import org.qi4j.api.entity.EntityDescriptor;
+import org.qi4j.api.entity.EntityReference;
 import org.qi4j.api.property.Property;
 import org.qi4j.api.property.PropertyDescriptor;
 import org.qi4j.api.property.PropertyWrapper;
@@ -45,6 +50,9 @@
 import org.qi4j.bootstrap.ApplicationModelFactory;
 import org.qi4j.bootstrap.Qi4jRuntime;
 import org.qi4j.runtime.association.AbstractAssociationInstance;
+import org.qi4j.runtime.association.AssociationInstance;
+import org.qi4j.runtime.association.ManyAssociationInstance;
+import org.qi4j.runtime.association.NamedAssociationInstance;
 import org.qi4j.runtime.bootstrap.ApplicationAssemblyFactoryImpl;
 import org.qi4j.runtime.bootstrap.ApplicationModelFactoryImpl;
 import org.qi4j.runtime.composite.ProxyReferenceInvocationHandler;
@@ -63,7 +71,7 @@
 import static org.qi4j.runtime.composite.TransientInstance.compositeInstanceOf;
 
 /**
- * Incarnation of Qi4j.
+ * Incarnation of Zest.
  */
 public final class Qi4jRuntimeImpl
     implements Qi4jSPI, Qi4jRuntime
@@ -160,7 +168,7 @@
         else if( compositeOrServiceReferenceOrUow instanceof ImportedServiceReferenceInstance )
         {
             ImportedServiceReferenceInstance<?> importedServiceReference
-                                                = (ImportedServiceReferenceInstance<?>) compositeOrServiceReferenceOrUow;
+                = (ImportedServiceReferenceInstance<?>) compositeOrServiceReferenceOrUow;
             return importedServiceReference.module();
         }
         throw new IllegalArgumentException( "Wrong type. Must be one of "
@@ -205,7 +213,7 @@
         else if( compositeOrServiceReference instanceof ImportedServiceReferenceInstance )
         {
             ImportedServiceReferenceInstance<?> importedServiceReference
-                                                = (ImportedServiceReferenceInstance<?>) compositeOrServiceReference;
+                = (ImportedServiceReferenceInstance<?>) compositeOrServiceReference;
             return importedServiceReference.serviceDescriptor();
         }
         throw new IllegalArgumentException( "Wrong type. Must be one of "
@@ -312,7 +320,7 @@
         {
             association = ( (ManyAssociationWrapper) association ).next();
         }
-        
+
         while( association instanceof NamedAssociationWrapper )
         {
             association = ( (NamedAssociationWrapper) association ).next();
@@ -327,4 +335,24 @@
     {
         return EntityInstance.entityInstanceOf( composite ).entityState();
     }
+
+    @Override
+    public EntityReference entityReferenceOf( Association assoc )
+    {
+        @SuppressWarnings( "unchecked" )
+        Property<EntityReference> associationState = ( (AssociationInstance) assoc ).getAssociationState();
+        return associationState.get();
+    }
+
+    @Override
+    public Iterable<EntityReference> entityReferenceOf( ManyAssociation assoc )
+    {
+        return ( (ManyAssociationInstance) assoc ).getManyAssociationState();
+    }
+
+    @Override
+    public Iterable<Map.Entry<String, EntityReference>> entityReferenceOf( NamedAssociation assoc )
+    {
+        return ( (NamedAssociationInstance) assoc ).getEntityReferences();
+    }
 }
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/activation/ActivatorsInstance.java b/core/runtime/src/main/java/org/qi4j/runtime/activation/ActivatorsInstance.java
index 26eebbd..2059e1e 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/activation/ActivatorsInstance.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/activation/ActivatorsInstance.java
@@ -21,7 +21,7 @@
 import org.qi4j.functional.Iterables;
 
 /**
- * Instance of a Qi4j Activators of one Activation target. Contains ordered
+ * Instance of a Zest Activators of one Activation target. Contains ordered
  * Activators and roll the Activation on the target.
  *
  * @param <ActivateeType> Type of the activation target
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/association/AbstractAssociationInstance.java b/core/runtime/src/main/java/org/qi4j/runtime/association/AbstractAssociationInstance.java
index e42b2c5..21d696a 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/association/AbstractAssociationInstance.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/association/AbstractAssociationInstance.java
@@ -1,14 +1,28 @@
+/*
+ * 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.qi4j.runtime.association;
 
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Proxy;
 import java.lang.reflect.Type;
 import org.qi4j.api.association.AbstractAssociation;
-import org.qi4j.api.entity.EntityComposite;
 import org.qi4j.api.entity.EntityReference;
+import org.qi4j.api.entity.Identity;
 import org.qi4j.functional.Function2;
-import org.qi4j.runtime.composite.ProxyReferenceInvocationHandler;
-import org.qi4j.runtime.entity.EntityInstance;
 
 /**
  * Implementation of AbstractAssociation. Includes helper methods for subclasses
@@ -55,32 +69,17 @@
             return null;
         }
 
-        InvocationHandler handler = Proxy.getInvocationHandler( composite );
-        if( handler instanceof ProxyReferenceInvocationHandler )
-        {
-            handler = Proxy.getInvocationHandler( ( (ProxyReferenceInvocationHandler) handler ).proxy() );
-        }
-        EntityInstance instance = (EntityInstance) handler;
-        return instance.identity();
+        return new EntityReference( ( (Identity) composite ).identity().get() );
     }
 
     protected void checkType( Object instance )
     {
-        if( instance != null )
-        {
-            if( !( instance instanceof EntityComposite ) )
-            {
-                if( instance instanceof Proxy )
-                {
-                    if( Proxy.getInvocationHandler( instance ) instanceof EntityInstance )
-                    {
-                        return; // It's fine
-                    }
-                }
 
-                throw new IllegalArgumentException( "Object must be an EntityComposite" );
-            }
+        if( instance instanceof Identity || instance == null )
+        {
+            return;
         }
+        throw new IllegalArgumentException( "Object must be a subtype of org.qi4j.api.identity.Identity: " + instance.getClass() );
     }
 
     protected void checkImmutable()
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/association/AssociationInfo.java b/core/runtime/src/main/java/org/qi4j/runtime/association/AssociationInfo.java
index ba74afe..fd6695d 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/association/AssociationInfo.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/association/AssociationInfo.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.runtime.association;
 
 import java.lang.reflect.Type;
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/association/AssociationInstance.java b/core/runtime/src/main/java/org/qi4j/runtime/association/AssociationInstance.java
index d5babcd..e42d8eb 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/association/AssociationInstance.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/association/AssociationInstance.java
@@ -19,6 +19,7 @@
 import org.qi4j.api.association.AssociationDescriptor;
 import org.qi4j.api.association.AssociationWrapper;
 import org.qi4j.api.entity.EntityReference;
+import org.qi4j.api.entity.Identity;
 import org.qi4j.api.property.Property;
 import org.qi4j.functional.Function2;
 
@@ -57,7 +58,13 @@
         associationInfo.checkConstraints( newValue );
 
         // Change association
-        associationState.set( getEntityReference( newValue ) );
+        associationState.set( EntityReference.create( (Identity) newValue ));
+    }
+
+    @Override
+    public EntityReference reference()
+    {
+        return associationState.get();
     }
 
     public Property<EntityReference> getAssociationState()
@@ -81,10 +88,10 @@
     @Override
     public int hashCode()
     {
-        int hash = associationInfo.hashCode() * 61; // Descriptor
+        int hash = associationInfo.hashCode() * 39; // Descriptor
         if( associationState.get() != null )
         {
-            hash += associationState.get().hashCode() * 3; // State
+            hash = hash * 997 + associationState.get().hashCode(); // State
         }
         return hash;
     }
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/association/ManyAssociationInstance.java b/core/runtime/src/main/java/org/qi4j/runtime/association/ManyAssociationInstance.java
index a946862..5c8b4b8 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/association/ManyAssociationInstance.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/association/ManyAssociationInstance.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.runtime.association;
 
 import java.lang.reflect.Type;
@@ -10,8 +28,10 @@
 import org.qi4j.api.association.ManyAssociation;
 import org.qi4j.api.association.ManyAssociationWrapper;
 import org.qi4j.api.entity.EntityReference;
+import org.qi4j.api.entity.Identity;
+import org.qi4j.api.util.NullArgumentException;
 import org.qi4j.functional.Function2;
-import org.qi4j.runtime.composite.ConstraintsCheck;
+import org.qi4j.functional.Iterables;
 import org.qi4j.spi.entity.ManyAssociationState;
 
 /**
@@ -47,10 +67,11 @@
     @Override
     public boolean add( int i, T entity )
     {
+        NullArgumentException.validateNotNull( "entity", entity );
         checkImmutable();
         checkType( entity );
-        ( (ConstraintsCheck) associationInfo ).checkConstraints( entity );
-        return manyAssociationState.add( i, getEntityReference( entity ) );
+        associationInfo.checkConstraints( entity );
+        return manyAssociationState.add( i, new EntityReference( ( (Identity) entity ).identity().get() ) );
     }
 
     @Override
@@ -62,10 +83,11 @@
     @Override
     public boolean remove( T entity )
     {
+        NullArgumentException.validateNotNull( "entity", entity );
         checkImmutable();
         checkType( entity );
 
-        return manyAssociationState.remove( getEntityReference( entity ) );
+        return manyAssociationState.remove( new EntityReference( ( (Identity) entity ).identity().get() ) );
     }
 
     @Override
@@ -77,7 +99,7 @@
     @Override
     public List<T> toList()
     {
-        ArrayList<T> list = new ArrayList<T>();
+        ArrayList<T> list = new ArrayList<>();
         for( EntityReference entityReference : manyAssociationState )
         {
             list.add( getEntity( entityReference ) );
@@ -89,7 +111,7 @@
     @Override
     public Set<T> toSet()
     {
-        Set<T> set = new HashSet<T>();
+        Set<T> set = new HashSet<>();
         for( EntityReference entityReference : manyAssociationState )
         {
             set.add( getEntity( entityReference ) );
@@ -99,6 +121,12 @@
     }
 
     @Override
+    public Iterable<EntityReference> references()
+    {
+        return Iterables.toList( manyAssociationState );
+    }
+
+    @Override
     public String toString()
     {
         return manyAssociationState.toString();
@@ -194,15 +222,4 @@
             idIterator.remove();
         }
     }
-
-    @Override
-    protected void checkType( Object instance )
-    {
-        if( instance == null )
-        {
-            throw new NullPointerException( "Associated object may not be null" );
-        }
-
-        super.checkType( instance );
-    }
 }
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/association/NamedAssociationInstance.java b/core/runtime/src/main/java/org/qi4j/runtime/association/NamedAssociationInstance.java
index 4ca67b2..c38ef1a 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/association/NamedAssociationInstance.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/association/NamedAssociationInstance.java
@@ -22,12 +22,21 @@
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
+import org.qi4j.api.association.AssociationDescriptor;
+import org.qi4j.api.association.ManyAssociation;
+import org.qi4j.api.association.ManyAssociationWrapper;
 import org.qi4j.api.association.NamedAssociation;
+import org.qi4j.api.association.NamedAssociationWrapper;
 import org.qi4j.api.entity.EntityReference;
+import org.qi4j.api.entity.Identity;
+import org.qi4j.api.util.NullArgumentException;
+import org.qi4j.functional.Function;
 import org.qi4j.functional.Function2;
-import org.qi4j.runtime.composite.ConstraintsCheck;
+import org.qi4j.functional.Iterables;
 import org.qi4j.spi.entity.NamedAssociationState;
 
+import static org.qi4j.functional.Iterables.map;
+
 public class NamedAssociationInstance<T>
     extends AbstractAssociationInstance<T>
     implements NamedAssociation<T>
@@ -37,7 +46,8 @@
 
     public NamedAssociationInstance( AssociationInfo associationInfo,
                                      Function2<EntityReference, Type, Object> associationFunction,
-                                     NamedAssociationState namedAssociationState )
+                                     NamedAssociationState namedAssociationState
+    )
     {
         super( associationInfo, associationFunction );
         this.namedAssociationState = namedAssociationState;
@@ -64,10 +74,11 @@
     @Override
     public boolean put( String name, T entity )
     {
+        NullArgumentException.validateNotNull( "entity", entity );
         checkImmutable();
         checkType( entity );
-        ( (ConstraintsCheck) associationInfo ).checkConstraints( entity );
-        return namedAssociationState.put( name, getEntityReference( entity ) );
+        associationInfo.checkConstraints( entity );
+        return namedAssociationState.put( name, new EntityReference( ( (Identity) entity ).identity().get() ) );
     }
 
     @Override
@@ -100,4 +111,130 @@
         return map;
     }
 
+    @Override
+    public Iterable<EntityReference> references()
+    {
+        return map( new Function<String, EntityReference>()
+        {
+            @Override
+            public EntityReference map( String name )
+            {
+                return namedAssociationState.get( name );
+            }
+        }, namedAssociationState );
+    }
+
+    @Override
+    public EntityReference referenceOf( String name )
+    {
+        return namedAssociationState.get( name );
+    }
+
+    public Iterable<Map.Entry<String, EntityReference>> getEntityReferences()
+    {
+        return map( new Function<String, Map.Entry<String, EntityReference>>()
+        {
+            @Override
+            public Map.Entry<String, EntityReference> map( final String key )
+            {
+                final EntityReference value = namedAssociationState.get( key );
+                return new Map.Entry<String, EntityReference>()
+                {
+                    @Override
+                    public String getKey()
+                    {
+                        return key;
+                    }
+
+                    @Override
+                    public EntityReference getValue()
+                    {
+                        return value;
+                    }
+
+                    @Override
+                    public EntityReference setValue( EntityReference value )
+                    {
+                        throw new UnsupportedOperationException( "Immutable Map" );
+                    }
+
+                    @Override
+                    public boolean equals( Object o )
+                    {
+                        if( o instanceof Map.Entry )
+                        {
+                            Map.Entry other = (Map.Entry) o;
+                            return key.equals( other.getKey() );
+                        }
+                        return false;
+                    }
+
+                    @Override
+                    public int hashCode()
+                    {
+                        return 997 * key.hashCode() + 981813497;
+                    }
+                };
+            }
+        }, namedAssociationState );
+    }
+
+
+    @Override
+    public boolean equals( Object o )
+    {
+        if( this == o )
+        {
+            return true;
+        }
+        if( o == null || getClass() != o.getClass() )
+        {
+            return false;
+        }
+        NamedAssociation<?> that = (NamedAssociation) o;
+        // Unwrap if needed
+        while( that instanceof NamedAssociationWrapper )
+        {
+            that = ( (NamedAssociationWrapper) that ).next();
+        }
+        // Descriptor equality
+        NamedAssociationInstance<?> thatInstance = (NamedAssociationInstance) that;
+        AssociationDescriptor thatDescriptor = (AssociationDescriptor) thatInstance.associationInfo();
+        if( !associationInfo.equals( thatDescriptor ) )
+        {
+            return false;
+        }
+        // State equality
+        if( namedAssociationState.count() != thatInstance.namedAssociationState.count() )
+        {
+            return false;
+        }
+        for( String name : namedAssociationState )
+        {
+            if( !thatInstance.namedAssociationState.containsName( name ) )
+            {
+                return false;
+            }
+            EntityReference thisReference = namedAssociationState.get( name );
+            EntityReference thatReference = thatInstance.namedAssociationState.get( name );
+            if( !thisReference.equals( thatReference ) )
+            {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode()
+    {
+        int hash = associationInfo.hashCode() * 31; // Descriptor
+        for( String name : namedAssociationState )
+        {
+            hash += name.hashCode();
+            hash += namedAssociationState.get( name ).hashCode() * 7; // State
+        }
+        return hash;
+    }
+
 }
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/association/NamedAssociationsModel.java b/core/runtime/src/main/java/org/qi4j/runtime/association/NamedAssociationsModel.java
index 9ba63f5..4f3fac5 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/association/NamedAssociationsModel.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/association/NamedAssociationsModel.java
@@ -89,12 +89,6 @@
         {
             throw new IllegalArgumentException( "No named-association found with name:" + ( (Member) accessor ).getName() );
         }
-        System.out.println( "######################################################################" );
-        System.out.println( "GET NAMED ASSOCIATION" );
-        System.out.println( "\tupon: " + mapAccessorAssociationModel );
-        System.out.println( "\tfor:  " + accessor );
-        System.out.println( "\treturn: "+namedAssociationModel );
-        System.out.println( "######################################################################" );
         return namedAssociationModel;
     }
 
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/ConfigurationAssemblyImpl.java b/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/ConfigurationAssemblyImpl.java
new file mode 100644
index 0000000..d8088cc
--- /dev/null
+++ b/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/ConfigurationAssemblyImpl.java
@@ -0,0 +1,85 @@
+/*
+ *  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.qi4j.runtime.bootstrap;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AccessibleObject;
+import java.lang.reflect.Member;
+import org.qi4j.api.association.Association;
+import org.qi4j.api.association.GenericAssociationInfo;
+import org.qi4j.api.association.ManyAssociation;
+import org.qi4j.api.association.NamedAssociation;
+import org.qi4j.api.common.InvalidApplicationException;
+import org.qi4j.api.common.MetaInfo;
+import org.qi4j.api.common.Optional;
+import org.qi4j.api.common.QualifiedName;
+import org.qi4j.api.common.UseDefaults;
+import org.qi4j.api.constraint.Constraint;
+import org.qi4j.api.entity.EntityComposite;
+import org.qi4j.api.property.GenericPropertyInfo;
+import org.qi4j.api.property.Immutable;
+import org.qi4j.api.property.Property;
+import org.qi4j.api.util.Annotations;
+import org.qi4j.api.util.Classes;
+import org.qi4j.bootstrap.AssociationDeclarations;
+import org.qi4j.bootstrap.ConfigurationAssembly;
+import org.qi4j.bootstrap.EntityAssembly;
+import org.qi4j.bootstrap.ManyAssociationDeclarations;
+import org.qi4j.bootstrap.NamedAssociationDeclarations;
+import org.qi4j.bootstrap.StateDeclarations;
+import org.qi4j.runtime.association.AssociationModel;
+import org.qi4j.runtime.association.AssociationsModel;
+import org.qi4j.runtime.association.ManyAssociationModel;
+import org.qi4j.runtime.association.ManyAssociationsModel;
+import org.qi4j.runtime.association.NamedAssociationModel;
+import org.qi4j.runtime.association.NamedAssociationsModel;
+import org.qi4j.runtime.composite.MixinsModel;
+import org.qi4j.runtime.composite.StateModel;
+import org.qi4j.runtime.composite.ValueConstraintsInstance;
+import org.qi4j.runtime.composite.ValueConstraintsModel;
+import org.qi4j.runtime.entity.EntityMixinsModel;
+import org.qi4j.runtime.entity.EntityModel;
+import org.qi4j.runtime.entity.EntityStateModel;
+import org.qi4j.runtime.property.PropertyModel;
+
+import static org.qi4j.api.util.Annotations.isType;
+import static org.qi4j.api.util.Classes.typeOf;
+import static org.qi4j.functional.Iterables.filter;
+import static org.qi4j.functional.Iterables.first;
+
+/**
+ * Declaration of a EntityComposite.
+ */
+public final class ConfigurationAssemblyImpl
+    implements ConfigurationAssembly
+{
+    private ValueAssemblyImpl value;
+    private EntityAssemblyImpl entity;
+
+    public ConfigurationAssemblyImpl( Class<?> mainType )
+    {
+        value = new ValueAssemblyImpl( mainType );
+        entity = new EntityAssemblyImpl( mainType );
+    }
+
+    @Override
+    public Iterable<Class<?>> types()
+    {
+        return value.types();
+    }
+}
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/ConfigurationDeclarationImpl.java b/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/ConfigurationDeclarationImpl.java
new file mode 100644
index 0000000..18a14cb
--- /dev/null
+++ b/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/ConfigurationDeclarationImpl.java
@@ -0,0 +1,125 @@
+/*
+ *  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.qi4j.runtime.bootstrap;
+
+import org.qi4j.api.common.Visibility;
+import org.qi4j.bootstrap.ConfigurationDeclaration;
+import org.qi4j.bootstrap.EntityDeclaration;
+
+import static java.util.Arrays.asList;
+
+/**
+ * Declaration of a Composite. Created by {@link org.qi4j.bootstrap.ModuleAssembly#configurations(Class[])}.
+ */
+public final class ConfigurationDeclarationImpl
+    implements ConfigurationDeclaration
+{
+    private final Iterable<EntityAssemblyImpl> entities;
+    private final Iterable<ValueAssemblyImpl> values;
+
+    public ConfigurationDeclarationImpl( Iterable<EntityAssemblyImpl> entities, Iterable<ValueAssemblyImpl> values  )
+    {
+        this.entities = entities;
+        this.values = values;
+    }
+
+    @Override
+    public ConfigurationDeclaration setMetaInfo( Object info )
+    {
+        for( EntityAssemblyImpl entity : entities )
+        {
+            entity.metaInfo.set( info );
+        }
+        for( ValueAssemblyImpl value : values )
+        {
+            value.metaInfo.set( info );
+        }
+        return this;
+    }
+
+    @Override
+    public ConfigurationDeclaration visibleIn( Visibility visibility )
+    {
+        for( EntityAssemblyImpl entity : entities )
+        {
+            entity.visibility = visibility;
+        }
+        for( ValueAssemblyImpl value : values )
+        {
+            value.visibility = visibility;
+        }
+        return this;
+    }
+
+    @Override
+    public ConfigurationDeclaration withConcerns( Class<?>... concerns )
+    {
+        for( EntityAssemblyImpl entity : entities )
+        {
+            entity.concerns.addAll( asList( concerns ) );
+        }
+        for( ValueAssemblyImpl value : values )
+        {
+            value.concerns.addAll( asList( concerns ) );
+        }
+        return this;
+    }
+
+    @Override
+    public ConfigurationDeclaration withSideEffects( Class<?>... sideEffects )
+    {
+        for( EntityAssemblyImpl entity : entities )
+        {
+            entity.sideEffects.addAll( asList( sideEffects ) );
+        }
+        for( ValueAssemblyImpl value : values )
+        {
+            value.sideEffects.addAll( asList( sideEffects ) );
+        }
+        return this;
+    }
+
+    @Override
+    public ConfigurationDeclaration withMixins( Class<?>... mixins )
+    {
+        for( EntityAssemblyImpl entity : entities )
+        {
+            entity.mixins.addAll( asList( mixins ) );
+        }
+        for( ValueAssemblyImpl value : values )
+        {
+            value.mixins.addAll( asList( mixins ) );
+        }
+        return this;
+    }
+
+    @Override
+    public ConfigurationDeclaration withTypes( Class<?>... types )
+    {
+        for( EntityAssemblyImpl entity : entities )
+        {
+            entity.types.addAll( asList( types ) );
+        }
+        for( ValueAssemblyImpl value : values )
+        {
+            value.types.addAll( asList( types ) );
+        }
+        return this;
+    }
+}
\ No newline at end of file
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/ModuleAssemblyImpl.java b/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/ModuleAssemblyImpl.java
index eb038eb..1f470dc 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/ModuleAssemblyImpl.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/bootstrap/ModuleAssemblyImpl.java
@@ -27,13 +27,17 @@
 import org.qi4j.api.common.Visibility;
 import org.qi4j.api.composite.TransientComposite;
 import org.qi4j.api.entity.EntityComposite;
+import org.qi4j.api.entity.Identity;
 import org.qi4j.api.service.DuplicateServiceIdentityException;
 import org.qi4j.api.service.ServiceImporter;
 import org.qi4j.api.structure.Module;
+import org.qi4j.api.type.HasTypes;
+import org.qi4j.api.type.MatchTypeSpecification;
 import org.qi4j.api.value.ValueComposite;
 import org.qi4j.bootstrap.AssemblyException;
 import org.qi4j.bootstrap.AssemblySpecifications;
 import org.qi4j.bootstrap.AssemblyVisitor;
+import org.qi4j.bootstrap.ConfigurationDeclaration;
 import org.qi4j.bootstrap.EntityAssembly;
 import org.qi4j.bootstrap.EntityDeclaration;
 import org.qi4j.bootstrap.ImportedServiceAssembly;
@@ -52,6 +56,7 @@
 import org.qi4j.bootstrap.ValueDeclaration;
 import org.qi4j.functional.Iterables;
 import org.qi4j.functional.Specification;
+import org.qi4j.functional.Specifications;
 import org.qi4j.runtime.activation.ActivatorsModel;
 import org.qi4j.runtime.composite.TransientModel;
 import org.qi4j.runtime.composite.TransientsModel;
@@ -254,6 +259,69 @@
     }
 
     @Override
+    public ConfigurationDeclaration configurations( Class<?>... configurationTypes )
+    {
+        List<EntityAssemblyImpl> entityAssemblyList = new ArrayList<>();
+
+        for( Class entityType : configurationTypes )
+        {
+            if( this.entityAssemblies.containsKey( entityType ) )
+            {
+                entityAssemblyList.add( this.entityAssemblies.get( entityType ) );
+            }
+            else
+            {
+                EntityAssemblyImpl entityAssembly = new EntityAssemblyImpl( entityType );
+                this.entityAssemblies.put( entityType, entityAssembly );
+                entityAssemblyList.add( entityAssembly );
+            }
+        }
+
+        List<ValueAssemblyImpl> valueAssemblyList = new ArrayList<>();
+
+        for( Class valueType : configurationTypes )
+        {
+            if( valueAssemblies.containsKey( valueType ) )
+            {
+                valueAssemblyList.add( valueAssemblies.get( valueType ) );
+            }
+            else
+            {
+                ValueAssemblyImpl valueAssembly = new ValueAssemblyImpl( valueType );
+                valueAssemblies.put( valueType, valueAssembly );
+                valueAssemblyList.add( valueAssembly );
+                valueAssembly.types.add( Identity.class );
+            }
+        }
+
+        return new ConfigurationDeclarationImpl( entityAssemblyList, valueAssemblyList  );
+    }
+
+    @Override
+    public ConfigurationDeclaration configurations( Specification<HasTypes> specification )
+    {
+        Specification<HasTypes> isConfigurationComposite = new MatchTypeSpecification( Identity.class );
+        specification = Specifications.and( specification, isConfigurationComposite );
+        List<EntityAssemblyImpl> entityAssmblyList = new ArrayList<>();
+        for( EntityAssemblyImpl entityAssembly : entityAssemblies.values() )
+        {
+            if( specification.satisfiedBy( entityAssembly ) )
+            {
+                entityAssmblyList.add( entityAssembly );
+            }
+        }
+        List<ValueAssemblyImpl> valueAssemblyList = new ArrayList<>();
+        for( ValueAssemblyImpl transientAssembly : valueAssemblies.values() )
+        {
+            if( specification.satisfiedBy( transientAssembly ) )
+            {
+                valueAssemblyList.add( transientAssembly );
+            }
+        }
+        return new ConfigurationDeclarationImpl( entityAssmblyList, valueAssemblyList );
+    }
+
+    @Override
     public ObjectDeclaration objects( Class<?>... objectTypes )
         throws AssemblyException
     {
@@ -263,7 +331,7 @@
         {
             if( objectType.isInterface() )
             {
-                throw new AssemblyException( "Interfaces can not be Qi4j Objects." );
+                throw new AssemblyException( "Interfaces can not be Zest Objects." );
             }
             if( objectAssemblies.containsKey( objectType ) )
             {
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/composite/AbstractModifierModel.java b/core/runtime/src/main/java/org/qi4j/runtime/composite/AbstractModifierModel.java
index 09499cb..b457f1d 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/composite/AbstractModifierModel.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/composite/AbstractModifierModel.java
@@ -25,7 +25,7 @@
 import org.qi4j.runtime.injection.InjectedFieldsModel;
 import org.qi4j.runtime.injection.InjectedMethodsModel;
 import org.qi4j.runtime.injection.InjectionContext;
-import org.qi4j.runtime.structure.ModuleInstance;
+import org.qi4j.spi.module.ModuleSpi;
 
 import static org.qi4j.api.util.Classes.RAW_CLASS;
 import static org.qi4j.api.util.Classes.interfacesOf;
@@ -57,7 +57,7 @@
         injectedFieldsModel = new InjectedFieldsModel( declaredModifierClass );
         injectedMethodsModel = new InjectedMethodsModel( declaredModifierClass );
         Class<Class<?>> componentType = (Class<Class<?>>) Class.class.cast( Class.class );
-        nextInterfaces = toArray( componentType, unique( map( RAW_CLASS, interfacesOf( declaredModifierClass ) ) ));
+        nextInterfaces = toArray( componentType, unique( map( RAW_CLASS, interfacesOf( declaredModifierClass ) ) ) );
     }
 
     public Class<?> modifierClass()
@@ -96,7 +96,7 @@
     }
 
     // Context
-    public InvocationHandler newInstance( ModuleInstance moduleInstance,
+    public InvocationHandler newInstance( ModuleSpi moduleInstance,
                                           InvocationHandler next,
                                           ProxyReferenceInvocationHandler proxyHandler,
                                           Method method
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/composite/CompactLevel.java b/core/runtime/src/main/java/org/qi4j/runtime/composite/CompactLevel.java
index 49b812c..199fd4f 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/composite/CompactLevel.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/composite/CompactLevel.java
@@ -19,10 +19,10 @@
  *

  * <pre>

  * <b>off</b>       = Do not modify the stack trace.

- * <b>proxy</b>     = Remove all Qi4j internal classes and all JDK internal classes from

+ * <b>proxy</b>     = Remove all Zest internal classes and all JDK internal classes from

  *             the originating method call.

  * <b>semi</b>      = Remove all JDK internal classes on the entire stack.

- * <b>extensive</b> = Remove all Qi4j internal and JDK internal classes from the entire stack.

+ * <b>extensive</b> = Remove all Zest internal and JDK internal classes from the entire stack.

  * </pre>

  *

  * <p>

diff --git a/core/runtime/src/main/java/org/qi4j/runtime/composite/CompositeMethodModel.java b/core/runtime/src/main/java/org/qi4j/runtime/composite/CompositeMethodModel.java
index e925b9d..3162130 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/composite/CompositeMethodModel.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/composite/CompositeMethodModel.java
@@ -29,7 +29,7 @@
 import org.qi4j.functional.VisitableHierarchy;
 import org.qi4j.runtime.injection.Dependencies;
 import org.qi4j.runtime.injection.DependencyModel;
-import org.qi4j.runtime.structure.ModuleInstance;
+import org.qi4j.spi.module.ModuleSpi;
 
 import static org.qi4j.functional.Iterables.filter;
 import static org.qi4j.functional.Iterables.flattenIterables;
@@ -101,7 +101,7 @@
     }
 
     // Context
-    public Object invoke( Object composite, Object[] params, MixinsInstance mixins, ModuleInstance moduleInstance )
+    public Object invoke( Object composite, Object[] params, MixinsInstance mixins, ModuleSpi moduleInstance )
         throws Throwable
     {
         constraintsInstance.checkValid( composite, method, params );
@@ -117,7 +117,7 @@
         }
     }
 
-    private CompositeMethodInstance getInstance( ModuleInstance moduleInstance )
+    private CompositeMethodInstance getInstance( ModuleSpi moduleInstance )
     {
         CompositeMethodInstance methodInstance = instancePool.obtainInstance();
         if( methodInstance == null )
@@ -128,7 +128,7 @@
         return methodInstance;
     }
 
-    private CompositeMethodInstance newCompositeMethodInstance( ModuleInstance moduleInstance )
+    private CompositeMethodInstance newCompositeMethodInstance( ModuleSpi moduleInstance )
         throws ConstructionException
     {
         FragmentInvocationHandler mixinInvocationHandler = mixins.newInvocationHandler( method );
@@ -197,7 +197,7 @@
 
     public Iterable<Method> invocationsFor( Class<?> mixinClass )
     {
-        return mixins.invocationsFor(mixinClass);
+        return mixins.invocationsFor( mixinClass );
     }
 
     public class CompositeMethodAnnotatedElement
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/composite/CompositeMethodsModel.java b/core/runtime/src/main/java/org/qi4j/runtime/composite/CompositeMethodsModel.java
index 6fec5eb..bf0c113 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/composite/CompositeMethodsModel.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/composite/CompositeMethodsModel.java
@@ -15,14 +15,14 @@
 package org.qi4j.runtime.composite;
 
 import java.lang.reflect.Method;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
 import org.qi4j.api.composite.MissingMethodException;
 import org.qi4j.functional.HierarchicalVisitor;
 import org.qi4j.functional.Iterables;
 import org.qi4j.functional.VisitableHierarchy;
 import org.qi4j.runtime.injection.Dependencies;
 import org.qi4j.runtime.injection.DependencyModel;
-import org.qi4j.runtime.structure.ModuleInstance;
+import org.qi4j.spi.module.ModuleSpi;
 
 import static org.qi4j.functional.Iterables.map;
 
@@ -32,12 +32,12 @@
 public final class CompositeMethodsModel
     implements VisitableHierarchy<Object, Object>
 {
-    private HashMap<Method, CompositeMethodModel> methods;
+    private final LinkedHashMap<Method, CompositeMethodModel> methods;
     private final MixinsModel mixinsModel;
 
     public CompositeMethodsModel( MixinsModel mixinsModel )
     {
-        methods = new HashMap<Method, CompositeMethodModel>();
+        methods = new LinkedHashMap<>();
         this.mixinsModel = mixinsModel;
     }
 
@@ -51,7 +51,7 @@
                           Object proxy,
                           Method method,
                           Object[] args,
-                          ModuleInstance moduleInstance
+                          ModuleSpi moduleInstance
     )
         throws Throwable
     {
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/composite/CompositeModel.java b/core/runtime/src/main/java/org/qi4j/runtime/composite/CompositeModel.java
index c689929..a6ea122 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/composite/CompositeModel.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/composite/CompositeModel.java
@@ -25,12 +25,14 @@
 import org.qi4j.api.composite.Composite;
 import org.qi4j.api.composite.CompositeDescriptor;
 import org.qi4j.api.composite.InvalidCompositeException;
+import org.qi4j.api.structure.Module;
 import org.qi4j.functional.HierarchicalVisitor;
 import org.qi4j.functional.Iterables;
 import org.qi4j.functional.VisitableHierarchy;
 import org.qi4j.runtime.injection.Dependencies;
 import org.qi4j.runtime.injection.DependencyModel;
 import org.qi4j.runtime.structure.ModuleInstance;
+import org.qi4j.spi.module.ModuleSpi;
 
 import static java.lang.reflect.Proxy.newProxyInstance;
 import static org.qi4j.functional.Iterables.first;
@@ -107,8 +109,13 @@
         return false;
     }
 
+    public MixinsModel mixinsModel()
+    {
+        return mixinsModel;
+    }
+
     @Override
-    @SuppressWarnings( {"raw", "unchecked"} )
+    @SuppressWarnings( { "raw", "unchecked" } )
     public Class<?> primaryType()
     {
         Class primaryType = null;
@@ -159,7 +166,7 @@
         return visitor.visitLeave( this );
     }
 
-    @SuppressWarnings( {"raw", "unchecked"} )
+    @SuppressWarnings( { "raw", "unchecked" } )
     private void createProxyClass()
     {
         Class<?> mainType = first( types );
@@ -199,7 +206,7 @@
                                 Object proxy,
                                 Method method,
                                 Object[] args,
-                                ModuleInstance moduleInstance
+                                ModuleSpi moduleInstance
     )
         throws Throwable
     {
@@ -246,7 +253,8 @@
 //        if (!matchesAny( isAssignableFrom( mixinType ), types ))
         if( !mixinsModel.isImplemented( mixinType ) )
         {
-            throw new IllegalArgumentException( "Composite does not implement type " + mixinType.getName() );
+            String message = "Composite " + primaryType().getName() + " does not implement type " + mixinType.getName();
+            throw new IllegalArgumentException( message );
         }
 
         // Instantiate proxy for given mixin interface
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/composite/ConcernsModel.java b/core/runtime/src/main/java/org/qi4j/runtime/composite/ConcernsModel.java
index 9488c4b..74882f7 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/composite/ConcernsModel.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/composite/ConcernsModel.java
@@ -24,7 +24,7 @@
 import org.qi4j.functional.VisitableHierarchy;
 import org.qi4j.runtime.injection.Dependencies;
 import org.qi4j.runtime.injection.DependencyModel;
-import org.qi4j.runtime.structure.ModuleInstance;
+import org.qi4j.spi.module.ModuleSpi;
 
 /**
  * JAVADOC
@@ -48,7 +48,7 @@
     }
 
     // Context
-    public ConcernsInstance newInstance( Method method, ModuleInstance moduleInstance,
+    public ConcernsInstance newInstance( Method method, ModuleSpi moduleInstance,
                                          FragmentInvocationHandler mixinInvocationHandler
     )
     {
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/composite/FragmentClassLoader.java b/core/runtime/src/main/java/org/qi4j/runtime/composite/FragmentClassLoader.java
index 996357d..4cf4439 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/composite/FragmentClassLoader.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/composite/FragmentClassLoader.java
@@ -147,7 +147,7 @@
             return defineClass( name, b, 0, b.length, baseClass.getProtectionDomain() );
         }
 
-        // Try the classloader of this classloader -> get classes in Qi4j such as CompositeInvoker
+        // Try the classloader of this classloader -> get classes in Zest such as CompositeInvoker
         return getClass().getClassLoader().loadClass( name );
     }
 
@@ -484,7 +484,7 @@
             //noinspection RedundantIfStatement
             if( isInternalQi4jMethod( method, baseClass ) )
             {
-                return false; // Skip methods in Qi4j-internal interfaces
+                return false; // Skip methods in Zest-internal interfaces
             }
             else
             {
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/composite/FragmentInvocationHandler.java b/core/runtime/src/main/java/org/qi4j/runtime/composite/FragmentInvocationHandler.java
index bd76a09..ec656ab 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/composite/FragmentInvocationHandler.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/composite/FragmentInvocationHandler.java
@@ -51,8 +51,8 @@
 
         StackTraceElement[] trace = throwable.getStackTrace();
 
-        // Check if exception originated within Qi4j or JDK - if so then skip compaction
-        if( !isApplicationClass( trace[ 0 ].getClassName() ) )
+        // Check if exception originated within Zest or JDK - if so then skip compaction
+        if( trace.length == 0 || !isApplicationClass( trace[ 0 ].getClassName() ) )
         {
             return throwable;
         }
@@ -63,6 +63,7 @@
             StackTraceElement stackTraceElement = trace[ i ];
             if( !isApplicationClass( stackTraceElement.getClassName() ) )
             {
+                // TODO: Should find stack entry outside Runtime, and compact beyond that
                 trace[ i ] = null;
                 count++;
             }
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/composite/FunctionStateResolver.java b/core/runtime/src/main/java/org/qi4j/runtime/composite/FunctionStateResolver.java
index 284929d..01bcc41 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/composite/FunctionStateResolver.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/composite/FunctionStateResolver.java
@@ -20,8 +20,15 @@
 import org.qi4j.api.association.AssociationDescriptor;
 import org.qi4j.api.entity.EntityReference;
 import org.qi4j.api.property.PropertyDescriptor;
+import org.qi4j.functional.ForEach;
 import org.qi4j.functional.Function;
 import org.qi4j.functional.Iterables;
+import org.qi4j.runtime.association.ManyAssociationModel;
+import org.qi4j.runtime.association.NamedAssociationModel;
+import org.qi4j.runtime.entity.EntityModel;
+import org.qi4j.spi.entity.EntityState;
+import org.qi4j.spi.entity.ManyAssociationState;
+import org.qi4j.spi.entity.NamedAssociationState;
 
 /**
  * Function based StateResolver.
@@ -68,4 +75,46 @@
     {
         return namedAssociationFunction.map( associationDescriptor );
     }
+
+    public void populateState( EntityModel model, EntityState state )
+    {
+        for( PropertyDescriptor propDesc : model.state().properties() )
+        {
+            Object value = getPropertyState( propDesc );
+            state.setPropertyValue( propDesc.qualifiedName(), value );
+        }
+        for( AssociationDescriptor assDesc : model.state().associations() )
+        {
+            EntityReference ref = getAssociationState( assDesc );
+            state.setAssociationValue( assDesc.qualifiedName(), ref );
+        }
+        for( ManyAssociationModel manyAssDesc : model.state().manyAssociations() )
+        {
+            ManyAssociationState associationState = state.manyAssociationValueOf( manyAssDesc.qualifiedName() );
+            // First clear existing ones
+            for( EntityReference ref : associationState )
+            {
+                associationState.remove( ref );
+            }
+            // then add the new ones.
+            for( EntityReference ref : getManyAssociationState( manyAssDesc ) )
+            {
+                associationState.add( 0, ref );
+            }
+        }
+        for( NamedAssociationModel namedAssDesc : model.state().namedAssociations() )
+        {
+            NamedAssociationState associationState = state.namedAssociationValueOf( namedAssDesc.qualifiedName() );
+            // First clear existing ones
+            for( String name : associationState )
+            {
+                associationState.remove( name );
+            }
+            // then add the new ones.
+            for( Map.Entry<String, EntityReference> entry : getNamedAssociationState( namedAssDesc ).entrySet() )
+            {
+                associationState.put( entry.getKey(), entry.getValue() );
+            }
+        }
+    }
 }
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/composite/GenericSpecification.java b/core/runtime/src/main/java/org/qi4j/runtime/composite/GenericSpecification.java
index bc0f612..458f8bb 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/composite/GenericSpecification.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/composite/GenericSpecification.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.runtime.composite;
 
 import java.lang.reflect.InvocationHandler;
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/composite/InstancePool.java b/core/runtime/src/main/java/org/qi4j/runtime/composite/InstancePool.java
index 0f08eb2..349b7ab 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/composite/InstancePool.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/composite/InstancePool.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.runtime.composite;
 
 /**
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/composite/ProxyGenerator.java b/core/runtime/src/main/java/org/qi4j/runtime/composite/ProxyGenerator.java
index 6f8e609..15c52c5 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/composite/ProxyGenerator.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/composite/ProxyGenerator.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.runtime.composite;
 
 import java.lang.reflect.Proxy;
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/composite/SideEffectInvocationHandlerResult.java b/core/runtime/src/main/java/org/qi4j/runtime/composite/SideEffectInvocationHandlerResult.java
index ba83276..31718d6 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/composite/SideEffectInvocationHandlerResult.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/composite/SideEffectInvocationHandlerResult.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.runtime.composite;
 
 import java.lang.reflect.InvocationHandler;
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/composite/SideEffectsModel.java b/core/runtime/src/main/java/org/qi4j/runtime/composite/SideEffectsModel.java
index 11018ff..10ae779 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/composite/SideEffectsModel.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/composite/SideEffectsModel.java
@@ -25,7 +25,7 @@
 import org.qi4j.functional.VisitableHierarchy;
 import org.qi4j.runtime.injection.Dependencies;
 import org.qi4j.runtime.injection.DependencyModel;
-import org.qi4j.runtime.structure.ModuleInstance;
+import org.qi4j.spi.module.ModuleSpi;
 
 /**
  * JAVADOC
@@ -49,7 +49,7 @@
     }
 
     // Context
-    public SideEffectsInstance newInstance( Method method, ModuleInstance moduleInstance, InvocationHandler invoker )
+    public SideEffectsInstance newInstance( Method method, ModuleSpi moduleInstance, InvocationHandler invoker )
     {
         ProxyReferenceInvocationHandler proxyHandler = new ProxyReferenceInvocationHandler();
         SideEffectInvocationHandlerResult result = new SideEffectInvocationHandlerResult();
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/composite/TransientBuilderInstance.java b/core/runtime/src/main/java/org/qi4j/runtime/composite/TransientBuilderInstance.java
index 0bb343f..ffb3fc6 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/composite/TransientBuilderInstance.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/composite/TransientBuilderInstance.java
@@ -20,7 +20,7 @@
 import org.qi4j.api.property.PropertyDescriptor;
 import org.qi4j.runtime.property.PropertyInfo;
 import org.qi4j.runtime.property.PropertyInstance;
-import org.qi4j.runtime.structure.ModelModule;
+import org.qi4j.spi.module.ModelModule;
 
 /**
  * JAVADOC
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/composite/TransientClassLoader.java b/core/runtime/src/main/java/org/qi4j/runtime/composite/TransientClassLoader.java
index c9daa31..154dee1 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/composite/TransientClassLoader.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/composite/TransientClassLoader.java
@@ -145,7 +145,7 @@
             return defineClass( name, b, 0, b.length, baseClass.getProtectionDomain() );
         }
 
-        // Try the classloader of this classloader -> get classes in Qi4j such as CompositeInvoker
+        // Try the classloader of this classloader -> get classes in Zest such as CompositeInvoker
         return getClass().getClassLoader().loadClass( name );
     }
 
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/composite/TransientInstance.java b/core/runtime/src/main/java/org/qi4j/runtime/composite/TransientInstance.java
index 508acf0..78bc5a2 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/composite/TransientInstance.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/composite/TransientInstance.java
@@ -24,7 +24,10 @@
 import org.qi4j.api.composite.Composite;
 import org.qi4j.api.composite.CompositeInstance;
 import org.qi4j.api.property.StateHolder;
+import org.qi4j.api.structure.Layer;
+import org.qi4j.api.structure.Module;
 import org.qi4j.runtime.structure.ModuleInstance;
+import org.qi4j.spi.module.ModuleSpi;
 
 /**
  * InvocationHandler for proxy objects.
@@ -42,10 +45,10 @@
     protected final Object[] mixins;
     protected StateHolder state;
     protected final CompositeModel compositeModel;
-    private final ModuleInstance moduleInstance;
+    private final ModuleSpi moduleInstance;
 
     public TransientInstance( CompositeModel compositeModel,
-                              ModuleInstance moduleInstance,
+                              ModuleSpi moduleInstance,
                               Object[] mixins,
                               StateHolder state
     )
@@ -105,11 +108,16 @@
     }
 
     @Override
-    public ModuleInstance module()
+    public Module module()
     {
         return moduleInstance;
     }
 
+    public Layer layer()
+    {
+        return ( (ModuleInstance) moduleInstance ).layerInstance();
+    }
+
     @Override
     public StateHolder state()
     {
@@ -202,7 +210,9 @@
         }
         if( first )
         {
-            return "TransientInstance{" +
+            String modelTypeName = compositeModel.getClass().getSimpleName();
+            String metaTypeModel = modelTypeName.substring( 0, modelTypeName.length() - 5 );
+            return metaTypeModel + "Instance{" +
                    "mixins=" + ( mixins == null ? null : Arrays.asList( mixins ) ) +
                    ", state=" + state +
                    ", compositeModel=" + compositeModel +
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/composite/TransientModel.java b/core/runtime/src/main/java/org/qi4j/runtime/composite/TransientModel.java
index c5ffe79..968fa5e 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/composite/TransientModel.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/composite/TransientModel.java
@@ -20,7 +20,7 @@
 import org.qi4j.api.constraint.ConstraintViolationException;
 import org.qi4j.runtime.injection.InjectionContext;
 import org.qi4j.runtime.property.PropertyModel;
-import org.qi4j.runtime.structure.ModuleInstance;
+import org.qi4j.spi.module.ModuleSpi;
 
 /**
  * Model for Transient Composites
@@ -39,7 +39,7 @@
         super( types, visibility, metaInfo, mixinsModel, stateModel, compositeMethodsModel );
     }
 
-    public TransientInstance newInstance( ModuleInstance moduleInstance,
+    public TransientInstance newInstance( ModuleSpi moduleInstance,
                                           UsesInstance uses,
                                           TransientStateInstance state
     )
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/composite/TransientStateInstance.java b/core/runtime/src/main/java/org/qi4j/runtime/composite/TransientStateInstance.java
index b73085a..cc0d7e3 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/composite/TransientStateInstance.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/composite/TransientStateInstance.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.runtime.composite;
 
 import java.lang.reflect.AccessibleObject;
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/composite/TypedModifierInvocationHandler.java b/core/runtime/src/main/java/org/qi4j/runtime/composite/TypedModifierInvocationHandler.java
index 2467436..4e9654a 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/composite/TypedModifierInvocationHandler.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/composite/TypedModifierInvocationHandler.java
@@ -27,14 +27,6 @@
     {
         try
         {
-/*
-            // Remove this, and run InvocationInjectionTest to verify
-            if( !method.isAccessible() )
-            {
-                method.setAccessible( true );       // TODO: This is a massive Performance Killer. Needs to be taken care of.
-            }
-*/
-
             return this.method.invoke( fragment, args );
         }
         catch( InvocationTargetException e )
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/entity/EntityInstance.java b/core/runtime/src/main/java/org/qi4j/runtime/entity/EntityInstance.java
index 6e7e513..7228c41 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/entity/EntityInstance.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/entity/EntityInstance.java
@@ -36,10 +36,10 @@
 import org.qi4j.api.unitofwork.UnitOfWorkException;
 import org.qi4j.runtime.composite.CompositeMethodInstance;
 import org.qi4j.runtime.composite.MixinsInstance;
-import org.qi4j.runtime.structure.ModuleInstance;
 import org.qi4j.runtime.structure.ModuleUnitOfWork;
 import org.qi4j.spi.entity.EntityState;
 import org.qi4j.spi.entity.EntityStatus;
+import org.qi4j.spi.module.ModuleSpi;
 
 /**
  * Entity instance
@@ -54,7 +54,7 @@
 
     private final EntityComposite proxy;
     private final ModuleUnitOfWork uow;
-    private final ModuleInstance moduleInstance;
+    private final ModuleSpi moduleInstance;
     private final EntityModel entityModel;
     private final EntityReference identity;
     private final EntityState entityState;
@@ -63,7 +63,7 @@
     private EntityStateInstance state;
 
     public EntityInstance( ModuleUnitOfWork uow,
-                           ModuleInstance moduleInstance,
+                           ModuleSpi moduleInstance,
                            EntityModel entityModel,
                            EntityState entityState
     )
@@ -134,7 +134,7 @@
     }
 
     @Override
-    public ModuleInstance module()
+    public ModuleSpi module()
     {
         return moduleInstance;
     }
@@ -200,7 +200,7 @@
 
         if( status() == EntityStatus.REMOVED )
         {
-            throw new NoSuchEntityException( identity, entityModel.types() );
+            throw new NoSuchEntityException( identity, entityModel.types(), unitOfWork().usecase() );
         }
 
         mixins = entityModel.newMixinHolder();
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/entity/EntityModel.java b/core/runtime/src/main/java/org/qi4j/runtime/entity/EntityModel.java
index 77103f9..8637034 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/entity/EntityModel.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/entity/EntityModel.java
@@ -33,12 +33,12 @@
 import org.qi4j.runtime.composite.CompositeMethodsModel;
 import org.qi4j.runtime.composite.CompositeModel;
 import org.qi4j.runtime.property.PropertyModel;
-import org.qi4j.runtime.structure.ModuleInstance;
 import org.qi4j.runtime.structure.ModuleUnitOfWork;
 import org.qi4j.spi.entity.EntityState;
 import org.qi4j.spi.entitystore.EntityAlreadyExistsException;
 import org.qi4j.spi.entitystore.EntityStoreException;
 import org.qi4j.spi.entitystore.EntityStoreUnitOfWork;
+import org.qi4j.spi.module.ModuleSpi;
 
 import static org.qi4j.functional.Iterables.filter;
 import static org.qi4j.functional.Iterables.first;
@@ -62,7 +62,7 @@
         }
         catch( NoSuchMethodException e )
         {
-            throw new InternalError( "Qi4j Core Runtime codebase is corrupted. Contact Qi4j team: ModuleUnitOfWork" );
+            throw new InternalError( "Zest Core Runtime codebase is corrupted. Contact Zest team: ModuleUnitOfWork" );
         }
     }
 
@@ -96,7 +96,7 @@
         return (EntityStateModel) super.state();
     }
 
-    public EntityInstance newInstance( ModuleUnitOfWork uow, ModuleInstance moduleInstance, EntityState state )
+    public EntityInstance newInstance( ModuleUnitOfWork uow, ModuleSpi moduleInstance, EntityState state )
     {
         EntityInstance instance = new EntityInstance( uow, moduleInstance, this, state );
         return instance;
@@ -116,13 +116,13 @@
         return ( (EntityMixinsModel) mixinsModel ).newMixin( entityInstance, entityState, mixins, method );
     }
 
-    public EntityState newEntityState( EntityStoreUnitOfWork store, EntityReference identity )
+    public EntityState newEntityState( EntityStoreUnitOfWork store, ModuleSpi module, EntityReference identity )
         throws ConstraintViolationException, EntityStoreException
     {
         try
         {
             // New EntityState
-            EntityState entityState = store.newEntityState( identity, this );
+            EntityState entityState = store.newEntityState( module, identity, this );
 
             // Set identity property
             PropertyDescriptor persistentPropertyDescriptor = state().propertyModelFor( IDENTITY_METHOD );
@@ -140,7 +140,7 @@
         }
     }
 
-    public void initState( ModuleInstance module, EntityState entityState )
+    public void initState( ModuleSpi module, EntityState entityState )
     {
         // Set new properties to default value
         for( PropertyModel propertyDescriptor : state().properties() )
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/entity/EntityStateInstance.java b/core/runtime/src/main/java/org/qi4j/runtime/entity/EntityStateInstance.java
index d44a3f9..505509b 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/entity/EntityStateInstance.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/entity/EntityStateInstance.java
@@ -248,7 +248,7 @@
             constraints.checkConstraints( association.get() );
         }
 
-        // TODO Should ManyAssociations be checked too?
+        // TODO Should ManyAssociations and NamedAssociations be checked too?
     }
 
     private Map<AccessibleObject, Object> state()
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/injection/Dependencies.java b/core/runtime/src/main/java/org/qi4j/runtime/injection/Dependencies.java
index 39bc468..bfd8304 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/injection/Dependencies.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/injection/Dependencies.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.runtime.injection;
 
 import org.qi4j.functional.Function;
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/injection/DependencyModel.java b/core/runtime/src/main/java/org/qi4j/runtime/injection/DependencyModel.java
index bfc5317..a01d061 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/injection/DependencyModel.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/injection/DependencyModel.java
@@ -287,16 +287,20 @@
                 ex = ex.getCause();
             }
 
-            String message = "[Module " + context.module()
-                .name() + "] InjectionProvider unable to resolve @" + injectionAnnotation.annotationType()
-                .getSimpleName() + " " + injectionType.toString();
+            String message = "[Module " + context.module().name() + "] InjectionProvider unable to resolve @" +
+                             injectionAnnotation.annotationType().getSimpleName() + " " + injectionType.toString();
             throw new ConstructionException( message, ex );
         }
         if( injectedValue == null && !optional )
         {
-            String message = "[Module " + context.module()
-                .name() + "] Non-optional @" + injectionAnnotation.annotationType()
-                .getSimpleName() + " " + injectionType.toString() + " was null in " + injectedClass.getName();
+            String simpleName = injectionAnnotation.annotationType().getSimpleName();
+            String message = "[Module " + context.module().name() + "] Non-optional @" +
+                             simpleName + " " + injectionType.toString() +
+                             " was null in " + injectedClass.getName();
+            if( simpleName.toLowerCase().contains( "service" ) )
+            {
+                message = message + ". Did you mean the @Service injection scope?";
+            }
             throw new ConstructionException( message );
         }
         return getInjectedValue( injectedValue );
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/injection/InjectedFieldModel.java b/core/runtime/src/main/java/org/qi4j/runtime/injection/InjectedFieldModel.java
index 6b35f2a..5412fec 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/injection/InjectedFieldModel.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/injection/InjectedFieldModel.java
@@ -87,9 +87,7 @@
                 {
                     TransientInstance handler = (TransientInstance) invocationHandler;
                     valueClassName = Classes.toString( handler.descriptor().types() )
-                                     + " in [" + handler.module().name() + "] of [" + handler.module()
-                        .layerInstance()
-                        .name() + "]";
+                                     + " in [" + handler.module().name() + "] of [" + handler.layer().name() + "]";
                 }
                 else
                 {
@@ -140,4 +138,10 @@
             return emptyList();
         }
     }
+
+    @Override
+    public String toString()
+    {
+        return "InjectedFieldModel{" + ", injectedField=" + injectedField + '}';
+    }
 }
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/injection/InjectionContext.java b/core/runtime/src/main/java/org/qi4j/runtime/injection/InjectionContext.java
index f9c1deb..b3c4981 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/injection/InjectionContext.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/injection/InjectionContext.java
@@ -19,13 +19,14 @@
 import org.qi4j.runtime.composite.ProxyReferenceInvocationHandler;
 import org.qi4j.runtime.composite.UsesInstance;
 import org.qi4j.runtime.structure.ModuleInstance;
+import org.qi4j.spi.module.ModuleSpi;
 
 /**
  * JAVADOC
  */
 public final class InjectionContext
 {
-    private final ModuleInstance moduleInstance;
+    private final ModuleSpi moduleInstance;
     private CompositeInstance compositeInstance;
     private UsesInstance uses;
     private StateHolder state;
@@ -44,28 +45,28 @@
     }
 
     // For concerns and side-effects
-    public InjectionContext( ModuleInstance moduleInstance, Object next, ProxyReferenceInvocationHandler proxyHandler )
+    public InjectionContext( ModuleSpi moduleInstance, Object next, ProxyReferenceInvocationHandler proxyHandler )
     {
         this.moduleInstance = moduleInstance;
         this.next = next;
         this.proxyHandler = proxyHandler;
     }
 
-    public InjectionContext( ModuleInstance moduleInstance, UsesInstance uses )
+    public InjectionContext( ModuleSpi moduleInstance, UsesInstance uses )
     {
         this.moduleInstance = moduleInstance;
         this.uses = uses;
     }
 
     // For inner classes
-    public InjectionContext( ModuleInstance moduleInstance, UsesInstance uses, Object instance )
+    public InjectionContext( ModuleSpi moduleInstance, UsesInstance uses, Object instance )
     {
         this.moduleInstance = moduleInstance;
         this.uses = uses;
         this.instance = instance;
     }
 
-    public ModuleInstance module()
+    public ModuleSpi module()
     {
         return moduleInstance;
     }
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/injection/ParameterizedTypeInstance.java b/core/runtime/src/main/java/org/qi4j/runtime/injection/ParameterizedTypeInstance.java
index 963d878..0fe250c 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/injection/ParameterizedTypeInstance.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/injection/ParameterizedTypeInstance.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.runtime.injection;
 
 import java.lang.reflect.ParameterizedType;
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/injection/provider/InvocationInjectionProviderFactory.java b/core/runtime/src/main/java/org/qi4j/runtime/injection/provider/InvocationInjectionProviderFactory.java
index 8780b98..e12fd91 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/injection/provider/InvocationInjectionProviderFactory.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/injection/provider/InvocationInjectionProviderFactory.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.runtime.injection.provider;
 
 import java.lang.annotation.Annotation;
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/injection/provider/ModifiesInjectionProviderFactory.java b/core/runtime/src/main/java/org/qi4j/runtime/injection/provider/ModifiesInjectionProviderFactory.java
index 2348f91..31c4a73 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/injection/provider/ModifiesInjectionProviderFactory.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/injection/provider/ModifiesInjectionProviderFactory.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.runtime.injection.provider;
 
 import org.qi4j.api.composite.CompositeDescriptor;
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/injection/provider/StructureInjectionProviderFactory.java b/core/runtime/src/main/java/org/qi4j/runtime/injection/provider/StructureInjectionProviderFactory.java
index dd461e6..6ad4e30 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/injection/provider/StructureInjectionProviderFactory.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/injection/provider/StructureInjectionProviderFactory.java
@@ -34,6 +34,8 @@
 import org.qi4j.runtime.injection.InjectionProvider;
 import org.qi4j.runtime.injection.InjectionProviderFactory;
 import org.qi4j.runtime.model.Resolution;
+import org.qi4j.runtime.structure.ModuleInstance;
+import org.qi4j.spi.module.ModuleSpi;
 
 public final class StructureInjectionProviderFactory
     implements InjectionProviderFactory
@@ -93,17 +95,21 @@
             {
                 return context.module();
             }
+            else if( ModuleSpi.class.isAssignableFrom( clazz ) )
+            {
+                return context.module();
+            }
             else if( Layer.class.isAssignableFrom( clazz ) )
             {
-                return context.module().layerInstance();
+                return (( ModuleInstance) context.module()).layerInstance();
             }
             else if( Application.class.isAssignableFrom( clazz ) )
             {
-                return context.module().layerInstance().applicationInstance();
+                return (( ModuleInstance) context.module()).layerInstance().applicationInstance();
             }
             else if( Qi4j.class.isAssignableFrom( clazz ) )
             {
-                return context.module().layerInstance().applicationInstance().runtime();
+                return (( ModuleInstance) context.module()).layerInstance().applicationInstance().runtime();
             }
 
             return null;
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/injection/provider/ThisInjectionProviderFactory.java b/core/runtime/src/main/java/org/qi4j/runtime/injection/provider/ThisInjectionProviderFactory.java
index ac648d8..c313330 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/injection/provider/ThisInjectionProviderFactory.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/injection/provider/ThisInjectionProviderFactory.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.runtime.injection.provider;
 
 import java.lang.reflect.Constructor;
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/injection/provider/UsesInjectionProviderFactory.java b/core/runtime/src/main/java/org/qi4j/runtime/injection/provider/UsesInjectionProviderFactory.java
index 65c58cd..2069d07 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/injection/provider/UsesInjectionProviderFactory.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/injection/provider/UsesInjectionProviderFactory.java
@@ -1,8 +1,27 @@
+/*
+ * 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.qi4j.runtime.injection.provider;
 
 import java.lang.reflect.Constructor;
 import org.qi4j.api.composite.NoSuchTransientException;
 import org.qi4j.api.object.NoSuchObjectException;
+import org.qi4j.api.structure.Module;
 import org.qi4j.bootstrap.InvalidInjectionException;
 import org.qi4j.runtime.composite.UsesInstance;
 import org.qi4j.runtime.injection.DependencyModel;
@@ -53,7 +72,7 @@
             {
                 // No @Uses object provided
                 // Try instantiating a Transient or Object for the given type
-                ModuleInstance moduleInstance = context.module();
+                Module moduleInstance = context.module();
 
                 try
                 {
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/internal/Activator.java b/core/runtime/src/main/java/org/qi4j/runtime/internal/Activator.java
index 42ab3c3..6725296 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/internal/Activator.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/internal/Activator.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.runtime.internal;
 
 import org.osgi.framework.BundleActivator;
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/package.html b/core/runtime/src/main/java/org/qi4j/runtime/package.html
index 230aae1..612d1ae 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/package.html
+++ b/core/runtime/src/main/java/org/qi4j/runtime/package.html
@@ -1,5 +1,21 @@
+<!--
+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.
+-->
 <html>
     <body>
-        <h2>Qi4j Runtime.</h2>
+        <h2>Apache Zest™ Runtime.</h2>
     </body>
 </html>
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/property/PropertyInfo.java b/core/runtime/src/main/java/org/qi4j/runtime/property/PropertyInfo.java
index ed125f1..b9869dc 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/property/PropertyInfo.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/property/PropertyInfo.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.runtime.property;
 
 import java.lang.reflect.Type;
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/property/PropertyModel.java b/core/runtime/src/main/java/org/qi4j/runtime/property/PropertyModel.java
index 235a86a..2e8b2ce 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/property/PropertyModel.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/property/PropertyModel.java
@@ -32,6 +32,7 @@
 import org.qi4j.api.property.Property;
 import org.qi4j.api.property.PropertyDescriptor;
 import org.qi4j.api.structure.Module;
+import org.qi4j.api.type.Serialization;
 import org.qi4j.api.type.ValueCompositeType;
 import org.qi4j.api.type.ValueType;
 import org.qi4j.api.util.Classes;
@@ -189,16 +190,30 @@
         ValueTypeFactory factory = ValueTypeFactory.instance();
         Class<?> declaringClass = ( (Member) accessor() ).getDeclaringClass();
         Class<?> mainType = first( resolution.model().types() );
-        valueType = factory.newValueType( type(), declaringClass, mainType, resolution.layer(), resolution.module() );
-
+        Serialization.Variant variant = findVariant();
+        valueType = factory.newValueType( type(), declaringClass, mainType, resolution.layer(), resolution.module(), variant );
         builderInfo = new BuilderPropertyInfo();
-
         if( type instanceof TypeVariable )
         {
             type = Classes.resolveTypeVariable( (TypeVariable) type, declaringClass, mainType );
         }
     }
 
+    private Serialization.Variant findVariant()
+    {
+        Serialization serialization = metaInfo.get( Serialization.class );
+        Serialization.Variant variant = null;
+        if( serialization != null )
+        {
+            variant = serialization.value();
+        }
+        if( variant == null )
+        {
+            variant = Serialization.Variant.entry;
+        }
+        return variant;
+    }
+
     @Override
     public <ThrowableType extends Throwable> boolean accept( Visitor<? super PropertyModel, ThrowableType> visitor )
         throws ThrowableType
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/service/ImportedServiceReferenceInstance.java b/core/runtime/src/main/java/org/qi4j/runtime/service/ImportedServiceReferenceInstance.java
index 4e792df..15f65cd 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/service/ImportedServiceReferenceInstance.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/service/ImportedServiceReferenceInstance.java
@@ -28,7 +28,6 @@
 import org.qi4j.api.service.ServiceUnavailableException;
 import org.qi4j.api.structure.Module;
 import org.qi4j.runtime.activation.ActivationDelegate;
-import org.slf4j.LoggerFactory;
 
 /**
  * Implementation of ServiceReference. This manages the reference to the imported service.
@@ -135,8 +134,6 @@
         }
         catch( ServiceImporterException ex )
         {
-            LoggerFactory.getLogger( getClass() )
-                .warn( "Imported service throwed an exception on isAvailable(), will return false.", ex );
             return false;
         }
     }
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/structure/ApplicationInstance.java b/core/runtime/src/main/java/org/qi4j/runtime/structure/ApplicationInstance.java
index 8d220fb..0af1092 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/structure/ApplicationInstance.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/structure/ApplicationInstance.java
@@ -28,7 +28,7 @@
 import org.qi4j.runtime.activation.ActivationDelegate;
 
 /**
- * Instance of a Qi4j application. Contains a list of layers which are managed by this application
+ * Instance of a Zest application. Contains a list of layers which are managed by this application
  */
 public class ApplicationInstance
     implements Application
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/structure/LayerInstance.java b/core/runtime/src/main/java/org/qi4j/runtime/structure/LayerInstance.java
index 9ed77bb..49d83cc 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/structure/LayerInstance.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/structure/LayerInstance.java
@@ -20,20 +20,21 @@
 import org.qi4j.api.activation.ActivationException;
 import org.qi4j.api.activation.PassivationException;
 import org.qi4j.api.common.Visibility;
+import org.qi4j.api.composite.TransientDescriptor;
+import org.qi4j.api.entity.EntityDescriptor;
+import org.qi4j.api.object.ObjectDescriptor;
 import org.qi4j.api.service.ServiceReference;
 import org.qi4j.api.structure.Layer;
+import org.qi4j.api.value.ValueDescriptor;
 import org.qi4j.functional.Function;
 import org.qi4j.runtime.activation.ActivationDelegate;
-import org.qi4j.runtime.composite.TransientModel;
-import org.qi4j.runtime.entity.EntityModel;
-import org.qi4j.runtime.object.ObjectModel;
-import org.qi4j.runtime.value.ValueModel;
+import org.qi4j.spi.module.ModelModule;
 
 import static org.qi4j.functional.Iterables.flattenIterables;
 import static org.qi4j.functional.Iterables.map;
 
 /**
- * Instance of a Qi4j application layer. Contains a list of modules which are managed by this layer.
+ * Instance of a Zest application layer. Contains a list of modules which are managed by this layer.
  */
 public class LayerInstance
     implements Layer
@@ -49,7 +50,8 @@
 
     public LayerInstance( LayerModel model,
                           ApplicationInstance applicationInstance,
-                          UsedLayersInstance usedLayersInstance )
+                          UsedLayersInstance usedLayersInstance
+    )
     {
         // Constructor parameters
         this.layerModel = model;
@@ -130,59 +132,55 @@
         return usedLayersInstance;
     }
 
-    /* package */ Iterable<ModelModule<ObjectModel>> visibleObjects( final Visibility visibility )
+    /* package */ Iterable<ModelModule<ObjectDescriptor>> visibleObjects( final Visibility visibility )
     {
-        return flattenIterables( map( new Function<ModuleInstance, Iterable<ModelModule<ObjectModel>>>()
+        return flattenIterables( map( new Function<ModuleInstance, Iterable<ModelModule<ObjectDescriptor>>>()
         {
 
             @Override
-            public Iterable<ModelModule<ObjectModel>> map( ModuleInstance moduleInstance )
+            public Iterable<ModelModule<ObjectDescriptor>> map( ModuleInstance moduleInstance )
             {
                 return moduleInstance.visibleObjects( visibility );
             }
-
         }, moduleInstances ) );
     }
 
-    /* package */ Iterable<ModelModule<TransientModel>> visibleTransients( final Visibility visibility )
+    /* package */ Iterable<ModelModule<TransientDescriptor>> visibleTransients( final Visibility visibility )
     {
-        return flattenIterables( map( new Function<ModuleInstance, Iterable<ModelModule<TransientModel>>>()
+        return flattenIterables( map( new Function<ModuleInstance, Iterable<ModelModule<TransientDescriptor>>>()
         {
 
             @Override
-            public Iterable<ModelModule<TransientModel>> map( ModuleInstance moduleInstance )
+            public Iterable<ModelModule<TransientDescriptor>> map( ModuleInstance moduleInstance )
             {
                 return moduleInstance.visibleTransients( visibility );
             }
-
         }, moduleInstances ) );
     }
 
-    /* package */ Iterable<ModelModule<EntityModel>> visibleEntities( final Visibility visibility )
+    /* package */ Iterable<ModelModule<EntityDescriptor>> visibleEntities( final Visibility visibility )
     {
-        return flattenIterables( map( new Function<ModuleInstance, Iterable<ModelModule<EntityModel>>>()
+        return flattenIterables( map( new Function<ModuleInstance, Iterable<ModelModule<EntityDescriptor>>>()
         {
 
             @Override
-            public Iterable<ModelModule<EntityModel>> map( ModuleInstance moduleInstance )
+            public Iterable<ModelModule<EntityDescriptor>> map( ModuleInstance moduleInstance )
             {
                 return moduleInstance.visibleEntities( visibility );
             }
-
         }, moduleInstances ) );
     }
 
-    /* package */ Iterable<ModelModule<ValueModel>> visibleValues( final Visibility visibility )
+    /* package */ Iterable<ModelModule<ValueDescriptor>> visibleValues( final Visibility visibility )
     {
-        return flattenIterables( map( new Function<ModuleInstance, Iterable<ModelModule<ValueModel>>>()
+        return flattenIterables( map( new Function<ModuleInstance, Iterable<ModelModule<ValueDescriptor>>>()
         {
 
             @Override
-            public Iterable<ModelModule<ValueModel>> map( ModuleInstance moduleInstance )
+            public Iterable<ModelModule<ValueDescriptor>> map( ModuleInstance moduleInstance )
             {
                 return moduleInstance.visibleValues( visibility );
             }
-
         }, moduleInstances ) );
     }
 
@@ -196,7 +194,6 @@
             {
                 return moduleInstance.visibleServices( visibility );
             }
-
         }, moduleInstances ) );
     }
 
@@ -212,5 +209,4 @@
 
         throw new IllegalArgumentException( "No such module:" + moduleName );
     }
-
 }
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/structure/ModelModule.java b/core/runtime/src/main/java/org/qi4j/runtime/structure/ModelModule.java
deleted file mode 100644
index fe787a0..0000000
--- a/core/runtime/src/main/java/org/qi4j/runtime/structure/ModelModule.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package org.qi4j.runtime.structure;
-
-import org.qi4j.api.composite.ModelDescriptor;
-import org.qi4j.functional.Function;
-
-/**
- * TODO
- */
-public class ModelModule<T extends ModelDescriptor>
-{
-    public static <T extends ModelDescriptor> Function<T, ModelModule<T>> modelModuleFunction( final ModuleInstance module )
-    {
-        return new Function<T, ModelModule<T>>()
-        {
-            @Override
-            public ModelModule<T> map( T model )
-            {
-                return new ModelModule<>( module, model );
-            }
-        };
-    }
-
-    public static <T extends ModelDescriptor> Function<ModelModule<T>, T> modelFunction()
-    {
-        return new Function<ModelModule<T>, T>()
-        {
-            @Override
-            public T map( ModelModule<T> modelModule )
-            {
-                return modelModule.model();
-            }
-        };
-    }
-
-    private final ModuleInstance module;
-    private final T model;
-
-    public ModelModule( ModuleInstance module, T model )
-    {
-        this.module = module;
-        this.model = model;
-    }
-
-    public ModuleInstance module()
-    {
-        return module;
-    }
-
-    public T model()
-    {
-        return model;
-    }
-
-    @Override
-    public boolean equals( Object o )
-    {
-        if( this == o )
-        {
-            return true;
-        }
-        if( o == null || getClass() != o.getClass() )
-        {
-            return false;
-        }
-
-        ModelModule that = (ModelModule) o;
-
-        if( model != null ? !model.equals( that.model ) : that.model != null )
-        {
-            return false;
-        }
-
-        return !( module != null ? !module.equals( that.module ) : that.module != null );
-    }
-
-    @Override
-    public int hashCode()
-    {
-        int result = module != null ? module.hashCode() : 0;
-        result = 31 * result + ( model != null ? model.hashCode() : 0 );
-        return result;
-    }
-
-    @Override
-    public String toString()
-    {
-        return module.name() + ":" + model;
-    }
-}
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/structure/ModuleInstance.java b/core/runtime/src/main/java/org/qi4j/runtime/structure/ModuleInstance.java
index c009c75..1612089 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/structure/ModuleInstance.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/structure/ModuleInstance.java
@@ -50,6 +50,7 @@
 import org.qi4j.api.query.QueryBuilder;
 import org.qi4j.api.query.QueryBuilderFactory;
 import org.qi4j.api.service.NoSuchServiceException;
+import org.qi4j.api.service.ServiceDescriptor;
 import org.qi4j.api.service.ServiceReference;
 import org.qi4j.api.structure.Module;
 import org.qi4j.api.unitofwork.UnitOfWork;
@@ -69,6 +70,7 @@
 import org.qi4j.functional.Specifications;
 import org.qi4j.runtime.activation.ActivationDelegate;
 import org.qi4j.runtime.composite.FunctionStateResolver;
+import org.qi4j.runtime.composite.StateResolver;
 import org.qi4j.runtime.composite.TransientBuilderInstance;
 import org.qi4j.runtime.composite.TransientModel;
 import org.qi4j.runtime.composite.TransientStateInstance;
@@ -88,7 +90,6 @@
 import org.qi4j.runtime.service.ServicesInstance;
 import org.qi4j.runtime.service.ServicesModel;
 import org.qi4j.runtime.unitofwork.UnitOfWorkInstance;
-import org.qi4j.runtime.composite.StateResolver;
 import org.qi4j.runtime.value.ValueBuilderInstance;
 import org.qi4j.runtime.value.ValueBuilderWithPrototype;
 import org.qi4j.runtime.value.ValueBuilderWithState;
@@ -97,8 +98,13 @@
 import org.qi4j.runtime.value.ValuesModel;
 import org.qi4j.spi.entitystore.EntityStore;
 import org.qi4j.spi.metrics.MetricsProviderAdapter;
+import org.qi4j.spi.module.ModelModule;
+import org.qi4j.spi.module.ModuleSpi;
 import org.qi4j.valueserialization.orgjson.OrgJsonValueSerialization;
 
+import static org.qi4j.api.common.Visibility.application;
+import static org.qi4j.api.common.Visibility.layer;
+import static org.qi4j.api.common.Visibility.module;
 import static org.qi4j.api.util.Classes.RAW_CLASS;
 import static org.qi4j.api.util.Classes.modelTypeSpecification;
 import static org.qi4j.functional.Iterables.cast;
@@ -110,10 +116,10 @@
 import static org.qi4j.functional.Iterables.toList;
 
 /**
- * Instance of a Qi4j Module. Contains the various composites for this Module.
+ * Instance of a Zest Module. Contains the various composites for this Module.
  */
 public class ModuleInstance
-    implements Module, Activation
+    implements Module, ModuleSpi, Activation
 {
     // Constructor parameters
     private final ModuleModel model;
@@ -139,7 +145,8 @@
     @SuppressWarnings( "LeakingThisInConstructor" )
     public ModuleInstance( ModuleModel moduleModel, LayerInstance layerInstance, TransientsModel transientsModel,
                            EntitiesModel entitiesModel, ObjectsModel objectsModel, ValuesModel valuesModel,
-                           ServicesModel servicesModel, ImportedServicesModel importedServicesModel )
+                           ServicesModel servicesModel, ImportedServicesModel importedServicesModel
+    )
     {
         // Constructor parameters
         model = moduleModel;
@@ -360,7 +367,8 @@
                                                          Function<PropertyDescriptor, Object> propertyFunction,
                                                          Function<AssociationDescriptor, EntityReference> associationFunction,
                                                          Function<AssociationDescriptor, Iterable<EntityReference>> manyAssociationFunction,
-                                                         Function<AssociationDescriptor, Map<String, EntityReference>> namedAssociationFunction )
+                                                         Function<AssociationDescriptor, Map<String, EntityReference>> namedAssociationFunction
+    )
     {
         NullArgumentException.validateNotNull( "propertyFunction", propertyFunction );
         NullArgumentException.validateNotNull( "associationFunction", associationFunction );
@@ -383,9 +391,9 @@
     private static class InitialStateResolver
         implements StateResolver
     {
-        private final ModuleInstance module;
+        private final Module module;
 
-        private InitialStateResolver( ModuleInstance module )
+        private InitialStateResolver( Module module )
         {
             this.module = module;
         }
@@ -567,7 +575,6 @@
         activation.deregisterActivationEventListener( listener );
     }
 
-
     // Other methods
     /* package */ ModuleModel model()
     {
@@ -624,7 +631,7 @@
         return store;
     }
 
-    /* package */ IdentityGenerator identityGenerator()
+    public IdentityGenerator identityGenerator()
     {
         synchronized( this )
         {
@@ -677,31 +684,31 @@
         return metrics;
     }
 
-    Iterable<ModelModule<ObjectModel>> visibleObjects( Visibility visibility )
+    public Iterable<ModelModule<ObjectDescriptor>> visibleObjects( Visibility visibility )
     {
-        return map( ModelModule.<ObjectModel>modelModuleFunction( this ),
+        return map( ModelModule.<ObjectDescriptor>modelModuleFunction( this ),
                     filter( new VisibilitySpecification( visibility ), objects.models() ) );
     }
 
-    Iterable<ModelModule<TransientModel>> visibleTransients( Visibility visibility )
+    public Iterable<ModelModule<TransientDescriptor>> visibleTransients( Visibility visibility )
     {
-        return map( ModelModule.<TransientModel>modelModuleFunction( this ),
+        return map( ModelModule.<TransientDescriptor>modelModuleFunction( this ),
                     filter( new VisibilitySpecification( visibility ), transients.models() ) );
     }
 
-    Iterable<ModelModule<EntityModel>> visibleEntities( Visibility visibility )
+    public Iterable<ModelModule<EntityDescriptor>> visibleEntities( Visibility visibility )
     {
-        return map( ModelModule.<EntityModel>modelModuleFunction( this ),
+        return map( ModelModule.<EntityDescriptor>modelModuleFunction( this ),
                     filter( new VisibilitySpecification( visibility ), entities.models() ) );
     }
 
-    Iterable<ModelModule<ValueModel>> visibleValues( Visibility visibility )
+    public Iterable<ModelModule<ValueDescriptor>> visibleValues( Visibility visibility )
     {
-        return map( ModelModule.<ValueModel>modelModuleFunction( this ),
+        return map( ModelModule.<ValueDescriptor>modelModuleFunction( this ),
                     filter( new VisibilitySpecification( visibility ), values.models() ) );
     }
 
-    Iterable<ServiceReference<?>> visibleServices( Visibility visibility )
+    public Iterable<ServiceReference<?>> visibleServices( Visibility visibility )
     {
         return flatten( services.visibleServices( visibility ),
                         importedServices.visibleServices( visibility ) );
@@ -824,4 +831,46 @@
             return clazz;
         }
     }
+
+    public Iterable<ModelModule<ValueDescriptor>> findVisibleValueTypes()
+    {
+        return flatten( visibleValues( Visibility.module ),
+            layerInstance().visibleValues( Visibility.layer ),
+            layerInstance().visibleValues( Visibility.application ),
+            layerInstance().usedLayersInstance().visibleValues()
+        );
+    }
+
+    public Iterable<ModelModule<EntityDescriptor>> findVisibleEntityTypes()
+    {
+        return flatten( visibleEntities( Visibility.module ),
+            layerInstance().visibleEntities( Visibility.layer ),
+            layerInstance().visibleEntities( Visibility.application ),
+            layerInstance().usedLayersInstance().visibleEntities()
+        );
+    }
+    public Iterable<ModelModule<TransientDescriptor>> findVisibleTransientTypes()
+    {
+        return flatten( visibleTransients( Visibility.module ),
+            layerInstance().visibleTransients( Visibility.layer ),
+            layerInstance().visibleTransients( Visibility.application ),
+            layerInstance().usedLayersInstance().visibleTransients()
+        );
+    }
+    public Iterable<ModelModule<ServiceDescriptor>> findVisibleServiceTypes()
+    {
+        return flatten( visibleServices( Visibility.module ),
+            layerInstance().visibleServices( Visibility.layer ),
+            layerInstance().visibleServices( Visibility.application ),
+            layerInstance().usedLayersInstance().visibleServices()
+        );
+    }
+    public Iterable<ModelModule<ObjectDescriptor>> findVisibleObjectTypes()
+    {
+        return flatten( visibleObjects( Visibility.module ),
+            layerInstance().visibleObjects( Visibility.layer ),
+            layerInstance().visibleObjects( Visibility.application ),
+            layerInstance().usedLayersInstance().visibleObjects()
+        );
+    }
 }
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/structure/ModuleUnitOfWork.java b/core/runtime/src/main/java/org/qi4j/runtime/structure/ModuleUnitOfWork.java
index dd1a830..9989f65 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/structure/ModuleUnitOfWork.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/structure/ModuleUnitOfWork.java
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2009, Rickard Öberg. All Rights Reserved.
- * Copyright (c) 2013, Niclas Hedhman. All Rights Reserved.
+ * Copyright (c) 2013-2015, Niclas Hedhman. All Rights Reserved.
  * Copyright (c) 2013-2015, Paul Merlin. All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,9 +16,11 @@
 package org.qi4j.runtime.structure;
 
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 import org.qi4j.api.association.AssociationDescriptor;
+import org.qi4j.api.association.AssociationStateHolder;
 import org.qi4j.api.common.QualifiedName;
 import org.qi4j.api.composite.Composite;
 import org.qi4j.api.entity.EntityBuilder;
@@ -27,7 +29,9 @@
 import org.qi4j.api.entity.Identity;
 import org.qi4j.api.entity.IdentityGenerator;
 import org.qi4j.api.entity.LifecycleException;
+import org.qi4j.api.property.Property;
 import org.qi4j.api.property.PropertyDescriptor;
+import org.qi4j.api.property.StateHolder;
 import org.qi4j.api.query.Query;
 import org.qi4j.api.query.QueryBuilder;
 import org.qi4j.api.query.QueryExecutionException;
@@ -42,19 +46,26 @@
 import org.qi4j.api.unitofwork.UnitOfWorkFactory;
 import org.qi4j.api.usecase.Usecase;
 import org.qi4j.api.util.NullArgumentException;
+import org.qi4j.api.value.ValueBuilder;
+import org.qi4j.api.value.ValueComposite;
 import org.qi4j.functional.Function;
 import org.qi4j.functional.Iterables;
 import org.qi4j.functional.Specification;
+import org.qi4j.runtime.association.AssociationInstance;
+import org.qi4j.runtime.association.ManyAssociationInstance;
+import org.qi4j.runtime.association.NamedAssociationInstance;
 import org.qi4j.runtime.composite.FunctionStateResolver;
 import org.qi4j.runtime.entity.EntityInstance;
 import org.qi4j.runtime.entity.EntityModel;
 import org.qi4j.runtime.property.PropertyModel;
 import org.qi4j.runtime.unitofwork.EntityBuilderInstance;
 import org.qi4j.runtime.unitofwork.UnitOfWorkInstance;
-import org.qi4j.runtime.composite.StateResolver;
-import org.qi4j.runtime.value.ValueStateModel;
+import org.qi4j.runtime.value.ValueInstance;
+import org.qi4j.spi.entity.EntityState;
 import org.qi4j.spi.entity.EntityStatus;
+import org.qi4j.spi.entity.NamedAssociationState;
 import org.qi4j.spi.entitystore.EntityStore;
+import org.qi4j.spi.module.ModelModule;
 import org.qi4j.spi.query.EntityFinder;
 import org.qi4j.spi.query.EntityFinderException;
 import org.qi4j.spi.query.QueryBuilderSPI;
@@ -62,6 +73,7 @@
 
 import static org.qi4j.api.entity.EntityReference.parseEntityReference;
 import static org.qi4j.functional.Iterables.first;
+import static org.qi4j.functional.Iterables.map;
 
 /**
  * JAVADOC
@@ -79,22 +91,22 @@
         }
         catch( NoSuchMethodException e )
         {
-            throw new InternalError( "Qi4j Core Runtime codebase is corrupted. Contact Qi4j team: ModuleUnitOfWork" );
+            throw new InternalError( "Zest Core Runtime codebase is corrupted. Contact Zest team: ModuleUnitOfWork" );
         }
     }
 
     private final UnitOfWorkInstance uow;
-    private final ModuleInstance moduleInstance;
+    private final ModuleInstance module;
 
-    ModuleUnitOfWork( ModuleInstance moduleInstance, UnitOfWorkInstance uow )
+    ModuleUnitOfWork( ModuleInstance module, UnitOfWorkInstance uow )
     {
-        this.moduleInstance = moduleInstance;
+        this.module = module;
         this.uow = uow;
     }
 
     public ModuleInstance module()
     {
-        return moduleInstance;
+        return module;
     }
 
     public UnitOfWorkInstance instance()
@@ -105,7 +117,7 @@
     @Override
     public UnitOfWorkFactory unitOfWorkFactory()
     {
-        return moduleInstance;
+        return module;
     }
 
     @Override
@@ -133,7 +145,7 @@
     }
 
     @Override
-    @SuppressWarnings( {"raw", "unchecked"} )
+    @SuppressWarnings( { "raw", "unchecked" } )
     public <T> Query<T> newQuery( QueryBuilder<T> queryBuilder )
     {
         QueryBuilderSPI queryBuilderSPI = (QueryBuilderSPI) queryBuilder;
@@ -166,11 +178,15 @@
     public <T> EntityBuilder<T> newEntityBuilder( Class<T> type, String identity )
         throws EntityTypeNotFoundException
     {
-        ModelModule<EntityModel> model = moduleInstance.typeLookup().lookupEntityModel( type );
+        ModelModule<EntityModel> model = module.typeLookup().lookupEntityModel( type );
 
         if( model == null )
         {
-            throw new EntityTypeNotFoundException( type.getName() );
+            throw new EntityTypeNotFoundException( type.getName(),
+                                                   module.name(),
+                                                   map( ModelModule.toStringFunction,
+                                                        module.findVisibleEntityTypes()
+                                                   ) );
         }
 
         EntityStore entityStore = model.module().entityStore();
@@ -189,7 +205,7 @@
 
         builder = new EntityBuilderInstance<>( model,
                                                this,
-                                               uow.getEntityStoreUnitOfWork( entityStore, moduleInstance ),
+                                               uow.getEntityStoreUnitOfWork( entityStore, module ),
                                                identity );
         return builder;
     }
@@ -226,16 +242,20 @@
         NullArgumentException.validateNotNull( "manyAssociationFunction", manyAssociationFunction );
         NullArgumentException.validateNotNull( "namedAssociationFunction", namedAssociationFunction );
 
-        ModelModule<EntityModel> model = moduleInstance.typeLookup().lookupEntityModel( type );
+        ModelModule<EntityModel> model = module.typeLookup().lookupEntityModel( type );
 
         if( model == null )
         {
-            throw new EntityTypeNotFoundException( type.getName() );
+            throw new EntityTypeNotFoundException( type.getName(),
+                                                   module.name(),
+                                                   map( ModelModule.toStringFunction,
+                                                        module.findVisibleEntityTypes()
+                                                   ) );
         }
 
         EntityStore entityStore = model.module().entityStore();
 
-        StateResolver stateResolver = new FunctionStateResolver(
+        FunctionStateResolver stateResolver = new FunctionStateResolver(
             propertyFunction, associationFunction, manyAssociationFunction, namedAssociationFunction
         );
 
@@ -258,7 +278,7 @@
 
         return new EntityBuilderInstance<>( model,
                                             this,
-                                            uow.getEntityStoreUnitOfWork( entityStore, moduleInstance ),
+                                            uow.getEntityStoreUnitOfWork( entityStore, module ),
                                             identity,
                                             stateResolver );
     }
@@ -267,11 +287,15 @@
     public <T> T get( Class<T> type, String identity )
         throws EntityTypeNotFoundException, NoSuchEntityException
     {
-        Iterable<ModelModule<EntityModel>> models = moduleInstance.typeLookup().lookupEntityModels( type );
+        Iterable<ModelModule<EntityModel>> models = module.typeLookup().lookupEntityModels( type );
 
         if( !models.iterator().hasNext() )
         {
-            throw new EntityTypeNotFoundException( type.getName() );
+            throw new EntityTypeNotFoundException( type.getName(),
+                                                   module.name(),
+                                                   map( ModelModule.toStringFunction,
+                                                        module.findVisibleEntityTypes()
+                                                   ) );
         }
 
         return uow.get( parseEntityReference( identity ), this, models, type );
@@ -310,10 +334,11 @@
         }
         else
         {
-            throw new NoSuchEntityException( compositeInstance.identity(), compositeInstance.types() );
+            throw new NoSuchEntityException( compositeInstance.identity(), compositeInstance.types(), usecase() );
         }
     }
 
+    @SuppressWarnings( "DuplicateThrows" )
     @Override
     public void complete()
         throws UnitOfWorkCompletionException, ConcurrentEntityModificationException
@@ -332,7 +357,7 @@
     {
         discard();
     }
-    
+
     @Override
     public boolean isOpen()
     {
@@ -403,6 +428,55 @@
         uow.addEntity( instance );
     }
 
+    @Override
+    public <T extends Identity> T toValue( Class<T> primaryType, T entityComposite )
+    {
+        Function<PropertyDescriptor, Object> propertyFunction = new ToValuePropertyMappingFunction( entityComposite );
+        Function<AssociationDescriptor, EntityReference> assocationFunction = new ToValueAssociationMappingFunction<>( entityComposite );
+        Function<AssociationDescriptor, Iterable<EntityReference>> manyAssocFunction = new ToValueManyAssociationMappingFunction<>( entityComposite );
+        Function<AssociationDescriptor, Map<String, EntityReference>> namedAssocFunction = new ToValueNameAssociationMappingFunction<>( entityComposite );
+
+        @SuppressWarnings( "unchecked" )
+        ValueBuilder<T> builder = module().newValueBuilderWithState(
+            primaryType, propertyFunction, assocationFunction, manyAssocFunction, namedAssocFunction );
+        return builder.newInstance();
+    }
+
+    @Override
+    public <T extends Identity> T toEntity( Class<T> primaryType, T valueComposite )
+    {
+        Function<PropertyDescriptor, Object> propertyFunction = new ToEntityPropertyMappingFunction<>( valueComposite );
+        Function<AssociationDescriptor, EntityReference> assocationFunction = new ToEntityAssociationMappingFunction<>( valueComposite );
+        Function<AssociationDescriptor, Iterable<EntityReference>> manyAssocFunction = new ToEntityManyAssociationMappingFunction<>( valueComposite );
+        Function<AssociationDescriptor, Map<String, EntityReference>> namedAssocFunction = new ToEntityNameAssociationMappingFunction<>( valueComposite );
+
+        String identity = valueComposite.identity().get();
+        try
+        {
+            T entity = get( primaryType, identity );
+            // If successful, then this entity is to by modified.
+            EntityInstance instance = EntityInstance.entityInstanceOf( (EntityComposite) entity );
+            EntityState state = instance.entityState();
+            FunctionStateResolver stateResolver = new FunctionStateResolver( propertyFunction,
+                                                                             assocationFunction,
+                                                                             manyAssocFunction,
+                                                                             namedAssocFunction );
+            EntityModel model = (EntityModel) EntityInstance.entityInstanceOf( (EntityComposite) entity ).descriptor();
+            stateResolver.populateState( model, state );
+            return entity;
+        }
+        catch( NoSuchEntityException e )
+        {
+            EntityBuilder<T> entityBuilder = newEntityBuilderWithState( primaryType,
+                                                                        identity,
+                                                                        propertyFunction,
+                                                                        assocationFunction,
+                                                                        manyAssocFunction,
+                                                                        namedAssocFunction );
+            return entityBuilder.newInstance();
+        }
+    }
+
     private static class UoWQuerySource implements QuerySource
     {
         private final ModuleUnitOfWork moduleUnitOfWork;
@@ -533,4 +607,167 @@
             return "UnitOfWork( " + moduleUnitOfWork.usecase().name() + " )";
         }
     }
+
+    private class ToValuePropertyMappingFunction
+        implements Function<PropertyDescriptor, Object>
+    {
+        private Object entity;
+
+        public ToValuePropertyMappingFunction( Object entity )
+        {
+            this.entity = entity;
+        }
+
+        @Override
+        public Object map( PropertyDescriptor propertyDescriptor )
+        {
+            EntityState entityState = EntityInstance.entityInstanceOf( (EntityComposite) entity ).entityState();
+            return entityState.propertyValueOf( propertyDescriptor.qualifiedName() );
+        }
+    }
+
+    private class ToValueAssociationMappingFunction<T>
+        implements Function<AssociationDescriptor, EntityReference>
+    {
+        private final T entity;
+
+        public ToValueAssociationMappingFunction( T entity )
+        {
+            this.entity = entity;
+        }
+
+        @Override
+        public EntityReference map( AssociationDescriptor associationDescriptor )
+        {
+            EntityState entityState = EntityInstance.entityInstanceOf( (EntityComposite) entity ).entityState();
+            return entityState.associationValueOf( associationDescriptor.qualifiedName() );
+        }
+    }
+
+    private class ToValueManyAssociationMappingFunction<T>
+        implements Function<AssociationDescriptor, Iterable<EntityReference>>
+    {
+        private final T entity;
+
+        public ToValueManyAssociationMappingFunction( T entity )
+        {
+            this.entity = entity;
+        }
+
+        @Override
+        public Iterable<EntityReference> map( AssociationDescriptor associationDescriptor )
+        {
+            EntityState entityState = EntityInstance.entityInstanceOf( (EntityComposite) entity ).entityState();
+            return entityState.manyAssociationValueOf( associationDescriptor.qualifiedName() );
+        }
+    }
+
+    private class ToValueNameAssociationMappingFunction<T>
+        implements Function<AssociationDescriptor, Map<String, EntityReference>>
+    {
+        private final T entity;
+
+        public ToValueNameAssociationMappingFunction( T entity )
+        {
+            this.entity = entity;
+        }
+
+        @Override
+        public Map<String, EntityReference> map( AssociationDescriptor associationDescriptor )
+        {
+            Map<String, EntityReference> result = new HashMap<>();
+            EntityState entityState = EntityInstance.entityInstanceOf( (EntityComposite) entity ).entityState();
+            final NamedAssociationState state = entityState.namedAssociationValueOf( associationDescriptor.qualifiedName() );
+            for( String name : state )
+            {
+                result.put( name, state.get( name ) );
+            }
+            return result;
+        }
+    }
+
+    private class ToEntityPropertyMappingFunction<T>
+        implements Function<PropertyDescriptor, Object>
+    {
+        private final T value;
+
+        public ToEntityPropertyMappingFunction( T value )
+        {
+            this.value = value;
+        }
+
+        @Override
+        public Object map( PropertyDescriptor propertyDescriptor )
+        {
+            StateHolder state = ValueInstance.valueInstanceOf( (ValueComposite) value ).state();
+            Property<Object> property = state.propertyFor( propertyDescriptor.accessor() );
+            return property.get();
+        }
+    }
+
+    private class ToEntityAssociationMappingFunction<T>
+        implements Function<AssociationDescriptor, EntityReference>
+    {
+
+        private final T value;
+
+        public ToEntityAssociationMappingFunction( T value )
+        {
+            this.value = value;
+        }
+
+        @Override
+        public EntityReference map( AssociationDescriptor associationDescriptor )
+        {
+            AssociationStateHolder state = ValueInstance.valueInstanceOf( (ValueComposite) value ).state();
+            AssociationInstance<T> association = (AssociationInstance<T>) state.associationFor( associationDescriptor.accessor() );
+            return association.getAssociationState().get();
+        }
+    }
+
+    private class ToEntityManyAssociationMappingFunction<T>
+        implements Function<AssociationDescriptor, Iterable<EntityReference>>
+    {
+
+        private final T value;
+
+        public ToEntityManyAssociationMappingFunction( T valueComposite )
+        {
+            this.value = valueComposite;
+        }
+
+        @Override
+        public Iterable<EntityReference> map( AssociationDescriptor associationDescriptor )
+        {
+            AssociationStateHolder state = ValueInstance.valueInstanceOf( (ValueComposite) value ).state();
+            ManyAssociationInstance<T> association =
+                (ManyAssociationInstance<T>) state.manyAssociationFor( associationDescriptor.accessor() );
+            return association.getManyAssociationState();
+        }
+    }
+
+    private class ToEntityNameAssociationMappingFunction<T>
+        implements Function<AssociationDescriptor, Map<String, EntityReference>>
+    {
+        private final T value;
+
+        public ToEntityNameAssociationMappingFunction( T valueComposite )
+        {
+            this.value = valueComposite;
+        }
+
+        @Override
+        public Map<String, EntityReference> map( AssociationDescriptor associationDescriptor )
+        {
+            AssociationStateHolder state = ValueInstance.valueInstanceOf( (ValueComposite) value ).state();
+            NamedAssociationInstance<T> association =
+                (NamedAssociationInstance<T>) state.namedAssociationFor( associationDescriptor.accessor() );
+            HashMap<String, EntityReference> result = new HashMap<>();
+            for( Map.Entry<String, EntityReference> entry : association.getEntityReferences() )
+            {
+                result.put( entry.getKey(), entry.getValue() );
+            }
+            return result;
+        }
+    }
 }
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/structure/TypeLookup.java b/core/runtime/src/main/java/org/qi4j/runtime/structure/TypeLookup.java
index 1383ce8..91b49ff 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/structure/TypeLookup.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/structure/TypeLookup.java
@@ -27,7 +27,6 @@
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
-import org.qi4j.api.common.Visibility;
 import org.qi4j.api.composite.AmbiguousTypeException;
 import org.qi4j.api.composite.ModelDescriptor;
 import org.qi4j.api.service.NoSuchServiceException;
@@ -39,7 +38,11 @@
 import org.qi4j.runtime.entity.EntityModel;
 import org.qi4j.runtime.object.ObjectModel;
 import org.qi4j.runtime.value.ValueModel;
+import org.qi4j.spi.module.ModelModule;
 
+import static org.qi4j.api.common.Visibility.application;
+import static org.qi4j.api.common.Visibility.layer;
+import static org.qi4j.api.common.Visibility.module;
 import static org.qi4j.api.util.Classes.RAW_CLASS;
 import static org.qi4j.api.util.Classes.interfacesOf;
 import static org.qi4j.functional.Iterables.cast;
@@ -99,8 +102,9 @@
      *
      * <p>Type lookup is done lazily and cached.</p>
      *
-     * @param type  Looked up Type
-     * @return      First matching Object Model
+     * @param type Looked up Type
+     *
+     * @return First matching Object Model
      */
     @SuppressWarnings( { "raw", "unchecked" } )
     /* package */ ModelModule<ObjectModel> lookupObjectModel( final Class type )
@@ -113,16 +117,20 @@
             Iterable<ModelModule<ObjectModel>> flatten = flatten(
                 ambiguousTypeCheck( type,
                                     findModels( new ExactTypeLookupSpecification( type ),
-                                                moduleInstance.visibleObjects( Visibility.module ),
-                                                moduleInstance.layerInstance().visibleObjects( Visibility.layer ),
-                                                moduleInstance.layerInstance().visibleObjects( Visibility.application ),
-                                                moduleInstance.layerInstance().usedLayersInstance().visibleObjects() ) ),
+                                                moduleInstance.visibleObjects( module ),
+                                                moduleInstance.layerInstance().visibleObjects( layer ),
+                                                moduleInstance.layerInstance().visibleObjects( application ),
+                                                moduleInstance.layerInstance()
+                                                    .usedLayersInstance()
+                                                    .visibleObjects() ) ),
                 ambiguousTypeCheck( type,
                                     findModels( new AssignableTypeLookupSpecification( type ),
-                                                moduleInstance.visibleObjects( Visibility.module ),
-                                                moduleInstance.layerInstance().visibleObjects( Visibility.layer ),
-                                                moduleInstance.layerInstance().visibleObjects( Visibility.application ),
-                                                moduleInstance.layerInstance().usedLayersInstance().visibleObjects() ) ) );
+                                                moduleInstance.visibleObjects( module ),
+                                                moduleInstance.layerInstance().visibleObjects( layer ),
+                                                moduleInstance.layerInstance().visibleObjects( application ),
+                                                moduleInstance.layerInstance()
+                                                    .usedLayersInstance()
+                                                    .visibleObjects() ) ) );
 
             model = first( flatten );
 
@@ -146,8 +154,9 @@
      *
      * <p>Type lookup is done lazily and cached.</p>
      *
-     * @param type  Looked up Type
-     * @return      First matching Transient Model
+     * @param type Looked up Type
+     *
+     * @return First matching Transient Model
      */
     @SuppressWarnings( { "raw", "unchecked" } )
     /* package */ ModelModule<TransientModel> lookupTransientModel( final Class type )
@@ -160,16 +169,22 @@
             Iterable<ModelModule<TransientModel>> allModels = flatten(
                 ambiguousTypeCheck( type,
                                     findModels( new ExactTypeLookupSpecification( type ),
-                                                moduleInstance.visibleTransients( Visibility.module ),
-                                                moduleInstance.layerInstance().visibleTransients( Visibility.layer ),
-                                                moduleInstance.layerInstance().visibleTransients( Visibility.application ),
-                                                moduleInstance.layerInstance().usedLayersInstance().visibleTransients() ) ),
+                                                moduleInstance.visibleTransients( module ),
+                                                moduleInstance.layerInstance().visibleTransients( layer ),
+                                                moduleInstance.layerInstance().visibleTransients( application ),
+                                                moduleInstance.layerInstance().usedLayersInstance().visibleTransients()
+                                    )
+                ),
+
                 ambiguousTypeCheck( type,
                                     findModels( new AssignableTypeLookupSpecification( type ),
-                                                moduleInstance.visibleTransients( Visibility.module ),
-                                                moduleInstance.layerInstance().visibleTransients( Visibility.layer ),
-                                                moduleInstance.layerInstance().visibleTransients( Visibility.application ),
-                                                moduleInstance.layerInstance().usedLayersInstance().visibleTransients() ) ) );
+                                                moduleInstance.visibleTransients( module ),
+                                                moduleInstance.layerInstance().visibleTransients( layer ),
+                                                moduleInstance.layerInstance().visibleTransients( application ),
+                                                moduleInstance.layerInstance().usedLayersInstance().visibleTransients()
+                                    )
+                )
+            );
             model = first( allModels );
 
             if( model != null )
@@ -192,8 +207,9 @@
      *
      * <p>Type lookup is done lazily and cached.</p>
      *
-     * @param type  Looked up Type
-     * @return      First matching Value Model
+     * @param type Looked up Type
+     *
+     * @return First matching Value Model
      */
     @SuppressWarnings( { "raw", "unchecked" } )
     public ModelModule<ValueModel> lookupValueModel( final Class type )
@@ -206,16 +222,19 @@
             Iterable<ModelModule<ValueModel>> flatten = flatten(
                 ambiguousTypeCheck( type,
                                     findModels( new ExactTypeLookupSpecification( type ),
-                                                moduleInstance.visibleValues( Visibility.module ),
-                                                moduleInstance.layerInstance().visibleValues( Visibility.layer ),
-                                                moduleInstance.layerInstance().visibleValues( Visibility.application ),
+                                                moduleInstance.visibleValues( module ),
+                                                moduleInstance.layerInstance().visibleValues( layer ),
+                                                moduleInstance.layerInstance().visibleValues( application ),
                                                 moduleInstance.layerInstance().usedLayersInstance().visibleValues() ) ),
                 ambiguousTypeCheck( type,
                                     findModels( new AssignableTypeLookupSpecification( type ),
-                                                moduleInstance.visibleValues( Visibility.module ),
-                                                moduleInstance.layerInstance().visibleValues( Visibility.layer ),
-                                                moduleInstance.layerInstance().visibleValues( Visibility.application ),
-                                                moduleInstance.layerInstance().usedLayersInstance().visibleValues() ) ) );
+                                                moduleInstance.visibleValues( module ),
+                                                moduleInstance.layerInstance().visibleValues( layer ),
+                                                moduleInstance.layerInstance().visibleValues( application ),
+                                                moduleInstance.layerInstance().usedLayersInstance().visibleValues()
+                                    )
+                )
+            );
 
             model = first( flatten );
 
@@ -242,8 +261,9 @@
      * <p><b>Should be used for creational use cases only.</b> For non-creational use cases see
      * {@link #lookupEntityModels(java.lang.Class)}.</p>
      *
-     * @param type  Looked up Type
-     * @return      First matching Entity Model
+     * @param type Looked up Type
+     *
+     * @return First matching Entity Model
      */
     @SuppressWarnings( { "raw", "unchecked" } )
     /* package */ ModelModule<EntityModel> lookupEntityModel( final Class type )
@@ -256,16 +276,21 @@
             Iterable<ModelModule<EntityModel>> allModels = flatten(
                 ambiguousTypeCheck( type,
                                     findModels( new ExactTypeLookupSpecification( type ),
-                                                moduleInstance.visibleEntities( Visibility.module ),
-                                                moduleInstance.layerInstance().visibleEntities( Visibility.layer ),
-                                                moduleInstance.layerInstance().visibleEntities( Visibility.application ),
-                                                moduleInstance.layerInstance().usedLayersInstance().visibleEntities() ) ),
+                                                moduleInstance.visibleEntities( module ),
+                                                moduleInstance.layerInstance().visibleEntities( layer ),
+                                                moduleInstance.layerInstance().visibleEntities( application ),
+                                                moduleInstance.layerInstance()
+                                                    .usedLayersInstance()
+                                                    .visibleEntities() ) ),
                 ambiguousTypeCheck( type,
                                     findModels( new AssignableTypeLookupSpecification( type ),
-                                                moduleInstance.visibleEntities( Visibility.module ),
-                                                moduleInstance.layerInstance().visibleEntities( Visibility.layer ),
-                                                moduleInstance.layerInstance().visibleEntities( Visibility.application ),
-                                                moduleInstance.layerInstance().usedLayersInstance().visibleEntities() ) ) );
+                                                moduleInstance.visibleEntities( module ),
+                                                moduleInstance.layerInstance().visibleEntities( layer ),
+                                                moduleInstance.layerInstance().visibleEntities( application ),
+                                                moduleInstance.layerInstance().usedLayersInstance().visibleEntities()
+                                    )
+                )
+            );
 
             model = first( allModels );
 
@@ -284,8 +309,8 @@
      * <p>Returned Iterable contains, in order, Entity Models that: </p>
      *
      * <ul>
-     *  <li>exactly match the given type, in Visibility then Assembly order ;</li>
-     *  <li>match a type assignable to the given type, in Visibility then Assembly order.</li>
+     * <li>exactly match the given type, in Visibility then Assembly order ;</li>
+     * <li>match a type assignable to the given type, in Visibility then Assembly order.</li>
      * </ul>
      *
      * <p>Multiple <b>exact</b> matches with the same Visibility are <b>forbidden</b> and result in an AmbiguousTypeException.</p>
@@ -296,8 +321,9 @@
      * <p><b>Should be used for non-creational use cases only.</b> For creational use cases see
      * {@link #lookupEntityModel(java.lang.Class)}.</p>
      *
-     * @param type  Looked up Type
-     * @return      All matching Entity Models
+     * @param type Looked up Type
+     *
+     * @return All matching Entity Models
      */
     @SuppressWarnings( { "raw", "unchecked" } )
     /* package */ Iterable<ModelModule<EntityModel>> lookupEntityModels( final Class type )
@@ -309,14 +335,16 @@
             Iterable<ModelModule<EntityModel>> matchingEntityModels = flatten(
                 ambiguousTypeCheck( type,
                                     findModels( new ExactTypeLookupSpecification( type ),
-                                                moduleInstance.visibleEntities( Visibility.module ),
-                                                moduleInstance.layerInstance().visibleEntities( Visibility.layer ),
-                                                moduleInstance.layerInstance().visibleEntities( Visibility.application ),
-                                                moduleInstance.layerInstance().usedLayersInstance().visibleEntities() ) ),
+                                                moduleInstance.visibleEntities( module ),
+                                                moduleInstance.layerInstance().visibleEntities( layer ),
+                                                moduleInstance.layerInstance().visibleEntities( application ),
+                                                moduleInstance.layerInstance().usedLayersInstance().visibleEntities()
+                                    )
+                ),
                 findModels( new AssignableTypeLookupSpecification( type ),
-                            moduleInstance.visibleEntities( Visibility.module ),
-                            moduleInstance.layerInstance().visibleEntities( Visibility.layer ),
-                            moduleInstance.layerInstance().visibleEntities( Visibility.application ),
+                            moduleInstance.visibleEntities( module ),
+                            moduleInstance.layerInstance().visibleEntities( layer ),
+                            moduleInstance.layerInstance().visibleEntities( application ),
                             moduleInstance.layerInstance().usedLayersInstance().visibleEntities() ) );
 
             // Don't return the same EntityModel multiple times
@@ -335,9 +363,10 @@
      *
      * <p>See {@link #lookupServiceReferences(java.lang.reflect.Type)}.</p>
      *
-     * @param <T>           Service Type
-     * @param serviceType   Looked up Type
-     * @return              First matching ServiceReference
+     * @param <T>         Service Type
+     * @param serviceType Looked up Type
+     *
+     * @return First matching ServiceReference
      */
     /* package */
     @SuppressWarnings( "unchecked" )
@@ -368,8 +397,8 @@
      * <p>Returned Iterable contains, in order, ServiceReferences that: </p>
      *
      * <ul>
-     *  <li>exactly match the given type, in Visibility then Assembly order ;</li>
-     *  <li>match a type assignable to the given type, in Visibility then Assembly order.</li>
+     * <li>exactly match the given type, in Visibility then Assembly order ;</li>
+     * <li>match a type assignable to the given type, in Visibility then Assembly order.</li>
      * </ul>
      *
      * <p>Multiple <b>exact</b> matches with the same Visibility are <b>allowed</b> to enable polymorphic lookup/injection.</p>
@@ -377,9 +406,10 @@
      *
      * <p>Type lookup is done lazily and cached.</p>
      *
-     * @param <T>           Service Type
-     * @param serviceType   Looked up Type
-     * @return              All matching ServiceReferences
+     * @param <T>         Service Type
+     * @param serviceType Looked up Type
+     *
+     * @return All matching ServiceReferences
      */
     @SuppressWarnings( "unchecked" )
     /* package */ <T> Iterable<ServiceReference<T>> lookupServiceReferences( final Type serviceType )
@@ -390,14 +420,14 @@
             // Lazily resolve ServicesReferences
             Iterable<ServiceReference<?>> matchingServices = flatten(
                 findServiceReferences( new ExactTypeLookupSpecification( serviceType ),
-                                       moduleInstance.visibleServices( Visibility.module ),
-                                       moduleInstance.layerInstance().visibleServices( Visibility.layer ),
-                                       moduleInstance.layerInstance().visibleServices( Visibility.application ),
+                                       moduleInstance.visibleServices( module ),
+                                       moduleInstance.layerInstance().visibleServices( layer ),
+                                       moduleInstance.layerInstance().visibleServices( application ),
                                        moduleInstance.layerInstance().usedLayersInstance().visibleServices() ),
                 findServiceReferences( new AssignableTypeLookupSpecification( serviceType ),
-                                       moduleInstance.visibleServices( Visibility.module ),
-                                       moduleInstance.layerInstance().visibleServices( Visibility.layer ),
-                                       moduleInstance.layerInstance().visibleServices( Visibility.application ),
+                                       moduleInstance.visibleServices( module ),
+                                       moduleInstance.layerInstance().visibleServices( layer ),
+                                       moduleInstance.layerInstance().visibleServices( application ),
                                        moduleInstance.layerInstance().usedLayersInstance().visibleServices() ) );
 
             // Don't return the same ServiceReference multiple times
@@ -412,7 +442,8 @@
 
     @SuppressWarnings( { "raw", "unchecked" } )
     private static <T extends ModelDescriptor> Iterable<ModelModule<T>> findModels( Specification<Iterable<Class<?>>> specification,
-                                                                                    Iterable<ModelModule<T>>... models )
+                                                                                    Iterable<ModelModule<T>>... models
+    )
     {
         Specification<ModelModule<T>> spec = Specifications.translate( new ModelModuleTypesFunction(), specification );
         Iterable<ModelModule<T>> flattened = flattenIterables( iterable( models ) );
@@ -421,7 +452,8 @@
 
     @SuppressWarnings( { "raw", "unchecked" } )
     private static Iterable<ServiceReference<?>> findServiceReferences( Specification<Iterable<Class<?>>> specification,
-                                                                        Iterable<ServiceReference<?>>... references )
+                                                                        Iterable<ServiceReference<?>>... references
+    )
     {
         Specification<ServiceReference<?>> spec = Specifications.translate( new ServiceReferenceTypesFunction(), specification );
         Iterable<ServiceReference<?>> flattened = flattenIterables( iterable( references ) );
@@ -434,7 +466,8 @@
      */
     @SuppressWarnings( "raw" )
     private static <T extends ModelDescriptor> Iterable<ModelModule<T>> ambiguousTypeCheck( final Class type,
-                                                                                            final Iterable<ModelModule<T>> models )
+                                                                                            final Iterable<ModelModule<T>> models
+    )
     {
         return new Iterable<ModelModule<T>>()
         {
@@ -473,7 +506,6 @@
                 // Ambiguity check done, and no ambiguities found. Return results
                 return results.iterator();
             }
-
         };
     }
 
@@ -486,7 +518,6 @@
         {
             return modelModule.model().types();
         }
-
     }
 
     private static class ServiceReferenceTypesFunction
@@ -498,7 +529,6 @@
         {
             return serviceReference.types();
         }
-
     }
 
     private static abstract class AbstractTypeLookupSpecification
@@ -563,7 +593,6 @@
         }
 
         protected abstract boolean checkClassMatch( Class<?> candidate, Class<?> lookedUpType );
-
     }
 
     private static final class ExactTypeLookupSpecification
@@ -580,7 +609,6 @@
         {
             return candidate.equals( lookedUpType );
         }
-
     }
 
     private static final class AssignableTypeLookupSpecification
@@ -597,7 +625,5 @@
         {
             return !candidate.equals( lookedUpType ) && lookedUpType.isAssignableFrom( candidate );
         }
-
     }
-
 }
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/structure/UsedLayersInstance.java b/core/runtime/src/main/java/org/qi4j/runtime/structure/UsedLayersInstance.java
index 1c0f650..7eb57b9 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/structure/UsedLayersInstance.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/structure/UsedLayersInstance.java
@@ -16,12 +16,17 @@
 
 import java.util.List;
 import org.qi4j.api.common.Visibility;
+import org.qi4j.api.composite.TransientDescriptor;
+import org.qi4j.api.entity.EntityDescriptor;
+import org.qi4j.api.object.ObjectDescriptor;
 import org.qi4j.api.service.ServiceReference;
+import org.qi4j.api.value.ValueDescriptor;
 import org.qi4j.functional.Function;
 import org.qi4j.runtime.composite.TransientModel;
 import org.qi4j.runtime.entity.EntityModel;
 import org.qi4j.runtime.object.ObjectModel;
 import org.qi4j.runtime.value.ValueModel;
+import org.qi4j.spi.module.ModelModule;
 
 import static org.qi4j.functional.Iterables.*;
 
@@ -37,48 +42,48 @@
         this.usedLayerInstances = usedLayerInstances;
     }
 
-    /* package */ Iterable<ModelModule<ObjectModel>> visibleObjects()
+    /* package */ Iterable<ModelModule<ObjectDescriptor>> visibleObjects()
     {
-        return flattenIterables( map( new Function<LayerInstance, Iterable<ModelModule<ObjectModel>>>()
+        return flattenIterables( map( new Function<LayerInstance, Iterable<ModelModule<ObjectDescriptor>>>()
         {
             @Override
-            public Iterable<ModelModule<ObjectModel>> map( LayerInstance layerInstance )
+            public Iterable<ModelModule<ObjectDescriptor>> map( LayerInstance layerInstance )
             {
                 return layerInstance.visibleObjects( Visibility.application );
             }
         }, usedLayerInstances ) );
     }
 
-    /* package */ Iterable<ModelModule<TransientModel>> visibleTransients()
+    /* package */ Iterable<ModelModule<TransientDescriptor>> visibleTransients()
     {
-        return flattenIterables( map( new Function<LayerInstance, Iterable<ModelModule<TransientModel>>>()
+        return flattenIterables( map( new Function<LayerInstance, Iterable<ModelModule<TransientDescriptor>>>()
         {
             @Override
-            public Iterable<ModelModule<TransientModel>> map( LayerInstance layerInstance )
+            public Iterable<ModelModule<TransientDescriptor>> map( LayerInstance layerInstance )
             {
                 return layerInstance.visibleTransients( Visibility.application );
             }
         }, usedLayerInstances ) );
     }
 
-    /* package */ Iterable<ModelModule<EntityModel>> visibleEntities()
+    /* package */ Iterable<ModelModule<EntityDescriptor>> visibleEntities()
     {
-        return flattenIterables( map( new Function<LayerInstance, Iterable<ModelModule<EntityModel>>>()
+        return flattenIterables( map( new Function<LayerInstance, Iterable<ModelModule<EntityDescriptor>>>()
         {
             @Override
-            public Iterable<ModelModule<EntityModel>> map( LayerInstance layerInstance )
+            public Iterable<ModelModule<EntityDescriptor>> map( LayerInstance layerInstance )
             {
                 return layerInstance.visibleEntities( Visibility.application );
             }
         }, usedLayerInstances ) );
     }
 
-    /* package */ Iterable<ModelModule<ValueModel>> visibleValues()
+    /* package */ Iterable<ModelModule<ValueDescriptor>> visibleValues()
     {
-        return flattenIterables( map( new Function<LayerInstance, Iterable<ModelModule<ValueModel>>>()
+        return flattenIterables( map( new Function<LayerInstance, Iterable<ModelModule<ValueDescriptor>>>()
         {
             @Override
-            public Iterable<ModelModule<ValueModel>> map( LayerInstance layerInstance )
+            public Iterable<ModelModule<ValueDescriptor>> map( LayerInstance layerInstance )
             {
                 return layerInstance.visibleValues( Visibility.application );
             }
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/structure/VisibilitySpecification.java b/core/runtime/src/main/java/org/qi4j/runtime/structure/VisibilitySpecification.java
index 37862b2..3b57ad3 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/structure/VisibilitySpecification.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/structure/VisibilitySpecification.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.runtime.structure;
 
 import org.qi4j.api.common.Visibility;
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/types/ValueTypeFactory.java b/core/runtime/src/main/java/org/qi4j/runtime/types/ValueTypeFactory.java
index 0910293..9f49953 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/types/ValueTypeFactory.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/types/ValueTypeFactory.java
@@ -27,6 +27,7 @@
 import org.qi4j.api.type.CollectionType;
 import org.qi4j.api.type.EnumType;
 import org.qi4j.api.type.MapType;
+import org.qi4j.api.type.Serialization;
 import org.qi4j.api.type.ValueCompositeType;
 import org.qi4j.api.type.ValueType;
 import org.qi4j.api.util.Classes;
@@ -61,7 +62,8 @@
                                    Class declaringClass,
                                    Class compositeType,
                                    LayerModel layer,
-                                   ModuleModel module
+                                   ModuleModel module,
+                                   Serialization.Variant variant
     )
     {
         ValueType valueType = null;
@@ -76,13 +78,13 @@
                     TypeVariable collectionTypeVariable = (TypeVariable) collectionType;
                     collectionType = Classes.resolveTypeVariable( collectionTypeVariable, declaringClass, compositeType );
                 }
-                ValueType collectedType = newValueType( collectionType, declaringClass, compositeType, layer, module );
+                ValueType collectedType = newValueType( collectionType, declaringClass, compositeType, layer, module, variant );
                 valueType = new CollectionType( Classes.RAW_CLASS.map( type ), collectedType );
             }
             else
             {
-                valueType = new CollectionType( Classes.RAW_CLASS
-                                                    .map( type ), newValueType( Object.class, declaringClass, compositeType, layer, module ) );
+                ValueType collectedType = newValueType( Object.class, declaringClass, compositeType, layer, module, variant );
+                valueType = new CollectionType( Classes.RAW_CLASS.map( type ), collectedType );
             }
         }
         else if( MapType.isMap( type ) )
@@ -96,22 +98,21 @@
                     TypeVariable keyTypeVariable = (TypeVariable) keyType;
                     keyType = Classes.resolveTypeVariable( keyTypeVariable, declaringClass, compositeType );
                 }
-                ValueType keyedType = newValueType( keyType, declaringClass, compositeType, layer, module );
-
+                ValueType keyedType = newValueType( keyType, declaringClass, compositeType, layer, module, variant );
                 Type valType = pt.getActualTypeArguments()[ 1 ];
                 if( valType instanceof TypeVariable )
                 {
                     TypeVariable valueTypeVariable = (TypeVariable) valType;
                     valType = Classes.resolveTypeVariable( valueTypeVariable, declaringClass, compositeType );
                 }
-                ValueType valuedType = newValueType( valType, declaringClass, compositeType, layer, module );
-
-                valueType = new MapType( Classes.RAW_CLASS.map( type ), keyedType, valuedType );
+                ValueType valuedType = newValueType( valType, declaringClass, compositeType, layer, module, variant );
+                valueType = new MapType( Classes.RAW_CLASS.map( type ), keyedType, valuedType, variant );
             }
             else
             {
-                valueType = new MapType( Classes.RAW_CLASS
-                                             .map( type ), newValueType( Object.class, declaringClass, compositeType, layer, module ), newValueType( Object.class, declaringClass, compositeType, layer, module ) );
+                ValueType keyType = newValueType( Object.class, declaringClass, compositeType, layer, module, variant );
+                ValueType valuesType = newValueType( Object.class, declaringClass, compositeType, layer, module, variant );
+                valueType = new MapType( Classes.RAW_CLASS.map( type ), keyType, valuesType, variant );
             }
         }
         else if( ValueCompositeType.isValueComposite( type ) )
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/unitofwork/EntityBuilderInstance.java b/core/runtime/src/main/java/org/qi4j/runtime/unitofwork/EntityBuilderInstance.java
index 8bb0ffd..f5f39dd 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/unitofwork/EntityBuilderInstance.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/unitofwork/EntityBuilderInstance.java
@@ -16,22 +16,16 @@
  */
 package org.qi4j.runtime.unitofwork;
 
-import java.util.Map;
-import org.qi4j.api.association.AssociationDescriptor;
 import org.qi4j.api.common.QualifiedName;
 import org.qi4j.api.entity.EntityBuilder;
 import org.qi4j.api.entity.EntityReference;
 import org.qi4j.api.entity.Identity;
 import org.qi4j.api.entity.LifecycleException;
-import org.qi4j.api.property.PropertyDescriptor;
-import org.qi4j.runtime.association.ManyAssociationModel;
-import org.qi4j.runtime.association.NamedAssociationModel;
+import org.qi4j.runtime.composite.FunctionStateResolver;
 import org.qi4j.runtime.entity.EntityInstance;
 import org.qi4j.runtime.entity.EntityModel;
-import org.qi4j.runtime.structure.ModelModule;
+import org.qi4j.spi.module.ModelModule;
 import org.qi4j.runtime.structure.ModuleUnitOfWork;
-import org.qi4j.runtime.composite.StateResolver;
-import org.qi4j.runtime.value.ValueStateModel;
 import org.qi4j.spi.entity.EntityState;
 import org.qi4j.spi.entitystore.EntityStoreUnitOfWork;
 
@@ -60,7 +54,7 @@
         }
         catch( NoSuchMethodException e )
         {
-            throw new InternalError( "Qi4j Core Runtime codebase is corrupted. Contact Qi4j team: EntityBuilderInstance" );
+            throw new InternalError( "Zest Core Runtime codebase is corrupted. Contact Zest team: EntityBuilderInstance" );
         }
     }
 
@@ -79,7 +73,7 @@
         ModuleUnitOfWork uow,
         EntityStoreUnitOfWork store,
         String identity,
-        StateResolver stateResolver
+        FunctionStateResolver stateResolver
     )
     {
         this.model = model;
@@ -91,30 +85,7 @@
         model.model().initState( model.module(), entityState );
         if( stateResolver != null )
         {
-            for( PropertyDescriptor propDesc : model.model().state().properties() )
-            {
-                Object value = stateResolver.getPropertyState( propDesc );
-                entityState.setPropertyValue( propDesc.qualifiedName(), value );
-            }
-            for( AssociationDescriptor assDesc : model.model().state().associations() )
-            {
-                EntityReference ref = stateResolver.getAssociationState( assDesc );
-                entityState.setAssociationValue( assDesc.qualifiedName(), ref );
-            }
-            for( ManyAssociationModel manyAssDesc : model.model().state().manyAssociations() )
-            {
-                for( EntityReference ref : stateResolver.getManyAssociationState( manyAssDesc ) )
-                {
-                    entityState.manyAssociationValueOf( manyAssDesc.qualifiedName() ).add( 0, ref );
-                }
-            }
-            for( NamedAssociationModel namedAssDesc : model.model().state().namedAssociations() )
-            {
-                for( Map.Entry<String, EntityReference> entry : stateResolver.getNamedAssociationState( namedAssDesc ).entrySet() )
-                {
-                    entityState.namedAssociationValueOf( namedAssDesc.qualifiedName() ).put( entry.getKey(), entry.getValue() );
-                }
-            }
+            stateResolver.populateState( model.model(), entityState );
         }
         entityState.setPropertyValue( IDENTITY_STATE_NAME, identity );
         prototypeInstance = model.model().newInstance( uow, model.module(), entityState );
@@ -146,7 +117,7 @@
 
         // Figure out whether to use given or generated identity
         identity = (String) entityState.propertyValueOf( IDENTITY_STATE_NAME );
-        EntityState newEntityState = model.model().newEntityState( store,
+        EntityState newEntityState = model.model().newEntityState( store, uow.module(),
                                                                    EntityReference.parseEntityReference( identity ) );
 
         prototypeInstance.invokeCreate();
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/unitofwork/UnitOfWorkInstance.java b/core/runtime/src/main/java/org/qi4j/runtime/unitofwork/UnitOfWorkInstance.java
index 4919860..67abf3a 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/unitofwork/UnitOfWorkInstance.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/unitofwork/UnitOfWorkInstance.java
@@ -31,7 +31,6 @@
 import org.qi4j.api.metrics.MetricsProvider;
 import org.qi4j.api.metrics.MetricsTimer;
 import org.qi4j.api.metrics.MetricsTimerFactory;
-import org.qi4j.api.structure.Module;
 import org.qi4j.api.unitofwork.ConcurrentEntityModificationException;
 import org.qi4j.api.unitofwork.EntityTypeNotFoundException;
 import org.qi4j.api.unitofwork.NoSuchEntityException;
@@ -42,8 +41,6 @@
 import org.qi4j.api.usecase.Usecase;
 import org.qi4j.runtime.entity.EntityInstance;
 import org.qi4j.runtime.entity.EntityModel;
-import org.qi4j.runtime.structure.ModelModule;
-import org.qi4j.runtime.structure.ModuleInstance;
 import org.qi4j.runtime.structure.ModuleUnitOfWork;
 import org.qi4j.spi.entity.EntityState;
 import org.qi4j.spi.entity.EntityStatus;
@@ -53,9 +50,12 @@
 import org.qi4j.spi.entitystore.EntityStoreUnitOfWork;
 import org.qi4j.spi.entitystore.StateCommitter;
 import org.qi4j.spi.metrics.DefaultMetric;
+import org.qi4j.spi.module.ModelModule;
+import org.qi4j.spi.module.ModuleSpi;
 
 import static org.qi4j.api.unitofwork.UnitOfWorkCallback.UnitOfWorkStatus.COMPLETED;
 import static org.qi4j.api.unitofwork.UnitOfWorkCallback.UnitOfWorkStatus.DISCARDED;
+import static org.qi4j.functional.Iterables.map;
 
 public final class UnitOfWorkInstance
 {
@@ -109,7 +109,7 @@
         return currentTime;
     }
 
-    public EntityStoreUnitOfWork getEntityStoreUnitOfWork( EntityStore store, Module module )
+    public EntityStoreUnitOfWork getEntityStoreUnitOfWork( EntityStore store, ModuleSpi module )
     {
         EntityStoreUnitOfWork uow = storeUnitOfWork.get( store );
         if( uow == null )
@@ -136,7 +136,7 @@
             // Check if this is a root UoW, or if no parent UoW knows about this entity
             EntityState entityState = null;
             EntityModel model = null;
-            ModuleInstance module = null;
+            ModuleSpi module = null;
             // Figure out what EntityStore to use
             for( ModelModule<EntityModel> potentialModel : potentialModels )
             {
@@ -144,7 +144,7 @@
                 EntityStoreUnitOfWork storeUow = getEntityStoreUnitOfWork( store, potentialModel.module() );
                 try
                 {
-                    entityState = storeUow.entityStateOf( identity );
+                    entityState = storeUow.entityStateOf( potentialModel.module(), identity );
                 }
                 catch( EntityNotFoundException e )
                 {
@@ -162,11 +162,15 @@
                 // Check if state was found
                 if( entityState == null )
                 {
-                    throw new NoSuchEntityException( identity, mixinType );
+                    throw new NoSuchEntityException( identity, mixinType, usecase );
                 }
                 else
                 {
-                    throw new EntityTypeNotFoundException( mixinType.getName() );
+                    throw new EntityTypeNotFoundException( mixinType.getName(),
+                                                           module.name(),
+                                                           map( ModelModule.toStringFunction,
+                                                                module.findVisibleEntityTypes()
+                                                           ) );
                 }
             }
 
@@ -180,7 +184,7 @@
             // Check if it has been removed
             if( entityInstance.status() == EntityStatus.REMOVED )
             {
-                throw new NoSuchEntityException( identity, mixinType );
+                throw new NoSuchEntityException( identity, mixinType, usecase );
             }
         }
 
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/value/ManyAssociationValueState.java b/core/runtime/src/main/java/org/qi4j/runtime/value/ManyAssociationValueState.java
index 72b73cc..1941062 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/value/ManyAssociationValueState.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/value/ManyAssociationValueState.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.runtime.value;
 
 import java.util.Iterator;
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/value/NamedAssociationValueState.java b/core/runtime/src/main/java/org/qi4j/runtime/value/NamedAssociationValueState.java
index 14fcd84..4f3030d 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/value/NamedAssociationValueState.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/value/NamedAssociationValueState.java
@@ -81,5 +81,4 @@
     {
         return references.keySet().iterator();
     }
-
 }
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/value/ReferenceProperty.java b/core/runtime/src/main/java/org/qi4j/runtime/value/ReferenceProperty.java
index f6292c3..40e8dbb 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/value/ReferenceProperty.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/value/ReferenceProperty.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.runtime.value;
 
 import org.qi4j.api.entity.EntityReference;
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/value/ValueBuilderInstance.java b/core/runtime/src/main/java/org/qi4j/runtime/value/ValueBuilderInstance.java
index 0d70463..6bd6eeb 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/value/ValueBuilderInstance.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/value/ValueBuilderInstance.java
@@ -19,7 +19,7 @@
 import org.qi4j.api.value.NoSuchValueException;
 import org.qi4j.api.value.ValueBuilder;
 import org.qi4j.runtime.composite.StateResolver;
-import org.qi4j.runtime.structure.ModelModule;
+import org.qi4j.spi.module.ModelModule;
 import org.qi4j.runtime.structure.ModuleInstance;
 
 import static org.qi4j.functional.Iterables.first;
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/value/ValueBuilderWithPrototype.java b/core/runtime/src/main/java/org/qi4j/runtime/value/ValueBuilderWithPrototype.java
index 0608ace..b6f3e98 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/value/ValueBuilderWithPrototype.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/value/ValueBuilderWithPrototype.java
@@ -20,13 +20,24 @@
  */
 package org.qi4j.runtime.value;
 
+import java.util.HashMap;
+import java.util.Map;
+import org.qi4j.api.association.AssociationDescriptor;
 import org.qi4j.api.association.AssociationStateHolder;
+import org.qi4j.api.association.NamedAssociation;
 import org.qi4j.api.common.ConstructionException;
+import org.qi4j.api.entity.EntityReference;
+import org.qi4j.api.property.PropertyDescriptor;
 import org.qi4j.api.value.ValueBuilder;
 import org.qi4j.api.value.ValueComposite;
-import org.qi4j.api.value.ValueSerialization;
-import org.qi4j.api.value.ValueSerializationException;
-import org.qi4j.runtime.structure.ModelModule;
+import org.qi4j.functional.Function;
+import org.qi4j.runtime.composite.FunctionStateResolver;
+import org.qi4j.runtime.composite.MixinModel;
+import org.qi4j.runtime.composite.MixinsModel;
+import org.qi4j.runtime.composite.StateResolver;
+import org.qi4j.runtime.composite.UsesInstance;
+import org.qi4j.runtime.injection.InjectionContext;
+import org.qi4j.spi.module.ModelModule;
 import org.qi4j.runtime.structure.ModuleInstance;
 
 /**
@@ -38,24 +49,53 @@
     private ValueInstance prototypeInstance;
     private final ValueModel valueModel;
 
-    public ValueBuilderWithPrototype(ModelModule<ValueModel> compositeModelModule, ModuleInstance currentModule, T prototype)
+    public ValueBuilderWithPrototype( ModelModule<ValueModel> compositeModelModule,
+                                      ModuleInstance currentModule,
+                                      T prototype
+    )
     {
         valueModel = compositeModelModule.model();
-        // Use serialization-deserialization to make a copy of the prototype
-        final Object value;
-        try
+        // Only shallow clone, as all generic types of the ValueComposites are expected to be Immutable.
+
+        MixinsModel mixinsModel = valueModel.mixinsModel();
+        Object[] mixins = mixinsModel.newMixinHolder();
+        final ValueStateInstance prototypeState = ValueInstance.valueInstanceOf( (ValueComposite) prototype ).state();
+        StateResolver resolver = new FunctionStateResolver(
+            new PropertyDescriptorFunction( prototypeState ),
+            new AssociationDescriptorEntityReferenceFunction( prototypeState ),
+            new AssociationDescriptorIterableFunction( prototypeState ),
+            new AssociationDescriptorMapFunction( prototypeState )
+        );
+        ValueStateInstance state = new ValueStateInstance( compositeModelModule, currentModule, resolver );
+        ValueInstance valueInstance = new ValueInstance(
+            valueModel,
+            currentModule,
+            mixins,
+            state
+        );
+
+        int i = 0;
+        InjectionContext injectionContext = new InjectionContext( valueInstance, UsesInstance.EMPTY_USES, state );
+        for( MixinModel mixinModel : mixinsModel.mixinModels() )
         {
-            // @TODO there is probably a more efficient way to do this
-            ValueSerialization valueSerialization = currentModule.valueSerialization();
-            String serialized = valueSerialization.serialize( prototype );
-            value = valueSerialization.deserialize( valueModel.valueType(), serialized);
-        }
-        catch( ValueSerializationException e )
-        {
-            throw new IllegalStateException( "Could not serialize-copy Value", e );
+            mixins[ i++ ] = mixinModel.newInstance( injectionContext );
         }
 
-        ValueInstance valueInstance = ValueInstance.valueInstanceOf( (ValueComposite) value );
+//        // Use serialization-deserialization to make a copy of the prototype
+//        final Object value;
+//        try
+//        {
+//            // @TODO there is probably a more efficient way to do this
+//            ValueSerialization valueSerialization = currentModule.valueSerialization();
+//            String serialized = valueSerialization.serialize( prototype );
+//            value = valueSerialization.deserialize( valueModel.valueType(), serialized);
+//        }
+//        catch( ValueSerializationException e )
+//        {
+//            throw new IllegalStateException( "Could not serialize-copy Value", e );
+//        }
+
+//        ValueInstance valueInstance = ValueInstance.valueInstanceOf( (ValueComposite) value );
         valueInstance.prepareToBuild();
         this.prototypeInstance = valueInstance;
     }
@@ -112,4 +152,77 @@
         }
     }
 
+    private static class PropertyDescriptorFunction
+        implements Function<PropertyDescriptor, Object>
+    {
+        private final ValueStateInstance prototypeState;
+
+        public PropertyDescriptorFunction( ValueStateInstance prototypeState )
+        {
+            this.prototypeState = prototypeState;
+        }
+
+        @Override
+        public Object map( PropertyDescriptor descriptor )
+        {
+            return prototypeState.propertyFor( descriptor.accessor() ).get();
+        }
+    }
+
+    private static class AssociationDescriptorEntityReferenceFunction
+        implements Function<AssociationDescriptor, EntityReference>
+    {
+        private final ValueStateInstance prototypeState;
+
+        public AssociationDescriptorEntityReferenceFunction( ValueStateInstance prototypeState )
+        {
+            this.prototypeState = prototypeState;
+        }
+
+        @Override
+        public EntityReference map( AssociationDescriptor descriptor )
+        {
+            return prototypeState.associationFor( descriptor.accessor() ).reference();
+        }
+    }
+
+    private static class AssociationDescriptorIterableFunction
+        implements Function<AssociationDescriptor, Iterable<EntityReference>>
+    {
+        private final ValueStateInstance prototypeState;
+
+        public AssociationDescriptorIterableFunction( ValueStateInstance prototypeState )
+        {
+            this.prototypeState = prototypeState;
+        }
+
+        @Override
+        public Iterable<EntityReference> map( AssociationDescriptor descriptor )
+        {
+            return prototypeState.manyAssociationFor( descriptor.accessor() ).references();
+        }
+    }
+
+    private static class AssociationDescriptorMapFunction
+        implements Function<AssociationDescriptor, Map<String, EntityReference>>
+    {
+        private final ValueStateInstance prototypeState;
+
+        public AssociationDescriptorMapFunction( ValueStateInstance prototypeState )
+        {
+            this.prototypeState = prototypeState;
+        }
+
+        @Override
+        public Map<String, EntityReference> map( AssociationDescriptor descriptor )
+        {
+            Map<String, EntityReference> result = new HashMap<>();
+            NamedAssociation<?> namedAssociation = prototypeState.namedAssociationFor( descriptor.accessor() );
+            for( String name : namedAssociation )
+            {
+                result.put( name, namedAssociation.referenceOf( name ) );
+            }
+            return result;
+        }
+    }
 }
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/value/ValueBuilderWithState.java b/core/runtime/src/main/java/org/qi4j/runtime/value/ValueBuilderWithState.java
index ec1f7b3..b76ea26 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/value/ValueBuilderWithState.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/value/ValueBuilderWithState.java
@@ -17,7 +17,7 @@
 import org.qi4j.api.common.ConstructionException;
 import org.qi4j.api.value.ValueBuilder;
 import org.qi4j.runtime.composite.StateResolver;
-import org.qi4j.runtime.structure.ModelModule;
+import org.qi4j.spi.module.ModelModule;
 import org.qi4j.runtime.structure.ModuleInstance;
 
 public class ValueBuilderWithState<T> implements ValueBuilder<T>
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/value/ValueInstance.java b/core/runtime/src/main/java/org/qi4j/runtime/value/ValueInstance.java
index ae8a4ab..3b11c04 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/value/ValueInstance.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/value/ValueInstance.java
@@ -21,11 +21,12 @@
 import org.qi4j.api.value.ValueComposite;
 import org.qi4j.runtime.association.AssociationModel;
 import org.qi4j.runtime.association.ManyAssociationModel;
+import org.qi4j.runtime.association.NamedAssociationModel;
 import org.qi4j.runtime.composite.MixinsInstance;
 import org.qi4j.runtime.composite.TransientInstance;
 import org.qi4j.runtime.property.PropertyInstance;
 import org.qi4j.runtime.property.PropertyModel;
-import org.qi4j.runtime.structure.ModuleInstance;
+import org.qi4j.spi.module.ModuleSpi;
 
 /**
  * ValueComposite instance
@@ -40,9 +41,10 @@
     }
 
     public ValueInstance( ValueModel compositeModel,
-                          ModuleInstance moduleInstance,
+                          ModuleSpi moduleInstance,
                           Object[] mixins,
-                          ValueStateInstance state )
+                          ValueStateInstance state
+    )
     {
         super( compositeModel, moduleInstance, mixins, state );
     }
@@ -50,11 +52,12 @@
     /**
      * Perform equals with {@code o} argument.
      * <p>
-     *     The definition of equals() for the Value is that if both the state and descriptor are equal,
-     *     then the values are equal.
+     * The definition of equals() for the Value is that if both the state and descriptor are equal,
+     * then the values are equal.
      * </p>
      *
      * @param o The other object to compare.
+     *
      * @return Returns a {@code boolean} indicator whether this object is equals the other.
      */
     @Override
@@ -106,7 +109,7 @@
         for( PropertyModel propertyDescriptor : descriptor().state().properties() )
         {
             PropertyInstance<Object> propertyInstance =
-                                     (PropertyInstance<Object>) state.propertyFor( propertyDescriptor.accessor() );
+                (PropertyInstance<Object>) state.propertyFor( propertyDescriptor.accessor() );
 
             propertyInstance.prepareToBuild( propertyDescriptor );
         }
@@ -122,6 +125,12 @@
             state().manyAssociationFor( associationDescriptor.accessor() )
                 .setAssociationInfo( associationDescriptor.getBuilderInfo() );
         }
+
+        for( NamedAssociationModel associationDescriptor : descriptor().state().namedAssociations() )
+        {
+            state().namedAssociationFor( associationDescriptor.accessor() )
+                .setAssociationInfo( associationDescriptor.getBuilderInfo() );
+        }
     }
 
     /**
@@ -133,7 +142,7 @@
         for( PropertyModel propertyDescriptor : descriptor().state().properties() )
         {
             PropertyInstance<Object> propertyInstance =
-                                     (PropertyInstance<Object>) state.propertyFor( propertyDescriptor.accessor() );
+                (PropertyInstance<Object>) state.propertyFor( propertyDescriptor.accessor() );
             propertyInstance.prepareBuilderState( propertyDescriptor );
         }
 
@@ -146,6 +155,11 @@
         {
             state().manyAssociationFor( associationDescriptor.accessor() ).setAssociationInfo( associationDescriptor );
         }
+
+        for( NamedAssociationModel associationDescriptor : descriptor().state().namedAssociations() )
+        {
+            state().namedAssociationFor( associationDescriptor.accessor() ).setAssociationInfo( associationDescriptor );
+        }
     }
 
     /**
@@ -163,6 +177,6 @@
     @Override
     public String toString()
     {
-        return module().valueSerialization().serialize( this.<ValueComposite>proxy() );
+        return ( (ModuleSpi) module() ).valueSerialization().serialize( this.<ValueComposite>proxy() );
     }
 }
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/value/ValueModel.java b/core/runtime/src/main/java/org/qi4j/runtime/value/ValueModel.java
index 1e3d4cb..0efe6f5 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/value/ValueModel.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/value/ValueModel.java
@@ -28,7 +28,8 @@
 import org.qi4j.runtime.composite.UsesInstance;
 import org.qi4j.runtime.injection.InjectionContext;
 import org.qi4j.runtime.property.PropertyModel;
-import org.qi4j.runtime.structure.ModuleInstance;
+import org.qi4j.runtime.unitofwork.UnitOfWorkInstance;
+import org.qi4j.spi.module.ModuleSpi;
 
 /**
  * Model for ValueComposites
@@ -64,26 +65,32 @@
         return (ValueStateModel) super.state();
     }
 
-    public void checkConstraints( ValueStateInstance state )
+    // This method is ONLY called by ValueBuilders
+    void checkConstraints( ValueStateInstance state )
         throws ConstraintViolationException
     {
         for( PropertyModel propertyModel : stateModel.properties() )
         {
-            propertyModel.checkConstraints( state.<Object>propertyFor( propertyModel.accessor() ).get() );
+            propertyModel.checkConstraints( state.propertyFor( propertyModel.accessor() ).get() );
         }
 
+        // IF no UnitOfWork is active, then the Association checks shouldn't be done.
+        if( UnitOfWorkInstance.getCurrent().empty() )
+        {
+            return;
+        }
         for( AssociationModel associationModel : ( (ValueStateModel) stateModel ).associations() )
         {
-            associationModel.checkConstraints( state.<Object>associationFor( associationModel.accessor() ).get() );
+            associationModel.checkConstraints( state.associationFor( associationModel.accessor() ).get() );
         }
 
         for( ManyAssociationModel associationModel : ( (ValueStateModel) stateModel ).manyAssociations() )
         {
-            associationModel.checkAssociationConstraints( state.<Object>manyAssociationFor( associationModel.accessor() ) );
+            associationModel.checkAssociationConstraints( state.manyAssociationFor( associationModel.accessor() ) );
         }
     }
 
-    public ValueInstance newValueInstance( ModuleInstance moduleInstance,
+    public ValueInstance newValueInstance( ModuleSpi moduleInstance,
                                            ValueStateInstance state
     )
     {
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/value/ValueStateInstance.java b/core/runtime/src/main/java/org/qi4j/runtime/value/ValueStateInstance.java
index 68dd5c7..c66734f 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/value/ValueStateInstance.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/value/ValueStateInstance.java
@@ -25,7 +25,6 @@
 import java.util.Map;
 import org.qi4j.api.association.AssociationDescriptor;
 import org.qi4j.api.association.AssociationStateHolder;
-import org.qi4j.api.association.NamedAssociation;
 import org.qi4j.api.entity.EntityReference;
 import org.qi4j.api.property.PropertyDescriptor;
 import org.qi4j.runtime.association.AssociationInfo;
@@ -39,7 +38,7 @@
 import org.qi4j.runtime.property.PropertyInfo;
 import org.qi4j.runtime.property.PropertyInstance;
 import org.qi4j.runtime.property.PropertyModel;
-import org.qi4j.runtime.structure.ModelModule;
+import org.qi4j.spi.module.ModelModule;
 import org.qi4j.runtime.structure.ModuleInstance;
 
 /**
@@ -181,7 +180,7 @@
 
     @Override
     @SuppressWarnings( "unchecked" )
-    public <T> NamedAssociation<T> namedAssociationFor( AccessibleObject accessor )
+    public <T> NamedAssociationInstance<T> namedAssociationFor( AccessibleObject accessor )
     {
         NamedAssociationInstance<T> namedAssociation = (NamedAssociationInstance<T>) namedAssociations.get( accessor );
 
@@ -194,7 +193,7 @@
     }
 
     @Override
-    public Iterable<? extends NamedAssociation<?>> allNamedAssociations()
+    public Iterable<? extends NamedAssociationInstance<?>> allNamedAssociations()
     {
         return namedAssociations.values();
     }
@@ -215,7 +214,11 @@
         {
             return false;
         }
-        return manyAssociations.equals( state.manyAssociations );
+        if( !manyAssociations.equals( state.manyAssociations ) )
+        {
+            return false;
+        }
+        return namedAssociations.equals( state.namedAssociations );
     }
 
     @Override
@@ -224,6 +227,7 @@
         int result = properties.hashCode();
         result = 31 * result + associations.hashCode();
         result = 31 * result + manyAssociations.hashCode();
+        result = 31 * result + namedAssociations.hashCode();
         return result;
     }
 }
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/value/ValueStateModel.java b/core/runtime/src/main/java/org/qi4j/runtime/value/ValueStateModel.java
index d3f8060..76e4bb8 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/value/ValueStateModel.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/value/ValueStateModel.java
@@ -105,7 +105,7 @@
     }
 
     @Override
-    public Iterable<? extends AssociationDescriptor> namedAssociations()
+    public Iterable<NamedAssociationModel> namedAssociations()
     {
         return namedAssociationsModel.namedAssociations();
     }
diff --git a/core/runtime/src/test/java/org/qi4j/api/common/UnitOfWorkCallbackEntityTest.java b/core/runtime/src/test/java/org/qi4j/api/common/UnitOfWorkCallbackEntityTest.java
deleted file mode 100644
index 8adb31f..0000000
--- a/core/runtime/src/test/java/org/qi4j/api/common/UnitOfWorkCallbackEntityTest.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2008, Rickard Öberg. All Rights Reserved.
- *
- * Licensed 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.qi4j.api.common;
-
-import org.junit.Ignore;
-import org.junit.Test;
-import org.qi4j.api.entity.EntityComposite;
-import org.qi4j.api.unitofwork.UnitOfWork;
-import org.qi4j.api.unitofwork.UnitOfWorkCompletionException;
-import org.qi4j.bootstrap.AssemblyException;
-import org.qi4j.bootstrap.ModuleAssembly;
-import org.qi4j.test.AbstractQi4jTest;
-import org.qi4j.test.EntityTestAssembler;
-
-import static org.junit.Assert.fail;
-
-/**
- * Test UnitOfWorkCallback and Validatable
- */
-public class UnitOfWorkCallbackEntityTest
-    extends AbstractQi4jTest
-{
-    public void assemble( ModuleAssembly module )
-        throws AssemblyException
-    {
-        module.entities( TestCase.class );
-        new EntityTestAssembler().assemble( module );
-    }
-
-    @Test
-    @Ignore( "Validation is moved to sandbox, and UoW is under massive refactoring." )
-    public void givenCompositeWithValidatableWhenUnitCompletesThenPerformValidation()
-        throws UnitOfWorkCompletionException
-    {
-        UnitOfWork uow = module.newUnitOfWork();
-        TestCase test = uow.newEntity( TestCase.class );
-
-        try
-        {
-            uow.complete();
-            fail( "Validation did not occur" );
-        }
-        finally
-        {
-            uow.discard();
-        }
-    }
-
-    //    @Concerns( TestValidatableConcern.class )
-
-    interface TestCase
-        extends EntityComposite  //, ValidatableAbstractComposite
-    {
-    }
-/*
-    public static abstract class TestValidatableConcern extends AbstractValidatableConcern
-    {
-        @Override protected void isValid( Validator validator )
-        {
-            validator.error( true, "Validation error" );
-        }
-
-        @Override protected String getResourceBundle()
-        {
-            return null;
-        }
-    }
-*/
-}
diff --git a/core/runtime/src/test/java/org/qi4j/bootstrap/ApplicationAssemblerTest.java b/core/runtime/src/test/java/org/qi4j/bootstrap/ApplicationAssemblerTest.java
index 6d5f85c..0894619 100644
--- a/core/runtime/src/test/java/org/qi4j/bootstrap/ApplicationAssemblerTest.java
+++ b/core/runtime/src/test/java/org/qi4j/bootstrap/ApplicationAssemblerTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.bootstrap;
 
 import org.junit.Assert;
diff --git a/core/runtime/src/test/java/org/qi4j/regression/qi377/InterfaceCollisionWithRelatedReturnTypesTest.java b/core/runtime/src/test/java/org/qi4j/regression/qi377/InterfaceCollisionWithRelatedReturnTypesTest.java
index d1741ac..b467a4d 100644
--- a/core/runtime/src/test/java/org/qi4j/regression/qi377/InterfaceCollisionWithRelatedReturnTypesTest.java
+++ b/core/runtime/src/test/java/org/qi4j/regression/qi377/InterfaceCollisionWithRelatedReturnTypesTest.java
@@ -18,7 +18,6 @@
  */
 package org.qi4j.regression.qi377;
 
-import org.junit.Ignore;
 import org.junit.Test;
 import org.qi4j.api.association.Association;
 import org.qi4j.api.association.ManyAssociation;
@@ -36,7 +35,6 @@
 import static org.hamcrest.core.IsNull.notNullValue;
 import static org.junit.Assert.assertThat;
 
-@Ignore( "This test exhibit QI-377" )
 public class InterfaceCollisionWithRelatedReturnTypesTest
     extends AbstractQi4jTest
 {
diff --git a/core/runtime/src/test/java/org/qi4j/regression/qi377/ValueCollisionWithRelatedReturnTypesTest.java b/core/runtime/src/test/java/org/qi4j/regression/qi377/ValueCollisionWithRelatedReturnTypesTest.java
index 20eb70f..ea232c1 100644
--- a/core/runtime/src/test/java/org/qi4j/regression/qi377/ValueCollisionWithRelatedReturnTypesTest.java
+++ b/core/runtime/src/test/java/org/qi4j/regression/qi377/ValueCollisionWithRelatedReturnTypesTest.java
@@ -18,21 +18,20 @@
  */
 package org.qi4j.regression.qi377;
 
-import org.junit.Ignore;
 import org.junit.Test;
+import org.qi4j.api.entity.Identity;
 import org.qi4j.api.association.Association;
 import org.qi4j.api.association.ManyAssociation;
 import org.qi4j.api.common.Optional;
 import org.qi4j.api.property.Property;
+import org.qi4j.api.value.ValueBuilder;
 import org.qi4j.bootstrap.AssemblyException;
 import org.qi4j.bootstrap.ModuleAssembly;
 import org.qi4j.test.AbstractQi4jTest;
 
-@Ignore( "This test exhibit QI-377" )
 public class ValueCollisionWithRelatedReturnTypesTest
     extends AbstractQi4jTest
 {
-
     @Override
     public void assemble( ModuleAssembly module )
         throws AssemblyException
@@ -43,15 +42,18 @@
     @Test
     public void shouldBeAbleToSetNameToTheCompany()
     {
-        Company startUp = module.newValue( Company.class );
-        startUp.name().set( "Acme" );
+        ValueBuilder<Company> builder = module.newValueBuilder( Company.class );
+        builder.prototype().name().set( "Acme" );
+        Company startUp = builder.newInstance();
     }
 
     @Test
     public void shouldBeAbleToSetLeadToTheCompany()
     {
         Company startUp = module.newValue( Company.class );
-        Employee niclas = module.newValue( Employee.class );
+        ValueBuilder<Employee> builder = module.newValueBuilder( Employee.class );
+        builder.prototype().identity().set( "niclas" );
+        Employee niclas = builder.newInstance();
         startUp.lead().set( niclas );
     }
 
@@ -59,7 +61,9 @@
     public void shouldBeAbleToSetLeadToTheSalesTeam()
     {
         SalesTeam startUp = module.newValue( SalesTeam.class );
-        Employee niclas = module.newValue( Employee.class );
+        ValueBuilder<Employee> builder = module.newValueBuilder( Employee.class );
+        builder.prototype().identity().set( "niclas" );
+        Employee niclas = builder.newInstance();
         startUp.lead().set( niclas );
     }
 
@@ -67,7 +71,9 @@
     public void shouldBeAbleToSetLeadToTheResearchTeam()
     {
         ResearchTeam startUp = module.newValue( ResearchTeam.class );
-        Employee niclas = module.newValue( Employee.class );
+        ValueBuilder<Employee> builder = module.newValueBuilder( Employee.class );
+        builder.prototype().identity().set( "niclas" );
+        Employee niclas = builder.newInstance();
         startUp.lead().set( niclas );
     }
 
@@ -75,7 +81,9 @@
     public void shouldBeAbleToAddEmployeesToTheCompany()
     {
         Company startUp = module.newValue( Company.class );
-        Employee niclas = module.newValue( Employee.class );
+        ValueBuilder<Employee> builder = module.newValueBuilder( Employee.class );
+        builder.prototype().identity().set( "niclas" );
+        Employee niclas = builder.newInstance();
         startUp.employees().add( niclas );
     }
 
@@ -83,7 +91,9 @@
     public void shouldBeAbleToAddEmployeesToTheSalesTeam()
     {
         SalesTeam startUp = module.newValue( SalesTeam.class );
-        Employee niclas = module.newValue( Employee.class );
+        ValueBuilder<Employee> builder = module.newValueBuilder( Employee.class );
+        builder.prototype().identity().set( "niclas" );
+        Employee niclas = builder.newInstance();
         startUp.employees().add( niclas );
     }
 
@@ -91,11 +101,14 @@
     public void shouldBeAbleToAddEmployeesToTheResearchTeam()
     {
         ResearchTeam startUp = module.newValue( ResearchTeam.class );
-        Employee niclas = module.newValue( Employee.class );
+        ValueBuilder<Employee> builder = module.newValueBuilder( Employee.class );
+        builder.prototype().identity().set( "niclas" );
+        Employee niclas = builder.newInstance();
         startUp.employees().add( niclas );
     }
 
     public interface Employee
+        extends Identity
     {
     }
 
@@ -128,5 +141,4 @@
         extends SalesTeam, ResearchTeam
     {
     }
-
 }
diff --git a/core/runtime/src/test/java/org/qi4j/regression/qi53/IssueTest.java b/core/runtime/src/test/java/org/qi4j/regression/qi53/IssueTest.java
index 6cbc04b..c1b5156 100644
--- a/core/runtime/src/test/java/org/qi4j/regression/qi53/IssueTest.java
+++ b/core/runtime/src/test/java/org/qi4j/regression/qi53/IssueTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.regression.qi53;
 
 import org.junit.Test;
diff --git a/core/runtime/src/test/java/org/qi4j/regression/qi55/IssueTest.java b/core/runtime/src/test/java/org/qi4j/regression/qi55/IssueTest.java
index 09f8a3b..6171308 100644
--- a/core/runtime/src/test/java/org/qi4j/regression/qi55/IssueTest.java
+++ b/core/runtime/src/test/java/org/qi4j/regression/qi55/IssueTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.regression.qi55;
 
 import org.junit.Test;
diff --git a/core/runtime/src/test/java/org/qi4j/regression/qi65/IssueTest.java b/core/runtime/src/test/java/org/qi4j/regression/qi65/IssueTest.java
index 1fdb313..169cd1b 100644
--- a/core/runtime/src/test/java/org/qi4j/regression/qi65/IssueTest.java
+++ b/core/runtime/src/test/java/org/qi4j/regression/qi65/IssueTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.regression.qi65;
 
 import org.junit.Test;
diff --git a/core/runtime/src/test/java/org/qi4j/runtime/appliesto/AppliesToOrConditionQI241Test.java b/core/runtime/src/test/java/org/qi4j/runtime/appliesto/AppliesToOrConditionQI241Test.java
index 8a9545f..2623fa1 100644
--- a/core/runtime/src/test/java/org/qi4j/runtime/appliesto/AppliesToOrConditionQI241Test.java
+++ b/core/runtime/src/test/java/org/qi4j/runtime/appliesto/AppliesToOrConditionQI241Test.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.runtime.appliesto;
 
 import java.lang.annotation.ElementType;
diff --git a/core/runtime/src/test/java/org/qi4j/runtime/association/AssociationEqualityTest.java b/core/runtime/src/test/java/org/qi4j/runtime/association/AssociationEqualityTest.java
index 1c3852e..7aabc8c 100644
--- a/core/runtime/src/test/java/org/qi4j/runtime/association/AssociationEqualityTest.java
+++ b/core/runtime/src/test/java/org/qi4j/runtime/association/AssociationEqualityTest.java
@@ -20,6 +20,7 @@
 import org.qi4j.api.association.Association;
 import org.qi4j.api.association.AssociationDescriptor;
 import org.qi4j.api.association.ManyAssociation;
+import org.qi4j.api.association.NamedAssociation;
 import org.qi4j.api.common.Optional;
 import org.qi4j.api.unitofwork.UnitOfWork;
 import org.qi4j.api.value.ValueBuilder;
@@ -33,7 +34,7 @@
 import static org.junit.Assert.assertThat;
 
 /**
- * Assert that Association and ManyAssociation equals/hashcode methods combine AssociationDescriptor and State.
+ * Assert that Association, ManyAssociation and NamedAssociation equals/hashcode methods combine AssociationDescriptor and State.
  */
 public class AssociationEqualityTest
     extends AbstractQi4jTest
@@ -62,6 +63,8 @@
         Association<AnEntity> anEntity();
 
         ManyAssociation<AnEntity> manyEntities();
+
+        NamedAssociation<AnEntity> namedEntities();
     }
 
     public interface OtherWithAssociations
@@ -71,6 +74,8 @@
         Association<AnEntity> anEntity();
 
         ManyAssociation<AnEntity> manyEntities();
+
+        NamedAssociation<AnEntity> namedEntities();
     }
 
     //
@@ -87,10 +92,12 @@
             SomeWithAssociations some = buildSomeWithAssociation( anEntity );
             AssociationDescriptor someAssocDesc = qi4j.api().associationDescriptorFor( some.anEntity() );
             AssociationDescriptor someManyAssocDesc = qi4j.api().associationDescriptorFor( some.manyEntities() );
+            AssociationDescriptor someNamedAssocDesc = qi4j.api().associationDescriptorFor( some.namedEntities() );
 
             SomeWithAssociations some2 = buildSomeWithAssociation( anEntity );
             AssociationDescriptor some2AssocDesc = qi4j.api().associationDescriptorFor( some2.anEntity() );
             AssociationDescriptor some2ManyAssocDesc = qi4j.api().associationDescriptorFor( some2.manyEntities() );
+            AssociationDescriptor some2NamedAssocDesc = qi4j.api().associationDescriptorFor( some2.namedEntities() );
 
             assertThat( "AssociationDescriptor equal",
                         someAssocDesc,
@@ -104,6 +111,12 @@
             assertThat( "ManyAssociationDescriptor hashcode equal",
                         someManyAssocDesc.hashCode(),
                         equalTo( some2ManyAssocDesc.hashCode() ) );
+            assertThat( "NamedAssociationDescriptor equal",
+                        someNamedAssocDesc,
+                        equalTo( some2NamedAssocDesc ) );
+            assertThat( "NamedAssociationDescriptor hashcode equal",
+                        someNamedAssocDesc.hashCode(),
+                        equalTo( some2NamedAssocDesc.hashCode() ) );
         }
         finally
         {
@@ -120,10 +133,12 @@
             SomeWithAssociations some = buildSomeWithAssociation( uow.newEntity( AnEntity.class ) );
             AssociationDescriptor someAssocDesc = qi4j.api().associationDescriptorFor( some.anEntity() );
             AssociationDescriptor someManyAssocDesc = qi4j.api().associationDescriptorFor( some.manyEntities() );
+            AssociationDescriptor someNamedAssocDesc = qi4j.api().associationDescriptorFor( some.namedEntities() );
 
             SomeWithAssociations some2 = buildSomeWithAssociation( uow.newEntity( AnEntity.class ) );
             AssociationDescriptor some2AssocDesc = qi4j.api().associationDescriptorFor( some2.anEntity() );
             AssociationDescriptor some2ManyAssocDesc = qi4j.api().associationDescriptorFor( some2.manyEntities() );
+            AssociationDescriptor some2NamedAssocDesc = qi4j.api().associationDescriptorFor( some2.namedEntities() );
 
             assertThat( "AssociationDescriptor equal",
                         someAssocDesc,
@@ -137,6 +152,12 @@
             assertThat( "ManyAssociationDescriptor hashcode equal",
                         someManyAssocDesc.hashCode(),
                         equalTo( some2ManyAssocDesc.hashCode() ) );
+            assertThat( "NamedAssociationDescriptor equal",
+                        someNamedAssocDesc,
+                        equalTo( some2NamedAssocDesc ) );
+            assertThat( "NamedAssociationDescriptor hashcode equal",
+                        someNamedAssocDesc.hashCode(),
+                        equalTo( some2NamedAssocDesc.hashCode() ) );
         }
         finally
         {
@@ -155,10 +176,12 @@
             SomeWithAssociations some = buildSomeWithAssociation( anEntity );
             AssociationDescriptor someAssocDesc = qi4j.api().associationDescriptorFor( some.anEntity() );
             AssociationDescriptor someManyAssocDesc = qi4j.api().associationDescriptorFor( some.manyEntities() );
+            AssociationDescriptor someNamedAssocDesc = qi4j.api().associationDescriptorFor( some.namedEntities() );
 
             OtherWithAssociations other = buildOtherWithAssociation( anEntity );
             AssociationDescriptor otherAssocDesc = qi4j.api().associationDescriptorFor( other.anEntity() );
-            AssociationDescriptor some2ManyAssocDesc = qi4j.api().associationDescriptorFor( other.manyEntities() );
+            AssociationDescriptor otherManyAssocDesc = qi4j.api().associationDescriptorFor( other.manyEntities() );
+            AssociationDescriptor otherNamedAssocDesc = qi4j.api().associationDescriptorFor( other.namedEntities() );
 
             assertThat( "AssociationDescriptor not equal",
                         someAssocDesc,
@@ -168,10 +191,16 @@
                         not( equalTo( otherAssocDesc.hashCode() ) ) );
             assertThat( "ManyAssociationDescriptor not equal",
                         someManyAssocDesc,
-                        not( equalTo( some2ManyAssocDesc ) ) );
+                        not( equalTo( otherManyAssocDesc ) ) );
             assertThat( "ManyAssociationDescriptor hashcode not equal",
                         someManyAssocDesc.hashCode(),
-                        not( equalTo( some2ManyAssocDesc.hashCode() ) ) );
+                        not( equalTo( otherManyAssocDesc.hashCode() ) ) );
+            assertThat( "NamedAssociationDescriptor not equal",
+                        someNamedAssocDesc,
+                        not( equalTo( otherNamedAssocDesc ) ) );
+            assertThat( "NamedAssociationDescriptor hashcode not equal",
+                        someNamedAssocDesc.hashCode(),
+                        not( equalTo( otherNamedAssocDesc.hashCode() ) ) );
         }
         finally
         {
@@ -203,6 +232,12 @@
             assertThat( "ManyAssociation State hashcode not equal",
                         some.manyEntities().toList().hashCode(),
                         not( equalTo( some2.manyEntities().toList().hashCode() ) ) );
+            assertThat( "NamedAssociation State not equal",
+                        some.namedEntities().toMap(),
+                        not( equalTo( some2.namedEntities().toMap() ) ) );
+            assertThat( "NamedAssociation State hashcode not equal",
+                        some.namedEntities().toMap().hashCode(),
+                        not( equalTo( some2.namedEntities().toMap().hashCode() ) ) );
         }
         finally
         {
@@ -233,6 +268,12 @@
             assertThat( "ManyAssociation State hashcode equal",
                         some.manyEntities().toList().hashCode(),
                         equalTo( other.manyEntities().toList().hashCode() ) );
+            assertThat( "NamedAssociation State equal",
+                        some.namedEntities().toMap(),
+                        equalTo( other.namedEntities().toMap() ) );
+            assertThat( "NamedAssociation State hashcode equal",
+                        some.namedEntities().toMap().hashCode(),
+                        equalTo( other.namedEntities().toMap().hashCode() ) );
         }
         finally
         {
@@ -266,6 +307,12 @@
             assertThat( "ManyAssociation hashcode equal",
                         some.manyEntities().hashCode(),
                         equalTo( some2.manyEntities().hashCode() ) );
+            assertThat( "NamedAssociation equal",
+                        some.namedEntities(),
+                        equalTo( some2.namedEntities() ) );
+            assertThat( "NamedAssociation hashcode equal",
+                        some.namedEntities().hashCode(),
+                        equalTo( some2.namedEntities().hashCode() ) );
         }
         finally
         {
@@ -294,6 +341,12 @@
             assertThat( "ManyAssociation hashcode not equal",
                         some.manyEntities().hashCode(),
                         not( equalTo( some2.manyEntities().hashCode() ) ) );
+            assertThat( "NamedAssociation not equal",
+                        some.namedEntities(),
+                        not( equalTo( some2.namedEntities() ) ) );
+            assertThat( "NamedAssociation hashcode not equal",
+                        some.namedEntities().hashCode(),
+                        not( equalTo( some2.namedEntities().hashCode() ) ) );
         }
         finally
         {
@@ -324,6 +377,12 @@
             assertThat( "ManyAssociation hashcode not equal",
                         some.manyEntities().hashCode(),
                         not( equalTo( other.manyEntities().hashCode() ) ) );
+            assertThat( "NamedAssociation not equal",
+                        some.namedEntities(),
+                        not( equalTo( other.namedEntities() ) ) );
+            assertThat( "NamedAssociation hashcode not equal",
+                        some.namedEntities().hashCode(),
+                        not( equalTo( other.namedEntities().hashCode() ) ) );
         }
         finally
         {
@@ -352,6 +411,12 @@
             assertThat( "ManyAssociation hashcode not equal",
                         some.manyEntities().hashCode(),
                         not( equalTo( other.manyEntities().hashCode() ) ) );
+            assertThat( "NamedAssociation not equal",
+                        some.namedEntities(),
+                        not( equalTo( other.namedEntities() ) ) );
+            assertThat( "NamedAssociation hashcode not equal",
+                        some.namedEntities().hashCode(),
+                        not( equalTo( other.namedEntities().hashCode() ) ) );
         }
         finally
         {
@@ -369,6 +434,7 @@
             ValueBuilder<SomeWithAssociations> builder = module.newValueBuilder( SomeWithAssociations.class );
             builder.prototype().anEntity().set( associated );
             builder.prototype().manyEntities().add( associated );
+            builder.prototype().namedEntities().put( "someKey", associated );
             some = builder.newInstance();
         }
         return some;
@@ -381,6 +447,7 @@
             ValueBuilder<OtherWithAssociations> builder = module.newValueBuilder( OtherWithAssociations.class );
             builder.prototype().anEntity().set( associated );
             builder.prototype().manyEntities().add( associated );
+            builder.prototype().namedEntities().put( "someKey", associated );
             some = builder.newInstance();
         }
         return some;
diff --git a/core/runtime/src/test/java/org/qi4j/runtime/composite/FunctionalListTest.java b/core/runtime/src/test/java/org/qi4j/runtime/composite/FunctionalListTest.java
index da0c71f..b848958 100644
--- a/core/runtime/src/test/java/org/qi4j/runtime/composite/FunctionalListTest.java
+++ b/core/runtime/src/test/java/org/qi4j/runtime/composite/FunctionalListTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.runtime.composite;
 
 import java.util.ArrayList;
diff --git a/core/runtime/src/test/java/org/qi4j/runtime/composite/QI247Test1.java b/core/runtime/src/test/java/org/qi4j/runtime/composite/QI247Test1.java
index 90c773c..d187155 100644
--- a/core/runtime/src/test/java/org/qi4j/runtime/composite/QI247Test1.java
+++ b/core/runtime/src/test/java/org/qi4j/runtime/composite/QI247Test1.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.runtime.composite;
 
 import org.junit.Test;
diff --git a/core/runtime/src/test/java/org/qi4j/runtime/composite/QI247Test2.java b/core/runtime/src/test/java/org/qi4j/runtime/composite/QI247Test2.java
index baffa41..e70c90a 100644
--- a/core/runtime/src/test/java/org/qi4j/runtime/composite/QI247Test2.java
+++ b/core/runtime/src/test/java/org/qi4j/runtime/composite/QI247Test2.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.runtime.composite;
 
 import java.lang.reflect.InvocationHandler;
diff --git a/core/runtime/src/test/java/org/qi4j/runtime/composite/TransientAsClassTest.java b/core/runtime/src/test/java/org/qi4j/runtime/composite/TransientAsClassTest.java
index b4744b1..644da0d 100644
--- a/core/runtime/src/test/java/org/qi4j/runtime/composite/TransientAsClassTest.java
+++ b/core/runtime/src/test/java/org/qi4j/runtime/composite/TransientAsClassTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.runtime.composite;
 
 import org.junit.Ignore;
diff --git a/core/runtime/src/test/java/org/qi4j/runtime/concerns/PropertyInheritanceTest.java b/core/runtime/src/test/java/org/qi4j/runtime/concerns/PropertyInheritanceTest.java
index ea5b24f..79b3d49 100644
--- a/core/runtime/src/test/java/org/qi4j/runtime/concerns/PropertyInheritanceTest.java
+++ b/core/runtime/src/test/java/org/qi4j/runtime/concerns/PropertyInheritanceTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.runtime.concerns;
 
 import java.util.ArrayList;
diff --git a/core/runtime/src/test/java/org/qi4j/runtime/constraints/ConstraintsTest.properties b/core/runtime/src/test/java/org/qi4j/runtime/constraints/ConstraintsTest.properties
index d45d571..bb18d5f 100644
--- a/core/runtime/src/test/java/org/qi4j/runtime/constraints/ConstraintsTest.properties
+++ b/core/runtime/src/test/java/org/qi4j/runtime/constraints/ConstraintsTest.properties
@@ -1,3 +1,18 @@
+# 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.
+
 qi4j.constraint.ConstraintsTest$MyOneComposite=Message1
 
 qi4j.constraint.NotNull=Message2
diff --git a/core/runtime/src/test/java/org/qi4j/runtime/entity/EntityCompositeEqualityTest.java b/core/runtime/src/test/java/org/qi4j/runtime/entity/EntityCompositeEqualityTest.java
index 658de9c..354e5d0 100644
--- a/core/runtime/src/test/java/org/qi4j/runtime/entity/EntityCompositeEqualityTest.java
+++ b/core/runtime/src/test/java/org/qi4j/runtime/entity/EntityCompositeEqualityTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.runtime.entity;
 
 import org.junit.After;
diff --git a/core/runtime/src/test/java/org/qi4j/runtime/injection/InvocationInjectionTest.java b/core/runtime/src/test/java/org/qi4j/runtime/injection/InvocationInjectionTest.java
index 7424dc3..bf5091c 100644
--- a/core/runtime/src/test/java/org/qi4j/runtime/injection/InvocationInjectionTest.java
+++ b/core/runtime/src/test/java/org/qi4j/runtime/injection/InvocationInjectionTest.java
@@ -59,27 +59,29 @@
 
     @Mixins( MyMixin.class )
     @Concerns( MyConcern.class )
+// START SNIPPET: declaration
     public interface MyComposite
         extends TransientComposite
     {
         @Foo( "1" )
         void doStuff();
-
+// END SNIPPET: declaration
         void doStuff2();
 
         @Foo( "X" )
         void doStuff3();
     }
 
+// START SNIPPET: use1
     public abstract static class MyConcern
         extends ConcernOf<MyComposite>
         implements MyComposite
     {
         @Invocation
-        Method method;
-
-        @Invocation
         Foo foo;
+// END SNIPPET: use1
+        @Invocation
+        Method method;
 
         @Invocation
         AnnotatedElement ae;
@@ -129,10 +131,11 @@
         {
         }
     }
-
+// START SNIPPET: annotation
     @Retention( RUNTIME )
     @interface Foo
     {
         String value();
     }
+// END SNIPPET: annotation
 }
\ No newline at end of file
diff --git a/core/runtime/src/test/java/org/qi4j/runtime/injection/StructureInjectionTest.java b/core/runtime/src/test/java/org/qi4j/runtime/injection/StructureInjectionTest.java
index f446493..cbc8858 100644
--- a/core/runtime/src/test/java/org/qi4j/runtime/injection/StructureInjectionTest.java
+++ b/core/runtime/src/test/java/org/qi4j/runtime/injection/StructureInjectionTest.java
@@ -96,13 +96,13 @@
     }
 
     /**
-     * Tests injected mixin for a Qi4j annotated with {@link @org.qi4j.composite.scope.Structure}.
+     * Tests injected mixin for a Zest annotated with {@link @org.qi4j.composite.scope.Structure}.
      */
     @Test
     public void injectedStructureForQi4j()
     {
         StructureInjectionComposite sic = module.newTransient( StructureInjectionComposite.class );
-        assertThat( "Injected Qi4j", sic.getQi4j(), is( notNullValue() ) );
+        assertThat( "Injected Zest", sic.getQi4j(), is( notNullValue() ) );
     }
 
     /**
diff --git a/core/runtime/src/test/java/org/qi4j/runtime/objects/OuterClass.java b/core/runtime/src/test/java/org/qi4j/runtime/objects/OuterClass.java
index 3c210e4..815fe99 100644
--- a/core/runtime/src/test/java/org/qi4j/runtime/objects/OuterClass.java
+++ b/core/runtime/src/test/java/org/qi4j/runtime/objects/OuterClass.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.runtime.objects;
 
 import org.qi4j.api.injection.scope.Structure;
diff --git a/core/runtime/src/test/java/org/qi4j/runtime/query/model/Describable.java b/core/runtime/src/test/java/org/qi4j/runtime/query/model/Describable.java
index 1c183a0..b1ca88f 100644
--- a/core/runtime/src/test/java/org/qi4j/runtime/query/model/Describable.java
+++ b/core/runtime/src/test/java/org/qi4j/runtime/query/model/Describable.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.runtime.query.model;
 
 import org.qi4j.api.common.UseDefaults;
diff --git a/core/runtime/src/test/java/org/qi4j/runtime/util/AnnotationsTest.java b/core/runtime/src/test/java/org/qi4j/runtime/util/AnnotationsTest.java
index 377e8de..60f1188 100644
--- a/core/runtime/src/test/java/org/qi4j/runtime/util/AnnotationsTest.java
+++ b/core/runtime/src/test/java/org/qi4j/runtime/util/AnnotationsTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.runtime.util;
 
 import java.lang.reflect.Type;
diff --git a/core/runtime/src/test/java/org/qi4j/runtime/value/ValueCompositeBasicsTest.java b/core/runtime/src/test/java/org/qi4j/runtime/value/ValueCompositeBasicsTest.java
index 6a75d26..3ad4fd9 100644
--- a/core/runtime/src/test/java/org/qi4j/runtime/value/ValueCompositeBasicsTest.java
+++ b/core/runtime/src/test/java/org/qi4j/runtime/value/ValueCompositeBasicsTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.runtime.value;
 
 import org.junit.Test;
diff --git a/core/runtime/src/test/java/org/qi4j/runtime/value/ValueSerializationRegressionTest.java b/core/runtime/src/test/java/org/qi4j/runtime/value/ValueSerializationRegressionTest.java
new file mode 100644
index 0000000..4684d0e
--- /dev/null
+++ b/core/runtime/src/test/java/org/qi4j/runtime/value/ValueSerializationRegressionTest.java
@@ -0,0 +1,77 @@
+/*
+ * 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.qi4j.runtime.value;
+
+import org.junit.Test;
+import org.qi4j.api.association.Association;
+import org.qi4j.api.association.ManyAssociation;
+import org.qi4j.api.association.NamedAssociation;
+import org.qi4j.api.entity.Identity;
+import org.qi4j.api.property.Property;
+import org.qi4j.api.unitofwork.UnitOfWorkCompletionException;
+import org.qi4j.api.value.ValueBuilder;
+import org.qi4j.api.value.ValueSerialization;
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.entitystore.memory.MemoryEntityStoreService;
+import org.qi4j.spi.uuid.UuidIdentityGeneratorService;
+import org.qi4j.test.AbstractQi4jTest;
+import org.qi4j.valueserialization.orgjson.OrgJsonValueSerializationService;
+
+public class ValueSerializationRegressionTest extends AbstractQi4jTest
+{
+    @Override
+    public void assemble( ModuleAssembly module )
+        throws AssemblyException
+    {
+        module.entities( SimpleEntity.class );
+        module.entities( DualFaced.class );
+        module.values( DualFaced.class );
+        module.services( MemoryEntityStoreService.class );
+        module.services( UuidIdentityGeneratorService.class );
+        module.services( OrgJsonValueSerializationService.class ).taggedWith( ValueSerialization.Formats.JSON );
+    }
+
+    @Test
+    public void givenNewValueWhenConvertingToEntityExpectNewEntityInStore()
+        throws UnitOfWorkCompletionException
+    {
+        ValueBuilder<DualFaced> builder = module.newValueBuilder( DualFaced.class );
+        builder.prototype().identity().set( "1234" );
+        builder.prototype().name().set( "Hedhman" );
+        DualFaced value = builder.newInstance();
+    }
+
+    public interface SimpleEntity extends Identity
+    {
+        Property<String> name();
+    }
+
+    public interface DualFaced extends Identity
+    {
+        Property<String> name();
+
+        Association<SimpleEntity> simple();
+
+        ManyAssociation<SimpleEntity> simples();
+
+        NamedAssociation<SimpleEntity> namedSimples();
+    }
+}
+
diff --git a/core/runtime/src/test/java/org/qi4j/runtime/value/ValueWithAssociationTest.java b/core/runtime/src/test/java/org/qi4j/runtime/value/ValueWithAssociationTest.java
new file mode 100644
index 0000000..679542e
--- /dev/null
+++ b/core/runtime/src/test/java/org/qi4j/runtime/value/ValueWithAssociationTest.java
@@ -0,0 +1,202 @@
+/*
+ * 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.qi4j.runtime.value;
+
+import org.junit.Test;
+import org.qi4j.api.association.Association;
+import org.qi4j.api.association.AssociationStateHolder;
+import org.qi4j.api.association.ManyAssociation;
+import org.qi4j.api.association.NamedAssociation;
+import org.qi4j.api.common.Optional;
+import org.qi4j.api.entity.EntityBuilder;
+import org.qi4j.api.entity.EntityComposite;
+import org.qi4j.api.entity.EntityReference;
+import org.qi4j.api.entity.Identity;
+import org.qi4j.api.property.Property;
+import org.qi4j.api.unitofwork.UnitOfWork;
+import org.qi4j.api.unitofwork.UnitOfWorkCompletionException;
+import org.qi4j.api.value.ValueBuilder;
+import org.qi4j.api.value.ValueSerialization;
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.entitystore.memory.MemoryEntityStoreService;
+import org.qi4j.spi.uuid.UuidIdentityGeneratorService;
+import org.qi4j.test.AbstractQi4jTest;
+import org.qi4j.valueserialization.orgjson.OrgJsonValueSerializationService;
+
+import static org.hamcrest.core.IsEqual.equalTo;
+import static org.junit.Assert.assertThat;
+
+public class ValueWithAssociationTest extends AbstractQi4jTest
+{
+    @Override
+    public void assemble( ModuleAssembly module )
+        throws AssemblyException
+    {
+        module.entities( SimpleName.class );
+        module.entities( DualFaced.class );
+        module.values( SimpleName.class );
+        module.values( DualFaced.class );
+        module.services( MemoryEntityStoreService.class );
+        module.services( UuidIdentityGeneratorService.class );
+        module.services( OrgJsonValueSerializationService.class ).taggedWith( ValueSerialization.Formats.JSON );
+    }
+
+    @Test
+    public void givenEntityInStoreWhenFetchEntityReferenceExpectSuccess()
+        throws UnitOfWorkCompletionException
+    {
+        String identity1;
+        String identity2;
+        DualFaced value;
+        try (UnitOfWork uow = module.newUnitOfWork())
+        {
+            EntityBuilder<SimpleName> builder1 = uow.newEntityBuilder( SimpleName.class );
+            builder1.instance().name().set( "Niclas" );
+            SimpleName simpleEntity = builder1.newInstance();
+            identity1 = simpleEntity.identity().get();
+
+            EntityBuilder<DualFaced> builder2 = uow.newEntityBuilder( DualFaced.class );
+            DualFaced proto = builder2.instance();
+            proto.name().set( "Hedhman" );
+            proto.simple().set( simpleEntity );
+            proto.simples().add( simpleEntity );
+            proto.namedSimples().put( "niclas", simpleEntity );
+            DualFaced faced = builder2.newInstance();
+            identity2 = faced.identity().get();
+            value = uow.toValue( DualFaced.class, faced );
+            assertThat( value.identity().get(), equalTo( identity2 ) );
+            uow.complete();
+        }
+
+        try (UnitOfWork uow = module.newUnitOfWork())
+        {
+            DualFaced entity = uow.get( DualFaced.class, identity2 );
+            AssociationStateHolder holder = spi.stateOf( (EntityComposite) entity );
+            Association<?> simple = holder.allAssociations().iterator().next();
+            ManyAssociation<?> simples = holder.allManyAssociations().iterator().next();
+            NamedAssociation<?> namedSimples = holder.allNamedAssociations().iterator().next();
+
+            assertThat( spi.entityReferenceOf( simple ), equalTo( EntityReference.parseEntityReference( identity1 ) ) );
+            assertThat( spi.entityReferenceOf( simples )
+                            .iterator()
+                            .next(), equalTo( EntityReference.parseEntityReference( identity1 ) ) );
+            assertThat( spi.entityReferenceOf( namedSimples )
+                            .iterator()
+                            .next()
+                            .getValue(), equalTo( EntityReference.parseEntityReference( identity1 ) ) );
+
+            DualFaced resurrected = uow.toEntity( DualFaced.class, value );
+            assertThat( resurrected.simple(), equalTo( entity.simple() ) );
+            assertThat( resurrected.simples(), equalTo( entity.simples() ) );
+            assertThat( resurrected.namedSimples(), equalTo( entity.namedSimples() ) );
+        }
+    }
+
+    @Test
+    public void givenNewValueWhenConvertingToEntityExpectNewEntityInStore()
+        throws UnitOfWorkCompletionException
+    {
+        ValueBuilder<DualFaced> builder = module.newValueBuilder( DualFaced.class );
+        builder.prototype().identity().set( "1234" );
+        builder.prototype().name().set( "Hedhman" );
+        DualFaced value = builder.newInstance();
+
+        try (UnitOfWork uow = module.newUnitOfWork())
+        {
+            uow.toEntity( DualFaced.class, value );
+            uow.complete();
+        }
+
+        try (UnitOfWork uow = module.newUnitOfWork())
+        {
+            DualFaced entity = uow.get( DualFaced.class, "1234" );
+            assertThat( entity.identity().get(), equalTo( "1234" ) );
+            assertThat( entity.name().get(), equalTo( "Hedhman" ) );
+            uow.complete();
+        }
+    }
+
+    @Test
+    public void givenValueWithIdentityAlreadyInStoreWhenConvertingToEntityExpectExistingEntityToBeUpdated()
+        throws UnitOfWorkCompletionException
+    {
+        String identity1;
+        String identity2;
+        try (UnitOfWork uow = module.newUnitOfWork())
+        {
+            EntityBuilder<SimpleName> builder1 = uow.newEntityBuilder( SimpleName.class );
+            builder1.instance().name().set( "Niclas" );
+            SimpleName simpleEntity = builder1.newInstance();
+            identity1 = simpleEntity.identity().get();
+
+            EntityBuilder<DualFaced> builder2 = uow.newEntityBuilder( DualFaced.class );
+            DualFaced proto = builder2.instance();
+            proto.name().set( "Hedhman" );
+            proto.simple().set( simpleEntity );
+            proto.simples().add( simpleEntity );
+            proto.namedSimples().put( "niclas", simpleEntity );
+            DualFaced faced = builder2.newInstance();
+            identity2 = faced.identity().get();
+            uow.complete();
+        }
+        ValueBuilder<SimpleName> vb1 = module.newValueBuilder( SimpleName.class );
+        vb1.prototype().identity().set( identity1 );
+        vb1.prototype().name().set( "Paul" );
+        SimpleName simpleValue = vb1.newInstance();
+
+        ValueBuilder<DualFaced> vb2 = module.newValueBuilder( DualFaced.class );
+        vb2.prototype().identity().set( identity2 );
+        vb2.prototype().name().set( "Merlin" );
+        vb2.prototype().simple().set( simpleValue );
+        vb2.prototype().simples().add( simpleValue );
+        vb2.prototype().namedSimples().put( "paul", simpleValue );
+        DualFaced dualValue = vb2.newInstance();
+
+        try (UnitOfWork uow = module.newUnitOfWork())
+        {
+            DualFaced dualEntity = uow.toEntity( DualFaced.class, dualValue );
+            // The root entity is expected to have changed value,
+            assertThat( dualEntity.name().get(), equalTo( "Merlin" ) );
+            // But the referenced entity is not updated, only using the EntityReference, which still points to "Niclas",
+            // even though the value contains "Paul" for that entity. That entity needds to be updated separately
+            assertThat( dualEntity.simple().get().name().get(), equalTo( "Niclas" ) );
+            assertThat( dualEntity.simples().get(0).name().get(), equalTo( "Niclas" ) );
+            assertThat( dualEntity.namedSimples().get("paul").name().get(), equalTo( "Niclas" ) );
+            assertThat( dualEntity.namedSimples().get("niclas"), equalTo( null ) );
+        }
+    }
+
+    public interface SimpleName extends Identity
+    {
+        Property<String> name();
+    }
+
+    public interface DualFaced extends Identity
+    {
+        Property<String> name();
+
+        @Optional
+        Association<SimpleName> simple();
+
+        ManyAssociation<SimpleName> simples();
+
+        NamedAssociation<SimpleName> namedSimples();
+    }
+}
diff --git a/core/runtime/src/test/java/org/qi4j/runtime/visibility/VisibilityInUnitOfWorkTest.java b/core/runtime/src/test/java/org/qi4j/runtime/visibility/VisibilityInUnitOfWorkTest.java
new file mode 100644
index 0000000..9a9ef6d
--- /dev/null
+++ b/core/runtime/src/test/java/org/qi4j/runtime/visibility/VisibilityInUnitOfWorkTest.java
@@ -0,0 +1,159 @@
+/*
+* 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.qi4j.runtime.visibility;
+
+import org.junit.Test;
+import org.qi4j.api.common.Visibility;
+import org.qi4j.api.injection.scope.Service;
+import org.qi4j.api.injection.scope.Structure;
+import org.qi4j.api.mixin.Mixins;
+import org.qi4j.api.service.ServiceReference;
+import org.qi4j.api.structure.Application;
+import org.qi4j.api.structure.Module;
+import org.qi4j.api.unitofwork.UnitOfWork;
+import org.qi4j.api.value.ValueSerialization;
+import org.qi4j.bootstrap.ApplicationAssembler;
+import org.qi4j.bootstrap.ApplicationAssembly;
+import org.qi4j.bootstrap.ApplicationAssemblyFactory;
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.Energy4Java;
+import org.qi4j.bootstrap.LayerAssembly;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.entitystore.memory.MemoryEntityStoreService;
+import org.qi4j.spi.uuid.UuidIdentityGeneratorService;
+import org.qi4j.valueserialization.orgjson.OrgJsonValueSerializationService;
+
+public class VisibilityInUnitOfWorkTest
+{
+    @Test
+    public void givenTwoModulesWithServiceAndEntityInOneAndEntityInOtherWhenOtherEntityAccessServiceWhichUsesItsEntityExpectServiceToHaveVisibility()
+        throws Exception
+    {
+        Application underTest = createApplication();
+        Module module = underTest.findModule( "layer1", "My Module" );
+        ServiceReference<MyService> service = module.findService( MyService.class );
+        service.get().create();
+    }
+
+    @Mixins( YourService.Mixin.class )
+    public interface YourService
+    {
+        void create();
+
+        YourEntity get();
+
+        class Mixin
+            implements YourService
+        {
+            @Structure
+            private Module module;
+
+            @Override
+            public void create()
+            {
+                UnitOfWork uow = module.currentUnitOfWork();
+                YourEntity entity = uow.newEntity( YourEntity.class, "345" );
+            }
+
+            @Override
+            public YourEntity get()
+            {
+                UnitOfWork uow = module.currentUnitOfWork();
+                return uow.get( YourEntity.class, "345" );
+            }
+        }
+    }
+
+    public interface YourEntity
+    {
+    }
+
+    @Mixins( MyEntity.Mixin.class )
+    public interface MyEntity
+    {
+        void logic();
+
+        class Mixin
+            implements MyEntity
+        {
+            @Service
+            private YourService service;
+
+            @Override
+            public void logic()
+            {
+                YourEntity result = service.get();
+            }
+        }
+    }
+
+    @Mixins( MyService.Mixin.class )
+    public interface MyService
+    {
+        void create();
+
+        class Mixin
+            implements MyService
+        {
+
+            @Service
+            private YourService service;
+
+            @Structure
+            private Module module;
+
+            @Override
+            public void create()
+            {
+                try (UnitOfWork uow = module.newUnitOfWork())
+                {
+                    uow.newEntity( MyEntity.class, "123" );
+                    MyEntity entity1 = uow.get( MyEntity.class, "123" );
+                    service.create();
+                    YourEntity entity2 = service.get();
+                }
+            }
+        }
+    }
+
+    private Application createApplication()
+        throws AssemblyException
+    {
+        Energy4Java qi4j = new Energy4Java();
+        return qi4j.newApplication( new ApplicationAssembler()
+        {
+            @Override
+            public ApplicationAssembly assemble( ApplicationAssemblyFactory appFactory )
+                throws AssemblyException
+            {
+                ApplicationAssembly appAssembly = appFactory.newApplicationAssembly();
+                LayerAssembly layer1 = appAssembly.layer( "layer1" );
+                ModuleAssembly myModule = layer1.module( "My Module" );
+                ModuleAssembly yourModule = layer1.module( "Your Module" );
+                ModuleAssembly infraModule = layer1.module( "Infra Module" );
+                myModule.services( MyService.class );
+                myModule.entities( MyEntity.class );
+                yourModule.entities( YourEntity.class );
+                yourModule.services( YourService.class ).visibleIn( Visibility.layer );
+                infraModule.services( MemoryEntityStoreService.class ).visibleIn( Visibility.layer );
+                infraModule.services( UuidIdentityGeneratorService.class ).visibleIn( Visibility.layer );
+                infraModule.services( OrgJsonValueSerializationService.class ).visibleIn( Visibility.layer).taggedWith( ValueSerialization.Formats.JSON );
+                return appAssembly;
+            }
+        } );
+    }
+}
diff --git a/core/runtime/src/test/resources/org/qi4j/runtime/instantiation/My.properties b/core/runtime/src/test/resources/org/qi4j/runtime/instantiation/My.properties
index b62e816..7044813 100644
--- a/core/runtime/src/test/resources/org/qi4j/runtime/instantiation/My.properties
+++ b/core/runtime/src/test/resources/org/qi4j/runtime/instantiation/My.properties
@@ -1 +1,16 @@
+# 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.
+
 data=HabbaZout
\ No newline at end of file
diff --git a/core/runtime/src/test/resources/org/qi4j/runtime/service/HelloWorldService.properties b/core/runtime/src/test/resources/org/qi4j/runtime/service/HelloWorldService.properties
index e670df5..f6308ba 100644
--- a/core/runtime/src/test/resources/org/qi4j/runtime/service/HelloWorldService.properties
+++ b/core/runtime/src/test/resources/org/qi4j/runtime/service/HelloWorldService.properties
@@ -1,2 +1,17 @@
+# 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.
+
 phrase=Hello
 name=World
diff --git a/core/spi/build.gradle b/core/spi/build.gradle
index 7288303..3908bc6 100644
--- a/core/spi/build.gradle
+++ b/core/spi/build.gradle
@@ -1,4 +1,23 @@
-jar { manifest { name = "Qi4j Core SPI"}}
+/*
+ * 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.
+ */
+
+jar { manifest { name = "Apache Zest™ Core SPI"}}
 
 dependencies {
 
diff --git a/core/spi/dev-status.xml b/core/spi/dev-status.xml
index 55048fe..4f034dc 100644
--- a/core/spi/dev-status.xml
+++ b/core/spi/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/core/spi/src/docs/cache.txt b/core/spi/src/docs/cache.txt
index 273dc01..fdd1c90 100644
--- a/core/spi/src/docs/cache.txt
+++ b/core/spi/src/docs/cache.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[core-spi-cache,Cache SPI]]
 = Cache SPI =
 
diff --git a/core/spi/src/docs/entitystore.txt b/core/spi/src/docs/entitystore.txt
index 6bfa50e..2674503 100644
--- a/core/spi/src/docs/entitystore.txt
+++ b/core/spi/src/docs/entitystore.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[core-spi-entitystore,EntityStore SPI]]
 = EntityStore SPI =
 
diff --git a/core/spi/src/docs/indexing.txt b/core/spi/src/docs/indexing.txt
index 5ff1361..c356b59 100644
--- a/core/spi/src/docs/indexing.txt
+++ b/core/spi/src/docs/indexing.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[core-spi-indexing,Indexing/Query SPI]]
 = Indexing/Query SPI =
 
diff --git a/core/spi/src/docs/reference/ref-spi.txt b/core/spi/src/docs/reference/ref-spi.txt
index e69de29..fc7aac6 100644
--- a/core/spi/src/docs/reference/ref-spi.txt
+++ b/core/spi/src/docs/reference/ref-spi.txt
@@ -0,0 +1,18 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
diff --git a/core/spi/src/docs/spi.txt b/core/spi/src/docs/spi.txt
index 305449f..32fc8b2 100644
--- a/core/spi/src/docs/spi.txt
+++ b/core/spi/src/docs/spi.txt
@@ -21,7 +21,7 @@
 source=core/spi/dev-status.xml
 --------------
 
-The Qi4j Core Runtime has a number of extension points, which we call the _Qi4j Core Extension SPI_. These are defined
+The Zest™ Core Runtime has a number of extension points, which we call the _Qi4j Core Extension SPI_. These are defined
 interfaces used *only* by the Core Runtime and *never* directly by application code. <<extensions>> are assembled in
 applications during the bootstrap phase.
 
@@ -35,7 +35,7 @@
     * <<core-spi-indexing>>
     * <<core-spi-metrics>>
 
-Qi4j Runtime Extensions implementations may depend on Qi4j Libraries, but Libraries are NOT ALLOWED to depend on
+Zest™ Runtime Extensions implementations may depend on Zest™ Libraries, but Libraries are NOT ALLOWED to depend on
 Extensions. Applications code is NOT ALLOWED to depend on extensions. And application code SHOULD NOT depend on the
 Core Extension SPI. If you think that is needed, please contact qi4j-dev forum at Google Groups, to see if your usecase
 can be solved in a support manner, or that we need to extend the Core API to support it.
diff --git a/core/spi/src/docs/valueserialization.txt b/core/spi/src/docs/valueserialization.txt
index 2696cf3..fa5fb86 100644
--- a/core/spi/src/docs/valueserialization.txt
+++ b/core/spi/src/docs/valueserialization.txt
@@ -1,9 +1,28 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[core-spi-valueserialization,ValueSerialization SPI]]
 = ValueSerialization SPI =
 
 == Overview ==
 
-The Qi4j Core Runtime use ValueSerialization to provide string representation of ValueComposites via their `toString()`
+The Zest™ Core Runtime use ValueSerialization to provide string representation of ValueComposites via their `toString()`
 method, and, their instanciation from the very same representation via the `newValueFromSerializedState(..)` method of
 the ValueBuilderFactory API.
 
diff --git a/core/spi/src/main/java/org/qi4j/entitystore/memory/MemoryMapEntityStoreMixin.java b/core/spi/src/main/java/org/qi4j/entitystore/memory/MemoryMapEntityStoreMixin.java
index 173481a..d031fb5 100644
--- a/core/spi/src/main/java/org/qi4j/entitystore/memory/MemoryMapEntityStoreMixin.java
+++ b/core/spi/src/main/java/org/qi4j/entitystore/memory/MemoryMapEntityStoreMixin.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.entitystore.memory;
 
 import java.io.IOException;
diff --git a/core/spi/src/main/java/org/qi4j/entitystore/memory/package.html b/core/spi/src/main/java/org/qi4j/entitystore/memory/package.html
index ab810ef..d907b6c 100644
--- a/core/spi/src/main/java/org/qi4j/entitystore/memory/package.html
+++ b/core/spi/src/main/java/org/qi4j/entitystore/memory/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>In-Memory EntityStore.</h2>
diff --git a/core/spi/src/main/java/org/qi4j/spi/Qi4jSPI.java b/core/spi/src/main/java/org/qi4j/spi/Qi4jSPI.java
index 2586d95..eb44d6d 100644
--- a/core/spi/src/main/java/org/qi4j/spi/Qi4jSPI.java
+++ b/core/spi/src/main/java/org/qi4j/spi/Qi4jSPI.java
@@ -14,16 +14,21 @@
 
 package org.qi4j.spi;
 
+import java.util.Map;
 import org.qi4j.api.Qi4j;
+import org.qi4j.api.association.Association;
 import org.qi4j.api.association.AssociationStateHolder;
+import org.qi4j.api.association.ManyAssociation;
+import org.qi4j.api.association.NamedAssociation;
 import org.qi4j.api.composite.TransientComposite;
 import org.qi4j.api.entity.EntityComposite;
+import org.qi4j.api.entity.EntityReference;
 import org.qi4j.api.property.StateHolder;
 import org.qi4j.api.value.ValueComposite;
 import org.qi4j.spi.entity.EntityState;
 
 /**
- * Encapsulation of the Qi4j SPI. This is implemented by the runtime.
+ * Encapsulation of the Zest SPI. This is implemented by the runtime.
  */
 public interface Qi4jSPI
     extends Qi4j
@@ -36,4 +41,29 @@
 
     // Entities
     EntityState entityStateOf( EntityComposite composite );
+
+    /**
+     * Fetches the EntityReference without loading the referenced entity.
+     *
+     * @param assoc The Association for which we want to obtain the EntityReference
+     * @return The EntityReference of the given Association.
+     */
+    EntityReference entityReferenceOf( Association assoc );
+
+    /**
+     * Fetches the EntityReferences without loading the referenced entities.
+     *
+     * @param assoc The ManyAssociation for which we want to obtain the EntityReferences.
+     * @return An Iteranble of all the EntityReferences of the given ManyAssociation.
+     */
+    Iterable<EntityReference> entityReferenceOf( ManyAssociation assoc );
+
+    /**
+     * Fetches the EntityReferences without loading the referenced entities.
+     *
+     * @param assoc The NamedAssociation for which we want to obtain the EntityReference
+     * @return An Iteranble of Map.Entry with the name and EntityReference of the given NamedAssociation.
+     */
+    Iterable<Map.Entry<String,EntityReference>> entityReferenceOf( NamedAssociation assoc );
+
 }
diff --git a/core/spi/src/main/java/org/qi4j/spi/cache/CachePool.java b/core/spi/src/main/java/org/qi4j/spi/cache/CachePool.java
index e892514..c4ee5ac 100644
--- a/core/spi/src/main/java/org/qi4j/spi/cache/CachePool.java
+++ b/core/spi/src/main/java/org/qi4j/spi/cache/CachePool.java
@@ -20,8 +20,8 @@
 /**
  * A CachePool is a service that manages the Persistence Caches.
  * <p>
- * The CachePool is typically implemented as a Qi4j Extension, and is an optional extension in the persistence
- * subsystem of Qi4j. If a Cache Extension is not provided, caching will be turned off. However, since caching
+ * The CachePool is typically implemented as a Zest Extension, and is an optional extension in the persistence
+ * subsystem of Zest. If a Cache Extension is not provided, caching will be turned off. However, since caching
  * operate on EntityStore level, and is an optional component at that, just because you have defined a Cache
  * Extension does not necessary mean that your system will use it. Check the EntityStore implementations for
  * details if they are Cache enabled. Most EntityStore implementations has this enabled, often via the MapEntityStore
diff --git a/core/spi/src/main/java/org/qi4j/spi/cache/package.html b/core/spi/src/main/java/org/qi4j/spi/cache/package.html
index 2e982df..c96994a 100644
--- a/core/spi/src/main/java/org/qi4j/spi/cache/package.html
+++ b/core/spi/src/main/java/org/qi4j/spi/cache/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Cache SPI.</h2>
diff --git a/core/spi/src/main/java/org/qi4j/spi/entity/EntityStatus.java b/core/spi/src/main/java/org/qi4j/spi/entity/EntityStatus.java
index c4282e2..192cfd7 100644
--- a/core/spi/src/main/java/org/qi4j/spi/entity/EntityStatus.java
+++ b/core/spi/src/main/java/org/qi4j/spi/entity/EntityStatus.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.spi.entity;
 
 /**
diff --git a/core/spi/src/main/java/org/qi4j/spi/entity/NamedAssociationState.java b/core/spi/src/main/java/org/qi4j/spi/entity/NamedAssociationState.java
index 5cf3257..584feee 100644
--- a/core/spi/src/main/java/org/qi4j/spi/entity/NamedAssociationState.java
+++ b/core/spi/src/main/java/org/qi4j/spi/entity/NamedAssociationState.java
@@ -40,5 +40,4 @@
     EntityReference get( String name );
 
     String nameOf( EntityReference entityReference );
-
 }
diff --git a/core/spi/src/main/java/org/qi4j/spi/entity/package.html b/core/spi/src/main/java/org/qi4j/spi/entity/package.html
index 8992739..2b9c206 100644
--- a/core/spi/src/main/java/org/qi4j/spi/entity/package.html
+++ b/core/spi/src/main/java/org/qi4j/spi/entity/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Entity SPI.</h2>
diff --git a/core/spi/src/main/java/org/qi4j/spi/entitystore/ConcurrentModificationCheckConcern.java b/core/spi/src/main/java/org/qi4j/spi/entitystore/ConcurrentModificationCheckConcern.java
index cfeead6..118389c 100644
--- a/core/spi/src/main/java/org/qi4j/spi/entitystore/ConcurrentModificationCheckConcern.java
+++ b/core/spi/src/main/java/org/qi4j/spi/entitystore/ConcurrentModificationCheckConcern.java
@@ -14,19 +14,18 @@
 
 package org.qi4j.spi.entitystore;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
 import org.qi4j.api.Qi4j;
 import org.qi4j.api.concern.ConcernOf;
 import org.qi4j.api.entity.EntityDescriptor;
 import org.qi4j.api.entity.EntityReference;
 import org.qi4j.api.injection.scope.Structure;
 import org.qi4j.api.injection.scope.This;
-import org.qi4j.api.structure.Module;
 import org.qi4j.api.usecase.Usecase;
 import org.qi4j.spi.entity.EntityState;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
+import org.qi4j.spi.module.ModuleSpi;
 
 /**
  * Concern that helps EntityStores do concurrent modification checks.
@@ -44,11 +43,12 @@
 {
     @This
     private EntityStateVersions versions;
+
     @Structure
     private Qi4j api;
 
     @Override
-    public EntityStoreUnitOfWork newUnitOfWork( Usecase usecase, Module module, long currentTime )
+    public EntityStoreUnitOfWork newUnitOfWork( Usecase usecase, ModuleSpi module, long currentTime )
     {
         final EntityStoreUnitOfWork uow = next.newUnitOfWork( usecase, module, currentTime );
         return new ConcurrentCheckingEntityStoreUnitOfWork( uow, api.dereference( versions ), module, currentTime );
@@ -59,16 +59,16 @@
     {
         private final EntityStoreUnitOfWork uow;
         private EntityStateVersions versions;
-        private Module module;
+        private ModuleSpi module;
         private long currentTime;
 
-        private List<EntityState> loaded = new ArrayList<EntityState>();
+        private List<EntityState> loaded = new ArrayList<>();
 
-        private ReentrantReadWriteLock lock = new ReentrantReadWriteLock(  );
+        private ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
 
         public ConcurrentCheckingEntityStoreUnitOfWork( EntityStoreUnitOfWork uow,
                                                         EntityStateVersions versions,
-                                                        Module module,
+                                                        ModuleSpi module,
                                                         long currentTime
         )
         {
@@ -91,10 +91,13 @@
         }
 
         @Override
-        public EntityState newEntityState( EntityReference anIdentity, EntityDescriptor entityDescriptor )
+        public EntityState newEntityState( ModuleSpi module,
+                                           EntityReference anIdentity,
+                                           EntityDescriptor entityDescriptor
+        )
             throws EntityStoreException
         {
-            return uow.newEntityState( anIdentity, entityDescriptor );
+            return uow.newEntityState( module, anIdentity, entityDescriptor );
         }
 
         @Override
@@ -105,34 +108,35 @@
 
             try
             {
-               versions.checkForConcurrentModification( loaded, module, currentTime );
+                versions.checkForConcurrentModification( loaded, module, currentTime );
 
-               final StateCommitter committer = uow.applyChanges();
+                final StateCommitter committer = uow.applyChanges();
 
-               return new StateCommitter()
-               {
-                   @Override
-                   public void commit()
-                   {
-                       committer.commit();
-                       versions.forgetVersions( loaded );
+                return new StateCommitter()
+                {
+                    @Override
+                    public void commit()
+                    {
+                        committer.commit();
+                        versions.forgetVersions( loaded );
 
-                       lock.writeLock().unlock();
-                   }
+                        lock.writeLock().unlock();
+                    }
 
-                   @Override
-                   public void cancel()
-                   {
-                       committer.cancel();
-                       versions.forgetVersions( loaded );
+                    @Override
+                    public void cancel()
+                    {
+                        committer.cancel();
+                        versions.forgetVersions( loaded );
 
-                       lock.writeLock().unlock();
-                   }
-               };
-            } catch( EntityStoreException e )
+                        lock.writeLock().unlock();
+                    }
+                };
+            }
+            catch( EntityStoreException e )
             {
-               lock.writeLock().unlock();
-               throw e;
+                lock.writeLock().unlock();
+                throw e;
             }
         }
 
@@ -149,29 +153,38 @@
 
                 try
                 {
-                   versions.forgetVersions( loaded );
-                } finally
+                    versions.forgetVersions( loaded );
+                }
+                finally
                 {
-                   lock.writeLock().unlock();
+                    lock.writeLock().unlock();
                 }
             }
         }
 
         @Override
-        public EntityState entityStateOf( EntityReference anIdentity )
+        public Usecase usecase()
+        {
+            return uow.usecase();
+        }
+
+        @SuppressWarnings( "DuplicateThrows" )
+        @Override
+        public EntityState entityStateOf( ModuleSpi module, EntityReference anIdentity )
             throws EntityStoreException, EntityNotFoundException
         {
             lock.readLock().lock();
 
             try
             {
-               EntityState entityState = uow.entityStateOf( anIdentity );
-               versions.rememberVersion( entityState.identity(), entityState.version() );
-               loaded.add( entityState );
-               return entityState;
-            } finally
+                EntityState entityState = uow.entityStateOf( module, anIdentity );
+                versions.rememberVersion( entityState.identity(), entityState.version() );
+                loaded.add( entityState );
+                return entityState;
+            }
+            finally
             {
-               lock.readLock().unlock();
+                lock.readLock().unlock();
             }
         }
     }
diff --git a/core/spi/src/main/java/org/qi4j/spi/entitystore/DefaultEntityStoreUnitOfWork.java b/core/spi/src/main/java/org/qi4j/spi/entitystore/DefaultEntityStoreUnitOfWork.java
index cc93430..1c1d794 100644
--- a/core/spi/src/main/java/org/qi4j/spi/entitystore/DefaultEntityStoreUnitOfWork.java
+++ b/core/spi/src/main/java/org/qi4j/spi/entitystore/DefaultEntityStoreUnitOfWork.java
@@ -17,9 +17,9 @@
 import java.util.HashMap;
 import org.qi4j.api.entity.EntityDescriptor;
 import org.qi4j.api.entity.EntityReference;
-import org.qi4j.api.structure.Module;
 import org.qi4j.api.usecase.Usecase;
 import org.qi4j.spi.entity.EntityState;
+import org.qi4j.spi.module.ModuleSpi;
 
 /**
  * Default EntityStore UnitOfWork.
@@ -29,21 +29,18 @@
 {
     private EntityStoreSPI entityStoreSPI;
     private String identity;
-    private Module module;
     private HashMap<EntityReference, EntityState> states = new HashMap<>();
     private Usecase usecase;
     private long currentTime;
 
     public DefaultEntityStoreUnitOfWork( EntityStoreSPI entityStoreSPI,
                                          String identity,
-                                         Module module,
                                          Usecase usecase,
                                          long currentTime
     )
     {
         this.entityStoreSPI = entityStoreSPI;
         this.identity = identity;
-        this.module = module;
         this.usecase = usecase;
         this.currentTime = currentTime;
     }
@@ -54,11 +51,6 @@
         return identity;
     }
 
-    public Module module()
-    {
-        return module;
-    }
-
     @Override
     public long currentTime()
     {
@@ -73,7 +65,7 @@
     // EntityStore
 
     @Override
-    public EntityState newEntityState( EntityReference anIdentity, EntityDescriptor descriptor )
+    public EntityState newEntityState( ModuleSpi module, EntityReference anIdentity, EntityDescriptor descriptor )
         throws EntityStoreException
     {
         EntityState entityState = states.get( anIdentity );
@@ -81,13 +73,13 @@
         {
             throw new EntityAlreadyExistsException( anIdentity );
         }
-        EntityState state = entityStoreSPI.newEntityState( this, anIdentity, descriptor );
+        EntityState state = entityStoreSPI.newEntityState( this, module, anIdentity, descriptor );
         states.put( anIdentity, state );
         return state;
     }
 
     @Override
-    public EntityState entityStateOf( EntityReference anIdentity )
+    public EntityState entityStateOf( ModuleSpi module, EntityReference anIdentity )
         throws EntityNotFoundException
     {
 
@@ -96,7 +88,7 @@
         {
             return entityState;
         }
-        entityState = entityStoreSPI.entityStateOf( this, anIdentity );
+        entityState = entityStoreSPI.entityStateOf( this, module, anIdentity );
         states.put( anIdentity, entityState );
         return entityState;
     }
diff --git a/core/spi/src/main/java/org/qi4j/spi/entitystore/EntityAlreadyExistsException.java b/core/spi/src/main/java/org/qi4j/spi/entitystore/EntityAlreadyExistsException.java
index 116e9bf..6054dcd 100644
--- a/core/spi/src/main/java/org/qi4j/spi/entitystore/EntityAlreadyExistsException.java
+++ b/core/spi/src/main/java/org/qi4j/spi/entitystore/EntityAlreadyExistsException.java
@@ -28,7 +28,7 @@
 
     public EntityAlreadyExistsException( EntityReference identity )
     {
-        super("Entity " + identity + " already existed");
+        super("Entity " + identity + " already exists.");
         this.identity = identity;
     }
 
diff --git a/core/spi/src/main/java/org/qi4j/spi/entitystore/EntityStateVersions.java b/core/spi/src/main/java/org/qi4j/spi/entitystore/EntityStateVersions.java
index ddf1758..08e268d 100644
--- a/core/spi/src/main/java/org/qi4j/spi/entitystore/EntityStateVersions.java
+++ b/core/spi/src/main/java/org/qi4j/spi/entitystore/EntityStateVersions.java
@@ -21,10 +21,10 @@
 import org.qi4j.api.entity.EntityReference;
 import org.qi4j.api.injection.scope.This;
 import org.qi4j.api.mixin.Mixins;
-import org.qi4j.api.structure.Module;
 import org.qi4j.api.usecase.Usecase;
 import org.qi4j.spi.entity.EntityState;
 import org.qi4j.spi.entity.EntityStatus;
+import org.qi4j.spi.module.ModuleSpi;
 
 /**
  * Entity versions state.
@@ -36,7 +36,7 @@
 
     void rememberVersion( EntityReference identity, String version );
 
-    void checkForConcurrentModification( Iterable<EntityState> loaded, Module module, long currentTime )
+    void checkForConcurrentModification( Iterable<EntityState> loaded, ModuleSpi module, long currentTime )
         throws ConcurrentEntityStateModificationException;
 
     /**
@@ -48,7 +48,7 @@
         @This
         private EntityStore store;
 
-        private final Map<EntityReference, String> versions = new WeakHashMap<EntityReference, String>();
+        private final Map<EntityReference, String> versions = new WeakHashMap<>();
 
         @Override
         public synchronized void forgetVersions( Iterable<EntityState> states )
@@ -67,7 +67,7 @@
 
         @Override
         public synchronized void checkForConcurrentModification( Iterable<EntityState> loaded,
-                                                                 Module module,
+                                                                 ModuleSpi module,
                                                                  long currentTime
         )
             throws ConcurrentEntityStateModificationException
@@ -84,7 +84,7 @@
                 if( storeVersion == null )
                 {
                     EntityStoreUnitOfWork unitOfWork = store.newUnitOfWork( Usecase.DEFAULT, module, currentTime );
-                    EntityState state = unitOfWork.entityStateOf( entityState.identity() );
+                    EntityState state = unitOfWork.entityStateOf( module, entityState.identity() );
                     storeVersion = state.version();
                     unitOfWork.discard();
                 }
@@ -93,7 +93,7 @@
                 {
                     if( changed == null )
                     {
-                        changed = new ArrayList<EntityReference>();
+                        changed = new ArrayList<>();
                     }
                     changed.add( entityState.identity() );
                 }
diff --git a/core/spi/src/main/java/org/qi4j/spi/entitystore/EntityStore.java b/core/spi/src/main/java/org/qi4j/spi/entitystore/EntityStore.java
index fa5ac1b..b8de305 100644
--- a/core/spi/src/main/java/org/qi4j/spi/entitystore/EntityStore.java
+++ b/core/spi/src/main/java/org/qi4j/spi/entitystore/EntityStore.java
@@ -20,13 +20,14 @@
 import org.qi4j.api.usecase.Usecase;
 import org.qi4j.io.Input;
 import org.qi4j.spi.entity.EntityState;
+import org.qi4j.spi.module.ModuleSpi;
 
 /**
  * Interface that must be implemented by store for persistent state of EntityComposites.
  */
 public interface EntityStore
 {
-    EntityStoreUnitOfWork newUnitOfWork( Usecase usecase, Module module, long currentTime );
+    EntityStoreUnitOfWork newUnitOfWork( Usecase usecase, ModuleSpi module, long currentTime );
 
-    Input<EntityState, EntityStoreException> entityStates( Module module );
+    Input<EntityState, EntityStoreException> entityStates( ModuleSpi module );
 }
diff --git a/core/spi/src/main/java/org/qi4j/spi/entitystore/EntityStoreSPI.java b/core/spi/src/main/java/org/qi4j/spi/entitystore/EntityStoreSPI.java
index 536ceb9..521d2ce 100644
--- a/core/spi/src/main/java/org/qi4j/spi/entitystore/EntityStoreSPI.java
+++ b/core/spi/src/main/java/org/qi4j/spi/entitystore/EntityStoreSPI.java
@@ -17,6 +17,7 @@
 import org.qi4j.api.entity.EntityDescriptor;
 import org.qi4j.api.entity.EntityReference;
 import org.qi4j.spi.entity.EntityState;
+import org.qi4j.spi.module.ModuleSpi;
 
 /**
  * EntityStore SPI.
@@ -24,10 +25,11 @@
 public interface EntityStoreSPI
 {
     EntityState newEntityState( EntityStoreUnitOfWork unitOfWork,
+                                ModuleSpi module,
                                 EntityReference identity, EntityDescriptor entityDescriptor
     );
 
-    EntityState entityStateOf( EntityStoreUnitOfWork unitOfWork, EntityReference identity );
+    EntityState entityStateOf( EntityStoreUnitOfWork unitOfWork, ModuleSpi module, EntityReference identity );
 
     StateCommitter applyChanges( EntityStoreUnitOfWork unitOfWork, Iterable<EntityState> state
     );
diff --git a/core/spi/src/main/java/org/qi4j/spi/entitystore/EntityStoreUnitOfWork.java b/core/spi/src/main/java/org/qi4j/spi/entitystore/EntityStoreUnitOfWork.java
index 21655cd..0b055bf 100644
--- a/core/spi/src/main/java/org/qi4j/spi/entitystore/EntityStoreUnitOfWork.java
+++ b/core/spi/src/main/java/org/qi4j/spi/entitystore/EntityStoreUnitOfWork.java
@@ -14,9 +14,12 @@
 
 package org.qi4j.spi.entitystore;
 
+import org.qi4j.api.common.MetaInfo;
 import org.qi4j.api.entity.EntityDescriptor;
 import org.qi4j.api.entity.EntityReference;
+import org.qi4j.api.usecase.Usecase;
 import org.qi4j.spi.entity.EntityState;
+import org.qi4j.spi.module.ModuleSpi;
 
 /**
  * EntityStore UnitOfWork.
@@ -40,7 +43,7 @@
      *
      * @throws EntityStoreException Thrown if creational fails.
      */
-    EntityState newEntityState( EntityReference anIdentity, EntityDescriptor entityDescriptor )
+    EntityState newEntityState( ModuleSpi module, EntityReference anIdentity, EntityDescriptor entityDescriptor )
         throws EntityStoreException;
 
     /**
@@ -54,11 +57,13 @@
      * @throws EntityStoreException    thrown if retrieval failed.
      * @throws EntityNotFoundException if requested entity does not exist
      */
-    EntityState entityStateOf( EntityReference anIdentity )
+    EntityState entityStateOf( ModuleSpi module, EntityReference anIdentity )
         throws EntityStoreException, EntityNotFoundException;
 
     StateCommitter applyChanges()
         throws EntityStoreException;
 
     void discard();
+
+    Usecase usecase();
 }
diff --git a/core/spi/src/main/java/org/qi4j/spi/entitystore/ModuleEntityStoreUnitOfWork.java b/core/spi/src/main/java/org/qi4j/spi/entitystore/ModuleEntityStoreUnitOfWork.java
new file mode 100644
index 0000000..5aae65b
--- /dev/null
+++ b/core/spi/src/main/java/org/qi4j/spi/entitystore/ModuleEntityStoreUnitOfWork.java
@@ -0,0 +1,85 @@
+/*
+* 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.qi4j.spi.entitystore;
+
+import org.qi4j.api.entity.EntityDescriptor;
+import org.qi4j.api.entity.EntityReference;
+import org.qi4j.api.usecase.Usecase;
+import org.qi4j.spi.entity.EntityState;
+import org.qi4j.spi.module.ModuleSpi;
+
+public class ModuleEntityStoreUnitOfWork
+    implements EntityStoreUnitOfWork
+{
+    private final ModuleSpi module;
+    private final EntityStoreUnitOfWork underlying;
+
+    public ModuleEntityStoreUnitOfWork( ModuleSpi module, EntityStoreUnitOfWork underlying )
+    {
+        this.module = module;
+        this.underlying = underlying;
+    }
+
+    public ModuleSpi module()
+    {
+        return module;
+    }
+
+    @Override
+    public String identity()
+    {
+        return underlying.identity();
+    }
+
+    @Override
+    public long currentTime()
+    {
+        return underlying.currentTime();
+    }
+
+    @Override
+    public EntityState newEntityState( ModuleSpi module, EntityReference reference, EntityDescriptor descriptor )
+        throws EntityStoreException
+    {
+        return underlying.newEntityState( module, reference, descriptor );
+    }
+
+    @Override
+    public EntityState entityStateOf( ModuleSpi module, EntityReference reference )
+        throws EntityStoreException, EntityNotFoundException
+    {
+        return underlying.entityStateOf( module, reference );
+    }
+
+    @Override
+    public StateCommitter applyChanges()
+        throws EntityStoreException
+    {
+        return underlying.applyChanges();
+    }
+
+    @Override
+    public void discard()
+    {
+        underlying.discard();
+    }
+
+    public Usecase usecase()
+    {
+        return underlying.usecase();
+    }
+}
diff --git a/core/spi/src/main/java/org/qi4j/spi/entitystore/StateChangeNotificationConcern.java b/core/spi/src/main/java/org/qi4j/spi/entitystore/StateChangeNotificationConcern.java
index d49e5eb..1365881 100644
--- a/core/spi/src/main/java/org/qi4j/spi/entitystore/StateChangeNotificationConcern.java
+++ b/core/spi/src/main/java/org/qi4j/spi/entitystore/StateChangeNotificationConcern.java
@@ -17,6 +17,7 @@
 import org.qi4j.api.concern.ConcernOf;
 import org.qi4j.api.injection.scope.Service;
 import org.qi4j.spi.entity.EntityState;
+import org.qi4j.spi.module.ModuleSpi;
 
 /**
  * State change notification Concern.
diff --git a/core/spi/src/main/java/org/qi4j/spi/entitystore/StateCommitter.java b/core/spi/src/main/java/org/qi4j/spi/entitystore/StateCommitter.java
index ad92c05..5119b11 100644
--- a/core/spi/src/main/java/org/qi4j/spi/entitystore/StateCommitter.java
+++ b/core/spi/src/main/java/org/qi4j/spi/entitystore/StateCommitter.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.spi.entitystore;
 
 /**
diff --git a/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/DefaultEntityState.java b/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/DefaultEntityState.java
index e7938c3..4d66073 100644
--- a/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/DefaultEntityState.java
+++ b/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/DefaultEntityState.java
@@ -32,7 +32,6 @@
 import org.qi4j.spi.entity.EntityStatus;
 import org.qi4j.spi.entity.ManyAssociationState;
 import org.qi4j.spi.entity.NamedAssociationState;
-import org.qi4j.spi.entitystore.DefaultEntityStoreUnitOfWork;
 
 /**
  * Standard implementation of EntityState.
@@ -40,8 +39,6 @@
 public final class DefaultEntityState
     implements EntityState
 {
-    private DefaultEntityStoreUnitOfWork unitOfWork;
-
     private EntityStatus status;
 
     private String version;
@@ -54,13 +51,13 @@
     private final Map<QualifiedName, List<EntityReference>> manyAssociations;
     private final Map<QualifiedName, Map<String, EntityReference>> namedAssociations;
 
-    public DefaultEntityState( DefaultEntityStoreUnitOfWork unitOfWork,
+    public DefaultEntityState( long currentTime,
                                EntityReference identity,
                                EntityDescriptor entityDescriptor
     )
     {
-        this( unitOfWork, "",
-              unitOfWork.currentTime(),
+        this( "",
+              currentTime,
               identity,
               EntityStatus.NEW,
               entityDescriptor,
@@ -70,8 +67,7 @@
               new HashMap<QualifiedName, Map<String, EntityReference>>() );
     }
 
-    public DefaultEntityState( DefaultEntityStoreUnitOfWork unitOfWork,
-                               String version,
+    public DefaultEntityState( String version,
                                long lastModified,
                                EntityReference identity,
                                EntityStatus status,
@@ -82,7 +78,6 @@
                                Map<QualifiedName, Map<String, EntityReference>> namedAssociations
     )
     {
-        this.unitOfWork = unitOfWork;
         this.version = version;
         this.lastModified = lastModified;
         this.identity = identity;
diff --git a/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/JSONEntityState.java b/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/JSONEntityState.java
index bef6229..ae60809 100644
--- a/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/JSONEntityState.java
+++ b/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/JSONEntityState.java
@@ -33,7 +33,6 @@
 import org.qi4j.spi.entity.EntityStatus;
 import org.qi4j.spi.entity.ManyAssociationState;
 import org.qi4j.spi.entity.NamedAssociationState;
-import org.qi4j.spi.entitystore.DefaultEntityStoreUnitOfWork;
 import org.qi4j.spi.entitystore.EntityStoreException;
 
 /**
@@ -44,15 +43,14 @@
 {
     private static final String[] EMPTY_NAMES = new String[ 0 ];
     private static final String[] CLONE_NAMES =
-    {
-        JSONKeys.IDENTITY,
-        JSONKeys.APPLICATION_VERSION,
-        JSONKeys.TYPE,
-        JSONKeys.VERSION,
-        JSONKeys.MODIFIED
-    };
+        {
+            JSONKeys.IDENTITY,
+            JSONKeys.APPLICATION_VERSION,
+            JSONKeys.TYPE,
+            JSONKeys.VERSION,
+            JSONKeys.MODIFIED
+        };
 
-    private final DefaultEntityStoreUnitOfWork unitOfWork;
     private final ValueSerialization valueSerialization;
     private final String version;
     private final EntityReference identity;
@@ -62,24 +60,23 @@
     private long lastModified;
     private JSONObject state;
 
-    /* package */ JSONEntityState( DefaultEntityStoreUnitOfWork unitOfWork,
+    /* package */ JSONEntityState( long time,
                                    ValueSerialization valueSerialization,
                                    EntityReference identity,
                                    EntityDescriptor entityDescriptor,
-                                   JSONObject initialState )
+                                   JSONObject initialState
+    )
     {
-        this( unitOfWork,
-              valueSerialization,
+        this( valueSerialization,
               "",
-              unitOfWork.currentTime(),
+              time,
               identity,
               EntityStatus.NEW,
               entityDescriptor,
               initialState );
     }
 
-    /* package */ JSONEntityState( DefaultEntityStoreUnitOfWork unitOfWork,
-                                   ValueSerialization valueSerialization,
+    /* package */ JSONEntityState( ValueSerialization valueSerialization,
                                    String version,
                                    long lastModified,
                                    EntityReference identity,
@@ -88,7 +85,6 @@
                                    JSONObject state
     )
     {
-        this.unitOfWork = unitOfWork;
         this.valueSerialization = valueSerialization;
         this.version = version;
         this.lastModified = lastModified;
@@ -312,14 +308,9 @@
         }
     }
 
-    boolean isStateNotCloned()
-    {
-        return status == EntityStatus.LOADED;
-    }
-
     void cloneStateIfGlobalStateLoaded()
     {
-        if( isStateNotCloned() )
+        if( status != EntityStatus.LOADED )
         {
             return;
         }
diff --git a/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/JSONMapEntityStoreActivation.java b/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/JSONMapEntityStoreActivation.java
index d264362..0da0de0 100644
--- a/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/JSONMapEntityStoreActivation.java
+++ b/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/JSONMapEntityStoreActivation.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.spi.entitystore.helpers;
 
 import org.qi4j.api.activation.ActivatorAdapter;
diff --git a/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/JSONMapEntityStoreMixin.java b/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/JSONMapEntityStoreMixin.java
index d64617a..cac8ec9 100644
--- a/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/JSONMapEntityStoreMixin.java
+++ b/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/JSONMapEntityStoreMixin.java
@@ -42,15 +42,14 @@
 import org.qi4j.api.service.ServiceDescriptor;
 import org.qi4j.api.service.qualifier.Tagged;
 import org.qi4j.api.structure.Application;
-import org.qi4j.api.structure.Module;
 import org.qi4j.api.unitofwork.EntityTypeNotFoundException;
 import org.qi4j.api.usecase.Usecase;
-import org.qi4j.api.usecase.UsecaseBuilder;
 import org.qi4j.api.value.ValueSerialization;
 import org.qi4j.io.Input;
 import org.qi4j.io.Output;
 import org.qi4j.io.Receiver;
 import org.qi4j.io.Sender;
+import org.qi4j.spi.Qi4jSPI;
 import org.qi4j.spi.cache.Cache;
 import org.qi4j.spi.cache.CachePool;
 import org.qi4j.spi.cache.NullCache;
@@ -61,11 +60,13 @@
 import org.qi4j.spi.entitystore.EntityStoreException;
 import org.qi4j.spi.entitystore.EntityStoreSPI;
 import org.qi4j.spi.entitystore.EntityStoreUnitOfWork;
+import org.qi4j.spi.entitystore.ModuleEntityStoreUnitOfWork;
 import org.qi4j.spi.entitystore.StateCommitter;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.qi4j.spi.module.ModelModule;
+import org.qi4j.spi.module.ModuleSpi;
 
 import static org.qi4j.functional.Iterables.first;
+import static org.qi4j.functional.Iterables.map;
 
 /**
  * Implementation of EntityStore that works with an implementation of MapEntityStore.
@@ -85,6 +86,9 @@
     private EntityStoreSPI entityStoreSpi;
 
     @Structure
+    private Qi4jSPI spi;
+
+    @Structure
     private Application application;
 
     @Service
@@ -106,8 +110,6 @@
     protected String uuid;
     private int count;
 
-    private Logger logger;
-
     public JSONMapEntityStoreMixin()
     {
     }
@@ -116,8 +118,6 @@
     public void setUpJSONMapES()
         throws Exception
     {
-        logger = LoggerFactory.getLogger( descriptor.identity() );
-
         uuid = descriptor.identity() + "-" + UUID.randomUUID().toString();
         if( caching != null )
         {
@@ -143,15 +143,18 @@
     // EntityStore
 
     @Override
-    public EntityStoreUnitOfWork newUnitOfWork( Usecase usecaseMetaInfo, Module module, long currentTime )
+    public EntityStoreUnitOfWork newUnitOfWork( Usecase usecaseMetaInfo, ModuleSpi module, long currentTime )
     {
-        return new DefaultEntityStoreUnitOfWork( entityStoreSpi, newUnitOfWorkId(), module, usecaseMetaInfo, currentTime );
+        EntityStoreUnitOfWork storeUnitOfWork = new DefaultEntityStoreUnitOfWork( entityStoreSpi, newUnitOfWorkId(), usecaseMetaInfo, currentTime );
+        storeUnitOfWork = new ModuleEntityStoreUnitOfWork( module, storeUnitOfWork );
+        return storeUnitOfWork;
     }
 
     // EntityStoreSPI
 
     @Override
     public EntityState newEntityState( EntityStoreUnitOfWork unitOfWork,
+                                       ModuleSpi module,
                                        EntityReference identity,
                                        EntityDescriptor entityDescriptor
     )
@@ -168,7 +171,7 @@
             state.put( JSONKeys.ASSOCIATIONS, new JSONObject() );
             state.put( JSONKeys.MANY_ASSOCIATIONS, new JSONObject() );
             state.put( JSONKeys.NAMED_ASSOCIATIONS, new JSONObject() );
-            return new JSONEntityState( (DefaultEntityStoreUnitOfWork) unitOfWork, valueSerialization,
+            return new JSONEntityState( unitOfWork.currentTime(), valueSerialization,
                                         identity, entityDescriptor, state );
         }
         catch( JSONException e )
@@ -178,17 +181,20 @@
     }
 
     @Override
-    public synchronized EntityState entityStateOf( EntityStoreUnitOfWork unitOfWork, EntityReference identity )
+    public synchronized EntityState entityStateOf( EntityStoreUnitOfWork unitOfWork,
+                                                   ModuleSpi module,
+                                                   EntityReference identity
+    )
     {
-        EntityState state = fetchCachedState( identity, (DefaultEntityStoreUnitOfWork) unitOfWork );
+        EntityState state = fetchCachedState( identity, module, unitOfWork.currentTime() );
         if( state != null )
         {
             return state;
         }
         // Get state
         Reader in = mapEntityStore.get( identity );
-        JSONEntityState loadedState = readEntityState( (DefaultEntityStoreUnitOfWork) unitOfWork, in );
-        if( doCacheOnRead( (DefaultEntityStoreUnitOfWork) unitOfWork ) )
+        JSONEntityState loadedState = readEntityState( module, in );
+        if( doCacheOnRead( unitOfWork ) )
         {
             cache.put( identity.identity(), new CacheState( loadedState.state() ) );
         }
@@ -196,7 +202,8 @@
     }
 
     @Override
-    public StateCommitter applyChanges( final EntityStoreUnitOfWork unitOfWork, final Iterable<EntityState> state
+    public StateCommitter applyChanges( final EntityStoreUnitOfWork unitOfWork,
+                                        final Iterable<EntityState> state
     )
         throws EntityStoreException
     {
@@ -213,8 +220,7 @@
                         public void visitMap( MapEntityStore.MapChanger changer )
                             throws IOException
                         {
-                            DefaultEntityStoreUnitOfWork uow = (DefaultEntityStoreUnitOfWork) unitOfWork;
-                            CacheOptions options = uow.usecase().metaInfo( CacheOptions.class );
+                            CacheOptions options = unitOfWork.usecase().metaInfo( CacheOptions.class );
                             if( options == null )
                             {
                                 options = CacheOptions.ALWAYS;
@@ -225,7 +231,7 @@
                                 JSONEntityState state = (JSONEntityState) entityState;
                                 if( state.status().equals( EntityStatus.NEW ) )
                                 {
-                                    try( Writer writer = changer.newEntity( state.identity(), state.entityDescriptor() ) )
+                                    try (Writer writer = changer.newEntity( state.identity(), state.entityDescriptor() ))
                                     {
                                         writeEntityState( state, writer, unitOfWork.identity(), unitOfWork.currentTime() );
                                     }
@@ -236,7 +242,7 @@
                                 }
                                 else if( state.status().equals( EntityStatus.UPDATED ) )
                                 {
-                                    try( Writer writer = changer.updateEntity( state.identity(), state.entityDescriptor() ) )
+                                    try (Writer writer = changer.updateEntity( state.identity(), state.entityDescriptor() ))
                                     {
                                         writeEntityState( state, writer, unitOfWork.identity(), unitOfWork.currentTime() );
                                     }
@@ -268,7 +274,7 @@
     }
 
     @Override
-    public Input<EntityState, EntityStoreException> entityStates( final Module module )
+    public Input<EntityState, EntityStoreException> entityStates( final ModuleSpi module )
     {
         return new Input<EntityState, EntityStoreException>()
         {
@@ -282,20 +288,7 @@
                     public <ReceiverThrowableType extends Throwable> void sendTo( final Receiver<? super EntityState, ReceiverThrowableType> receiver )
                         throws ReceiverThrowableType, EntityStoreException
                     {
-                        Usecase usecase = UsecaseBuilder
-                            .buildUsecase( "qi4j.entitystore.entitystates" )
-                            .withMetaInfo( CacheOptions.NEVER )
-                            .newUsecase();
-
-                        final DefaultEntityStoreUnitOfWork uow = new DefaultEntityStoreUnitOfWork(
-                            entityStoreSpi,
-                            newUnitOfWorkId(),
-                            module,
-                            usecase,
-                            System.currentTimeMillis() );
-
                         final List<EntityState> migrated = new ArrayList<>();
-
                         try
                         {
                             mapEntityStore.entityStates().transferTo( new Output<Reader, ReceiverThrowableType>()
@@ -310,7 +303,7 @@
                                         public void receive( Reader item )
                                             throws ReceiverThrowableType
                                         {
-                                            final EntityState entity = readEntityState( uow, item );
+                                            final EntityState entity = readEntityState( module, item );
                                             if( entity.status() == EntityStatus.UPDATED )
                                             {
                                                 migrated.add( entity );
@@ -318,7 +311,14 @@
                                                 // Synch back 100 at a time
                                                 if( migrated.size() > 100 )
                                                 {
-                                                    synchMigratedEntities( migrated );
+                                                    try
+                                                    {
+                                                        synchMigratedEntities( migrated );
+                                                    }
+                                                    catch( IOException e )
+                                                    {
+                                                        throw new EntityStoreException( "Synchronization of Migrated Entities failed.", e );
+                                                    }
                                                 }
                                             }
                                             receiver.receive( entity );
@@ -328,7 +328,14 @@
                                     // Synch any remaining migrated entities
                                     if( !migrated.isEmpty() )
                                     {
-                                        synchMigratedEntities( migrated );
+                                        try
+                                        {
+                                            synchMigratedEntities( migrated );
+                                        }
+                                        catch( IOException e )
+                                        {
+                                            throw new EntityStoreException( "Synchronization of Migrated Entities failed.", e );
+                                        }
                                     }
                                 }
                             } );
@@ -344,31 +351,25 @@
     }
 
     private void synchMigratedEntities( final List<EntityState> migratedEntities )
+        throws IOException
     {
-        try
+        mapEntityStore.applyChanges( new MapEntityStore.MapChanges()
         {
-            mapEntityStore.applyChanges( new MapEntityStore.MapChanges()
+            @Override
+            public void visitMap( MapEntityStore.MapChanger changer )
+                throws IOException
             {
-                @Override
-                public void visitMap( MapEntityStore.MapChanger changer )
-                    throws IOException
+                for( EntityState migratedEntity : migratedEntities )
                 {
-                    for( EntityState migratedEntity : migratedEntities )
+                    JSONEntityState state = (JSONEntityState) migratedEntity;
+                    try (Writer writer = changer.updateEntity( state.identity(), state.entityDescriptor() ))
                     {
-                        JSONEntityState state = (JSONEntityState) migratedEntity;
-                        try( Writer writer = changer.updateEntity( state.identity(), state.entityDescriptor() ) )
-                        {
-                            writeEntityState( state, writer, state.version(), state.lastModified() );
-                        }
+                        writeEntityState( state, writer, state.version(), state.lastModified() );
                     }
                 }
-            } );
-            migratedEntities.clear();
-        }
-        catch( IOException e )
-        {
-            logger.warn( "Could not store migrated entites", e );
-        }
+            }
+        } );
+        migratedEntities.clear();
     }
 
     protected String newUnitOfWorkId()
@@ -392,12 +393,11 @@
         }
     }
 
-    protected JSONEntityState readEntityState( DefaultEntityStoreUnitOfWork unitOfWork, Reader entityState )
+    protected JSONEntityState readEntityState( ModuleSpi module, Reader entityState )
         throws EntityStoreException
     {
         try
         {
-            Module module = unitOfWork.module();
             JSONObject jsonObject = new JSONObject( new JSONTokener( entityState ) );
             EntityStatus status = EntityStatus.LOADED;
 
@@ -424,11 +424,6 @@
                     // Do nothing - set version to be correct
                     jsonObject.put( JSONKeys.APPLICATION_VERSION, application.version() );
                 }
-
-                LoggerFactory.getLogger( getClass() ).debug( "Updated version nr on " + identity
-                                                             + " from " + currentAppVersion
-                                                             + " to " + application.version() );
-
                 // State changed
                 status = EntityStatus.UPDATED;
             }
@@ -438,11 +433,14 @@
             EntityDescriptor entityDescriptor = module.entityDescriptor( type );
             if( entityDescriptor == null )
             {
-                throw new EntityTypeNotFoundException( type );
+                throw new EntityTypeNotFoundException( type,
+                                                       module.name(),
+                                                       map( ModelModule.toStringFunction,
+                                                            module.findVisibleEntityTypes()
+                                                       ) );
             }
 
-            return new JSONEntityState( unitOfWork,
-                                        valueSerialization,
+            return new JSONEntityState( valueSerialization,
                                         version,
                                         modified,
                                         EntityReference.parseEntityReference( identity ),
@@ -461,7 +459,7 @@
     public JSONObject jsonStateOf( String id )
         throws IOException
     {
-        try( Reader reader = mapEntityStore.get( EntityReference.parseEntityReference( id ) ) )
+        try (Reader reader = mapEntityStore.get( EntityReference.parseEntityReference( id ) ))
         {
             return new JSONObject( new JSONTokener( reader ) );
         }
@@ -471,7 +469,7 @@
         }
     }
 
-    private EntityState fetchCachedState( EntityReference identity, DefaultEntityStoreUnitOfWork unitOfWork )
+    private EntityState fetchCachedState( EntityReference identity, ModuleSpi module, long currentTime )
     {
         CacheState cacheState = cache.get( identity.identity() );
         if( cacheState != null )
@@ -480,8 +478,9 @@
             try
             {
                 String type = data.getString( JSONKeys.TYPE );
-                EntityDescriptor entityDescriptor = unitOfWork.module().entityDescriptor( type );
-                return new JSONEntityState( unitOfWork, valueSerialization, identity, entityDescriptor, data );
+                EntityDescriptor entityDescriptor = module.entityDescriptor( type );
+//                return new JSONEntityState( currentTime, valueSerialization, identity, entityDescriptor, data );
+                return new JSONEntityState( valueSerialization, data.getString( JSONKeys.VERSION ), data.getLong( JSONKeys.MODIFIED ), identity, EntityStatus.LOADED, entityDescriptor, data );
             }
             catch( JSONException e )
             {
@@ -492,18 +491,18 @@
         return null;
     }
 
-    private boolean doCacheOnRead( DefaultEntityStoreUnitOfWork unitOfWork )
+    private boolean doCacheOnRead( EntityStoreUnitOfWork unitOfWork )
     {
         CacheOptions cacheOptions = unitOfWork.usecase().metaInfo( CacheOptions.class );
         return cacheOptions == null || cacheOptions.cacheOnRead();
     }
 
-    private static class CacheState
+    public static class CacheState
         implements Externalizable
     {
         public JSONObject json;
 
-        private CacheState()
+        public CacheState()
         {
         }
 
@@ -533,5 +532,4 @@
             }
         }
     }
-
 }
diff --git a/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/JSONNamedAssociationState.java b/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/JSONNamedAssociationState.java
index 13b2e3f..e183e53 100644
--- a/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/JSONNamedAssociationState.java
+++ b/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/JSONNamedAssociationState.java
@@ -99,7 +99,7 @@
         }
         catch( JSONException ex )
         {
-            throw new EntityStoreException( ex );
+            return null;
         }
     }
 
diff --git a/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/MapEntityStoreMixin.java b/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/MapEntityStoreMixin.java
index b4abf53..a2d02bc 100644
--- a/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/MapEntityStoreMixin.java
+++ b/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/MapEntityStoreMixin.java
@@ -34,7 +34,6 @@
 import org.json.JSONTokener;
 import org.json.JSONWriter;
 import org.qi4j.api.association.AssociationDescriptor;
-import org.qi4j.api.cache.CacheOptions;
 import org.qi4j.api.common.Optional;
 import org.qi4j.api.common.QualifiedName;
 import org.qi4j.api.entity.EntityDescriptor;
@@ -47,16 +46,15 @@
 import org.qi4j.api.service.ServiceDescriptor;
 import org.qi4j.api.service.qualifier.Tagged;
 import org.qi4j.api.structure.Application;
-import org.qi4j.api.structure.Module;
 import org.qi4j.api.type.ValueType;
 import org.qi4j.api.unitofwork.EntityTypeNotFoundException;
 import org.qi4j.api.usecase.Usecase;
-import org.qi4j.api.usecase.UsecaseBuilder;
 import org.qi4j.api.value.ValueSerialization;
 import org.qi4j.io.Input;
 import org.qi4j.io.Output;
 import org.qi4j.io.Receiver;
 import org.qi4j.io.Sender;
+import org.qi4j.spi.Qi4jSPI;
 import org.qi4j.spi.entity.EntityState;
 import org.qi4j.spi.entity.EntityStatus;
 import org.qi4j.spi.entitystore.DefaultEntityStoreUnitOfWork;
@@ -64,11 +62,13 @@
 import org.qi4j.spi.entitystore.EntityStoreException;
 import org.qi4j.spi.entitystore.EntityStoreSPI;
 import org.qi4j.spi.entitystore.EntityStoreUnitOfWork;
+import org.qi4j.spi.entitystore.ModuleEntityStoreUnitOfWork;
 import org.qi4j.spi.entitystore.StateCommitter;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.qi4j.spi.module.ModelModule;
+import org.qi4j.spi.module.ModuleSpi;
 
 import static org.qi4j.functional.Iterables.first;
+import static org.qi4j.functional.Iterables.map;
 
 /**
  * Implementation of EntityStore that works with an implementation of MapEntityStore.
@@ -88,6 +88,9 @@
     private EntityStoreSPI entityStoreSpi;
 
     @Structure
+    private Qi4jSPI spi;
+
+    @Structure
     private Application application;
 
     @Service
@@ -104,40 +107,42 @@
     protected String uuid;
     private int count;
 
-    private Logger logger;
-
     @Override
     public void activateMapEntityStore()
         throws Exception
     {
         uuid = UUID.randomUUID().toString() + "-";
-
-        logger = LoggerFactory.getLogger( descriptor.identity() );
     }
 
     // EntityStore
     @Override
-    public EntityStoreUnitOfWork newUnitOfWork( Usecase usecaseMetaInfo, Module module, long currentTime )
+    public EntityStoreUnitOfWork newUnitOfWork( Usecase usecaseMetaInfo, ModuleSpi module, long currentTime )
     {
-        return new DefaultEntityStoreUnitOfWork( entityStoreSpi, newUnitOfWorkId(), module, usecaseMetaInfo, currentTime );
+        EntityStoreUnitOfWork storeUnitOfWork =
+            new DefaultEntityStoreUnitOfWork( entityStoreSpi, newUnitOfWorkId(), usecaseMetaInfo, currentTime );
+        storeUnitOfWork = new ModuleEntityStoreUnitOfWork( module, storeUnitOfWork );
+        return storeUnitOfWork;
     }
 
     // EntityStoreSPI
     @Override
     public EntityState newEntityState( EntityStoreUnitOfWork unitOfWork,
+                                       ModuleSpi module,
                                        EntityReference identity,
                                        EntityDescriptor entityDescriptor
     )
     {
-        return new DefaultEntityState( (DefaultEntityStoreUnitOfWork) unitOfWork, identity, entityDescriptor );
+        return new DefaultEntityState( unitOfWork.currentTime(), identity, entityDescriptor );
     }
 
     @Override
-    public synchronized EntityState entityStateOf( EntityStoreUnitOfWork unitofwork, EntityReference identity )
+    public synchronized EntityState entityStateOf( EntityStoreUnitOfWork unitofwork,
+                                                   ModuleSpi module,
+                                                   EntityReference identity
+    )
     {
-        DefaultEntityStoreUnitOfWork unitOfWork = (DefaultEntityStoreUnitOfWork) unitofwork;
         Reader in = mapEntityStore.get( identity );
-        return readEntityState( unitOfWork, in );
+        return readEntityState( module, in );
     }
 
     @Override
@@ -163,14 +168,14 @@
                                 DefaultEntityState state = (DefaultEntityState) entityState;
                                 if( state.status().equals( EntityStatus.NEW ) )
                                 {
-                                    try( Writer writer = changer.newEntity( state.identity(), state.entityDescriptor() ) )
+                                    try (Writer writer = changer.newEntity( state.identity(), state.entityDescriptor() ))
                                     {
                                         writeEntityState( state, writer, unitofwork.identity(), unitofwork.currentTime() );
                                     }
                                 }
                                 else if( state.status().equals( EntityStatus.UPDATED ) )
                                 {
-                                    try( Writer writer = changer.updateEntity( state.identity(), state.entityDescriptor() ) )
+                                    try (Writer writer = changer.updateEntity( state.identity(), state.entityDescriptor() ))
                                     {
                                         writeEntityState( state, writer, unitofwork.identity(), unitofwork.currentTime() );
                                     }
@@ -197,7 +202,7 @@
     }
 
     @Override
-    public Input<EntityState, EntityStoreException> entityStates( final Module module )
+    public Input<EntityState, EntityStoreException> entityStates( final ModuleSpi module )
     {
         return new Input<EntityState, EntityStoreException>()
         {
@@ -211,20 +216,7 @@
                     public <ReceiverThrowableType extends Throwable> void sendTo( final Receiver<? super EntityState, ReceiverThrowableType> receiver )
                         throws ReceiverThrowableType, EntityStoreException
                     {
-                        Usecase usecase = UsecaseBuilder
-                            .buildUsecase( "qi4j.entitystore.entitystates" )
-                            .withMetaInfo( CacheOptions.NEVER )
-                            .newUsecase();
-
-                        final DefaultEntityStoreUnitOfWork uow = new DefaultEntityStoreUnitOfWork(
-                            entityStoreSpi,
-                            newUnitOfWorkId(),
-                            module,
-                            usecase,
-                            System.currentTimeMillis() );
-
                         final List<EntityState> migrated = new ArrayList<>();
-
                         try
                         {
                             mapEntityStore.entityStates().transferTo( new Output<Reader, ReceiverThrowableType>()
@@ -239,7 +231,7 @@
                                         public void receive( Reader item )
                                             throws ReceiverThrowableType
                                         {
-                                            final EntityState entity = readEntityState( uow, item );
+                                            final EntityState entity = readEntityState( module, item );
                                             if( entity.status() == EntityStatus.UPDATED )
                                             {
                                                 migrated.add( entity );
@@ -247,7 +239,14 @@
                                                 // Synch back 100 at a time
                                                 if( migrated.size() > 100 )
                                                 {
-                                                    synchMigratedEntities( migrated );
+                                                    try
+                                                    {
+                                                        synchMigratedEntities( migrated );
+                                                    }
+                                                    catch( IOException e )
+                                                    {
+                                                        throw new EntityStoreException( "Synchronization of Migrated Entities failed.", e );
+                                                    }
                                                 }
                                             }
                                             receiver.receive( entity );
@@ -257,7 +256,14 @@
                                     // Synch any remaining migrated entities
                                     if( !migrated.isEmpty() )
                                     {
-                                        synchMigratedEntities( migrated );
+                                        try
+                                        {
+                                            synchMigratedEntities( migrated );
+                                        }
+                                        catch( IOException e )
+                                        {
+                                            throw new EntityStoreException( "Synchronization of Migrated Entities failed.", e );
+                                        }
                                     }
                                 }
                             } );
@@ -273,31 +279,25 @@
     }
 
     private void synchMigratedEntities( final List<EntityState> migratedEntities )
+        throws IOException
     {
-        try
+        mapEntityStore.applyChanges( new MapEntityStore.MapChanges()
         {
-            mapEntityStore.applyChanges( new MapEntityStore.MapChanges()
+            @Override
+            public void visitMap( MapEntityStore.MapChanger changer )
+                throws IOException
             {
-                @Override
-                public void visitMap( MapEntityStore.MapChanger changer )
-                    throws IOException
+                for( EntityState migratedEntity : migratedEntities )
                 {
-                    for( EntityState migratedEntity : migratedEntities )
+                    DefaultEntityState state = (DefaultEntityState) migratedEntity;
+                    try (Writer writer = changer.updateEntity( state.identity(), state.entityDescriptor() ))
                     {
-                        DefaultEntityState state = (DefaultEntityState) migratedEntity;
-                        try( Writer writer = changer.updateEntity( state.identity(), state.entityDescriptor() ) )
-                        {
-                            writeEntityState( state, writer, state.version(), state.lastModified() );
-                        }
+                        writeEntityState( state, writer, state.version(), state.lastModified() );
                     }
                 }
-            } );
-            migratedEntities.clear();
-        }
-        catch( IOException e )
-        {
-            logger.warn( "Could not store migrated entites", e );
-        }
+            }
+        } );
+        migratedEntities.clear();
     }
 
     protected String newUnitOfWorkId()
@@ -346,7 +346,8 @@
             }
 
             JSONWriter associations = properties.endObject().key( JSONKeys.ASSOCIATIONS ).object();
-            for( Map.Entry<QualifiedName, EntityReference> stateNameEntityReferenceEntry : state.associations().entrySet() )
+            for( Map.Entry<QualifiedName, EntityReference> stateNameEntityReferenceEntry : state.associations()
+                .entrySet() )
             {
                 EntityReference value = stateNameEntityReferenceEntry.getValue();
                 associations.key( stateNameEntityReferenceEntry.getKey().name() ).
@@ -354,7 +355,8 @@
             }
 
             JSONWriter manyAssociations = associations.endObject().key( JSONKeys.MANY_ASSOCIATIONS ).object();
-            for( Map.Entry<QualifiedName, List<EntityReference>> stateNameListEntry : state.manyAssociations().entrySet() )
+            for( Map.Entry<QualifiedName, List<EntityReference>> stateNameListEntry : state.manyAssociations()
+                .entrySet() )
             {
                 JSONWriter assocs = manyAssociations.key( stateNameListEntry.getKey().name() ).array();
                 for( EntityReference entityReference : stateNameListEntry.getValue() )
@@ -365,7 +367,8 @@
             }
 
             JSONWriter namedAssociations = manyAssociations.endObject().key( JSONKeys.NAMED_ASSOCIATIONS ).object();
-            for( Map.Entry<QualifiedName, Map<String, EntityReference>> stateNameMapEntry : state.namedAssociations().entrySet() )
+            for( Map.Entry<QualifiedName, Map<String, EntityReference>> stateNameMapEntry : state.namedAssociations()
+                .entrySet() )
             {
                 JSONWriter assocs = namedAssociations.key( stateNameMapEntry.getKey().name() ).object();
                 for( Map.Entry<String, EntityReference> namedRef : stateNameMapEntry.getValue().entrySet() )
@@ -382,12 +385,11 @@
         }
     }
 
-    protected EntityState readEntityState( DefaultEntityStoreUnitOfWork unitOfWork, Reader entityState )
+    protected EntityState readEntityState( ModuleSpi module, Reader entityState )
         throws EntityStoreException
     {
         try
         {
-            Module module = unitOfWork.module();
             JSONObject jsonObject = new JSONObject( new JSONTokener( entityState ) );
             EntityStatus status = EntityStatus.LOADED;
 
@@ -408,11 +410,6 @@
                     // Do nothing - set version to be correct
                     jsonObject.put( JSONKeys.APPLICATION_VERSION, application.version() );
                 }
-
-                LoggerFactory.getLogger( MapEntityStoreMixin.class )
-                    .debug(
-                        "Updated version nr on " + identity + " from " + currentAppVersion + " to " + application.version() );
-
                 // State changed
                 status = EntityStatus.UPDATED;
             }
@@ -422,7 +419,11 @@
             EntityDescriptor entityDescriptor = module.entityDescriptor( type );
             if( entityDescriptor == null )
             {
-                throw new EntityTypeNotFoundException( type );
+                throw new EntityTypeNotFoundException( type,
+                                                       module.name(),
+                                                       map( ModelModule.toStringFunction,
+                                                            module.findVisibleEntityTypes()
+                                                       ) );
             }
 
             Map<QualifiedName, Object> properties = new HashMap<>();
@@ -528,8 +529,7 @@
                 }
             }
 
-            return new DefaultEntityState( unitOfWork,
-                                           version,
+            return new DefaultEntityState( version,
                                            modified,
                                            EntityReference.parseEntityReference( identity ),
                                            status,
@@ -551,7 +551,7 @@
         throws IOException
     {
         JSONObject jsonObject;
-        try( Reader reader = mapEntityStore.get( EntityReference.parseEntityReference( id ) ) )
+        try (Reader reader = mapEntityStore.get( EntityReference.parseEntityReference( id ) ))
         {
             jsonObject = new JSONObject( new JSONTokener( reader ) );
         }
diff --git a/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/package.html b/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/package.html
index c45fd6f..1196526 100644
--- a/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/package.html
+++ b/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>EntityStore Helpers.</h2>
diff --git a/core/spi/src/main/java/org/qi4j/spi/entitystore/package.html b/core/spi/src/main/java/org/qi4j/spi/entitystore/package.html
index c1d8a3f..5f55399 100644
--- a/core/spi/src/main/java/org/qi4j/spi/entitystore/package.html
+++ b/core/spi/src/main/java/org/qi4j/spi/entitystore/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>EntityStore SPI.</h2>
diff --git a/core/spi/src/main/java/org/qi4j/spi/metrics/package.html b/core/spi/src/main/java/org/qi4j/spi/metrics/package.html
index 56c34e5..a6eaa36 100644
--- a/core/spi/src/main/java/org/qi4j/spi/metrics/package.html
+++ b/core/spi/src/main/java/org/qi4j/spi/metrics/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Metrics SPI.</h2>
diff --git a/core/spi/src/main/java/org/qi4j/spi/module/ModelModule.java b/core/spi/src/main/java/org/qi4j/spi/module/ModelModule.java
new file mode 100644
index 0000000..4d7d37e
--- /dev/null
+++ b/core/spi/src/main/java/org/qi4j/spi/module/ModelModule.java
@@ -0,0 +1,124 @@
+/*
+ * 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.qi4j.spi.module;
+
+import org.qi4j.api.composite.ModelDescriptor;
+import org.qi4j.functional.Function;
+import org.qi4j.spi.Qi4jSPI;
+
+import static org.qi4j.functional.Iterables.map;
+
+/**
+ * TODO
+ */
+public class ModelModule<T extends ModelDescriptor>
+{
+
+    public static Function<?, String> toStringFunction = new Function<ModelModule<?>, String>()
+    {
+        @Override
+        public String map( ModelModule item )
+        {
+            return item.model()
+                       .types()
+                       .iterator()
+                       .next()
+                       .getName() + "[" + item.module().name() + "]";
+        }
+    };
+
+    public static <T extends ModelDescriptor> Function<T, ModelModule<T>> modelModuleFunction( final ModuleSpi module )
+    {
+        return new Function<T, ModelModule<T>>()
+        {
+            @Override
+            public ModelModule<T> map( T model )
+            {
+                return new ModelModule<>( module, model );
+            }
+        };
+    }
+
+    public static <T extends ModelDescriptor> Function<ModelModule<T>, T> modelFunction()
+    {
+        return new Function<ModelModule<T>, T>()
+        {
+            @Override
+            public T map( ModelModule<T> modelModule )
+            {
+                return modelModule.model();
+            }
+        };
+    }
+
+    private final ModuleSpi module;
+    private final T model;
+
+    public ModelModule( ModuleSpi module, T model )
+    {
+        this.module = module;
+        this.model = model;
+    }
+
+    public ModuleSpi module()
+    {
+        return module;
+    }
+
+    public T model()
+    {
+        return model;
+    }
+
+    @Override
+    public boolean equals( Object o )
+    {
+        if( this == o )
+        {
+            return true;
+        }
+        if( o == null || getClass() != o.getClass() )
+        {
+            return false;
+        }
+
+        ModelModule that = (ModelModule) o;
+
+        if( model != null ? !model.equals( that.model ) : that.model != null )
+        {
+            return false;
+        }
+
+        return !( module != null ? !module.equals( that.module ) : that.module != null );
+    }
+
+    @Override
+    public int hashCode()
+    {
+        int result = module != null ? module.hashCode() : 0;
+        result = 31 * result + ( model != null ? model.hashCode() : 0 );
+        return result;
+    }
+
+    @Override
+    public String toString()
+    {
+        return module.name() + ":" + model;
+    }
+}
diff --git a/core/spi/src/main/java/org/qi4j/spi/module/ModuleSpi.java b/core/spi/src/main/java/org/qi4j/spi/module/ModuleSpi.java
new file mode 100644
index 0000000..de4a788
--- /dev/null
+++ b/core/spi/src/main/java/org/qi4j/spi/module/ModuleSpi.java
@@ -0,0 +1,46 @@
+/*
+* 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.qi4j.spi.module;
+
+import org.qi4j.api.composite.TransientDescriptor;
+import org.qi4j.api.entity.EntityDescriptor;
+import org.qi4j.api.entity.IdentityGenerator;
+import org.qi4j.api.object.ObjectDescriptor;
+import org.qi4j.api.service.ServiceDescriptor;
+import org.qi4j.api.structure.Module;
+import org.qi4j.api.value.ValueDescriptor;
+import org.qi4j.api.value.ValueSerialization;
+import org.qi4j.spi.entitystore.EntityStore;
+
+public interface ModuleSpi extends Module
+{
+    EntityStore entityStore();
+
+    IdentityGenerator identityGenerator();
+
+    ValueSerialization valueSerialization();
+
+    Iterable<ModelModule<EntityDescriptor>> findVisibleEntityTypes();
+
+    Iterable<ModelModule<ValueDescriptor>> findVisibleValueTypes();
+
+    Iterable<ModelModule<TransientDescriptor>> findVisibleTransientTypes();
+
+    Iterable<ModelModule<ObjectDescriptor>> findVisibleObjectTypes();
+
+    Iterable<ModelModule<ServiceDescriptor>> findVisibleServiceTypes();
+}
diff --git a/core/spi/src/main/java/org/qi4j/spi/module/package.html b/core/spi/src/main/java/org/qi4j/spi/module/package.html
new file mode 100644
index 0000000..ac6ddcf
--- /dev/null
+++ b/core/spi/src/main/java/org/qi4j/spi/module/package.html
@@ -0,0 +1,21 @@
+<!--
+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.
+-->
+<html>
+    <body>
+        <h2>Module SPI.</h2>
+    </body>
+</html>
diff --git a/core/spi/src/main/java/org/qi4j/spi/package.html b/core/spi/src/main/java/org/qi4j/spi/package.html
index 45a3dc3..faaf1b7 100644
--- a/core/spi/src/main/java/org/qi4j/spi/package.html
+++ b/core/spi/src/main/java/org/qi4j/spi/package.html
@@ -1,5 +1,21 @@
+<!--
+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.
+-->
 <html>
     <body>
-        <h2>Qi4j SPI.</h2>
+        <h2>Apache Zest™ SPI.</h2>
     </body>
 </html>
diff --git a/core/spi/src/main/java/org/qi4j/spi/query/QueryBuilderSPI.java b/core/spi/src/main/java/org/qi4j/spi/query/QueryBuilderSPI.java
index a5edd61..d04b1fb 100644
--- a/core/spi/src/main/java/org/qi4j/spi/query/QueryBuilderSPI.java
+++ b/core/spi/src/main/java/org/qi4j/spi/query/QueryBuilderSPI.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.spi.query;
 
 import org.qi4j.api.query.Query;
diff --git a/core/spi/src/main/java/org/qi4j/spi/query/QuerySource.java b/core/spi/src/main/java/org/qi4j/spi/query/QuerySource.java
index 35a3661..7e90084 100644
--- a/core/spi/src/main/java/org/qi4j/spi/query/QuerySource.java
+++ b/core/spi/src/main/java/org/qi4j/spi/query/QuerySource.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.spi.query;
 
 import java.util.Iterator;
diff --git a/core/spi/src/main/java/org/qi4j/spi/query/package.html b/core/spi/src/main/java/org/qi4j/spi/query/package.html
index dd40640..3cab930 100644
--- a/core/spi/src/main/java/org/qi4j/spi/query/package.html
+++ b/core/spi/src/main/java/org/qi4j/spi/query/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Index/Query SPI.</h2>
diff --git a/core/spi/src/main/java/org/qi4j/spi/uuid/package.html b/core/spi/src/main/java/org/qi4j/spi/uuid/package.html
index 151bb62..fc37e36 100644
--- a/core/spi/src/main/java/org/qi4j/spi/uuid/package.html
+++ b/core/spi/src/main/java/org/qi4j/spi/uuid/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>UUID Identity SPI.</h2>
diff --git a/core/spi/src/main/java/org/qi4j/spi/value/ValueDeserializerAdapter.java b/core/spi/src/main/java/org/qi4j/spi/value/ValueDeserializerAdapter.java
index 37738f8..53cf81d 100644
--- a/core/spi/src/main/java/org/qi4j/spi/value/ValueDeserializerAdapter.java
+++ b/core/spi/src/main/java/org/qi4j/spi/value/ValueDeserializerAdapter.java
@@ -48,6 +48,7 @@
 import org.qi4j.api.type.MapType;
 import org.qi4j.api.type.ValueCompositeType;
 import org.qi4j.api.type.ValueType;
+import org.qi4j.api.type.Serialization;
 import org.qi4j.api.util.Base64Encoder;
 import org.qi4j.api.util.Dates;
 import org.qi4j.api.value.ValueBuilder;
@@ -56,8 +57,6 @@
 import org.qi4j.api.value.ValueSerializationException;
 import org.qi4j.functional.Function;
 import org.qi4j.functional.Function2;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import static org.qi4j.functional.Iterables.empty;
 import static org.qi4j.functional.Iterables.first;
@@ -106,9 +105,6 @@
             throws Exception;
     }
 
-    private static final Logger LOG = LoggerFactory.getLogger( ValueDeserializerAdapter.class );
-    private static final Logger PULL_PARSING_LOG = LoggerFactory.getLogger( ValueDeserializerAdapter.class.getName() + "#PullParsing" );
-    private static final Logger TREE_PARSING_LOG = LoggerFactory.getLogger( ValueDeserializerAdapter.class.getName() + "#TreeParsing" );
     private static final String UTF_8 = "UTF-8";
     private final Map<Class<?>, Function<Object, Object>> deserializers = new HashMap<>( 16 );
     private final Map<Class<?>, ComplexDeserializer<Object, InputType, InputNodeType>> complexDeserializers = new HashMap<>( 2 );
@@ -308,11 +304,6 @@
 
     private void setValuesModuleFinder( Function<Application, Module> valuesModuleFinder )
     {
-        if( valuesModuleFinder != null )
-        {
-            LOG.debug( "Will use the provided Function to find Module to build new ValueComposites instances: {}",
-                       valuesModuleFinder );
-        }
         this.valuesModuleFinder = valuesModuleFinder;
         this.valuesModule = null;
     }
@@ -332,7 +323,6 @@
                 {
                     throw new ValueSerializationException( "Values Module provided by the finder Function was null." );
                 }
-                LOG.debug( "Will use a specific Module to build new ValueComposites instances: {}", valuesModule );
             }
         }
         return valuesModule;
@@ -509,25 +499,21 @@
         else // Explicit ValueComposite
         if( ValueCompositeType.class.isAssignableFrom( valueType.getClass() ) )
         {
-            PULL_PARSING_LOG.trace( "ValueCompositeType assignable - deserializeValueComposite( {} )", input );
             return (T) deserializeValueComposite( valueType, input );
         }
         else // Explicit Collections
         if( CollectionType.class.isAssignableFrom( valueType.getClass() ) )
         {
-            PULL_PARSING_LOG.trace( "CollectionType assignable - deserializeCollection( {} )", input );
             return (T) deserializeCollection( (CollectionType) valueType, input );
         }
         else // Explicit Map
         if( MapType.class.isAssignableFrom( valueType.getClass() ) )
         {
-            PULL_PARSING_LOG.trace( "MapType assignable - deserializeMap( {} )", input );
             return (T) deserializeMap( (MapType) valueType, input );
         }
         else // Enum
         if( EnumType.class.isAssignableFrom( valueType.getClass() ) || type.isEnum() )
         {
-            PULL_PARSING_LOG.trace( "EnumType assignable - readValue( {} )", input );
             return (T) Enum.valueOf( (Class) type, readPlainValue( input ).toString() );
         }
         else // Array
@@ -536,7 +522,6 @@
             return (T) deserializeBase64Serialized( readPlainValue( input ).toString() );
         }
         // Guessed Deserialization
-        PULL_PARSING_LOG.trace( "Unknown ValueType - deserializeGuessed( {} )", input );
         return (T) deserializeGuessed( valueType, input );
     }
 
@@ -593,10 +578,7 @@
     private <T> T deserializeValueComposite( ValueType valueType, InputType input )
         throws Exception
     {
-        PULL_PARSING_LOG.trace( "Switching to TREE PARSING @( {} )", input );
         InputNodeType inputNode = readObjectTree( input );
-        TREE_PARSING_LOG.trace( "Switched to TREE PARSING @( {} )", input );
-        TREE_PARSING_LOG.trace( "ObjectNode is {}", inputNode );
         if( inputNode == null )
         {
             return null;
@@ -613,9 +595,6 @@
             inputNode,
             "_type",
             this.<String>buildDeserializeInputNodeFunction( new ValueType( String.class ) ) );
-        TREE_PARSING_LOG.trace(
-            "In deserializeNodeValueComposite(), getObjectFieldValue( {} ) returned '{}'",
-            inputNode, typeInfo );
         if( typeInfo != null )
         {
             ValueDescriptor valueDescriptor = valuesModule().valueDescriptor( typeInfo );
@@ -625,12 +604,6 @@
             }
             valueCompositeType = valueDescriptor.valueType();
             valueBuilderType = Class.forName( typeInfo );
-            if( !valueType.equals( valueCompositeType ) )
-            {
-                TREE_PARSING_LOG.debug(
-                    "Overriding {} with {} as defined in _type field.",
-                    valueType, valueCompositeType );
-            }
         }
         return deserializeValueComposite( valueCompositeType, valueBuilderType, inputNode );
     }
@@ -652,9 +625,6 @@
                     inputNode,
                     propertyName,
                     buildDeserializeInputNodeFunction( property.valueType() ) );
-                TREE_PARSING_LOG.trace(
-                    "In deserializeValueComposite(), getObjectFieldValue( {} ) for key {} returned '{}' of class {}",
-                    inputNode, propertyName, value, value == null ? "N/A" : value.getClass() );
                 if( property.isImmutable() )
                 {
                     if( value instanceof Set )
@@ -670,20 +640,11 @@
                         value = Collections.unmodifiableMap( (Map<?, ?>) value );
                     }
                 }
-                TREE_PARSING_LOG.trace( "Property {}#{}( {} ) deserialized value is '{}' of class {}",
-                                        property.qualifiedName().type(),
-                                        property.qualifiedName().name(),
-                                        property.valueType(),
-                                        value,
-                                        value == null ? "N/A" : value.getClass() );
             }
             else
             {
                 // Serialized object does not contain the field, try to default it
                 value = property.initialValue( valuesModule() );
-                TREE_PARSING_LOG.trace(
-                    "Property {} was not defined in serialized object and has been defaulted to '{}'",
-                    property.qualifiedName(), value );
             }
             stateMap.put( propertyName, value );
         }
@@ -726,7 +687,7 @@
                 Object value = getObjectFieldValue(
                     inputNode,
                     namedAssociationName,
-                    buildDeserializeInputNodeFunction( MapType.of( String.class, EntityReference.class ) ) );
+                    buildDeserializeInputNodeFunction( MapType.of( String.class, EntityReference.class, Serialization.Variant.object ) ) );
                 stateMap.put( namedAssociationName, value );
             }
         }
@@ -771,9 +732,6 @@
         if( deserializers.get( type ) != null )
         {
             Object value = asSimpleValue( inputNode );
-            TREE_PARSING_LOG.trace(
-                "While registered deserializer attempt, asSimpleValue( {} ) returned '{}'",
-                inputNode, value );
             if( value == null )
             {
                 return null;
@@ -797,15 +755,20 @@
         else // Explicit Map
         if( MapType.class.isAssignableFrom( valueType.getClass() ) )
         {
-            return (T) deserializeNodeMap( (MapType) valueType, inputNode );
+            MapType mapType = (MapType) valueType;
+            if( mapType.variant().equals( Serialization.Variant.entry ) )
+            {
+                return (T) deserializeNodeEntryMap( (MapType) valueType, inputNode );
+            }
+            else
+            {
+                return (T) deserializeNodeObjectMap( (MapType) valueType, inputNode );
+            }
         }
         else // Enum
         if( EnumType.class.isAssignableFrom( valueType.getClass() ) || type.isEnum() )
         {
             Object value = asSimpleValue( inputNode );
-            TREE_PARSING_LOG.trace(
-                "While Enum deserialize attempt, asSimpleValue( {} ) returned '{}'",
-                inputNode, value );
             if( value == null )
             {
                 return null;
@@ -902,7 +865,7 @@
         return collection;
     }
 
-    private <K, V> Map<K, V> deserializeNodeMap( MapType mapType, InputNodeType inputNode )
+    private <K, V> Map<K, V> deserializeNodeEntryMap( MapType mapType, InputNodeType inputNode )
         throws Exception
     {
         Map<K, V> map = new HashMap<>();
@@ -913,6 +876,16 @@
         return map;
     }
 
+    private <V> Map<String, V> deserializeNodeObjectMap( MapType mapType, InputNodeType inputNode )
+        throws Exception
+    {
+        Map<String, V> map = new HashMap<>();
+        putObjectNodeInMap( inputNode,
+                            this.<V>buildDeserializeInputNodeFunction( mapType.valueType() ),
+                            map );
+        return map;
+    }
+
     @SuppressWarnings( "unchecked" )
     private <T> T deserializeNodeGuessed( ValueType valueType, InputNodeType inputNode )
         throws Exception
@@ -927,18 +900,12 @@
                     inputNode,
                     "_type",
                     this.<String>buildDeserializeInputNodeFunction( new ValueType( String.class ) ) );
-                TREE_PARSING_LOG.trace(
-                    "In deserializeNodeGuessed(), getObjectFieldValue( {} ) returned '{}'",
-                    inputNode, typeInfo );
                 ValueDescriptor valueDescriptor = valuesModule().valueDescriptor( typeInfo );
                 if( valueDescriptor == null )
                 {
                     throw new ValueSerializationException( "Specified value type could not be resolved: " + typeInfo );
                 }
                 valueCompositeType = valueDescriptor.valueType();
-                TREE_PARSING_LOG.debug(
-                    "Overriding {} with {} as defined in _type field.",
-                    valueType, valueCompositeType );
             }
             else // without _type info
             {
@@ -948,9 +915,6 @@
                     throw new ValueSerializationException( "Don't know how to deserialize " + inputNode );
                 }
                 valueCompositeType = valueDescriptor.valueType();
-                TREE_PARSING_LOG.debug(
-                    "Overriding {} with {} as found in available ValueComposites.",
-                    valueType, valueCompositeType );
             }
             Class<?> valueBuilderType = first( valueCompositeType.types() );
             return deserializeValueComposite( valueCompositeType, valueBuilderType, inputNode );
@@ -964,9 +928,6 @@
         throws Exception
     {
         Object value = asSimpleValue( inputNode );
-        TREE_PARSING_LOG.trace(
-            "While Base64 deserialize attempt, asSimpleValue( {} ) returned '{}'",
-            inputNode, value );
         if( value == null )
         {
             return null;
@@ -1127,6 +1088,13 @@
     protected abstract <K, V> void putArrayNodeInMap( InputNodeType inputNode,
                                                       Function<InputNodeType, K> keyDeserializer,
                                                       Function<InputNodeType, V> valueDeserializer,
-                                                      Map<K, V> map )
+                                                      Map<K, V> map
+    )
+        throws Exception;
+
+    protected abstract <V> void putObjectNodeInMap( InputNodeType inputNode,
+                                                    Function<InputNodeType, V> valueDeserializer,
+                                                    Map<String, V> map
+    )
         throws Exception;
 }
diff --git a/core/spi/src/main/java/org/qi4j/spi/value/ValueSerializerAdapter.java b/core/spi/src/main/java/org/qi4j/spi/value/ValueSerializerAdapter.java
index 8e21416..6f17569 100644
--- a/core/spi/src/main/java/org/qi4j/spi/value/ValueSerializerAdapter.java
+++ b/core/spi/src/main/java/org/qi4j/spi/value/ValueSerializerAdapter.java
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2007, Rickard Öberg. All Rights Reserved.
- * Copyright (c) 2010, Niclas Hehdman. All Rights Reserved.
+ * Copyright (c) 2010, Niclas Hednman. All Rights Reserved.
  * Copyright (c) 2012-2014, Paul Merlin. All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -48,8 +48,6 @@
 import org.qi4j.api.value.ValueSerializer;
 import org.qi4j.functional.Function;
 import org.qi4j.functional.Function2;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import static org.qi4j.functional.Iterables.first;
 
@@ -57,29 +55,29 @@
  * Adapter for pull-parsing capable ValueSerializers.
  *
  * <p>
- *     Among Plain values (see {@link ValueSerializer}) some are considered primitives to underlying serialization
- *     mechanisms and by so handed/come without conversion to/from implementations. Primitive values can be one of:
+ * Among Plain values (see {@link ValueSerializer}) some are considered primitives to underlying serialization
+ * mechanisms and by so handed/come without conversion to/from implementations. Primitive values can be one of:
  * </p>
  * <ul>
- *     <li>String,</li>
- *     <li>Character or char,</li>
- *     <li>Boolean or boolean,</li>
- *     <li>Integer or int,</li>
- *     <li>Long or long,</li>
- *     <li>Short or short,</li>
- *     <li>Byte or byte,</li>
- *     <li>Float or float,</li>
- *     <li>Double or double.</li>
+ * <li>String,</li>
+ * <li>Character or char,</li>
+ * <li>Boolean or boolean,</li>
+ * <li>Integer or int,</li>
+ * <li>Long or long,</li>
+ * <li>Short or short,</li>
+ * <li>Byte or byte,</li>
+ * <li>Float or float,</li>
+ * <li>Double or double.</li>
  * </ul>
  * <p>
- *     Some other Plain values are transformed before being handed to implementations:
+ * Some other Plain values are transformed before being handed to implementations:
  * </p>
  * <ul>
- *     <li>BigInteger and BigDecimal depends on ValueSerializer.{@link Options};</li>
- *     <li>Date as a ISO-8601 UTC String;</li>
- *     <li>DateTime (JodaTime) as a ISO-8601 String with timezone offset or Z for UTC;</li>
- *     <li>LocalDateTime (JodaTime) as a ISO-8601 String with no timezone offset;</li>
- *     <li>LocalDate (JodaTime) as a ISO-8601 String with no time info;</li>
+ * <li>BigInteger and BigDecimal depends on ValueSerializer.{@link org.qi4j.api.value.ValueSerializer.Options};</li>
+ * <li>Date as a ISO-8601 UTC String;</li>
+ * <li>DateTime (JodaTime) as a ISO-8601 String with timezone offset or Z for UTC;</li>
+ * <li>LocalDateTime (JodaTime) as a ISO-8601 String with no timezone offset;</li>
+ * <li>LocalDate (JodaTime) as a ISO-8601 String with no time info;</li>
  * </ul>
  *
  * @param <OutputType> Implementor output type
@@ -94,7 +92,6 @@
             throws Exception;
     }
 
-    private static final Logger LOG = LoggerFactory.getLogger( ValueSerializerAdapter.class );
     private static final String UTF_8 = "UTF-8";
 
     private static <TO, FROM extends TO> Function2<Options, FROM, TO> identitySerializer()
@@ -115,8 +112,8 @@
     /**
      * Register a Plain Value type serialization Function.
      *
-     * @param <T> Plain Value parametrized Type
-     * @param type Plain Value Type
+     * @param <T>        Plain Value parametrized Type
+     * @param type       Plain Value Type
      * @param serializer Serialization Function
      */
     @SuppressWarnings( "unchecked" )
@@ -128,8 +125,8 @@
     /**
      * Register a Complex Value type serialization Function.
      *
-     * @param <T> Complex Value parametrized Type
-     * @param type Complex Value Type
+     * @param <T>        Complex Value parametrized Type
+     * @param type       Complex Value Type
      * @param serializer Serialization Function
      */
     @SuppressWarnings( "unchecked" )
@@ -330,7 +327,6 @@
     {
         if( object != null )
         {
-            // System.out.println( ">>>>>>>>>>>> " + ( object == null ? "null" : object.getClass() ) );
             if( serializers.get( object.getClass() ) != null )
             {
                 // Plain Value
@@ -364,60 +360,51 @@
         // Null
         if( object == null )
         {
-            LOG.trace( "Null object -> onValue( null )" );
             onValue( output, null );
         }
         else // Registered serializer
-        if( serializers.get( object.getClass() ) != null )
-        {
-            LOG.trace( "Registered serializer matches -> onValue( serialized )" );
-            onValue( output, serializers.get( object.getClass() ).map( options, object ) );
-        }
-        else if( complexSerializers.get( object.getClass() ) != null )
-        {
-            complexSerializers.get( object.getClass() ).serialize( options, object, output );
-        }
-        else // ValueComposite
-        if( ValueComposite.class.isAssignableFrom( object.getClass() ) )
-        {
-            LOG.trace( "ValueComposite assignable -> serializeValueComposite( object )" );
-            serializeValueComposite( options, object, output, rootPass );
-        }
-        else // EntityComposite
-        if( EntityComposite.class.isAssignableFrom( object.getClass() ) )
-        {
-            LOG.trace( "EntityComposite assignable -> serializeEntityComposite( object )" );
-            serializeEntityComposite( object, output );
-        }
-        else // Collection - Iterable
-        if( Iterable.class.isAssignableFrom( object.getClass() ) )
-        {
-            LOG.trace( "Iterable assignable -> serializeIterable( object )" );
-            serializeIterable( options, object, output );
-        }
-        else // Array - QUID Remove this and use java serialization for arrays?
-        if( object.getClass().isArray() )
-        {
-            LOG.trace( "Object isArray -> serializeBase64Serializable( object )" );
-            serializeBase64Serializable( object, output );
-        }
-        else // Map
-        if( Map.class.isAssignableFrom( object.getClass() ) )
-        {
-            LOG.trace( "Map assignable -> serializeMap( object )" );
-            serializeMap( options, object, output );
-        }
-        else // Enum
-        if( object.getClass().isEnum() )
-        {
-            LOG.trace( "Object is an enum -> onValue( object.toString() )" );
-            onValue( output, object.toString() );
-        }
-        else // Fallback to Base64 encoded Java Serialization
-        {
-            LOG.trace( "Unknown object type -> serializeBase64Serializable( object )" );
-            serializeBase64Serializable( object, output );
-        }
+            if( serializers.get( object.getClass() ) != null )
+            {
+                onValue( output, serializers.get( object.getClass() ).map( options, object ) );
+            }
+            else if( complexSerializers.get( object.getClass() ) != null )
+            {
+                complexSerializers.get( object.getClass() ).serialize( options, object, output );
+            }
+            else // ValueComposite
+                if( ValueComposite.class.isAssignableFrom( object.getClass() ) )
+                {
+                    serializeValueComposite( options, object, output, rootPass );
+                }
+                else // EntityComposite
+                    if( EntityComposite.class.isAssignableFrom( object.getClass() ) )
+                    {
+                        serializeEntityComposite( object, output );
+                    }
+                    else // Collection - Iterable
+                        if( Iterable.class.isAssignableFrom( object.getClass() ) )
+                        {
+                            serializeIterable( options, object, output );
+                        }
+                        else // Array - QUID Remove this and use java serialization for arrays?
+                            if( object.getClass().isArray() )
+                            {
+                                serializeBase64Serializable( object, output );
+                            }
+                            else // Map
+                                if( Map.class.isAssignableFrom( object.getClass() ) )
+                                {
+                                    serializeMap( options, object, output );
+                                }
+                                else // Enum
+                                    if( object.getClass().isEnum() )
+                                    {
+                                        onValue( output, object.toString() );
+                                    }
+                                    else // Fallback to Base64 encoded Java Serialization
+                                    {
+                                        serializeBase64Serializable( object, output );
+                                    }
     }
 
     private void serializeValueComposite( Options options, Object object, OutputType output, boolean rootPass )
@@ -429,6 +416,7 @@
 
         onObjectStart( output );
 
+        //noinspection ConstantConditions
         if( options.getBoolean( Options.INCLUDE_TYPE_INFO ) && !rootPass )
         {
             onFieldStart( output, "_type" );
@@ -450,16 +438,16 @@
         for( AssociationDescriptor associationDescriptor : descriptor.valueType().associations() )
         {
             Association<?> association = state.associationFor( associationDescriptor.accessor() );
-            Object instance = association.get();
             onFieldStart( output, associationDescriptor.qualifiedName().name() );
             onValueStart( output );
-            if( instance == null )
+            EntityReference ref = association.reference();
+            if( ref == null )
             {
                 onValue( output, null );
             }
             else
             {
-                onValue( output, ( (Identity) instance ).identity().get() );
+                onValue( output, ref.identity() );
             }
             onValueEnd( output );
             onFieldEnd( output );
@@ -470,10 +458,10 @@
             onFieldStart( output, associationDescriptor.qualifiedName().name() );
             onValueStart( output );
             onArrayStart( output );
-            for( Object instance : manyAssociation )
+            for( EntityReference ref : manyAssociation.references() )
             {
                 onValueStart( output );
-                onValue( output, ( (Identity) instance ).identity().get() );
+                onValue( output, ref.identity() );
                 onValueEnd( output );
             }
             onArrayEnd( output );
@@ -490,7 +478,8 @@
             {
                 onFieldStart( output, name );
                 onValueStart( output );
-                onValue( output, ( (Identity) namedAssociation.get( name ) ).identity().get() );
+                EntityReference ref = namedAssociation.referenceOf( name );
+                onValue( output, ref.identity() );
                 onValueEnd( output );
                 onFieldEnd( output );
             }
@@ -528,26 +517,42 @@
     {
         @SuppressWarnings( "unchecked" )
         Map<Object, Object> map = (Map<Object, Object>) object;
-        onArrayStart( output );
-        for( Map.Entry<Object, Object> entry : map.entrySet() )
+        if( options.getBoolean( Options.MAP_ENTRIES_AS_OBJECTS ) )
         {
             onObjectStart( output );
-
-            onFieldStart( output, "key" );
-            onValueStart( output );
-            onValue( output, entry.getKey().toString() );
-            onValueEnd( output );
-            onFieldEnd( output );
-
-            onFieldStart( output, "value" );
-            onValueStart( output );
-            doSerialize( options, entry.getValue(), output, false );
-            onValueEnd( output );
-            onFieldEnd( output );
-
+            for( Map.Entry<Object, Object> entry : map.entrySet() )
+            {
+                onFieldStart( output, entry.getKey().toString() );
+                onValueStart( output );
+                doSerialize( options, entry.getValue(), output, false );
+                onValueEnd( output );
+                onFieldEnd( output );
+            }
             onObjectEnd( output );
         }
-        onArrayEnd( output );
+        else
+        {
+            onArrayStart( output );
+            for( Map.Entry<Object, Object> entry : map.entrySet() )
+            {
+                onObjectStart( output );
+
+                onFieldStart( output, "key" );
+                onValueStart( output );
+                onValue( output, entry.getKey().toString() );
+                onValueEnd( output );
+                onFieldEnd( output );
+
+                onFieldStart( output, "value" );
+                onValueStart( output );
+                doSerialize( options, entry.getValue(), output, false );
+                onValueEnd( output );
+                onFieldEnd( output );
+
+                onObjectEnd( output );
+            }
+            onArrayEnd( output );
+        }
     }
 
     private void serializeBase64Serializable( Object object, OutputType output )
@@ -560,7 +565,7 @@
         throws Exception
     {
         ByteArrayOutputStream bout = new ByteArrayOutputStream();
-        try( ObjectOutputStream out = new ObjectOutputStream( bout ) )
+        try (ObjectOutputStream out = new ObjectOutputStream( bout ))
         {
             out.writeUnshared( object );
         }
diff --git a/core/spi/src/main/java/org/qi4j/spi/value/package.html b/core/spi/src/main/java/org/qi4j/spi/value/package.html
index 8353691..727bc2c 100644
--- a/core/spi/src/main/java/org/qi4j/spi/value/package.html
+++ b/core/spi/src/main/java/org/qi4j/spi/value/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Value SPI.</h2>
diff --git a/core/spi/src/main/java/org/qi4j/valueserialization/orgjson/OrgJsonValueDeserializer.java b/core/spi/src/main/java/org/qi4j/valueserialization/orgjson/OrgJsonValueDeserializer.java
index 452f75e..223bc99 100644
--- a/core/spi/src/main/java/org/qi4j/valueserialization/orgjson/OrgJsonValueDeserializer.java
+++ b/core/spi/src/main/java/org/qi4j/valueserialization/orgjson/OrgJsonValueDeserializer.java
@@ -20,6 +20,7 @@
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.util.Collection;
+import java.util.Iterator;
 import java.util.Map;
 import org.json.JSONArray;
 import org.json.JSONObject;
@@ -449,4 +450,32 @@
             }
         }
     }
+
+    @Override
+    protected <V> void putObjectNodeInMap( Object inputNode, Function<Object, V> valueDeserializer, Map<String, V> map )
+        throws Exception
+    {
+        if( JSONObject.NULL.equals( inputNode ) )
+        {
+            return;
+        }
+        if( !( inputNode instanceof JSONObject ) )
+        {
+            throw new ValueSerializationException( "Expected an object but got " + inputNode );
+        }
+        JSONObject object = (JSONObject) inputNode;
+
+        @SuppressWarnings( "unchecked" )
+        Iterator<String> it = object.keys();
+        while( it.hasNext() )
+        {
+            String key = it.next();
+            Object item = object.get( key );
+            V valueValue = valueDeserializer.map( item );
+            if( key != null )
+            {
+                map.put( key, valueValue );
+            }
+        }
+    }
 }
diff --git a/core/spi/src/main/java/org/qi4j/valueserialization/orgjson/OrgJsonValueSerialization.java b/core/spi/src/main/java/org/qi4j/valueserialization/orgjson/OrgJsonValueSerialization.java
index 0c758fa..2e5413f 100644
--- a/core/spi/src/main/java/org/qi4j/valueserialization/orgjson/OrgJsonValueSerialization.java
+++ b/core/spi/src/main/java/org/qi4j/valueserialization/orgjson/OrgJsonValueSerialization.java
@@ -29,7 +29,7 @@
  * ValueSerialization producing and consuming JSON documents using org.json.
  *
  * <p>
- *     This class is used internally by the Qi4j Runtime to provide default ValueSerialization when no
+ *     This class is used internally by the Zest Runtime to provide default ValueSerialization when no
  *     ValueSerialization Service is available.
  * </p>
  * <p>
diff --git a/core/spi/src/main/java/org/qi4j/valueserialization/orgjson/package.html b/core/spi/src/main/java/org/qi4j/valueserialization/orgjson/package.html
index d06943b..f88bff8 100644
--- a/core/spi/src/main/java/org/qi4j/valueserialization/orgjson/package.html
+++ b/core/spi/src/main/java/org/qi4j/valueserialization/orgjson/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>org.json Value Serialization.</h2>
diff --git a/core/spi/src/test/java/org/qi4j/spi/entitystore/helpers/JSONManyAssociationStateTest.java b/core/spi/src/test/java/org/qi4j/spi/entitystore/helpers/JSONManyAssociationStateTest.java
index d0c3426..dba4b58 100644
--- a/core/spi/src/test/java/org/qi4j/spi/entitystore/helpers/JSONManyAssociationStateTest.java
+++ b/core/spi/src/test/java/org/qi4j/spi/entitystore/helpers/JSONManyAssociationStateTest.java
@@ -45,7 +45,6 @@
         state.put( JSONKeys.MANY_ASSOCIATIONS, new JSONObject() );
         state.put( JSONKeys.NAMED_ASSOCIATIONS, new JSONObject() );
         JSONEntityState entityState = new JSONEntityState( null,
-                                                           null,
                                                            "0",
                                                            System.currentTimeMillis(),
                                                            EntityReference.parseEntityReference( "123" ),
@@ -71,7 +70,6 @@
         state.put( JSONKeys.MANY_ASSOCIATIONS, new JSONObject() );
         state.put( JSONKeys.NAMED_ASSOCIATIONS, new JSONObject() );
         JSONEntityState entityState = new JSONEntityState( null,
-                                                           null,
                                                            "0",
                                                            System.currentTimeMillis(),
                                                            EntityReference.parseEntityReference( "123" ),
diff --git a/core/spi/src/test/resources/logback-test.xml b/core/spi/src/test/resources/logback-test.xml
index 2dab9c5..ce6e028 100644
--- a/core/spi/src/test/resources/logback-test.xml
+++ b/core/spi/src/test/resources/logback-test.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
 <configuration>
 
     <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
diff --git a/core/testsupport/build.gradle b/core/testsupport/build.gradle
index 9fcb4d2..2f0af58 100644
--- a/core/testsupport/build.gradle
+++ b/core/testsupport/build.gradle
@@ -1,8 +1,29 @@
-jar { manifest { name = "Qi4j Core TestSupport"}}
+/*
+ * 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.
+ */
+
+jar { manifest { name = "Apache Zest™ Core TestSupport"}}
 
 dependencies {
 
   compile project( ':org.qi4j.core:org.qi4j.core.bootstrap' )
   compile libraries.junit
 
-}
\ No newline at end of file
+  testRuntime project( ':org.qi4j.core:org.qi4j.core.runtime' )
+
+}
diff --git a/core/testsupport/dev-status.xml b/core/testsupport/dev-status.xml
index ebfaed6..7b1a30b 100644
--- a/core/testsupport/dev-status.xml
+++ b/core/testsupport/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/core/testsupport/src/docs/reference/AbstractEntityStoreTest.txt b/core/testsupport/src/docs/reference/AbstractEntityStoreTest.txt
index e69de29..fc7aac6 100644
--- a/core/testsupport/src/docs/reference/AbstractEntityStoreTest.txt
+++ b/core/testsupport/src/docs/reference/AbstractEntityStoreTest.txt
@@ -0,0 +1,18 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
diff --git a/core/testsupport/src/docs/reference/AbstractQi4jScenarioTest.txt b/core/testsupport/src/docs/reference/AbstractQi4jScenarioTest.txt
index e69de29..fc7aac6 100644
--- a/core/testsupport/src/docs/reference/AbstractQi4jScenarioTest.txt
+++ b/core/testsupport/src/docs/reference/AbstractQi4jScenarioTest.txt
@@ -0,0 +1,18 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
diff --git a/core/testsupport/src/docs/reference/AbstractQi4jTest.txt b/core/testsupport/src/docs/reference/AbstractQi4jTest.txt
index e69de29..fc7aac6 100644
--- a/core/testsupport/src/docs/reference/AbstractQi4jTest.txt
+++ b/core/testsupport/src/docs/reference/AbstractQi4jTest.txt
@@ -0,0 +1,18 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
diff --git a/core/testsupport/src/docs/reference/ref-testsupport.txt b/core/testsupport/src/docs/reference/ref-testsupport.txt
index b02c4b4..e1f117f 100644
--- a/core/testsupport/src/docs/reference/ref-testsupport.txt
+++ b/core/testsupport/src/docs/reference/ref-testsupport.txt
@@ -1,3 +1,21 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
 
 include::AbstractQi4jTest.txt
 
diff --git a/core/testsupport/src/docs/testsupport.txt b/core/testsupport/src/docs/testsupport.txt
index 251f338..f3c9585 100644
--- a/core/testsupport/src/docs/testsupport.txt
+++ b/core/testsupport/src/docs/testsupport.txt
@@ -21,15 +21,15 @@
 source=core/testsupport/dev-status.xml
 --------------
 
-Qi4j comes with classes to help with testing. For general development, only a couple of classes are of interest as the
+Zest™ comes with classes to help with testing. For general development, only a couple of classes are of interest as the
 others are mostly for EntityStore and Index/Query SPI implementations. There is also some mocking support, to allow
-some of Qi4j's unique aspects to be mocked, but since Qi4j is so flexible at a fine-granular level, we have found that
+some of Zest's unique aspects to be mocked, but since Zest™ is so flexible at a fine-granular level, we have found that
 mocking is seldom, if ever, needed.
 
 include::../../build/docs/buildinfo/artifact.txt[]
 
 == Your First Testcase ==
-In most cases, you will probably use the AbstractQi4jTest class to simplify starting a Qi4j test instance.
+In most cases, you will probably use the AbstractQi4jTest class to simplify starting a Zest™ test instance.
 
 [snippet,java]
 --------------
@@ -37,7 +37,7 @@
 tag=step1
 --------------
 
-This will do all the initialization of a Qi4j runtime instance and create a single layer with a single module in it.
+This will do all the initialization of a Zest™ runtime instance and create a single layer with a single module in it.
 What goes into that module is declared in the assembly() method;
 
 [snippet,java]
diff --git a/core/testsupport/src/main/java/org/qi4j/test/AbstractQi4jBaseTest.java b/core/testsupport/src/main/java/org/qi4j/test/AbstractQi4jBaseTest.java
index 3c878a1..949dca3 100644
--- a/core/testsupport/src/main/java/org/qi4j/test/AbstractQi4jBaseTest.java
+++ b/core/testsupport/src/main/java/org/qi4j/test/AbstractQi4jBaseTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.test;
 
 import org.junit.After;
@@ -11,8 +29,6 @@
 import org.qi4j.bootstrap.AssemblyException;
 import org.qi4j.bootstrap.Energy4Java;
 import org.qi4j.spi.Qi4jSPI;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public abstract class AbstractQi4jBaseTest
 {
@@ -23,8 +39,6 @@
     protected ApplicationDescriptor applicationModel;
     protected Application application;
 
-    private Logger log;
-
     @Before
     public void setUp()
         throws Exception
@@ -83,7 +97,7 @@
     }
 
     /**
-     * This method is called when there was an AssemblyException in the creation of the Qi4j application model.
+     * This method is called when there was an AssemblyException in the creation of the Zest application model.
      * <p>
      * Override this method to catch valid failures to place into satisfiedBy suites.
      * </p>
@@ -111,14 +125,4 @@
             application.passivate();
         }
     }
-
-    protected Logger getLog()
-    {
-        if( this.log == null )
-        {
-            this.log = LoggerFactory.getLogger( this.getClass() );
-        }
-
-        return this.log;
-    }
 }
diff --git a/core/testsupport/src/main/java/org/qi4j/test/AbstractQi4jScenarioTest.java b/core/testsupport/src/main/java/org/qi4j/test/AbstractQi4jScenarioTest.java
index 48e1f0b..27948f6 100644
--- a/core/testsupport/src/main/java/org/qi4j/test/AbstractQi4jScenarioTest.java
+++ b/core/testsupport/src/main/java/org/qi4j/test/AbstractQi4jScenarioTest.java
@@ -28,11 +28,9 @@
 import org.qi4j.bootstrap.AssemblyException;
 import org.qi4j.bootstrap.Energy4Java;
 import org.qi4j.spi.Qi4jSPI;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
- * Base class for Qi4j scenario tests. This will create one Qi4j application per class instead of per test.
+ * Base class for Zest scenario tests. This will create one Zest application per class instead of per test.
  */
 public abstract class AbstractQi4jScenarioTest
     implements Assembler
@@ -48,8 +46,6 @@
 
     static protected Assembler assembler; // Initialize this in static block of subclass
 
-    static private Logger log;
-
     @BeforeClass
     public static void setUp()
         throws Exception
@@ -96,7 +92,7 @@
     }
 
     /**
-     * This method is called when there was an AssemblyException in the creation of the Qi4j application model.
+     * This method is called when there was an AssemblyException in the creation of the Zest application model.
      * <p>
      * Override this method to catch valid failures to place into satisfiedBy suites.
      * </p>
@@ -144,14 +140,4 @@
             application.passivate();
         }
     }
-
-    protected Logger getLog()
-    {
-        if( this.log == null )
-        {
-            this.log = LoggerFactory.getLogger( this.getClass() );
-        }
-
-        return this.log;
-    }
 }
\ No newline at end of file
diff --git a/core/testsupport/src/main/java/org/qi4j/test/AbstractQi4jTest.java b/core/testsupport/src/main/java/org/qi4j/test/AbstractQi4jTest.java
index 7b7adbb..2ef0647 100644
--- a/core/testsupport/src/main/java/org/qi4j/test/AbstractQi4jTest.java
+++ b/core/testsupport/src/main/java/org/qi4j/test/AbstractQi4jTest.java
@@ -16,13 +16,13 @@
 
 import org.junit.After;
 import org.junit.Before;
-import org.qi4j.api.structure.Module;
 import org.qi4j.api.unitofwork.UnitOfWork;
 import org.qi4j.bootstrap.ApplicationAssembly;
 import org.qi4j.bootstrap.Assembler;
 import org.qi4j.bootstrap.AssemblyException;
 import org.qi4j.bootstrap.LayerAssembly;
 import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.spi.module.ModuleSpi;
 
 /**
  * Base class for Composite tests.
@@ -30,7 +30,7 @@
 public abstract class AbstractQi4jTest extends AbstractQi4jBaseTest
     implements Assembler
 {
-    protected Module module;
+    protected ModuleSpi module;
 
     @Before
     @Override
@@ -42,7 +42,7 @@
         {
             return; // failure in Assembly.
         }
-        module = application.findModule( "Layer 1", "Module 1" );
+        module = (ModuleSpi) application.findModule( "Layer 1", "Module 1" );
         module.injectTo( this );
     }
 
diff --git a/core/testsupport/src/main/java/org/qi4j/test/cache/AbstractEntityStoreWithCacheTest.java b/core/testsupport/src/main/java/org/qi4j/test/cache/AbstractEntityStoreWithCacheTest.java
new file mode 100644
index 0000000..0d3de54
--- /dev/null
+++ b/core/testsupport/src/main/java/org/qi4j/test/cache/AbstractEntityStoreWithCacheTest.java
@@ -0,0 +1,165 @@
+/*
+ *  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.qi4j.test.cache;
+
+import org.junit.Test;
+import org.qi4j.api.common.Optional;
+import org.qi4j.api.injection.scope.Service;
+import org.qi4j.api.unitofwork.UnitOfWorkCompletionException;
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.test.entity.AbstractEntityStoreTest;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Assert Cache behaviour when used by an EntityStore.
+ * <p>
+ * Use an in-memory CachePool by default, implement the <code>assembleCachePool</code> method to override.
+ */
+public abstract class AbstractEntityStoreWithCacheTest
+    extends AbstractEntityStoreTest
+{
+    @Optional @Service MemoryCachePoolService cachePool;
+
+    @Override
+    public void assemble( ModuleAssembly module )
+        throws AssemblyException
+    {
+        super.assemble( module );
+        assembleCachePool( module );
+    }
+
+    protected void assembleCachePool( ModuleAssembly module )
+        throws AssemblyException
+    {
+        module.services( MemoryCachePoolService.class );
+    }
+
+    @Test
+    public void whenNewEntityThenCanFindEntityAndCorrectValues()
+        throws Exception
+    {
+        super.whenNewEntityThenCanFindEntityAndCorrectValues();
+        if( cachePool != null )
+        {
+            MemoryCacheImpl<?> cache = cachePool.singleCache();
+            assertThat( cache.size(), is( 1 ) );
+            assertThat( cache.gets(), is( 1 ) );
+            assertThat( cache.puts(), is( 1 ) );
+            assertThat( cache.removes(), is( 0 ) );
+            assertThat( cache.exists(), is( 0 ) );
+        }
+    }
+
+    @Test
+    public void whenRemovedEntityThenCannotFindEntity()
+        throws Exception
+    {
+        super.whenRemovedEntityThenCannotFindEntity();
+        if( cachePool != null )
+        {
+            MemoryCacheImpl<?> cache = cachePool.singleCache();
+            assertThat( cache.size(), is( 0 ) );
+            assertThat( cache.gets(), is( 2 ) );
+            assertThat( cache.puts(), is( 1 ) );
+            assertThat( cache.removes(), is( 1 ) );
+            assertThat( cache.exists(), is( 0 ) );
+        }
+    }
+
+    @Test
+    public void givenEntityIsNotModifiedWhenUnitOfWorkCompletesThenDontStoreState()
+        throws UnitOfWorkCompletionException
+    {
+        super.givenEntityIsNotModifiedWhenUnitOfWorkCompletesThenDontStoreState();
+        if( cachePool != null )
+        {
+            MemoryCacheImpl<?> cache = cachePool.singleCache();
+            assertThat( cache.size(), is( 1 ) );
+            assertThat( cache.gets(), is( 2 ) );
+            assertThat( cache.puts(), is( 1 ) );
+            assertThat( cache.removes(), is( 0 ) );
+            assertThat( cache.exists(), is( 0 ) );
+        }
+    }
+
+    @Test
+    public void givenPropertyIsModifiedWhenUnitOfWorkCompletesThenStoreState()
+        throws UnitOfWorkCompletionException
+    {
+        super.givenPropertyIsModifiedWhenUnitOfWorkCompletesThenStoreState();
+        if( cachePool != null )
+        {
+            MemoryCacheImpl<?> cache = cachePool.singleCache();
+            assertThat( cache.size(), is( 1 ) );
+            assertThat( cache.gets(), is( 2 ) );
+            assertThat( cache.puts(), is( 2 ) );
+            assertThat( cache.removes(), is( 0 ) );
+            assertThat( cache.exists(), is( 0 ) );
+        }
+    }
+
+    @Test
+    public void givenManyAssociationIsModifiedWhenUnitOfWorkCompletesThenStoreState()
+        throws UnitOfWorkCompletionException
+    {
+        super.givenManyAssociationIsModifiedWhenUnitOfWorkCompletesThenStoreState();
+        if( cachePool != null )
+        {
+            MemoryCacheImpl<?> cache = cachePool.singleCache();
+            assertThat( cache.size(), is( 1 ) );
+            assertThat( cache.gets(), is( 2 ) );
+            assertThat( cache.puts(), is( 2 ) );
+            assertThat( cache.removes(), is( 0 ) );
+            assertThat( cache.exists(), is( 0 ) );
+        }
+    }
+
+    @Test
+    public void givenConcurrentUnitOfWorksWhenUoWCompletesThenCheckConcurrentModification()
+        throws UnitOfWorkCompletionException
+    {
+        super.givenConcurrentUnitOfWorksWhenUoWCompletesThenCheckConcurrentModification();
+        if( cachePool != null )
+        {
+            MemoryCacheImpl<?> cache = cachePool.singleCache();
+            assertThat( cache.size(), is( 1 ) );
+            assertThat( cache.gets(), is( 4 ) );
+            assertThat( cache.puts(), is( 2 ) );
+            assertThat( cache.removes(), is( 0 ) );
+            assertThat( cache.exists(), is( 0 ) );
+        }
+    }
+
+    @Test
+    public void givenEntityStoredLoadedChangedWhenUnitOfWorkDiscardsThenDontStoreState()
+        throws UnitOfWorkCompletionException
+    {
+        super.givenEntityStoredLoadedChangedWhenUnitOfWorkDiscardsThenDontStoreState();
+        if( cachePool != null )
+        {
+            MemoryCacheImpl<?> cache = cachePool.singleCache();
+            assertThat( cache.size(), is( 1 ) );
+            assertThat( cache.gets(), is( 2 ) );
+            assertThat( cache.puts(), is( 1 ) );
+            assertThat( cache.removes(), is( 0 ) );
+            assertThat( cache.exists(), is( 0 ) );
+        }
+    }
+}
diff --git a/core/testsupport/src/main/java/org/qi4j/test/cache/MemoryCacheImpl.java b/core/testsupport/src/main/java/org/qi4j/test/cache/MemoryCacheImpl.java
new file mode 100644
index 0000000..18a99c8
--- /dev/null
+++ b/core/testsupport/src/main/java/org/qi4j/test/cache/MemoryCacheImpl.java
@@ -0,0 +1,142 @@
+/*
+ *  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.qi4j.test.cache;
+
+import java.util.concurrent.ConcurrentHashMap;
+import org.qi4j.spi.cache.Cache;
+
+/**
+ * In-Memory Cache implementation based on ConcurrentHashMap.
+ */
+public class MemoryCacheImpl<T>
+    implements Cache<T>
+{
+    private int refCount;
+
+    private final ConcurrentHashMap<String, Object> backingCache;
+    private final Class<T> valueType;
+    private final String id;
+
+    private int gets;
+    private int removes;
+    private int puts;
+    private int exists;
+
+    public MemoryCacheImpl( String cacheId, ConcurrentHashMap<String, Object> cache, Class<T> valueType )
+    {
+        this.id = cacheId;
+        this.backingCache = cache;
+        this.valueType = valueType;
+    }
+
+    @Override
+    public T get( String key )
+    {
+        try
+        {
+            return valueType.cast( backingCache.get( key ) );
+        }
+        finally
+        {
+            gets++;
+        }
+    }
+
+    @Override
+    public T remove( String key )
+    {
+        try
+        {
+            return valueType.cast( backingCache.remove( key ) );
+        }
+        finally
+        {
+            removes++;
+        }
+    }
+
+    @Override
+    public void put( String key, T value )
+    {
+        try
+        {
+            backingCache.put( key, value );
+        }
+        finally
+        {
+            puts++;
+        }
+    }
+
+    @Override
+    public boolean exists( String key )
+    {
+        try
+        {
+            return backingCache.containsKey( key );
+        }
+        finally
+        {
+            exists++;
+        }
+    }
+
+    synchronized void decRefCount()
+    {
+        refCount--;
+    }
+
+    synchronized void incRefCount()
+    {
+        refCount++;
+    }
+
+    synchronized boolean isNotUsed()
+    {
+        return refCount == 0;
+    }
+
+    public String cacheId()
+    {
+        return id;
+    }
+
+    public int size()
+    {
+        return backingCache.size();
+    }
+
+    public int gets()
+    {
+        return gets;
+    }
+
+    public int removes()
+    {
+        return removes;
+    }
+
+    public int puts()
+    {
+        return puts;
+    }
+
+    public int exists()
+    {
+        return exists;
+    }
+}
diff --git a/core/testsupport/src/main/java/org/qi4j/test/cache/MemoryCachePoolMixin.java b/core/testsupport/src/main/java/org/qi4j/test/cache/MemoryCachePoolMixin.java
new file mode 100644
index 0000000..cc9e014
--- /dev/null
+++ b/core/testsupport/src/main/java/org/qi4j/test/cache/MemoryCachePoolMixin.java
@@ -0,0 +1,82 @@
+/*
+ *  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.qi4j.test.cache;
+
+import java.util.concurrent.ConcurrentHashMap;
+import org.qi4j.api.util.NullArgumentException;
+import org.qi4j.spi.cache.Cache;
+
+import static org.qi4j.functional.Iterables.single;
+
+/**
+ * In-Memory CachePool Mixin based on ConcurrentHashMap.
+ */
+public abstract class MemoryCachePoolMixin
+    implements MemoryCachePoolService
+{
+    private final ConcurrentHashMap<String, MemoryCacheImpl<?>> caches = new ConcurrentHashMap<>();
+
+    @Override
+    public <T> Cache<T> fetchCache( String cacheId, Class<T> valueType )
+    {
+        NullArgumentException.validateNotEmpty( "cacheId", cacheId );
+        MemoryCacheImpl<?> cache = caches.get( cacheId );
+        if( cache == null )
+        {
+            cache = createNewCache( cacheId, valueType );
+            caches.put( cacheId, cache );
+        }
+        cache.incRefCount();
+        return (Cache<T>) cache;
+    }
+
+    private <T> MemoryCacheImpl<T> createNewCache( String cacheId, Class<T> valueType )
+    {
+        return new MemoryCacheImpl<>( cacheId, new ConcurrentHashMap<String, Object>(), valueType );
+    }
+
+    @Override
+    public void returnCache( Cache<?> cache )
+    {
+        MemoryCacheImpl<?> memory = (MemoryCacheImpl<?>) cache;
+        memory.decRefCount();
+        if( memory.isNotUsed() )
+        {
+            caches.remove( memory.cacheId() );
+        }
+    }
+
+    @Override
+    public void activateService()
+        throws Exception
+    {
+        caches.clear();
+    }
+
+    @Override
+    public void passivateService()
+        throws Exception
+    {
+        caches.clear();
+    }
+
+    @Override
+    public MemoryCacheImpl<?> singleCache()
+    {
+        return single( caches.values() );
+    }
+}
diff --git a/core/testsupport/src/main/java/org/qi4j/test/cache/MemoryCachePoolService.java b/core/testsupport/src/main/java/org/qi4j/test/cache/MemoryCachePoolService.java
new file mode 100644
index 0000000..66b5c94
--- /dev/null
+++ b/core/testsupport/src/main/java/org/qi4j/test/cache/MemoryCachePoolService.java
@@ -0,0 +1,37 @@
+/*
+ *  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.qi4j.test.cache;
+
+import org.qi4j.api.mixin.Mixins;
+import org.qi4j.api.service.ServiceActivation;
+import org.qi4j.spi.cache.CachePool;
+
+/**
+ * In-Memory CachePool Service.
+ */
+@Mixins( MemoryCachePoolMixin.class )
+public interface MemoryCachePoolService
+    extends CachePool, ServiceActivation
+{
+    /**
+     * Get the single Cache of this CachePool.
+     *
+     * @return The single Cache of this CachePool
+     * @throws IllegalArgumentException if no or more than one Cache is present in the CachePool
+     */
+    MemoryCacheImpl<?> singleCache();
+}
diff --git a/core/testsupport/src/main/java/org/qi4j/test/cache/package.html b/core/testsupport/src/main/java/org/qi4j/test/cache/package.html
index 45730ab..be867a7 100644
--- a/core/testsupport/src/main/java/org/qi4j/test/cache/package.html
+++ b/core/testsupport/src/main/java/org/qi4j/test/cache/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Cache SPI Test Support.</h2>
diff --git a/core/testsupport/src/main/java/org/qi4j/test/entity/AbstractConfigurationDeserializationTest.java b/core/testsupport/src/main/java/org/qi4j/test/entity/AbstractConfigurationDeserializationTest.java
new file mode 100644
index 0000000..7e2b7ea
--- /dev/null
+++ b/core/testsupport/src/main/java/org/qi4j/test/entity/AbstractConfigurationDeserializationTest.java
@@ -0,0 +1,120 @@
+/*
+ *  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.qi4j.test.entity;
+
+import org.junit.Test;
+import org.qi4j.api.common.Visibility;
+import org.qi4j.api.configuration.Configuration;
+import org.qi4j.api.entity.Identity;
+import org.qi4j.api.injection.scope.This;
+import org.qi4j.api.mixin.Mixins;
+import org.qi4j.api.property.Property;
+import org.qi4j.api.service.ServiceReference;
+import org.qi4j.api.value.ValueSerialization;
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.entitystore.memory.MemoryEntityStoreService;
+import org.qi4j.spi.uuid.UuidIdentityGeneratorService;
+import org.qi4j.test.AbstractQi4jTest;
+import org.qi4j.valueserialization.orgjson.OrgJsonValueSerializationService;
+
+import static org.hamcrest.core.IsEqual.equalTo;
+import static org.hamcrest.core.IsNull.notNullValue;
+import static org.junit.Assert.assertThat;
+
+public abstract class AbstractConfigurationDeserializationTest extends AbstractQi4jTest
+{
+    @Override
+    public void assemble( ModuleAssembly module )
+        throws AssemblyException
+    {
+//        ModuleAssembly storageModule = module.layer().module( "storage" );
+        ModuleAssembly storageModule = module; // Disable the more complex set up. The entire value serialization has gotten the deserialization type lookup problem wrong.
+        module.configurations( ConfigSerializationConfig.class );
+        module.values( Host.class );
+        module.services( MyService.class ).identifiedBy( "configtest" );
+        storageModule.services( MemoryEntityStoreService.class ).visibleIn( Visibility.layer );
+        storageModule.services( OrgJsonValueSerializationService.class ).taggedWith( ValueSerialization.Formats.JSON );
+        storageModule.services( UuidIdentityGeneratorService.class );
+    }
+
+    @Test
+    public void givenServiceWhenInitializingExpectCorrectDeserialization()
+    {
+        ServiceReference<MyService> ref = module.findService( MyService.class );
+        assertThat( ref, notNullValue() );
+        assertThat( ref.isAvailable(), equalTo( true ) );
+        MyService myService = ref.get();
+        assertThat( myService, notNullValue() );
+        assertThat( myService.name(), equalTo( "main" ) );
+        assertThat( myService.hostIp(), equalTo( "12.23.34.45" ) );
+        assertThat( myService.hostPort(), equalTo( 1234 ) );
+    }
+
+    @Mixins( MyServiceMixin.class )
+    public interface MyService
+    {
+
+        String hostIp();
+
+        Integer hostPort();
+
+        String name();
+    }
+
+    public static class MyServiceMixin
+        implements MyService
+    {
+
+        @This
+        private Configuration<ConfigSerializationConfig> config;
+
+        @Override
+        public String hostIp()
+        {
+            return config.get().host().get().ip().get();
+        }
+
+        @Override
+        public Integer hostPort()
+        {
+            return config.get().host().get().port().get();
+        }
+
+        @Override
+        public String name()
+        {
+            return config.get().name().get();
+        }
+    }
+
+    public interface ConfigSerializationConfig extends Identity
+    {
+        Property<String> name();
+
+        Property<Host> host();
+    }
+
+    public interface Host
+    {
+        Property<String> ip();
+
+        Property<Integer> port();
+    }
+}
diff --git a/core/testsupport/src/main/java/org/qi4j/test/entity/AbstractEntityStoreTest.java b/core/testsupport/src/main/java/org/qi4j/test/entity/AbstractEntityStoreTest.java
index 4549826..f78f932 100644
--- a/core/testsupport/src/main/java/org/qi4j/test/entity/AbstractEntityStoreTest.java
+++ b/core/testsupport/src/main/java/org/qi4j/test/entity/AbstractEntityStoreTest.java
@@ -53,6 +53,7 @@
 import org.qi4j.test.AbstractQi4jTest;
 
 import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.not;
 import static org.joda.time.DateTimeZone.UTC;
 import static org.junit.Assert.assertThat;
@@ -455,6 +456,32 @@
         }
     }
 
+    @Test
+    public void givenEntityStoredLoadedChangedWhenUnitOfWorkDiscardsThenDontStoreState()
+        throws UnitOfWorkCompletionException
+    {
+        UnitOfWork unitOfWork = module.newUnitOfWork();
+        try
+        {
+            String identity = createEntity( unitOfWork ).identity().get();
+            unitOfWork.complete();
+
+            unitOfWork = module.newUnitOfWork();
+            TestEntity entity = unitOfWork.get( TestEntity.class, identity );
+            assertThat( entity.intValue().get(), is( 42 ) );
+            entity.intValue().set( 23 );
+            unitOfWork.discard();
+
+            unitOfWork = module.newUnitOfWork();
+            entity = unitOfWork.get( TestEntity.class, identity );
+            assertThat( entity.intValue().get(), is( 42 ) );
+        }
+        finally
+        {
+            unitOfWork.discard();
+        }
+    }
+
     public interface TestEntity
         extends EntityComposite
     {
diff --git a/core/testsupport/src/main/java/org/qi4j/test/entity/package.html b/core/testsupport/src/main/java/org/qi4j/test/entity/package.html
index 255d7e5..abad269 100644
--- a/core/testsupport/src/main/java/org/qi4j/test/entity/package.html
+++ b/core/testsupport/src/main/java/org/qi4j/test/entity/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>EntityStore SPI Test Support.</h2>
diff --git a/core/testsupport/src/main/java/org/qi4j/test/indexing/model/entities/package.html b/core/testsupport/src/main/java/org/qi4j/test/indexing/model/entities/package.html
index df4b3a8..b19cc59 100644
--- a/core/testsupport/src/main/java/org/qi4j/test/indexing/model/entities/package.html
+++ b/core/testsupport/src/main/java/org/qi4j/test/indexing/model/entities/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Index/Query SPI Test Support - Entities.</h2>
diff --git a/core/testsupport/src/main/java/org/qi4j/test/indexing/model/package.html b/core/testsupport/src/main/java/org/qi4j/test/indexing/model/package.html
index 6dadd99..c4acb13 100644
--- a/core/testsupport/src/main/java/org/qi4j/test/indexing/model/package.html
+++ b/core/testsupport/src/main/java/org/qi4j/test/indexing/model/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Index/Query SPI Test Support - Model.</h2>
diff --git a/core/testsupport/src/main/java/org/qi4j/test/indexing/package.html b/core/testsupport/src/main/java/org/qi4j/test/indexing/package.html
index b0e21e2..e26df9a 100644
--- a/core/testsupport/src/main/java/org/qi4j/test/indexing/package.html
+++ b/core/testsupport/src/main/java/org/qi4j/test/indexing/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Index/Query SPI Test Support.</h2>
diff --git a/core/testsupport/src/main/java/org/qi4j/test/mock/MockPlayerConcern.java b/core/testsupport/src/main/java/org/qi4j/test/mock/MockPlayerConcern.java
index 8ef996e..68d2111 100644
--- a/core/testsupport/src/main/java/org/qi4j/test/mock/MockPlayerConcern.java
+++ b/core/testsupport/src/main/java/org/qi4j/test/mock/MockPlayerConcern.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.test.mock;
 
 import java.lang.reflect.InvocationHandler;
diff --git a/core/testsupport/src/main/java/org/qi4j/test/mock/internal/package.html b/core/testsupport/src/main/java/org/qi4j/test/mock/internal/package.html
index 99bb8d5..24923b1 100644
--- a/core/testsupport/src/main/java/org/qi4j/test/mock/internal/package.html
+++ b/core/testsupport/src/main/java/org/qi4j/test/mock/internal/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Test Support Composites Mocking Internal/Private package.</h2>
diff --git a/core/testsupport/src/main/java/org/qi4j/test/mock/package.html b/core/testsupport/src/main/java/org/qi4j/test/mock/package.html
index bc051da..2431af0 100644
--- a/core/testsupport/src/main/java/org/qi4j/test/mock/package.html
+++ b/core/testsupport/src/main/java/org/qi4j/test/mock/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Test Support Composites Mocking.</h2>
diff --git a/core/testsupport/src/main/java/org/qi4j/test/package.html b/core/testsupport/src/main/java/org/qi4j/test/package.html
index a502e5d..8e463ac 100644
--- a/core/testsupport/src/main/java/org/qi4j/test/package.html
+++ b/core/testsupport/src/main/java/org/qi4j/test/package.html
@@ -1,5 +1,21 @@
+<!--
+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.
+-->
 <html>
     <body>
-        <h2>Qi4j Test Support.</h2>
+        <h2>Apache Zest™ Test Support.</h2>
     </body>
 </html>
diff --git a/core/testsupport/src/main/java/org/qi4j/test/util/Assume.java b/core/testsupport/src/main/java/org/qi4j/test/util/Assume.java
index 8d7e491..f60b0d3 100644
--- a/core/testsupport/src/main/java/org/qi4j/test/util/Assume.java
+++ b/core/testsupport/src/main/java/org/qi4j/test/util/Assume.java
@@ -47,10 +47,17 @@
      */
     public static void assumeDisplayPresent()
     {
-        assumeFalse( GraphicsEnvironment.getLocalGraphicsEnvironment().isHeadlessInstance() );
-        String display = System.getenv( "DISPLAY" );
-        assumeThat( display, is( notNullValue() ) );
-        assumeTrue( display.length() > 0 );
+        try
+        {
+            assumeFalse( GraphicsEnvironment.getLocalGraphicsEnvironment().isHeadlessInstance() );
+            String display = System.getenv( "DISPLAY" );
+            assumeThat( display, is( notNullValue() ) );
+            assumeTrue( display.length() > 0 );
+        } catch( UnsatisfiedLinkError e )
+        {
+            // assuming that this is caused due to missing video subsystem, or similar
+            assumeNoException( "Grahics system is missing?", e );
+        }
     }
 
     /**
@@ -66,11 +73,12 @@
         }
         catch( SocketException ex )
         {
-            assumeFalse( true );
+            assumeNoException( ex );
         }
     }
 
     /**
+     * // TODO: qi4j.org will soon go down.
      * If called on a runtime with no access to qi4j.org on port 80, the test will halt and be ignored.
      */
     public static void assumeConnectivity()
@@ -92,7 +100,7 @@
         }
         catch( IOException ex )
         {
-            assumeFalse( true );
+            assumeNoException( ex );
         }
     }
 
diff --git a/core/testsupport/src/main/java/org/qi4j/test/util/package.html b/core/testsupport/src/main/java/org/qi4j/test/util/package.html
index 702f692..d74efb2 100644
--- a/core/testsupport/src/main/java/org/qi4j/test/util/package.html
+++ b/core/testsupport/src/main/java/org/qi4j/test/util/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Test Support Utilities.</h2>
diff --git a/core/testsupport/src/main/java/org/qi4j/test/value/AbstractCollectionSerializationTest.java b/core/testsupport/src/main/java/org/qi4j/test/value/AbstractCollectionSerializationTest.java
index 5c58c2a..3a04ee5 100644
--- a/core/testsupport/src/main/java/org/qi4j/test/value/AbstractCollectionSerializationTest.java
+++ b/core/testsupport/src/main/java/org/qi4j/test/value/AbstractCollectionSerializationTest.java
@@ -69,6 +69,7 @@
     {
         module.injectTo( this );
     }
+
     @Service
     @SuppressWarnings( "ProtectedField" )
     protected ValueSerialization valueSerialization;
diff --git a/core/testsupport/src/main/java/org/qi4j/test/value/AbstractPlainValueSerializationTest.java b/core/testsupport/src/main/java/org/qi4j/test/value/AbstractPlainValueSerializationTest.java
index a99b1f2..218cca6 100644
--- a/core/testsupport/src/main/java/org/qi4j/test/value/AbstractPlainValueSerializationTest.java
+++ b/core/testsupport/src/main/java/org/qi4j/test/value/AbstractPlainValueSerializationTest.java
@@ -190,6 +190,8 @@
     @Test
     public void givenDateTimeValueWhenSerializingAndDeserializingExpectEquals()
     {
+        // We specify the TimeZone explicitely here so that serialized/deserialized is equals
+        // See https://github.com/JodaOrg/joda-time/issues/106
         String serialized = valueSerialization.serialize( new DateTime( "2020-03-04T13:24:35", forOffsetHours( 1 ) ) );
         assertThat( serialized, equalTo( "2020-03-04T13:24:35.000+01:00" ) );
         DateTime deserialized = valueSerialization.deserialize( DateTime.class, serialized );
diff --git a/core/testsupport/src/main/java/org/qi4j/test/value/AbstractValueCompositeSerializationTest.java b/core/testsupport/src/main/java/org/qi4j/test/value/AbstractValueCompositeSerializationTest.java
index 933503c..82947e9 100644
--- a/core/testsupport/src/main/java/org/qi4j/test/value/AbstractValueCompositeSerializationTest.java
+++ b/core/testsupport/src/main/java/org/qi4j/test/value/AbstractValueCompositeSerializationTest.java
@@ -24,6 +24,7 @@
 import java.util.List;
 import java.util.Map;
 import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
 import org.joda.time.LocalDate;
 import org.joda.time.LocalDateTime;
 import org.junit.Before;
@@ -32,8 +33,10 @@
 import org.junit.rules.TestName;
 import org.qi4j.api.association.Association;
 import org.qi4j.api.association.ManyAssociation;
+import org.qi4j.api.association.NamedAssociation;
 import org.qi4j.api.common.Optional;
 import org.qi4j.api.common.UseDefaults;
+import org.qi4j.api.common.Visibility;
 import org.qi4j.api.entity.EntityBuilder;
 import org.qi4j.api.entity.EntityComposite;
 import org.qi4j.api.entity.EntityReference;
@@ -49,8 +52,6 @@
 import org.qi4j.bootstrap.ModuleAssembly;
 import org.qi4j.test.AbstractQi4jTest;
 import org.qi4j.test.EntityTestAssembler;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
@@ -59,17 +60,13 @@
 /**
  * Assert that ValueSerialization behaviour on ValueComposites is correct.
  */
-// TODO Assert Association and ManyAssociation serialization behaviour!
 // TODO Assert Arrays behaviour!
 // TODO Assert Generics behaviour!
 public abstract class AbstractValueCompositeSerializationTest
     extends AbstractQi4jTest
 {
-
     @Rule
-    @SuppressWarnings( "PublicField" )
     public TestName testName = new TestName();
-    private Logger log;
 
     @Override
     public void assemble( ModuleAssembly module )
@@ -77,18 +74,18 @@
     {
         module.values( SomeValue.class, AnotherValue.class, FooValue.class, CustomFooValue.class,
                        SpecificCollection.class /*, SpecificValue.class, GenericValue.class */ );
-        new EntityTestAssembler().assemble( module );
+
+        new EntityTestAssembler().visibleIn( Visibility.layer ).assemble( module.layer().module( "persistence" ) );
         module.entities( BarEntity.class );
     }
 
     @Before
     public void before()
     {
-        log = LoggerFactory.getLogger( testName.getMethodName() );
         module.injectTo( this );
     }
+
     @Service
-    @SuppressWarnings( "ProtectedField" )
     protected ValueSerialization valueSerialization;
 
     @Test
@@ -105,8 +102,6 @@
             valueSerialization.serialize( some, output );
             String stateString = output.toString( "UTF-8" );
 
-            log.info( "Complex ValueComposite state:\n\n{}\n", stateString );
-
             // Deserialize using Module API
             SomeValue some2 = module.newValueFromSerializedState( SomeValue.class, stateString );
 
@@ -122,7 +117,6 @@
         }
         catch( Exception ex )
         {
-            log.error( ex.getMessage(), ex );
             throw ex;
         }
         finally
@@ -148,24 +142,20 @@
         specificColProto.genericList().set( genericList );
         proto.specificCollection().set( specificColBuilder.newInstance() );
 
-        /*
-         ValueBuilder<SpecificValue> specificValue = module.newValueBuilder(SpecificValue.class);
-         specificValue.prototype().item().set("Foo");
-         proto.specificValue().set(specificValue.newInstance());
-         */
-        ValueBuilder<AnotherValue> valueBuilder = module.newValueBuilder( AnotherValue.class );
-        valueBuilder.prototype().val1().set( "Foo" );
-        valueBuilder.prototypeFor( AnotherValueInternalState.class ).val2().set( "Bar" );
-        AnotherValue anotherValue = valueBuilder.newInstance();
+        AnotherValue anotherValue1 = createAnotherValue( "Foo", "Bar" );
+        AnotherValue anotherValue2 = createAnotherValue( "Habba", "ZoutZout" );
+        AnotherValue anotherValue3 = createAnotherValue( "Niclas", "Hedhman" );
 
         // FIXME Some Control Chars are not supported in JSON nor in XML, what should we do about it?
-        // Should Qi4j Core ensure the chars used in strings are supported by the whole stack?
+        // Should Zest Core ensure the chars used in strings are supported by the whole stack?
         // proto.string().set( "Foo\"Bar\"\nTest\f\t\b" );
         proto.string().set( "Foo\"Bar\"\nTest\t" );
         proto.string2().set( "/Foo/bar" );
         proto.number().set( 42L );
         proto.date().set( new Date() );
-        proto.dateTime().set( new DateTime() );
+        // We specify the TimeZone explicitely here so that serialized/deserialized is equals
+        // See https://github.com/JodaOrg/joda-time/issues/106
+        proto.dateTime().set( new DateTime( "2020-03-04T13:24:35", DateTimeZone.forOffsetHours( 1 ) ) );
         proto.localDate().set( new LocalDate() );
         proto.localDateTime().set( new LocalDateTime() );
         proto.entityReference().set( EntityReference.parseEntityReference( "12345" ) );
@@ -179,8 +169,9 @@
         //
         // proto.stringIntMap().get().put( "bar", 67 );
 
-        proto.stringValueMap().get().put( "foo", anotherValue );
-        proto.another().set( anotherValue );
+        proto.stringValueMap().get().put( "foo", anotherValue1 );
+        proto.another().set( anotherValue1 );
+        // proto.arrayOfValues().set( new AnotherValue[] { anotherValue1, anotherValue2, anotherValue3 } );
         proto.serializable().set( new SerializableObject() );
         proto.foo().set( module.newValue( FooValue.class ) );
         proto.fooValue().set( module.newValue( FooValue.class ) );
@@ -205,10 +196,22 @@
         proto.barManyAssociation().add( buildBarEntity( "bazar TWO in barManyAssociation" ) );
         proto.barEntityManyAssociation().add( buildBarEntity( "bazar ONE in barEntityManyAssociation" ) );
         proto.barEntityManyAssociation().add( buildBarEntity( "bazar TWO in barEntityManyAssociation" ) );
+        proto.barNamedAssociation().put( "bazar", buildBarEntity( "bazar in barNamedAssociation" ) );
+        proto.barNamedAssociation().put( "cathedral", buildBarEntity( "cathedral in barNamedAssociation" ) );
+        proto.barEntityNamedAssociation().put( "bazar", buildBarEntity( "bazar in barEntityNamedAssociation" ) );
+        proto.barEntityNamedAssociation().put( "cathedral", buildBarEntity( "cathedral in barEntityNamedAssociation" ) );
 
         return builder.newInstance();
     }
 
+    private AnotherValue createAnotherValue( String val1, String val2 )
+    {
+        ValueBuilder<AnotherValue> valueBuilder = module.newValueBuilder( AnotherValue.class );
+        valueBuilder.prototype().val1().set( val1 );
+        valueBuilder.prototypeFor( AnotherValueInternalState.class ).val2().set( val2 );
+        return valueBuilder.newInstance();
+    }
+
     private BarEntity buildBarEntity( String cathedral )
     {
         EntityBuilder<BarEntity> barBuilder = module.currentUnitOfWork().newEntityBuilder( BarEntity.class );
@@ -218,14 +221,12 @@
 
     public enum TestEnum
     {
-
         somevalue, anothervalue
     }
 
     public interface SomeValue
         extends ValueComposite
     {
-
         Property<String> string();
 
         Property<String> string2();
@@ -260,6 +261,8 @@
 
         Property<AnotherValue> another();
 
+        // Property<AnotherValue[]> arrayOfValues();
+
         @Optional
         Property<AnotherValue> anotherNull();
 
@@ -313,6 +316,12 @@
         ManyAssociation<Bar> barManyAssociation();
 
         ManyAssociation<BarEntity> barEntityManyAssociation();
+
+        NamedAssociation<Bar> barNamedAssociationEmpty();
+
+        NamedAssociation<Bar> barNamedAssociation();
+
+        NamedAssociation<BarEntity> barEntityNamedAssociation();
     }
 
     public interface SpecificCollection
@@ -323,7 +332,6 @@
     public interface GenericCollection<TYPE>
         extends ValueComposite
     {
-
         @UseDefaults
         Property<List<TYPE>> genericList();
     }
@@ -336,7 +344,6 @@
     public interface GenericValue<TYPE>
         extends ValueComposite
     {
-
         @Optional
         Property<TYPE> item();
     }
@@ -345,7 +352,6 @@
     public interface AnotherValue
         extends ValueComposite
     {
-
         @UseDefaults
         Property<String> val1();
 
@@ -354,7 +360,6 @@
 
     public interface AnotherValueInternalState
     {
-
         @UseDefaults
         Property<String> val2();
     }
@@ -362,7 +367,6 @@
     public static abstract class AnotherValueMixin
         implements AnotherValue
     {
-
         @This
         private AnotherValueInternalState internalState;
 
@@ -375,7 +379,6 @@
 
     public interface Foo
     {
-
         @UseDefaults
         Property<String> bar();
     }
@@ -388,14 +391,12 @@
     public interface CustomFooValue
         extends FooValue
     {
-
         @UseDefaults
         Property<String> custom();
     }
 
     public interface Bar
     {
-
         @UseDefaults
         Property<String> cathedral();
     }
@@ -408,13 +409,11 @@
     public static class SerializableObject
         implements Serializable
     {
-
         private static final long serialVersionUID = 1L;
         private final String foo = "Foo";
         private final int val = 35;
 
         @Override
-        @SuppressWarnings( "AccessingNonPublicFieldOfAnotherObject" )
         public boolean equals( Object o )
         {
             if( this == o )
@@ -437,5 +436,4 @@
             return result;
         }
     }
-
 }
diff --git a/core/testsupport/src/main/java/org/qi4j/test/value/package.html b/core/testsupport/src/main/java/org/qi4j/test/value/package.html
index b8575dc..a82e564 100644
--- a/core/testsupport/src/main/java/org/qi4j/test/value/package.html
+++ b/core/testsupport/src/main/java/org/qi4j/test/value/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>ValueSerialization SPI Test Support.</h2>
diff --git a/core/testsupport/src/test/java/org/qi4j/test/cache/MemoryCacheTest.java b/core/testsupport/src/test/java/org/qi4j/test/cache/MemoryCacheTest.java
new file mode 100644
index 0000000..1bbd6cf
--- /dev/null
+++ b/core/testsupport/src/test/java/org/qi4j/test/cache/MemoryCacheTest.java
@@ -0,0 +1,32 @@
+/*
+ *  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.qi4j.test.cache;
+
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.test.cache.AbstractCachePoolTest;
+
+public class MemoryCacheTest
+    extends AbstractCachePoolTest
+{
+    @Override
+    public void assemble( ModuleAssembly module )
+        throws AssemblyException
+    {
+        module.services( MemoryCachePoolService.class );
+    }
+}
diff --git a/doap.rdf b/doap.rdf
index 77e74c3..bb13fa0 100644
--- a/doap.rdf
+++ b/doap.rdf
@@ -1,4 +1,5 @@
 <?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl"?>
 <!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
@@ -15,8 +16,6 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-
-<?xml-stylesheet type="text/xsl"?>
 <rdf:RDF xml:lang="en"
          xmlns="http://usefulinc.com/ns/doap#" 
          xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
@@ -30,30 +29,35 @@
 
   =======================================================================
 -->
-  <Project rdf:about="http://zest.rdf.apache.org/">
+  <Project rdf:about="http://zest.apache.org/">
     <created>2008-12-17</created>
     <license rdf:resource="http://usefulinc.com/doap/licenses/asl20" />
     <name>Apache Zest</name>
-    <homepage rdf:resource="http://zest.apache.org/" />
-    <asfext:pmc rdf:resource="http://zest.apache.org/" />
-    <shortdesc>Apache Zest is an open source platform for composite oriented programming.</shortdesc>
-    <description>Apache Zest is an open source platform for composite oriented programming. Zest is home for Qi4j,
-    the composite oriented programming platform for Java, and Qi4Net a port to the .NET CLR.
-    Composite oriented programming allows developers to work with 'fragments', smaller than classes, and 'compose'
-    fragments into larger 'composites' which acts like the regular objects. Zest also tackles the enforcement
-    of application composition, i.e. composites are declared in modules, modules are contained in layers and access
-    between layers are controlled/enforced.
-    </description>
-    <bug-database rdf:resource="http://issues.apache.org/jira/browse/ZEST" />
-    <mailing-list rdf:resource="http://zest.apache.org/mailing-lists.html" />
-    <download-page rdf:resource="http://zest.apache.org/download.html" />
-
+    <homepage rdf:resource="https://zest.apache.org/" />
+    <asfext:pmc rdf:resource="https://zest.apache.org" />
+    <shortdesc>Apache Zest is a community based effort exploring Composite Oriented Programming for domain centric application development.</shortdesc>
+    <description>Apache Zest is a community based effort exploring Composite Oriented Programming for domain centric application development. This includes evolved concepts from Aspect Oriented Programming, Dependency Injection and Domain Driven Design. Composite Oriented Programming allows developers to work with 'fragments', smaller than classes, and 'compose' fragments into larger 'composites' which acts like the regular objects. Zest also tackles the enforcement of application composition, i.e. composites are declared in modules, modules are contained in layers and access between layers are controlled/enforced. Apache Zest™ (Java Edition), first Apache Zest sub-project, is an implementation of Composite Oriented Programming, using the standard Java platform, without the use of any pre-processors or new language elements. Everything you know from Java still applies and you can leverage both your experience and toolkits to become more productive with Composite Oriented Programming today.</description>    
+    <bug-database rdf:resource="https://issues.apache.org/jira/browse/ZEST" />
+    <mailing-list rdf:resource="https://www.apache.org/foundation/mailinglists.html" />
+    <download-page rdf:resource="https://zest.apache.org/download.html" />
     <programming-language>Java</programming-language>
     <programming-language>C#</programming-language>
-    <programming-language>JavaScript</programming-language>
-    <programming-language>Ruby</programming-language>
     <programming-language>Scala</programming-language>
-    <category rdf:resource="http://projects.apache.org/category/osgi" />
+    <programming-language>Groovy</programming-language>
+    <programming-language>JavaScript</programming-language>
+    <category rdf:resource="http://projects.apache.org/category/library" />
+    <repository>
+      <SVNRepository>
+        <location rdf:resource="http://svn.apache.org/repos/asf/zest/"/>
+        <browse rdf:resource="http://svn.apache.org/viewcvs.cgi/zest/"/>
+      </SVNRepository>
+    </repository>
+    <repository>
+      <GitRepository>
+        <location rdf:resource="https://git-wip-us.apache.org/repos/asf/zest-java.git"/>
+        <browse rdf:resource="https://github.com/apache/zest-java"/>
+      </GitRepository>
+    </repository>
     <maintainer>
       <foaf:Person>
         <foaf:name>Niclas Hedhman</foaf:name>
diff --git a/etc/apache-rat-output-to-html.xsl b/etc/apache-rat-output-to-html.xsl
new file mode 100644
index 0000000..dcf19c5
--- /dev/null
+++ b/etc/apache-rat-output-to-html.xsl
@@ -0,0 +1,204 @@
+<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
+
+<!--***********************************************************
+ *
+ * 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.
+ *
+ ***********************************************************-->
+
+<!-- This style sheet converts any rat-report.xml file.  -->
+
+<xsl:template match="/">
+
+  <html>
+    <head>
+     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+     <style type="text/css">
+    &lt;!--
+body {margin-top: 0px;font-size: 0.8em;background-color: #F9F7ED;}
+
+h1 {color:red;}
+h2 {color:blue;}
+h3 {color:green;}
+h4 {color:orange;}
+
+/* Table Design */
+
+table,tr,td {text-align:center;font-weight:bold;border:1px solid #000;}
+caption {color:blue;text-align:left;}
+.notes, .binaries, .archives, .standards {width:25%;}
+.notes {background:#D7EDEE;}
+.binaries {background:#D0F2F4;}
+.archives {background:#ABE7E9;}
+.standards {background:#A0F0F4;}
+.licenced, .generated {width:50%;}
+.licenced {background:#C6EBDD;}
+.generated {background:#ABE9D2;}
+.java_note {background:#D6EBC6;}
+.generated_note {background:#C9E7A9;}
+.unknown {width:100%;background:#E92020;}
+.unknown-zero {color:#00CC00;}
+.center{text-align:center;margin:0 auto;}
+--&gt;
+     </style>
+    </head>
+    <body>
+      <xsl:apply-templates/>
+      <xsl:call-template name="generated"/>
+    </body>
+  </html>
+</xsl:template>
+
+<xsl:template match="rat-report">
+
+  <h1>Rat Report</h1>
+<div class="center">
+<table id="rat-reports summary" cellspacing="0" summary="A snapshot summary of this rat report">
+<caption>
+Table 1: A snapshot summary of this rat report.
+</caption>
+  <tr>
+    <td colspan="1" class="notes">Notes: <xsl:value-of select="count(descendant::type[attribute::name=&quot;notice&quot;])"/></td>
+    <td colspan="1" class="binaries">Binaries: <xsl:value-of select="count(descendant::type[attribute::name=&quot;binary&quot;])"/></td>
+    <td colspan="1" class="archives">Archives: <xsl:value-of select="count(descendant::type[attribute::name=&quot;archive&quot;])"/></td>
+    <td colspan="1" class="standards">Standards: <xsl:value-of select="count(descendant::type[attribute::name=&quot;standard&quot;])"/></td>
+  </tr>
+  <tr>
+    <td colspan="2" class="licenced">Apache Licensed: <xsl:value-of select="count(descendant::header-type[attribute::name=&quot;AL   &quot;])"/></td>
+    <td colspan="2" class="generated">Generated Documents: <xsl:value-of select="count(descendant::header-type[attribute::name=&quot;GEN  &quot;])"/></td>
+  </tr>
+  <tr>
+    <td colspan="2" class="java_note">Note: JavaDocs are generated and so license header is optional</td>
+    <td colspan="2" class="generated_note">Note: Generated files do not require license headers</td>
+  </tr>
+  <tr>
+<xsl:choose>
+  <xsl:when test="count(descendant::header-type[attribute::name=&quot;?????&quot;]) &gt; 0">
+    <td colspan="4" class="unknown"><xsl:value-of select="count(descendant::header-type[attribute::name=&quot;?????&quot;])"/> Unknown Licenses - or files without a license.</td>
+  </xsl:when>
+  <xsl:otherwise>
+    <td colspan="4" class="unknown-zero"><xsl:value-of select="count(descendant::header-type[attribute::name=&quot;?????&quot;])"/> Unknown Licenses - or files without a license.</td>
+  </xsl:otherwise>
+</xsl:choose>
+  </tr>
+</table>
+</div>
+<hr/>
+  <h3>Unapproved Licenses:</h3>
+
+  <xsl:for-each select="descendant::resource[license-approval/@name=&quot;false&quot;]">
+  <xsl:text>  </xsl:text>
+  <xsl:value-of select="@name"/><br/>
+  <xsl:text>
+</xsl:text>
+</xsl:for-each>
+<hr/>
+
+<h3>Archives:</h3>
+
+<xsl:for-each select="descendant::resource[type/@name=&quot;archive&quot;]">
+ + <xsl:value-of select="@name"/>
+ <br/>
+ </xsl:for-each>
+ <hr/>
+
+ <p>
+   Files with Apache License headers will be marked AL<br/>
+   Binary files (which do not require AL headers) will be marked B<br/>
+  Compressed archives will be marked A<br/>
+  Notices, licenses etc will be marked N<br/>
+  </p>
+
+ <xsl:for-each select="descendant::resource">
+  <xsl:choose>
+   <xsl:when test="license-approval/@name=&quot;false&quot;">!</xsl:when>
+   <xsl:otherwise><xsl:text> </xsl:text></xsl:otherwise>
+ </xsl:choose>
+ <xsl:choose>
+   <xsl:when test="type/@name=&quot;notice&quot;">N   </xsl:when>
+   <xsl:when test="type/@name=&quot;archive&quot;">A   </xsl:when>
+   <xsl:when test="type/@name=&quot;binary&quot;">B   </xsl:when>
+   <xsl:when test="type/@name=&quot;standard&quot;"><xsl:value-of select="header-type/@name"/></xsl:when>
+   <xsl:otherwise>!!!!!</xsl:otherwise>
+ </xsl:choose>
+ <xsl:text>      </xsl:text>
+ <xsl:value-of select="@name"/><br/>
+ <xsl:text>
+ </xsl:text>
+ </xsl:for-each>
+ <hr/>
+
+ <h3>Printing headers for files without AL header...</h3>
+
+ <xsl:for-each select="descendant::resource[header-type/@name=&quot;?????&quot;]">
+
+   <h4><xsl:value-of select="@name"/></h4>
+  <xsl:value-of select="header-sample"/>
+  <hr/>
+</xsl:for-each>
+<br/>
+
+ <!-- <xsl:apply-templates select="resource"/>
+    <xsl:apply-templates select="header-sample"/>
+    <xsl:apply-templates select="header-type"/>
+    <xsl:apply-templates select="license-family"/>
+    <xsl:apply-templates select="license-approval"/>
+    <xsl:apply-templates select="type"/> -->
+
+</xsl:template>
+
+<xsl:template match="resource">
+  <div>
+    <h3>Resource: <xsl:value-of select="@name"/></h3>
+      <xsl:apply-templates/>
+    </div>
+</xsl:template>
+
+<xsl:template match="header-sample">
+  <xsl:if test="normalize-space(.) != ''">
+  <h4>First few lines of non-compliant file</h4>
+    <p>
+      <xsl:value-of select="."/>
+    </p>
+    </xsl:if>
+    <h4>Other Info:</h4>
+</xsl:template>
+
+<xsl:template match="header-type">
+  Header Type: <xsl:value-of select="@name"/>
+  <br/>
+</xsl:template>
+
+<xsl:template match="license-family">
+  License Family: <xsl:value-of select="@name"/>
+  <br/>
+</xsl:template>
+
+<xsl:template match="license-approval">
+  License Approval: <xsl:value-of select="@name"/>
+  <br/>
+</xsl:template>
+
+<xsl:template match="type">
+  Type: <xsl:value-of select="@name"/>
+  <br/>
+</xsl:template>
+
+<xsl:template name="generated">
+</xsl:template>
+</xsl:transform>
diff --git a/etc/header.txt b/etc/header.txt
new file mode 100644
index 0000000..9f4ff31
--- /dev/null
+++ b/etc/header.txt
@@ -0,0 +1,14 @@
+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.
\ No newline at end of file
diff --git a/etc/qi4j-api-checkstyle.xml b/etc/qi4j-api-checkstyle.xml
index 4a2122a..d9c55c2 100644
--- a/etc/qi4j-api-checkstyle.xml
+++ b/etc/qi4j-api-checkstyle.xml
@@ -2,6 +2,27 @@
 <!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.2//EN"
   "http://www.puppycrawl.com/dtds/configuration_1_2.dtd">
 
+<!--***********************************************************
+ *
+ * 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.
+ *
+ ***********************************************************-->
+
 <!-- Documentation is availableService at
      http://checkstyle.sourceforge.net/availablechecks.html
 -->
diff --git a/etc/qi4j-runtime-checkstyle.xml b/etc/qi4j-runtime-checkstyle.xml
index 3e0329c..a50e0db 100644
--- a/etc/qi4j-runtime-checkstyle.xml
+++ b/etc/qi4j-runtime-checkstyle.xml
@@ -2,6 +2,27 @@
 <!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.2//EN"
   "http://www.puppycrawl.com/dtds/configuration_1_2.dtd">
 
+<!--***********************************************************
+ *
+ * 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.
+ *
+ ***********************************************************-->
+
 <!-- Documentation is availableService at
      http://checkstyle.sourceforge.net/availablechecks.html
 -->
diff --git a/etc/qi4j-tests-checkstyle.xml b/etc/qi4j-tests-checkstyle.xml
index ea6c570..be1fca6 100644
--- a/etc/qi4j-tests-checkstyle.xml
+++ b/etc/qi4j-tests-checkstyle.xml
@@ -2,6 +2,27 @@
 <!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.2//EN"
   "http://www.puppycrawl.com/dtds/configuration_1_2.dtd">
 
+<!--***********************************************************
+ *
+ * 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.
+ *
+ ***********************************************************-->
+
 <!-- Documentation is availableService at
      http://checkstyle.sourceforge.net/availablechecks.html
 -->
diff --git a/extensions/.gitignore b/extensions/.gitignore
deleted file mode 100644
index 4b3ff5f..0000000
--- a/extensions/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-*.iml
-build/
-out/
-derby.log
-entitystore-sql/derby.log
-entitystore-sql/target
diff --git a/extensions/LICENSE b/extensions/LICENSE
deleted file mode 100644
index f433b1a..0000000
--- a/extensions/LICENSE
+++ /dev/null
@@ -1,177 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
diff --git a/extensions/cache-ehcache/NOTICE b/extensions/cache-ehcache/NOTICE
deleted file mode 100644
index 93fe55a..0000000
--- a/extensions/cache-ehcache/NOTICE
+++ /dev/null
@@ -1,17 +0,0 @@
-Qi4j File Persistence Extension
-Copyright 2007-2008, The Qi4j Development Team of individuals.
-
-See http://www.qi4j.org/contributors.html for list of of individuals.
-Also see each file for additional information of Copyright claims.
-
-Qi4j is a community aggregated works under Copyright law.
-All parts of the original works at Qi4j is licensed under the
-Apache License ver 2.0 http://www.apache.org/licenses
-
-Below follows a list of binary dependencies and their licenses;
-----------------------------------------------------------------
-
-This module uses Ehcache, software developed at http://www.ehcache.org
-under Apache license 2.0. See LICENSE.
-
-END OF NOTICE
\ No newline at end of file
diff --git a/extensions/cache-ehcache/build.gradle b/extensions/cache-ehcache/build.gradle
index eed60f8..9d68d45 100644
--- a/extensions/cache-ehcache/build.gradle
+++ b/extensions/cache-ehcache/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j Ehcache Cache Extension"
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Extension: EhCache"}}
+description = "Apache Zest™ Ehcache Cache Extension"
+
+jar { manifest { name = "Apache Zest™ Extension: EhCache"}}
 
 dependencies {
 
diff --git a/extensions/cache-ehcache/dev-status.xml b/extensions/cache-ehcache/dev-status.xml
index 1fb0ab5..b863976 100644
--- a/extensions/cache-ehcache/dev-status.xml
+++ b/extensions/cache-ehcache/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/extensions/cache-ehcache/src/docs/cache-ehcache.txt b/extensions/cache-ehcache/src/docs/cache-ehcache.txt
index 72ba616..32c8bc8 100644
--- a/extensions/cache-ehcache/src/docs/cache-ehcache.txt
+++ b/extensions/cache-ehcache/src/docs/cache-ehcache.txt
@@ -1,3 +1,21 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
 
 [[extension-cache-ehcache, Ehcache Cache]]
 = Ehcache Cache =
diff --git a/extensions/cache-ehcache/src/main/java/org/qi4j/cache/ehcache/EhCachePoolMixin.java b/extensions/cache-ehcache/src/main/java/org/qi4j/cache/ehcache/EhCachePoolMixin.java
index 03822de..41a81f5 100644
--- a/extensions/cache-ehcache/src/main/java/org/qi4j/cache/ehcache/EhCachePoolMixin.java
+++ b/extensions/cache-ehcache/src/main/java/org/qi4j/cache/ehcache/EhCachePoolMixin.java
@@ -110,7 +110,7 @@
         String name = conf.cacheManagerName().get();
         if( name == null )
         {
-            name = "Qi4j Cache Extension";
+            name = "Zest Cache Extension";
         }
         configuration.setName( name );
         String diskStorePath = conf.diskStorePath().get();
diff --git a/extensions/cache-ehcache/src/main/java/org/qi4j/cache/ehcache/assembly/package.html b/extensions/cache-ehcache/src/main/java/org/qi4j/cache/ehcache/assembly/package.html
new file mode 100644
index 0000000..efa9790
--- /dev/null
+++ b/extensions/cache-ehcache/src/main/java/org/qi4j/cache/ehcache/assembly/package.html
@@ -0,0 +1,21 @@
+<!--
+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.
+-->
+<html>
+    <body>
+        <h2>EHCache EntityStore CachePool Assembly.</h2>
+    </body>
+</html>
diff --git a/extensions/cache-ehcache/src/main/java/org/qi4j/cache/ehcache/package.html b/extensions/cache-ehcache/src/main/java/org/qi4j/cache/ehcache/package.html
new file mode 100644
index 0000000..608617b
--- /dev/null
+++ b/extensions/cache-ehcache/src/main/java/org/qi4j/cache/ehcache/package.html
@@ -0,0 +1,21 @@
+<!--
+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.
+-->
+<html>
+    <body>
+        <h2>EHCache EntityStore CachePool.</h2>
+    </body>
+</html>
diff --git a/extensions/cache-memcache/build.gradle b/extensions/cache-memcache/build.gradle
index 099cde7..c78356f 100644
--- a/extensions/cache-memcache/build.gradle
+++ b/extensions/cache-memcache/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j Memcache Cache Extension"
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Extension - Cache - Memcache"}}
+description = "Apache Zest™ Memcache Cache Extension"
+
+jar { manifest { name = "Apache Zest™ Extension - Cache - Memcache"}}
 
 dependencies {
 
diff --git a/extensions/cache-memcache/dev-status.xml b/extensions/cache-memcache/dev-status.xml
index 1fb0ab5..b863976 100644
--- a/extensions/cache-memcache/dev-status.xml
+++ b/extensions/cache-memcache/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/extensions/cache-memcache/src/docs/cache-memcache.txt b/extensions/cache-memcache/src/docs/cache-memcache.txt
index 52859d6..5cd5081 100644
--- a/extensions/cache-memcache/src/docs/cache-memcache.txt
+++ b/extensions/cache-memcache/src/docs/cache-memcache.txt
@@ -1,3 +1,21 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
 
 [[extension-cache-memcache, Memcache Cache]]
 = Memcache Cache =
diff --git a/extensions/cache-memcache/src/main/java/org/qi4j/cache/memcache/package.html b/extensions/cache-memcache/src/main/java/org/qi4j/cache/memcache/package.html
index bfd721d..75f2343 100644
--- a/extensions/cache-memcache/src/main/java/org/qi4j/cache/memcache/package.html
+++ b/extensions/cache-memcache/src/main/java/org/qi4j/cache/memcache/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Memcache EntityStore CachePool.</h2>
diff --git a/extensions/entitystore-file/NOTICE b/extensions/entitystore-file/NOTICE
deleted file mode 100644
index bc40830..0000000
--- a/extensions/entitystore-file/NOTICE
+++ /dev/null
@@ -1,16 +0,0 @@
-Qi4j File Persistence Extension
-Copyright 2007-2008, The Qi4j Development Team of individuals.
-
-See http://www.qi4j.org/contributors.html for list of of individuals.
-Also see each file for additional information of Copyright claims.
-
-Qi4j is a community aggregated works under Copyright law.
-All parts of the original works at Qi4j is licensed under the
-Apache License ver 2.0 http://www.apache.org/licenses
-
-Below follows a list of binary dependencies and their licenses;
-----------------------------------------------------------------
-
-<NONE>
-
-END OF NOTICE
\ No newline at end of file
diff --git a/extensions/entitystore-file/build.gradle b/extensions/entitystore-file/build.gradle
index 321a1ec..5ce6f63 100644
--- a/extensions/entitystore-file/build.gradle
+++ b/extensions/entitystore-file/build.gradle
@@ -1,4 +1,23 @@
-jar { manifest { name = "Qi4j Extension - EntityStore - File system" }}
+/*
+ * 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.
+ */
+
+jar { manifest { name = "Apache Zest™ Extension - EntityStore - File system" }}
 
 dependencies {
 
diff --git a/extensions/entitystore-file/dev-status.xml b/extensions/entitystore-file/dev-status.xml
index 30382ac..94d633f 100644
--- a/extensions/entitystore-file/dev-status.xml
+++ b/extensions/entitystore-file/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/extensions/entitystore-file/src/docs/es-file.txt b/extensions/entitystore-file/src/docs/es-file.txt
index 4041115..1cf25cc 100644
--- a/extensions/entitystore-file/src/docs/es-file.txt
+++ b/extensions/entitystore-file/src/docs/es-file.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[extension-es-file,File EntityStore]]
 = File EntityStore =
 
diff --git a/extensions/entitystore-file/src/main/java/org/qi4j/entitystore/file/FileEntityStoreConfiguration.java b/extensions/entitystore-file/src/main/java/org/qi4j/entitystore/file/FileEntityStoreConfiguration.java
index 34395c0..cf97af8 100644
--- a/extensions/entitystore-file/src/main/java/org/qi4j/entitystore/file/FileEntityStoreConfiguration.java
+++ b/extensions/entitystore-file/src/main/java/org/qi4j/entitystore/file/FileEntityStoreConfiguration.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.entitystore.file;
 
 import org.qi4j.api.common.Optional;
@@ -16,8 +34,22 @@
     /**
      * The directory where the File Entity Store will be keep its persisted state.
      * <p>
-     * Default: System.getProperty( "user.dir" ) + "/qi4j/filestore";
+     *     If no configuration is provided at all, then the default location is
+     *     {@code System.getProperty( "user.dir" ) + "/qi4j/filestore"; }.
+     *     If a configuration is given, the entity store will be placed in the
+     *     DATA directory, which is operating system specific.
      * </p>
+     * <table summary="Default locations">
+     *     <tr><th>OS</th><th>Location</th></tr>
+     *     <tr><td>Linux/Unix</td><td>{user}/.{application}/data</td></tr>
+     *     <tr><td>OSX</td><td>{user}/Library/Application Support/{application}</td></tr>
+     *     <tr><td>Windows</td><td>{user}/Application Data/{application}/data</td></tr>
+     * </table>
+     * <pre><code>
+     * where;
+     *   {user} = Current User's home directory
+     *   {application} = Application's name, as set in assembly.
+     * </code></pre>
      * <p>
      * Ignored if the FileConfiguration service is found.
      * </p>
diff --git a/extensions/entitystore-file/src/main/java/org/qi4j/entitystore/file/FileEntityStoreMixin.java b/extensions/entitystore-file/src/main/java/org/qi4j/entitystore/file/FileEntityStoreMixin.java
index f335669..fa71ea7 100644
--- a/extensions/entitystore-file/src/main/java/org/qi4j/entitystore/file/FileEntityStoreMixin.java
+++ b/extensions/entitystore-file/src/main/java/org/qi4j/entitystore/file/FileEntityStoreMixin.java
@@ -44,6 +44,7 @@
 import org.qi4j.io.Sender;
 import org.qi4j.library.fileconfig.FileConfiguration;
 import org.qi4j.spi.entitystore.BackupRestore;
+import org.qi4j.spi.entitystore.EntityAlreadyExistsException;
 import org.qi4j.spi.entitystore.EntityNotFoundException;
 import org.qi4j.spi.entitystore.EntityStoreException;
 import org.qi4j.spi.entitystore.helpers.MapEntityStore;
@@ -73,17 +74,15 @@
         {
             if( fileConfiguration != null )
             {
-                pathName = new File( fileConfiguration.dataDirectory(), config.get()
-                    .identity()
-                    .get() ).getAbsolutePath();
+                String storeId = config.get().identity().get();
+                pathName = new File( fileConfiguration.dataDirectory(), storeId ).getAbsolutePath();
             }
             else
             {
                 pathName = System.getProperty( "user.dir" ) + "/qi4j/filestore/";
             }
         }
-        File rootDirectory = new File( pathName ).getAbsoluteFile();
-        dataDirectory = new File( rootDirectory, "data" );
+        dataDirectory = new File( pathName ).getAbsoluteFile();
         if( !dataDirectory.exists() )
         {
             if( !dataDirectory.mkdirs() )
@@ -216,6 +215,10 @@
                             super.close();
                             byte[] stateArray = this.toString().getBytes( "UTF-8" );
                             File dataFile = getDataFile( ref );
+                            if( dataFile.exists() )
+                            {
+                                throw new EntityAlreadyExistsException( ref );
+                            }
                             store( dataFile, stateArray );
                         }
                     };
@@ -248,6 +251,7 @@
                     {
                         throw new EntityNotFoundException( ref );
                     }
+                    //noinspection ResultOfMethodCallIgnored
                     dataFile.delete();
                 }
             } );
@@ -256,7 +260,7 @@
         {
             if( e instanceof EntityStoreException )
             {
-                throw (EntityStoreException) e;
+                throw e;
             }
             else
             {
@@ -277,8 +281,8 @@
                 output.receiveFrom( new Sender<String, IOException>()
                 {
                     @Override
-                    public <ReceiverThrowableType extends Throwable> void sendTo( Receiver<? super String, ReceiverThrowableType> receiver )
-                        throws ReceiverThrowableType, IOException
+                    public <ThrowableType extends Throwable> void sendTo( Receiver<? super String, ThrowableType> receiver )
+                        throws ThrowableType, IOException
                     {
                         for( File sliceDirectory : dataDirectory.listFiles() )
                         {
@@ -331,8 +335,8 @@
                 output.receiveFrom( new Sender<Reader, IOException>()
                 {
                     @Override
-                    public <ReceiverThrowableType extends Throwable> void sendTo( Receiver<? super Reader, ReceiverThrowableType> receiver )
-                        throws ReceiverThrowableType, IOException
+                    public <ThrowableType extends Throwable> void sendTo( Receiver<? super Reader, ThrowableType> receiver )
+                        throws ThrowableType, IOException
                     {
                         for( File sliceDirectory : dataDirectory.listFiles() )
                         {
@@ -350,15 +354,57 @@
 
     private File getDataFile( String identity )
     {
+        identity = replaceInvalidChars( identity );
         String slice = "" + ( Math.abs( identity.hashCode() ) % slices );
         File sliceDirectory = new File( dataDirectory, slice );
         if( !sliceDirectory.exists() )
         {
+            //noinspection ResultOfMethodCallIgnored
             sliceDirectory.mkdirs();
         }
         return new File( sliceDirectory, identity + ".json" );
     }
 
+    /**
+     * We need to replace all characters that some file system can't handle.
+     * <p>
+     * The resulting files should be portable across filesystems.
+     * </p>
+     *
+     * @param identity The identity that needs a file to be stored in.
+     *
+     * @return A filesystem-safe name.
+     */
+    private String replaceInvalidChars( String identity )
+    {
+        StringBuilder b = new StringBuilder( identity.length() + 30 );
+        for( int i = 0; i < identity.length(); i++ )
+        {
+            char ch = identity.charAt( i );
+            if( ( ch >= 'a' && ch <= 'z' )
+                || ( ch >= 'A' && ch <= 'Z' )
+                || ( ch >= '0' && ch <= '9' )
+                || ch == '_' || ch == '.' || ch == '-' )
+            {
+                b.append( ch );
+            }
+            else
+            {
+                int value = (int) ch;
+                b.append( '~' );
+                b.append( toHex( value ) );
+            }
+
+        }
+        return b.toString();
+    }
+
+    private String toHex( int value )
+    {
+        String result = "000" + Integer.toHexString( value );
+        return result.substring( result.length() - 4 );
+    }
+
     private File getDataFile( EntityReference ref )
     {
         return getDataFile( ref.identity() );
@@ -367,7 +413,7 @@
     private byte[] fetch( File dataFile )
         throws IOException
     {
-        byte[] buf = new byte[ 1000 ];
+        byte[] buf = new byte[1000];
         BufferedInputStream in = null;
         FileInputStream fis = null;
         try
diff --git a/extensions/entitystore-file/src/main/java/org/qi4j/entitystore/file/assembly/package.html b/extensions/entitystore-file/src/main/java/org/qi4j/entitystore/file/assembly/package.html
index ed88503..43e5c08 100644
--- a/extensions/entitystore-file/src/main/java/org/qi4j/entitystore/file/assembly/package.html
+++ b/extensions/entitystore-file/src/main/java/org/qi4j/entitystore/file/assembly/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>File EntityStore Assembly.</h2>
diff --git a/extensions/entitystore-file/src/main/java/org/qi4j/entitystore/file/package.html b/extensions/entitystore-file/src/main/java/org/qi4j/entitystore/file/package.html
index 4e6a43a..ef986c9 100644
--- a/extensions/entitystore-file/src/main/java/org/qi4j/entitystore/file/package.html
+++ b/extensions/entitystore-file/src/main/java/org/qi4j/entitystore/file/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>File EntityStore.</h2>
diff --git a/extensions/entitystore-file/src/test/java/org/qi4j/entitystore/file/FileEntityStoreWithCacheTest.java b/extensions/entitystore-file/src/test/java/org/qi4j/entitystore/file/FileEntityStoreWithCacheTest.java
new file mode 100644
index 0000000..4fd31a5
--- /dev/null
+++ b/extensions/entitystore-file/src/test/java/org/qi4j/entitystore/file/FileEntityStoreWithCacheTest.java
@@ -0,0 +1,42 @@
+/*
+ *  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.qi4j.entitystore.file;
+
+import org.qi4j.api.common.Visibility;
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.entitystore.file.assembly.FileEntityStoreAssembler;
+import org.qi4j.library.fileconfig.FileConfigurationService;
+import org.qi4j.test.EntityTestAssembler;
+import org.qi4j.test.cache.AbstractEntityStoreWithCacheTest;
+import org.qi4j.valueserialization.orgjson.OrgJsonValueSerializationAssembler;
+
+public class FileEntityStoreWithCacheTest
+    extends AbstractEntityStoreWithCacheTest
+{
+    @Override
+    public void assemble( ModuleAssembly module )
+        throws AssemblyException
+    {
+        super.assemble( module );
+        module.services( FileConfigurationService.class );
+        ModuleAssembly config = module.layer().module( "config" );
+        new EntityTestAssembler().assemble( config );
+        new OrgJsonValueSerializationAssembler().assemble( module );
+        new FileEntityStoreAssembler().withConfig( config, Visibility.layer ).assemble( module );
+    }
+}
diff --git a/extensions/entitystore-gae/NOTICE b/extensions/entitystore-gae/NOTICE
deleted file mode 100644
index 1a8e31c..0000000
--- a/extensions/entitystore-gae/NOTICE
+++ /dev/null
@@ -1,16 +0,0 @@
-Qi4j Google AppEngine Persistence Extension
-Copyright 2007-2008, The Qi4j Development Team of individuals.
-
-See http://www.qi4j.org/contributors.html for list of of individuals.
-Also see each file for additional information of Copyright claims.
-
-Qi4j is a community aggregated works under Copyright law.
-All parts of the original works at Qi4j is licensed under the
-Apache License ver 2.0 http://www.apache.org/licenses
-
-Below follows a list of binary dependencies and their licenses;
-----------------------------------------------------------------
-
-<NONE>
-
-END OF NOTICE
\ No newline at end of file
diff --git a/extensions/entitystore-gae/build.gradle b/extensions/entitystore-gae/build.gradle
deleted file mode 100644
index 4225f5d..0000000
--- a/extensions/entitystore-gae/build.gradle
+++ /dev/null
@@ -1,18 +0,0 @@
-
-description = "Qi4j Google AppEngine Extension. Utilizes the GAE data store as EntityStore for applications deployed on GAE."
-
-jar { manifest { name = "Qi4j Extension - EntityStore - Google App Engine" }}
-
-dependencies {
-
-  compile project(":org.qi4j.core:org.qi4j.core.spi" )
-  compile project(":org.qi4j.core:org.qi4j.core.bootstrap" )
-  compile project(":org.qi4j.libraries:org.qi4j.library.locking" )
-  compile libraries.appengine
-
-  testCompile project( ":org.qi4j.core:org.qi4j.core.testsupport" )
-
-  testRuntime project( ":org.qi4j.core:org.qi4j.core.runtime" )
-  testRuntime libraries.logback
-
-}
diff --git a/extensions/entitystore-gae/dev-status.xml b/extensions/entitystore-gae/dev-status.xml
deleted file mode 100644
index 5f2d3dc..0000000
--- a/extensions/entitystore-gae/dev-status.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
-        http://www.qi4j.org/schemas/2008/dev-status/1/dev-status.xsd">
-  <status>
-        <!--none,early,beta,stable,mature-->
-        <codebase>beta</codebase>
-
-        <!-- none, brief, good, complete -->
-        <documentation>none</documentation>
-
-        <!-- none, some, good, complete -->
-        <unittests>none</unittests>
-    </status>
-    <licenses>
-        <license>ALv2</license>
-    </licenses>
-</module>
\ No newline at end of file
diff --git a/extensions/entitystore-gae/src/docs/es-gae.txt b/extensions/entitystore-gae/src/docs/es-gae.txt
deleted file mode 100644
index 5647853..0000000
--- a/extensions/entitystore-gae/src/docs/es-gae.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-[[extension-es-gae,AppEngine EntityStore]]
-= Google AppEngine EntityStore =
-
-[devstatus]
---------------
-source=extensions/entitystore-gae/dev-status.xml
---------------
-
-AppEngine EntityStore
-
-NOTE: This Extension has no documentation yet. Learn how to contribute in <<community-docs>>.
-
-include::../../build/docs/buildinfo/artifact.txt[]
diff --git a/extensions/entitystore-gae/src/main/java/org/qi4j/entitystore/gae/GaeEntityState.java b/extensions/entitystore-gae/src/main/java/org/qi4j/entitystore/gae/GaeEntityState.java
deleted file mode 100644
index 0848a54..0000000
--- a/extensions/entitystore-gae/src/main/java/org/qi4j/entitystore/gae/GaeEntityState.java
+++ /dev/null
@@ -1,451 +0,0 @@
-/*
- * Copyright 2010 Niclas Hedhman.
- *
- * Licensed  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.qi4j.entitystore.gae;
-
-import com.google.appengine.api.datastore.Entity;
-import com.google.appengine.api.datastore.Key;
-import com.google.appengine.api.datastore.Text;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import org.qi4j.api.common.QualifiedName;
-import org.qi4j.api.entity.EntityDescriptor;
-import org.qi4j.api.entity.EntityReference;
-import org.qi4j.api.property.PropertyDescriptor;
-import org.qi4j.api.structure.Module;
-import org.qi4j.api.type.ValueCompositeType;
-import org.qi4j.api.type.ValueType;
-import org.qi4j.api.value.ValueSerialization;
-import org.qi4j.api.value.ValueSerializationException;
-import org.qi4j.spi.entity.EntityState;
-import org.qi4j.spi.entity.EntityStatus;
-import org.qi4j.spi.entity.ManyAssociationState;
-import org.qi4j.spi.entity.NamedAssociationState;
-
-import static org.qi4j.functional.Iterables.first;
-import static org.qi4j.functional.Iterables.toList;
-
-public class GaeEntityState
-    implements EntityState
-{
-    static final String PROPERTY_TYPE = "$type";
-
-    private final Entity entity;
-    private EntityStatus status;
-    private final GaeEntityStoreUnitOfWork unitOfWork;
-    private final ValueSerialization valueSerialization;
-    private final EntityDescriptor descriptor;
-    private final HashMap<QualifiedName, ValueType> valueTypes;
-    private final Module module;
-
-    public GaeEntityState( GaeEntityStoreUnitOfWork unitOfWork,
-                           ValueSerialization valueSerialization,
-                           Key key,
-                           EntityDescriptor descriptor,
-                           Module module )
-    {
-        System.out.println( "GaeEntityState( " + unitOfWork + ", " + key + ", " + descriptor + " )" );
-        this.module = module;
-        this.unitOfWork = unitOfWork;
-        this.valueSerialization = valueSerialization;
-        this.descriptor = descriptor;
-        entity = new Entity( key );
-        entity.setProperty( "$version", unitOfWork.identity() );
-        Class type = first( descriptor.types() );
-        String name = type.getName();
-        System.out.println( "New Entity\n" +
-                            "    descriptor:" + descriptor + "\n  " +
-                            "    entityType:" + name + "\n  " +
-                            "    name:" + name + "\n  "
-        );
-        entity.setUnindexedProperty( PROPERTY_TYPE, name );
-        status = EntityStatus.NEW;
-        valueTypes = initializeValueTypes( descriptor );
-    }
-
-    public GaeEntityState( GaeEntityStoreUnitOfWork unitOfWork,
-                           ValueSerialization valueSerialization,
-                           Entity entity,
-                           Module module )
-    {
-        System.out.println( "GaeEntityState( " + unitOfWork + ", " + entity + " )" );
-        if( entity == null )
-        {
-            throw new NullPointerException();
-        }
-        if( unitOfWork == null )
-        {
-            throw new NullPointerException();
-        }
-        this.module = module;
-        this.unitOfWork = unitOfWork;
-        this.valueSerialization = valueSerialization;
-        this.entity = entity;
-        String typeName = (String) entity.getProperty( GaeEntityState.PROPERTY_TYPE );
-        System.out.println( "LOADING [" + typeName + "]" );
-        descriptor = module.entityDescriptor( typeName );
-        status = EntityStatus.LOADED;
-        valueTypes = initializeValueTypes( descriptor );
-    }
-
-    private HashMap<QualifiedName, ValueType> initializeValueTypes( EntityDescriptor descriptor )
-    {
-        HashMap<QualifiedName, ValueType> result = new HashMap<QualifiedName, ValueType>();
-        for( PropertyDescriptor persistent : descriptor.state().properties() )
-        {
-            if( persistent.valueType() instanceof ValueCompositeType )
-            {
-                QualifiedName name = persistent.qualifiedName();
-                result.put( name, persistent.valueType() );
-            }
-        }
-        return result;
-    }
-
-    Entity entity()
-    {
-        System.out.println( "entity()  -->  " + entity );
-        return entity;
-    }
-
-    @Override
-    public EntityReference identity()
-    {
-        EntityReference ref = new EntityReference( entity.getKey().getName() );
-        System.out.println( "identity()  -->  " + ref );
-        return ref;
-    }
-
-    @Override
-    public String version()
-    {
-        String version = (String) entity.getProperty( "$version" );
-        System.out.println( "version()  -->  " + version );
-        return version;
-    }
-
-    @Override
-    public long lastModified()
-    {
-        Long lastModified = (Long) entity.getProperty( "$lastModified" );
-        System.out.println( "lastModified()  -->  " + lastModified );
-        return lastModified;
-    }
-
-    @Override
-    public void remove()
-    {
-        System.out.println( "remove()" );
-        status = EntityStatus.REMOVED;
-    }
-
-    @Override
-    public EntityStatus status()
-    {
-        System.out.println( "status()  -->  " + status );
-        return status;
-    }
-
-    @Override
-    public boolean isAssignableTo( Class<?> type )
-    {
-        System.out.println( "isAssignableTo( " + type + " )  -->  false" );
-        return false;
-    }
-
-    @Override
-    public EntityDescriptor entityDescriptor()
-    {
-        System.out.println( "entityDescriptor()  -->  " + descriptor );
-        return descriptor;
-    }
-
-    @Override
-    public Object propertyValueOf( QualifiedName stateName )
-    {
-        String uri = stateName.toURI();
-        Object value = entity.getProperty( uri );
-        if( value instanceof Text )
-        {
-            value = ( (Text) value ).getValue();
-        }
-        ValueType type = valueTypes.get( stateName );
-        if( value != null && type != null )
-        {
-            try
-            {
-                value = valueSerialization.deserialize( type, value.toString() );
-            }
-            catch( ValueSerializationException e )
-            {
-                String message = "\nqualifiedName: " + stateName +
-                                 "\n    stateName: " + stateName.name() +
-                                 "\n          uri: " + uri +
-                                 "\n         type: " + type +
-                                 "\n        value: " + value +
-                                 "\n";
-                InternalError error = new InternalError( message );
-                error.initCause( e );
-                throw error;
-            }
-        }
-        System.out.println( "getProperty( " + stateName + " )  -->  " + uri + "=" + value );
-        return value;
-    }
-
-    @Override
-    public void setPropertyValue( QualifiedName stateName, Object newValue )
-    {
-        System.out.println( "setProperty( " + stateName + ", " + newValue + " )" );
-        Object value = null;
-        if( newValue == null || ValueType.isPrimitiveValue( newValue ) )
-        {
-            value = newValue;
-        }
-        else
-        {
-            try
-            {
-                value = valueSerialization.serialize( newValue );
-            }
-            catch( ValueSerializationException e )
-            {
-                String message = "\nqualifiedName: " + stateName +
-                                 "\n    stateName: " + stateName.name() +
-                                 "\n        class: " + newValue.getClass() +
-                                 "\n        value: " + value +
-                                 "\n";
-                InternalError error = new InternalError( message );
-                error.initCause( e );
-                throw error;
-            }
-        }
-        if( value instanceof String )
-        {
-            value = new Text( (String) value );
-        }
-        entity.setUnindexedProperty( stateName.toURI(), value );
-    }
-
-    @Override
-    public EntityReference associationValueOf( QualifiedName stateName )
-    {
-        String uri = stateName.toURI();
-        String identity = (String) entity.getProperty( uri );
-        System.out.println( "association( " + stateName + " )  -->  " + uri + " = " + identity );
-        EntityReference ref = new EntityReference( identity );
-        return ref;
-    }
-
-    @Override
-    public void setAssociationValue( QualifiedName stateName, EntityReference newEntity )
-    {
-        System.out.println( "setAssociation( " + stateName + ", " + newEntity + " )" );
-        String uri = stateName.toURI();
-        String id = null;
-        if( newEntity != null )
-        {
-            id = newEntity.identity();
-        }
-        entity.setUnindexedProperty( uri, id );
-    }
-
-    @Override
-    public ManyAssociationState manyAssociationValueOf( QualifiedName stateName )
-    {
-        List<String> assocs = (List<String>) entity.getProperty( stateName.toURI() );
-        ManyAssociationState state = new GaeManyAssociationState( this, assocs );
-        return state;
-    }
-
-    @Override
-    public NamedAssociationState namedAssociationValueOf( QualifiedName stateName )
-    {
-        Map<String, String> assocs = (Map<String, String>) entity.getProperty( stateName.toURI() );
-        NamedAssociationState state = new GaeNamedAssociationState( this, assocs );
-        return state;
-    }
-
-    public void hasBeenApplied()
-    {
-        System.out.println( "hasBeenApplied()" );
-        status = EntityStatus.LOADED;
-    }
-
-    private static class GaeManyAssociationState
-        implements ManyAssociationState
-    {
-        private List<String> assocs;
-        private final GaeEntityState entityState;
-
-        public GaeManyAssociationState( GaeEntityState entityState, List<String> listOfAssociations )
-        {
-            this.entityState = entityState;
-            if( listOfAssociations == null )
-            {
-                this.assocs = new ArrayList<String>();
-            }
-            else
-            {
-                this.assocs = listOfAssociations;
-            }
-        }
-
-        @Override
-        public int count()
-        {
-            return assocs.size();
-        }
-
-        @Override
-        public boolean contains( EntityReference entityReference )
-        {
-            return assocs.contains( entityReference.identity() );
-        }
-
-        @Override
-        public boolean add( int index, EntityReference entityReference )
-        {
-            System.out.println( "NICLAS::" + entityReference );
-            String identity = entityReference.identity();
-            System.out.println( "NICLAS::" + identity );
-            System.out.println( "NICLAS::" + assocs );
-            if( assocs.contains( identity ) )
-            {
-                return false;
-            }
-            assocs.add( index, entityReference.identity() );
-            entityState.markUpdated();
-            return true;
-        }
-
-        @Override
-        public boolean remove( EntityReference entityReference )
-        {
-            return assocs.remove( entityReference.identity() );
-        }
-
-        @Override
-        public EntityReference get( int index )
-        {
-            String id = assocs.get( index );
-            return new EntityReference( id );
-        }
-
-        @Override
-        public Iterator<EntityReference> iterator()
-        {
-            ArrayList<EntityReference> result = new ArrayList<EntityReference>();
-            for( String id : assocs )
-            {
-                result.add( new EntityReference( id ) );
-            }
-            return result.iterator();
-        }
-    }
-
-    private static class GaeNamedAssociationState
-        implements NamedAssociationState
-    {
-        private final Map<String, String> assocs;
-        private final GaeEntityState entityState;
-
-        private GaeNamedAssociationState( GaeEntityState entityState, Map<String, String> associations )
-        {
-            this.entityState = entityState;
-            if( associations == null )
-            {
-                this.assocs = new HashMap<>();
-            }
-            else
-            {
-                this.assocs = associations;
-            }
-        }
-
-        @Override
-        public int count()
-        {
-            return assocs.size();
-        }
-
-        @Override
-        public boolean containsName( String name )
-        {
-            return assocs.containsKey( name );
-        }
-
-        @Override
-        public boolean put( String name, EntityReference entityReference )
-        {
-            if( assocs.containsKey( name ) && entityReference.identity().equals( assocs.get( name ) ) )
-            {
-                return false;
-            }
-            assocs.put( name, entityReference.identity() );
-            entityState.markUpdated();
-            return true;
-        }
-
-        @Override
-        public boolean remove( String name )
-        {
-            boolean removed = assocs.remove( name ) != null;
-            entityState.markUpdated();
-            return removed;
-        }
-
-        @Override
-        public EntityReference get( String name )
-        {
-            return new EntityReference( assocs.get( name ) );
-        }
-
-        @Override
-        public String nameOf( EntityReference entityReference )
-        {
-            String identity = entityReference.identity();
-            for( Map.Entry<String, String> entry : assocs.entrySet() )
-            {
-                if( identity.equals( entry.getValue() ) )
-                {
-                    return entry.getKey();
-                }
-            }
-            return null;
-        }
-
-        @Override
-        public Iterator<String> iterator()
-        {
-            return toList( assocs.keySet() ).iterator();
-        }
-
-    }
-
-    private void markUpdated()
-    {
-        if( status == EntityStatus.LOADED )
-        {
-            status = EntityStatus.UPDATED;
-        }
-    }
-}
diff --git a/extensions/entitystore-gae/src/main/java/org/qi4j/entitystore/gae/GaeEntityStoreActivation.java b/extensions/entitystore-gae/src/main/java/org/qi4j/entitystore/gae/GaeEntityStoreActivation.java
deleted file mode 100644
index e0d1221..0000000
--- a/extensions/entitystore-gae/src/main/java/org/qi4j/entitystore/gae/GaeEntityStoreActivation.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2012, Paul Merlin. All Rights Reserved.
- *
- * Licensed 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.qi4j.entitystore.gae;
-
-import org.qi4j.api.activation.ActivatorAdapter;
-import org.qi4j.api.activation.Activators;
-import org.qi4j.api.service.ServiceReference;
-
-@Activators( GaeEntityStoreActivation.Activator.class )
-public interface GaeEntityStoreActivation
-{
-
-    void activateGaeEntityStore()
-            throws Exception;
-
-    class Activator
-            extends ActivatorAdapter<ServiceReference<GaeEntityStoreActivation>>
-    {
-
-        @Override
-        public void afterActivation( ServiceReference<GaeEntityStoreActivation> activated )
-                throws Exception
-        {
-            activated.get().activateGaeEntityStore();
-        }
-
-    }
-
-}
diff --git a/extensions/entitystore-gae/src/main/java/org/qi4j/entitystore/gae/GaeEntityStoreMixin.java b/extensions/entitystore-gae/src/main/java/org/qi4j/entitystore/gae/GaeEntityStoreMixin.java
deleted file mode 100644
index e4b591d..0000000
--- a/extensions/entitystore-gae/src/main/java/org/qi4j/entitystore/gae/GaeEntityStoreMixin.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*  Copyright 2010 Niclas Hedhman
- *
- * Licensed 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.qi4j.entitystore.gae;
-
-import com.google.appengine.api.datastore.*;
-import org.qi4j.api.entity.Identity;
-import org.qi4j.api.entity.IdentityGenerator;
-import org.qi4j.api.injection.scope.Service;
-import org.qi4j.api.service.qualifier.Tagged;
-import org.qi4j.api.structure.Module;
-import org.qi4j.api.usecase.Usecase;
-import org.qi4j.api.value.ValueSerialization;
-import org.qi4j.io.Input;
-import org.qi4j.io.Output;
-import org.qi4j.io.Receiver;
-import org.qi4j.io.Sender;
-import org.qi4j.spi.entity.EntityState;
-import org.qi4j.spi.entitystore.EntityStore;
-import org.qi4j.spi.entitystore.EntityStoreException;
-import org.qi4j.spi.entitystore.EntityStoreUnitOfWork;
-
-/**
- * GAE implementation of SerializationStore
- */
-public class GaeEntityStoreMixin
-        implements GaeEntityStoreActivation, EntityStore
-{
-   private final ValueSerialization valueSerialization;
-   private final String uuid;
-   private long counter;
-   private DatastoreService datastoreService;
-
-   public GaeEntityStoreMixin( @Service IdentityGenerator uuid,
-                               @Service @Tagged( ValueSerialization.Formats.JSON ) ValueSerialization valueSerialization )
-   {
-      System.out.println("Initializing GAE EntityStore.");
-      this.uuid = uuid.generate(Identity.class) + ":";
-      this.valueSerialization = valueSerialization;
-      counter = 0L;
-   }
-
-   @Override
-   public void activateGaeEntityStore()
-           throws Exception
-   {
-      datastoreService = DatastoreServiceFactory.getDatastoreService();
-   }
-
-    @Override
-   public EntityStoreUnitOfWork newUnitOfWork( Usecase usecase, Module module, long currentTime )
-   {
-       return new GaeEntityStoreUnitOfWork( datastoreService, valueSerialization, generateId(), module, currentTime );
-   }
-
-    @Override
-   public Input<EntityState, EntityStoreException> entityStates(final Module module)
-   {
-      return new Input<EntityState, EntityStoreException>()
-      {
-         @Override
-         public <ReceiverThrowableType extends Throwable> void transferTo(Output<? super EntityState, ReceiverThrowableType> output) throws EntityStoreException, ReceiverThrowableType
-         {
-            final GaeEntityStoreUnitOfWork euow = new GaeEntityStoreUnitOfWork( datastoreService, valueSerialization,
-                                                                                generateId(), module,
-                                                                                System.currentTimeMillis() );
-            Query query = new Query();
-            PreparedQuery q = datastoreService.prepare(query);
-            final QueryResultIterable<Entity> iterable = q.asQueryResultIterable();
-
-            output.receiveFrom(new Sender<EntityState, EntityStoreException>()
-            {
-               @Override
-               public <ReceiverThrowableType extends Throwable> void sendTo(Receiver<? super EntityState, ReceiverThrowableType> receiver) throws ReceiverThrowableType, EntityStoreException
-               {
-                  for (Entity entity : iterable)
-                  {
-                     EntityState entityState = new GaeEntityState( euow, valueSerialization, entity, module );
-                     receiver.receive(entityState);
-                  }
-               }
-            });
-         }
-      };
-   }
-
-   private String generateId()
-   {
-      return uuid + counter++;
-   }
-}
\ No newline at end of file
diff --git a/extensions/entitystore-gae/src/main/java/org/qi4j/entitystore/gae/GaeEntityStoreService.java b/extensions/entitystore-gae/src/main/java/org/qi4j/entitystore/gae/GaeEntityStoreService.java
deleted file mode 100644
index c2db8df..0000000
--- a/extensions/entitystore-gae/src/main/java/org/qi4j/entitystore/gae/GaeEntityStoreService.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*  Copyright 2010 Niclas Hedhman
- *
- * Licensed 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.qi4j.entitystore.gae;
-
-import org.qi4j.api.concern.Concerns;
-import org.qi4j.api.mixin.Mixins;
-import org.qi4j.api.service.ServiceComposite;
-import org.qi4j.library.locking.LockingAbstractComposite;
-import org.qi4j.spi.entitystore.ConcurrentModificationCheckConcern;
-import org.qi4j.spi.entitystore.EntityStateVersions;
-import org.qi4j.spi.entitystore.EntityStore;
-import org.qi4j.spi.entitystore.StateChangeNotificationConcern;
-
-/**
- * EntityStore service backed by Google AppEngine's low-level store.
- */
-@Concerns( { StateChangeNotificationConcern.class, ConcurrentModificationCheckConcern.class } )
-@Mixins( { GaeEntityStoreMixin.class } )
-public interface GaeEntityStoreService
-    extends GaeEntityStoreActivation,
-            EntityStore,
-            EntityStateVersions,
-            ServiceComposite,
-            LockingAbstractComposite
-{
-}
\ No newline at end of file
diff --git a/extensions/entitystore-gae/src/main/java/org/qi4j/entitystore/gae/GaeEntityStoreUnitOfWork.java b/extensions/entitystore-gae/src/main/java/org/qi4j/entitystore/gae/GaeEntityStoreUnitOfWork.java
deleted file mode 100644
index e32786d..0000000
--- a/extensions/entitystore-gae/src/main/java/org/qi4j/entitystore/gae/GaeEntityStoreUnitOfWork.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright 2010 Niclas Hedhman.
- *
- * Licensed  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.qi4j.entitystore.gae;
-
-import com.google.appengine.api.datastore.*;
-import java.util.LinkedList;
-import org.qi4j.api.entity.EntityDescriptor;
-import org.qi4j.api.entity.EntityReference;
-import org.qi4j.api.structure.Module;
-import org.qi4j.api.value.ValueSerialization;
-import org.qi4j.spi.entity.EntityState;
-import org.qi4j.spi.entity.EntityStatus;
-import org.qi4j.spi.entitystore.EntityNotFoundException;
-import org.qi4j.spi.entitystore.EntityStoreException;
-import org.qi4j.spi.entitystore.EntityStoreUnitOfWork;
-import org.qi4j.spi.entitystore.StateCommitter;
-
-public class GaeEntityStoreUnitOfWork
-    implements EntityStoreUnitOfWork
-{
-    private final DatastoreService datastore;
-    private final ValueSerialization valueSerialization;
-    private final String identity;
-    private final Module module;
-    private final long currentTime;
-    private final LinkedList<GaeEntityState> states;
-
-    public GaeEntityStoreUnitOfWork( DatastoreService datastore,
-                                     ValueSerialization valueSerialization,
-                                     String identity,
-                                     Module module,
-                                     long currentTime )
-    {
-        this.datastore = datastore;
-        this.valueSerialization = valueSerialization;
-        this.identity = identity;
-        this.module = module;
-        this.currentTime = currentTime;
-        states = new LinkedList<GaeEntityState>();
-    }
-
-    @Override
-    public String identity()
-    {
-        return identity;
-    }
-
-    @Override
-    public long currentTime()
-    {
-        return currentTime;
-    }
-
-    @Override
-    public EntityState newEntityState( EntityReference anIdentity, EntityDescriptor entityDescriptor )
-        throws EntityStoreException
-    {
-        Key key = KeyFactory.createKey( "qi4j-entity", anIdentity.identity() );
-        GaeEntityState state = new GaeEntityState( this, valueSerialization, key, entityDescriptor, module );
-        states.add( state );
-        return state;
-    }
-
-    @Override
-    public EntityState entityStateOf( EntityReference reference )
-        throws EntityStoreException, EntityNotFoundException
-    {
-        Key key = KeyFactory.createKey( "qi4j-entity", reference.identity() );
-        try
-        {
-            Entity entity = datastore.get( key );
-            GaeEntityState state = new GaeEntityState( this, valueSerialization, entity, module );
-            states.add( state );
-            return state;
-        }
-        catch( com.google.appengine.api.datastore.EntityNotFoundException e )
-        {
-            throw new EntityNotFoundException( reference );
-        }
-    }
-
-    @Override
-    public StateCommitter applyChanges()
-        throws EntityStoreException
-    {
-        Transaction transaction = datastore.beginTransaction();
-        for( GaeEntityState state : states )
-        {
-            Entity entity = state.entity();
-            if( state.status() == EntityStatus.NEW ||
-                state.status() == EntityStatus.UPDATED )
-            {
-                datastore.put( transaction, entity );
-            }
-            if( state.status() == EntityStatus.REMOVED )
-            {
-                datastore.delete( transaction, entity.getKey() );
-            }
-        }
-        return new GaeStateCommitter( transaction );
-    }
-
-    @Override
-    public void discard()
-    {
-        // nothing to do??
-    }
-
-    private static class GaeStateCommitter
-        implements StateCommitter
-    {
-        private Transaction transaction;
-
-        public GaeStateCommitter( Transaction transaction )
-        {
-            this.transaction = transaction;
-        }
-
-        @Override
-        public void commit()
-        {
-            transaction.commit();
-        }
-
-        @Override
-        public void cancel()
-        {
-            transaction.rollback();
-        }
-    }
-}
diff --git a/extensions/entitystore-gae/src/main/java/org/qi4j/entitystore/gae/GaeIdGeneratorService.java b/extensions/entitystore-gae/src/main/java/org/qi4j/entitystore/gae/GaeIdGeneratorService.java
deleted file mode 100644
index 8e37001..0000000
--- a/extensions/entitystore-gae/src/main/java/org/qi4j/entitystore/gae/GaeIdGeneratorService.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2010 Niclas Hedhman.
- *
- * Licensed  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.qi4j.entitystore.gae;
-
-import com.google.appengine.api.datastore.DatastoreService;
-import com.google.appengine.api.datastore.DatastoreServiceFactory;
-import com.google.appengine.api.datastore.Key;
-import java.util.Iterator;
-import org.qi4j.api.entity.IdentityGenerator;
-import org.qi4j.api.mixin.Mixins;
-import org.qi4j.api.service.ServiceComposite;
-
-@Mixins( GaeIdGeneratorService.Mixin.class )
-public interface GaeIdGeneratorService
-    extends IdentityGenerator, ServiceComposite
-{
-    public class Mixin
-        implements IdentityGenerator
-    {
-        private DatastoreService datastore;
-        private ThreadLocal<Iterator<Key>> range;
-
-        public Mixin()
-        {
-            datastore = DatastoreServiceFactory.getDatastoreService();
-            range = new ThreadLocal<Iterator<Key>>()
-            {
-                @Override
-                protected Iterator<Key> initialValue()
-                {
-                    return datastore.allocateIds( "qi4j", 100 ).iterator();
-                }
-            };
-        }
-
-        @Override
-        public String generate( Class<?> compositeType )
-        {
-            if( !range.get().hasNext() )
-            {
-                range.set( datastore.allocateIds( "qi4j", 100 ).iterator() );
-            }
-            return "" + range.get().next().getId();
-        }
-    }
-}
diff --git a/extensions/entitystore-gae/src/main/java/org/qi4j/entitystore/gae2/GaeEntityStoreActivation.java b/extensions/entitystore-gae/src/main/java/org/qi4j/entitystore/gae2/GaeEntityStoreActivation.java
deleted file mode 100644
index 7dcfad2..0000000
--- a/extensions/entitystore-gae/src/main/java/org/qi4j/entitystore/gae2/GaeEntityStoreActivation.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2012, Paul Merlin. All Rights Reserved.
- *
- * Licensed 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.qi4j.entitystore.gae2;
-
-import org.qi4j.api.activation.ActivatorAdapter;
-import org.qi4j.api.activation.Activators;
-import org.qi4j.api.service.ServiceReference;
-
-/**
- * Activation for GaeEntityStoreMixin.
- */
-@Activators( GaeEntityStoreActivation.Activator.class )
-public interface GaeEntityStoreActivation
-{
-
-    void activateGaeEntityStore()
-            throws Exception;
-
-    class Activator
-            extends ActivatorAdapter<ServiceReference<GaeEntityStoreActivation>>
-    {
-
-        @Override
-        public void afterActivation( ServiceReference<GaeEntityStoreActivation> activated )
-                throws Exception
-        {
-            activated.get().activateGaeEntityStore();
-        }
-
-    }
-
-}
diff --git a/extensions/entitystore-gae/src/main/java/org/qi4j/entitystore/gae2/GaeEntityStoreConfiguration.java b/extensions/entitystore-gae/src/main/java/org/qi4j/entitystore/gae2/GaeEntityStoreConfiguration.java
deleted file mode 100644
index 554fdc5..0000000
--- a/extensions/entitystore-gae/src/main/java/org/qi4j/entitystore/gae2/GaeEntityStoreConfiguration.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2009 Niclas Hedhman.
- *
- * Licensed  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.qi4j.entitystore.gae2;
-
-import org.qi4j.api.configuration.ConfigurationComposite;
-import org.qi4j.api.property.Property;
-
-public interface GaeEntityStoreConfiguration extends ConfigurationComposite
-{
-
-    Property<String> readPolicy();
-
-    Property<Double> deadline();
-    
-    Property<String> entityKind();
-}
diff --git a/extensions/entitystore-gae/src/main/java/org/qi4j/entitystore/gae2/GaeEntityStoreMixin.java b/extensions/entitystore-gae/src/main/java/org/qi4j/entitystore/gae2/GaeEntityStoreMixin.java
deleted file mode 100644
index 88c1556..0000000
--- a/extensions/entitystore-gae/src/main/java/org/qi4j/entitystore/gae2/GaeEntityStoreMixin.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * Copyright 2009 Niclas Hedhman.
- *
- * Licensed  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.qi4j.entitystore.gae2;
-
-import com.google.appengine.api.datastore.DatastoreService;
-import com.google.appengine.api.datastore.DatastoreServiceConfig;
-import com.google.appengine.api.datastore.DatastoreServiceFactory;
-import com.google.appengine.api.datastore.Entity;
-import com.google.appengine.api.datastore.Key;
-import com.google.appengine.api.datastore.KeyFactory;
-import com.google.appengine.api.datastore.PreparedQuery;
-import com.google.appengine.api.datastore.Query;
-import com.google.appengine.api.datastore.QueryResultIterable;
-import com.google.appengine.api.datastore.ReadPolicy;
-import com.google.appengine.api.datastore.Text;
-import com.google.appengine.api.datastore.Transaction;
-import java.io.IOException;
-import java.io.Reader;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.util.concurrent.locks.ReadWriteLock;
-import org.qi4j.api.configuration.Configuration;
-import org.qi4j.api.entity.EntityDescriptor;
-import org.qi4j.api.entity.EntityReference;
-import org.qi4j.api.injection.scope.This;
-import org.qi4j.api.util.Classes;
-import org.qi4j.io.Input;
-import org.qi4j.io.Output;
-import org.qi4j.io.Receiver;
-import org.qi4j.io.Sender;
-import org.qi4j.spi.entitystore.EntityNotFoundException;
-import org.qi4j.spi.entitystore.EntityStoreException;
-import org.qi4j.spi.entitystore.helpers.MapEntityStore;
-
-import static com.google.appengine.api.datastore.DatastoreServiceConfig.Builder.withReadPolicy;
-import static org.qi4j.functional.Iterables.first;
-
-public class GaeEntityStoreMixin
-    implements GaeEntityStoreActivation, MapEntityStore
-{
-    @This
-    private ReadWriteLock lock;
-
-    @This
-    private Configuration<GaeEntityStoreConfiguration> config;
-
-    private DatastoreService datastore;
-    private String entityKind;
-
-    @Override
-    public void activateGaeEntityStore()
-        throws Exception
-    {
-        GaeEntityStoreConfiguration conf = config.get();
-        // eventually consistent reads with a 5 second deadline
-        DatastoreServiceConfig configuration =
-            withReadPolicy( new ReadPolicy( ReadPolicy.Consistency.valueOf( conf.readPolicy().get().toUpperCase() ) ) )
-                .deadline( conf.deadline().get() );
-        datastore = DatastoreServiceFactory.getDatastoreService( configuration );
-        entityKind = conf.entityKind().get();
-        System.out.println( "\nActivating Google App Engine Store" +
-                            "\n----------------------------------" +
-                            "\n      Read Policy: " + conf.readPolicy().get() +
-                            "\n         Deadline: " + conf.deadline().get() +
-                            "\n      Entity Kind: " + entityKind +
-                            "\n        Datastore: " + datastore +
-                            "\n    Configuration: " + configuration +
-                            "\n"
-        );
-    }
-
-    @Override
-    public Reader get( EntityReference ref )
-        throws EntityStoreException
-    {
-
-        try
-        {
-            Key key = KeyFactory.createKey( entityKind, ref.toURI() );
-            Entity entity = datastore.get( key );
-            Text serializedState = (Text) entity.getProperty( "value" );
-            if( serializedState == null )
-            {
-                throw new EntityNotFoundException( ref );
-            }
-            return new StringReader( serializedState.getValue() );
-        }
-        catch( com.google.appengine.api.datastore.EntityNotFoundException e )
-        {
-            e.printStackTrace();
-            throw new EntityNotFoundException( ref );
-        }
-    }
-
-    @Override
-    public void applyChanges( MapChanges changes )
-        throws IOException
-
-    {
-        final Transaction transaction = datastore.beginTransaction();
-        try
-        {
-            changes.visitMap( new GaeMapChanger( transaction ) );
-            transaction.commit();
-        }
-        catch( RuntimeException e )
-        {
-            if( transaction.isActive() )
-            {
-                transaction.rollback();
-            }
-            if( e instanceof EntityStoreException )
-            {
-                throw (EntityStoreException) e;
-            }
-            else
-            {
-                throw new IOException( e );
-            }
-        }
-    }
-
-    @Override
-    public Input<Reader, IOException> entityStates()
-    {
-        return new Input<Reader, IOException>()
-        {
-            @Override
-            public <ReceiverThrowableType extends Throwable> void transferTo( Output<? super Reader, ReceiverThrowableType> output )
-                throws IOException, ReceiverThrowableType
-            {
-                Query query = new Query();
-                PreparedQuery preparedQuery = datastore.prepare( query );
-                final QueryResultIterable<Entity> iterable = preparedQuery.asQueryResultIterable();
-
-                output.receiveFrom( new Sender<Reader, IOException>()
-                {
-                    @Override
-                    public <ReceiverThrowableType extends Throwable> void sendTo( Receiver<? super Reader, ReceiverThrowableType> receiver )
-                        throws ReceiverThrowableType, IOException
-                    {
-                        for( Entity entity : iterable )
-                        {
-                            Text serializedState = (Text) entity.getProperty( "value" );
-                            receiver.receive( new StringReader( serializedState.getValue() ) );
-                        }
-                    }
-                } );
-            }
-        };
-    }
-
-    private class GaeMapChanger
-        implements MapChanger
-    {
-        private final Transaction transaction;
-
-        public GaeMapChanger( Transaction transaction )
-        {
-            this.transaction = transaction;
-        }
-
-        @Override
-        public Writer newEntity( final EntityReference ref, final EntityDescriptor descriptor )
-        {
-            return new StringWriter( 1000 )
-            {
-                @Override
-                public void close()
-                    throws IOException
-                {
-                    super.close();
-                    Key key = KeyFactory.createKey( entityKind, ref.toURI() );
-                    Entity entity = new Entity( key );
-                    Text value = new Text( toString() );
-                    entity.setUnindexedProperty( "value", value );
-                    entity.setProperty( "ref", ref.identity() );
-                    entity.setProperty( "type", Classes.toURI( first( descriptor.types() ) ) );
-                    datastore.put( transaction, entity );
-                }
-            };
-        }
-
-        @Override
-        public Writer updateEntity( final EntityReference ref, final EntityDescriptor descriptor )
-        {
-            return new StringWriter( 1000 )
-            {
-                @Override
-                public void close()
-                    throws IOException
-                {
-                    super.close();
-                    Key key = KeyFactory.createKey( entityKind, ref.toURI() );
-                    Entity entity = new Entity( key );
-                    Text value = new Text( toString() );
-                    entity.setUnindexedProperty( "value", value );
-                    entity.setProperty( "ref", ref.identity() );
-                    entity.setProperty( "type", Classes.toURI( first( descriptor.types() ) ) );
-                    datastore.put( transaction, entity );
-                }
-            };
-        }
-
-        @Override
-        public void removeEntity( EntityReference ref, EntityDescriptor descriptor )
-            throws EntityNotFoundException
-        {
-            Key key = KeyFactory.createKey( entityKind, ref.toURI() );
-            datastore.delete( transaction, key );
-        }
-    }
-}
\ No newline at end of file
diff --git a/extensions/entitystore-gae/src/main/java/org/qi4j/entitystore/gae2/GaeEntityStoreService.java b/extensions/entitystore-gae/src/main/java/org/qi4j/entitystore/gae2/GaeEntityStoreService.java
deleted file mode 100644
index ee5f4f3..0000000
--- a/extensions/entitystore-gae/src/main/java/org/qi4j/entitystore/gae2/GaeEntityStoreService.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*  Copyright 2010 Niclas Hedhman
- *
- * Licensed 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.qi4j.entitystore.gae2;
-
-import org.qi4j.api.concern.Concerns;
-import org.qi4j.api.configuration.Configuration;
-import org.qi4j.api.mixin.Mixins;
-import org.qi4j.api.service.ServiceComposite;
-import org.qi4j.library.locking.LockingAbstractComposite;
-import org.qi4j.spi.entitystore.ConcurrentModificationCheckConcern;
-import org.qi4j.spi.entitystore.EntityStateVersions;
-import org.qi4j.spi.entitystore.EntityStore;
-import org.qi4j.spi.entitystore.StateChangeNotificationConcern;
-import org.qi4j.spi.entitystore.helpers.JSONMapEntityStoreActivation;
-import org.qi4j.spi.entitystore.helpers.JSONMapEntityStoreMixin;
-import org.qi4j.spi.entitystore.helpers.StateStore;
-
-/**
- * EntityStore service backed by Google AppEngine's low-level store.
- * <p>Based on @{@link JSONMapEntityStoreMixin}.</p>
- */
-@Concerns( { StateChangeNotificationConcern.class, ConcurrentModificationCheckConcern.class } )
-@Mixins( { JSONMapEntityStoreMixin.class, GaeEntityStoreMixin.class } )
-public interface GaeEntityStoreService
-    extends GaeEntityStoreActivation,
-            JSONMapEntityStoreActivation,
-            EntityStore,
-            EntityStateVersions,
-            StateStore,
-            ServiceComposite,
-            LockingAbstractComposite,
-            Configuration
-{
-}
\ No newline at end of file
diff --git a/extensions/entitystore-gae/src/main/resources/org.qi4j.entitystore.gae2/GaeEntityStoreService.properties b/extensions/entitystore-gae/src/main/resources/org.qi4j.entitystore.gae2/GaeEntityStoreService.properties
deleted file mode 100644
index 51c8842..0000000
--- a/extensions/entitystore-gae/src/main/resources/org.qi4j.entitystore.gae2/GaeEntityStoreService.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-readPolicy=eventual
-deadline()=0.5
-entityKind=qi4j-json
diff --git a/extensions/entitystore-gae/src/test/java/org/qi4j/entitystore/gae/readme.html b/extensions/entitystore-gae/src/test/java/org/qi4j/entitystore/gae/readme.html
deleted file mode 100644
index 5887e10..0000000
--- a/extensions/entitystore-gae/src/test/java/org/qi4j/entitystore/gae/readme.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<html>
-<body>
-<h1>EntityStore for Google App Engine</h1>
-
-<p>It is not possible to test this code fully without running within the Google AppEngine itself. Therefor the
-tests has been moved to their own module in the qi4j-tests GIT repository. The tests are not run as standard JUnit
-tests, but as a Web application itself. It uses the standard Qi4j Entity Store test suite, but the runner is
-special built for this purpose and the result comes out as a simple web page.</p>
-
-<p>You will also need a Google AppEngine account to run them.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/extensions/entitystore-hazelcast/NOTICE b/extensions/entitystore-hazelcast/NOTICE
deleted file mode 100644
index f4c3062..0000000
--- a/extensions/entitystore-hazelcast/NOTICE
+++ /dev/null
@@ -1,18 +0,0 @@
-Qi4j Hazelcast Persistence Extension
-Copyright 2007-2008, The Qi4j Development Team of individuals.
-
-See http://www.qi4j.org/contributors.html for list of of individuals.
-Also see each file for additional information of Copyright claims.
-
-Qi4j is a community aggregated works under Copyright law.
-All parts of the original works at Qi4j is licensed under the
-Apache License ver 2.0 http://www.apache.org/licenses
-
-Below follows a list of binary dependencies and their licenses;
-----------------------------------------------------------------
-
-This module includes software developed by the Hazelcast Project
-(http://www.hazelcast.com), under Apache License 2.0. See LICENSE
-
-
-END OF NOTICE
\ No newline at end of file
diff --git a/extensions/entitystore-hazelcast/build.gradle b/extensions/entitystore-hazelcast/build.gradle
index d4dfa43..edce38d 100644
--- a/extensions/entitystore-hazelcast/build.gradle
+++ b/extensions/entitystore-hazelcast/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j Hazelcast EntityStore Extension"
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Extension - EntityStore - Hazelcast" }}
+description = "Apache Zest™ Hazelcast EntityStore Extension"
+
+jar { manifest { name = "Apache Zest™ Extension - EntityStore - Hazelcast" }}
 
 dependencies {
 
diff --git a/extensions/entitystore-hazelcast/dev-status.xml b/extensions/entitystore-hazelcast/dev-status.xml
index 50d26d3..ac63cda 100644
--- a/extensions/entitystore-hazelcast/dev-status.xml
+++ b/extensions/entitystore-hazelcast/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/extensions/entitystore-hazelcast/src/docs/es-hazelcast.txt b/extensions/entitystore-hazelcast/src/docs/es-hazelcast.txt
index 9e98a86..e9b3dbf 100644
--- a/extensions/entitystore-hazelcast/src/docs/es-hazelcast.txt
+++ b/extensions/entitystore-hazelcast/src/docs/es-hazelcast.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[extension-es-hazelcast, Hazelcast EntityStore]]
 = Hazelcast EntityStore =
 
diff --git a/extensions/entitystore-hazelcast/src/main/java/org/qi4j/entitystore/hazelcast/HazelcastEntityStoreMixin.java b/extensions/entitystore-hazelcast/src/main/java/org/qi4j/entitystore/hazelcast/HazelcastEntityStoreMixin.java
index 501b34b..ebc54a0 100644
--- a/extensions/entitystore-hazelcast/src/main/java/org/qi4j/entitystore/hazelcast/HazelcastEntityStoreMixin.java
+++ b/extensions/entitystore-hazelcast/src/main/java/org/qi4j/entitystore/hazelcast/HazelcastEntityStoreMixin.java
@@ -157,8 +157,8 @@
                 output.receiveFrom( new Sender<Reader, IOException>()
                 {
                     @Override
-                    public <ReceiverThrowableType extends Throwable> void sendTo( Receiver<? super Reader, ReceiverThrowableType> receiver )
-                        throws ReceiverThrowableType, IOException
+                    public <RTT extends Throwable> void sendTo( Receiver<? super Reader, RTT> receiver )
+                        throws RTT, IOException
                     {
                         for( Map.Entry<String, String> eachEntry : stringMap.entrySet() )
                         {
diff --git a/extensions/entitystore-hazelcast/src/main/java/org/qi4j/entitystore/hazelcast/assembly/package.html b/extensions/entitystore-hazelcast/src/main/java/org/qi4j/entitystore/hazelcast/assembly/package.html
index 0b6113d..297a76b 100644
--- a/extensions/entitystore-hazelcast/src/main/java/org/qi4j/entitystore/hazelcast/assembly/package.html
+++ b/extensions/entitystore-hazelcast/src/main/java/org/qi4j/entitystore/hazelcast/assembly/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Hazelcast EntityStore Assembly.</h2>
diff --git a/extensions/entitystore-hazelcast/src/main/java/org/qi4j/entitystore/hazelcast/package.html b/extensions/entitystore-hazelcast/src/main/java/org/qi4j/entitystore/hazelcast/package.html
index 171fd52..9a06db0 100644
--- a/extensions/entitystore-hazelcast/src/main/java/org/qi4j/entitystore/hazelcast/package.html
+++ b/extensions/entitystore-hazelcast/src/main/java/org/qi4j/entitystore/hazelcast/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Hazelcast EntityStore.</h2>
diff --git a/extensions/entitystore-hazelcast/src/test/java/org/qi4j/entitystore/hazelcast/HazelcastEntityStoreWithCacheTest.java b/extensions/entitystore-hazelcast/src/test/java/org/qi4j/entitystore/hazelcast/HazelcastEntityStoreWithCacheTest.java
new file mode 100644
index 0000000..8b8f032
--- /dev/null
+++ b/extensions/entitystore-hazelcast/src/test/java/org/qi4j/entitystore/hazelcast/HazelcastEntityStoreWithCacheTest.java
@@ -0,0 +1,40 @@
+/*
+ *  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.qi4j.entitystore.hazelcast;
+
+import org.qi4j.api.common.Visibility;
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.entitystore.hazelcast.assembly.HazelcastEntityStoreAssembler;
+import org.qi4j.test.EntityTestAssembler;
+import org.qi4j.test.cache.AbstractEntityStoreWithCacheTest;
+import org.qi4j.valueserialization.orgjson.OrgJsonValueSerializationAssembler;
+
+public class HazelcastEntityStoreWithCacheTest
+    extends AbstractEntityStoreWithCacheTest
+{
+    @Override
+    public void assemble( ModuleAssembly module )
+        throws AssemblyException
+    {
+        super.assemble( module );
+        ModuleAssembly config = module.layer().module( "config" );
+        new EntityTestAssembler().assemble( config );
+        new OrgJsonValueSerializationAssembler().assemble( module );
+        new HazelcastEntityStoreAssembler().withConfig( config, Visibility.layer ).assemble( module );
+    }
+}
diff --git a/extensions/entitystore-hazelcast/src/test/resources/org/qi4j/entitystore/hazelcast/HazelcastEntityStoreService.properties b/extensions/entitystore-hazelcast/src/test/resources/org/qi4j/entitystore/hazelcast/HazelcastEntityStoreService.properties
index acc92c1..69cf7eb 100644
--- a/extensions/entitystore-hazelcast/src/test/resources/org/qi4j/entitystore/hazelcast/HazelcastEntityStoreService.properties
+++ b/extensions/entitystore-hazelcast/src/test/resources/org/qi4j/entitystore/hazelcast/HazelcastEntityStoreService.properties
@@ -1 +1,16 @@
+# 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.
+
 mapName=qi4j.data
\ No newline at end of file
diff --git a/extensions/entitystore-hazelcast/src/test/resources/org/qi4j/entitystore/hazelcast/hazelcast.xml b/extensions/entitystore-hazelcast/src/test/resources/org/qi4j/entitystore/hazelcast/hazelcast.xml
index c7693de..28b13fa 100644
--- a/extensions/entitystore-hazelcast/src/test/resources/org/qi4j/entitystore/hazelcast/hazelcast.xml
+++ b/extensions/entitystore-hazelcast/src/test/resources/org/qi4j/entitystore/hazelcast/hazelcast.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
 <hazelcast>
   <map name="qi4j.data">
     <map-store enabled="true">
diff --git a/extensions/entitystore-jclouds/build.gradle b/extensions/entitystore-jclouds/build.gradle
index 413503b..23596c3 100644
--- a/extensions/entitystore-jclouds/build.gradle
+++ b/extensions/entitystore-jclouds/build.gradle
@@ -1,19 +1,39 @@
-description = "Qi4j JClouds EntityStore Extension"
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Extension - EntityStore - JClouds" }}
+description = "Apache Zest™ JClouds EntityStore Extension"
+
+jar { manifest { name = "Apache Zest™ Extension - EntityStore - JClouds" } }
 
 dependencies {
 
-    compile project( ":org.qi4j.core:org.qi4j.core.bootstrap" )
-    compile project( ":org.qi4j.libraries:org.qi4j.library.locking" )
-    compile libraries.jclouds_core
-    compile libraries.jclouds_blobstore
+  compile project( ":org.qi4j.core:org.qi4j.core.bootstrap" )
+  compile project( ":org.qi4j.libraries:org.qi4j.library.locking" )
+  compile libraries.slf4j_api
+  compile libraries.jclouds_core
+  compile libraries.jclouds_blobstore
 
-    testCompile project( ":org.qi4j.core:org.qi4j.core.testsupport" )
-    testCompile(project(":org.qi4j.extensions:org.qi4j.extension.valueserialization-orgjson"))
+  testCompile project( ":org.qi4j.core:org.qi4j.core.testsupport" )
+  testCompile( project( ":org.qi4j.extensions:org.qi4j.extension.valueserialization-orgjson" ) )
+  testCompile libraries.jclouds_filesystem
 
-    testRuntime project( ":org.qi4j.core:org.qi4j.core.runtime" )
-    testRuntime libraries.logback
-
+  testRuntime project( ":org.qi4j.core:org.qi4j.core.runtime" )
+  testRuntime libraries.logback
 }
 
diff --git a/extensions/entitystore-jclouds/dev-status.xml b/extensions/entitystore-jclouds/dev-status.xml
index 5ca6b43..7b2bb11 100644
--- a/extensions/entitystore-jclouds/dev-status.xml
+++ b/extensions/entitystore-jclouds/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/extensions/entitystore-jclouds/src/docs/es-jclouds.txt b/extensions/entitystore-jclouds/src/docs/es-jclouds.txt
index fcf107b..baaddf2 100644
--- a/extensions/entitystore-jclouds/src/docs/es-jclouds.txt
+++ b/extensions/entitystore-jclouds/src/docs/es-jclouds.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[extension-es-jclouds,JClouds EntityStore]]
 = JClouds EntityStore =
 
diff --git a/extensions/entitystore-jclouds/src/main/java/org/qi4j/entitystore/jclouds/package.html b/extensions/entitystore-jclouds/src/main/java/org/qi4j/entitystore/jclouds/package.html
index aad0491..d43de1a 100644
--- a/extensions/entitystore-jclouds/src/main/java/org/qi4j/entitystore/jclouds/package.html
+++ b/extensions/entitystore-jclouds/src/main/java/org/qi4j/entitystore/jclouds/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>JClouds BlobStore EntityStore.</h2>
diff --git a/extensions/entitystore-jclouds/src/test/java/org/qi4j/entitystore/jclouds/JCloudsWithCacheTest.java b/extensions/entitystore-jclouds/src/test/java/org/qi4j/entitystore/jclouds/JCloudsWithCacheTest.java
new file mode 100644
index 0000000..ab473c7
--- /dev/null
+++ b/extensions/entitystore-jclouds/src/test/java/org/qi4j/entitystore/jclouds/JCloudsWithCacheTest.java
@@ -0,0 +1,39 @@
+/*
+ *  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.qi4j.entitystore.jclouds;
+
+import org.qi4j.api.common.Visibility;
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.test.EntityTestAssembler;
+import org.qi4j.test.cache.AbstractEntityStoreWithCacheTest;
+import org.qi4j.valueserialization.orgjson.OrgJsonValueSerializationAssembler;
+
+public class JCloudsWithCacheTest
+    extends AbstractEntityStoreWithCacheTest
+{
+    @Override
+    public void assemble( ModuleAssembly module )
+        throws AssemblyException
+    {
+        super.assemble( module );
+        ModuleAssembly config = module.layer().module( "config" );
+        new EntityTestAssembler().assemble( config );
+        new OrgJsonValueSerializationAssembler().assemble( module );
+        new JCloudsMapEntityStoreAssembler().withConfig( config, Visibility.layer ).assemble( module );
+    }
+}
diff --git a/extensions/entitystore-jdbm/NOTICE b/extensions/entitystore-jdbm/NOTICE
deleted file mode 100644
index 423eb34..0000000
--- a/extensions/entitystore-jdbm/NOTICE
+++ /dev/null
@@ -1,18 +0,0 @@
-Qi4j JDBM Persistence Extension
-Copyright 2007-2008, The Qi4j Development Team of individuals.
-
-See http://www.qi4j.org/contributors.html for list of of individuals.
-Also see each file for additional information of Copyright claims.
-
-Qi4j is a community aggregated works under Copyright law.
-All parts of the original works at Qi4j is licensed under the
-Apache License ver 2.0 http://www.apache.org/licenses
-
-Below follows a list of binary dependencies and their licenses;
-----------------------------------------------------------------
-
-This module uses JDBM, software developed at http://jdbm.sf.net by
-Cees de Groot and Alex Boisvert. See licenses/jdbm.license
-
-
-END OF NOTICE
\ No newline at end of file
diff --git a/extensions/entitystore-jdbm/build.gradle b/extensions/entitystore-jdbm/build.gradle
index 9400cb6..c317c15 100644
--- a/extensions/entitystore-jdbm/build.gradle
+++ b/extensions/entitystore-jdbm/build.gradle
@@ -1,7 +1,25 @@
+/*
+ * 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.
+ */
 
-description = "Qi4j JDBM EntityStore Extension"
+description = "Apache Zest™ JDBM EntityStore Extension"
 
-jar { manifest {name = "Qi4j Extension - EntityStore - JDBM" }}
+jar { manifest {name = "Apache Zest™ Extension - EntityStore - JDBM" }}
 
 dependencies {
 
diff --git a/extensions/entitystore-jdbm/dev-status.xml b/extensions/entitystore-jdbm/dev-status.xml
index 50d26d3..ac63cda 100644
--- a/extensions/entitystore-jdbm/dev-status.xml
+++ b/extensions/entitystore-jdbm/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/extensions/entitystore-jdbm/src/docs/es-jdbm.txt b/extensions/entitystore-jdbm/src/docs/es-jdbm.txt
index eaebd50..7a90daa 100644
--- a/extensions/entitystore-jdbm/src/docs/es-jdbm.txt
+++ b/extensions/entitystore-jdbm/src/docs/es-jdbm.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[extension-es-jdbm, JDBM EntityStore]]
 = JDBM EntityStore =
 
diff --git a/extensions/entitystore-jdbm/src/main/java/org/qi4j/entitystore/jdbm/assembly/package.html b/extensions/entitystore-jdbm/src/main/java/org/qi4j/entitystore/jdbm/assembly/package.html
index cc5fc75..ebb37ee 100644
--- a/extensions/entitystore-jdbm/src/main/java/org/qi4j/entitystore/jdbm/assembly/package.html
+++ b/extensions/entitystore-jdbm/src/main/java/org/qi4j/entitystore/jdbm/assembly/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>JDBM EntityStore Assembly.</h2>
diff --git a/extensions/entitystore-jdbm/src/main/java/org/qi4j/entitystore/jdbm/package.html b/extensions/entitystore-jdbm/src/main/java/org/qi4j/entitystore/jdbm/package.html
index ad32b27..8a0ef8f 100644
--- a/extensions/entitystore-jdbm/src/main/java/org/qi4j/entitystore/jdbm/package.html
+++ b/extensions/entitystore-jdbm/src/main/java/org/qi4j/entitystore/jdbm/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>JDBM EntityStore.</h2>
diff --git a/extensions/entitystore-jdbm/src/test/java/org/qi4j/entitystore/jdbm/JdbmEntityStoreWithCacheTest.java b/extensions/entitystore-jdbm/src/test/java/org/qi4j/entitystore/jdbm/JdbmEntityStoreWithCacheTest.java
new file mode 100644
index 0000000..f5ded45
--- /dev/null
+++ b/extensions/entitystore-jdbm/src/test/java/org/qi4j/entitystore/jdbm/JdbmEntityStoreWithCacheTest.java
@@ -0,0 +1,54 @@
+/*
+ *  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.qi4j.entitystore.jdbm;
+
+import org.junit.Before;
+import org.qi4j.api.common.Visibility;
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.entitystore.jdbm.assembly.JdbmEntityStoreAssembler;
+import org.qi4j.library.fileconfig.FileConfiguration;
+import org.qi4j.library.fileconfig.FileConfigurationDataWiper;
+import org.qi4j.library.fileconfig.FileConfigurationService;
+import org.qi4j.test.EntityTestAssembler;
+import org.qi4j.test.cache.AbstractEntityStoreWithCacheTest;
+import org.qi4j.valueserialization.orgjson.OrgJsonValueSerializationAssembler;
+
+public class JdbmEntityStoreWithCacheTest
+    extends AbstractEntityStoreWithCacheTest
+{
+    @Before
+    public void testDataCleanup()
+    {
+        FileConfiguration fileConfig = module.findService( FileConfiguration.class ).get();
+        FileConfigurationDataWiper.registerApplicationPassivationDataWiper( fileConfig, application );
+    }
+
+    @Override
+    public void assemble( ModuleAssembly module )
+        throws AssemblyException
+    {
+        super.assemble( module );
+
+        ModuleAssembly config = module.layer().module( "config" );
+        config.services( FileConfigurationService.class ).visibleIn( Visibility.layer ).instantiateOnStartup();
+        new EntityTestAssembler().assemble( config );
+
+        new OrgJsonValueSerializationAssembler().assemble( module );
+        new JdbmEntityStoreAssembler().withConfig( config, Visibility.layer ).assemble( module );
+    }
+}
diff --git a/extensions/entitystore-leveldb/build.gradle b/extensions/entitystore-leveldb/build.gradle
index cc4f3e9..de2a431 100644
--- a/extensions/entitystore-leveldb/build.gradle
+++ b/extensions/entitystore-leveldb/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j LevelDB EntityStore Extension"
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Extension - EntityStore - LevelDB" }}
+description = "Apache Zest™ LevelDB EntityStore Extension"
+
+jar { manifest { name = "Apache Zest™ Extension - EntityStore - LevelDB" }}
 
 dependencies {
 
diff --git a/extensions/entitystore-leveldb/dev-status.xml b/extensions/entitystore-leveldb/dev-status.xml
index 41397c6..91d4a63 100644
--- a/extensions/entitystore-leveldb/dev-status.xml
+++ b/extensions/entitystore-leveldb/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/extensions/entitystore-leveldb/src/docs/es-leveldb.txt b/extensions/entitystore-leveldb/src/docs/es-leveldb.txt
index 208164c..ffbc16a 100644
--- a/extensions/entitystore-leveldb/src/docs/es-leveldb.txt
+++ b/extensions/entitystore-leveldb/src/docs/es-leveldb.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[extension-es-leveldb,LevelDB EntityStore]]
 = LevelDB EntityStore =
 
diff --git a/extensions/entitystore-leveldb/src/main/java/org/qi4j/entitystore/leveldb/package.html b/extensions/entitystore-leveldb/src/main/java/org/qi4j/entitystore/leveldb/package.html
index 05c3828..720a3ff 100644
--- a/extensions/entitystore-leveldb/src/main/java/org/qi4j/entitystore/leveldb/package.html
+++ b/extensions/entitystore-leveldb/src/main/java/org/qi4j/entitystore/leveldb/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>LevelDB EntityStore.</h2>
@@ -8,7 +24,7 @@
         <p>
             By default use the native implementation through JNI bindings and fallback to the pure java implementation
             if not available on the current platform. Used implementation can be forced using the
-            {@link LevelDBEntityStoreConfiguration#flavour()} property.
+            {@link org.qi4j.entitystore.leveldb.LevelDBEntityStoreConfiguration#flavour()} property.
         </p>
         <p>See:</p>
         <ul>
diff --git a/extensions/entitystore-leveldb/src/test/java/org/qi4j/entitystore/leveldb/LevelDBEntityStoreWithCacheTest.java b/extensions/entitystore-leveldb/src/test/java/org/qi4j/entitystore/leveldb/LevelDBEntityStoreWithCacheTest.java
new file mode 100644
index 0000000..71b7bdf
--- /dev/null
+++ b/extensions/entitystore-leveldb/src/test/java/org/qi4j/entitystore/leveldb/LevelDBEntityStoreWithCacheTest.java
@@ -0,0 +1,46 @@
+/*
+ *  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.qi4j.entitystore.leveldb;
+
+import org.qi4j.api.common.Visibility;
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.library.fileconfig.FileConfigurationService;
+import org.qi4j.test.EntityTestAssembler;
+import org.qi4j.test.cache.AbstractEntityStoreWithCacheTest;
+import org.qi4j.valueserialization.orgjson.OrgJsonValueSerializationAssembler;
+
+public class LevelDBEntityStoreWithCacheTest
+    extends AbstractEntityStoreWithCacheTest
+{
+    @Override
+    public void assemble( ModuleAssembly module )
+        throws AssemblyException
+    {
+        super.assemble( module );
+        ModuleAssembly config = module.layer().module( "config" );
+        new EntityTestAssembler().visibleIn( Visibility.module ).assemble( config );
+        new OrgJsonValueSerializationAssembler().assemble( module );
+
+        module.services( FileConfigurationService.class );
+
+        new LevelDBEntityStoreAssembler().
+            withConfig( config, Visibility.layer ).
+            identifiedBy( "java-leveldb-entitystore" ).
+            assemble( module );
+    }
+}
diff --git a/extensions/entitystore-memory/build.gradle b/extensions/entitystore-memory/build.gradle
index 23abd29..97f1f31 100644
--- a/extensions/entitystore-memory/build.gradle
+++ b/extensions/entitystore-memory/build.gradle
@@ -1,4 +1,23 @@
-jar { manifest { name = "Qi4j Extension - EntityStore - Memory" }}
+/*
+ * 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.
+ */
+
+jar { manifest { name = "Apache Zest™ Extension - EntityStore - Memory" }}
 
 dependencies {
 
diff --git a/extensions/entitystore-memory/dev-status.xml b/extensions/entitystore-memory/dev-status.xml
index 9af9b6b..73ed2b0 100644
--- a/extensions/entitystore-memory/dev-status.xml
+++ b/extensions/entitystore-memory/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/extensions/entitystore-memory/src/docs/es-memory.txt b/extensions/entitystore-memory/src/docs/es-memory.txt
index b0e2fcd..93da628 100644
--- a/extensions/entitystore-memory/src/docs/es-memory.txt
+++ b/extensions/entitystore-memory/src/docs/es-memory.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[extension-es-memory, Memory EntityStore]]
 = Memory EntityStore =
 
diff --git a/extensions/entitystore-memory/src/main/java/org/qi4j/entitystore/memory/package.html b/extensions/entitystore-memory/src/main/java/org/qi4j/entitystore/memory/package.html
index ab810ef..d907b6c 100644
--- a/extensions/entitystore-memory/src/main/java/org/qi4j/entitystore/memory/package.html
+++ b/extensions/entitystore-memory/src/main/java/org/qi4j/entitystore/memory/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>In-Memory EntityStore.</h2>
diff --git a/extensions/entitystore-memory/src/test/java/org/qi4j/entitystore/memory/MemoryEntityStoreWithCacheTest.java b/extensions/entitystore-memory/src/test/java/org/qi4j/entitystore/memory/MemoryEntityStoreWithCacheTest.java
new file mode 100644
index 0000000..3a1c72c
--- /dev/null
+++ b/extensions/entitystore-memory/src/test/java/org/qi4j/entitystore/memory/MemoryEntityStoreWithCacheTest.java
@@ -0,0 +1,35 @@
+/*
+ *  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.qi4j.entitystore.memory;
+
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.test.cache.AbstractEntityStoreWithCacheTest;
+import org.qi4j.valueserialization.orgjson.OrgJsonValueSerializationAssembler;
+
+public class MemoryEntityStoreWithCacheTest
+    extends AbstractEntityStoreWithCacheTest
+{
+    @Override
+    public void assemble( ModuleAssembly module )
+        throws AssemblyException
+    {
+        super.assemble( module );
+        new OrgJsonValueSerializationAssembler().assemble( module );
+        new MemoryEntityStoreAssembler().assemble( module );
+    }
+}
diff --git a/extensions/entitystore-mongodb/.gitignore b/extensions/entitystore-mongodb/.gitignore
deleted file mode 100644
index db51b75..0000000
--- a/extensions/entitystore-mongodb/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-pom.xml
-target
-nb-configuration.xml
diff --git a/extensions/entitystore-mongodb/build.gradle b/extensions/entitystore-mongodb/build.gradle
index 32e99c8..9570a1f 100644
--- a/extensions/entitystore-mongodb/build.gradle
+++ b/extensions/entitystore-mongodb/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j MongoDB EntityStore Extension"
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Extension - EntityStore - MongoDB" }}
+description = "Apache Zest™ MongoDB EntityStore Extension"
+
+jar { manifest { name = "Apache Zest™ Extension - EntityStore - MongoDB" }}
 
 dependencies {
 
diff --git a/extensions/entitystore-mongodb/dev-status.xml b/extensions/entitystore-mongodb/dev-status.xml
index 50d26d3..ac63cda 100644
--- a/extensions/entitystore-mongodb/dev-status.xml
+++ b/extensions/entitystore-mongodb/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/extensions/entitystore-mongodb/src/docs/es-mongodb.txt b/extensions/entitystore-mongodb/src/docs/es-mongodb.txt
index ec2231d..c24746f 100644
--- a/extensions/entitystore-mongodb/src/docs/es-mongodb.txt
+++ b/extensions/entitystore-mongodb/src/docs/es-mongodb.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[extension-es-mongodb,MongoDB EntityStore]]
 = MongoDB EntityStore =
 
diff --git a/extensions/entitystore-mongodb/src/main/java/org/qi4j/entitystore/mongodb/package.html b/extensions/entitystore-mongodb/src/main/java/org/qi4j/entitystore/mongodb/package.html
index 0604dc7..0e9cc54 100644
--- a/extensions/entitystore-mongodb/src/main/java/org/qi4j/entitystore/mongodb/package.html
+++ b/extensions/entitystore-mongodb/src/main/java/org/qi4j/entitystore/mongodb/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>MongoDB EntityStore.</h2>
diff --git a/extensions/entitystore-mongodb/src/test/java/org/qi4j/entitystore/mongodb/MongoMapEntityStoreWithCacheTest.java b/extensions/entitystore-mongodb/src/test/java/org/qi4j/entitystore/mongodb/MongoMapEntityStoreWithCacheTest.java
new file mode 100644
index 0000000..7daec24
--- /dev/null
+++ b/extensions/entitystore-mongodb/src/test/java/org/qi4j/entitystore/mongodb/MongoMapEntityStoreWithCacheTest.java
@@ -0,0 +1,83 @@
+/*
+ *  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.qi4j.entitystore.mongodb;
+
+import com.mongodb.Mongo;
+import org.junit.BeforeClass;
+import org.qi4j.api.common.Visibility;
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.test.EntityTestAssembler;
+import org.qi4j.test.cache.AbstractEntityStoreWithCacheTest;
+import org.qi4j.valueserialization.orgjson.OrgJsonValueSerializationAssembler;
+
+import static org.qi4j.test.util.Assume.assumeConnectivity;
+
+/**
+ * Test the MongoMapEntityStoreService usage with a CachePool.
+ * <p>Installing mongodb and starting it should suffice as the test use mongodb defaults: 127.0.0.1:27017</p>
+ */
+public class MongoMapEntityStoreWithCacheTest
+    extends AbstractEntityStoreWithCacheTest
+{
+    @BeforeClass
+    public static void beforeRedisMapEntityStoreTests()
+    {
+        assumeConnectivity( "localhost", 27017 );
+    }
+
+    @Override
+    public void assemble( ModuleAssembly module )
+        throws AssemblyException
+    {
+        super.assemble( module );
+
+        ModuleAssembly config = module.layer().module( "config" );
+        new EntityTestAssembler().assemble( config );
+
+        new OrgJsonValueSerializationAssembler().assemble( module );
+
+        new MongoMapEntityStoreAssembler().withConfig( config, Visibility.layer ).assemble( module );
+
+        MongoEntityStoreConfiguration mongoConfig = config.forMixin( MongoEntityStoreConfiguration.class ).declareDefaults();
+        mongoConfig.writeConcern().set( MongoEntityStoreConfiguration.WriteConcern.FSYNC_SAFE );
+        mongoConfig.database().set( "qi4j:test" );
+        mongoConfig.collection().set( "qi4j:test:entities" );
+    }
+
+    private Mongo mongo;
+    private String dbName;
+
+    @Override
+    public void setUp()
+        throws Exception
+    {
+        super.setUp();
+        MongoMapEntityStoreService es = module.findService( MongoMapEntityStoreService.class ).get();
+        mongo = es.mongoInstanceUsed();
+        dbName = es.dbInstanceUsed().getName();
+
+    }
+
+    @Override
+    public void tearDown()
+        throws Exception
+    {
+        mongo.dropDatabase( dbName );
+        super.tearDown();
+    }
+}
diff --git a/extensions/entitystore-neo4j/NOTICE.txt b/extensions/entitystore-neo4j/NOTICE.txt
deleted file mode 100644
index 478e958..0000000
--- a/extensions/entitystore-neo4j/NOTICE.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-Copyright 2008 Neo Technology, http://neotechnology.com.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this component 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.
-
-
-Please note that this component depends on Neo4J (http://neo4j.org)
-which is distributed under the terms of the GNU Affero General
-Public License as published by the Free Software Foundation, either
-version 3 of the License, or (at your option) any later version.
-Neo Technology also provides a distribution of Neo4J under a
-commercial license at http://neotechnology.com.
-
-Any software that depends on Neo4J and this component is therefore
-subjected to any additional license details stated by the License
-of Neo4J.
\ No newline at end of file
diff --git a/extensions/entitystore-neo4j/build.gradle b/extensions/entitystore-neo4j/build.gradle
deleted file mode 100644
index 4fff878..0000000
--- a/extensions/entitystore-neo4j/build.gradle
+++ /dev/null
@@ -1,17 +0,0 @@
-
-description = "Qi4j Neo4j EntityStore Extension"
-
-jar { manifest { name = "Qi4j Extension - EntityStore - Neo4j" }}
-
-dependencies {
-  compile(project(":org.qi4j.core:org.qi4j.core.spi"))
-  compile(project(":org.qi4j.libraries:org.qi4j.library.fileconfig"))
-  compile(libraries.neo4j)
-
-  testCompile(project(":org.qi4j.core:org.qi4j.core.testsupport"))
-  testCompile(project(":org.qi4j.extensions:org.qi4j.extension.valueserialization-orgjson"))
-
-  testRuntime(project(":org.qi4j.core:org.qi4j.core.runtime"))
-  testRuntime(libraries.logback)
-}
-
diff --git a/extensions/entitystore-neo4j/dev-status.xml b/extensions/entitystore-neo4j/dev-status.xml
deleted file mode 100644
index 8078e77..0000000
--- a/extensions/entitystore-neo4j/dev-status.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
-        http://www.qi4j.org/schemas/2008/dev-status/1/dev-status.xsd">
-  <status>
-        <!--none,early,beta,stable,mature-->
-        <codebase>beta</codebase>
-
-        <!-- none, brief, good, complete -->
-        <documentation>brief</documentation>
-
-        <!-- none, some, good, complete -->
-        <unittests>some</unittests>
-    </status>
-    <licenses>
-        <license>ALv2</license>
-        <license>AGPLv3</license>
-    </licenses>
-</module>
diff --git a/extensions/entitystore-neo4j/license-explain.txt b/extensions/entitystore-neo4j/license-explain.txt
deleted file mode 100644
index f3ed0b5..0000000
--- a/extensions/entitystore-neo4j/license-explain.txt
+++ /dev/null
@@ -1,68 +0,0 @@
-
-Please note that this module has a dependency on a GNU Affero General Public License
-version 3 (AGPLv3), not to be mistaken for the GNU General Public License version 3
-(GPLv3). The main difference is that "distribution" in GPLv3 is extended to include
-"usage", for instance if an application can be used from a web service, the user
-has roughly the equivalent rights of "distribution" under GPLv3.
-
-To clarify the intent of Neo4j licensing in the context of Qi4j's Neo4j Entity Store
-the following mail from qi4j-dev@lists.ops4j.org captures the understanding of
-the license. Please note that this is not legal advice, and if in doubt, please
-consult your legal counsel.
-
-- o - o - o - o - o -
-
-On Mon, Jul 28, 2008 at 8:35 AM, Niclas Hedhman <niclas@hedhman.org> wrote:
->
-> Everyone (especially Emil),
->
-> Please READ the NOTICE.txt before using the "Entity Store - Neo4j". Although
-> the EnityStore itself is under the Apache License ver 2.0, it has a
-> dependency on Neo4j itself, which is licensed under GNU Affero General Public
-> License version 3 or later.
->
-> In essence, this means that you are allowed to USE the combined work for
-> yourself without limitations, as long as noone else uses it, directly or
-> indirectly. That means, if you create an application and distribute, or if
-> you put an application on a web server, with users accessing it, then you
-> MUST provide the sources of the combined work to anyone asking for it.
-
-Correct.
-
->
-> There is a "gray zone" which I would like to hear the clarification by Emil.
->
-> <scenario>
-> Person A develops some funky closed-source web application, based on Qi4j.
->
-> Person B buys that application, but configures it to use the Neo4j Entity
-> Store and the Neo4j Engine.
-> </scenario>
->
-> Person A is not violating any license. Person B is not violating the license
-> received from Person A. But is Person B violating the GNU Affero General
-> Public License, by not having the authority to provide the sources for the
-> web application product itself???
-
-Yes.
-
-Person B is only allowed to use Neo4j if they follow the terms in the
-license under which they received it. In Neo4j's case, they have two
-choices: use it under the AGPLv3 license or the commercial license. If
-they use Neo4j under AGPLv3, then in order to comply with the terms of
-the AGPLv3 they must provide the full source code to the combined work
-(including the webapp's code) to any users of said webapp. In that
-case, they can't comply with one of the terms (freedom 1, access to
-source code) so they won't be granted the rights of any of the other
-terms in the license (for example freedom 0, the freedom to run).
-
-If they can't comply with that for whatever reason (in this case,
-because person A did not grant them that freedom), they're unable to
-use Neo4j under the AGPLv3. They can of course purchase Neo4j under a
-commercial license (which gives them the flexibility to e.g. use it
-with proprietary code, along with indemnification and support etc) or
-swap in something else.
-
-IANAL, but this captures our intent. I've bounced this scenario off of
-licensing@fsf.org and this is their interpretation as well (except
-it's not legal advice from them either, of course).
\ No newline at end of file
diff --git a/extensions/entitystore-neo4j/licenses/neo4j-commercial.license b/extensions/entitystore-neo4j/licenses/neo4j-commercial.license
deleted file mode 100644
index b526288..0000000
--- a/extensions/entitystore-neo4j/licenses/neo4j-commercial.license
+++ /dev/null
@@ -1,3 +0,0 @@
-
-Contact Neo Technology AB through a mail to sales@neotechnology.com for details
-of the commercial licenses available and price quotes.
\ No newline at end of file
diff --git a/extensions/entitystore-neo4j/licenses/neo4j-opensource.license b/extensions/entitystore-neo4j/licenses/neo4j-opensource.license
deleted file mode 100644
index 4ec8c3f..0000000
--- a/extensions/entitystore-neo4j/licenses/neo4j-opensource.license
+++ /dev/null
@@ -1,619 +0,0 @@
-                    GNU AFFERO GENERAL PUBLIC LICENSE
-                       Version 3, 19 November 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU Affero General Public License is a free, copyleft license for
-software and other kinds of works, specifically designed to ensure
-cooperation with the community in the case of network server software.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-our General Public Licenses are intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  Developers that use our General Public Licenses protect your rights
-with two steps: (1) assert copyright on the software, and (2) offer
-you this License which gives you legal permission to copy, distribute
-and/or modify the software.
-
-  A secondary benefit of defending all users' freedom is that
-improvements made in alternate versions of the program, if they
-receive widespread use, become available for other developers to
-incorporate.  Many developers of free software are heartened and
-encouraged by the resulting cooperation.  However, in the case of
-software used on network servers, this result may fail to come about.
-The GNU General Public License permits making a modified version and
-letting the public access it on a server without ever releasing its
-source code to the public.
-
-  The GNU Affero General Public License is designed specifically to
-ensure that, in such cases, the modified source code becomes available
-to the community.  It requires the operator of a network server to
-provide the source code of the modified version running there to the
-users of that server.  Therefore, public use of a modified version, on
-a publicly accessible server, gives the public access to the source
-code of the modified version.
-
-  An older license, called the Affero General Public License and
-published by Affero, was designed to accomplish similar goals.  This is
-a different license, not a version of the Affero GPL, but Affero has
-released a new version of the Affero GPL which permits relicensing under
-this license.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU Affero General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Remote Network Interaction; Use with the GNU General Public License.
-
-  Notwithstanding any other provision of this License, if you modify the
-Program, your modified version must prominently offer all users
-interacting with it remotely through a computer network (if your version
-supports such interaction) an opportunity to receive the Corresponding
-Source of your version by providing access to the Corresponding Source
-from a network server at no charge, through some standard or customary
-means of facilitating copying of software.  This Corresponding Source
-shall include the Corresponding Source for any work covered by version 3
-of the GNU General Public License that is incorporated pursuant to the
-following paragraph.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the work with which it is combined will remain governed by version
-3 of the GNU General Public License.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU Affero General Public License from time to time.  Such new versions
-will be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU Affero General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU Affero General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU Affero General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
diff --git a/extensions/entitystore-neo4j/src/docs/es-neo4j.txt b/extensions/entitystore-neo4j/src/docs/es-neo4j.txt
deleted file mode 100644
index ae3692d..0000000
--- a/extensions/entitystore-neo4j/src/docs/es-neo4j.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-[[extension-es-neo4j, Neo4j EntityStore]]
-= Neo4j EntityStore =
-
-[devstatus]
---------------
-source=extensions/entitystore-neo4j/dev-status.xml
---------------
-
-EntityStore service backed by the http://neo4j.org/[Neo4j] Graph Database.
-
-It uses the embeddable Neo4j and not currently able to utilize the networked one, nor the Cypher query language that is present in more recent versions of Neo4j.
-
-include::../../build/docs/buildinfo/artifact.txt[]
-
-== Assembly ==
-
-There is currently no provided Assembler, and one has to declare the use explicitly. Note that we recommend
-[snippet,java]
-----
-source=extensions/entitystore-neo4j/src/test/java/org/qi4j/entitystore/neo4j/test/SimpleNeoStoreTest.java
-tag=assembly
-----
-
-== Configuration ==
-
-There is currently only a single configuration property for the Neo4j Entity Store.
-
-[snippet,java]
-----
-source=extensions/entitystore-neo4j/src/main/java/org/qi4j/entitystore/neo4j/NeoConfiguration.java
-tag=config
-----
-
-+path+ the full path on the file system where the Neo4j embedded database will be written to. The default value is 'build/neodb' and tailored for the build system and should not be used. The default value may change to a more sensible value in the future. 
-
diff --git a/extensions/entitystore-neo4j/src/main/java/org/qi4j/entitystore/neo4j/NeoConfiguration.java b/extensions/entitystore-neo4j/src/main/java/org/qi4j/entitystore/neo4j/NeoConfiguration.java
deleted file mode 100644
index b59fffe..0000000
--- a/extensions/entitystore-neo4j/src/main/java/org/qi4j/entitystore/neo4j/NeoConfiguration.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright 2009 Niclas Hedhman.
- *
- * Licensed  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.qi4j.entitystore.neo4j;
-
-import org.qi4j.api.common.Optional;
-import org.qi4j.api.configuration.ConfigurationComposite;
-import org.qi4j.api.property.Property;
-
-// START SNIPPET: config
-public interface NeoConfiguration
-    extends ConfigurationComposite
-{
-    /** The absolute location of the embedded database. */
-    @Optional
-    Property<String> path();
-}
-// END SNIPPET: config
diff --git a/extensions/entitystore-neo4j/src/main/java/org/qi4j/entitystore/neo4j/NeoEntityState.java b/extensions/entitystore-neo4j/src/main/java/org/qi4j/entitystore/neo4j/NeoEntityState.java
deleted file mode 100644
index 340f52f..0000000
--- a/extensions/entitystore-neo4j/src/main/java/org/qi4j/entitystore/neo4j/NeoEntityState.java
+++ /dev/null
@@ -1,293 +0,0 @@
-package org.qi4j.entitystore.neo4j;
-
-import org.neo4j.graphdb.Direction;
-import org.neo4j.graphdb.DynamicRelationshipType;
-import org.neo4j.graphdb.Node;
-import org.neo4j.graphdb.Relationship;
-import org.neo4j.graphdb.RelationshipType;
-import org.qi4j.api.common.QualifiedName;
-import org.qi4j.api.entity.EntityDescriptor;
-import org.qi4j.api.entity.EntityReference;
-import org.qi4j.api.property.PropertyDescriptor;
-import org.qi4j.api.type.ValueType;
-import org.qi4j.api.value.ValueSerialization;
-import org.qi4j.api.value.ValueSerializationException;
-import org.qi4j.spi.entity.EntityState;
-import org.qi4j.spi.entity.EntityStatus;
-import org.qi4j.spi.entity.ManyAssociationState;
-import org.qi4j.spi.entity.NamedAssociationState;
-import org.qi4j.spi.entitystore.EntityStoreException;
-import org.qi4j.spi.entitystore.EntityStoreUnitOfWork;
-
-public class NeoEntityState
-    implements EntityState
-{
-
-    static final String ENTITY_ID = "entity_id";
-    static final String VERSION = "version";
-    static final String MODIFIED = "modified";
-    private final NeoEntityStoreUnitOfWork uow;
-    private final ValueSerialization valueSerialization;
-    private final Node underlyingNode;
-    private EntityStatus status;
-
-    NeoEntityState( ValueSerialization valueSerialization, NeoEntityStoreUnitOfWork work, Node node,
-                    EntityStatus status )
-    {
-        this.valueSerialization = valueSerialization;
-        this.uow = work;
-        this.underlyingNode = node;
-        this.status = status;
-    }
-
-    protected void setUpdated()
-    {
-        if( status == EntityStatus.LOADED )
-        {
-            status = EntityStatus.UPDATED;
-            Long version = (Long) underlyingNode.getProperty( VERSION );
-            underlyingNode.setProperty( VERSION, version + 1 );
-            underlyingNode.setProperty( MODIFIED, uow.currentTime() );
-        }
-    }
-
-    static RelationshipType namedAssociation( QualifiedName stateName )
-    {
-        return DynamicRelationshipType.withName( "named_association::" + stateName.toString() );
-    }
-
-    static RelationshipType manyAssociation( QualifiedName stateName )
-    {
-        return DynamicRelationshipType.withName( "many_association::" + stateName.toString() );
-    }
-
-    static RelationshipType association( QualifiedName stateName )
-    {
-        return DynamicRelationshipType.withName( "association::" + stateName.toString() );
-    }
-
-    @Override
-    public NamedAssociationState namedAssociationValueOf( QualifiedName stateName )
-    {
-        RelationshipType namedAssociation = namedAssociation( stateName );
-        Relationship rel = underlyingNode.getSingleRelationship( namedAssociation, Direction.OUTGOING );
-        if( rel != null )
-        {
-            return new NeoNamedAssociationState( uow, this, rel.getEndNode() );
-        }
-        Node node = uow.getNeo().createNode();
-        node.setProperty( NeoNamedAssociationState.COUNT, 0 );
-        underlyingNode.createRelationshipTo( node, namedAssociation );
-        return new NeoNamedAssociationState( uow, this, node );
-    }
-    
-    @Override
-    public ManyAssociationState manyAssociationValueOf( QualifiedName stateName )
-    {
-        RelationshipType manyAssociation = manyAssociation( stateName );
-        Relationship rel = underlyingNode.getSingleRelationship( manyAssociation, Direction.OUTGOING );
-        if( rel != null )
-        {
-            return new NeoManyAssociationState( uow, this, rel.getEndNode() );
-        }
-        Node node = uow.getNeo().createNode();
-        node.setProperty( NeoManyAssociationState.COUNT, 0 );
-        underlyingNode.createRelationshipTo( node, manyAssociation );
-        return new NeoManyAssociationState( uow, this, node );
-    }
-
-    @Override
-    public EntityReference associationValueOf( QualifiedName stateName )
-    {
-        Relationship rel = underlyingNode.getSingleRelationship( association( stateName ), Direction.OUTGOING );
-        if( rel != null )
-        {
-            String entityId = (String) rel.getEndNode().getProperty( ENTITY_ID );
-            return new EntityReference( entityId );
-        }
-        return null;
-    }
-
-    @Override
-    public void setAssociationValue( QualifiedName stateName, EntityReference newEntity )
-    {
-        RelationshipType association = association( stateName );
-        Relationship rel = underlyingNode.getSingleRelationship( association, Direction.OUTGOING );
-        if( rel != null )
-        {
-            Node otherNode = rel.getEndNode();
-            if( otherNode.getProperty( ENTITY_ID ).equals( identity().identity() ) )
-            {
-                otherNode.delete();
-            }
-            rel.delete();
-        }
-        if( newEntity != null )
-        {
-            Node otherNode = uow.getEntityStateNode( newEntity );
-            if( otherNode.equals( underlyingNode ) )
-            {
-                // create a blank node for self reference
-                otherNode = uow.getNeo().createNode();
-                otherNode.setProperty( ENTITY_ID, identity().identity() );
-            }
-            underlyingNode.createRelationshipTo( otherNode, association );
-        }
-    }
-
-    @Override
-    public Object propertyValueOf( QualifiedName stateName )
-    {
-        try
-        {
-            PropertyDescriptor persistentProperty = entityDescriptor().state().findPropertyModelByQualifiedName( stateName );
-            Object prop = underlyingNode.getProperty( "prop::" + stateName.toString(), null );
-            if( prop == null )
-            {
-                return null;
-            }
-            else if( ValueType.isPrimitiveValueType( persistentProperty.valueType() ) )
-            {
-                return prop;
-            }
-            else
-            {
-                return valueSerialization.deserialize( persistentProperty.valueType(), prop.toString() );
-            }
-        }
-        catch( ValueSerializationException e )
-        {
-            throw new EntityStoreException( e );
-        }
-    }
-
-    @Override
-    public void setPropertyValue( QualifiedName stateName, Object prop )
-    {
-        try
-        {
-            if( prop != null )
-            {
-                PropertyDescriptor persistentProperty = entityDescriptor().state().findPropertyModelByQualifiedName( stateName );
-                if( ValueType.isPrimitiveValueType( persistentProperty.valueType() ) )
-                {
-                    underlyingNode.setProperty( "prop::" + stateName.toString(), prop );
-                }
-                else
-                {
-                    String jsonString = valueSerialization.serialize( prop );
-                    underlyingNode.setProperty( "prop::" + stateName.toString(), jsonString );
-                }
-            }
-            else
-            {
-                underlyingNode.removeProperty( stateName.toString() );
-            }
-            setUpdated();
-        }
-        catch( ValueSerializationException e )
-        {
-            throw new EntityStoreException( e );
-        }
-    }
-
-    @Override
-    public void remove()
-    {
-        // Apparently remove should just force remove associations instead
-        // of throwing exception if the entity has incomming associations
-//            if ( underlyingNode.hasRelationship( Direction.INCOMING ) )
-//            {
-//                throw new IllegalStateException(
-//                    "Cannot remove entity with reference: " + identity()
-//                    + ". It has incoming associtaions.");
-//            }
-        // remove of all incomming associations
-        for( Relationship rel : underlyingNode.getRelationships( Direction.INCOMING ) )
-        {
-            rel.delete();
-        }
-        uow.getIndexService().removeIndex( underlyingNode,
-                                           NeoEntityStoreUnitOfWork.ENTITY_STATE_ID,
-                                           underlyingNode.getProperty( ENTITY_ID ) );
-
-        for( Relationship rel : underlyingNode.getRelationships( Direction.OUTGOING ) )
-        {
-            Node endNode = rel.getEndNode();
-            boolean manyAssocNode = false, namedAssocNode = false;
-            for( Relationship manyRel : endNode.getRelationships( RelTypes.MANY_ASSOCIATION, Direction.OUTGOING ) )
-            {
-                manyRel.delete();
-                manyAssocNode = true;
-            }
-            for( Relationship namedRel : endNode.getRelationships( RelTypes.NAMED_ASSOCIATION, Direction.OUTGOING ) )
-            {
-                namedRel.delete();
-                namedAssocNode = true;
-            }
-            if( manyAssocNode || namedAssocNode )
-            {
-                endNode.delete();
-            }
-            rel.delete();
-        }
-        underlyingNode.delete();
-        status = EntityStatus.REMOVED;
-    }
-
-    @Override
-    public EntityDescriptor entityDescriptor()
-    {
-        Node typeNode = underlyingNode.getSingleRelationship( RelTypes.IS_OF_TYPE, Direction.OUTGOING ).getEndNode();
-        String type = (String) typeNode.getProperty( NeoEntityStoreUnitOfWork.ENTITY_TYPE );
-        return uow.getEntityDescriptor( type );
-    }
-
-    public void hasBeenApplied()
-    {
-        // TODO
-    }
-
-    @Override
-    public EntityReference identity()
-    {
-        return new EntityReference( (String) underlyingNode.getProperty( ENTITY_ID ) );
-    }
-
-    @Override
-    public boolean isAssignableTo( Class<?> type )
-    {
-        Node typeNode = underlyingNode.getSingleRelationship( RelTypes.IS_OF_TYPE, Direction.OUTGOING ).getEndNode();
-        String typeName = (String) typeNode.getProperty( NeoEntityStoreUnitOfWork.ENTITY_TYPE );
-        return typeName.equals( type.getName() );
-    }
-
-    @Override
-    public long lastModified()
-    {
-        long modified = (Long) underlyingNode.getProperty( MODIFIED );
-        return modified;
-    }
-
-    @Override
-    public EntityStatus status()
-    {
-        return status;
-    }
-
-    @Override
-    public String version()
-    {
-        long version = (Long) underlyingNode.getProperty( VERSION );
-        if( status == EntityStatus.UPDATED )
-        {
-            version--;
-        }
-        return "" + version;
-    }
-
-    public EntityStoreUnitOfWork unitOfWork()
-    {
-        return uow;
-    }
-}
diff --git a/extensions/entitystore-neo4j/src/main/java/org/qi4j/entitystore/neo4j/NeoEntityStoreMixin.java b/extensions/entitystore-neo4j/src/main/java/org/qi4j/entitystore/neo4j/NeoEntityStoreMixin.java
deleted file mode 100644
index dd04f3a..0000000
--- a/extensions/entitystore-neo4j/src/main/java/org/qi4j/entitystore/neo4j/NeoEntityStoreMixin.java
+++ /dev/null
@@ -1,151 +0,0 @@
-package org.qi4j.entitystore.neo4j;
-
-import java.io.File;
-import java.util.UUID;
-import java.util.concurrent.atomic.AtomicInteger;
-import org.neo4j.graphdb.Direction;
-import org.neo4j.graphdb.Node;
-import org.neo4j.graphdb.Relationship;
-import org.neo4j.index.IndexService;
-import org.neo4j.index.lucene.LuceneIndexService;
-import org.neo4j.kernel.EmbeddedGraphDatabase;
-import org.qi4j.api.common.Optional;
-import org.qi4j.api.configuration.Configuration;
-import org.qi4j.api.entity.EntityDescriptor;
-import org.qi4j.api.entity.EntityReference;
-import org.qi4j.api.injection.scope.Service;
-import org.qi4j.api.injection.scope.This;
-import org.qi4j.api.service.ServiceActivation;
-import org.qi4j.api.service.qualifier.Tagged;
-import org.qi4j.api.structure.Module;
-import org.qi4j.api.usecase.Usecase;
-import org.qi4j.api.value.ValueSerialization;
-import org.qi4j.io.Input;
-import org.qi4j.io.Output;
-import org.qi4j.io.Receiver;
-import org.qi4j.io.Sender;
-import org.qi4j.library.fileconfig.FileConfiguration;
-import org.qi4j.spi.entity.EntityState;
-import org.qi4j.spi.entity.EntityStatus;
-import org.qi4j.spi.entitystore.*;
-
-public class NeoEntityStoreMixin
-        implements ServiceActivation, EntityStore, EntityStoreSPI
-{
-   @Optional
-   @Service
-   FileConfiguration fileConfiguration;
-   @Service
-   @Tagged( ValueSerialization.Formats.JSON )
-   private ValueSerialization valueSerialization;
-
-   @This
-   private Configuration<NeoConfiguration> config;
-
-   private EmbeddedGraphDatabase neo;
-   private IndexService indexService;
-
-   private AtomicInteger count = new AtomicInteger(0);
-   private String uuid;
-
-   @Override
-   public void activateService()
-           throws Exception
-   {
-      String path = config.get().path().get();
-      if (path == null)
-      {
-         if (fileConfiguration != null)
-            path = new File(fileConfiguration.dataDirectory(), config.get().identity().get()).getAbsolutePath();
-         else
-            path = "build/neodb";
-      }
-      neo = new EmbeddedGraphDatabase(path);
-      indexService = new LuceneIndexService(neo);
-      uuid = UUID.randomUUID().toString() + "-";
-   }
-
-   @Override
-   public void passivateService()
-           throws Exception
-   {
-      indexService.shutdown();
-      neo.shutdown();
-   }
-
-    @Override
-   public EntityStoreUnitOfWork newUnitOfWork( Usecase usecase, Module module, long currentTime )
-   {
-      return new NeoEntityStoreUnitOfWork(neo, indexService, valueSerialization, newUnitOfWorkId(), module, currentTime);
-   }
-
-    @Override
-   public Input<EntityState, EntityStoreException> entityStates(final Module module)
-   {
-      return new Input<EntityState, EntityStoreException>()
-      {
-         @Override
-         public <ReceiverThrowableType extends Throwable> void transferTo(Output<? super EntityState, ReceiverThrowableType> output) throws EntityStoreException, ReceiverThrowableType
-         {
-            output.receiveFrom(new Sender<EntityState, EntityStoreException>()
-            {
-               @Override
-               public <ReceiverThrowableType extends Throwable> void sendTo(Receiver<? super EntityState, ReceiverThrowableType> receiver) throws ReceiverThrowableType, EntityStoreException
-               {
-                  NeoEntityStoreUnitOfWork uow = new NeoEntityStoreUnitOfWork(neo, indexService, valueSerialization, newUnitOfWorkId(), module, System.currentTimeMillis());
-
-                  try
-                  {
-                     Iterable<Relationship> relationships =
-                             neo.getReferenceNode().getRelationships(RelTypes.ENTITY_TYPE_REF, Direction.OUTGOING);
-
-                     for (Relationship entityTypeRel : relationships)
-                     {
-                        Node entityType = entityTypeRel.getEndNode();
-                        for (Relationship entityRel : entityType.getRelationships(RelTypes.IS_OF_TYPE, Direction.INCOMING))
-                        {
-                           Node entityNode = entityRel.getStartNode();
-                           NeoEntityState entityState = new NeoEntityState( valueSerialization, uow, entityNode, EntityStatus.LOADED);
-                           receiver.receive(entityState);
-                        }
-                     }
-                  } finally
-                  {
-                     uow.discard();
-                  }
-               }
-            });
-         }
-      };
-   }
-
-    @Override
-   public StateCommitter applyChanges( EntityStoreUnitOfWork unitofwork, Iterable<EntityState> state )
-   {
-      for (EntityState firstState : state)
-      {
-         if (firstState instanceof NeoEntityState)
-         {
-            return ((NeoEntityState) firstState).unitOfWork().applyChanges();
-         }
-      }
-      return null;
-   }
-
-    @Override
-   public EntityState entityStateOf( EntityStoreUnitOfWork unitOfWork, EntityReference identity )
-   {
-      return unitOfWork.entityStateOf( identity );
-   }
-
-    @Override
-   public EntityState newEntityState( EntityStoreUnitOfWork uow, EntityReference ref, EntityDescriptor descriptor )
-   {
-      return uow.newEntityState(ref, descriptor);
-   }
-
-   private String newUnitOfWorkId()
-   {
-      return uuid + Integer.toHexString(count.incrementAndGet());
-   }
-}
\ No newline at end of file
diff --git a/extensions/entitystore-neo4j/src/main/java/org/qi4j/entitystore/neo4j/NeoEntityStoreService.java b/extensions/entitystore-neo4j/src/main/java/org/qi4j/entitystore/neo4j/NeoEntityStoreService.java
deleted file mode 100644
index 592ddec..0000000
--- a/extensions/entitystore-neo4j/src/main/java/org/qi4j/entitystore/neo4j/NeoEntityStoreService.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.qi4j.entitystore.neo4j;
-
-import org.qi4j.api.mixin.Mixins;
-import org.qi4j.api.service.ServiceActivation;
-import org.qi4j.api.service.ServiceComposite;
-import org.qi4j.spi.entitystore.EntityStateVersions;
-import org.qi4j.spi.entitystore.EntityStore;
-
-@Mixins( NeoEntityStoreMixin.class )
-public interface NeoEntityStoreService
-    extends EntityStore, ServiceComposite, EntityStateVersions, ServiceActivation
-{
-}
diff --git a/extensions/entitystore-neo4j/src/main/java/org/qi4j/entitystore/neo4j/NeoEntityStoreUnitOfWork.java b/extensions/entitystore-neo4j/src/main/java/org/qi4j/entitystore/neo4j/NeoEntityStoreUnitOfWork.java
deleted file mode 100644
index b372355..0000000
--- a/extensions/entitystore-neo4j/src/main/java/org/qi4j/entitystore/neo4j/NeoEntityStoreUnitOfWork.java
+++ /dev/null
@@ -1,220 +0,0 @@
-package org.qi4j.entitystore.neo4j;
-
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
-import org.neo4j.graphdb.Node;
-import org.neo4j.index.IndexService;
-import org.neo4j.kernel.EmbeddedGraphDatabase;
-import org.qi4j.api.entity.EntityDescriptor;
-import org.qi4j.api.entity.EntityReference;
-import org.qi4j.api.structure.Module;
-import org.qi4j.api.value.ValueSerialization;
-import org.qi4j.spi.entity.EntityState;
-import org.qi4j.spi.entity.EntityStatus;
-import org.qi4j.spi.entitystore.*;
-
-import static org.qi4j.functional.Iterables.first;
-
-public class NeoEntityStoreUnitOfWork
-    implements EntityStoreUnitOfWork,
-               StateCommitter
-{
-    static final String ENTITY_STATE_ID = "entity_state_id";
-    static final String ENTITY_TYPE = "entity_type";
-
-    private final EmbeddedGraphDatabase neo;
-    private final IndexService indexService;
-    private final ValueSerialization valueSerialization;
-    private long currentTime;
-    private final TransactionManager tm;
-
-    private final Transaction transaction;
-    private final String identity;
-    private final Module module;
-
-    NeoEntityStoreUnitOfWork( EmbeddedGraphDatabase neo, IndexService indexService, ValueSerialization valueSerialization,
-                              String identity, Module module,
-                              long currentTime )
-    {
-        this.neo = neo;
-        this.indexService = indexService;
-        this.valueSerialization = valueSerialization;
-        this.currentTime = currentTime;
-        this.tm = this.neo.getConfig().getTxModule().getTxManager();
-        this.transaction = beginTransaction();
-        this.identity = identity;
-        this.module = module;
-    }
-
-    @Override
-    public StateCommitter applyChanges()
-        throws EntityStoreException
-    {
-        return this;
-    }
-
-    @Override
-    public long currentTime()
-    {
-        return currentTime;
-    }
-
-    @Override
-    public void discard()
-    {
-        cancel();
-    }
-
-    Node getEntityStateNode( EntityReference anIdentity )
-    {
-        Node node = indexService.getSingleNode( ENTITY_STATE_ID,
-                                                anIdentity.identity() );
-        if( node == null )
-        {
-            throw new EntityNotFoundException( anIdentity );
-        }
-        return node;
-    }
-
-    @Override
-    public EntityState entityStateOf( EntityReference anIdentity )
-        throws EntityStoreException, EntityNotFoundException
-    {
-        return new NeoEntityState( valueSerialization, this, getEntityStateNode( anIdentity ),
-                                   EntityStatus.LOADED );
-    }
-
-    @Override
-    public EntityState newEntityState( EntityReference anIdentity,
-                                       EntityDescriptor entityDescriptor
-    )
-        throws EntityStoreException
-    {
-        String type = first(entityDescriptor.types()).getName();
-        Node typeNode = indexService.getSingleNode( ENTITY_TYPE, type );
-        if( typeNode == null )
-        {
-            typeNode = createEntityType( type );
-        }
-        Node node = indexService.getSingleNode( ENTITY_STATE_ID,
-                                                anIdentity.identity() );
-        if( node != null )
-        {
-            throw new EntityAlreadyExistsException( anIdentity );
-        }
-        node = neo.createNode();
-        node.setProperty( NeoEntityState.VERSION, 0l );
-        node.setProperty( NeoEntityState.MODIFIED, currentTime );
-        node.createRelationshipTo( typeNode, RelTypes.IS_OF_TYPE );
-        node.setProperty( NeoEntityState.ENTITY_ID, anIdentity.identity() );
-        indexService.index( node, ENTITY_STATE_ID, anIdentity.identity() );
-        return new NeoEntityState( valueSerialization, this, node, EntityStatus.NEW );
-    }
-
-    @Override
-    public void cancel()
-    {
-        try
-        {
-            tm.rollback();
-        }
-        catch( Exception e )
-        {
-            throw new EntityStoreException(
-                "Failed to rollback transaction.", e );
-        }
-    }
-
-    @Override
-    public void commit()
-    {
-        try
-        {
-            tm.commit();
-        }
-        catch( Exception e )
-        {
-            throw new EntityStoreException(
-                "Failed to commit transaction.", e );
-        }
-    }
-
-    private Transaction beginTransaction()
-    {
-        try
-        {
-            tm.begin();
-            return tm.getTransaction();
-        }
-        catch( Exception e )
-        {
-            throw new EntityStoreException( "Failed to begin transaction.", e );
-        }
-    }
-
-    void suspend()
-    {
-        try
-        {
-            Transaction txRunning = tm.getTransaction();
-            if( txRunning != null && txRunning == transaction )
-            {
-                tm.suspend();
-            }
-        }
-        catch( Exception e )
-        {
-            throw new EntityStoreException( "Failed to suspend " +
-                                            transaction, e );
-        }
-    }
-
-    void resume()
-    {
-        try
-        {
-            tm.resume( transaction );
-        }
-        catch( Exception e )
-        {
-            throw new EntityStoreException( "Failed to resume " +
-                                            transaction, e );
-        }
-    }
-
-    EmbeddedGraphDatabase getNeo()
-    {
-        return neo;
-    }
-
-    IndexService getIndexService()
-    {
-        return indexService;
-    }
-
-    @Override
-    public String identity()
-    {
-        return identity;
-    }
-
-    private Node createEntityType( String type )
-    {
-        Node typeNode = neo.createNode();
-        neo.getReferenceNode().createRelationshipTo( typeNode,
-                                                     RelTypes.ENTITY_TYPE_REF );
-        typeNode.setProperty( ENTITY_TYPE, type );
-        indexService.index( typeNode, ENTITY_TYPE, type );
-        return typeNode;
-    }
-
-    EntityDescriptor getEntityDescriptor( String type )
-    {
-        return ( (Module) module ).entityDescriptor( type );
-    }
-
-    Module getModule()
-    {
-        return module;
-    }
-}
\ No newline at end of file
diff --git a/extensions/entitystore-neo4j/src/main/java/org/qi4j/entitystore/neo4j/NeoManyAssociationState.java b/extensions/entitystore-neo4j/src/main/java/org/qi4j/entitystore/neo4j/NeoManyAssociationState.java
deleted file mode 100644
index 9457aca..0000000
--- a/extensions/entitystore-neo4j/src/main/java/org/qi4j/entitystore/neo4j/NeoManyAssociationState.java
+++ /dev/null
@@ -1,170 +0,0 @@
-package org.qi4j.entitystore.neo4j;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import org.neo4j.graphdb.Direction;
-import org.neo4j.graphdb.Node;
-import org.neo4j.graphdb.Relationship;
-import org.qi4j.api.entity.EntityReference;
-import org.qi4j.spi.entity.ManyAssociationState;
-
-public class NeoManyAssociationState
-    implements ManyAssociationState
-{
-    private static final String INDEX = "index";
-    static final String COUNT = "count";
-
-    private final Node underlyingNode;
-    private final NeoEntityState entity;
-    private final NeoEntityStoreUnitOfWork uow;
-
-    NeoManyAssociationState( NeoEntityStoreUnitOfWork uow,
-                             NeoEntityState entity, Node node
-    )
-    {
-        this.uow = uow;
-        this.entity = entity;
-        this.underlyingNode = node;
-    }
-
-    @Override
-    public boolean add( int index, EntityReference entityReference )
-    {
-        if( index < 0 || index > count() )
-        {
-            throw new IllegalArgumentException( "Illegal index: " + index );
-        }
-        Node entityNode = uow.getEntityStateNode( entityReference );
-        for( Relationship rel : underlyingNode.getRelationships(
-            RelTypes.MANY_ASSOCIATION, Direction.OUTGOING ) )
-        {
-            int relIndex = getRelationshipIndex( rel );
-            if( relIndex >= index )
-            {
-                setRelationshipIndex( rel, relIndex + 1 );
-            }
-            if( rel.getEndNode().equals( entityNode ) )
-            {
-                return false;
-            }
-        }
-        Relationship rel = underlyingNode.createRelationshipTo( entityNode,
-                                                                RelTypes.MANY_ASSOCIATION );
-        setRelationshipIndex( rel, index );
-        incrementCount();
-        entity.setUpdated();
-        return true;
-    }
-
-    private int getRelationshipIndex( Relationship rel )
-    {
-        return (Integer) rel.getProperty( INDEX );
-    }
-
-    private void setRelationshipIndex( Relationship rel, int newIndex )
-    {
-        rel.setProperty( INDEX, newIndex );
-    }
-
-    private void incrementCount()
-    {
-        int count = (Integer) underlyingNode.getProperty( "count" );
-        underlyingNode.setProperty( COUNT, count + 1 );
-    }
-
-    private void decrementCount()
-    {
-        int count = (Integer) underlyingNode.getProperty( "count" );
-        underlyingNode.setProperty( COUNT, --count );
-    }
-
-    @Override
-    public boolean contains( EntityReference entityReference )
-    {
-        Node entityNode = uow.getEntityStateNode( entityReference );
-        for( Relationship rel : underlyingNode.getRelationships(
-            RelTypes.MANY_ASSOCIATION, Direction.OUTGOING ) )
-        {
-            if( rel.getEndNode().equals( entityNode ) )
-            {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    @Override
-    public int count()
-    {
-        return (Integer) underlyingNode.getProperty( COUNT );
-    }
-
-    @Override
-    public EntityReference get( int index )
-    {
-        if( index < 0 || index > count() )
-        {
-            throw new IllegalArgumentException( "Illegal index: " + index );
-        }
-        for( Relationship rel : underlyingNode.getRelationships(
-            RelTypes.MANY_ASSOCIATION, Direction.OUTGOING ) )
-        {
-            int relIndex = getRelationshipIndex( rel );
-            if( relIndex == index )
-            {
-                String id = (String) rel.getEndNode().getProperty(
-                    NeoEntityState.ENTITY_ID );
-                return new EntityReference( id );
-            }
-        }
-        return null;
-    }
-
-    @Override
-    public boolean remove( EntityReference entityReference )
-    {
-        Node entityNode = uow.getEntityStateNode( entityReference );
-        int indexDeleted = -1;
-        for( Relationship rel : entityNode.getRelationships(
-            RelTypes.MANY_ASSOCIATION, Direction.INCOMING ) )
-        {
-            if( rel.getStartNode().equals( underlyingNode ) )
-            {
-                indexDeleted = getRelationshipIndex( rel );
-                rel.delete();
-                break;
-            }
-        }
-        if( indexDeleted == -1 )
-        {
-            return false;
-        }
-        for( Relationship rel : underlyingNode.getRelationships(
-            RelTypes.MANY_ASSOCIATION, Direction.OUTGOING ) )
-        {
-            int relIndex = getRelationshipIndex( rel );
-            if( relIndex > indexDeleted )
-            {
-                setRelationshipIndex( rel, relIndex - 1 );
-            }
-        }
-        decrementCount();
-        entity.setUpdated();
-        return true;
-    }
-
-    @Override
-    public Iterator<EntityReference> iterator()
-    {
-        List<EntityReference> list = new ArrayList<EntityReference>( count() );
-        for( Relationship rel : underlyingNode.getRelationships(
-            RelTypes.MANY_ASSOCIATION, Direction.OUTGOING ) )
-        {
-            String id = (String) rel.getEndNode().getProperty(
-                NeoEntityState.ENTITY_ID );
-            list.add( new EntityReference( id ) );
-        }
-        return list.iterator();
-    }
-}
\ No newline at end of file
diff --git a/extensions/entitystore-neo4j/src/main/java/org/qi4j/entitystore/neo4j/NeoNamedAssociationState.java b/extensions/entitystore-neo4j/src/main/java/org/qi4j/entitystore/neo4j/NeoNamedAssociationState.java
deleted file mode 100644
index bc74cc7..0000000
--- a/extensions/entitystore-neo4j/src/main/java/org/qi4j/entitystore/neo4j/NeoNamedAssociationState.java
+++ /dev/null
@@ -1,152 +0,0 @@
-package org.qi4j.entitystore.neo4j;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import org.neo4j.graphdb.Direction;
-import org.neo4j.graphdb.Node;
-import org.neo4j.graphdb.Relationship;
-import org.qi4j.api.entity.EntityReference;
-import org.qi4j.spi.entity.NamedAssociationState;
-
-public class NeoNamedAssociationState
-    implements NamedAssociationState
-{
-    private static final String NAME = "name";
-    static final String COUNT = "count";
-
-    private final Node underlyingNode;
-    private final NeoEntityState entity;
-    private final NeoEntityStoreUnitOfWork uow;
-
-    NeoNamedAssociationState( NeoEntityStoreUnitOfWork uow,
-                              NeoEntityState entity, Node node
-    )
-    {
-        this.uow = uow;
-        this.entity = entity;
-        this.underlyingNode = node;
-    }
-
-    @Override
-    public boolean put( String name, EntityReference entityReference )
-    {
-        Node entityNode = uow.getEntityStateNode( entityReference );
-        for( Relationship rel : underlyingNode.getRelationships( RelTypes.NAMED_ASSOCIATION, Direction.OUTGOING ) )
-        {
-            String relName = getRelationshipName( rel );
-            if( relName.equals( name ) )
-            {
-                if( rel.getEndNode().equals( entityNode ) )
-                {
-                    return false;
-                }
-                rel.delete();
-                decrementCount();
-                break;
-            }
-        }
-        Relationship rel = underlyingNode.createRelationshipTo( entityNode, RelTypes.NAMED_ASSOCIATION );
-        setRelationshipName( rel, name );
-        incrementCount();
-        entity.setUpdated();
-        return true;
-    }
-
-    private String getRelationshipName( Relationship rel )
-    {
-        return (String) rel.getProperty( NAME );
-    }
-
-    private void setRelationshipName( Relationship rel, String newName )
-    {
-        rel.setProperty( NAME, newName );
-    }
-
-    private void incrementCount()
-    {
-        int count = (Integer) underlyingNode.getProperty( "count" );
-        underlyingNode.setProperty( COUNT, count + 1 );
-    }
-
-    private void decrementCount()
-    {
-        int count = (Integer) underlyingNode.getProperty( "count" );
-        underlyingNode.setProperty( COUNT, --count );
-    }
-
-    @Override
-    public boolean containsName( String name )
-    {
-        for( Relationship rel : underlyingNode.getRelationships( RelTypes.NAMED_ASSOCIATION, Direction.OUTGOING ) )
-        {
-            if( getRelationshipName( rel ).equals( name ) )
-            {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    @Override
-    public int count()
-    {
-        return (Integer) underlyingNode.getProperty( COUNT );
-    }
-
-    @Override
-    public EntityReference get( String name )
-    {
-        for( Relationship rel : underlyingNode.getRelationships( RelTypes.NAMED_ASSOCIATION, Direction.OUTGOING ) )
-        {
-            if( getRelationshipName( rel ).equals( name ) )
-            {
-                String id = (String) rel.getEndNode().getProperty( NeoEntityState.ENTITY_ID );
-                return new EntityReference( id );
-            }
-        }
-        return null;
-    }
-
-    @Override
-    public boolean remove( String name )
-    {
-        for( Relationship rel : underlyingNode.getRelationships( RelTypes.NAMED_ASSOCIATION, Direction.OUTGOING ) )
-        {
-            if( getRelationshipName( rel ).equals( name ) )
-            {
-                rel.delete();
-                decrementCount();
-                entity.setUpdated();
-                return true;
-            }
-        }
-        return false;
-    }
-
-    @Override
-    public Iterator<String> iterator()
-    {
-        List<String> list = new ArrayList<>();
-        for( Relationship rel : underlyingNode.getRelationships( RelTypes.NAMED_ASSOCIATION, Direction.OUTGOING ) )
-        {
-            list.add( getRelationshipName( rel ) );
-        }
-        return list.iterator();
-    }
-
-    @Override
-    public String nameOf( EntityReference entityReference )
-    {
-        Node entityNode = uow.getEntityStateNode( entityReference );
-        for( Relationship rel : underlyingNode.getRelationships( RelTypes.NAMED_ASSOCIATION, Direction.OUTGOING ) )
-        {
-            if( rel.getEndNode().equals( entityNode ) )
-            {
-                return getRelationshipName( rel );
-            }
-        }
-        return null;
-    }
-
-}
diff --git a/extensions/entitystore-neo4j/src/main/java/org/qi4j/entitystore/neo4j/RelTypes.java b/extensions/entitystore-neo4j/src/main/java/org/qi4j/entitystore/neo4j/RelTypes.java
deleted file mode 100644
index cd3aae7..0000000
--- a/extensions/entitystore-neo4j/src/main/java/org/qi4j/entitystore/neo4j/RelTypes.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.qi4j.entitystore.neo4j;
-
-import org.neo4j.graphdb.RelationshipType;
-
-enum RelTypes
-    implements RelationshipType
-{
-    ENTITY_TYPE_REF,
-    IS_OF_TYPE,
-    MANY_ASSOCIATION,
-    NAMED_ASSOCIATION
-}
diff --git a/extensions/entitystore-neo4j/src/main/java/org/qi4j/entitystore/neo4j/package.html b/extensions/entitystore-neo4j/src/main/java/org/qi4j/entitystore/neo4j/package.html
deleted file mode 100644
index 7f8ec25..0000000
--- a/extensions/entitystore-neo4j/src/main/java/org/qi4j/entitystore/neo4j/package.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<html>
-    <body>
-        <h2>Neo4j EntityStore.</h2>
-    </body>
-</html>
diff --git a/extensions/entitystore-neo4j/src/test/java/org/qi4j/entitystore/neo4j/test/SimpleNeoStoreTest.java b/extensions/entitystore-neo4j/src/test/java/org/qi4j/entitystore/neo4j/test/SimpleNeoStoreTest.java
deleted file mode 100644
index 7f0e9f5..0000000
--- a/extensions/entitystore-neo4j/src/test/java/org/qi4j/entitystore/neo4j/test/SimpleNeoStoreTest.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.qi4j.entitystore.neo4j.test;
-
-import org.qi4j.api.common.Visibility;
-import org.qi4j.bootstrap.AssemblyException;
-import org.qi4j.bootstrap.ModuleAssembly;
-import org.qi4j.entitystore.neo4j.NeoConfiguration;
-import org.qi4j.entitystore.neo4j.NeoEntityStoreService;
-import org.qi4j.library.fileconfig.FileConfigurationService;
-import org.qi4j.test.EntityTestAssembler;
-import org.qi4j.test.entity.AbstractEntityStoreTest;
-import org.qi4j.valueserialization.orgjson.OrgJsonValueSerializationAssembler;
-
-public class SimpleNeoStoreTest
-    extends AbstractEntityStoreTest
-{
-// START SNIPPET: assembly
-    public void assemble( ModuleAssembly module )
-        throws AssemblyException
-    {
-// END SNIPPET: assembly
-        module.layer().application().setName( "SimpleNeoTest" );
-
-        super.assemble( module );
-// START SNIPPET: assembly
-        module.services( FileConfigurationService.class );
-
-        module.services( NeoEntityStoreService.class );
-
-        ModuleAssembly configModule = module.layer().module( "config" );
-        configModule.entities( NeoConfiguration.class ).visibleIn( Visibility.layer );
-        new OrgJsonValueSerializationAssembler().assemble( module );
-// END SNIPPET: assembly
-        new EntityTestAssembler().assemble( configModule );
-    }
-
-    @Override
-    public void givenConcurrentUnitOfWorksWhenUoWCompletesThenCheckConcurrentModification()
-    {
-    }
-}
diff --git a/extensions/entitystore-preferences/NOTICE b/extensions/entitystore-preferences/NOTICE
deleted file mode 100644
index 61e5f91..0000000
--- a/extensions/entitystore-preferences/NOTICE
+++ /dev/null
@@ -1,16 +0,0 @@
-Qi4j Java Preferences Persistence Extension
-Copyright 2007-2008, The Qi4j Development Team of individuals.
-
-See http://www.qi4j.org/contributors.html for list of of individuals.
-Also see each file for additional information of Copyright claims.
-
-Qi4j is a community aggregated works under Copyright law.
-All parts of the original works at Qi4j is licensed under the
-Apache License ver 2.0 http://www.apache.org/licenses
-
-Below follows a list of binary dependencies and their licenses;
-----------------------------------------------------------------
-
-<NONE>
-
-END OF NOTICE
\ No newline at end of file
diff --git a/extensions/entitystore-preferences/build.gradle b/extensions/entitystore-preferences/build.gradle
index 4992c84..5d52095 100644
--- a/extensions/entitystore-preferences/build.gradle
+++ b/extensions/entitystore-preferences/build.gradle
@@ -1,17 +1,35 @@
+/*
+ * 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.
+ */
 
-description = "Qi4j Preferences EntityStore Extension"
+description = "Apache Zest™ Preferences EntityStore Extension"
 
-jar { manifest { name = "Qi4j Extension - EntityStore - Preferences" }}
+jar { manifest { name = "Apache Zest™ Extension - EntityStore - Preferences" } }
 
 dependencies {
-    
-    compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
 
-    testCompile(project(":org.qi4j.core:org.qi4j.core.testsupport"))
-    testCompile(project(":org.qi4j.extensions:org.qi4j.extension.valueserialization-orgjson"))
+  compile( project( ":org.qi4j.core:org.qi4j.core.bootstrap" ) )
+  compile libraries.slf4j_api
 
-    testRuntime(project(":org.qi4j.core:org.qi4j.core.runtime"))
-    testRuntime(libraries.logback)
+  testCompile( project( ":org.qi4j.core:org.qi4j.core.testsupport" ) )
+  testCompile( project( ":org.qi4j.extensions:org.qi4j.extension.valueserialization-orgjson" ) )
 
+  testRuntime( project( ":org.qi4j.core:org.qi4j.core.runtime" ) )
+  testRuntime( libraries.logback )
 }
 
diff --git a/extensions/entitystore-preferences/dev-status.xml b/extensions/entitystore-preferences/dev-status.xml
index 50d26d3..ac63cda 100644
--- a/extensions/entitystore-preferences/dev-status.xml
+++ b/extensions/entitystore-preferences/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/extensions/entitystore-preferences/src/docs/es-preferences.txt b/extensions/entitystore-preferences/src/docs/es-preferences.txt
index e8214af..5727b5f 100644
--- a/extensions/entitystore-preferences/src/docs/es-preferences.txt
+++ b/extensions/entitystore-preferences/src/docs/es-preferences.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[extension-es-preferences,Preferences EntityStore]]
 = Preferences EntityStore =
 
diff --git a/extensions/entitystore-preferences/src/main/java/org/qi4j/entitystore/prefs/PreferencesEntityStoreMixin.java b/extensions/entitystore-preferences/src/main/java/org/qi4j/entitystore/prefs/PreferencesEntityStoreMixin.java
index ed48871..b47b376 100644
--- a/extensions/entitystore-preferences/src/main/java/org/qi4j/entitystore/prefs/PreferencesEntityStoreMixin.java
+++ b/extensions/entitystore-preferences/src/main/java/org/qi4j/entitystore/prefs/PreferencesEntityStoreMixin.java
@@ -43,7 +43,6 @@
 import org.qi4j.api.service.ServiceDescriptor;
 import org.qi4j.api.service.qualifier.Tagged;
 import org.qi4j.api.structure.Application;
-import org.qi4j.api.structure.Module;
 import org.qi4j.api.type.CollectionType;
 import org.qi4j.api.type.EnumType;
 import org.qi4j.api.type.MapType;
@@ -59,6 +58,7 @@
 import org.qi4j.io.Output;
 import org.qi4j.io.Receiver;
 import org.qi4j.io.Sender;
+import org.qi4j.spi.Qi4jSPI;
 import org.qi4j.spi.entity.EntityState;
 import org.qi4j.spi.entity.EntityStatus;
 import org.qi4j.spi.entitystore.DefaultEntityStoreUnitOfWork;
@@ -66,12 +66,16 @@
 import org.qi4j.spi.entitystore.EntityStoreException;
 import org.qi4j.spi.entitystore.EntityStoreSPI;
 import org.qi4j.spi.entitystore.EntityStoreUnitOfWork;
+import org.qi4j.spi.entitystore.ModuleEntityStoreUnitOfWork;
 import org.qi4j.spi.entitystore.StateCommitter;
 import org.qi4j.spi.entitystore.helpers.DefaultEntityState;
+import org.qi4j.spi.module.ModelModule;
+import org.qi4j.spi.module.ModuleSpi;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import static org.qi4j.functional.Iterables.first;
+import static org.qi4j.functional.Iterables.map;
 
 /**
  * Implementation of EntityStore that is backed by the Preferences API.
@@ -87,6 +91,9 @@
 public class PreferencesEntityStoreMixin
     implements ServiceActivation, EntityStore, EntityStoreSPI
 {
+    @Structure
+    private Qi4jSPI spi;
+
     @This
     private EntityStoreSPI entityStoreSpi;
 
@@ -167,13 +174,15 @@
     }
 
     @Override
-    public EntityStoreUnitOfWork newUnitOfWork( Usecase usecase, Module module, long currentTime )
+    public EntityStoreUnitOfWork newUnitOfWork( Usecase usecase, ModuleSpi module, long currentTime )
     {
-        return new DefaultEntityStoreUnitOfWork( entityStoreSpi, newUnitOfWorkId(), module, usecase, currentTime );
+        EntityStoreUnitOfWork storeUnitOfWork = new DefaultEntityStoreUnitOfWork( entityStoreSpi, newUnitOfWorkId(), usecase, currentTime );
+        storeUnitOfWork = new ModuleEntityStoreUnitOfWork( module, storeUnitOfWork );
+        return storeUnitOfWork;
     }
 
     @Override
-    public Input<EntityState, EntityStoreException> entityStates( final Module module )
+    public Input<EntityState, EntityStoreException> entityStates( final ModuleSpi module )
     {
         return new Input<EntityState, EntityStoreException>()
         {
@@ -189,18 +198,16 @@
                     {
                         UsecaseBuilder builder = UsecaseBuilder.buildUsecase( "qi4j.entitystore.preferences.visit" );
                         Usecase visitUsecase = builder.withMetaInfo( CacheOptions.NEVER ).newUsecase();
-                        final DefaultEntityStoreUnitOfWork uow = new DefaultEntityStoreUnitOfWork(
-                            entityStoreSpi,
-                            newUnitOfWorkId(),
-                            module,
-                            visitUsecase,
-                            System.currentTimeMillis() );
+                        final EntityStoreUnitOfWork uow =
+                            newUnitOfWork( visitUsecase, module, System.currentTimeMillis() );
+
                         try
                         {
                             String[] identities = root.childrenNames();
                             for( String identity : identities )
                             {
-                                EntityState entityState = uow.entityStateOf( EntityReference.parseEntityReference( identity ) );
+                                EntityReference reference = EntityReference.parseEntityReference( identity );
+                                EntityState entityState = uow.entityStateOf( module, reference );
                                 receiver.receive( entityState );
                             }
                         }
@@ -216,25 +223,22 @@
 
     @Override
     public EntityState newEntityState( EntityStoreUnitOfWork unitOfWork,
+                                       ModuleSpi module,
                                        EntityReference identity,
                                        EntityDescriptor entityDescriptor
     )
     {
-        return new DefaultEntityState( (DefaultEntityStoreUnitOfWork) unitOfWork, identity, entityDescriptor );
+        return new DefaultEntityState( unitOfWork.currentTime(), identity, entityDescriptor );
     }
 
     @Override
-    public EntityState entityStateOf( EntityStoreUnitOfWork unitOfWork, EntityReference identity )
+    public EntityState entityStateOf( EntityStoreUnitOfWork unitOfWork, ModuleSpi module, EntityReference identity )
     {
         try
         {
-            DefaultEntityStoreUnitOfWork desuw = (DefaultEntityStoreUnitOfWork) unitOfWork;
-
-            Module module = desuw.module();
-
             if( !root.nodeExists( identity.identity() ) )
             {
-                throw new NoSuchEntityException( identity, UnknownType.class );
+                throw new NoSuchEntityException( identity, UnknownType.class, unitOfWork.usecase() );
             }
 
             Preferences entityPrefs = root.node( identity.identity() );
@@ -245,7 +249,11 @@
             EntityDescriptor entityDescriptor = module.entityDescriptor( type );
             if( entityDescriptor == null )
             {
-                throw new EntityTypeNotFoundException( type );
+                throw new EntityTypeNotFoundException( type,
+                                                       module.name(),
+                                                       map( ModelModule.toStringFunction,
+                                                            module.findVisibleEntityTypes()
+                                                       ) );
             }
 
             Map<QualifiedName, Object> properties = new HashMap<>();
@@ -424,16 +432,15 @@
                     }
                     for( int idx = 0; idx < namedRefs.length; idx += 2 )
                     {
-                        String name = namedRefs[idx];
-                        String ref = namedRefs[idx + 1];
+                        String name = namedRefs[ idx ];
+                        String ref = namedRefs[ idx + 1 ];
                         references.put( name, EntityReference.parseEntityReference( ref ) );
                     }
                     namedAssociations.put( namedAssociationType.qualifiedName(), references );
                 }
             }
 
-            return new DefaultEntityState( desuw,
-                                           entityPrefs.get( "version", "" ),
+            return new DefaultEntityState( entityPrefs.get( "version", "" ),
                                            entityPrefs.getLong( "modified", unitOfWork.currentTime() ),
                                            identity,
                                            status,
@@ -455,6 +462,7 @@
     {
         return new StateCommitter()
         {
+            @SuppressWarnings( "SynchronizeOnNonFinalField" )
             @Override
             public void commit()
             {
@@ -595,7 +603,8 @@
             if( !state.manyAssociations().isEmpty() )
             {
                 Preferences manyAssocsPrefs = entityPrefs.node( "manyassociations" );
-                for( Map.Entry<QualifiedName, List<EntityReference>> manyAssociation : state.manyAssociations().entrySet() )
+                for( Map.Entry<QualifiedName, List<EntityReference>> manyAssociation : state.manyAssociations()
+                    .entrySet() )
                 {
                     StringBuilder manyAssocs = new StringBuilder();
                     for( EntityReference entityReference : manyAssociation.getValue() )
@@ -617,7 +626,8 @@
             if( !state.namedAssociations().isEmpty() )
             {
                 Preferences namedAssocsPrefs = entityPrefs.node( "namedassociations" );
-                for( Map.Entry<QualifiedName, Map<String, EntityReference>> namedAssociation : state.namedAssociations().entrySet() )
+                for( Map.Entry<QualifiedName, Map<String, EntityReference>> namedAssociation : state.namedAssociations()
+                    .entrySet() )
                 {
                     StringBuilder namedAssocs = new StringBuilder();
                     for( Map.Entry<String, EntityReference> namedRef : namedAssociation.getValue().entrySet() )
@@ -702,5 +712,4 @@
     private static class UnknownType
     {
     }
-
 }
diff --git a/extensions/entitystore-preferences/src/main/java/org/qi4j/entitystore/prefs/assembly/package.html b/extensions/entitystore-preferences/src/main/java/org/qi4j/entitystore/prefs/assembly/package.html
index df33d85..81fa32c 100644
--- a/extensions/entitystore-preferences/src/main/java/org/qi4j/entitystore/prefs/assembly/package.html
+++ b/extensions/entitystore-preferences/src/main/java/org/qi4j/entitystore/prefs/assembly/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Preferences EntityStore Assembly.</h2>
diff --git a/extensions/entitystore-preferences/src/main/java/org/qi4j/entitystore/prefs/package.html b/extensions/entitystore-preferences/src/main/java/org/qi4j/entitystore/prefs/package.html
index f7f36cf..079026d 100644
--- a/extensions/entitystore-preferences/src/main/java/org/qi4j/entitystore/prefs/package.html
+++ b/extensions/entitystore-preferences/src/main/java/org/qi4j/entitystore/prefs/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Preferences EntityStore.</h2>
diff --git a/extensions/entitystore-redis/build.gradle b/extensions/entitystore-redis/build.gradle
index 6416e28..50e6c36 100644
--- a/extensions/entitystore-redis/build.gradle
+++ b/extensions/entitystore-redis/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j Redis EntityStore Extension"
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Extension - EntityStore - Redis" }}
+description = "Apache Zest™ Redis EntityStore Extension"
+
+jar { manifest { name = "Apache Zest™ Extension - EntityStore - Redis" }}
 
 dependencies {
     
diff --git a/extensions/entitystore-redis/dev-status.xml b/extensions/entitystore-redis/dev-status.xml
index 8a97f26..169068f 100644
--- a/extensions/entitystore-redis/dev-status.xml
+++ b/extensions/entitystore-redis/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/extensions/entitystore-redis/src/docs/es-redis.txt b/extensions/entitystore-redis/src/docs/es-redis.txt
index 02ba7a1..dae3644 100644
--- a/extensions/entitystore-redis/src/docs/es-redis.txt
+++ b/extensions/entitystore-redis/src/docs/es-redis.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[extension-es-redis,Redis EntityStore]]
 = Redis EntityStore =
 
diff --git a/extensions/entitystore-redis/src/main/java/org/qi4j/entitystore/redis/package.html b/extensions/entitystore-redis/src/main/java/org/qi4j/entitystore/redis/package.html
index 499eeff..2f89959 100644
--- a/extensions/entitystore-redis/src/main/java/org/qi4j/entitystore/redis/package.html
+++ b/extensions/entitystore-redis/src/main/java/org/qi4j/entitystore/redis/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Redis EntityStore.</h2>
diff --git a/extensions/entitystore-redis/src/test/java/org/qi4j/entitystore/redis/RedisMapEntityStoreWithCacheTest.java b/extensions/entitystore-redis/src/test/java/org/qi4j/entitystore/redis/RedisMapEntityStoreWithCacheTest.java
new file mode 100644
index 0000000..ab15743
--- /dev/null
+++ b/extensions/entitystore-redis/src/test/java/org/qi4j/entitystore/redis/RedisMapEntityStoreWithCacheTest.java
@@ -0,0 +1,78 @@
+/*
+ *  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.qi4j.entitystore.redis;
+
+import org.junit.BeforeClass;
+import org.qi4j.api.common.Visibility;
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.test.EntityTestAssembler;
+import org.qi4j.test.cache.AbstractEntityStoreWithCacheTest;
+import org.qi4j.valueserialization.orgjson.OrgJsonValueSerializationAssembler;
+import redis.clients.jedis.Jedis;
+import redis.clients.jedis.JedisPool;
+
+import static org.qi4j.test.util.Assume.assumeConnectivity;
+
+public class RedisMapEntityStoreWithCacheTest
+    extends AbstractEntityStoreWithCacheTest
+{
+    @BeforeClass
+    public static void beforeRedisMapEntityStoreTests()
+    {
+        assumeConnectivity( "localhost", 6379 );
+    }
+
+    @Override
+    public void assemble( ModuleAssembly module )
+        throws AssemblyException
+    {
+        super.assemble( module );
+        ModuleAssembly config = module.layer().module( "config" );
+        new EntityTestAssembler().assemble( config );
+        new OrgJsonValueSerializationAssembler().assemble( module );
+        new RedisMapEntityStoreAssembler().withConfig( config, Visibility.layer ).assemble( module );
+    }
+
+    private JedisPool jedisPool;
+
+    @Override
+    public void setUp()
+        throws Exception
+    {
+        super.setUp();
+        RedisMapEntityStoreService es = module.findService( RedisMapEntityStoreService.class ).get();
+        jedisPool = es.jedisPool();
+
+    }
+
+    @Override
+    public void tearDown()
+        throws Exception
+    {
+        Jedis jedis = jedisPool.getResource();
+        try
+        {
+            jedis.flushDB();
+        }
+        finally
+        {
+            jedisPool.returnResource( jedis );
+        }
+        super.tearDown();
+    }
+}
diff --git a/extensions/entitystore-riak/build.gradle b/extensions/entitystore-riak/build.gradle
index 1066bab..ebdef59 100644
--- a/extensions/entitystore-riak/build.gradle
+++ b/extensions/entitystore-riak/build.gradle
@@ -1,18 +1,37 @@
-description = "Qi4j Riak EntityStore Extension"
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Extension - EntityStore - Riak" }}
+description = "Apache Zest™ Riak EntityStore Extension"
+
+jar { manifest { name = "Apache Zest™ Extension - EntityStore - Riak" } }
 
 dependencies {
-    
-    compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
-    compile(project(":org.qi4j.libraries:org.qi4j.library.locking"))
-    compile(libraries.riak)
 
-    testCompile(project(":org.qi4j.core:org.qi4j.core.testsupport"))
-    testCompile(project(":org.qi4j.extensions:org.qi4j.extension.valueserialization-orgjson"))
+  compile( project( ":org.qi4j.core:org.qi4j.core.bootstrap" ) )
+  compile( project( ":org.qi4j.libraries:org.qi4j.library.locking" ) )
+  compile libraries.slf4j_api
+  compile( libraries.riak )
 
-    testRuntime(project(":org.qi4j.core:org.qi4j.core.runtime"))
-    testRuntime(libraries.logback)
+  testCompile( project( ":org.qi4j.core:org.qi4j.core.testsupport" ) )
+  testCompile( project( ":org.qi4j.extensions:org.qi4j.extension.valueserialization-orgjson" ) )
 
+  testRuntime( project( ":org.qi4j.core:org.qi4j.core.runtime" ) )
+  testRuntime( libraries.logback )
 }
 
diff --git a/extensions/entitystore-riak/dev-status.xml b/extensions/entitystore-riak/dev-status.xml
index 8a97f26..169068f 100644
--- a/extensions/entitystore-riak/dev-status.xml
+++ b/extensions/entitystore-riak/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/extensions/entitystore-riak/src/docs/es-riak.txt b/extensions/entitystore-riak/src/docs/es-riak.txt
index 03a2e5e..62e3cca 100644
--- a/extensions/entitystore-riak/src/docs/es-riak.txt
+++ b/extensions/entitystore-riak/src/docs/es-riak.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[extension-es-riak,Riak EntityStore]]
 = Riak EntityStore =
 
diff --git a/extensions/entitystore-riak/src/main/java/org/qi4j/entitystore/riak/package.html b/extensions/entitystore-riak/src/main/java/org/qi4j/entitystore/riak/package.html
index 5636cd1..9e3ef24 100644
--- a/extensions/entitystore-riak/src/main/java/org/qi4j/entitystore/riak/package.html
+++ b/extensions/entitystore-riak/src/main/java/org/qi4j/entitystore/riak/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Riak EntityStore.</h2>
diff --git a/extensions/entitystore-riak/src/test/java/org/qi4j/entitystore/riak/RiakHttpMapEntityStoreTest.java b/extensions/entitystore-riak/src/test/java/org/qi4j/entitystore/riak/RiakHttpMapEntityStoreTest.java
index 407e204..3ab6bd5 100644
--- a/extensions/entitystore-riak/src/test/java/org/qi4j/entitystore/riak/RiakHttpMapEntityStoreTest.java
+++ b/extensions/entitystore-riak/src/test/java/org/qi4j/entitystore/riak/RiakHttpMapEntityStoreTest.java
@@ -69,7 +69,7 @@
     public void tearDown()
         throws Exception
     {
-        // Riak don't expose bucket deletion in its API so we empty the Qi4j Entities bucket.
+        // Riak don't expose bucket deletion in its API so we empty the Zest Entities bucket.
         Bucket bucket = riakClient.fetchBucket( bucketKey ).execute();
         for( String key : bucket.keys() )
         {
diff --git a/extensions/entitystore-riak/src/test/java/org/qi4j/entitystore/riak/RiakMapEntityStoreWithCacheTest.java b/extensions/entitystore-riak/src/test/java/org/qi4j/entitystore/riak/RiakMapEntityStoreWithCacheTest.java
new file mode 100644
index 0000000..5a0e6b3
--- /dev/null
+++ b/extensions/entitystore-riak/src/test/java/org/qi4j/entitystore/riak/RiakMapEntityStoreWithCacheTest.java
@@ -0,0 +1,76 @@
+/*
+ *  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.qi4j.entitystore.riak;
+
+import com.basho.riak.client.IRiakClient;
+import com.basho.riak.client.bucket.Bucket;
+import org.junit.BeforeClass;
+import org.qi4j.api.common.Visibility;
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.test.EntityTestAssembler;
+import org.qi4j.test.cache.AbstractEntityStoreWithCacheTest;
+import org.qi4j.valueserialization.orgjson.OrgJsonValueSerializationAssembler;
+
+import static org.qi4j.test.util.Assume.assumeConnectivity;
+
+public class RiakMapEntityStoreWithCacheTest
+    extends AbstractEntityStoreWithCacheTest
+{
+    @BeforeClass
+    public static void beforeRiakProtobufMapEntityStoreTests()
+    {
+        assumeConnectivity( "localhost", 8087 );
+    }
+
+    @Override
+    public void assemble( ModuleAssembly module )
+        throws AssemblyException
+    {
+        super.assemble( module );
+        ModuleAssembly config = module.layer().module( "config" );
+        new EntityTestAssembler().assemble( config );
+        new OrgJsonValueSerializationAssembler().assemble( module );
+        new RiakProtobufMapEntityStoreAssembler().withConfig( config, Visibility.layer ).assemble( module );
+    }
+
+    private IRiakClient riakClient;
+    private String bucketKey;
+
+    @Override
+    public void setUp()
+        throws Exception
+    {
+        super.setUp();
+        RiakMapEntityStoreService es = module.findService( RiakMapEntityStoreService.class ).get();
+        riakClient = es.riakClient();
+        bucketKey = es.bucket();
+    }
+
+    @Override
+    public void tearDown()
+        throws Exception
+    {
+        // Riak don't expose bucket deletion in its API so we empty the Zest Entities bucket.
+        Bucket bucket = riakClient.fetchBucket( bucketKey ).execute();
+        for( String key : bucket.keys() )
+        {
+            bucket.delete( key ).execute();
+        }
+        super.tearDown();
+    }
+}
diff --git a/extensions/entitystore-riak/src/test/java/org/qi4j/entitystore/riak/RiakProtobufMapEntityStoreTest.java b/extensions/entitystore-riak/src/test/java/org/qi4j/entitystore/riak/RiakProtobufMapEntityStoreTest.java
index 8147bde..ef94011 100644
--- a/extensions/entitystore-riak/src/test/java/org/qi4j/entitystore/riak/RiakProtobufMapEntityStoreTest.java
+++ b/extensions/entitystore-riak/src/test/java/org/qi4j/entitystore/riak/RiakProtobufMapEntityStoreTest.java
@@ -69,7 +69,7 @@
     public void tearDown()
         throws Exception
     {
-        // Riak don't expose bucket deletion in its API so we empty the Qi4j Entities bucket.
+        // Riak don't expose bucket deletion in its API so we empty the Zest Entities bucket.
         Bucket bucket = riakClient.fetchBucket( bucketKey ).execute();
         for( String key : bucket.keys() )
         {
diff --git a/extensions/entitystore-sql/NOTICE b/extensions/entitystore-sql/NOTICE
deleted file mode 100644
index f6fad01..0000000
--- a/extensions/entitystore-sql/NOTICE
+++ /dev/null
@@ -1,22 +0,0 @@
-Qi4j REST Persistence Extension
-Copyright 2007-2008, The Qi4j Development Team of individuals.
-
-See http://www.qi4j.org/contributors.html for list of of individuals.
-Also see each file for additional information of Copyright claims.
-
-Qi4j is a community aggregated works under Copyright law.
-All parts of the original works at Qi4j is licensed under the
-Apache License ver 2.0 http://www.apache.org/licenses
-
-Below follows a list of binary dependencies and their licenses;
-----------------------------------------------------------------
-
-
-This module uses software developed at Apache Software Foundation
-(http://www.apache.org) under Apache License 2.0, see LICENSE
-
-This module uses SLF4J, developed at slf4j.org under MIT License.
-See licenses/slf4j.license
-
-
-END OF NOTICE
\ No newline at end of file
diff --git a/extensions/entitystore-sql/build.gradle b/extensions/entitystore-sql/build.gradle
index 0af8204..f8a0849 100644
--- a/extensions/entitystore-sql/build.gradle
+++ b/extensions/entitystore-sql/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j SQL EntityStore Extension"
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Extension - EntityStore - SQL" }}
+description = "Apache Zest™ SQL EntityStore Extension"
+
+jar { manifest { name = "Apache Zest™ Extension - EntityStore - SQL" }}
 
 dependencies {
 
diff --git a/extensions/entitystore-sql/dev-status.xml b/extensions/entitystore-sql/dev-status.xml
index 30382ac..94d633f 100644
--- a/extensions/entitystore-sql/dev-status.xml
+++ b/extensions/entitystore-sql/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/extensions/entitystore-sql/src/docs/es-sql.txt b/extensions/entitystore-sql/src/docs/es-sql.txt
index 03f1382..caa2659 100644
--- a/extensions/entitystore-sql/src/docs/es-sql.txt
+++ b/extensions/entitystore-sql/src/docs/es-sql.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[extension-es-sql, SQL EntityStore]]
 = SQL EntityStore =
 
diff --git a/extensions/entitystore-sql/src/main/java/org/qi4j/entitystore/sql/SQLEntityStoreMixin.java b/extensions/entitystore-sql/src/main/java/org/qi4j/entitystore/sql/SQLEntityStoreMixin.java
index 8ba2aac..b57dcf0 100644
--- a/extensions/entitystore-sql/src/main/java/org/qi4j/entitystore/sql/SQLEntityStoreMixin.java
+++ b/extensions/entitystore-sql/src/main/java/org/qi4j/entitystore/sql/SQLEntityStoreMixin.java
@@ -48,7 +48,6 @@
 import org.qi4j.api.service.ServiceActivation;
 import org.qi4j.api.service.qualifier.Tagged;
 import org.qi4j.api.structure.Application;
-import org.qi4j.api.structure.Module;
 import org.qi4j.api.type.ValueType;
 import org.qi4j.api.unitofwork.EntityTypeNotFoundException;
 import org.qi4j.api.usecase.Usecase;
@@ -64,6 +63,7 @@
 import org.qi4j.io.Receiver;
 import org.qi4j.io.Sender;
 import org.qi4j.library.sql.common.SQLUtil;
+import org.qi4j.spi.Qi4jSPI;
 import org.qi4j.spi.entity.EntityState;
 import org.qi4j.spi.entity.EntityStatus;
 import org.qi4j.spi.entitystore.DefaultEntityStoreUnitOfWork;
@@ -72,15 +72,19 @@
 import org.qi4j.spi.entitystore.EntityStoreException;
 import org.qi4j.spi.entitystore.EntityStoreSPI;
 import org.qi4j.spi.entitystore.EntityStoreUnitOfWork;
+import org.qi4j.spi.entitystore.ModuleEntityStoreUnitOfWork;
 import org.qi4j.spi.entitystore.StateCommitter;
 import org.qi4j.spi.entitystore.helpers.DefaultEntityState;
 import org.qi4j.spi.entitystore.helpers.JSONKeys;
 import org.qi4j.spi.entitystore.helpers.Migration;
 import org.qi4j.spi.entitystore.helpers.StateStore;
+import org.qi4j.spi.module.ModelModule;
+import org.qi4j.spi.module.ModuleSpi;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import static org.qi4j.functional.Iterables.first;
+import static org.qi4j.functional.Iterables.map;
 
 /**
  * SQL EntityStore core Mixin.
@@ -103,6 +107,9 @@
     private EntityStoreSPI entityStoreSPI;
 
     @Structure
+    private Qi4jSPI spi;
+
+    @Structure
     private Application application;
 
     @Service
@@ -230,31 +237,34 @@
     }
 
     @Override
-    public EntityState entityStateOf( EntityStoreUnitOfWork unitOfWork, EntityReference entityRef )
+    public EntityState entityStateOf( EntityStoreUnitOfWork unitOfWork, ModuleSpi module, EntityReference entityRef )
     {
         EntityValueResult valueResult = getValue( entityRef );
-        return new DefaultSQLEntityState( readEntityState( (DefaultEntityStoreUnitOfWork) unitOfWork,
-                                                           valueResult.getReader() ),
-                                          valueResult.getEntityPK(),
-                                          valueResult.getEntityOptimisticLock() );
+        DefaultEntityState state = readEntityState( module, valueResult.getReader() );
+        return new DefaultSQLEntityState( state, valueResult.getEntityPK(), valueResult.getEntityOptimisticLock() );
     }
 
     @Override
-    public EntityState newEntityState( EntityStoreUnitOfWork unitOfWork, EntityReference entityRef, EntityDescriptor entityDescriptor )
+    public EntityState newEntityState( EntityStoreUnitOfWork unitOfWork,
+                                       ModuleSpi module,
+                                       EntityReference entityRef,
+                                       EntityDescriptor entityDescriptor
+    )
     {
-        return new DefaultSQLEntityState( new DefaultEntityState( (DefaultEntityStoreUnitOfWork) unitOfWork,
-                                                                  entityRef,
-                                                                  entityDescriptor ) );
+        return new DefaultSQLEntityState( new DefaultEntityState( unitOfWork.currentTime(), entityRef, entityDescriptor ) );
     }
 
     @Override
-    public EntityStoreUnitOfWork newUnitOfWork( Usecase usecase, Module module, long currentTime )
+    public EntityStoreUnitOfWork newUnitOfWork( Usecase usecase, ModuleSpi module, long currentTime )
     {
-        return new DefaultEntityStoreUnitOfWork( entityStoreSPI, newUnitOfWorkId(), module, usecase, currentTime );
+        EntityStoreUnitOfWork storeUnitOfWork =
+            new DefaultEntityStoreUnitOfWork( entityStoreSPI, newUnitOfWorkId(), usecase, currentTime );
+        storeUnitOfWork = new ModuleEntityStoreUnitOfWork( module, storeUnitOfWork );
+        return storeUnitOfWork;
     }
 
     @Override
-    public Input<EntityState, EntityStoreException> entityStates( final Module module )
+    public Input<EntityState, EntityStoreException> entityStates( final ModuleSpi module )
     {
         return new Input<EntityState, EntityStoreException>()
         {
@@ -291,16 +301,15 @@
         };
     }
 
-    private void queryAllEntities( Module module, EntityStatesVisitor entityStatesVisitor )
+    private void queryAllEntities( ModuleSpi module, EntityStatesVisitor entityStatesVisitor )
     {
         Connection connection = null;
         PreparedStatement ps = null;
         ResultSet rs = null;
         UsecaseBuilder builder = UsecaseBuilder.buildUsecase( "qi4j.entitystore.sql.visit" );
         Usecase usecase = builder.withMetaInfo( CacheOptions.NEVER ).newUsecase();
-        final DefaultEntityStoreUnitOfWork uow = new DefaultEntityStoreUnitOfWork( entityStoreSPI,
-                                                                                   newUnitOfWorkId(), module, usecase,
-                                                                                   System.currentTimeMillis() );
+        final ModuleEntityStoreUnitOfWork uow =
+            (ModuleEntityStoreUnitOfWork) newUnitOfWork( usecase, module, System.currentTimeMillis() );
         try
         {
             connection = database.getConnection();
@@ -309,7 +318,7 @@
             rs = ps.executeQuery();
             while( rs.next() )
             {
-                DefaultEntityState entityState = readEntityState( uow, database.getEntityValue( rs ).getReader() );
+                DefaultEntityState entityState = readEntityState( module, database.getEntityValue( rs ).getReader() );
                 if( !entityStatesVisitor.visit( entityState ) )
                 {
                     return;
@@ -338,12 +347,11 @@
         return uuid + Integer.toHexString( count.incrementAndGet() );
     }
 
-    protected DefaultEntityState readEntityState( DefaultEntityStoreUnitOfWork unitOfWork, Reader entityState )
+    protected DefaultEntityState readEntityState( ModuleSpi module, Reader entityState )
         throws EntityStoreException
     {
         try
         {
-            Module module = unitOfWork.module();
             JSONObject jsonObject = new JSONObject( new JSONTokener( entityState ) );
             EntityStatus status = EntityStatus.LOADED;
 
@@ -377,7 +385,11 @@
             EntityDescriptor entityDescriptor = module.entityDescriptor( type );
             if( entityDescriptor == null )
             {
-                throw new EntityTypeNotFoundException( type );
+                throw new EntityTypeNotFoundException( type,
+                                                       module.name(),
+                                                       map( ModelModule.toStringFunction,
+                                                            module.findVisibleEntityTypes()
+                                                       ) );
             }
 
             Map<QualifiedName, Object> properties = new HashMap<>();
@@ -480,7 +492,7 @@
                 }
             }
 
-            return new DefaultEntityState( unitOfWork, version, modified,
+            return new DefaultEntityState( version, modified,
                                            EntityReference.parseEntityReference( identity ), status, entityDescriptor,
                                            properties, associations, manyAssociations, namedAssociations );
         }
@@ -495,7 +507,7 @@
         throws IOException
     {
         JSONObject jsonObject;
-        try( Reader reader = getValue( EntityReference.parseEntityReference( id ) ).getReader() )
+        try (Reader reader = getValue( EntityReference.parseEntityReference( id ) ).getReader())
         {
             jsonObject = new JSONObject( new JSONTokener( reader ) );
         }
@@ -521,10 +533,7 @@
             {
                 throw new EntityNotFoundException( ref );
             }
-
-            EntityValueResult result = database.getEntityValue( rs );
-
-            return result;
+            return database.getEntityValue( rs );
         }
         catch( SQLException sqle )
         {
@@ -579,7 +588,8 @@
             }
 
             JSONWriter associations = properties.endObject().key( JSONKeys.ASSOCIATIONS ).object();
-            for( Map.Entry<QualifiedName, EntityReference> stateNameEntityReferenceEntry : state.associations().entrySet() )
+            for( Map.Entry<QualifiedName, EntityReference> stateNameEntityReferenceEntry : state.associations()
+                .entrySet() )
             {
                 EntityReference value = stateNameEntityReferenceEntry.getValue();
                 associations.key( stateNameEntityReferenceEntry.getKey().name() ).
@@ -587,7 +597,8 @@
             }
 
             JSONWriter manyAssociations = associations.endObject().key( JSONKeys.MANY_ASSOCIATIONS ).object();
-            for( Map.Entry<QualifiedName, List<EntityReference>> stateNameListEntry : state.manyAssociations().entrySet() )
+            for( Map.Entry<QualifiedName, List<EntityReference>> stateNameListEntry : state.manyAssociations()
+                .entrySet() )
             {
                 JSONWriter assocs = manyAssociations.key( stateNameListEntry.getKey().name() ).array();
                 for( EntityReference entityReference : stateNameListEntry.getValue() )
@@ -598,7 +609,8 @@
             }
 
             JSONWriter namedAssociations = manyAssociations.endObject().key( JSONKeys.NAMED_ASSOCIATIONS ).object();
-            for( Map.Entry<QualifiedName, Map<String, EntityReference>> stateNameMapEntry : state.namedAssociations().entrySet() )
+            for( Map.Entry<QualifiedName, Map<String, EntityReference>> stateNameMapEntry : state.namedAssociations()
+                .entrySet() )
             {
                 JSONWriter assocs = namedAssociations.key( stateNameMapEntry.getKey().name() ).object();
                 for( Map.Entry<String, EntityReference> entry : stateNameMapEntry.getValue().entrySet() )
@@ -614,5 +626,4 @@
             throw new EntityStoreException( "Could not store EntityState", e );
         }
     }
-
 }
diff --git a/extensions/entitystore-sql/src/main/java/org/qi4j/entitystore/sql/assembly/package.html b/extensions/entitystore-sql/src/main/java/org/qi4j/entitystore/sql/assembly/package.html
index ea11cb3..09579ad 100644
--- a/extensions/entitystore-sql/src/main/java/org/qi4j/entitystore/sql/assembly/package.html
+++ b/extensions/entitystore-sql/src/main/java/org/qi4j/entitystore/sql/assembly/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>SQL EntityStore Assembly.</h2>
diff --git a/extensions/entitystore-sql/src/main/java/org/qi4j/entitystore/sql/internal/package.html b/extensions/entitystore-sql/src/main/java/org/qi4j/entitystore/sql/internal/package.html
index 5de6218..c8ccb16 100644
--- a/extensions/entitystore-sql/src/main/java/org/qi4j/entitystore/sql/internal/package.html
+++ b/extensions/entitystore-sql/src/main/java/org/qi4j/entitystore/sql/internal/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>SQL EntityStore Internal Package.</h2>
diff --git a/extensions/entitystore-sql/src/main/java/org/qi4j/entitystore/sql/package.html b/extensions/entitystore-sql/src/main/java/org/qi4j/entitystore/sql/package.html
index d526752..c7e5688 100644
--- a/extensions/entitystore-sql/src/main/java/org/qi4j/entitystore/sql/package.html
+++ b/extensions/entitystore-sql/src/main/java/org/qi4j/entitystore/sql/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>SQL EntityStore.</h2>
diff --git a/extensions/entitystore-sql/src/test/java/org/qi4j/entitystore/sql/DerbySQLEntityStoreTest.java b/extensions/entitystore-sql/src/test/java/org/qi4j/entitystore/sql/DerbySQLEntityStoreTest.java
index 7d15d46..31da42c 100644
--- a/extensions/entitystore-sql/src/test/java/org/qi4j/entitystore/sql/DerbySQLEntityStoreTest.java
+++ b/extensions/entitystore-sql/src/test/java/org/qi4j/entitystore/sql/DerbySQLEntityStoreTest.java
@@ -14,6 +14,7 @@
  */
 package org.qi4j.entitystore.sql;
 
+import java.io.File;
 import java.sql.Connection;
 import java.sql.Statement;
 import javax.sql.DataSource;
@@ -92,7 +93,7 @@
                 stmt.execute( String.format( "DELETE FROM %s." + SQLs.TABLE_NAME, schemaName ) );
                 connection.commit();
             }
-            FileUtil.removeDirectory( "target/qi4j-data" );
+            FileUtil.removeDirectory( new File( "target/qi4j-data" ) );
         }
         finally
         {
diff --git a/extensions/entitystore-sql/src/test/java/org/qi4j/entitystore/sql/H2SQLEntityStoreTest.java b/extensions/entitystore-sql/src/test/java/org/qi4j/entitystore/sql/H2SQLEntityStoreTest.java
index 9b89dc1..dc3e8b2 100644
--- a/extensions/entitystore-sql/src/test/java/org/qi4j/entitystore/sql/H2SQLEntityStoreTest.java
+++ b/extensions/entitystore-sql/src/test/java/org/qi4j/entitystore/sql/H2SQLEntityStoreTest.java
@@ -13,6 +13,7 @@
  */
 package org.qi4j.entitystore.sql;
 
+import java.io.File;
 import org.apache.derby.iapi.services.io.FileUtil;
 import org.qi4j.api.common.Visibility;
 import org.qi4j.bootstrap.AssemblyException;
@@ -68,7 +69,7 @@
     {
         try
         {
-            FileUtil.removeDirectory( "target/qi4j-data" );
+            FileUtil.removeDirectory( new File( "target/qi4j-data" ) );
         }
         finally
         {
diff --git a/extensions/entitystore-sql/src/test/java/org/qi4j/entitystore/sql/SQLiteEntityStoreTest.java b/extensions/entitystore-sql/src/test/java/org/qi4j/entitystore/sql/SQLiteEntityStoreTest.java
index 6040ae5..5e4d5d1 100644
--- a/extensions/entitystore-sql/src/test/java/org/qi4j/entitystore/sql/SQLiteEntityStoreTest.java
+++ b/extensions/entitystore-sql/src/test/java/org/qi4j/entitystore/sql/SQLiteEntityStoreTest.java
@@ -13,6 +13,7 @@
  */
 package org.qi4j.entitystore.sql;
 
+import java.io.File;
 import org.apache.derby.iapi.services.io.FileUtil;
 import org.junit.BeforeClass;
 import org.qi4j.api.common.Visibility;
@@ -77,7 +78,7 @@
     {
         try
         {
-            FileUtil.removeDirectory( "target/qi4j-data" );
+            FileUtil.removeDirectory( new File( "target/qi4j-data" ) );
         }
         finally
         {
diff --git a/extensions/entitystore-sql/src/test/resources/derby-datasource.properties b/extensions/entitystore-sql/src/test/resources/derby-datasource.properties
index 03bf132..8fc9229 100644
--- a/extensions/entitystore-sql/src/test/resources/derby-datasource.properties
+++ b/extensions/entitystore-sql/src/test/resources/derby-datasource.properties
@@ -1,3 +1,18 @@
+# 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.
+
 enabled=true
 url=jdbc:derby:memory:testdb;create=true
 driver=org.apache.derby.jdbc.EmbeddedDriver
diff --git a/extensions/entitystore-sql/src/test/resources/h2-datasource.properties b/extensions/entitystore-sql/src/test/resources/h2-datasource.properties
index 01733c5..b928cd9 100644
--- a/extensions/entitystore-sql/src/test/resources/h2-datasource.properties
+++ b/extensions/entitystore-sql/src/test/resources/h2-datasource.properties
@@ -1,3 +1,18 @@
+# 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.
+
 enabled=true
 url=jdbc:h2:mem:test
 driver=org.h2.Driver
diff --git a/extensions/entitystore-sql/src/test/resources/logback.xml b/extensions/entitystore-sql/src/test/resources/logback.xml
index d057922..52bf1c5 100644
--- a/extensions/entitystore-sql/src/test/resources/logback.xml
+++ b/extensions/entitystore-sql/src/test/resources/logback.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
 <configuration>
 
     <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
diff --git a/extensions/entitystore-sql/src/test/resources/mysql-datasource.properties b/extensions/entitystore-sql/src/test/resources/mysql-datasource.properties
index 8280b11..4cb7dba 100644
--- a/extensions/entitystore-sql/src/test/resources/mysql-datasource.properties
+++ b/extensions/entitystore-sql/src/test/resources/mysql-datasource.properties
@@ -1,3 +1,18 @@
+# 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.
+
 enabled=true
 url=jdbc:mysql://localhost:3306/jdbc_test_db?profileSQL=true
 driver=com.mysql.jdbc.Driver
diff --git a/extensions/entitystore-sql/src/test/resources/postgresql-datasource.properties b/extensions/entitystore-sql/src/test/resources/postgresql-datasource.properties
index a906d84..f7d7ad5 100644
--- a/extensions/entitystore-sql/src/test/resources/postgresql-datasource.properties
+++ b/extensions/entitystore-sql/src/test/resources/postgresql-datasource.properties
@@ -1,3 +1,18 @@
+# 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.
+
 enabled=true
 url=jdbc:postgresql://localhost:5432/jdbc_test_db
 driver=org.postgresql.Driver
diff --git a/extensions/entitystore-sql/src/test/resources/sqlite-datasource.properties b/extensions/entitystore-sql/src/test/resources/sqlite-datasource.properties
index 942daeb..36ac155 100644
--- a/extensions/entitystore-sql/src/test/resources/sqlite-datasource.properties
+++ b/extensions/entitystore-sql/src/test/resources/sqlite-datasource.properties
@@ -1,3 +1,18 @@
+# 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.
+
 enabled=true
 url=jdbc:sqlite::memory:
 driver=org.sqlite.JDBC
diff --git a/extensions/entitystore-voldemort/NOTICE b/extensions/entitystore-voldemort/NOTICE
deleted file mode 100644
index af6b4af..0000000
--- a/extensions/entitystore-voldemort/NOTICE
+++ /dev/null
@@ -1,163 +0,0 @@
-Qi4j Voldemort Entity Store Extension
-Copyright 2007-2010, The Qi4j Development Team of individuals.
-
-See http://www.qi4j.org/contributors.html for list of of individuals.
-Also see each file for additional information of Copyright claims.
-
-Qi4j is a community aggregated works under Copyright law.
-All parts of the original works at Qi4j is licensed under the
-Apache License ver 2.0 http://www.apache.org/licenses
-
-Below follows Project Voldemorts NOTICE content, on which this module depends.
--------------------------------------------------------------------------------
-
-This module uses Project Voldemort, developed at http://www.project-voldemort.org
-under Apache License 2.0. However, Project Voldemort in turn depends on other
-software, with the following notices to be respected.
-
-   =========================================================================
-   ==  NOTICE file corresponding to the section 4d of                     ==
-   ==  the Apache License, Version 2.0                                    ==
-   =========================================================================
-
-This product includes the libraries
-  Avro
-  commons-codec
-  commons-collections
-  commons-dbcp
-  commons-httpclient
-  commons-io
-  commons-lang
-  commons-logging
-  commons-pool
-  catalina-ant
-  servlet-api
-  velocity
-  xerces
-  libthrift
-  all of which are software developed by The Apache Software Foundation (http://www.apache.org/)
-
-This product includes google-collections and protocol buffers, two libraries developed by Google (http://www.google.com, http://code.google.com/p/google-collections/ and http://code.google.com/apis/protocolbuffers/).
-
-This product includes jdom, a library developed by jdom.org.
-
-This product includes jopt-simple, a library for parsing command line options (http://jopt-simple.sourceforge.net/).
-
-This product includes Jackson, a JSON processor (http://jackson.codehaus.org/).
-
-This product includes ParaNamer, a library that allows the parameter names of non-private methods and constructors to be accessed at runtime (http://paranamer.codehaus.org/).
-
-This product includes BDB, Java edition, A library developed by Oracle (http://www.oracle.com/database/berkeley-db/je/index.html), which includes
-the following license information:
-
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-The following is the license that applies to this copy of the Berkeley
-DB Java Edition software.  For a license to use the Berkeley DB Java
-Edition software under conditions other than those described here, or
-to purchase support for this software, please contact Oracle at
-berkeleydb-info_us@oracle.com.
-
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-/*
- * Copyright (c) 2002-2008 Oracle.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Redistributions in any form must be accompanied by information on
- *    how to obtain complete source code for the DB software and any
- *    accompanying software that uses the DB software.  The source code
- *    must either be included in the distribution or be available for no
- *    more than the cost of distribution plus a nominal fee, and must be
- *    freely redistributable under reasonable conditions.  For an
- *    executable file, complete source code means the source code for all
- *    modules it contains.  It does not include source code for modules or
- *    files that typically accompany the major components of the operating
- *    system on which the executable file runs.
- *
- * THIS SOFTWARE IS PROVIDED BY ORACLE ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
- * NON-INFRINGEMENT, ARE DISCLAIMED.  IN NO EVENT SHALL ORACLE BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- *    contributors may be used to endorse or promote products derived from
- *    this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-This product includes jetty, developed by mortbay.org.
-
-This product includes junit, developed by junit.org
-
-This product includes the COLT library for numerical computation developed by CERN:
-
-    Packages cern.colt* , cern.jet*, cern.clhep
-
-        Copyright (c) 1999 CERN - European Organization for Nuclear Research.
-
-        Permission to use, copy, modify, distribute and sell this software and its documentation for any purpose is hereby granted without fee,
-         provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in
-         supporting documentation. CERN makes no representations about the suitability of this software for any purpose. It is provided "as is"
-         without expressed or implied warranty.
-
-COLT in turn includes the following packages:
-
-    Packages hep.aida.*
-
-        Written by Pavel Binko, Dino Ferrero Merlino, Wolfgang Hoschek, Tony Johnson, Andreas Pfeiffer, and others. Check the FreeHEP home page
-        for more info. Permission to use and/or redistribute this work is granted under the terms of the LGPL License, with the exception that
-        any usage related to military applications is expressly forbidden. The software and documentation made available under the terms of this
-        license are provided with no warranty.
-
-This product includes a copy of slf4j made by slf4j.org, which contains the following statement:
-    Copyright (c) 2004-2008 QOS.ch All rights reserved. Permission is hereby granted, free of charge,
-    to any person obtaining a copy of this software and associated documentation files (the "Software"),
-    to deal in the Software without restriction, including without limitation the rights to use, copy, modify,
-    merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-    Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission
-    notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT
-    WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-    PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-    DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-    WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-This project includes the the XJDM driver for MongoDB which is available at http://github.com/geir/mongo-java-driver/tree/master
-END OF NOTICE
\ No newline at end of file
diff --git a/extensions/entitystore-voldemort/build.gradle b/extensions/entitystore-voldemort/build.gradle
deleted file mode 100644
index 1984911..0000000
--- a/extensions/entitystore-voldemort/build.gradle
+++ /dev/null
@@ -1,32 +0,0 @@
-description = "Qi4j Voldemort EntityStore Extension"
-
-jar { manifest { name = "Qi4j Extension - EntityStore - Voldemort" }}
-
-repositories {
-    maven { name 'clojars-repo'; url 'http://clojars.org/repo' }
-    maven { name 'oracle-repo'; url 'http://download.oracle.com/maven' }
-}
-
-dependencies {
-
-    compile project(":org.qi4j.core:org.qi4j.core.bootstrap")
-    compile project(":org.qi4j.libraries:org.qi4j.library.locking")
-    compile libraries.voldemort
-    compile libraries.guava
-
-    testCompile project(":org.qi4j.core:org.qi4j.core.testsupport")
-    testCompile(project(":org.qi4j.extensions:org.qi4j.extension.valueserialization-orgjson"))
-
-    testRuntime project(":org.qi4j.core:org.qi4j.core.runtime")
-    testRuntime libraries.logback
-    testRuntime libraries.sleepycat
-    testRuntime libraries.log4j
-    testRuntime libraries.jdom
-    testRuntime libraries.velocity
-    testRuntime libraries.commons_codec
-    testRuntime libraries.commons_dbcp
-    testRuntime libraries.commons_io
-    testRuntime libraries.commons_lang
-
-}
-
diff --git a/extensions/entitystore-voldemort/dev-status.xml b/extensions/entitystore-voldemort/dev-status.xml
deleted file mode 100644
index 9a22175..0000000
--- a/extensions/entitystore-voldemort/dev-status.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
-        http://www.qi4j.org/schemas/2008/dev-status/1/dev-status.xsd">
-  <status>
-        <!--none,early,beta,stable,mature-->
-        <codebase>beta</codebase>
-
-        <!-- none, brief, good, complete -->
-        <documentation>none</documentation>
-
-        <!-- none, some, good, complete -->
-        <unittests>some</unittests>
-    </status>
-    <licenses>
-        <license>ALv2</license>
-    </licenses>
-</module>
diff --git a/extensions/entitystore-voldemort/src/docs/es-voldemort.txt b/extensions/entitystore-voldemort/src/docs/es-voldemort.txt
deleted file mode 100644
index 9e8bf42..0000000
--- a/extensions/entitystore-voldemort/src/docs/es-voldemort.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-[[extension-es-voldemort, Voldemort EntityStore]]
-= Voldemort EntityStore =
-
-[devstatus]
---------------
-source=extensions/entitystore-voldemort/dev-status.xml
---------------
-
-Voldemort EntityStore
-
-NOTE: This Extension has no documentation yet. Learn how to contribute in <<community-docs>>.
-
-include::../../build/docs/buildinfo/artifact.txt[]
diff --git a/extensions/entitystore-voldemort/src/main/java/org/qi4j/entitystore/voldemort/VoldemortConfiguration.java b/extensions/entitystore-voldemort/src/main/java/org/qi4j/entitystore/voldemort/VoldemortConfiguration.java
deleted file mode 100644
index 3ae5ea5..0000000
--- a/extensions/entitystore-voldemort/src/main/java/org/qi4j/entitystore/voldemort/VoldemortConfiguration.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 2010 Niclas Hedhman <niclas@hedhman.org>.
- *
- * Licensed  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.qi4j.entitystore.voldemort;
-
-import java.util.List;
-import org.qi4j.api.common.Optional;
-import org.qi4j.api.configuration.ConfigurationComposite;
-import org.qi4j.api.property.Property;
-
-public interface VoldemortConfiguration extends ConfigurationComposite
-{
-    @Optional
-    Property<String> storeName();
-
-//    @Optional
-//    Property<Integer> clientZoneId();
-//
-    @Optional
-    Property<Integer> connectionTimeout();
-
-    @Optional
-    Property<List<String>> bootstrapUrl();
-
-    @Optional
-    Property<Boolean> enableJmx();
-
-//    @Optional
-//    Property<Boolean> enablePipelineRoutedStore();
-
-    @Optional
-    Property<Long> failureDetectorAsyncRecoveryInterval();
-
-    @Optional
-    Property<Long> failureDetectorBannagePeriod();
-
-    @Optional
-    Property<List<String>> failureDetectorCatastrophicErrorType();
-
-    @Optional
-    Property<String> failureDetectorImplementation();
-
-    @Optional
-    Property<Long> failureDetectoreRequestLengthThreshold();
-
-    @Optional
-    Property<Integer> failureDetectorThreshold();
-
-    @Optional
-    Property<Integer> failureDetectorThresholdCountMinimum();
-
-    @Optional
-    Property<Long> failureDetectorThreasholdInterval();
-
-    @Optional
-    Property<Integer> maxBootstrapRetries();
-
-    @Optional
-    Property<Integer> setMaxConnectionsPerNode();
-
-    @Optional
-    Property<Integer> maxQueueRequests();
-
-    @Optional
-    Property<Integer> maxThreads();
-
-    @Optional
-    Property<Integer> maxTotalConnections();
-
-    @Optional
-    Property<String> requestFormatType();
-
-    @Optional
-    Property<String> routingTier();
-
-    @Optional
-    Property<Integer> routingTimeout();
-
-//    @Optional
-//    Property<Integer> selectors();
-
-    @Optional
-    Property<Integer> socketBufferSize();
-
-    @Optional
-    Property<Boolean> socketKeepAlive();
-
-    @Optional
-    Property<Integer> socketTimeout();
-
-    @Optional
-    Property<Integer> threadIdleTime();
-
-}
diff --git a/extensions/entitystore-voldemort/src/main/java/org/qi4j/entitystore/voldemort/VoldemortEntityStoreMixin.java b/extensions/entitystore-voldemort/src/main/java/org/qi4j/entitystore/voldemort/VoldemortEntityStoreMixin.java
deleted file mode 100644
index b11d161..0000000
--- a/extensions/entitystore-voldemort/src/main/java/org/qi4j/entitystore/voldemort/VoldemortEntityStoreMixin.java
+++ /dev/null
@@ -1,344 +0,0 @@
-/*  Copyright 2010 Niclas Hedhman.
- *
- * Licensed 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.qi4j.entitystore.voldemort;
-
-import java.io.*;
-import java.util.ConcurrentModificationException;
-import java.util.List;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.locks.ReadWriteLock;
-import org.qi4j.api.configuration.Configuration;
-import org.qi4j.api.entity.EntityDescriptor;
-import org.qi4j.api.entity.EntityReference;
-import org.qi4j.api.injection.scope.This;
-import org.qi4j.api.service.ServiceActivation;
-import org.qi4j.io.Input;
-import org.qi4j.io.Output;
-import org.qi4j.spi.entitystore.EntityNotFoundException;
-import org.qi4j.spi.entitystore.EntityStoreException;
-import org.qi4j.spi.entitystore.helpers.MapEntityStore;
-import voldemort.client.*;
-import voldemort.client.protocol.RequestFormatType;
-import voldemort.versioning.ObsoleteVersionException;
-import voldemort.versioning.Versioned;
-
-/**
- * JDBM implementation of SerializationStore
- */
-public class VoldemortEntityStoreMixin
-        implements ServiceActivation, MapEntityStore
-{
-   @This
-   private ReadWriteLock lock;
-
-   @This
-   private Configuration<VoldemortConfiguration> config;
-
-   private StoreClient<String, byte[]> client;
-   private StoreClientFactory factory;
-
-   @Override
-   public void activateService()
-           throws Exception
-   {
-      VoldemortConfiguration conf = config.get();
-      ClientConfig config = new ClientConfig();
-      {
-         List<String> value = conf.bootstrapUrl().get();
-         if (value != null)
-         {
-            config.setBootstrapUrls(value);
-         } else
-         {
-            config.setBootstrapUrls("tcp://localhost:8581");
-         }
-      }
-      {
-         Integer connectionTimeout = conf.connectionTimeout().get();
-         if (connectionTimeout != null)
-         {
-            config.setConnectionTimeout(connectionTimeout, TimeUnit.MILLISECONDS);
-         }
-      }
-      {
-         Boolean enable = conf.enableJmx().get();
-         if (enable != null)
-         {
-            config.setEnableJmx(enable);
-         }
-      }
-      {
-         Long recoveryInterval = conf.failureDetectorAsyncRecoveryInterval().get();
-         if (recoveryInterval != null)
-         {
-            config.setFailureDetectorAsyncRecoveryInterval(recoveryInterval);
-         }
-      }
-      {
-         Long bannagePeriod = conf.failureDetectorBannagePeriod().get();
-         if (bannagePeriod != null)
-         {
-            config.setFailureDetectorBannagePeriod(bannagePeriod);
-         }
-      }
-      {
-         List<String> failureDetectorCatastrophicErrorTypes = conf.failureDetectorCatastrophicErrorType().get();
-         if (failureDetectorCatastrophicErrorTypes != null)
-         {
-            config.setFailureDetectorCatastrophicErrorTypes(failureDetectorCatastrophicErrorTypes);
-         }
-      }
-      {
-         String failureDetectorImplementation = conf.failureDetectorImplementation().get();
-         if (failureDetectorImplementation != null)
-         {
-            config.setFailureDetectorImplementation(failureDetectorImplementation);
-         }
-      }
-      {
-         Long failureDetectorRequestLengthThreshold = conf.failureDetectoreRequestLengthThreshold().get();
-         if (failureDetectorRequestLengthThreshold != null)
-         {
-            config.setFailureDetectorRequestLengthThreshold(failureDetectorRequestLengthThreshold);
-         }
-      }
-      {
-         Integer failureDetectorThreshold = conf.failureDetectorThreshold().get();
-         if (failureDetectorThreshold != null)
-         {
-            config.setFailureDetectorThreshold(failureDetectorThreshold);
-         }
-      }
-      {
-         Integer detectorThresholdCountMinimum = conf.failureDetectorThresholdCountMinimum().get();
-         if (detectorThresholdCountMinimum != null)
-         {
-            config.setFailureDetectorThresholdCountMinimum(detectorThresholdCountMinimum);
-         }
-      }
-      {
-         Long failureDetectorThresholdInterval = conf.failureDetectorThreasholdInterval().get();
-         if (failureDetectorThresholdInterval != null)
-         {
-            config.setFailureDetectorThresholdInterval(failureDetectorThresholdInterval);
-         }
-      }
-      {
-         Integer maxBootstrapRetries = conf.maxBootstrapRetries().get();
-         if (maxBootstrapRetries != null)
-         {
-            config.setMaxBootstrapRetries(maxBootstrapRetries);
-         }
-      }
-      {
-         Integer maxConnectionsPerNode = conf.setMaxConnectionsPerNode().get();
-         if (maxConnectionsPerNode != null)
-         {
-            config.setMaxConnectionsPerNode(maxConnectionsPerNode);
-         }
-      }
-      {
-         Integer maxQueueRequests = conf.maxQueueRequests().get();
-         if (maxQueueRequests != null)
-         {
-            config.setMaxQueuedRequests(maxQueueRequests);
-         }
-      }
-      {
-         Integer maxThreads = conf.maxThreads().get();
-         if (maxThreads != null)
-         {
-            config.setMaxThreads(maxThreads);
-         }
-      }
-      {
-         Integer maxTotalConnections = conf.maxTotalConnections().get();
-         if (maxTotalConnections != null)
-         {
-            config.setMaxTotalConnections(maxTotalConnections);
-         }
-      }
-      {
-         String formatTypeCode = conf.requestFormatType().get();
-         if (formatTypeCode != null)
-         {
-            RequestFormatType formatType = RequestFormatType.fromCode(formatTypeCode);
-            config.setRequestFormatType(formatType);
-         }
-      }
-      {
-         String routingTierString = conf.routingTier().get();
-         if (routingTierString != null)
-         {
-            RoutingTier routingTier = RoutingTier.fromDisplay(routingTierString);
-            config.setRoutingTier(routingTier);
-         }
-      }
-      {
-         Integer routingTimeout = conf.routingTimeout().get();
-         if (routingTimeout != null)
-         {
-            config.setRoutingTimeout(routingTimeout, TimeUnit.MILLISECONDS);
-         }
-      }
-      {
-         Integer bufferSize = conf.socketBufferSize().get();
-         if (bufferSize != null)
-         {
-            config.setSocketBufferSize(bufferSize);
-         }
-      }
-      {
-         Boolean socketKeepAlive = conf.socketKeepAlive().get();
-         if (socketKeepAlive != null)
-         {
-            config.setSocketKeepAlive(socketKeepAlive);
-         }
-      }
-      {
-         Integer socketTimeout = conf.socketTimeout().get();
-         if (socketTimeout != null)
-         {
-            config.setSocketTimeout(socketTimeout, TimeUnit.MILLISECONDS);
-         }
-      }
-      {
-         Integer idleTime = conf.threadIdleTime().get();
-         if (idleTime != null)
-         {
-            config.setThreadIdleTime(idleTime, TimeUnit.MILLISECONDS);
-         }
-      }
-      factory = new SocketStoreClientFactory(config);
-      // create a client that executes operations on a single store
-      String storeName = conf.storeName().get();
-      if (storeName == null)
-         storeName = "qi4j-entities";
-      client = factory.getStoreClient(storeName);
-
-   }
-
-   @Override
-   public void passivateService()
-           throws Exception
-   {
-      factory.close();
-   }
-
-    @Override
-   public Reader get(EntityReference entityReference)
-           throws EntityStoreException
-   {
-      try
-      {
-         Versioned<byte[]> versioned = client.get(entityReference.identity());
-         if (versioned == null)
-         {
-            throw new EntityNotFoundException(entityReference);
-         }
-         byte[] serializedState = versioned.getValue();
-         return new StringReader(new String(serializedState, "UTF-8"));
-      } catch (IOException e)
-      {
-         throw new EntityStoreException(e);
-      }
-   }
-
-    @Override
-   public void applyChanges(MapChanges changes)
-           throws IOException
-   {
-      try
-      {
-         changes.visitMap(new MapChanger()
-         {
-            @Override
-            public Writer newEntity(final EntityReference ref, EntityDescriptor descriptor )
-                    throws IOException
-            {
-               return new StringWriter(1000)
-               {
-                  @Override
-                  public void close()
-                          throws IOException
-                  {
-                     super.close();
-                     byte[] stateArray = toString().getBytes("UTF-8");
-                     client.put(ref.identity(), stateArray);
-                  }
-               };
-            }
-
-            @Override
-            public Writer updateEntity(final EntityReference ref, EntityDescriptor descriptor)
-                    throws IOException
-            {
-               return new StringWriter(1000)
-               {
-                  @Override
-                  public void close()
-                          throws IOException
-                  {
-                     super.close();
-                     byte[] stateArray = toString().getBytes("UTF-8");
-                     try
-                     {
-                        client.put(ref.identity(), stateArray);
-                     } catch (ObsoleteVersionException e)
-                     {
-                        throw new ConcurrentModificationException(
-                                "Concurrent modification attempted for " + ref.identity());
-                     }
-                  }
-               };
-            }
-
-            @Override
-            public void removeEntity(EntityReference ref, EntityDescriptor descriptor)
-                    throws EntityNotFoundException
-            {
-               client.delete(ref.identity());
-            }
-         });
-      } catch (Exception e)
-      {
-         if (e instanceof IOException)
-         {
-            throw (IOException) e;
-         } else if (e instanceof EntityStoreException)
-         {
-            throw (EntityStoreException) e;
-         } else
-         {
-            throw new IOException( e );
-         }
-      }
-   }
-
-    @Override
-   public Input<Reader, IOException> entityStates()
-   {
-      return new Input<Reader, IOException>()
-      {
-         @Override
-         public <ReceiverThrowableType extends Throwable> void transferTo(Output<? super Reader, ReceiverThrowableType> receiverThrowableTypeOutput) throws IOException, ReceiverThrowableType
-         {
-            // TODO: Can't get hold of all entities, unless storing all the keys separately, which is enormously expensive
-         }
-      };
-   }
-}
\ No newline at end of file
diff --git a/extensions/entitystore-voldemort/src/main/java/org/qi4j/entitystore/voldemort/VoldemortEntityStoreService.java b/extensions/entitystore-voldemort/src/main/java/org/qi4j/entitystore/voldemort/VoldemortEntityStoreService.java
deleted file mode 100644
index fcaff41..0000000
--- a/extensions/entitystore-voldemort/src/main/java/org/qi4j/entitystore/voldemort/VoldemortEntityStoreService.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*  Copyright 2010 Niclas Hedhman.
- *
- * Licensed 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.qi4j.entitystore.voldemort;
-
-import org.qi4j.api.concern.Concerns;
-import org.qi4j.api.configuration.Configuration;
-import org.qi4j.api.mixin.Mixins;
-import org.qi4j.api.service.ServiceActivation;
-import org.qi4j.api.service.ServiceComposite;
-import org.qi4j.library.locking.LockingAbstractComposite;
-import org.qi4j.spi.entitystore.ConcurrentModificationCheckConcern;
-import org.qi4j.spi.entitystore.EntityStateVersions;
-import org.qi4j.spi.entitystore.EntityStore;
-import org.qi4j.spi.entitystore.StateChangeNotificationConcern;
-import org.qi4j.spi.entitystore.helpers.JSONMapEntityStoreActivation;
-import org.qi4j.spi.entitystore.helpers.JSONMapEntityStoreMixin;
-import org.qi4j.spi.entitystore.helpers.StateStore;
-
-/**
- * EntityStore service backed by Voldemort.
- */
-
-@Concerns( { StateChangeNotificationConcern.class, ConcurrentModificationCheckConcern.class } )
-@Mixins( { JSONMapEntityStoreMixin.class, VoldemortEntityStoreMixin.class } )
-public interface VoldemortEntityStoreService
-    extends EntityStore,
-            EntityStateVersions,
-            StateStore,
-            ServiceComposite,
-            ServiceActivation,
-            JSONMapEntityStoreActivation,
-            LockingAbstractComposite,
-            Configuration
-
-{
-}
diff --git a/extensions/entitystore-voldemort/src/main/java/org/qi4j/entitystore/voldemort/assembly/VoldemortAssembler.java b/extensions/entitystore-voldemort/src/main/java/org/qi4j/entitystore/voldemort/assembly/VoldemortAssembler.java
deleted file mode 100644
index 9efff11..0000000
--- a/extensions/entitystore-voldemort/src/main/java/org/qi4j/entitystore/voldemort/assembly/VoldemortAssembler.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2010 Niclas Hedhman <niclas@hedhman.org>.
- *
- * Licensed  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.qi4j.entitystore.voldemort.assembly;
-
-import org.qi4j.bootstrap.Assemblers;
-import org.qi4j.bootstrap.AssemblyException;
-import org.qi4j.bootstrap.ModuleAssembly;
-import org.qi4j.bootstrap.ServiceDeclaration;
-import org.qi4j.entitystore.voldemort.VoldemortConfiguration;
-import org.qi4j.entitystore.voldemort.VoldemortEntityStoreService;
-import org.qi4j.spi.uuid.UuidIdentityGeneratorService;
-
-public class VoldemortAssembler
-    extends Assemblers.VisibilityIdentityConfig<VoldemortAssembler>
-{
-    @Override
-    public void assemble( ModuleAssembly module )
-        throws AssemblyException
-    {
-        module.services( UuidIdentityGeneratorService.class ).visibleIn( visibility() );
-        ServiceDeclaration service = module.services( VoldemortEntityStoreService.class ).
-            visibleIn( visibility() ).
-            instantiateOnStartup();
-        if( hasIdentity() )
-        {
-            service.identifiedBy( identity() );
-        }
-        if( hasConfig() )
-        {
-            configModule().entities( VoldemortConfiguration.class ).visibleIn( configVisibility() );
-        }
-    }
-}
diff --git a/extensions/entitystore-voldemort/src/test/java/org/qi4j/entitystore/voldemort/VoldemortTest.java b/extensions/entitystore-voldemort/src/test/java/org/qi4j/entitystore/voldemort/VoldemortTest.java
deleted file mode 100644
index 55a59a6..0000000
--- a/extensions/entitystore-voldemort/src/test/java/org/qi4j/entitystore/voldemort/VoldemortTest.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (c) 2010 Niclas Hedhman <niclas@hedhman.org>.
- *
- * Licensed  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.qi4j.entitystore.voldemort;
-
-import org.junit.Ignore;
-import org.qi4j.api.common.Visibility;
-import org.qi4j.bootstrap.AssemblyException;
-import org.qi4j.bootstrap.ModuleAssembly;
-import org.qi4j.entitystore.voldemort.assembly.VoldemortAssembler;
-import org.qi4j.test.entity.AbstractEntityStoreTest;
-import voldemort.server.VoldemortConfig;
-import voldemort.server.VoldemortServer;
-
-import java.io.*;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-import java.util.Random;
-import org.qi4j.test.EntityTestAssembler;
-import org.qi4j.valueserialization.orgjson.OrgJsonValueSerializationAssembler;
-
-@Ignore( "This version of Voldemort is still using Jetty 6. If we can not upgrade, we should drop support for this ES." )
-public class VoldemortTest
-    extends AbstractEntityStoreTest
-{
-
-    private List<VoldemortServer> servers = new ArrayList<VoldemortServer>();
-
-    @Override
-    public void setUp()
-        throws Exception
-    {
-        Thread.sleep( 200 );
-        File voldemortHome1 = setupVoldemortHome();
-        startServer( voldemortHome1, "node0.properties" );
-        File voldemortHome2 = setupVoldemortHome();
-        startServer( voldemortHome2, "node1.properties" );
-        super.setUp();
-    }
-
-    @Override
-    public void tearDown()
-        throws Exception
-    {
-        super.tearDown();
-        for( VoldemortServer server : servers )
-        {
-            server.stop();
-        }
-    }
-
-    @Override
-    public void assemble( ModuleAssembly module )
-        throws AssemblyException
-    {
-        super.assemble( module );
-        ModuleAssembly config = module.layer().module( "config" );
-        new EntityTestAssembler().assemble( config );
-        new OrgJsonValueSerializationAssembler().assemble( module );
-
-        new VoldemortAssembler().
-            visibleIn( Visibility.layer ).
-            withConfig( config, Visibility.layer ).
-            assemble( module );
-    }
-
-    private File setupVoldemortHome()
-        throws IOException
-    {
-        File tmp = File.createTempFile( "qi4j", "" );
-        File dir = tmp.getParentFile();
-        File voldemortHome = new File( dir, "qi4j-voldemort" + new Random().nextInt( 10000 ) );
-        boolean created = voldemortHome.mkdir();
-        File configDir = new File( voldemortHome, "config" );
-        created = configDir.mkdir();
-        copyFile( "cluster.xml", configDir );
-        copyFile( "stores.xml", configDir );
-        return voldemortHome;
-    }
-
-    private void startServer( File voldemortHome, String serverProps )
-        throws IOException
-    {
-        Properties props = new Properties();
-        InputStream in = getClass().getResourceAsStream( serverProps );
-        props.load( in );
-        props.setProperty( "voldemort.home", voldemortHome.getCanonicalPath() );
-        VoldemortConfig config = new VoldemortConfig( props );
-        config.setEnableJmx( false );
-        VoldemortServer server = new VoldemortServer( config );
-        server.start();
-        this.servers.add( server );
-    }
-
-    private void copyFile( String source, File voldemortHome )
-        throws IOException
-    {
-        InputStream in = getClass().getResourceAsStream( source );
-        FileOutputStream out = new FileOutputStream( new File( voldemortHome, source ) );
-        BufferedOutputStream stream = new BufferedOutputStream( out );
-        int data = in.read();
-        while( data != -1 )
-        {
-            stream.write( data );
-            data = in.read();
-        }
-        in.close();
-        stream.close();
-    }
-}
diff --git a/extensions/entitystore-voldemort/src/test/resources/org/qi4j/entitystore/voldemort/cluster.xml b/extensions/entitystore-voldemort/src/test/resources/org/qi4j/entitystore/voldemort/cluster.xml
deleted file mode 100644
index cafc886..0000000
--- a/extensions/entitystore-voldemort/src/test/resources/org/qi4j/entitystore/voldemort/cluster.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<!--
-  ~ Copyright (c) 2010 Niclas Hedhman <niclas@hedhman.org>.
-  ~
-  ~ Licensed  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.
-  -->
-
-<cluster>
-    <!-- The name is just to help users identify this cluster from the gui -->
-    <name>qi4j-test-cluster</name>
-    <server>
-        <!-- The node id is a unique, sequential id beginning with 0 that identifies each server in the cluster-->
-        <id>0</id>
-        <host>localhost</host>
-        <http-port>8481</http-port>
-        <socket-port>8581</socket-port>
-        <!-- A list of data partitions assigned to this server -->
-        <partitions>0,1,2,3</partitions>
-    </server>
-    <server>
-        <id>1</id>
-        <host>localhost</host>
-        <http-port>8681</http-port>
-        <socket-port>8781</socket-port>
-        <partitions>4,5,6,7</partitions>
-    </server>
-</cluster>
\ No newline at end of file
diff --git a/extensions/entitystore-voldemort/src/test/resources/org/qi4j/entitystore/voldemort/node0.properties b/extensions/entitystore-voldemort/src/test/resources/org/qi4j/entitystore/voldemort/node0.properties
deleted file mode 100644
index f2b3a3b..0000000
--- a/extensions/entitystore-voldemort/src/test/resources/org/qi4j/entitystore/voldemort/node0.properties
+++ /dev/null
@@ -1,207 +0,0 @@
-#
-# Copyright (c) 2010 Niclas Hedhman <niclas@hedhman.org>.
-#
-# Licensed  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.
-#
-
-#  The unique, sequential identifier for this server in the cluster (starts with 0)
-#  default: none, must be specfified
-node.id=0
-
-# The base directory for voldemort. Can also be specified via the environment variable VOLDEMORT_HOME or
-# via a command line option.
-# default: none	
-# voldemort.home=
-
-# The directory where voldemort data is stored
-# default: ${voldemort.home}/data
-# data.directory=
-
-
-# The directory where voldemort configuration is stored
-# default: ${voldemort.home}/config
-# metadata.directory=
-
-# Should the BDB engine be enabled?
-# default: true
-# enable.bdb.engine=
-
-
-# The BDB cache that is shared by all BDB tables. Bigger is better.
-# default: 200MB (make it bigger!!!)
-bdb.cache.size=50000000
-
-
-# Should transactions be immediately written to disk?
-# default: false
-# bdb.write.transactions=
-
-# When the transaction has been written to disk should we force the disk to flush the OS cache. This is a fairly expensive operation.
-# default: false
-# bdb.flush.transactions=
-
-
-# The directory where the BDB environment is located
-# default: ${data.directory}/bdb
-# bdb.data.directory=
-
-
-# The size of an individual log file
-# default: 1GB
-# bdb.max.logfile.size=
-
-
-# The fanout size for the btree. Bigger fanout more effienciently supports larger btrees.
-# default: 512
-# bdb.btree.fanout=
-
-
-# How often (in bytes) should we checkpoint the transaction log? Checkpoints make startup and shutdown faster.
-# default: 20 * 1024 * 1024
-# bdb.checkpoint.interval.bytes=
-
-
-# How often in ms should we checkpoint the transaction log
-# default: 30000
-# bdb.checkpoint.interval.ms=
-
-
-# Should we enabled the mysql storage engine? Doing so will create a connection pool that will be used for the mysql instance
-# default: false
-# enable.mysql.engine=
-
-
-# The mysql username to user
-# default: root
-# mysql.user=
-
-
-# The mysql password to user
-# mysql.password=
-
-
-# The host of the mysql instance
-# default: localhost
-# mysql.host=
-
-
-# The port of the mysql instance
-# default: 3306
-# mysql.port=
-
-
-# The name of the mysql database
-# default: voldemort
-# mysql.database=
-
-
-#Should we enable the memory storage engine? Might as well this takes no resources and is just here for consistency.
-# default: true
-# enable.memory.engine=
-
-
-# Should we enable the cache storage engine? Might as well this takes no resources and is just here for consistency.
-# default: true
-# enable.cache.engine=
-
-
-# Should we enable the readonly storage engine?
-# default: false
-# enable.readonly.engine=
-
-
-# The maximum time to wait to acquire a filehandle to perform reads.
-# default: 4000
-# readonly.file.wait.timeout.ms=
-
-
-# The number of backup copies of the data to keep around for rollback.
-# default: 1
-# readonly.backups=
-
-
-# The number of file descriptors to pool per store.
-# default: 5
-# readonly.file.handles=
-
-
-# The directory in which to store readonly data files.
-# default: ${data.directory}/read-only
-# readonly.data.directory=
-
-
-# What storage engine should we use for storing misdelivered messages that need to be rerouted?
-# default: bdb
-# slop.store.engine=
-
-
-# The maximum number of threads the server can use.
-# default: 100
-# max.threads=
-
-
-# The number of threads to keep alive even when idle.
-# default: max(1, ${max.threads} / 2)
-# core.threads=
-
-
-# The socket SO_TIMEOUT. Essentially the amount of time to block on a low-level network operation before throwing an error.
-# default: 4000
-# socket.timeout.ms=
-
-
-# The total amount of time to wait for adequate responses from all nodes before throwing an error.
-# default: 5000
-# routing.timeout.ms=
-
-
-# Enable the HTTP data server?
-# default: true
-# http.enable=
-
-
-# Enable the socket data server?
-# default: true
-# socket.enable=
-
-
-# Enable JMX monitoring?
-# default: true
-# jmx.enable=
-
-
-# Enable detection of misdelivered messages for persistence and redelivery.
-# default: false
-# slop.detection.enable=
-
-
-# Log every operation on all stores.
-# default: true
-# enable.verbose.logging=
-
-
-# Track load statistics on the stores.
-# default: true
-# enable.stat.tracking=
-
-
-# How often should misdelivered "slop" data be pushed out to nodes?
-# default: 2 * 60 * 1000
-# pusher.poll.ms=
-
-
-# The number of threads to use for scheduling periodic jobs
-# default: 3
-# scheduler.threads=
diff --git a/extensions/entitystore-voldemort/src/test/resources/org/qi4j/entitystore/voldemort/node1.properties b/extensions/entitystore-voldemort/src/test/resources/org/qi4j/entitystore/voldemort/node1.properties
deleted file mode 100644
index a2081dd..0000000
--- a/extensions/entitystore-voldemort/src/test/resources/org/qi4j/entitystore/voldemort/node1.properties
+++ /dev/null
@@ -1,207 +0,0 @@
-#
-# Copyright (c) 2010 Niclas Hedhman <niclas@hedhman.org>.
-#
-# Licensed  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.
-#
-
-#  The unique, sequential identifier for this server in the cluster (starts with 0)
-#  default: none, must be specfified
-node.id=1
-
-# The base directory for voldemort. Can also be specified via the environment variable VOLDEMORT_HOME or
-# via a command line option.
-# default: none
-# voldemort.home=
-
-# The directory where voldemort data is stored
-# default: ${voldemort.home}/data
-# data.directory=
-
-
-# The directory where voldemort configuration is stored
-# default: ${voldemort.home}/config
-# metadata.directory=
-
-# Should the BDB engine be enabled?
-# default: true
-# enable.bdb.engine=
-
-
-# The BDB cache that is shared by all BDB tables. Bigger is better.
-# default: 200MB (make it bigger!!!)
-bdb.cache.size=50000000
-
-
-# Should transactions be immediately written to disk?
-# default: false
-# bdb.write.transactions=
-
-# When the transaction has been written to disk should we force the disk to flush the OS cache. This is a fairly expensive operation.
-# default: false
-# bdb.flush.transactions=
-
-
-# The directory where the BDB environment is located
-# default: ${data.directory}/bdb
-# bdb.data.directory=
-
-
-# The size of an individual log file
-# default: 1GB
-# bdb.max.logfile.size=
-
-
-# The fanout size for the btree. Bigger fanout more effienciently supports larger btrees.
-# default: 512
-# bdb.btree.fanout=
-
-
-# How often (in bytes) should we checkpoint the transaction log? Checkpoints make startup and shutdown faster.
-# default: 20 * 1024 * 1024
-# bdb.checkpoint.interval.bytes=
-
-
-# How often in ms should we checkpoint the transaction log
-# default: 30000
-# bdb.checkpoint.interval.ms=
-
-
-# Should we enabled the mysql storage engine? Doing so will create a connection pool that will be used for the mysql instance
-# default: false
-# enable.mysql.engine=
-
-
-# The mysql username to user
-# default: root
-# mysql.user=
-
-
-# The mysql password to user
-# mysql.password=
-
-
-# The host of the mysql instance
-# default: localhost
-# mysql.host=
-
-
-# The port of the mysql instance
-# default: 3306
-# mysql.port=
-
-
-# The name of the mysql database
-# default: voldemort
-# mysql.database=
-
-
-#Should we enable the memory storage engine? Might as well this takes no resources and is just here for consistency.
-# default: true
-# enable.memory.engine=
-
-
-# Should we enable the cache storage engine? Might as well this takes no resources and is just here for consistency.
-# default: true
-# enable.cache.engine=
-
-
-# Should we enable the readonly storage engine?
-# default: false
-# enable.readonly.engine=
-
-
-# The maximum time to wait to acquire a filehandle to perform reads.
-# default: 4000
-# readonly.file.wait.timeout.ms=
-
-
-# The number of backup copies of the data to keep around for rollback.
-# default: 1
-# readonly.backups=
-
-
-# The number of file descriptors to pool per store.
-# default: 5
-# readonly.file.handles=
-
-
-# The directory in which to store readonly data files.
-# default: ${data.directory}/read-only
-# readonly.data.directory=
-
-
-# What storage engine should we use for storing misdelivered messages that need to be rerouted?
-# default: bdb
-# slop.store.engine=
-
-
-# The maximum number of threads the server can use.
-# default: 100
-# max.threads=
-
-
-# The number of threads to keep alive even when idle.
-# default: max(1, ${max.threads} / 2)
-# core.threads=
-
-
-# The socket SO_TIMEOUT. Essentially the amount of time to block on a low-level network operation before throwing an error.
-# default: 4000
-# socket.timeout.ms=
-
-
-# The total amount of time to wait for adequate responses from all nodes before throwing an error.
-# default: 5000
-# routing.timeout.ms=
-
-
-# Enable the HTTP data server?
-# default: true
-# http.enable=
-
-
-# Enable the socket data server?
-# default: true
-# socket.enable=
-
-
-# Enable JMX monitoring?
-# default: true
-# jmx.enable=
-
-
-# Enable detection of misdelivered messages for persistence and redelivery.
-# default: false
-# slop.detection.enable=
-
-
-# Log every operation on all stores.
-# default: true
-# enable.verbose.logging=
-
-
-# Track load statistics on the stores.
-# default: true
-# enable.stat.tracking=
-
-
-# How often should misdelivered "slop" data be pushed out to nodes?
-# default: 2 * 60 * 1000
-# pusher.poll.ms=
-
-
-# The number of threads to use for scheduling periodic jobs
-# default: 3
-# scheduler.threads=
diff --git a/extensions/entitystore-voldemort/src/test/resources/org/qi4j/entitystore/voldemort/stores.xml b/extensions/entitystore-voldemort/src/test/resources/org/qi4j/entitystore/voldemort/stores.xml
deleted file mode 100644
index a401733..0000000
--- a/extensions/entitystore-voldemort/src/test/resources/org/qi4j/entitystore/voldemort/stores.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<!--
-  ~ Copyright (c) 2010 Niclas Hedhman <niclas@hedhman.org>.
-  ~
-  ~ Licensed  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.
-  -->
-
-<stores>
-    <store>
-        <name>qi4j-entities</name>
-        <replication-factor>1</replication-factor>
-        <preferred-reads>1</preferred-reads>
-        <required-reads>1</required-reads>
-        <preferred-writes>1</preferred-writes>
-        <required-writes>1</required-writes>
-        <persistence>bdb</persistence>
-        <routing>client</routing>
-        <key-serializer>
-            <type>string</type>
-            <schema-info>utf8</schema-info>
-        </key-serializer>
-        <value-serializer>
-            <type>identity</type>
-        </value-serializer>
-    </store>
-</stores>
\ No newline at end of file
diff --git a/extensions/indexing-elasticsearch/build.gradle b/extensions/indexing-elasticsearch/build.gradle
index a1a2c4c..f413afd 100644
--- a/extensions/indexing-elasticsearch/build.gradle
+++ b/extensions/indexing-elasticsearch/build.gradle
@@ -1,11 +1,31 @@
-description = "Qi4j ElasticSearch Index/Query Extension"
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Extension - Index/Query - ElasticSearch" } }
+description = "Apache Zest™ ElasticSearch Index/Query Extension"
+
+jar { manifest { name = "Apache Zest™ Extension - Index/Query - ElasticSearch" } }
 
 dependencies {
 
   compile project(":org.qi4j.core:org.qi4j.core.bootstrap")
   compile project(":org.qi4j.libraries:org.qi4j.library.fileconfig")
+  compile libraries.slf4j_api
   compile libraries.elasticsearch
 
   testCompile project(":org.qi4j.core:org.qi4j.core.testsupport")
diff --git a/extensions/indexing-elasticsearch/dev-status.xml b/extensions/indexing-elasticsearch/dev-status.xml
index 414aef0..e6ddc55 100644
--- a/extensions/indexing-elasticsearch/dev-status.xml
+++ b/extensions/indexing-elasticsearch/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/extensions/indexing-elasticsearch/src/docs/index-elasticsearch.txt b/extensions/indexing-elasticsearch/src/docs/index-elasticsearch.txt
index 21a1b86..bced084 100644
--- a/extensions/indexing-elasticsearch/src/docs/index-elasticsearch.txt
+++ b/extensions/indexing-elasticsearch/src/docs/index-elasticsearch.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[extension-index-elasticsearch,ElasticSearch Index/Query]]
 = ElasticSearch Index/Query =
 
diff --git a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchIndexExporter.java b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchIndexExporter.java
index baf6427..a739a15 100644
--- a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchIndexExporter.java
+++ b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchIndexExporter.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.index.elasticsearch;
 
 import java.io.IOException;
diff --git a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchIndexer.java b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchIndexer.java
index 58172d5..329c8e5 100644
--- a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchIndexer.java
+++ b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchIndexer.java
@@ -34,7 +34,6 @@
 import org.qi4j.api.mixin.Mixins;
 import org.qi4j.api.property.PropertyDescriptor;
 import org.qi4j.api.service.qualifier.Tagged;
-import org.qi4j.api.structure.Module;
 import org.qi4j.api.type.ValueType;
 import org.qi4j.api.usecase.UsecaseBuilder;
 import org.qi4j.api.util.Classes;
@@ -49,6 +48,7 @@
 import org.qi4j.spi.entitystore.EntityStore;
 import org.qi4j.spi.entitystore.EntityStoreUnitOfWork;
 import org.qi4j.spi.entitystore.StateChangeListener;
+import org.qi4j.spi.module.ModuleSpi;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -67,13 +67,17 @@
     {
 
         private static final Logger LOGGER = LoggerFactory.getLogger( ElasticSearchIndexer.class );
+
         @Structure
-        private Module module;
+        private ModuleSpi module;
+
         @Service
         private EntityStore entityStore;
+
         @Service
         @Tagged( ValueSerialization.Formats.JSON )
         private ValueSerializer valueSerializer;
+
         @This
         private ElasticSearchSupport support;
 
@@ -111,27 +115,27 @@
                 {
                     switch( changedState.status() )
                     {
-                        case REMOVED:
-                            LOGGER.trace( "Removing Entity State from Index: {}", changedState );
-                            remove( bulkBuilder, changedState.identity().identity() );
-                            break;
-                        case UPDATED:
-                            LOGGER.trace( "Updating Entity State in Index: {}", changedState );
-                            remove( bulkBuilder, changedState.identity().identity() );
-                            String updatedJson = toJSON( changedState, newStates, uow );
-                            LOGGER.trace( "Will index: {}", updatedJson );
-                            index( bulkBuilder, changedState.identity().identity(), updatedJson );
-                            break;
-                        case NEW:
-                            LOGGER.trace( "Creating Entity State in Index: {}", changedState );
-                            String newJson = toJSON( changedState, newStates, uow );
-                            LOGGER.trace( "Will index: {}", newJson );
-                            index( bulkBuilder, changedState.identity().identity(), newJson );
-                            break;
-                        case LOADED:
-                        default:
-                            // Ignored
-                            break;
+                    case REMOVED:
+                        LOGGER.trace( "Removing Entity State from Index: {}", changedState );
+                        remove( bulkBuilder, changedState.identity().identity() );
+                        break;
+                    case UPDATED:
+                        LOGGER.trace( "Updating Entity State in Index: {}", changedState );
+                        remove( bulkBuilder, changedState.identity().identity() );
+                        String updatedJson = toJSON( changedState, newStates, uow );
+                        LOGGER.trace( "Will index: {}", updatedJson );
+                        index( bulkBuilder, changedState.identity().identity(), updatedJson );
+                        break;
+                    case NEW:
+                        LOGGER.trace( "Creating Entity State in Index: {}", changedState );
+                        String newJson = toJSON( changedState, newStates, uow );
+                        LOGGER.trace( "Will index: {}", newJson );
+                        index( bulkBuilder, changedState.identity().identity(), newJson );
+                        break;
+                    case LOADED:
+                    default:
+                        // Ignored
+                        break;
                     }
                 }
             }
@@ -154,7 +158,6 @@
 
                 // Refresh index
                 support.client().admin().indices().prepareRefresh( support.index() ).execute().actionGet();
-
             }
         }
 
@@ -190,7 +193,8 @@
                 JSONObject json = new JSONObject();
 
                 json.put( "_identity", state.identity().identity() );
-                json.put( "_types", Iterables.toList( Iterables.map( Classes.toClassName(), state.entityDescriptor().mixinTypes() ) ) );
+                json.put( "_types", Iterables.toList( Iterables.map( Classes.toClassName(), state.entityDescriptor()
+                    .mixinTypes() ) ) );
 
                 EntityDescriptor entityType = state.entityDescriptor();
 
@@ -247,7 +251,8 @@
                                 }
                                 else
                                 {
-                                    EntityState assocState = uow.entityStateOf( EntityReference.parseEntityReference( associated.identity() ) );
+                                    EntityReference reference = EntityReference.parseEntityReference( associated.identity() );
+                                    EntityState assocState = uow.entityStateOf( module, reference );
                                     value = new JSONObject( toJSON( assocState, newStates, uow ) );
                                 }
                             }
@@ -278,7 +283,8 @@
                                 }
                                 else
                                 {
-                                    EntityState assocState = uow.entityStateOf( EntityReference.parseEntityReference( associated.identity() ) );
+                                    EntityReference reference = EntityReference.parseEntityReference( associated.identity() );
+                                    EntityState assocState = uow.entityStateOf( module, reference );
                                     array.put( new JSONObject( toJSON( assocState, newStates, uow ) ) );
                                 }
                             }
@@ -312,7 +318,8 @@
                                 }
                                 else
                                 {
-                                    EntityState assocState = uow.entityStateOf( EntityReference.parseEntityReference( identity ) );
+                                    EntityReference reference = EntityReference.parseEntityReference( identity );
+                                    EntityState assocState = uow.entityStateOf( module, reference );
                                     JSONObject obj = new JSONObject( toJSON( assocState, newStates, uow ) );
                                     obj.put( "_named", name );
                                     array.put( obj );
@@ -338,5 +345,4 @@
             }
         }
     }
-
 }
diff --git a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/assembly/package.html b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/assembly/package.html
index 08487fb..f3edf8f 100644
--- a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/assembly/package.html
+++ b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/assembly/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>ElasticSearch Index/Query Assembly.</h2>
diff --git a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/cluster/package.html b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/cluster/package.html
index d747b4d..3110da8 100644
--- a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/cluster/package.html
+++ b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/cluster/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>ElasticSearch Index/Query Cluster Support.</h2>
diff --git a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/filesystem/package.html b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/filesystem/package.html
index 7a0f260..c5ca09e 100644
--- a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/filesystem/package.html
+++ b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/filesystem/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>ElasticSearch Index/Query Filesystem Support.</h2>
diff --git a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/internal/AbstractElasticSearchSupport.java b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/internal/AbstractElasticSearchSupport.java
index 9d0833c..7fc2a4d 100644
--- a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/internal/AbstractElasticSearchSupport.java
+++ b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/internal/AbstractElasticSearchSupport.java
@@ -48,6 +48,9 @@
     {
         activateElasticSearch();
 
+        // Wait for yellow status: the primary shard is allocated but replicas may not be yet
+        client.admin().cluster().prepareHealth().setWaitForYellowStatus().execute().actionGet();
+
         if ( !client.admin().indices().prepareExists( index ).setIndices( index ).execute().actionGet().isExists() ) {
             // Create empty index
             LOGGER.info( "Will create '{}' index as it does not exists.", index );
diff --git a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/internal/package.html b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/internal/package.html
index 14a59e2..bb32379 100644
--- a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/internal/package.html
+++ b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/internal/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>ElasticSearch Index/Query Internal Package.</h2>
diff --git a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/memory/package.html b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/memory/package.html
index 8f4e153..9ecb6b6 100644
--- a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/memory/package.html
+++ b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/memory/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>ElasticSearch Index/Query In-Memory Support.</h2>
diff --git a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/package.html b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/package.html
index ef82b27..0eaf4cd 100644
--- a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/package.html
+++ b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>ElasticSearch Index/Query.</h2>
diff --git a/extensions/indexing-elasticsearch/src/test/resources/logback-test.xml b/extensions/indexing-elasticsearch/src/test/resources/logback-test.xml
index bbfe30c..00ad4d8 100644
--- a/extensions/indexing-elasticsearch/src/test/resources/logback-test.xml
+++ b/extensions/indexing-elasticsearch/src/test/resources/logback-test.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
 <configuration>
 
     <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
diff --git a/extensions/indexing-rdf/NOTICE b/extensions/indexing-rdf/NOTICE
deleted file mode 100644
index df57142..0000000
--- a/extensions/indexing-rdf/NOTICE
+++ /dev/null
@@ -1,42 +0,0 @@
-Qi4j RDF Indexing Extension
-Copyright 2007-2008, The Qi4j Development Team of individuals.
-
-See http://www.qi4j.org/contributors.html for list of of individuals.
-Also see each file for additional information of Copyright claims.
-
-Qi4j is a community aggregated works under Copyright law.
-All parts of the original works at Qi4j is licensed under the
-Apache License ver 2.0 http://www.apache.org/licenses
-
-Below follows a list of binary dependencies and their licenses;
-----------------------------------------------------------------
-
-This module uses cglib (Code Generation Library), developed at
-http://cglib.sourceforge.net/ licensed under
-the Apache License ver 2.0. See LICENSE
-
-This module uses ASM, Copyright (c) 2000-2005 INRIA, France Telecom,
-All rights reserved. See licenses/asm.license
-
-This module uses OpenRDF, Copyright Aduna (http://www.aduna-software.com/),
-© 2001-2007, All rights reserved. See licenses/openrdf.license
-
-This module uses info.aduna, Copyright Aduna (http://www.aduna-software.com/),
-© 2001-2007, All rights reserved. See licenses/aduna.license
-
-This module uses software from QOS.ch (http://slf4j.org) licensed under
-the X11 license, Copyright (c) 2004-2007 QOS.ch. See licenses/slf4j.license
-
-This module uses Apache Log4J, software developed at The Apache Software
-Foundation (http://www.apache.org/). See LICENSE
-
-This module uses Apache Commons HttpClient, software developed at The Apache
-Software Foundation (http://www.apache.org/). See LICENSE
-
-This module uses Apache Commons Codec, software developed at The Apache
-Software Foundation (http://www.apache.org/). See LICENSE
-
-This module uses Apache Commons Logging, software developed at The Apache
-Software Foundation (http://www.apache.org/). See LICENSE
-
-END OF NOTICE
\ No newline at end of file
diff --git a/extensions/indexing-rdf/build.gradle b/extensions/indexing-rdf/build.gradle
index b15ec67..a612974 100644
--- a/extensions/indexing-rdf/build.gradle
+++ b/extensions/indexing-rdf/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j RDF Index/Query Extension"
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Extension - Index/Query - RDF" } }
+description = "Apache Zest™ RDF Index/Query Extension"
+
+jar { manifest { name = "Apache Zest™ Extension - Index/Query - RDF" } }
 
 dependencies {
 
@@ -8,6 +27,7 @@
     compile project( ":org.qi4j.libraries:org.qi4j.library.rdf" )
     compile libraries.sesame
     compile libraries.commons_lang
+    compile libraries.slf4j_api
 
     testCompile project( ':org.qi4j.extensions:org.qi4j.extension.valueserialization-orgjson' )
     testCompile project( ':org.qi4j.extensions:org.qi4j.extension.entitystore-preferences' )
diff --git a/extensions/indexing-rdf/dev-status.xml b/extensions/indexing-rdf/dev-status.xml
index 50d26d3..ac63cda 100644
--- a/extensions/indexing-rdf/dev-status.xml
+++ b/extensions/indexing-rdf/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/extensions/indexing-rdf/src/docs/index-rdf.txt b/extensions/indexing-rdf/src/docs/index-rdf.txt
index 26764bd..620a071 100644
--- a/extensions/indexing-rdf/src/docs/index-rdf.txt
+++ b/extensions/indexing-rdf/src/docs/index-rdf.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[extension-index-rdf,RDF Index/Query]]
 = OpenRDF Index/Query =
 
diff --git a/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/assembly/RdfNativeSesameStoreAssembler.java b/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/assembly/RdfNativeSesameStoreAssembler.java
index 919824d..15782a6 100644
--- a/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/assembly/RdfNativeSesameStoreAssembler.java
+++ b/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/assembly/RdfNativeSesameStoreAssembler.java
@@ -22,6 +22,7 @@
 import org.qi4j.index.rdf.query.RdfQueryParserFactory;
 import org.qi4j.library.rdf.entity.EntityStateSerializer;
 import org.qi4j.library.rdf.entity.EntityTypeSerializer;
+import org.qi4j.library.rdf.repository.NativeConfiguration;
 import org.qi4j.library.rdf.repository.NativeRepositoryService;
 import org.qi4j.valueserialization.orgjson.OrgJsonValueSerializationService;
 
diff --git a/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/assembly/package.html b/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/assembly/package.html
index 37ca973..6739021 100644
--- a/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/assembly/package.html
+++ b/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/assembly/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>RDF Index/Query Assembly.</h2>
diff --git a/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/indexing/RdfIndexingService.java b/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/indexing/RdfIndexingService.java
index f2a03ff..444aa17 100644
--- a/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/indexing/RdfIndexingService.java
+++ b/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/indexing/RdfIndexingService.java
@@ -86,7 +86,7 @@
         @Override
         public void initialize()
         {
-            indexedEntityTypes = new HashSet<EntityDescriptor>();
+            indexedEntityTypes = new HashSet<>();
         }
 
         @Override
diff --git a/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/indexing/package.html b/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/indexing/package.html
index d3a4fb3..7fb977e 100644
--- a/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/indexing/package.html
+++ b/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/indexing/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>RDF Index.</h2>
diff --git a/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/package.html b/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/package.html
index f49fc5d..8d4eac0 100644
--- a/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/package.html
+++ b/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>RDF Index/Query.</h2>
diff --git a/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/query/SesameExpressions.java b/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/query/SesameExpressions.java
index 1828680..7bd4404 100644
--- a/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/query/SesameExpressions.java
+++ b/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/query/SesameExpressions.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.index.rdf.query;
 
 import org.qi4j.api.query.grammar.QuerySpecification;
diff --git a/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/query/internal/package.html b/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/query/internal/package.html
index 253cdbe..c1772a4 100644
--- a/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/query/internal/package.html
+++ b/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/query/internal/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>RDF Query Internal Package.</h2>
diff --git a/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/query/package.html b/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/query/package.html
index ebc1642..d0e38e8 100644
--- a/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/query/package.html
+++ b/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/query/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>RDF Query.</h2>
diff --git a/extensions/indexing-rdf/src/test/java/org/qi4j/index/rdf/ContainsAllTest.java b/extensions/indexing-rdf/src/test/java/org/qi4j/index/rdf/ContainsAllTest.java
index 59aae85..312aa36 100644
--- a/extensions/indexing-rdf/src/test/java/org/qi4j/index/rdf/ContainsAllTest.java
+++ b/extensions/indexing-rdf/src/test/java/org/qi4j/index/rdf/ContainsAllTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.index.rdf;
 
 import java.io.File;
diff --git a/extensions/indexing-rdf/src/test/java/org/qi4j/index/rdf/ContainsTest.java b/extensions/indexing-rdf/src/test/java/org/qi4j/index/rdf/ContainsTest.java
index 9167d82..bafebdd 100644
--- a/extensions/indexing-rdf/src/test/java/org/qi4j/index/rdf/ContainsTest.java
+++ b/extensions/indexing-rdf/src/test/java/org/qi4j/index/rdf/ContainsTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.index.rdf;
 
 import java.io.File;
diff --git a/extensions/indexing-rdf/src/test/java/org/qi4j/index/rdf/qi64/withPropagationRequiresNew/AccountServiceComposite.java b/extensions/indexing-rdf/src/test/java/org/qi4j/index/rdf/qi64/withPropagationRequiresNew/AccountServiceComposite.java
index 0ce62ba..2040cdb 100644
--- a/extensions/indexing-rdf/src/test/java/org/qi4j/index/rdf/qi64/withPropagationRequiresNew/AccountServiceComposite.java
+++ b/extensions/indexing-rdf/src/test/java/org/qi4j/index/rdf/qi64/withPropagationRequiresNew/AccountServiceComposite.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.index.rdf.qi64.withPropagationRequiresNew;
 
 import org.qi4j.api.concern.Concerns;
diff --git a/extensions/indexing-solr/build.gradle b/extensions/indexing-solr/build.gradle
index b808ff1..944d851 100644
--- a/extensions/indexing-solr/build.gradle
+++ b/extensions/indexing-solr/build.gradle
@@ -1,12 +1,32 @@
-description = "Qi4j Solr Indexing Extension"
+/*
+ * 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.
+ */
 
-jar { manifest {name = "Qi4j Extension - Indexing - Solr" }}
+description = "Apache Zest™ Solr Indexing Extension"
+
+jar { manifest {name = "Apache Zest™ Extension - Indexing - Solr" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
   compile(project(":org.qi4j.libraries:org.qi4j.library.fileconfig"))
   compile(project(":org.qi4j.libraries:org.qi4j.library.rdf"))
   compile(libraries.solr)
+  compile libraries.slf4j_api
 
   testCompile(project(":org.qi4j.core:org.qi4j.core.testsupport"))
 
diff --git a/extensions/indexing-solr/dev-status.xml b/extensions/indexing-solr/dev-status.xml
index 330f495..9052325 100644
--- a/extensions/indexing-solr/dev-status.xml
+++ b/extensions/indexing-solr/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/extensions/indexing-solr/src/docs/index-solr.txt b/extensions/indexing-solr/src/docs/index-solr.txt
index ef0b6b6..e964831 100644
--- a/extensions/indexing-solr/src/docs/index-solr.txt
+++ b/extensions/indexing-solr/src/docs/index-solr.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[extension-index-solr,Solr Index/Query]]
 = Apache Solr Index/Query =
 
@@ -8,7 +27,7 @@
 
 Index/Query services backed by an embedded http://lucene.apache.org/solr/[Apache Solr Search].
 
-WARNING: Solr Index/Query service do not support the Qi4j Query API but only native Solr queries.
+WARNING: Solr Index/Query service do not support the Zest™ Query API but only native Solr queries.
 
 include::../../build/docs/buildinfo/artifact.txt[]
 
diff --git a/extensions/indexing-solr/src/main/java/org/qi4j/index/solr/SolrExpressions.java b/extensions/indexing-solr/src/main/java/org/qi4j/index/solr/SolrExpressions.java
index c42bab7..ee941d1 100644
--- a/extensions/indexing-solr/src/main/java/org/qi4j/index/solr/SolrExpressions.java
+++ b/extensions/indexing-solr/src/main/java/org/qi4j/index/solr/SolrExpressions.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.index.solr;
 
 import org.qi4j.api.query.grammar.QuerySpecification;
diff --git a/extensions/indexing-solr/src/main/java/org/qi4j/index/solr/internal/SingleTokenTokenizer.java b/extensions/indexing-solr/src/main/java/org/qi4j/index/solr/internal/SingleTokenTokenizer.java
index 155d254..f8c7770 100644
--- a/extensions/indexing-solr/src/main/java/org/qi4j/index/solr/internal/SingleTokenTokenizer.java
+++ b/extensions/indexing-solr/src/main/java/org/qi4j/index/solr/internal/SingleTokenTokenizer.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.index.solr.internal;
 
 import org.apache.lucene.analysis.WhitespaceTokenizer;
@@ -18,11 +36,6 @@
       super( source, in );
    }
 
-   public SingleTokenTokenizer( AttributeFactory factory, Reader in )
-   {
-      super( factory, in );
-   }
-
    @Override
    protected boolean isTokenChar( char c )
    {
diff --git a/extensions/indexing-solr/src/main/java/org/qi4j/index/solr/internal/SingleTokenTokenizerFactory.java b/extensions/indexing-solr/src/main/java/org/qi4j/index/solr/internal/SingleTokenTokenizerFactory.java
index 48f2b1c..48769a8 100644
--- a/extensions/indexing-solr/src/main/java/org/qi4j/index/solr/internal/SingleTokenTokenizerFactory.java
+++ b/extensions/indexing-solr/src/main/java/org/qi4j/index/solr/internal/SingleTokenTokenizerFactory.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.index.solr.internal;
 
 import java.io.Reader;
diff --git a/extensions/indexing-solr/src/main/java/org/qi4j/index/solr/internal/SolrEntityIndexerMixin.java b/extensions/indexing-solr/src/main/java/org/qi4j/index/solr/internal/SolrEntityIndexerMixin.java
index e038a4e..824354b 100644
--- a/extensions/indexing-solr/src/main/java/org/qi4j/index/solr/internal/SolrEntityIndexerMixin.java
+++ b/extensions/indexing-solr/src/main/java/org/qi4j/index/solr/internal/SolrEntityIndexerMixin.java
@@ -181,7 +181,9 @@
                     input.addField( name, value );
                 } else if( statement.getObject() instanceof BNode )
                 {
-                    Iterator<Statement> seq = graph.match( (Resource) statement.getObject(), new URIImpl( "http://www.w3.org/1999/02/22-rdf-syntax-ns#li" ), null, (Resource) null );
+                    Resource resource = (Resource) statement.getObject();
+                    URIImpl uri = new URIImpl( "http://www.w3.org/1999/02/22-rdf-syntax-ns#li" );
+                    Iterator<Statement> seq = graph.match( resource, uri, null, (Resource) null );
                     while( seq.hasNext() )
                     {
                         Statement seqStatement = seq.next();
diff --git a/extensions/indexing-solr/src/main/java/org/qi4j/index/solr/internal/package.html b/extensions/indexing-solr/src/main/java/org/qi4j/index/solr/internal/package.html
index bbe4267..9fcb0a8 100644
--- a/extensions/indexing-solr/src/main/java/org/qi4j/index/solr/internal/package.html
+++ b/extensions/indexing-solr/src/main/java/org/qi4j/index/solr/internal/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Solr Index/Query Internal Package.</h2>
diff --git a/extensions/indexing-solr/src/main/java/org/qi4j/index/solr/package.html b/extensions/indexing-solr/src/main/java/org/qi4j/index/solr/package.html
index a78bf1a..0a43c68 100644
--- a/extensions/indexing-solr/src/main/java/org/qi4j/index/solr/package.html
+++ b/extensions/indexing-solr/src/main/java/org/qi4j/index/solr/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Solr Index/Query.</h2>
diff --git a/extensions/indexing-solr/src/test/resources/schema.xml b/extensions/indexing-solr/src/test/resources/schema.xml
index 8632a0c..d9e5ae1 100644
--- a/extensions/indexing-solr/src/test/resources/schema.xml
+++ b/extensions/indexing-solr/src/test/resources/schema.xml
@@ -1,5 +1,21 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!--
+  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.
+-->
+<!--
  This is the Solr schema file. This file should be named "schema.xml" and
  should be in the conf directory under the solr home
  (i.e. ./solr/conf/schema.xml by default)
diff --git a/extensions/indexing-solr/src/test/resources/solrconfig.xml b/extensions/indexing-solr/src/test/resources/solrconfig.xml
index 3449224..f3cfd16 100644
--- a/extensions/indexing-solr/src/test/resources/solrconfig.xml
+++ b/extensions/indexing-solr/src/test/resources/solrconfig.xml
@@ -1,5 +1,21 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!--
+  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.
+-->
+<!--
      For more details about configurations options that may appear in this
      file, see http://wiki.apache.org/solr/SolrConfigXml.
 
diff --git a/extensions/indexing-sql/NOTICE b/extensions/indexing-sql/NOTICE
deleted file mode 100644
index a227f35..0000000
--- a/extensions/indexing-sql/NOTICE
+++ /dev/null
@@ -1,17 +0,0 @@
-Qi4j SQL Indexing Extension
-Copyright 2007-2008, The Qi4j Development Team of individuals.
-
-See http://www.qi4j.org/contributors.html for list of of individuals.
-Also see each file for additional information of Copyright claims.
-
-Qi4j is a community aggregated works under Copyright law.
-All parts of the original works at Qi4j is licensed under the
-Apache License ver 2.0 http://www.apache.org/licenses
-
-Below follows a list of binary dependencies and their licenses;
-----------------------------------------------------------------
-
-<NONE>
-
-
-END OF NOTICE
\ No newline at end of file
diff --git a/extensions/indexing-sql/build.gradle b/extensions/indexing-sql/build.gradle
index a35e3c1..9330210 100644
--- a/extensions/indexing-sql/build.gradle
+++ b/extensions/indexing-sql/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j SQL Indexing Extension"
+/*
+ * 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.
+ */
 
-jar {manifest {name = "Qi4j Extension - Indexing - SQL"}}
+description = "Apache Zest™ SQL Indexing Extension"
+
+jar {manifest {name = "Apache Zest™ Extension - Indexing - SQL"}}
 
 dependencies {
 
diff --git a/extensions/indexing-sql/dev-status.xml b/extensions/indexing-sql/dev-status.xml
index 50d26d3..ac63cda 100644
--- a/extensions/indexing-sql/dev-status.xml
+++ b/extensions/indexing-sql/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/extensions/indexing-sql/instructions.txt b/extensions/indexing-sql/instructions.txt
index da9418d..3b38bca 100644
--- a/extensions/indexing-sql/instructions.txt
+++ b/extensions/indexing-sql/instructions.txt
@@ -1,15 +1,34 @@
-These instructions are for preparing your out-of-box PostgreSQL installation so it would be usable with PostgreSQL indexing of Qi4j.
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
+These instructions are for preparing your out-of-box PostgreSQL installation so it would be usable with PostgreSQL indexing of Zest.
 
 1. Creating login role and database
-1.1. Using pgAdmin, connect to PostgreSQL database, and create database you intend to use to store Qi4j entity data, and login role for Qi4j application to use when it connects to database.
+1.1. Using pgAdmin, connect to PostgreSQL database, and create database you intend to use to store Zest™ entity data, and login role for Zest™ application to use when it connects to database.
 1.1. Update these values into your .properties file, if necessary.
 
 2. Adding ltree as type
-2.1. Using pgAdmin, connect to PostgreSQL database, and navigate to database which is intended to be used for Qi4j. (Click on it)
+2.1. Using pgAdmin, connect to PostgreSQL database, and navigate to database which is intended to be used for Zest. (Click on it)
 2.2. Executing arbitary SQL queries should be possible, click that button (button with SQL text on it, next to trash bin).
 2.3. This will open new window, erase any text which pgAdmin generates there for you.
 2.4. Then navigate to your PostgreSQL installation directory, then into 'share', and then into 'contrib'. Open file 'ltree.sql' in your favorite text editor.
 2.5. Select all text, copy it, and paste to SQL query window which you opened in stage 2.2.
-2.6. If you know what you are doing, you may change the line 'SET search_path = public;' to make search_path be 'pg_catalog', or name of schema that Qi4j application will use ('qi4j' by default). It's ok to leave it to 'public' though.
+2.6. If you know what you are doing, you may change the line 'SET search_path = public;' to make search_path be 'pg_catalog', or name of schema that Zest™ application will use ('qi4j' by default). It's ok to leave it to 'public' though.
 2.7. Hit F5 or go Query -> Execute Query to execute the SQL. It should print some notices into output window but no errors nor warnings should be present.
 2.8. Ltree type should be now installed to your PostgreSQL installation.
diff --git a/extensions/indexing-sql/src/docs/index-sql-tests.txt b/extensions/indexing-sql/src/docs/index-sql-tests.txt
index fa6d729..8b90aa8 100644
--- a/extensions/indexing-sql/src/docs/index-sql-tests.txt
+++ b/extensions/indexing-sql/src/docs/index-sql-tests.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[extension-indexing-sql-tests,SQL Index/Query Tests]]
 = SQL Index/Query Tests =
 
diff --git a/extensions/indexing-sql/src/docs/index-sql.txt b/extensions/indexing-sql/src/docs/index-sql.txt
index 6f01e5a..5d6fc57 100644
--- a/extensions/indexing-sql/src/docs/index-sql.txt
+++ b/extensions/indexing-sql/src/docs/index-sql.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[extension-indexing-sql,SQL Index/Query]]
 = SQL Index/Query =
 
diff --git a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/assembly/package.html b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/assembly/package.html
index 89d2704..f62c7ab 100644
--- a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/assembly/package.html
+++ b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/assembly/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>SQL Index/Query Assembly.</h2>
diff --git a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/internal/SQLEntityFinder.java b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/internal/SQLEntityFinder.java
index 375b119..7036afd 100644
--- a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/internal/SQLEntityFinder.java
+++ b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/internal/SQLEntityFinder.java
@@ -100,8 +100,8 @@
                                                    Map<String, Object> variables )
         throws EntityFinderException
     {
-        // TODO what is Qi4j's policy on negative firstResult and/or maxResults? JDBC has its own way of interpreting
-        // these values - does it match with Qi4j's way?
+        // TODO what is Zest's policy on negative firstResult and/or maxResults? JDBC has its own way of interpreting
+        // these values - does it match with Zest's way?
         Iterable<EntityReference> result;
         if( maxResults == null || maxResults > 0 )
         {
diff --git a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/internal/package.html b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/internal/package.html
index d85f3ce..8e98e9f 100644
--- a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/internal/package.html
+++ b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/internal/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>SQL Index/Query Internal Package.</h2>
diff --git a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/package.html b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/package.html
index 3871ea3..0128b99 100644
--- a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/package.html
+++ b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>SQL Index/Query.</h2>
diff --git a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/api/SQLQuerying.java b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/api/SQLQuerying.java
index de9b61c..351b822 100644
--- a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/api/SQLQuerying.java
+++ b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/api/SQLQuerying.java
@@ -27,7 +27,7 @@
 import org.qi4j.spi.query.EntityFinderException;
 
 /**
- * This interface provides parsing support from Qi4j queries to SQL queries. The idea is that this interface produces
+ * This interface provides parsing support from Zest queries to SQL queries. The idea is that this interface produces
  * SQL which can be used when creating a {@link PreparedStatement}.
  *
  * @author Stanislav Muhametsin
@@ -35,13 +35,13 @@
 public interface SQLQuerying
 {
     /**
-     * This method will be called when parsing needs to be done from Qi4j query to SQL query. This method is supposed to
+     * This method will be called when parsing needs to be done from Zest query to SQL query. This method is supposed to
      * return one single SQL query, which can be used with {@link PreparedStatement}.
      *
-     * @param resultType The result type of Qi4j query.
-     * @param whereClause The where clause of Qi4j query.
-     * @param orderBySegments The order by segments of Qi4j query.
-     * @param firstResult The first result index of Qi4j query.
+     * @param resultType The result type of Zest query.
+     * @param whereClause The where clause of Zest query.
+     * @param orderBySegments The order by segments of Zest query.
+     * @param firstResult The first result index of Zest query.
      * @param maxResults The max amount of returned results.
      * @param values Values to put into {@link PreparedStatement}, in the order of the list. This List is created from
      *            the outside and this method is supposed to fill it with necessary values, if any.
diff --git a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/api/package.html b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/api/package.html
index 7ddd249..e5940ac 100644
--- a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/api/package.html
+++ b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/api/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>SQL Index/Query Vendors Support API.</h2>
diff --git a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/common/RebuildingStrategy.java b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/common/RebuildingStrategy.java
index 19005d9..c897a9c 100644
--- a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/common/RebuildingStrategy.java
+++ b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/common/RebuildingStrategy.java
@@ -46,7 +46,7 @@
 
     /**
      * The re-building strategy which NEVER re-builds the database schema. Useful when current
-     * Qi4j-related database schema structure must be preserved at all costs.
+     * Zest-related database schema structure must be preserved at all costs.
      */
     public class NeverNeed
         implements RebuildingStrategy
diff --git a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/common/package.html b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/common/package.html
index 96bd267..ce04662 100644
--- a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/common/package.html
+++ b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/common/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>SQL Index/Query Vendors Common Support.</h2>
diff --git a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/derby/package.html b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/derby/package.html
index 3a7d654..c5899ba 100644
--- a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/derby/package.html
+++ b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/derby/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>SQL Index/Query Apache Derby Support.</h2>
diff --git a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/postgresql/package.html b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/postgresql/package.html
index df880a0..a1bec15 100644
--- a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/postgresql/package.html
+++ b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/postgresql/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>SQL Index/Query PostgreSQL Support.</h2>
diff --git a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/AbstractSQLIndexing.java b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/AbstractSQLIndexing.java
index 5f3457a..3a4a1d9 100644
--- a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/AbstractSQLIndexing.java
+++ b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/AbstractSQLIndexing.java
@@ -47,7 +47,6 @@
 import org.qi4j.api.structure.Application;
 import org.qi4j.api.value.ValueComposite;
 import org.qi4j.api.value.ValueDescriptor;
-import org.qi4j.functional.Function;
 import org.qi4j.functional.Iterables;
 import org.qi4j.functional.Specification;
 import org.qi4j.index.sql.support.api.SQLIndexing;
@@ -368,7 +367,7 @@
                                  Lazy<PreparedStatement, SQLException> queryPKPS )
         throws SQLException
     {
-        // TODO build cache: Qi4j Identity -> PK
+        // TODO build cache: Zest Identity -> PK
         Long entityPK = null;
         PreparedStatement ps = queryPKPS.getValue();
         ps.setString( 1, state.identity().identity() );
diff --git a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/AbstractSQLStartup.java b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/AbstractSQLStartup.java
index ddb2041..5d35236 100644
--- a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/AbstractSQLStartup.java
+++ b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/AbstractSQLStartup.java
@@ -1486,7 +1486,6 @@
         if( !newQNames.contains( qName ) && !qName.name().equals( Identity.class.getName() ) )
         {
             newQNames.add( qName );
-            // System.out.println("QName: " + qName + ", hc: " + qName.hashCode());
             QNameInfo info = qNameInfos.get( qName );
             if( info == null )
             {
diff --git a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/package.html b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/package.html
index 1f8fe75..63053cf 100644
--- a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/package.html
+++ b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>SQL Index/Query Vendors Support Skeletons.</h2>
diff --git a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/sqlite/package.html b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/sqlite/package.html
index 1968a52..7564503 100644
--- a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/sqlite/package.html
+++ b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/sqlite/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>SQL Index/Query SQLite Support.</h2>
diff --git a/extensions/indexing-sql/src/test/resources/logback.xml b/extensions/indexing-sql/src/test/resources/logback.xml
index b6af160..94eb92c 100644
--- a/extensions/indexing-sql/src/test/resources/logback.xml
+++ b/extensions/indexing-sql/src/test/resources/logback.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
 <configuration>
 
     <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
diff --git a/extensions/indexing-sql/src/test/resources/postgres-datasource.properties b/extensions/indexing-sql/src/test/resources/postgres-datasource.properties
index a906d84..f7d7ad5 100644
--- a/extensions/indexing-sql/src/test/resources/postgres-datasource.properties
+++ b/extensions/indexing-sql/src/test/resources/postgres-datasource.properties
@@ -1,3 +1,18 @@
+# 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.
+
 enabled=true
 url=jdbc:postgresql://localhost:5432/jdbc_test_db
 driver=org.postgresql.Driver
diff --git a/extensions/metrics-yammer/NOTICE b/extensions/metrics-yammer/NOTICE
deleted file mode 100644
index 14d9122..0000000
--- a/extensions/metrics-yammer/NOTICE
+++ /dev/null
@@ -1,18 +0,0 @@
-Qi4j Entity Store Migration Extension
-Copyright 2007-2008, The Qi4j Development Team of individuals.
-
-See http://www.qi4j.org/contributors.html for list of of individuals.
-Also see each file for additional information of Copyright claims.
-
-Qi4j is a community aggregated works under Copyright law.
-All parts of the original works at Qi4j is licensed under the
-Apache License ver 2.0 http://www.apache.org/licenses
-
-Below follows a list of binary dependencies and their licenses;
-----------------------------------------------------------------
-
-<NONE>
-
-This component uses Metrics from http://metrics.codahale.com and
-https://github.com/codahale/metrics provided under Apache License v2.0.
-END OF NOTICE
\ No newline at end of file
diff --git a/extensions/metrics-yammer/build.gradle b/extensions/metrics-yammer/build.gradle
index 7ff1a00..c89eba1 100644
--- a/extensions/metrics-yammer/build.gradle
+++ b/extensions/metrics-yammer/build.gradle
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-description = "Qi4j Metrics Extension"
+description = "Apache Zest™ Metrics Extension"
 
-jar { manifest { name = "Qi4j Extension - Metrics" }}
+jar { manifest { name = "Apache Zest™ Extension - Metrics" }}
 
 dependencies {
 
diff --git a/extensions/metrics-yammer/src/docs/metrics-yammer.txt b/extensions/metrics-yammer/src/docs/metrics-yammer.txt
index 0ba80c1..621a9c4 100644
--- a/extensions/metrics-yammer/src/docs/metrics-yammer.txt
+++ b/extensions/metrics-yammer/src/docs/metrics-yammer.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[extension-metrics-yammer, Yammer Metrics]]
 = Yammer Metrics =
 
diff --git a/extensions/metrics-yammer/src/main/java/org/qi4j/metrics/yammer/YammerMetricsMixin.java b/extensions/metrics-yammer/src/main/java/org/qi4j/metrics/yammer/YammerMetricsMixin.java
index 419cb26..16a8091 100644
--- a/extensions/metrics-yammer/src/main/java/org/qi4j/metrics/yammer/YammerMetricsMixin.java
+++ b/extensions/metrics-yammer/src/main/java/org/qi4j/metrics/yammer/YammerMetricsMixin.java
@@ -137,7 +137,7 @@
                         return gauge.value();
                     }
                 } );
-                return new YammerGauge<T>( yammer );
+                return new YammerGauge<>( yammer );
             }
 
             @Override
diff --git a/extensions/metrics-yammer/src/main/java/org/qi4j/metrics/yammer/package.html b/extensions/metrics-yammer/src/main/java/org/qi4j/metrics/yammer/package.html
index 92fe425..2b44d24 100644
--- a/extensions/metrics-yammer/src/main/java/org/qi4j/metrics/yammer/package.html
+++ b/extensions/metrics-yammer/src/main/java/org/qi4j/metrics/yammer/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Yamer Metrics.</h2>
diff --git a/extensions/migration/NOTICE b/extensions/migration/NOTICE
deleted file mode 100644
index aef816e..0000000
--- a/extensions/migration/NOTICE
+++ /dev/null
@@ -1,17 +0,0 @@
-Qi4j Entity Store Migration Extension
-Copyright 2007-2008, The Qi4j Development Team of individuals.
-
-See http://www.qi4j.org/contributors.html for list of of individuals.
-Also see each file for additional information of Copyright claims.
-
-Qi4j is a community aggregated works under Copyright law.
-All parts of the original works at Qi4j is licensed under the
-Apache License ver 2.0 http://www.apache.org/licenses
-
-Below follows a list of binary dependencies and their licenses;
-----------------------------------------------------------------
-
-<NONE>
-
-
-END OF NOTICE
\ No newline at end of file
diff --git a/extensions/migration/build.gradle b/extensions/migration/build.gradle
index d5bd8c3..fa3072a 100644
--- a/extensions/migration/build.gradle
+++ b/extensions/migration/build.gradle
@@ -1,9 +1,29 @@
-description = "Qi4j Migration Extension"
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Extension - Migration" }}
+description = "Apache Zest™ Migration Extension"
+
+jar { manifest { name = "Apache Zest™ Extension - Migration" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.spi"))
+  compile libraries.slf4j_api
 
   testCompile(project(":org.qi4j.core:org.qi4j.core.testsupport"))
 
diff --git a/extensions/migration/dev-status.xml b/extensions/migration/dev-status.xml
index d6c56ac..f6b60e4 100644
--- a/extensions/migration/dev-status.xml
+++ b/extensions/migration/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/extensions/migration/src/docs/migration.txt b/extensions/migration/src/docs/migration.txt
index 23cb9f3..e6c0ff1 100644
--- a/extensions/migration/src/docs/migration.txt
+++ b/extensions/migration/src/docs/migration.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[extension-migration, Migration]]
 = Migration =
 
diff --git a/extensions/migration/src/main/java/org/qi4j/migration/assembly/package.html b/extensions/migration/src/main/java/org/qi4j/migration/assembly/package.html
index cd262aa..9dad115 100644
--- a/extensions/migration/src/main/java/org/qi4j/migration/assembly/package.html
+++ b/extensions/migration/src/main/java/org/qi4j/migration/assembly/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Entities Migration Assembly.</h2>
diff --git a/extensions/migration/src/main/java/org/qi4j/migration/operation/package.html b/extensions/migration/src/main/java/org/qi4j/migration/operation/package.html
index 29d354a..77115b0 100644
--- a/extensions/migration/src/main/java/org/qi4j/migration/operation/package.html
+++ b/extensions/migration/src/main/java/org/qi4j/migration/operation/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Entities Migration Operations.</h2>
diff --git a/extensions/migration/src/main/java/org/qi4j/migration/package.html b/extensions/migration/src/main/java/org/qi4j/migration/package.html
index 9485ec4..3eec608 100644
--- a/extensions/migration/src/main/java/org/qi4j/migration/package.html
+++ b/extensions/migration/src/main/java/org/qi4j/migration/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Entities Migration Extension.</h2>
diff --git a/extensions/reindexer/NOTICE b/extensions/reindexer/NOTICE
deleted file mode 100644
index 2e988c6..0000000
--- a/extensions/reindexer/NOTICE
+++ /dev/null
@@ -1,17 +0,0 @@
-Qi4j Re-Indexing Extension
-Copyright 2007-2008, The Qi4j Development Team of individuals.
-
-See http://www.qi4j.org/contributors.html for list of of individuals.
-Also see each file for additional information of Copyright claims.
-
-Qi4j is a community aggregated works under Copyright law.
-All parts of the original works at Qi4j is licensed under the
-Apache License ver 2.0 http://www.apache.org/licenses
-
-Below follows a list of binary dependencies and their licenses;
-----------------------------------------------------------------
-
-<NONE>
-
-
-END OF NOTICE
\ No newline at end of file
diff --git a/extensions/reindexer/build.gradle b/extensions/reindexer/build.gradle
index 35ae6eb..018ace0 100644
--- a/extensions/reindexer/build.gradle
+++ b/extensions/reindexer/build.gradle
@@ -1,8 +1,27 @@
+/*
+ * 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.
+ */
 
-jar { manifest { description = "Qi4j Reindexer Extension" }}
+jar { manifest { description = "Apache Zest™ Reindexer Extension" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.spi"))
+  compile(libraries.slf4j_api)
 
   testCompile(project(":org.qi4j.core:org.qi4j.core.testsupport"))
   testCompile(project(':org.qi4j.extensions:org.qi4j.extension.entitystore-jdbm'))
diff --git a/extensions/reindexer/dev-status.xml b/extensions/reindexer/dev-status.xml
index d6c56ac..f6b60e4 100644
--- a/extensions/reindexer/dev-status.xml
+++ b/extensions/reindexer/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/extensions/reindexer/src/docs/reindexer.txt b/extensions/reindexer/src/docs/reindexer.txt
index 5516fc1..7e8a73b 100644
--- a/extensions/reindexer/src/docs/reindexer.txt
+++ b/extensions/reindexer/src/docs/reindexer.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[extension-reindexer,Reindexer]]
 = Reindexer =
 
diff --git a/extensions/reindexer/src/main/java/org/qi4j/index/reindexer/internal/ReindexerMixin.java b/extensions/reindexer/src/main/java/org/qi4j/index/reindexer/internal/ReindexerMixin.java
index 211206b..5638cd3 100644
--- a/extensions/reindexer/src/main/java/org/qi4j/index/reindexer/internal/ReindexerMixin.java
+++ b/extensions/reindexer/src/main/java/org/qi4j/index/reindexer/internal/ReindexerMixin.java
@@ -26,7 +26,6 @@
 import org.qi4j.api.injection.scope.Structure;
 import org.qi4j.api.injection.scope.This;
 import org.qi4j.api.service.ServiceReference;
-import org.qi4j.api.structure.Module;
 import org.qi4j.index.reindexer.Reindexer;
 import org.qi4j.index.reindexer.ReindexerConfiguration;
 import org.qi4j.io.Output;
@@ -35,99 +34,104 @@
 import org.qi4j.spi.entity.EntityState;
 import org.qi4j.spi.entitystore.EntityStore;
 import org.qi4j.spi.entitystore.StateChangeListener;
+import org.qi4j.spi.module.ModuleSpi;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class ReindexerMixin
-        implements Reindexer
+    implements Reindexer
 {
-   private static QualifiedName identityQN;
+    private static QualifiedName identityQN;
 
-   static
-   {
-      try
-      {
-         identityQN = QualifiedName.fromAccessor( Identity.class.getMethod( "identity" ) );
-      } catch (NoSuchMethodException e)
-      {
-         throw new InternalError("Qi4j Core Runtime codebase is corrupted. Contact Qi4j team: ReindexerMixin");
-      }
-   }
+    static
+    {
+        try
+        {
+            identityQN = QualifiedName.fromAccessor( Identity.class.getMethod( "identity" ) );
+        }
+        catch( NoSuchMethodException e )
+        {
+            throw new InternalError( "Zest Core Runtime codebase is corrupted. Contact Zest team: ReindexerMixin" );
+        }
+    }
 
-   @This
-   private Configuration<ReindexerConfiguration> configuration;
+    @This
+    private Configuration<ReindexerConfiguration> configuration;
 
-   @Service
-   private EntityStore store;
-   @Service
-   private Iterable<ServiceReference<StateChangeListener>> listeners;
-   @Structure
-   private Module module;
+    @Service
+    private EntityStore store;
 
-   private Logger logger = LoggerFactory.getLogger(Reindexer.class);
+    @Service
+    private Iterable<ServiceReference<StateChangeListener>> listeners;
+
+    @Structure
+    private ModuleSpi module;
+
+    private Logger logger = LoggerFactory.getLogger( Reindexer.class );
 
     @Override
-   public void reindex()
-   {
-      configuration.refresh();
-      ReindexerConfiguration conf = configuration.get();
-      Integer loadValue = conf.loadValue().get();
-      if (loadValue == null)
-      {
-         loadValue = 50;
-      }
-      new ReindexerOutput(loadValue).reindex(store);
-   }
+    public void reindex()
+    {
+        configuration.refresh();
+        ReindexerConfiguration conf = configuration.get();
+        Integer loadValue = conf.loadValue().get();
+        if( loadValue == null )
+        {
+            loadValue = 50;
+        }
+        new ReindexerOutput( loadValue ).reindex( store );
+    }
 
-   private class ReindexerOutput
-           implements Output<EntityState, RuntimeException>, Receiver<EntityState, RuntimeException>
-   {
-      private int count;
-      private int loadValue;
-      private ArrayList<EntityState> states;
+    private class ReindexerOutput
+        implements Output<EntityState, RuntimeException>, Receiver<EntityState, RuntimeException>
+    {
+        private int count;
+        private int loadValue;
+        private ArrayList<EntityState> states;
 
-      public ReindexerOutput(Integer loadValue)
-      {
-         this.loadValue = loadValue;
-         states = new ArrayList<EntityState>();
-      }
+        public ReindexerOutput( Integer loadValue )
+        {
+            this.loadValue = loadValue;
+            states = new ArrayList<>();
+        }
 
-      public void reindex(EntityStore store)
-      {
+        public void reindex( EntityStore store )
+        {
 
-         store.entityStates(module).transferTo(this);
-         reindexState();
-      }
-
-      @Override
-      public <SenderThrowableType extends Throwable> void receiveFrom(Sender<? extends EntityState, SenderThrowableType> sender) throws RuntimeException, SenderThrowableType
-      {
-         sender.sendTo(this);
-         reindexState();
-      }
-
-       @Override
-      public void receive(EntityState item)
-              throws RuntimeException
-      {
-         count++;
-         item.setPropertyValue( identityQN, item.identity().identity() );
-         states.add(item);
-
-         if (states.size() >= loadValue)
-         {
+            store.entityStates( module ).transferTo( this );
             reindexState();
-         }
-      }
+        }
 
-      public void reindexState()
-      {
-         for (ServiceReference<StateChangeListener> listener : listeners)
-         {
-            listener.get().notifyChanges(states);
-         }
-         states.clear();
-         logger.debug("Reindexed " + count + " entities");
-      }
-   }
+        @Override
+        public <SenderThrowableType extends Throwable> void receiveFrom( Sender<? extends EntityState, SenderThrowableType> sender )
+            throws RuntimeException, SenderThrowableType
+        {
+            sender.sendTo( this );
+            reindexState();
+        }
+
+        @Override
+        public void receive( EntityState item )
+            throws RuntimeException
+        {
+            count++;
+            item.setPropertyValue( identityQN, item.identity().identity() );
+            states.add( item );
+
+            if( states.size() >= loadValue )
+            {
+                reindexState();
+            }
+        }
+
+        public void reindexState()
+        {
+            for( ServiceReference<StateChangeListener> listener : listeners )
+            {
+                listener.get().notifyChanges( states );
+            }
+            states.clear();
+            logger.debug( "Reindexed " + count + " entities" );
+        }
+    }
 }
diff --git a/extensions/reindexer/src/main/java/org/qi4j/index/reindexer/internal/package.html b/extensions/reindexer/src/main/java/org/qi4j/index/reindexer/internal/package.html
index e4744dc..0d52529 100644
--- a/extensions/reindexer/src/main/java/org/qi4j/index/reindexer/internal/package.html
+++ b/extensions/reindexer/src/main/java/org/qi4j/index/reindexer/internal/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Entities Reindexer Extension Internal Package.</h2>
diff --git a/extensions/reindexer/src/main/java/org/qi4j/index/reindexer/package.html b/extensions/reindexer/src/main/java/org/qi4j/index/reindexer/package.html
index be07e15..5a02687 100644
--- a/extensions/reindexer/src/main/java/org/qi4j/index/reindexer/package.html
+++ b/extensions/reindexer/src/main/java/org/qi4j/index/reindexer/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Entities Reindexer Extension.</h2>
diff --git a/extensions/reindexer/src/test/java/org/qi4j/index/reindexer/ReindexerTest.java b/extensions/reindexer/src/test/java/org/qi4j/index/reindexer/ReindexerTest.java
index d656b6f..923151d 100644
--- a/extensions/reindexer/src/test/java/org/qi4j/index/reindexer/ReindexerTest.java
+++ b/extensions/reindexer/src/test/java/org/qi4j/index/reindexer/ReindexerTest.java
@@ -39,7 +39,9 @@
 import org.qi4j.test.AbstractQi4jTest;
 import org.qi4j.test.EntityTestAssembler;
 
+import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
 import static org.qi4j.api.query.QueryExpressions.eq;
 import static org.qi4j.api.query.QueryExpressions.templateFor;
 
@@ -85,6 +87,10 @@
     public void createDataWipeIndexReindexAndAssertData()
             throws UnitOfWorkCompletionException
     {
+        File rdfDir = new File( System.getProperty( "user.dir" ), "build/testdata/qi4j-index" ).getAbsoluteFile();
+        rdfDir.mkdirs();
+        assertThat( rdfDir.exists(), is(true) );
+
         // ----> Create data and wipe index
 
         UnitOfWork uow = module.newUnitOfWork();
@@ -97,6 +103,7 @@
         uow.complete();
 
         deleteIndexData(); // Wipe the index data on disk
+        rdfDir.mkdirs();
 
 
         // ----> Reindex and assert data
@@ -132,7 +139,7 @@
     private static boolean deleteEntitiesData()
     {
         boolean success = true;
-        File esDir = new File( "build/testdata/qi4j-entities" );
+        File esDir = new File( System.getProperty( "user.dir" ), "build/testdata/qi4j-entities" ).getAbsoluteFile();
         if ( esDir.exists() ) {
             success = FileUtil.deltree( esDir );
         }
@@ -142,7 +149,7 @@
     private static boolean deleteIndexData()
     {
         boolean success = true;
-        File rdfDir = new File( "build/testdata/qi4j-index" );
+        File rdfDir = new File( System.getProperty( "user.dir" ), "build/testdata/qi4j-index" ).getAbsoluteFile();
         if ( rdfDir.exists() ) {
             FileUtils.delete( rdfDir );
             success = FileUtil.deltree( rdfDir );
diff --git a/extensions/reindexer/src/test/resources/org/qi4j/entitystore/jdbm/JdbmEntityStoreService.properties b/extensions/reindexer/src/test/resources/org/qi4j/entitystore/jdbm/JdbmEntityStoreService.properties
index 5bdf959..514c133 100644
--- a/extensions/reindexer/src/test/resources/org/qi4j/entitystore/jdbm/JdbmEntityStoreService.properties
+++ b/extensions/reindexer/src/test/resources/org/qi4j/entitystore/jdbm/JdbmEntityStoreService.properties
@@ -1 +1,16 @@
+# 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.
+
 file=build/testdata/qi4j-entities/qi4j-entities
\ No newline at end of file
diff --git a/extensions/reindexer/src/test/resources/org/qi4j/library/rdf/repository/rdf-indexing.properties b/extensions/reindexer/src/test/resources/org/qi4j/library/rdf/repository/rdf-indexing.properties
index e509773..ddd352d 100644
--- a/extensions/reindexer/src/test/resources/org/qi4j/library/rdf/repository/rdf-indexing.properties
+++ b/extensions/reindexer/src/test/resources/org/qi4j/library/rdf/repository/rdf-indexing.properties
@@ -1 +1,16 @@
+# 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.
+
 dataDirectory=build/testdata/qi4j-index
\ No newline at end of file
diff --git a/extensions/valueserialization-jackson/build.gradle b/extensions/valueserialization-jackson/build.gradle
index 48fb1fb..616e01b 100644
--- a/extensions/valueserialization-jackson/build.gradle
+++ b/extensions/valueserialization-jackson/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j Jackson ValueSerialization Extension"
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Extension - ValueSerialization - Jackson" } }
+description = "Apache Zest™ Jackson ValueSerialization Extension"
+
+jar { manifest { name = "Apache Zest™ Extension - ValueSerialization - Jackson" } }
 
 dependencies {
 
@@ -10,7 +29,7 @@
     testCompile project(":org.qi4j.core:org.qi4j.core.testsupport")
 
     testRuntime project(":org.qi4j.core:org.qi4j.core.runtime")
-    testRuntime libraries.logback
+    testRuntime libraries.slf4j_simple
 
 }
 
diff --git a/extensions/valueserialization-jackson/dev-status.xml b/extensions/valueserialization-jackson/dev-status.xml
index 5bcc65c..cbf512f 100644
--- a/extensions/valueserialization-jackson/dev-status.xml
+++ b/extensions/valueserialization-jackson/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/extensions/valueserialization-jackson/src/docs/vs-jackson.txt b/extensions/valueserialization-jackson/src/docs/vs-jackson.txt
index 3071215..898a8d7 100644
--- a/extensions/valueserialization-jackson/src/docs/vs-jackson.txt
+++ b/extensions/valueserialization-jackson/src/docs/vs-jackson.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[extension-vs-jackson, Jackson ValueSerialization]]
 = Jackson ValueSerialization =
 
diff --git a/extensions/valueserialization-jackson/src/main/java/org/qi4j/valueserialization/jackson/JacksonValueDeserializer.java b/extensions/valueserialization-jackson/src/main/java/org/qi4j/valueserialization/jackson/JacksonValueDeserializer.java
index 5c6774b..3d82f43 100644
--- a/extensions/valueserialization-jackson/src/main/java/org/qi4j/valueserialization/jackson/JacksonValueDeserializer.java
+++ b/extensions/valueserialization-jackson/src/main/java/org/qi4j/valueserialization/jackson/JacksonValueDeserializer.java
@@ -24,6 +24,7 @@
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import java.io.InputStream;
 import java.util.Collection;
+import java.util.Iterator;
 import java.util.Map;
 import org.qi4j.api.injection.scope.Service;
 import org.qi4j.api.injection.scope.Structure;
@@ -341,6 +342,31 @@
         }
     }
 
+    @Override
+    protected <V> void putObjectNodeInMap( JsonNode inputNode,
+                                           Function<JsonNode, V> valueDeserializer,
+                                           Map<String, V> map
+    )
+        throws Exception
+    {
+        if( isNullOrMissing( inputNode ) )
+        {
+            return;
+        }
+        if( !inputNode.isObject() )
+        {
+            throw new ValueSerializationException( "Expected an object but got " + inputNode );
+        }
+        ObjectNode object = (ObjectNode) inputNode;
+        Iterator<Map.Entry<String, JsonNode>> fields = object.fields();
+        while( fields.hasNext() )
+        {
+            Map.Entry<String, JsonNode> entry = fields.next();
+            V value = valueDeserializer.map( entry.getValue() );
+            map.put( entry.getKey(), value );
+        }
+    }
+
     private static boolean isNullOrMissing( JsonNode inputNode )
     {
         return inputNode == null || inputNode.isNull() || inputNode.isMissingNode();
diff --git a/extensions/valueserialization-jackson/src/main/java/org/qi4j/valueserialization/jackson/package.html b/extensions/valueserialization-jackson/src/main/java/org/qi4j/valueserialization/jackson/package.html
index f52d3db..0de7293 100644
--- a/extensions/valueserialization-jackson/src/main/java/org/qi4j/valueserialization/jackson/package.html
+++ b/extensions/valueserialization-jackson/src/main/java/org/qi4j/valueserialization/jackson/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Jackson Value Serializer.</h2>
diff --git a/extensions/valueserialization-jackson/src/test/java/org/qi4j/valueserialization/jackson/JacksonConfigurationDeserializationTest.java b/extensions/valueserialization-jackson/src/test/java/org/qi4j/valueserialization/jackson/JacksonConfigurationDeserializationTest.java
new file mode 100644
index 0000000..1209abf
--- /dev/null
+++ b/extensions/valueserialization-jackson/src/test/java/org/qi4j/valueserialization/jackson/JacksonConfigurationDeserializationTest.java
@@ -0,0 +1,36 @@
+/*
+ *  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.qi4j.valueserialization.jackson;
+
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.test.entity.AbstractConfigurationDeserializationTest;
+
+public class JacksonConfigurationDeserializationTest
+    extends AbstractConfigurationDeserializationTest
+{
+    @Override
+    public void assemble( final ModuleAssembly module )
+        throws AssemblyException
+    {
+        super.assemble( module );
+        new JacksonValueSerializationAssembler()
+            .assemble( module );
+    }
+}
diff --git a/extensions/valueserialization-jackson/src/test/resources/configtest.json b/extensions/valueserialization-jackson/src/test/resources/configtest.json
new file mode 100644
index 0000000..d48a241
--- /dev/null
+++ b/extensions/valueserialization-jackson/src/test/resources/configtest.json
@@ -0,0 +1,8 @@
+{
+  "identity" : "configtest",
+  "host": {
+    "ip": "12.23.34.45",
+    "port": 1234
+  },
+  "name": "main"
+}
\ No newline at end of file
diff --git a/extensions/valueserialization-jackson/src/test/resources/logback-test.xml b/extensions/valueserialization-jackson/src/test/resources/logback-test.xml
deleted file mode 100644
index 7eee13f..0000000
--- a/extensions/valueserialization-jackson/src/test/resources/logback-test.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<configuration>
-
-    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
-        <layout class="ch.qos.logback.classic.PatternLayout">
-            <Pattern>%-5level %logger{24} - %msg%n</Pattern>
-        </layout>
-    </appender>
-
-    <root level="info">
-        <appender-ref ref="stdout" />
-    </root>
-
-    <logger name="org.qi4j.spi.value" level="trace"/>
-    <logger name="org.qi4j.test.value" level="trace"/>
-    <logger name="org.qi4j.stateserializer" level="trace"/>
-
-</configuration>
\ No newline at end of file
diff --git a/extensions/valueserialization-orgjson/build.gradle b/extensions/valueserialization-orgjson/build.gradle
index ec311e5..a919f4e 100644
--- a/extensions/valueserialization-orgjson/build.gradle
+++ b/extensions/valueserialization-orgjson/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j org.json ValueSerialization Extension"
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Extension - ValueSerialization - org.json" } }
+description = "Apache Zest™ org.json ValueSerialization Extension"
+
+jar { manifest { name = "Apache Zest™ Extension - ValueSerialization - org.json" } }
 
 dependencies {
 
@@ -9,7 +28,7 @@
     testCompile project(":org.qi4j.core:org.qi4j.core.testsupport")
 
     testRuntime project(":org.qi4j.core:org.qi4j.core.runtime")
-    testRuntime libraries.logback
+    testRuntime libraries.slf4j_simple
 
 }
 
diff --git a/extensions/valueserialization-orgjson/dev-status.xml b/extensions/valueserialization-orgjson/dev-status.xml
index cff4f93..b41b4f7 100644
--- a/extensions/valueserialization-orgjson/dev-status.xml
+++ b/extensions/valueserialization-orgjson/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/extensions/valueserialization-orgjson/src/docs/vs-orgjson.txt b/extensions/valueserialization-orgjson/src/docs/vs-orgjson.txt
index 087a006..a893ac0 100644
--- a/extensions/valueserialization-orgjson/src/docs/vs-orgjson.txt
+++ b/extensions/valueserialization-orgjson/src/docs/vs-orgjson.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[extension-vs-orgjson, org.json ValueSerialization]]
 = org.json ValueSerialization =
 
diff --git a/extensions/valueserialization-orgjson/src/main/java/org/qi4j/valueserialization/orgjson/package.html b/extensions/valueserialization-orgjson/src/main/java/org/qi4j/valueserialization/orgjson/package.html
index d06943b..f88bff8 100644
--- a/extensions/valueserialization-orgjson/src/main/java/org/qi4j/valueserialization/orgjson/package.html
+++ b/extensions/valueserialization-orgjson/src/main/java/org/qi4j/valueserialization/orgjson/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>org.json Value Serialization.</h2>
diff --git a/extensions/valueserialization-orgjson/src/test/java/org/qi4j/valueserialization/orgjson/OrgJsonConfigurationDeserializationTest.java b/extensions/valueserialization-orgjson/src/test/java/org/qi4j/valueserialization/orgjson/OrgJsonConfigurationDeserializationTest.java
new file mode 100644
index 0000000..3d9cd3e
--- /dev/null
+++ b/extensions/valueserialization-orgjson/src/test/java/org/qi4j/valueserialization/orgjson/OrgJsonConfigurationDeserializationTest.java
@@ -0,0 +1,36 @@
+/*
+ *  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.qi4j.valueserialization.orgjson;
+
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.test.entity.AbstractConfigurationDeserializationTest;
+
+public class OrgJsonConfigurationDeserializationTest
+    extends AbstractConfigurationDeserializationTest
+{
+    @Override
+    public void assemble( final ModuleAssembly module )
+        throws AssemblyException
+    {
+        super.assemble( module );
+        new OrgJsonValueSerializationAssembler()
+            .assemble( module );
+    }
+}
diff --git a/extensions/valueserialization-orgjson/src/test/resources/configtest.json b/extensions/valueserialization-orgjson/src/test/resources/configtest.json
new file mode 100644
index 0000000..d48a241
--- /dev/null
+++ b/extensions/valueserialization-orgjson/src/test/resources/configtest.json
@@ -0,0 +1,8 @@
+{
+  "identity" : "configtest",
+  "host": {
+    "ip": "12.23.34.45",
+    "port": 1234
+  },
+  "name": "main"
+}
\ No newline at end of file
diff --git a/extensions/valueserialization-stax/build.gradle b/extensions/valueserialization-stax/build.gradle
index 1f95ab3..ea05136 100644
--- a/extensions/valueserialization-stax/build.gradle
+++ b/extensions/valueserialization-stax/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j StaX ValueSerialization Extension"
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Extension - ValueSerialization - StaX" } }
+description = "Apache Zest™ StaX ValueSerialization Extension"
+
+jar { manifest { name = "Apache Zest™ Extension - ValueSerialization - StaX" } }
 
 dependencies {
 
@@ -10,7 +29,7 @@
     testCompile project(":org.qi4j.core:org.qi4j.core.testsupport")
 
     testRuntime project(":org.qi4j.core:org.qi4j.core.runtime")
-    testRuntime libraries.logback
+    testRuntime libraries.slf4j_simple
 
 }
 
diff --git a/extensions/valueserialization-stax/dev-status.xml b/extensions/valueserialization-stax/dev-status.xml
index 5bcc65c..cbf512f 100644
--- a/extensions/valueserialization-stax/dev-status.xml
+++ b/extensions/valueserialization-stax/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/extensions/valueserialization-stax/src/docs/vs-stax.txt b/extensions/valueserialization-stax/src/docs/vs-stax.txt
index abe9ecf..7302a47 100644
--- a/extensions/valueserialization-stax/src/docs/vs-stax.txt
+++ b/extensions/valueserialization-stax/src/docs/vs-stax.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[extension-vs-stax, StAX ValueSerialization]]
 = StAX ValueSerialization =
 
diff --git a/extensions/valueserialization-stax/src/main/java/org/qi4j/valueserialization/stax/StaxValueDeserializer.java b/extensions/valueserialization-stax/src/main/java/org/qi4j/valueserialization/stax/StaxValueDeserializer.java
index 9bdc34a..6c61ffb 100644
--- a/extensions/valueserialization-stax/src/main/java/org/qi4j/valueserialization/stax/StaxValueDeserializer.java
+++ b/extensions/valueserialization-stax/src/main/java/org/qi4j/valueserialization/stax/StaxValueDeserializer.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.valueserialization.stax;
 
 import java.io.InputStream;
@@ -404,6 +422,33 @@
         }
     }
 
+    @Override
+    protected <V> void putObjectNodeInMap( Node inputNode,
+                                           Function<Node, V> valueDeserializer,
+                                           Map<String, V> map )
+        throws Exception
+    {
+        if( inputNode == null )
+        {
+            return;
+        }
+        if( !"object".equals( inputNode.getLocalName() ) )
+        {
+            throw new ValueSerializationException( "Expected an <object/> but got " + inputNode );
+        }
+        NodeList fieldsNodes = inputNode.getChildNodes();
+        for( int idx = 0; idx < fieldsNodes.getLength(); idx++ )
+        {
+            Node fieldNode = fieldsNodes.item( idx );
+            String key = getDirectChildNode( fieldNode, "name" ).getTextContent();
+            if( key != null && key.length() > 0 )
+            {
+                V value = getObjectFieldValue( inputNode, key, valueDeserializer );
+                map.put( key, value );
+            }
+        }
+    }
+
     @SuppressWarnings( "AssignmentToMethodParameter" )
     private Object detectAndConvertStringValue( String stringValue )
     {
diff --git a/extensions/valueserialization-stax/src/main/java/org/qi4j/valueserialization/stax/package.html b/extensions/valueserialization-stax/src/main/java/org/qi4j/valueserialization/stax/package.html
index 99e0c03..2d3a1dd 100644
--- a/extensions/valueserialization-stax/src/main/java/org/qi4j/valueserialization/stax/package.html
+++ b/extensions/valueserialization-stax/src/main/java/org/qi4j/valueserialization/stax/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>XML StAX Value Serializer.</h2>
diff --git a/extensions/valueserialization-stax/src/test/java/org/qi4j/valueserialization/stax/StaxConfigurationDeserializationTest.java b/extensions/valueserialization-stax/src/test/java/org/qi4j/valueserialization/stax/StaxConfigurationDeserializationTest.java
new file mode 100644
index 0000000..4f32986
--- /dev/null
+++ b/extensions/valueserialization-stax/src/test/java/org/qi4j/valueserialization/stax/StaxConfigurationDeserializationTest.java
@@ -0,0 +1,65 @@
+/*
+ *  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.qi4j.valueserialization.stax;
+
+import org.junit.Ignore;
+import org.junit.Test;
+import org.qi4j.api.injection.scope.Service;
+import org.qi4j.api.value.ValueBuilder;
+import org.qi4j.api.value.ValueSerialization;
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.test.entity.AbstractConfigurationDeserializationTest;
+
+@Ignore( "Complex configurations are not yet support in Stax ValueSerialization, due to handling arrays with Java serialization.")
+public class StaxConfigurationDeserializationTest
+    extends AbstractConfigurationDeserializationTest
+{
+    @Service
+    private ValueSerialization valueSerialization;
+
+    @Override
+    public void assemble( final ModuleAssembly module )
+        throws AssemblyException
+    {
+        super.assemble( module );
+        new StaxValueSerializationAssembler()
+            .assemble( module );
+    }
+
+    @Test
+    public void serializeTest()
+    {
+        ValueBuilder<ConfigSerializationConfig> builder = module.newValueBuilder( ConfigSerializationConfig.class );
+        builder.prototype().name().set( "main" );
+        builder.prototype().host().set( createHost() );
+        builder.prototype().identity().set( "configtest" );
+        ConfigSerializationConfig value = builder.newInstance();
+
+        valueSerialization.serialize( value, System.out );
+    }
+
+    private Host createHost()
+    {
+        ValueBuilder<Host> builder = module.newValueBuilder( Host.class );
+        builder.prototype().ip().set( "12.23.34.45" );
+        builder.prototype().port().set( 1234 );
+        return builder.newInstance();
+    }
+}
diff --git a/extensions/valueserialization-stax/src/test/resources/configtest.xml b/extensions/valueserialization-stax/src/test/resources/configtest.xml
new file mode 100644
index 0000000..90d2d23
--- /dev/null
+++ b/extensions/valueserialization-stax/src/test/resources/configtest.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" ?>
+<!--
+  ~  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.
+  ~
+  -->
+
+<object>
+  <field>
+    <name>name</name>
+    <value>main</value>
+  </field>
+  <field>
+    <name>host</name>
+    <value>
+      <object>
+        <field>
+          <name>_type</name>
+          <value>org.qi4j.test.entity.AbstractConfigurationDeserializationTest$Host</value>
+        </field>
+        <field>
+          <name>port</name>
+          <value>1234</value>
+        </field>
+        <field>
+          <name>ip</name>
+          <value>12.23.34.45</value>
+        </field>
+      </object>
+    </value>
+  </field>
+  <field>
+    <name>identity</name>
+    <value>configtest</value>
+  </field>
+</object>
diff --git a/extensions/valueserialization-stax/src/test/resources/logback-test.xml b/extensions/valueserialization-stax/src/test/resources/logback-test.xml
deleted file mode 100644
index 11e6fb8..0000000
--- a/extensions/valueserialization-stax/src/test/resources/logback-test.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<configuration>
-
-    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
-        <layout class="ch.qos.logback.classic.PatternLayout">
-            <Pattern>%-5level %logger{24} - %msg%n</Pattern>
-        </layout>
-    </appender>
-
-    <root level="info">
-        <appender-ref ref="stdout" />
-    </root>
-
-    <logger name="org.qi4j.spi.value" level="debug"/>
-    <logger name="org.qi4j.test.value" level="debug"/>
-    <logger name="org.qi4j.valueserializer" level="debug"/>
-    <logger name="org.qi4j.valueserialization" level="debug"/>
-
-</configuration>
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..455a465
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,14 @@
+# 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.
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 7185259..48f202a 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Thu Jun 12 14:19:20 CEST 2014
+#Mon Jul 06 10:43:59 EEST 2015
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.5-all.zip
diff --git a/libraries.gradle b/libraries.gradle
index 7903c59..1507bc8 100644
--- a/libraries.gradle
+++ b/libraries.gradle
@@ -1,83 +1,86 @@
+/*
+ * 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.
+ */
+
 // Versions of Dependencies;
-def asmVersion = '5.0.3'
-def beanshellVersion = '2.0b4'
+def asmVersion = '5.0.4'
 def bonecpVersion = '0.8.0.RELEASE'
-def bouncyVersion = '1.50'
-def c3p0Version = '0.9.1.2'
-def commonsCodecVersion = '1.8'
-def commonsDbcpVersion = '1.4' // Should be moved to org.apache.tomcat:tomcat-jdbc:8.0.8
-def commonsIoVersion = '2.4'
-def commonsLangVersion = '2.6'
-def cxfVersion = '2.5.6' // 2.7.11 Unable to resolve dependencies! - 3.0.0 exists
-def derbyVersion = '10.10.2.0'
-def dnsJavaVersion = '2.1.6'
-def ehcacheVersion = '2.8.3'
-def elasticsearchVersion = '1.3.4'
-def freemarkerVersion = '2.3.20'
-def gaeVersion = '1.8.8'
-def groovyVersion = '2.3.2'
-def guavaVersion = '17.0'
-def h2Version = '1.4.178'
-def hazelcastVersion = '3.2.2'
+def bouncyVersion = '1.52'
+def commonsDbcpVersion = '1.4' // Should be moved to commons-dbcp2
+def commonsLangVersion = '2.6' // Should be moved to commons-lang3
+def derbyVersion = '10.11.1.1'
+def dnsJavaVersion = '2.1.7'
+def ehcacheVersion = '2.10.0'
+def elasticsearchVersion = '1.6.0'
+def freemarkerVersion = '2.3.22'
+def groovyVersion = '2.4.3'
+def h2Version = '1.4.187'
+def hazelcastVersion = '3.5'
 def httpClientVersion = '4.2.2' // 4.3.4 exists
-def jacksonVersion = '2.4.0'
-def javascriptVersion = '1.7R4'
+def jacksonVersion = '2.5.4'
+def javascriptVersion = '1.7.7'
 def javasqlgeneratorVersion = '0.3.2'
-def jcloudsVersion = '1.7.3'
+def jcloudsVersion = '1.9.0'
 def jdbmVersion = '2.4'
-def jdomVersion = '2.0.2'
-def jedisVersion = '2.5.1'
-def jettyVersion = '9.2.1.v20140609'
+def jedisVersion = '2.7.2'
+def jettyVersion = '9.2.11.v20150529' // 9.3.x Tests fail!
 def jgoodiesLooksVersion = '2.5.3'
-def jodaMoneyVersion = '0.9.1'
-def jodaTimeVersion = '2.3'
-def jrubyVersion = '1.7.8' // 1.7.12 - Fails to run!
+def jodaMoneyVersion = '0.10.0'
+def jodaTimeVersion = '2.8.1'
 def jtaVersion = '1.1'
 def leveldbVersion = '0.7'
 def leveldbJniVersion = '1.8'
-def liquibaseVersion = '3.2.0'
-def log4jVersion = '1.2.17'
-def logbackVersion = '1.1.2'
-def mongodbVersion = '2.12.2'
-def mysqlVersion = '5.1.31'
-def neoVersion = '1.3' // 1.9.4 Fails to compile! - 2.1.2 exists
-def neoIndexVersion = '1.3-1.3.M01' // Do not exist anymore!
+def liquibaseVersion = '3.4.0'
+def logbackVersion = '1.1.3'
+def mongodbVersion = '2.13.2' // 3.0.x Fails to compile!
+def mysqlVersion = '5.1.35'
 def orgJsonVersion = '20130213'
 def osgiVersion = '4.2.0' // 4.3.0 Fails to compile! - 5.0.0 exists
 def pdfboxVersion = '1.8.5'
-def postgresqlVersion = '9.3-1101-jdbc4'
+def postgresqlVersion = '9.4-1201-jdbc41'
 def prefuseVersion = '0.21'
 def restletVersion = '2.0.15' // 2.2.1 Fails to compile!
 def rdfVersion = '2.7.9'
-def riakVersion = '1.4.4'
-def scalaVersion = '2.11.1'
+def riakVersion = '1.4.4' // 2.0.x Fails to compile!
+def scalaVersion = '2.11.6'
 def servletVersion = '3.1.0'
 def shiroVersion = '1.2.3'
 def skedVersion = '2.1'
-def sleepycatVersion = '5.0.73'
-def slf4jVersion = '1.7.7'
+def slf4jVersion = '1.7.12'
 def solrVersion = "1.4.1" // 4.8.1 Fails to compile!
-def springVersion = '3.2.6.RELEASE' // 4.0.5.RELEASE Fails to compile!
-def spymemcachedVersion = '2.11.3'
-def sqliteVersion = '3.7.2'
-def strutsVersion = '2.3.15.3' // 2.3.16.3 Fails to compile!
+def springVersion = '4.1.7.RELEASE'
+def spymemcachedVersion = '2.12.0'
+def sqliteVersion = '3.8.10.1'
 def velocityVersion = '1.7'
-def voldemortVersion = '1.3.0'
 def wicketVersion = '1.5.8' // 6.15.0 Samples fails to compile!
 def wicketStatelessVersion = '1.5.0'
-def woodstoxVersion = '4.4.0'
-def wsdl4jVersion = '1.6.3'
+def woodstoxVersion = '4.4.1'
 def yammerMetricsVersion = '2.2.0'
 
-def antVersion = '1.9.4'
-def awaitilityVersion = '1.6.0'
-def easyMockVersion = '3.2'
-def jmockVersion = '2.6.0'
+def antVersion = '1.9.5'
+def awaitilityVersion = '1.6.3'
+def easyMockVersion = '3.3.1'
+def jmockVersion = '2.8.1'
 def junitVersion = '4.11'
-def mockitoVersion = '1.9.5'
-def testNgVersion = '6.8.8'
-def restAssuredVersion= '2.3.2'
-def xmlunitVersion = '1.5'
+def mockitoVersion = '1.10.19'
+def testNgVersion = '6.9.4'
+def restAssuredVersion= '2.4.1'
+def xmlunitVersion = '1.6'
 
 // build a map of the dependency artifacts to use.  Allows centralized definition of the version of artifacts to
 // use.  In that respect it serves a role similar to <dependencyManagement> in Maven
@@ -101,7 +104,6 @@
           // logging
           slf4j_api: "org.slf4j:slf4j-api:$slf4jVersion",
           slf4j_simple: "org.slf4j:slf4j-simple:$slf4jVersion",
-          log4j: 'log4j:log4j:' + log4jVersion,
           logback: 'ch.qos.logback:logback-classic:' + logbackVersion,
           jcl_slf4j: "org.slf4j:jcl-over-slf4j:$slf4jVersion",
           jcl_api: 'commons-logging:commons-logging-api:99.0-does-not-exist',  //ensure it is never used.
@@ -173,22 +175,9 @@
           jetty_client: "org.eclipse.jetty:jetty-client:$jettyVersion",
           jetty_xml: "org.eclipse.jetty:jetty-xml:$jettyVersion",
 
-          // Struts
-          struts_codebehind: "org.apache.struts:struts2-codebehind-plugin:$strutsVersion",
-          struts_convention: "org.apache.struts:struts2-convention-plugin:$strutsVersion",
-          struts_core: "org.apache.struts:struts2-core:$strutsVersion",
-
           // Scripting
           groovy: "org.codehaus.groovy:groovy-all:$groovyVersion",
 
-          jruby: "org.jruby:jruby:$jrubyVersion",
-
-          beanshell: [ "org.beanshell:bsh-core:$beanshellVersion",
-                  "org.beanshell:bsh-classpath:$beanshellVersion",
-                  "org.beanshell:bsh-classgen:$beanshellVersion",
-                  "org.beanshell:bsh-reflect:$beanshellVersion"
-
-          ],
           javascript: "org.mozilla:rhino:$javascriptVersion",
 
           // Wicket
@@ -216,35 +205,15 @@
           leveldb_api: "org.iq80.leveldb:leveldb-api:$leveldbVersion",
           leveldb_java: "org.iq80.leveldb:leveldb:$leveldbVersion",
           leveldb_jni_all: "org.fusesource.leveldbjni:leveldbjni-all:$leveldbJniVersion",
-          appengine: "com.google.appengine:appengine-api-1.0-sdk:$gaeVersion",
           mongodb: "org.mongodb:mongo-java-driver:$mongodbVersion",
           riak: "com.basho.riak:riak-client:$riakVersion",
-          neo4j: [ "org.neo4j:neo4j:$neoVersion",
-                  "org.neo4j:neo4j-index:$neoIndexVersion"
-          ],
           jta: "javax.transaction:jta:$jtaVersion",
           javaSqlGenerator: "org.java-sql-generator:org.java-sql-generator.api:$javasqlgeneratorVersion",
           javaSqlGeneratorImpl: "org.java-sql-generator:org.java-sql-generator.implementation:$javasqlgeneratorVersion",
-          voldemort: "org.immunogenomics.gl.voldemort:voldemort:$voldemortVersion",
-          guava: "com.google.guava:guava:$guavaVersion",
-          sleepycat: "com.sleepycat:je:$sleepycatVersion",
-          jdom: "org.jdom:jdom:$jdomVersion",
           velocity: "org.apache.velocity:velocity:$velocityVersion",
-          commons_codec: "commons-codec:commons-codec:$commonsCodecVersion",
           commons_dbcp: "commons-dbcp:commons-dbcp:$commonsDbcpVersion",
-          commons_io: "commons-io:commons-io:$commonsIoVersion",
           commons_lang: "commons-lang:commons-lang:$commonsLangVersion",
           servlet_api: "javax.servlet:javax.servlet-api:$servletVersion",
-          cxf_api: 'org.apache.cxf:cxf-api:' + cxfVersion,
-          cxf_util: "org.apache.cxf:cxf-common-utilities:$cxfVersion",
-          cxf_rt_core: "org.apache.cxf:cxf-rt-core:$cxfVersion",
-          cxf_rt_soap: "org.apache.cxf:cxf-rt-bindings-soap:$cxfVersion",
-          cxf_rt_jaxws: "org.apache.cxf:cxf-rt-frontend-jaxws:$cxfVersion",
-          cxf_rt_aegis: "org.apache.cxf:cxf-rt-databinding-aegis:$cxfVersion",
-          cxf_rt_local: "org.apache.cxf:cxf-rt-transports-local:$cxfVersion",
-          cxf_rt_http: "org.apache.cxf:cxf-rt-transports-http:$cxfVersion",
-          cxf_rt_http_jetty: "org.apache.cxf:cxf-rt-transports-http-jetty:$cxfVersion",
-          wsdl4j: 'wsdl4j:wsdl4j:' + wsdl4jVersion,
           http_client: "org.apache.httpcomponents:httpclient:$httpClientVersion",
           woodstox: "org.codehaus.woodstox:woodstox-core-asl:$woodstoxVersion",
           restlet_xml: "org.restlet.jee:org.restlet.ext.xml:$restletVersion",
@@ -254,7 +223,6 @@
           shiro: "org.apache.shiro:shiro-core:$shiroVersion",
           shiro_web: "org.apache.shiro:shiro-web:$shiroVersion",
           bonecp: "com.jolbox:bonecp:$bonecpVersion",
-          c3p0: "c3p0:c3p0:$c3p0Version",
           liquibase: "org.liquibase:liquibase-core:$liquibaseVersion",
           sked: "org.codeartisans:sked:$skedVersion",
           yammer_metrics: "com.yammer.metrics:metrics-core:$yammerMetricsVersion",
@@ -282,3 +250,47 @@
   ]
 }
 
+// Global transitive dependencies substitution rules
+// See https://docs.gradle.org/current/userguide/dependency_management.html#dependency_substitution_rules
+// See https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.DependencySubstitutions.html
+allprojects {
+  configurations.all {
+    resolutionStrategy.dependencySubstitution.all { DependencySubstitution dep ->
+      if( dep.requested instanceof ModuleComponentSelector ) {
+        // Always resolve SLF4J to the same version
+        if( dep.requested.group == 'org.slf4j' ) {
+          dep.useTarget group: dep.requested.group, name: dep.requested.module, version: slf4jVersion
+        }
+        // Always resolve ASM to the same version
+        if( dep.requested.group == 'org.ow2.asm' ) {
+          dep.useTarget group: dep.requested.group, name: dep.requested.module, version: asmVersion
+        }
+        // Always resolve OSGi to the same version
+        if( dep.requested.group == 'org.osgi' ) {
+          dep.useTarget group: dep.requested.group, name: dep.requested.module, version: osgiVersion
+        }
+        // Always resolve Jackson to the same version
+        if( dep.requested.group.startsWith( 'com.fasterxml.jackson' ) ) {
+          dep.useTarget group: dep.requested.group, name: dep.requested.module, version: jacksonVersion
+        }
+        // woodstox:wstx-asl is broken (no pom), use org.codehaus.woodstox:wstx-asl instead
+        if( dep.requested.group == 'woodstox' && dep.requested.module == 'wstx-asl' ) {
+          dep.useTarget group: 'org.codehaus.woodstox', name: 'wstx-asl', version: dep.requested.version
+        }
+        // some bad citizens have SNAPSHOT parents ...
+        if( dep.requested.module == 'commons-sandbox-parent' && dep.requested.version == '3-SNAPSHOT') {
+          dep.useTarget group: dep.requested.group, name: dep.requested.module, version: '3'
+        }
+        // GSON 2.3 POM is invalid, use 2.3.1 instead .. see https://github.com/google/gson/issues/588
+        if( dep.requested.group == 'com.google.code.gson' && dep.requested.module == 'gson' && dep.requested.version == '2.3' ) {
+          dep.useTarget group: dep.requested.group, name: dep.requested.module, version: '2.3.1'
+        }
+        // Findbugs Annotation is LGPL, use https://github.com/stephenc/findbugs-annotations which is
+        // Apache 2 licensed instead
+        if( dep.requested.group == 'net.sourceforge.findbugs' && dep.requested.module == 'annotations' ) {
+          dep.useTarget group: 'com.github.stephenc.findbugs', name: 'findbugs-annotations', version: '1.3.9-1'
+        }
+      }
+    }
+  }
+}
diff --git a/libraries/.gitignore b/libraries/.gitignore
deleted file mode 100644
index ec10fd1..0000000
--- a/libraries/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-*.iml
-build/
-out/
-rdf/application.rdfn3
-rdf/application.rdfxml
-sql/derby.log
diff --git a/libraries/LICENSE b/libraries/LICENSE
deleted file mode 100644
index f433b1a..0000000
--- a/libraries/LICENSE
+++ /dev/null
@@ -1,177 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
diff --git a/libraries/NOTICE b/libraries/NOTICE
deleted file mode 100644
index 85ed1e0..0000000
--- a/libraries/NOTICE
+++ /dev/null
@@ -1,116 +0,0 @@
-Qi4j Library - Http Service
-Copyright 2007-2008, The Qi4j Development Team of individuals.
-
-See http://www.qi4j.org/contributors.html for list of of individuals.
-Also see each file for additional information of Copyright claims.
-
-Qi4j is a community aggregated works under Copyright law.
-All parts of the original works at Qi4j is licensed under the
-Apache License ver 2.0 http://www.apache.org/licenses
-
-Below follows a list of binary dependencies and their licenses;
-----------------------------------------------------------------
-
-
-libraries/http NOTICE
-This module uses Jetty, developed at Mortbay and Codehaus under Apache
-License 2.0. See LICENSE
-
-This module uses SLF4J, developed at slf4j.org under MIT License.
-See licenses/slf4j.license
-
-
-libraries/rdf NOTICE
-
-This module uses OpenRDF Sesame developed by Aduna Software.
-Copyright Aduna (http://www.aduna-software.com/) � 2001-2007
-See licenses/openrdf.license
-
-This module uses SLF4J, developed at slf4j.org under MIT License.
-See licenses/slf4j.license
-
-
-libraries/scripting/beanshell NOTICE
-
-This module uses Beanshell, developed at beanshell.org.
-It is developed under a dual licensing scheme, the Sun Public License
-and the "Lesser GNU Public License". The author says;
-<quote>
-Dual Licensing: Sun Public License / Gnu Lesser Public License
-BeanShell is dual licensed under both the SPL and LGPL.
-You may use and develop BeanShell under either license.
-
-Please see the Sun Public License for details.
-
-About the LGPL
-Note: the LGPL has become the "Lesser Gnu Public License" and
-BeanShell has adopted the new version...
-
-A quick note about the LGPL:
-
-The LGPL is less restrictive than the ordinary GNU Public License in
-that it does not force you to distribute your own applications under
-the terms of the GPL. It primarily requires that you include a notice
-that you are using the software in your documentation and provide
-access to the original source code. It also essentially requires that
-if you modify or extend BeanShell itself that you make those changes
-available separately, under the terms of either the LGPL or the GPL.
-I would ask that you accomodate this by simply sending me your bug
-fixes and improvement to allow me to incorporate them into the
-general BeanShell release. Please see the LGPL for the details.
-
-If you have a more precise, brief explanation please let me know!
-Thanks! - Pat
-
-Please also feel free to contact me: (Pat Niemeyer pat@pat.net) about
-other licensing arrangements.
-</quote>
-
-
-libraries/scripting/groocy NOTICE
-This module includes software developed by
-The Groovy community (http://groovy.codehaus.org/) under Apache
-License 2.0. Copyright 2003-2009. See LICENSE
-
-
-libraries/scripting/javascript NOTICE
-This module includes Rhino, software developed by
-The Mozilla community (http://mozilla.org/) under Mozilla Public
-License 1.1.Ssee licenses/rhino.license
-
-
-libraries/scripting/jruby NOTICE
-This module includes JRuby, which NOTICE is significantly large
-and can be found at https://github.com/Qi4j/qi4j-libraries/blob/develop/scripting/jruby/NOTICE
-
-
-libraries/servlet NOTICE
-This module uses SLF4J, developed at slf4j.org under MIT License.
-See licenses/slf4j.license
-
-
-libraries/shiro-core and libraries/shiro-web NOTICE
-This module uses JODA Time, developed at http://joda-time.sourceforge.net
-under Apache License 2.0. See LICENSE file.
-
-This module uses BouncyCastle, developed at http://www.bouncycastle.org/
-under a permissive license. See licenses/bouncycastle.license
-BouncyCastle usage may have additional export restrictions in USA and
-possibly other countries.
-
-This module uses Apache Shiro, software developed at Apache Software
-Foundation (http://shiro.apache.org) under Apache License 2.0.
-See LICENSE file.
-
-
-libraries/spring NOTICE
-This module uses Spring Framework, software developed at
-http://www.springsource.org, under Apache License 2.0. See LICENSE.
-
-
-libraries/struts-* NOTICE
-This module uses Apache Struts, developed at Apache Software Foundation
-(http://struts.apache.org), under Apache License 2.0. See LICENSE.
-
-
-END OF NOTICE
\ No newline at end of file
diff --git a/libraries/alarm/build.gradle b/libraries/alarm/build.gradle
index 97b886a..72f0fb1 100644
--- a/libraries/alarm/build.gradle
+++ b/libraries/alarm/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j Alarm Library provides industrial automation style alarm point workflow semantics."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - Alarm - APi" }}
+description = "Apache Zest™ Alarm Library provides industrial automation style alarm point workflow semantics."
+
+jar { manifest { name = "Apache Zest™ Library - Alarm - APi" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
diff --git a/libraries/alarm/dev-status.xml b/libraries/alarm/dev-status.xml
index edd1bc6..f754146 100644
--- a/libraries/alarm/dev-status.xml
+++ b/libraries/alarm/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/libraries/alarm/src/docs/alarm.txt b/libraries/alarm/src/docs/alarm.txt
index 255cf07..c0c7a59 100644
--- a/libraries/alarm/src/docs/alarm.txt
+++ b/libraries/alarm/src/docs/alarm.txt
@@ -34,7 +34,7 @@
 world of today, where _Alarm Points_ allows for fine-grained notification and view into the health of one or more
 systems.
 
-In Qi4j, we are building upon this powerful abstraction, from decades of field experience.
+In Zest, we are building upon this powerful abstraction, from decades of field experience.
 
 include::../../build/docs/buildinfo/artifact.txt[]
 
@@ -78,7 +78,7 @@
 --------------
 
 == Alarm Models ==
-The Qi4j Alarm library comes with 3 _Alarm Models_ which should be sufficient for most uses. These are based on decades
+The Zest™ Alarm library comes with 3 _Alarm Models_ which should be sufficient for most uses. These are based on decades
 of experience from the industrial automation industry and user feedback.
 
 == Simple Alarm Model ==
diff --git a/libraries/alarm/src/main/java/org/qi4j/library/alarm/package.html b/libraries/alarm/src/main/java/org/qi4j/library/alarm/package.html
index d6bd0b5..dbd518b 100644
--- a/libraries/alarm/src/main/java/org/qi4j/library/alarm/package.html
+++ b/libraries/alarm/src/main/java/org/qi4j/library/alarm/package.html
@@ -23,7 +23,7 @@
 </p>
 
 <p>
-    This Alarm System, that is based on Qi4j's excellent persistence support, is an attempt at bringing a first-class
+    This Alarm System, that is based on Zest's excellent persistence support, is an attempt at bringing a first-class
     model from the industrial automation world into the enterprise of large-scale software systems, that nowadays
     are so large and un-wieldly that log files, syslog and emails can no longer cope with the burden of management
     needs.
@@ -71,8 +71,8 @@
     the behavior of the state machine in the <i>Alarm</i> itself.
 </p>
 <p>
-    The <i>Alarm Model</i> is an Qi4j <code>Service</code> and located via the normal <code>Visibility</code> rules,
-    making it possible to have a different <i>Alarm Model</i> in each Qi4j module.
+    The <i>Alarm Model</i> is an Zest™ <code>Service</code> and located via the normal <code>Visibility</code> rules,
+    making it possible to have a different <i>Alarm Model</i> in each Zest™ module.
 </p>
 
 <h2>Alarm Status</h2>
@@ -98,7 +98,7 @@
 </p>
 <h1>State Management</h1>
 <p>
-    <i>Alarm</i> instances are Qi4j Entities, so the <i>Alarm Status</i> is preserved over time in persisted storage.
+    <i>Alarm</i> instances are Zest™ Entities, so the <i>Alarm Status</i> is preserved over time in persisted storage.
     This in turn means that the <i>Alarm</i> must be accessed within a <code>UnitOfWork</code> and the Alarm is not valid
     outside the <code>UnitOfWork</code>.
     </p>
diff --git a/libraries/alarm/src/test/java/org/qi4j/library/alarm/AlarmHistoryImplTest.java b/libraries/alarm/src/test/java/org/qi4j/library/alarm/AlarmHistoryImplTest.java
index 794347d..58db8d9 100644
--- a/libraries/alarm/src/test/java/org/qi4j/library/alarm/AlarmHistoryImplTest.java
+++ b/libraries/alarm/src/test/java/org/qi4j/library/alarm/AlarmHistoryImplTest.java
@@ -254,7 +254,7 @@
         int maxsize = hist.maxSize().get();
         assertEquals( 30, maxsize );
 
-        hist.maxSize().set( 3 );    // The Qi4j version doesn't intercept the maxSize().set() method and purge the old
+        hist.maxSize().set( 3 );    // The Zest version doesn't intercept the maxSize().set() method and purge the old
         underTest.trigger( AlarmPoint.TRIGGER_ACTIVATE ); // so we do another event to purge.
         assertEquals( 3, hist.allAlarmEvents().get().size() );
 
diff --git a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/Browser.java b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/Browser.java
index 0282253..ab3d00a 100644
--- a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/Browser.java
+++ b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/Browser.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.appbrowser;
 
 import java.util.Stack;
@@ -36,7 +54,6 @@
                 }
                 try
                 {
-                    System.out.println(visited.getClass().getName());
                     formatter.enter( visited );
                 }
                 catch( JSONException e )
diff --git a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/BrowserException.java b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/BrowserException.java
index d5e8f83..e6ff93c 100644
--- a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/BrowserException.java
+++ b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/BrowserException.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.appbrowser;
 
 import org.json.JSONException;
diff --git a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/Formatter.java b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/Formatter.java
index 5c8e7cd..a7ccca3 100644
--- a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/Formatter.java
+++ b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/Formatter.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.appbrowser;
 
 import org.json.JSONException;
diff --git a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/FormatterFactory.java b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/FormatterFactory.java
index eb274d7..ca77160 100644
--- a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/FormatterFactory.java
+++ b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/FormatterFactory.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.appbrowser;
 
 public interface FormatterFactory
diff --git a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/AbstractJsonFormatter.java b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/AbstractJsonFormatter.java
index c17f330..46a419f 100644
--- a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/AbstractJsonFormatter.java
+++ b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/AbstractJsonFormatter.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.appbrowser.json;
 
 import org.json.JSONException;
diff --git a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/ApplicationModelFormatter.java b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/ApplicationModelFormatter.java
index 3ddb5c5..73e963d 100644
--- a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/ApplicationModelFormatter.java
+++ b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/ApplicationModelFormatter.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.appbrowser.json;
 
 import org.json.JSONException;
diff --git a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/ArrayFormatter.java b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/ArrayFormatter.java
index 9c02fa7..8314ea2 100644
--- a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/ArrayFormatter.java
+++ b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/ArrayFormatter.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.appbrowser.json;
 
 import org.json.JSONException;
diff --git a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/CompositeMethodModelFormatter.java b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/CompositeMethodModelFormatter.java
index f3becc4..5ca24d2 100644
--- a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/CompositeMethodModelFormatter.java
+++ b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/CompositeMethodModelFormatter.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.appbrowser.json;
 
 import org.json.JSONException;
diff --git a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/ConstructorModelFormatter.java b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/ConstructorModelFormatter.java
index c1f541d..c94749f 100644
--- a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/ConstructorModelFormatter.java
+++ b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/ConstructorModelFormatter.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.appbrowser.json;
 
 import org.json.JSONException;
diff --git a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/EntityModelFormatter.java b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/EntityModelFormatter.java
index c50f55c..5211917 100644
--- a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/EntityModelFormatter.java
+++ b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/EntityModelFormatter.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.appbrowser.json;
 
 import org.json.JSONException;
diff --git a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/InjectedFieldModelFormatter.java b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/InjectedFieldModelFormatter.java
index a6cb49f..91334f1 100644
--- a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/InjectedFieldModelFormatter.java
+++ b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/InjectedFieldModelFormatter.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.appbrowser.json;
 
 import org.json.JSONException;
diff --git a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/JsonFormatterFactory.java b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/JsonFormatterFactory.java
index 5e92594..50d24e4 100644
--- a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/JsonFormatterFactory.java
+++ b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/JsonFormatterFactory.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.appbrowser.json;
 
 import java.io.Writer;
diff --git a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/LayerModelFormatter.java b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/LayerModelFormatter.java
index 1091a37..4f9f2b7 100644
--- a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/LayerModelFormatter.java
+++ b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/LayerModelFormatter.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.appbrowser.json;
 
 import org.json.JSONException;
diff --git a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/MixinModelFormatter.java b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/MixinModelFormatter.java
index 599d557..be7b1ad 100644
--- a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/MixinModelFormatter.java
+++ b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/MixinModelFormatter.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.appbrowser.json;
 
 import org.json.JSONException;
diff --git a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/ModuleModelFormatter.java b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/ModuleModelFormatter.java
index 4f1d9d6..271fded 100644
--- a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/ModuleModelFormatter.java
+++ b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/ModuleModelFormatter.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.appbrowser.json;
 
 import org.json.JSONException;
diff --git a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/NullFormatter.java b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/NullFormatter.java
index d362f34..4eb9cea 100644
--- a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/NullFormatter.java
+++ b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/NullFormatter.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.appbrowser.json;
 
 import org.json.JSONException;
diff --git a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/ObjectModelFormatter.java b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/ObjectModelFormatter.java
index dfa8e2f..fa3b5de 100644
--- a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/ObjectModelFormatter.java
+++ b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/ObjectModelFormatter.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.appbrowser.json;
 
 import org.json.JSONException;
diff --git a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/ServiceModelFormatter.java b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/ServiceModelFormatter.java
index 27e8ecd..385cdc1 100644
--- a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/ServiceModelFormatter.java
+++ b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/ServiceModelFormatter.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.appbrowser.json;
 
 import org.json.JSONException;
diff --git a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/ValueModelFormatter.java b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/ValueModelFormatter.java
index 738636a..baacb5f 100644
--- a/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/ValueModelFormatter.java
+++ b/libraries/appbrowser/src/main/java/org/qi4j/library/appbrowser/json/ValueModelFormatter.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.appbrowser.json;
 
 import org.json.JSONException;
diff --git a/libraries/appbrowser/src/test/java/org/qi4j/library/appbrowser/AppBrowserTest.java b/libraries/appbrowser/src/test/java/org/qi4j/library/appbrowser/AppBrowserTest.java
index 00ed41e..2079456 100644
--- a/libraries/appbrowser/src/test/java/org/qi4j/library/appbrowser/AppBrowserTest.java
+++ b/libraries/appbrowser/src/test/java/org/qi4j/library/appbrowser/AppBrowserTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.appbrowser;
 
 import java.io.StringWriter;
@@ -41,7 +59,6 @@
         FormatterFactory jsonFactory = new JsonFormatterFactory( output );
         Browser browser = new Browser( applicationModel, jsonFactory );
         browser.toJson();
-        System.out.println( output.toString() );
     }
 
     @Mixins( Person.Mixin.class )
diff --git a/libraries/circuitbreaker/build.gradle b/libraries/circuitbreaker/build.gradle
index 8070a77..d91bfa8 100644
--- a/libraries/circuitbreaker/build.gradle
+++ b/libraries/circuitbreaker/build.gradle
@@ -1,10 +1,30 @@
-description = "Qi4j Circuit Breaker Library provides a framework for connecting external resources, so that they can be disabled during re-play of events."
+/*
+ * 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.
+ */
 
-jar { manifest {name = "Qi4j Library - Circuit Breaker"}}
+description = "Apache Zest™ Circuit Breaker Library provides a framework for connecting external resources, so that they can be disabled during re-play of events."
+
+jar { manifest {name = "Apache Zest™ Library - Circuit Breaker"}}
 
 dependencies {
     compile project( ':org.qi4j.core:org.qi4j.core.api' )
     compile project( ':org.qi4j.libraries:org.qi4j.library.jmx' )
+    compile libraries.slf4j_api
 
     testCompile project( ':org.qi4j.core:org.qi4j.core.testsupport' )
     testCompile libraries.awaitility
diff --git a/libraries/circuitbreaker/dev-status.xml b/libraries/circuitbreaker/dev-status.xml
index 606b048..7cd8719 100644
--- a/libraries/circuitbreaker/dev-status.xml
+++ b/libraries/circuitbreaker/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/libraries/circuitbreaker/src/docs/circuitbreaker.txt b/libraries/circuitbreaker/src/docs/circuitbreaker.txt
index 057a7a3..6706bd5 100644
--- a/libraries/circuitbreaker/src/docs/circuitbreaker.txt
+++ b/libraries/circuitbreaker/src/docs/circuitbreaker.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[library-circuitbreaker,Circuit Breaker Library]]
 = Circuit Breaker =
 
@@ -8,7 +27,7 @@
 
 The Circuit Breaker library provides a way to guard your application
 against faulty external systems (e.g. mail servers  being down, web
-services being down). It is used by many Qi4j Extensions and Libraries.
+services being down). It is used by many Zest™ Extensions and Libraries.
 
 There's a couple of differences between this implementation and others
 seen on the net, but we've also heavily borrowed from others. The
@@ -35,7 +54,7 @@
 breakers.
 
 Fourth, if an external system is unavailable due to a circuitbreaker
-tripping it should be possible to expose this to other Qi4j services.
+tripping it should be possible to expose this to other Zest™ services.
 There is a standard implementation of the Availability interface that
 delegates to a circuit breaker and the Enabled configuration flag, which
 is what we'd suspect will be used in most cases where external systems
@@ -45,7 +64,7 @@
 
 == Direct usage ==
 
-The CircuitBreaker can be used directly, even without using anything else from the Qi4j SDK.
+The CircuitBreaker can be used directly, even without using anything else from the Zest™ SDK.
 
 Here is a code snippet that demonstrate how to create a CircuitBreaker and how it behave:
 
diff --git a/libraries/circuitbreaker/src/main/java/org/qi4j/library/circuitbreaker/jmx/package.html b/libraries/circuitbreaker/src/main/java/org/qi4j/library/circuitbreaker/jmx/package.html
index c6bd136..b3ca3a9 100644
--- a/libraries/circuitbreaker/src/main/java/org/qi4j/library/circuitbreaker/jmx/package.html
+++ b/libraries/circuitbreaker/src/main/java/org/qi4j/library/circuitbreaker/jmx/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Circuit Breaker JMX Support.</h2>
diff --git a/libraries/circuitbreaker/src/main/java/org/qi4j/library/circuitbreaker/package.html b/libraries/circuitbreaker/src/main/java/org/qi4j/library/circuitbreaker/package.html
index 0018940..df4170c 100644
--- a/libraries/circuitbreaker/src/main/java/org/qi4j/library/circuitbreaker/package.html
+++ b/libraries/circuitbreaker/src/main/java/org/qi4j/library/circuitbreaker/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Circuit Breaker Library.</h2>
diff --git a/libraries/circuitbreaker/src/main/java/org/qi4j/library/circuitbreaker/service/package.html b/libraries/circuitbreaker/src/main/java/org/qi4j/library/circuitbreaker/service/package.html
index 450d42f..ce4dd71 100644
--- a/libraries/circuitbreaker/src/main/java/org/qi4j/library/circuitbreaker/service/package.html
+++ b/libraries/circuitbreaker/src/main/java/org/qi4j/library/circuitbreaker/service/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Circuit Breaker Service.</h2>
diff --git a/libraries/circuitbreaker/src/test/java/org/qi4j/library/circuitbreaker/CircuitBreakerTest.java b/libraries/circuitbreaker/src/test/java/org/qi4j/library/circuitbreaker/CircuitBreakerTest.java
index 783237f..b1c2ead 100644
--- a/libraries/circuitbreaker/src/test/java/org/qi4j/library/circuitbreaker/CircuitBreakerTest.java
+++ b/libraries/circuitbreaker/src/test/java/org/qi4j/library/circuitbreaker/CircuitBreakerTest.java
@@ -26,7 +26,7 @@
 import org.junit.Test;
 
 import static com.jayway.awaitility.Awaitility.await;
-import static com.jayway.awaitility.Duration.FIVE_HUNDRED_MILLISECONDS;
+import static com.jayway.awaitility.Duration.ONE_SECOND;
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertThat;
 
@@ -131,7 +131,7 @@
         // END SNIPPET: direct
         assertThat( cb.status(), CoreMatchers.equalTo( CircuitBreaker.Status.off ) );
         System.out.println( "Wait..." );
-        await().atMost( FIVE_HUNDRED_MILLISECONDS ).until( circuitBreakerStatus(), is( CircuitBreaker.Status.on ) );
+        await().atMost( ONE_SECOND ).until( circuitBreakerStatus(), is( CircuitBreaker.Status.on ) );
 
         // START SNIPPET: direct
         // CircuitBreaker is back on
diff --git a/libraries/constraints/build.gradle b/libraries/constraints/build.gradle
index 498c593..826b73d 100644
--- a/libraries/constraints/build.gradle
+++ b/libraries/constraints/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j Constraint Library provides common set of constraints."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - Constraints"}}
+description = "Apache Zest™ Constraint Library provides common set of constraints."
+
+jar { manifest { name = "Apache Zest™ Library - Constraints"}}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
diff --git a/libraries/constraints/dev-status.xml b/libraries/constraints/dev-status.xml
index a0c9fbb..bdf00e7 100644
--- a/libraries/constraints/dev-status.xml
+++ b/libraries/constraints/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/libraries/constraints/src/docs/constraints.txt b/libraries/constraints/src/docs/constraints.txt
index 0cbe051..c358f75 100644
--- a/libraries/constraints/src/docs/constraints.txt
+++ b/libraries/constraints/src/docs/constraints.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[library-constraints,Constraints Library]]
 = Constraints =
 
@@ -7,7 +26,7 @@
 --------------
 
 The Constraints library provide a bunch of often used Constraints based on the
-Qi4j Constraints api described in <<def-constraint>>.
+Zest™ Constraints api described in <<def-constraint>>.
 
 Remember that you are not limited to constraints presents in this library, you
 are encouraged to write your own constraints. See <<howto-create-constraint>>
diff --git a/libraries/constraints/src/main/java/org/qi4j/library/constraints/ContainsConstraint.java b/libraries/constraints/src/main/java/org/qi4j/library/constraints/ContainsConstraint.java
index e46534d..248e040 100644
--- a/libraries/constraints/src/main/java/org/qi4j/library/constraints/ContainsConstraint.java
+++ b/libraries/constraints/src/main/java/org/qi4j/library/constraints/ContainsConstraint.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.constraints;
 
 import org.qi4j.api.constraint.Constraint;
diff --git a/libraries/constraints/src/main/java/org/qi4j/library/constraints/GreaterThanConstraint.java b/libraries/constraints/src/main/java/org/qi4j/library/constraints/GreaterThanConstraint.java
index 433294b..c28c110 100644
--- a/libraries/constraints/src/main/java/org/qi4j/library/constraints/GreaterThanConstraint.java
+++ b/libraries/constraints/src/main/java/org/qi4j/library/constraints/GreaterThanConstraint.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.constraints;
 
 import org.qi4j.api.constraint.Constraint;
diff --git a/libraries/constraints/src/main/java/org/qi4j/library/constraints/LessThanConstraint.java b/libraries/constraints/src/main/java/org/qi4j/library/constraints/LessThanConstraint.java
index 5e88f54..d6880e3 100644
--- a/libraries/constraints/src/main/java/org/qi4j/library/constraints/LessThanConstraint.java
+++ b/libraries/constraints/src/main/java/org/qi4j/library/constraints/LessThanConstraint.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.constraints;
 
 import org.qi4j.api.constraint.Constraint;
diff --git a/libraries/constraints/src/main/java/org/qi4j/library/constraints/MatchesConstraint.java b/libraries/constraints/src/main/java/org/qi4j/library/constraints/MatchesConstraint.java
index 67fc575..c0048a4 100644
--- a/libraries/constraints/src/main/java/org/qi4j/library/constraints/MatchesConstraint.java
+++ b/libraries/constraints/src/main/java/org/qi4j/library/constraints/MatchesConstraint.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.constraints;
 
 import java.util.regex.Pattern;
diff --git a/libraries/constraints/src/main/java/org/qi4j/library/constraints/MaxLengthConstraint.java b/libraries/constraints/src/main/java/org/qi4j/library/constraints/MaxLengthConstraint.java
index 57bd6b3..b837593 100644
--- a/libraries/constraints/src/main/java/org/qi4j/library/constraints/MaxLengthConstraint.java
+++ b/libraries/constraints/src/main/java/org/qi4j/library/constraints/MaxLengthConstraint.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.constraints;
 
 import org.qi4j.api.constraint.Constraint;
diff --git a/libraries/constraints/src/main/java/org/qi4j/library/constraints/MinLengthConstraint.java b/libraries/constraints/src/main/java/org/qi4j/library/constraints/MinLengthConstraint.java
index 2f4c0f1..1efd39e 100644
--- a/libraries/constraints/src/main/java/org/qi4j/library/constraints/MinLengthConstraint.java
+++ b/libraries/constraints/src/main/java/org/qi4j/library/constraints/MinLengthConstraint.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.constraints;
 
 import org.qi4j.api.constraint.Constraint;
diff --git a/libraries/constraints/src/main/java/org/qi4j/library/constraints/OneOfConstraint.java b/libraries/constraints/src/main/java/org/qi4j/library/constraints/OneOfConstraint.java
index f5f172b..a9c6d2b 100644
--- a/libraries/constraints/src/main/java/org/qi4j/library/constraints/OneOfConstraint.java
+++ b/libraries/constraints/src/main/java/org/qi4j/library/constraints/OneOfConstraint.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.constraints;
 
 import org.qi4j.api.constraint.Constraint;
diff --git a/libraries/constraints/src/main/java/org/qi4j/library/constraints/RangeConstraint.java b/libraries/constraints/src/main/java/org/qi4j/library/constraints/RangeConstraint.java
index d3c255d..e671ff0 100644
--- a/libraries/constraints/src/main/java/org/qi4j/library/constraints/RangeConstraint.java
+++ b/libraries/constraints/src/main/java/org/qi4j/library/constraints/RangeConstraint.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.constraints;
 
 import org.qi4j.api.constraint.Constraint;
diff --git a/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/Contains.java b/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/Contains.java
index 954f596..8dd11be 100644
--- a/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/Contains.java
+++ b/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/Contains.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.constraints.annotation;
 
 import java.lang.annotation.Retention;
diff --git a/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/Email.java b/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/Email.java
index 6a67547..ddff359 100644
--- a/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/Email.java
+++ b/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/Email.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.constraints.annotation;
 
 import java.lang.annotation.Retention;
diff --git a/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/GreaterThan.java b/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/GreaterThan.java
index 170e555..3be628e 100644
--- a/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/GreaterThan.java
+++ b/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/GreaterThan.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.constraints.annotation;
 
 import java.lang.annotation.Retention;
diff --git a/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/LessThan.java b/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/LessThan.java
index d80bcf8..339cf9b 100644
--- a/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/LessThan.java
+++ b/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/LessThan.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.constraints.annotation;
 
 import java.lang.annotation.Retention;
diff --git a/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/Matches.java b/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/Matches.java
index 43b586a..aca9ca3 100644
--- a/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/Matches.java
+++ b/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/Matches.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.constraints.annotation;
 
 import java.lang.annotation.Retention;
diff --git a/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/MaxLength.java b/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/MaxLength.java
index 40ba206..c56e340 100644
--- a/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/MaxLength.java
+++ b/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/MaxLength.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.constraints.annotation;
 
 import java.lang.annotation.Retention;
diff --git a/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/MinLength.java b/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/MinLength.java
index 0686a01..a7bd859 100644
--- a/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/MinLength.java
+++ b/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/MinLength.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.constraints.annotation;
 
 import java.lang.annotation.Retention;
diff --git a/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/OneOf.java b/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/OneOf.java
index 0e23b01..6ab7bea 100644
--- a/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/OneOf.java
+++ b/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/OneOf.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.constraints.annotation;
 
 import java.lang.annotation.Retention;
diff --git a/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/Range.java b/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/Range.java
index 50ba128..82403d7 100644
--- a/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/Range.java
+++ b/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/Range.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.constraints.annotation;
 
 import java.lang.annotation.Retention;
diff --git a/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/package.html b/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/package.html
index 1b13db7..17b22c5 100644
--- a/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/package.html
+++ b/libraries/constraints/src/main/java/org/qi4j/library/constraints/annotation/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Constraints Annotations.</h2>
diff --git a/libraries/constraints/src/main/java/org/qi4j/library/constraints/package.html b/libraries/constraints/src/main/java/org/qi4j/library/constraints/package.html
index 9c439ab..d4c9bd0 100644
--- a/libraries/constraints/src/main/java/org/qi4j/library/constraints/package.html
+++ b/libraries/constraints/src/main/java/org/qi4j/library/constraints/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Constraints Library.</h2>
diff --git a/libraries/constraints/src/test/java/org/qi4j/library/constraints/TestCaseComposite.java b/libraries/constraints/src/test/java/org/qi4j/library/constraints/TestCaseComposite.java
index 69343e6..68777f3 100644
--- a/libraries/constraints/src/test/java/org/qi4j/library/constraints/TestCaseComposite.java
+++ b/libraries/constraints/src/test/java/org/qi4j/library/constraints/TestCaseComposite.java
@@ -17,7 +17,9 @@
 import org.qi4j.api.composite.TransientComposite;
 import org.qi4j.api.mixin.Mixins;
 import org.qi4j.api.property.Property;
-import org.qi4j.library.constraints.annotation.*;
+    // START SNIPPET: constraints
+    import org.qi4j.library.constraints.annotation.*;
+    // END SNIPPET: constraints
 
 /**
  * Test composite with all the constraints
@@ -56,7 +58,7 @@
 
     @OneOf( { "Bar", "Xyzzy" } ) Property<String> oneOf();
 
-    void testParameters(@GreaterThan(10) Integer greaterThan);
+    void testParameters( @GreaterThan( 10 ) Integer greaterThan );
     // END SNIPPET: constraints
 
     abstract class TestCaseMixin
diff --git a/libraries/constraints/src/test/java/org/qi4j/library/constraints/qi70/IssueTest.java b/libraries/constraints/src/test/java/org/qi4j/library/constraints/qi70/IssueTest.java
index 6fa11f9..9178aee 100644
--- a/libraries/constraints/src/test/java/org/qi4j/library/constraints/qi70/IssueTest.java
+++ b/libraries/constraints/src/test/java/org/qi4j/library/constraints/qi70/IssueTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.constraints.qi70;
 
 import org.junit.Test;
diff --git a/libraries/constraints/src/test/java/org/qi4j/library/constraints/qi70/Sample.java b/libraries/constraints/src/test/java/org/qi4j/library/constraints/qi70/Sample.java
index c51ed26..ad92621 100644
--- a/libraries/constraints/src/test/java/org/qi4j/library/constraints/qi70/Sample.java
+++ b/libraries/constraints/src/test/java/org/qi4j/library/constraints/qi70/Sample.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.constraints.qi70;
 
 import org.qi4j.api.property.Property;
diff --git a/libraries/constraints/src/test/java/org/qi4j/library/constraints/qi70/SampleComposite.java b/libraries/constraints/src/test/java/org/qi4j/library/constraints/qi70/SampleComposite.java
index 491f69e..924e2ff 100644
--- a/libraries/constraints/src/test/java/org/qi4j/library/constraints/qi70/SampleComposite.java
+++ b/libraries/constraints/src/test/java/org/qi4j/library/constraints/qi70/SampleComposite.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.constraints.qi70;
 
 import org.qi4j.api.composite.TransientComposite;
diff --git a/libraries/constraints/src/test/java/org/qi4j/library/constraints/qi70/SampleMixin.java b/libraries/constraints/src/test/java/org/qi4j/library/constraints/qi70/SampleMixin.java
index c0881dc..89202a2 100644
--- a/libraries/constraints/src/test/java/org/qi4j/library/constraints/qi70/SampleMixin.java
+++ b/libraries/constraints/src/test/java/org/qi4j/library/constraints/qi70/SampleMixin.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.constraints.qi70;
 
 public class SampleMixin
diff --git a/libraries/conversion/build.gradle b/libraries/conversion/build.gradle
index c7bb2d2..83a7ad7 100644
--- a/libraries/conversion/build.gradle
+++ b/libraries/conversion/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j Values Library has various generic services to manipulate Qi4j ValueComposites, such as converting an Entity to a Value."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - Values" }}
+description = "Apache Zest™ Conversion Library has various generic services to manipulate Apache Zest™ ValueComposites, such as converting an Entity to a Value."
+
+jar { manifest { name = "Apache Zest™ Library - Conversion" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
diff --git a/libraries/conversion/dev-status.xml b/libraries/conversion/dev-status.xml
index 89e7fa1..515291a 100644
--- a/libraries/conversion/dev-status.xml
+++ b/libraries/conversion/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/libraries/conversion/src/docs/conversion.txt b/libraries/conversion/src/docs/conversion.txt
index 7d7da92..015f3e6 100644
--- a/libraries/conversion/src/docs/conversion.txt
+++ b/libraries/conversion/src/docs/conversion.txt
@@ -1,5 +1,24 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[library-conversion, Conversion Library]]
-= Conversion =
+= Conversion - DEPRECATED =
 
 [devstatus]
 --------------
@@ -10,6 +29,16 @@
 
 include::../../build/docs/buildinfo/artifact.txt[]
 
+
+[WARNING]
+.DEPRECATED
+====
+This functionality is now present in <<def-unitofwork>> as
+the two methods toEntity() and toValue(). Since this library was written
+assocations of all kinds are now fully supported in Values.
+====
+
+
 == Entities to Values ==
 
 To convert Entities to Values, use the EntityToValueService. It is easily assembled:
diff --git a/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/EntityToValue.java b/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/EntityToValue.java
index 5d0fe0a..d09eb3e 100644
--- a/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/EntityToValue.java
+++ b/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/EntityToValue.java
@@ -50,6 +50,9 @@
 import static org.qi4j.library.conversion.values.Shared.STRING_MAP_TYPE_SPEC;
 import static org.qi4j.library.conversion.values.Shared.STRING_TYPE_SPEC;
 
+/**
+ * @deprecated Please use {@link org.qi4j.api.unitofwork.UnitOfWork#toValue(Class, Identity)} instead.
+ */
 @Mixins( EntityToValue.EntityToValueMixin.class )
 public interface EntityToValue
 {
diff --git a/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/EntityToValueAssembler.java b/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/EntityToValueAssembler.java
index f3eee29..686204f 100644
--- a/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/EntityToValueAssembler.java
+++ b/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/EntityToValueAssembler.java
@@ -17,6 +17,7 @@
  */
 package org.qi4j.library.conversion.values;
 
+import org.qi4j.api.entity.Identity;
 import org.qi4j.bootstrap.Assemblers;
 import org.qi4j.bootstrap.AssemblyException;
 import org.qi4j.bootstrap.ModuleAssembly;
@@ -24,6 +25,7 @@
 
 /**
  * EntityToValue Service Assembler.
+ * @deprecated Please use {@link org.qi4j.api.unitofwork.UnitOfWork#toValue(Class, Identity)} instead.
  */
 public class EntityToValueAssembler
     extends Assemblers.VisibilityIdentity<EntityToValueAssembler>
diff --git a/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/EntityToValueService.java b/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/EntityToValueService.java
index 67ae231..19b4534 100644
--- a/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/EntityToValueService.java
+++ b/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/EntityToValueService.java
@@ -17,6 +17,7 @@
  */
 package org.qi4j.library.conversion.values;
 
+import org.qi4j.api.entity.Identity;
 import org.qi4j.api.service.ServiceComposite;
 
 /** The EntityToValueService converts Entities to matching Values.
@@ -45,6 +46,7 @@
  * <p>
  * If a Property from the Entity is not found in the Value, then it is ignored.
  * </p>
+ * @deprecated Please use {@link org.qi4j.api.unitofwork.UnitOfWork#toValue(Class, Identity)} instead.
  */
 public interface EntityToValueService extends EntityToValue, ServiceComposite
 {
diff --git a/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/ValueToEntity.java b/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/ValueToEntity.java
index 559fb37..f42fb28 100644
--- a/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/ValueToEntity.java
+++ b/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/ValueToEntity.java
@@ -23,6 +23,7 @@
 
 /**
  * Create or update Entities from matching Values.
+ * @deprecated Please use {@link org.qi4j.api.unitofwork.UnitOfWork#toEntity(Class, Identity)} instead.
  */
 public interface ValueToEntity
 {
diff --git a/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/ValueToEntityAssembler.java b/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/ValueToEntityAssembler.java
index e560b2c..be861ee 100644
--- a/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/ValueToEntityAssembler.java
+++ b/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/ValueToEntityAssembler.java
@@ -15,6 +15,7 @@
  */
 package org.qi4j.library.conversion.values;
 
+import org.qi4j.api.entity.Identity;
 import org.qi4j.bootstrap.Assemblers;
 import org.qi4j.bootstrap.AssemblyException;
 import org.qi4j.bootstrap.ModuleAssembly;
@@ -22,6 +23,7 @@
 
 /**
  * ValueToEntity Service Assembler.
+ * @deprecated Please use {@link org.qi4j.api.unitofwork.UnitOfWork#toEntity(Class, Identity)} instead.
  */
 public class ValueToEntityAssembler
     extends Assemblers.VisibilityIdentity<ValueToEntityAssembler>
diff --git a/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/ValueToEntityMixin.java b/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/ValueToEntityMixin.java
index b5d91bb..73bae55 100644
--- a/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/ValueToEntityMixin.java
+++ b/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/ValueToEntityMixin.java
@@ -35,7 +35,6 @@
 import org.qi4j.api.entity.Identity;
 import org.qi4j.api.injection.scope.Structure;
 import org.qi4j.api.property.PropertyDescriptor;
-import org.qi4j.api.structure.Module;
 import org.qi4j.api.unitofwork.EntityTypeNotFoundException;
 import org.qi4j.api.unitofwork.NoSuchEntityException;
 import org.qi4j.api.value.ValueComposite;
@@ -43,13 +42,18 @@
 import org.qi4j.functional.Function;
 import org.qi4j.functional.Iterables;
 import org.qi4j.spi.Qi4jSPI;
+import org.qi4j.spi.module.ModelModule;
+import org.qi4j.spi.module.ModuleSpi;
 
+import static org.qi4j.functional.Iterables.map;
 import static org.qi4j.library.conversion.values.Shared.STRING_COLLECTION_TYPE_SPEC;
 import static org.qi4j.library.conversion.values.Shared.STRING_MAP_TYPE_SPEC;
 import static org.qi4j.library.conversion.values.Shared.STRING_TYPE_SPEC;
 
 /**
  * ValueToEntity Mixin.
+ *
+ * @deprecated Please use {@link org.qi4j.api.unitofwork.UnitOfWork#toEntity(Class, Identity)} instead.
  */
 public class ValueToEntityMixin
     implements ValueToEntity
@@ -68,7 +72,7 @@
         }
         catch( NoSuchMethodException e )
         {
-            throw new InternalError( "Qi4j Core Runtime codebase is corrupted. Contact Qi4j team: ValueToEntityMixin" );
+            throw new InternalError( "Zest Core Runtime codebase is corrupted. Contact Zest team: ValueToEntityMixin" );
         }
         MANY_ASSOC_TO_ENTITY_REF_ITERABLE = new Function<ManyAssociation<?>, Iterable<EntityReference>>()
         {
@@ -144,7 +148,7 @@
     private Qi4jSPI spi;
 
     @Structure
-    private Module module;
+    private ModuleSpi module;
 
     @Override
     public <T> T create( Class<T> entityType, Object value )
@@ -193,7 +197,8 @@
     @Override
     public <T> Iterable<T> create( final Class<T> entityType,
                                    final Iterable<Object> values,
-                                   final Function<T, T> prototypeOpportunity )
+                                   final Function<T, T> prototypeOpportunity
+    )
     {
         return Iterables.map(
             new Function<Object, T>()
@@ -213,7 +218,11 @@
         EntityDescriptor eDesc = module.entityDescriptor( entityType.getName() );
         if( eDesc == null )
         {
-            throw new EntityTypeNotFoundException( entityType.getName() );
+            throw new EntityTypeNotFoundException( entityType.getName(),
+                                                   module.name(),
+                                                   map( ModelModule.toStringFunction,
+                                                        module.findVisibleEntityTypes()
+                                                   ) );
         }
 
         ValueComposite vComposite = (ValueComposite) value;
@@ -237,118 +246,118 @@
     {
         Function<PropertyDescriptor, Object> props
             = new Function<PropertyDescriptor, Object>()
+        {
+            @Override
+            public Object map( PropertyDescriptor ePropDesc )
             {
-                @Override
-                public Object map( PropertyDescriptor ePropDesc )
+                try
                 {
+                    return vState.propertyFor( ePropDesc.accessor() ).get();
+                }
+                catch( IllegalArgumentException propNotFoundOnValue )
+                {
+                    // Property not found
+                    return null;
+                }
+            }
+        };
+        Function<AssociationDescriptor, EntityReference> assocs
+            = new Function<AssociationDescriptor, EntityReference>()
+        {
+            @Override
+            public EntityReference map( AssociationDescriptor eAssocDesc )
+            {
+                try
+                {
+                    return EntityReference.entityReferenceFor( vState.associationFor( eAssocDesc.accessor() ) );
+                }
+                catch( IllegalArgumentException assocNotFoundOnValue )
+                {
+                    // Find String Property and convert to Association
+                    String propName = eAssocDesc.qualifiedName().name();
                     try
                     {
-                        return vState.propertyFor( ePropDesc.accessor() ).get();
+                        PropertyDescriptor vPropDesc = vStateDesc.findPropertyModelByName( propName );
+                        if( STRING_TYPE_SPEC.satisfiedBy( vPropDesc.valueType() ) )
+                        {
+                            String assocState = (String) vState.propertyFor( vPropDesc.accessor() ).get();
+                            return EntityReference.parseEntityReference( assocState );
+                        }
+                        return null;
                     }
                     catch( IllegalArgumentException propNotFoundOnValue )
                     {
-                        // Property not found
                         return null;
                     }
                 }
-            };
-        Function<AssociationDescriptor, EntityReference> assocs
-            = new Function<AssociationDescriptor, EntityReference>()
-            {
-                @Override
-                public EntityReference map( AssociationDescriptor eAssocDesc )
-                {
-                    try
-                    {
-                        return EntityReference.entityReferenceFor( vState.associationFor( eAssocDesc.accessor() ) );
-                    }
-                    catch( IllegalArgumentException assocNotFoundOnValue )
-                    {
-                        // Find String Property and convert to Association
-                        String propName = eAssocDesc.qualifiedName().name();
-                        try
-                        {
-                            PropertyDescriptor vPropDesc = vStateDesc.findPropertyModelByName( propName );
-                            if( STRING_TYPE_SPEC.satisfiedBy( vPropDesc.valueType() ) )
-                            {
-                                String assocState = (String) vState.propertyFor( vPropDesc.accessor() ).get();
-                                return EntityReference.parseEntityReference( assocState );
-                            }
-                            return null;
-                        }
-                        catch( IllegalArgumentException propNotFoundOnValue )
-                        {
-                            return null;
-                        }
-                    }
-                }
-            };
+            }
+        };
         Function<AssociationDescriptor, Iterable<EntityReference>> manyAssocs
             = new Function<AssociationDescriptor, Iterable<EntityReference>>()
+        {
+            @Override
+            public Iterable<EntityReference> map( AssociationDescriptor eAssocDesc )
             {
-                @Override
-                public Iterable<EntityReference> map( AssociationDescriptor eAssocDesc )
+                try
                 {
+                    ManyAssociation<Object> vAssocState = vState.manyAssociationFor( eAssocDesc.accessor() );
+                    return MANY_ASSOC_TO_ENTITY_REF_ITERABLE.map( vAssocState );
+                }
+                catch( IllegalArgumentException assocNotFoundOnValue )
+                {
+                    // Find Collection<String> Property and convert to ManyAssociation
+                    String propName = eAssocDesc.qualifiedName().name();
                     try
                     {
-                        ManyAssociation<Object> vAssocState = vState.manyAssociationFor( eAssocDesc.accessor() );
-                        return MANY_ASSOC_TO_ENTITY_REF_ITERABLE.map( vAssocState );
-                    }
-                    catch( IllegalArgumentException assocNotFoundOnValue )
-                    {
-                        // Find Collection<String> Property and convert to ManyAssociation
-                        String propName = eAssocDesc.qualifiedName().name();
-                        try
+                        PropertyDescriptor vPropDesc = vStateDesc.findPropertyModelByName( propName );
+                        if( STRING_COLLECTION_TYPE_SPEC.satisfiedBy( vPropDesc.valueType() ) )
                         {
-                            PropertyDescriptor vPropDesc = vStateDesc.findPropertyModelByName( propName );
-                            if( STRING_COLLECTION_TYPE_SPEC.satisfiedBy( vPropDesc.valueType() ) )
-                            {
-                                Collection<String> vAssocState = (Collection) vState
+                            Collection<String> vAssocState = (Collection) vState
                                 .propertyFor( vPropDesc.accessor() ).get();
-                                return STRING_COLLEC_TO_ENTITY_REF_ITERABLE.map( vAssocState );
-                            }
-                            return Iterables.empty();
+                            return STRING_COLLEC_TO_ENTITY_REF_ITERABLE.map( vAssocState );
                         }
-                        catch( IllegalArgumentException propNotFoundOnValue )
-                        {
-                            return Iterables.empty();
-                        }
+                        return Iterables.empty();
+                    }
+                    catch( IllegalArgumentException propNotFoundOnValue )
+                    {
+                        return Iterables.empty();
                     }
                 }
-            };
+            }
+        };
         Function<AssociationDescriptor, Map<String, EntityReference>> namedAssocs
             = new Function<AssociationDescriptor, Map<String, EntityReference>>()
+        {
+            @Override
+            public Map<String, EntityReference> map( AssociationDescriptor eAssocDesc )
             {
-                @Override
-                public Map<String, EntityReference> map( AssociationDescriptor eAssocDesc )
+                try
                 {
+                    NamedAssociation<?> vAssocState = vState.namedAssociationFor( eAssocDesc.accessor() );
+                    return NAMED_ASSOC_TO_ENTITY_REF_MAP.map( vAssocState );
+                }
+                catch( IllegalArgumentException assocNotFoundOnValue )
+                {
+                    // Find Map<String,String> Property and convert to NamedAssociation
+                    String propName = eAssocDesc.qualifiedName().name();
                     try
                     {
-                        NamedAssociation<?> vAssocState = vState.namedAssociationFor( eAssocDesc.accessor() );
-                        return NAMED_ASSOC_TO_ENTITY_REF_MAP.map( vAssocState );
-                    }
-                    catch( IllegalArgumentException assocNotFoundOnValue )
-                    {
-                        // Find Map<String,String> Property and convert to NamedAssociation
-                        String propName = eAssocDesc.qualifiedName().name();
-                        try
+                        PropertyDescriptor vPropDesc = vStateDesc.findPropertyModelByName( propName );
+                        if( STRING_MAP_TYPE_SPEC.satisfiedBy( vPropDesc.valueType() ) )
                         {
-                            PropertyDescriptor vPropDesc = vStateDesc.findPropertyModelByName( propName );
-                            if( STRING_MAP_TYPE_SPEC.satisfiedBy( vPropDesc.valueType() ) )
-                            {
-                                Map<String, String> vAssocState = (Map) vState
+                            Map<String, String> vAssocState = (Map) vState
                                 .propertyFor( vPropDesc.accessor() ).get();
-                                return STRING_MAP_TO_ENTITY_REF_MAP.map( vAssocState );
-                            }
-                            return Collections.EMPTY_MAP;
+                            return STRING_MAP_TO_ENTITY_REF_MAP.map( vAssocState );
                         }
-                        catch( IllegalArgumentException propNotFoundOnValue )
-                        {
-                            return Collections.EMPTY_MAP;
-                        }
+                        return Collections.EMPTY_MAP;
+                    }
+                    catch( IllegalArgumentException propNotFoundOnValue )
+                    {
+                        return Collections.EMPTY_MAP;
                     }
                 }
-            };
+            }
+        };
         return module.currentUnitOfWork().newEntityBuilderWithState(
             entityType, identity, props, assocs, manyAssocs, namedAssocs
         );
@@ -361,124 +370,124 @@
     {
         Function<PropertyDescriptor, Object> props
             = new Function<PropertyDescriptor, Object>()
+        {
+            @Override
+            public Object map( PropertyDescriptor ePropDesc )
             {
-                @Override
-                public Object map( PropertyDescriptor ePropDesc )
+                String propName = ePropDesc.qualifiedName().name();
+                try
                 {
-                    String propName = ePropDesc.qualifiedName().name();
+                    PropertyDescriptor vPropDesc = vStateDesc.findPropertyModelByName( propName );
+                    return vState.propertyFor( vPropDesc.accessor() ).get();
+                }
+                catch( IllegalArgumentException propNotFoundOnValue )
+                {
+                    // Property not found on Value
+                    return null;
+                }
+            }
+        };
+        Function<AssociationDescriptor, EntityReference> assocs
+            = new Function<AssociationDescriptor, EntityReference>()
+        {
+            @Override
+            public EntityReference map( AssociationDescriptor eAssocDesc )
+            {
+                String assocName = eAssocDesc.qualifiedName().name();
+                try
+                {
+                    AssociationDescriptor vAssocDesc = vStateDesc.getAssociationByName( assocName );
+                    Object assocEntity = vState.associationFor( vAssocDesc.accessor() ).get();
+                    return assocEntity == null ? null : EntityReference.entityReferenceFor( assocEntity );
+                }
+                catch( IllegalArgumentException assocNotFoundOnValue )
+                {
+                    // Association not found on Value, find Property<String> and convert to Association
                     try
                     {
-                        PropertyDescriptor vPropDesc = vStateDesc.findPropertyModelByName( propName );
-                        return vState.propertyFor( vPropDesc.accessor() ).get();
+                        PropertyDescriptor vPropDesc = vStateDesc.findPropertyModelByName( assocName );
+                        if( STRING_TYPE_SPEC.satisfiedBy( vPropDesc.valueType() ) )
+                        {
+                            String assocId = (String) vState.propertyFor( vPropDesc.accessor() ).get();
+                            return assocId == null ? null : EntityReference.parseEntityReference( assocId );
+                        }
+                        return null;
                     }
                     catch( IllegalArgumentException propNotFoundOnValue )
                     {
-                        // Property not found on Value
                         return null;
                     }
                 }
-            };
-        Function<AssociationDescriptor, EntityReference> assocs
-            = new Function<AssociationDescriptor, EntityReference>()
-            {
-                @Override
-                public EntityReference map( AssociationDescriptor eAssocDesc )
-                {
-                    String assocName = eAssocDesc.qualifiedName().name();
-                    try
-                    {
-                        AssociationDescriptor vAssocDesc = vStateDesc.getAssociationByName( assocName );
-                        Object assocEntity = vState.associationFor( vAssocDesc.accessor() ).get();
-                        return assocEntity == null ? null : EntityReference.entityReferenceFor( assocEntity );
-                    }
-                    catch( IllegalArgumentException assocNotFoundOnValue )
-                    {
-                        // Association not found on Value, find Property<String> and convert to Association
-                        try
-                        {
-                            PropertyDescriptor vPropDesc = vStateDesc.findPropertyModelByName( assocName );
-                            if( STRING_TYPE_SPEC.satisfiedBy( vPropDesc.valueType() ) )
-                            {
-                                String assocId = (String) vState.propertyFor( vPropDesc.accessor() ).get();
-                                return assocId == null ? null : EntityReference.parseEntityReference( assocId );
-                            }
-                            return null;
-                        }
-                        catch( IllegalArgumentException propNotFoundOnValue )
-                        {
-                            return null;
-                        }
-                    }
-                }
-            };
+            }
+        };
         Function<AssociationDescriptor, Iterable<EntityReference>> manyAssocs
             = new Function<AssociationDescriptor, Iterable<EntityReference>>()
+        {
+            @Override
+            public Iterable<EntityReference> map( AssociationDescriptor eAssocDesc )
             {
-                @Override
-                public Iterable<EntityReference> map( AssociationDescriptor eAssocDesc )
+                String assocName = eAssocDesc.qualifiedName().name();
+                try
                 {
-                    String assocName = eAssocDesc.qualifiedName().name();
+                    AssociationDescriptor vAssocDesc = vStateDesc.getManyAssociationByName( assocName );
+                    ManyAssociation<Object> vManyAssoc = vState.manyAssociationFor( vAssocDesc.accessor() );
+                    return MANY_ASSOC_TO_ENTITY_REF_ITERABLE.map( vManyAssoc );
+                }
+                catch( IllegalArgumentException assocNotFoundOnValue )
+                {
+                    // ManyAssociation not found on Value, find List<String> and convert to ManyAssociation
                     try
                     {
-                        AssociationDescriptor vAssocDesc = vStateDesc.getManyAssociationByName( assocName );
-                        ManyAssociation<Object> vManyAssoc = vState.manyAssociationFor( vAssocDesc.accessor() );
-                        return MANY_ASSOC_TO_ENTITY_REF_ITERABLE.map( vManyAssoc );
-                    }
-                    catch( IllegalArgumentException assocNotFoundOnValue )
-                    {
-                        // ManyAssociation not found on Value, find List<String> and convert to ManyAssociation
-                        try
+                        PropertyDescriptor vPropDesc = vStateDesc.findPropertyModelByName( assocName );
+                        if( STRING_COLLECTION_TYPE_SPEC.satisfiedBy( vPropDesc.valueType() ) )
                         {
-                            PropertyDescriptor vPropDesc = vStateDesc.findPropertyModelByName( assocName );
-                            if( STRING_COLLECTION_TYPE_SPEC.satisfiedBy( vPropDesc.valueType() ) )
-                            {
-                                Collection<String> vAssocState = (Collection) vState
+                            Collection<String> vAssocState = (Collection) vState
                                 .propertyFor( vPropDesc.accessor() ).get();
-                                return STRING_COLLEC_TO_ENTITY_REF_ITERABLE.map( vAssocState );
-                            }
-                            return Iterables.empty();
+                            return STRING_COLLEC_TO_ENTITY_REF_ITERABLE.map( vAssocState );
                         }
-                        catch( IllegalArgumentException propNotFoundOnValue )
-                        {
-                            return Iterables.empty();
-                        }
+                        return Iterables.empty();
+                    }
+                    catch( IllegalArgumentException propNotFoundOnValue )
+                    {
+                        return Iterables.empty();
                     }
                 }
-            };
+            }
+        };
         Function<AssociationDescriptor, Map<String, EntityReference>> namedAssocs
             = new Function<AssociationDescriptor, Map<String, EntityReference>>()
+        {
+            @Override
+            public Map<String, EntityReference> map( AssociationDescriptor eAssocDesc )
             {
-                @Override
-                public Map<String, EntityReference> map( AssociationDescriptor eAssocDesc )
+                String assocName = eAssocDesc.qualifiedName().name();
+                try
                 {
-                    String assocName = eAssocDesc.qualifiedName().name();
+                    AssociationDescriptor vAssocDesc = vStateDesc.getNamedAssociationByName( assocName );
+                    NamedAssociation<Object> vAssocState = vState.namedAssociationFor( vAssocDesc.accessor() );
+                    return NAMED_ASSOC_TO_ENTITY_REF_MAP.map( vAssocState );
+                }
+                catch( IllegalArgumentException assocNotFoundOnValue )
+                {
+                    // Find Map<String,String> Property and convert to NamedAssociation
                     try
                     {
-                        AssociationDescriptor vAssocDesc = vStateDesc.getNamedAssociationByName( assocName );
-                        NamedAssociation<Object> vAssocState = vState.namedAssociationFor( vAssocDesc.accessor() );
-                        return NAMED_ASSOC_TO_ENTITY_REF_MAP.map( vAssocState );
-                    }
-                    catch( IllegalArgumentException assocNotFoundOnValue )
-                    {
-                        // Find Map<String,String> Property and convert to NamedAssociation
-                        try
+                        PropertyDescriptor vPropDesc = vStateDesc.findPropertyModelByName( assocName );
+                        if( STRING_MAP_TYPE_SPEC.satisfiedBy( vPropDesc.valueType() ) )
                         {
-                            PropertyDescriptor vPropDesc = vStateDesc.findPropertyModelByName( assocName );
-                            if( STRING_MAP_TYPE_SPEC.satisfiedBy( vPropDesc.valueType() ) )
-                            {
-                                Map<String, String> vAssocState = (Map) vState
+                            Map<String, String> vAssocState = (Map) vState
                                 .propertyFor( vPropDesc.accessor() ).get();
-                                return STRING_MAP_TO_ENTITY_REF_MAP.map( vAssocState );
-                            }
-                            return Collections.EMPTY_MAP;
+                            return STRING_MAP_TO_ENTITY_REF_MAP.map( vAssocState );
                         }
-                        catch( IllegalArgumentException propNotFoundOnValue )
-                        {
-                            return Collections.EMPTY_MAP;
-                        }
+                        return Collections.EMPTY_MAP;
+                    }
+                    catch( IllegalArgumentException propNotFoundOnValue )
+                    {
+                        return Collections.EMPTY_MAP;
                     }
                 }
-            };
+            }
+        };
         return module.currentUnitOfWork().newEntityBuilderWithState(
             entityType, identity, props, assocs, manyAssocs, namedAssocs
         );
diff --git a/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/ValueToEntityService.java b/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/ValueToEntityService.java
index 824c1d6..2d2fa7d 100644
--- a/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/ValueToEntityService.java
+++ b/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/ValueToEntityService.java
@@ -15,10 +15,12 @@
  */
 package org.qi4j.library.conversion.values;
 
+import org.qi4j.api.entity.Identity;
 import org.qi4j.api.mixin.Mixins;
 
 /**
  * Service that creates or updates Entities from matching Values.
+ * @deprecated Please use {@link org.qi4j.api.unitofwork.UnitOfWork#toEntity(Class, Identity)} instead.
  */
 @Mixins( ValueToEntityMixin.class )
 public interface ValueToEntityService
diff --git a/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/package.html b/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/package.html
index 80f8955..e2be575 100644
--- a/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/package.html
+++ b/libraries/conversion/src/main/java/org/qi4j/library/conversion/values/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Entities to Values Conversion.</h2>
diff --git a/libraries/cxf/build.gradle b/libraries/cxf/build.gradle
deleted file mode 100644
index 603396b..0000000
--- a/libraries/cxf/build.gradle
+++ /dev/null
@@ -1,27 +0,0 @@
-description = "Qi4j CXF Library integrates Apache CXF with Qi4j."
-
-jar { manifest { name = "Qi4j Library - CXF" }}
-
-dependencies {
-  compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
-  compile(libraries.cxf_api)
-  compile(libraries.cxf_util)
-  compile(libraries.cxf_rt_core)
-  compile(libraries.cxf_rt_soap)
-  compile(libraries.cxf_rt_jaxws)
-  compile(libraries.cxf_rt_aegis)
-  compile(libraries.cxf_rt_local)
-  compile(libraries.wsdl4j)
-  compile(libraries.woodstox)
-//  compile('org.apache.ws.commons.schema:XmlSchema:' + xmlSchemaVersion)
-
-  runtime(libraries.cxf_rt_http)
-  runtime(libraries.cxf_rt_http_jetty)
-
-  testCompile(project(":org.qi4j.core:org.qi4j.core.testsupport"))
-  testCompile(libraries.http_client)
-  testCompile(libraries.xmlunit)
-
-  testRuntime(project(":org.qi4j.core:org.qi4j.core.runtime"))
-  testRuntime(libraries.logback)
-}
diff --git a/libraries/cxf/dev-status.xml b/libraries/cxf/dev-status.xml
deleted file mode 100644
index 654d3aa..0000000
--- a/libraries/cxf/dev-status.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
-        http://www.qi4j.org/schemas/2008/dev-status/1/dev-status.xsd">
-  <status>
-    <!--none,early,beta,stable,mature-->
-    <codebase>beta</codebase>
-
-    <!-- none, brief, good, complete -->
-    <documentation>none</documentation>
-
-    <!-- none, some, good, complete -->
-    <unittests>some</unittests>
-  </status>
-  <licenses>
-    <license>ALv2</license>
-  </licenses>
-</module>
\ No newline at end of file
diff --git a/libraries/cxf/src/docs/cxf.txt b/libraries/cxf/src/docs/cxf.txt
deleted file mode 100644
index 58570ba..0000000
--- a/libraries/cxf/src/docs/cxf.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-[[library-cxf, CXF Library]]
-= CXF WebService =
-
-[devstatus]
---------------
-source=libraries/cxf/dev-status.xml
---------------
-
-CXF WebService Library
-
-NOTE: This Library has no documentation yet. Learn how to contribute in <<community-docs>>.
-
-include::../../build/docs/buildinfo/artifact.txt[]
diff --git a/libraries/cxf/src/main/java/org/qi4j/library/cxf/CxfAssembler.java b/libraries/cxf/src/main/java/org/qi4j/library/cxf/CxfAssembler.java
deleted file mode 100644
index 23dd83f..0000000
--- a/libraries/cxf/src/main/java/org/qi4j/library/cxf/CxfAssembler.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright 2010 Niclas Hedhman.
- *
- * Licensed 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.qi4j.library.cxf;
-
-import org.qi4j.bootstrap.Assemblers;
-import org.qi4j.bootstrap.AssemblyException;
-import org.qi4j.bootstrap.ModuleAssembly;
-
-public class CxfAssembler
-    extends Assemblers.Visibility<CxfAssembler>
-{
-    @Override
-    public void assemble( ModuleAssembly module )
-        throws AssemblyException
-    {
-        module.objects( Qi4jTypeCreator.class, ValueCompositeCxfType.class ).visibleIn( visibility() );
-    }
-}
diff --git a/libraries/cxf/src/main/java/org/qi4j/library/cxf/JaxWsCreator.java b/libraries/cxf/src/main/java/org/qi4j/library/cxf/JaxWsCreator.java
deleted file mode 100644
index 46d0a07..0000000
--- a/libraries/cxf/src/main/java/org/qi4j/library/cxf/JaxWsCreator.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright 2010 Niclas Hedhman.
- *
- * Licensed 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.qi4j.library.cxf;
-
-import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
-
-public interface JaxWsCreator
-{
-    void initialize( JaxWsServerFactoryBean svrFactory );
-}
diff --git a/libraries/cxf/src/main/java/org/qi4j/library/cxf/JaxWsServerFactoryInfo.java b/libraries/cxf/src/main/java/org/qi4j/library/cxf/JaxWsServerFactoryInfo.java
deleted file mode 100644
index 62ee0d8..0000000
--- a/libraries/cxf/src/main/java/org/qi4j/library/cxf/JaxWsServerFactoryInfo.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2010 Niclas Hedhman.
- *
- * Licensed 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.qi4j.library.cxf;
-
-/**
- * The JaxWsServerFactoryInfo is a metaInfo type to set to services that wants to be exposed as
- * WebServices. Additionally, the service must have a {@code Visibility} set to {@code application}
- * otherwise the Apache CXF extension will not be able to detect the presence of the service (assuming it is in a
- * higher layer).
- */
-public final class JaxWsServerFactoryInfo
-{
-
-    private final JaxWsCreator initializer;
-    private final String address;
-
-    public JaxWsServerFactoryInfo( JaxWsCreator initializer, String address )
-    {
-        this.initializer = initializer;
-        this.address = address;
-    }
-
-    public String address()
-    {
-        return address;
-    }
-
-    public JaxWsCreator initializer()
-    {
-        return initializer;
-    }
-}
diff --git a/libraries/cxf/src/main/java/org/qi4j/library/cxf/JaxWsService.java b/libraries/cxf/src/main/java/org/qi4j/library/cxf/JaxWsService.java
deleted file mode 100644
index a66949a..0000000
--- a/libraries/cxf/src/main/java/org/qi4j/library/cxf/JaxWsService.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright 2010 Niclas Hedhman.
- *
- * Licensed 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.qi4j.library.cxf;
-
-import org.apache.cxf.aegis.AegisContext;
-import org.apache.cxf.aegis.databinding.AegisDatabinding;
-import org.apache.cxf.aegis.type.AbstractTypeCreator;
-import org.apache.cxf.aegis.type.TypeCreationOptions;
-import org.apache.cxf.aegis.type.TypeMapping;
-import org.apache.cxf.interceptor.LoggingInInterceptor;
-import org.apache.cxf.interceptor.LoggingOutInterceptor;
-import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
-import org.qi4j.api.activation.ActivatorAdapter;
-import org.qi4j.api.activation.Activators;
-import org.qi4j.api.injection.scope.Structure;
-import org.qi4j.api.injection.scope.Uses;
-import org.qi4j.api.mixin.Mixins;
-import org.qi4j.api.object.ObjectFactory;
-import org.qi4j.api.service.ServiceComposite;
-import org.qi4j.api.service.ServiceDescriptor;
-import org.qi4j.api.service.ServiceReference;
-import org.qi4j.api.structure.Module;
-
-import static org.qi4j.functional.Iterables.first;
-
-@Mixins( JaxWsService.JaxWsMixin.class )
-@Activators( JaxWsService.Activator.class )
-public interface JaxWsService extends ServiceComposite
-{
-
-
-    void initializeJaxWsFactory();
-
-    public static class Activator
-            extends ActivatorAdapter<ServiceReference<JaxWsService>>
-    {
-
-        @Override
-        public void afterActivation( ServiceReference<JaxWsService> activated )
-                throws Exception
-        {
-            activated.get().initializeJaxWsFactory();
-        }
-
-    }
-
-    public abstract static class JaxWsMixin
-        implements JaxWsService
-    {
-        @Structure
-        private Module module;
-
-        @Structure
-        private ObjectFactory obf;
-
-        @Uses
-        ServiceDescriptor descriptor;
-
-        @Override
-        public void initializeJaxWsFactory()
-        {
-            final JaxWsServerFactoryInfo info = descriptor.metaInfo( JaxWsServerFactoryInfo.class );
-            AegisDatabinding dataBinding = new AegisDatabinding();
-            createQi4jTypeCreator( dataBinding );
-            JaxWsServerFactoryBean svrFactory = new JaxWsServerFactoryBean();
-            svrFactory.setDataBinding( dataBinding );
-            svrFactory.setServiceClass( first( descriptor.types() ) );
-            svrFactory.setServiceBean( findThisService() );
-            if( info != null )
-            {
-                svrFactory.setAddress( info.address() );
-                JaxWsCreator creator = info.initializer();
-                if( creator != null )
-                {
-                    creator.initialize( svrFactory );
-                }
-            }
-            else
-            {
-                svrFactory.setAddress( "http://localhost:9300/" + identity().get() );
-                svrFactory.getInInterceptors().add( new LoggingInInterceptor() );
-                svrFactory.getOutInterceptors().add( new LoggingOutInterceptor() );
-            }
-            svrFactory.create();
-        }
-
-        private void createQi4jTypeCreator( AegisDatabinding dataBinding )
-        {
-            Qi4jTypeCreator qi4jTypeCreator = obf.newObject( Qi4jTypeCreator.class );
-
-            AegisContext aegisContext = dataBinding.getAegisContext();
-            TypeMapping typeMapping = aegisContext.getTypeMapping();
-            AbstractTypeCreator defaultCreator = (AbstractTypeCreator) typeMapping.getTypeCreator();
-            TypeCreationOptions configuration = defaultCreator.getConfiguration();
-            qi4jTypeCreator.setConfiguration( configuration );
-            qi4jTypeCreator.setNextCreator( defaultCreator );
-            qi4jTypeCreator.setTypeMapping( typeMapping );
-        }
-
-        private Object findThisService()
-        {
-            ServiceReference<?> reference = module.findService( first( descriptor.types()) );
-            if( reference == null )
-            {
-                System.err.println( "Internal Error?? JaxWsService.findThisService()" );
-                return null; // Should not be possible.
-            }
-            return reference.get();
-        }
-
-    }
-}
diff --git a/libraries/cxf/src/main/java/org/qi4j/library/cxf/NamespaceUtil.java b/libraries/cxf/src/main/java/org/qi4j/library/cxf/NamespaceUtil.java
deleted file mode 100644
index 0d4e1c8..0000000
--- a/libraries/cxf/src/main/java/org/qi4j/library/cxf/NamespaceUtil.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright 2010 Niclas Hedhman.
- *
- * Licensed 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.qi4j.library.cxf;
-
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import javax.xml.namespace.QName;
-
-/**
- *
- */
-public final class NamespaceUtil
-{
-
-    private NamespaceUtil()
-    {
-    }
-
-    public static QName convertJavaTypeToQName( Type type )
-    {
-        if( type instanceof Class )
-        {
-            Class<?> valueType = (Class<?>) type;
-            String packageName = valueType.getPackage().getName();
-            String className = valueType.getSimpleName();
-            QName typeQName = new QName( "urn:qi4j:type:value:" + packageName, className );
-            return typeQName;
-        }
-        else if( type instanceof ParameterizedType )
-        {
-            return convertJavaTypeToQName( ( (ParameterizedType) type ).getRawType() );
-        }
-        else
-        {
-            throw new UnsupportedOperationException(
-                "Types that are not Class nor ParameterizedType are not yet supported:" + type );
-        }
-    }
-}
diff --git a/libraries/cxf/src/main/java/org/qi4j/library/cxf/Qi4jTypeCreator.java b/libraries/cxf/src/main/java/org/qi4j/library/cxf/Qi4jTypeCreator.java
deleted file mode 100644
index 9c71d59..0000000
--- a/libraries/cxf/src/main/java/org/qi4j/library/cxf/Qi4jTypeCreator.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright 2010 Niclas Hedhman.
- *
- * Licensed 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.qi4j.library.cxf;
-
-import java.beans.PropertyDescriptor;
-import java.lang.reflect.Method;
-import org.apache.cxf.aegis.type.AbstractTypeCreator;
-import org.apache.cxf.aegis.type.AegisType;
-import org.apache.cxf.aegis.type.TypeClassInfo;
-import org.qi4j.api.injection.scope.Structure;
-import org.qi4j.api.structure.Module;
-import org.qi4j.api.util.Classes;
-import org.qi4j.api.value.ValueComposite;
-
-public class Qi4jTypeCreator extends AbstractTypeCreator
-{
-    @Structure
-    private Module module;
-
-    @Override
-    public TypeClassInfo createClassInfo( PropertyDescriptor pd )
-    {
-        return null;
-    }
-
-    @Override
-    public AegisType createCollectionType( TypeClassInfo info )
-    {
-        return null;
-    }
-
-    @Override
-    public AegisType createDefaultType( TypeClassInfo info )
-    {
-        if( ValueComposite.class.isAssignableFrom( Classes.RAW_CLASS.map( info.getType() ) ) )
-        {
-            return module.newObject( ValueCompositeCxfType.class, info.getType(), getTypeMapping() );
-        }
-        return nextCreator.createDefaultType( info );
-    }
-
-    @Override
-    public TypeClassInfo createClassInfo( Method m, int index )
-    {
-        return null;
-    }
-}
diff --git a/libraries/cxf/src/main/java/org/qi4j/library/cxf/ValueCompositeCxfType.java b/libraries/cxf/src/main/java/org/qi4j/library/cxf/ValueCompositeCxfType.java
deleted file mode 100644
index bd1fb58..0000000
--- a/libraries/cxf/src/main/java/org/qi4j/library/cxf/ValueCompositeCxfType.java
+++ /dev/null
@@ -1,483 +0,0 @@
-/*
- * Copyright (c) 2010, Niclas Hehdman. All Rights Reserved.
- *
- * Licensed 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.qi4j.library.cxf;
-
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import javax.xml.namespace.QName;
-import org.apache.cxf.aegis.Context;
-import org.apache.cxf.aegis.DatabindingException;
-import org.apache.cxf.aegis.type.AegisType;
-import org.apache.cxf.aegis.type.TypeMapping;
-import org.apache.cxf.aegis.type.collection.CollectionType;
-import org.apache.cxf.aegis.type.collection.MapType;
-import org.apache.cxf.aegis.xml.MessageReader;
-import org.apache.cxf.aegis.xml.MessageWriter;
-import org.apache.cxf.common.xmlschema.XmlSchemaUtils;
-import org.apache.ws.commons.schema.XmlSchema;
-import org.apache.ws.commons.schema.XmlSchemaAttribute;
-import org.apache.ws.commons.schema.XmlSchemaComplexType;
-import org.apache.ws.commons.schema.XmlSchemaElement;
-import org.apache.ws.commons.schema.XmlSchemaSequence;
-import org.qi4j.api.Qi4j;
-import org.qi4j.api.association.Association;
-import org.qi4j.api.association.AssociationDescriptor;
-import org.qi4j.api.association.AssociationStateHolder;
-import org.qi4j.api.association.ManyAssociation;
-import org.qi4j.api.association.NamedAssociation;
-import org.qi4j.api.common.Optional;
-import org.qi4j.api.common.QualifiedName;
-import org.qi4j.api.composite.StateDescriptor;
-import org.qi4j.api.entity.EntityReference;
-import org.qi4j.api.entity.Identity;
-import org.qi4j.api.injection.scope.Structure;
-import org.qi4j.api.injection.scope.Uses;
-import org.qi4j.api.property.Property;
-import org.qi4j.api.property.PropertyDescriptor;
-import org.qi4j.api.structure.Module;
-import org.qi4j.api.util.Classes;
-import org.qi4j.api.value.NoSuchValueException;
-import org.qi4j.api.value.ValueBuilder;
-import org.qi4j.api.value.ValueComposite;
-import org.qi4j.api.value.ValueDescriptor;
-import org.qi4j.functional.Function;
-import org.qi4j.functional.Iterables;
-import org.qi4j.spi.Qi4jSPI;
-
-import static org.qi4j.functional.Iterables.first;
-
-public class ValueCompositeCxfType
-    extends AegisType
-{
-    @Structure
-    private Module module;
-
-    @Structure
-    Qi4jSPI spi;
-
-    public ValueCompositeCxfType( @Uses Type type, @Uses TypeMapping typeMapping )
-    {
-        setTypeMapping( typeMapping );
-        setTypeClass( type );
-        setSchemaType( NamespaceUtil.convertJavaTypeToQName( type ) );
-    }
-
-    @Override
-    public Object readObject( final MessageReader reader, final Context context )
-        throws DatabindingException
-    {
-        QName qname = getSchemaType();
-        final String className = ( qname.getNamespaceURI() + "." + qname.getLocalPart() ).substring( 20 );
-
-        // Read attributes
-        ValueDescriptor descriptor = module.valueDescriptor( className );
-        StateDescriptor stateDescriptor = descriptor.state();
-        final Map<QualifiedName, Object> values = new HashMap<>();
-        while( reader.hasMoreElementReaders() )
-        {
-            MessageReader childReader = reader.getNextElementReader();
-            QName childName = childReader.getName();
-            QualifiedName childQualifiedName = QualifiedName.fromClass( (Class) typeClass,
-                                                                        childName.getLocalPart() );
-            PropertyDescriptor propertyDescriptor = stateDescriptor.findPropertyModelByQualifiedName(
-                childQualifiedName );
-            Type propertyType = propertyDescriptor.type();
-            AegisType type = getTypeMapping().getType( propertyType );
-            Object value = type.readObject( childReader, context );
-            values.put( childQualifiedName, value );
-        }
-
-        ValueBuilder<?> builder = module.newValueBuilderWithState(
-            (Class<?>) typeClass,
-            new Function<PropertyDescriptor, Object>()
-        {
-            @Override
-            public Object map( PropertyDescriptor descriptor1 )
-            {
-                return values.get( descriptor1.qualifiedName() );
-            }
-            },
-            new Function<AssociationDescriptor, EntityReference>()
-            {
-                @Override
-                public EntityReference map( AssociationDescriptor descriptor )
-                {
-                    Object value = values.get( descriptor.qualifiedName() );
-                    if( value == null )
-                    {
-                        return null;
-                    }
-                    return EntityReference.parseEntityReference( value.toString() );
-                }
-            },
-            new Function<AssociationDescriptor, Iterable<EntityReference>>()
-            {
-                @Override
-                public Iterable<EntityReference> map( AssociationDescriptor descriptor )
-                {
-                    Object value = values.get( descriptor.qualifiedName() );
-                    if( value == null )
-                    {
-                        return Iterables.empty();
-                    }
-                    String[] ids = value.toString().split( "," );
-                    List<EntityReference> references = new ArrayList<>( ids.length );
-                    for( String id : ids )
-                    {
-                        references.add( EntityReference.parseEntityReference( id ) );
-                    }
-                    return references;
-                }
-            },
-            new Function<AssociationDescriptor, Map<String, EntityReference>>()
-            {
-                @Override
-                public Map<String, EntityReference> map( AssociationDescriptor descriptor )
-                {
-                    Object value = values.get( descriptor.qualifiedName() );
-                    if( value == null )
-                    {
-                        return Collections.emptyMap();
-                    }
-                    String[] namedRefs = value.toString().split( "," );
-                    Map<String, EntityReference> references = new HashMap<>( namedRefs.length );
-                    for( String namedRef : namedRefs )
-                    {
-                        String[] splitted = namedRef.split( ":" );
-                        references.put( splitted[0], EntityReference.parseEntityReference( splitted[1] ) );
-                    }
-                    return references;
-                }
-            } );
-
-        return builder.newInstance();
-    }
-
-    @Override
-    public void writeObject( Object object, final MessageWriter writer, final Context context )
-        throws DatabindingException
-    {
-        ValueComposite composite = (ValueComposite) object;
-        writer.writeXsiType( NamespaceUtil.convertJavaTypeToQName(
-            first( Qi4j.FUNCTION_DESCRIPTOR_FOR.map( composite ).types() ) ) );
-        AssociationStateHolder state = spi.stateOf( composite );
-        for( Property<?> property : state.properties() )
-        {
-            Object value = property.get();
-            AegisType type = null;
-            if( value instanceof ValueComposite )
-            {
-                ValueComposite compositeValue = (ValueComposite) value;
-                type = getTypeMapping().getType( NamespaceUtil.convertJavaTypeToQName(
-                    first( Qi4j.FUNCTION_DESCRIPTOR_FOR.map( compositeValue ).types() ) ) );
-            }
-            else if( value != null )
-            {
-                type = getOrCreateNonQi4jType( value );
-            }
-
-            QName childName = new QName( "", spi.propertyDescriptorFor( property ).qualifiedName().name() );
-            MessageWriter cwriter = writer.getElementWriter( childName );
-            if( type != null )
-            {
-                type.writeObject( value, cwriter, context );
-            }
-            else
-            {
-//                    cwriter.writeXsiNil();
-            }
-            cwriter.close();
-        }
-
-        AegisType type = getTypeMapping().getType( NamespaceUtil.convertJavaTypeToQName( String.class ) );
-        for( Association<?> association : state.allAssociations() )
-        {
-            QName childName = new QName( "", spi.associationDescriptorFor( association ).qualifiedName().name() );
-            MessageWriter cwriter = writer.getElementWriter( childName );
-
-            if( association.get() != null )
-            {
-                type.writeObject( ( (Identity) association.get() ).identity().get(), cwriter, context );
-            }
-            cwriter.close();
-        }
-
-        for( ManyAssociation<?> association : state.allManyAssociations() )
-        {
-            QName childName = new QName( "", spi.associationDescriptorFor( association ).qualifiedName().name() );
-            MessageWriter cwriter = writer.getElementWriter( childName );
-
-            String ids = null;
-            for( Object entity : association )
-            {
-                String id = EntityReference.entityReferenceFor( entity ).identity();
-                if( ids != null )
-                {
-                    ids += ",";
-                }
-                ids += id;
-            }
-            if( ids == null )
-            {
-                ids = "";
-            }
-            type.writeObject( ids, cwriter, context );
-            cwriter.close();
-        }
-
-        for( NamedAssociation<?> association : state.allNamedAssociations() )
-        {
-            QName childName = new QName( "", spi.associationDescriptorFor( association ).qualifiedName().name() );
-            MessageWriter cwriter = writer.getElementWriter( childName );
-
-            String ids = null;
-            for( String name : association )
-            {
-                String id = EntityReference.entityReferenceFor( association.get( name ) ).identity();
-                if( ids != null )
-                {
-                    ids += ",";
-                }
-                ids += name + ":" + id;
-            }
-            if( ids == null )
-            {
-                ids = "";
-            }
-            type.writeObject( ids, cwriter, context );
-            cwriter.close();
-        }
-    }
-
-    private AegisType getOrCreateNonQi4jType( Object value )
-    {
-        AegisType type;
-        TypeMapping mapping = getTypeMapping();
-        Class<?> javaType = value.getClass();
-        type = mapping.getType( javaType );
-        if( type == null )
-        {
-            // This might be wrong and instead the ultimate top parent should be used. This works, since
-            // we know that we are the top parent.
-            type = getTypeMapping().getTypeCreator().createType( javaType );
-            mapping.register( type );
-        }
-        return type;
-    }
-
-    @Override
-    public void writeSchema( XmlSchema root )
-    {
-        XmlSchemaComplexType complex = new XmlSchemaComplexType( root, true );
-        complex.setName( getSchemaType().getLocalPart() );
-        root.getItems().add( complex );
-
-        XmlSchemaSequence sequence = new XmlSchemaSequence(); // No clue why this?
-        complex.setParticle( sequence );  // No idea what this is for
-
-        ValueDescriptor descriptor = module.valueDescriptor( getTypeClass().getName() );
-
-        for( PropertyDescriptor p : descriptor.state().properties() )
-        {
-            if( isValueComposite( p.type() ) )
-            {
-                XmlSchemaElement element = new XmlSchemaElement( root, false );
-                element.setName( p.qualifiedName().name() );
-                element.setNillable( p.metaInfo( Optional.class ) != null ); // see below
-                sequence.getItems().add( element );
-                AegisType nested = getOrCreateAegisType( p.type(), root );
-                element.setSchemaTypeName( nested.getSchemaType() );
-            }
-            else if( isCollectionOrMap( p ) )
-            {
-                XmlSchemaElement element = new XmlSchemaElement( root, false );
-                element.setName( p.qualifiedName().name() );
-                element.setNillable( p.metaInfo( Optional.class ) != null ); // see below
-                sequence.getItems().add( element );
-                AegisType nested = getOrCreateAegisType( p.type(), root );
-                element.setSchemaTypeName( nested.getSchemaType() );
-            }
-            else
-            {
-                XmlSchemaAttribute attribute = new XmlSchemaAttribute( root, false );
-                complex.getAttributes().add( attribute );
-                attribute.setName( p.qualifiedName().name() );
-                AegisType nested = getTypeMapping().getType( p.type() );
-                attribute.setSchemaTypeName( nested.getSchemaType() );
-            }
-            QName name = NamespaceUtil.convertJavaTypeToQName( p.type() );
-            String ns = name.getNamespaceURI();
-            if( !ns.equals( root.getTargetNamespace() ) )
-            {
-                XmlSchemaUtils.addImportIfNeeded( root, ns );
-            }
-        }
-    }
-
-    private AegisType getOrCreateAegisType( Type type, XmlSchema root )
-    {
-        AegisType nested = getTypeMapping().getType( type );
-        if( nested == null )
-        {
-            nested = createType( type, root );
-            nested.writeSchema( root );
-        }
-        return nested;
-    }
-
-    private AegisType createType( Type type, XmlSchema root )
-    {
-        if( isCollection( type ) )
-        {
-            AegisType componentType = getOrCreateAegisType( getCollectionComponentType( type ), root );
-            CollectionType resultType = new CollectionType( componentType );
-            QName schemaType = new QName( "http://www.w3.org/2001/XMLSchema", "list" );
-            resultType.setSchemaType( schemaType );
-            return resultType;
-        }
-        else if( isMap( type ) )
-        {
-            AegisType keyType = getOrCreateAegisType( getMapKeyComponentType( type ), root );
-            AegisType valueType = getOrCreateAegisType( getMapValueComponentType( type ), root );
-            QName schemaType = new QName( Classes.toURI( Classes.RAW_CLASS.map( type ) ), "map" );
-            return new MapType( schemaType, keyType, valueType );
-        }
-        else if( isValueComposite( type ) )
-        {
-            ValueCompositeCxfType aegisType = module.newObject( ValueCompositeCxfType.class, getTypeMapping(), type );
-            getTypeMapping().register( aegisType );
-            return aegisType;
-        }
-        else
-        {
-            throw new NoSuchValueException( type.toString(), module.name() );
-        }
-    }
-
-    private boolean isCollectionOrMap( final PropertyDescriptor p )
-    {
-        Type type = p.type();
-        return isCollectionOrMap( type );
-    }
-
-    private boolean isCollection( Type type )
-    {
-        if( isCollectionClass( type ) )
-        {
-            return true;
-        }
-        if( type instanceof ParameterizedType )
-        {
-            ParameterizedType param = (ParameterizedType) type;
-            Type rawType = param.getRawType();
-            if( isCollectionClass( rawType ) )
-            {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private boolean isMap( Type type )
-    {
-        if( isMapClass( type ) )
-        {
-            return true;
-        }
-        if( type instanceof ParameterizedType )
-        {
-            ParameterizedType param = (ParameterizedType) type;
-            Type rawType = param.getRawType();
-            if( isCollectionClass( rawType ) )
-            {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private boolean isCollectionOrMap( Type type )
-    {
-        return isMap( type ) || isCollection( type );
-    }
-
-    @SuppressWarnings( "raw" )
-    private boolean isCollectionClass( Type type )
-    {
-        if( type instanceof Class )
-        {
-            Class clazz = (Class) type;
-            return Collection.class.isAssignableFrom( clazz );
-        }
-        return false;
-    }
-
-    @SuppressWarnings( "raw" )
-    private boolean isMapClass( Type type )
-    {
-        if( type instanceof Class )
-        {
-            Class clazz = (Class) type;
-            return Map.class.isAssignableFrom( clazz );
-        }
-        return false;
-    }
-
-    private Type getCollectionComponentType( Type p )
-    {
-        return getActualTypeArgument( p, 0 );
-    }
-
-    private Type getMapKeyComponentType( Type p )
-    {
-        return getActualTypeArgument( p, 0 );
-    }
-
-    private Type getMapValueComponentType( Type p )
-    {
-        return getActualTypeArgument( p, 1 );
-    }
-
-    private Type getActualTypeArgument( Type p, int index )
-    {
-        if( p instanceof ParameterizedType )
-        {
-            ParameterizedType type = (ParameterizedType) p;
-            return type.getActualTypeArguments()[index];
-        }
-        return null;
-    }
-
-    @SuppressWarnings( "raw" )
-    private boolean isValueComposite( Type type )
-    {
-        Class clazz = Classes.RAW_CLASS.map( type );
-        ValueDescriptor descriptor = module.valueDescriptor( clazz.getName() );
-        return descriptor != null;
-    }
-
-    @Override
-    public boolean isComplex()
-    {
-        return true;
-    }
-}
diff --git a/libraries/cxf/src/main/java/org/qi4j/library/cxf/package.html b/libraries/cxf/src/main/java/org/qi4j/library/cxf/package.html
deleted file mode 100644
index 56ced64..0000000
--- a/libraries/cxf/src/main/java/org/qi4j/library/cxf/package.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<html>
-    <body>
-        <h2>CXF Library.</h2>
-        <p>
-            The CXF Library defines Value-to-Soap type converter and also simplifies the set up of CXF in a Qi4j
-            environment.
-        </p>
-    </body>
-</html>
\ No newline at end of file
diff --git a/libraries/cxf/src/test/java/org/qi4j/library/cxf/HelloClient.java b/libraries/cxf/src/test/java/org/qi4j/library/cxf/HelloClient.java
deleted file mode 100644
index a0f27b3..0000000
--- a/libraries/cxf/src/test/java/org/qi4j/library/cxf/HelloClient.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2010 Niclas Hedhman.
- *
- * Licensed 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.qi4j.library.cxf;
-
-import org.apache.cxf.interceptor.LoggingInInterceptor;
-import org.apache.cxf.interceptor.LoggingOutInterceptor;
-import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
-
-public final class HelloClient
-{
-    private HelloClient()
-    {
-    }
-
-    public static void main( String[] args )
-    {
-        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
-        factory.getInInterceptors().add( new LoggingInInterceptor() );
-        factory.getOutInterceptors().add( new LoggingOutInterceptor() );
-        factory.setServiceClass( HelloWorld.class );
-        factory.setAddress( "http://localhost:9001/helloWorld" );
-        HelloWorld client = (HelloWorld) factory.create();
-
-        String reply = client.sayHi( "World" );
-        System.out.println( "Server said: " + reply );
-    }
-}
diff --git a/libraries/cxf/src/test/java/org/qi4j/library/cxf/HelloMain.java b/libraries/cxf/src/test/java/org/qi4j/library/cxf/HelloMain.java
deleted file mode 100644
index d3e883b..0000000
--- a/libraries/cxf/src/test/java/org/qi4j/library/cxf/HelloMain.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2010 Niclas Hedhman.
- *
- * Licensed 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.qi4j.library.cxf;
-
-import org.apache.cxf.interceptor.LoggingInInterceptor;
-import org.apache.cxf.interceptor.LoggingOutInterceptor;
-import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
-
-public final class HelloMain
-{
-    private HelloMain()
-    {
-    }
-
-    public static void main( String[] args )
-    {
-        HelloWorldImpl implementor = new HelloWorldImpl();
-        JaxWsServerFactoryBean svrFactory = new JaxWsServerFactoryBean();
-        svrFactory.setServiceClass( HelloWorld.class );
-        svrFactory.setAddress( "http://localhost:9001/helloWorld" );
-        svrFactory.setServiceBean( implementor );
-        svrFactory.getInInterceptors().add( new LoggingInInterceptor() );
-        svrFactory.getOutInterceptors().add( new LoggingOutInterceptor() );
-        svrFactory.create();
-    }
-}
diff --git a/libraries/cxf/src/test/java/org/qi4j/library/cxf/HelloWorld.java b/libraries/cxf/src/test/java/org/qi4j/library/cxf/HelloWorld.java
deleted file mode 100644
index 521df29..0000000
--- a/libraries/cxf/src/test/java/org/qi4j/library/cxf/HelloWorld.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright 2010 Niclas Hedhman.
- *
- * Licensed 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.qi4j.library.cxf;
-
-import javax.jws.WebParam;
-import javax.jws.WebService;
-
-@WebService
-public interface HelloWorld
-{
-    String sayHi( @WebParam( name = "text" ) String text );
-}
diff --git a/libraries/cxf/src/test/java/org/qi4j/library/cxf/HelloWorldImpl.java b/libraries/cxf/src/test/java/org/qi4j/library/cxf/HelloWorldImpl.java
deleted file mode 100644
index ba236a5..0000000
--- a/libraries/cxf/src/test/java/org/qi4j/library/cxf/HelloWorldImpl.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2010 Niclas Hedhman.
- *
- * Licensed 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.qi4j.library.cxf;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-import javax.jws.WebService;
-
-@WebService( endpointInterface = "org.qi4j.library.cxf.HelloWorld",
-             serviceName = "HelloWorld" )
-public class HelloWorldImpl implements HelloWorld
-{
-    private final Map<Integer, User> users;
-
-    public HelloWorldImpl()
-    {
-        users = new LinkedHashMap<>();
-    }
-
-    public String sayHi( String text )
-    {
-        System.out.println( "sayHi called" );
-        return "Hello " + text;
-    }
-
-    public String sayHiToUser( User user )
-    {
-        System.out.println( "sayHiToUser called" );
-        users.put( users.size() + 1, user );
-        return "Hello " + user.getName();
-    }
-
-    public Map<Integer, User> getUsers()
-    {
-        System.out.println( "getUsers called" );
-        return users;
-    }
-}
diff --git a/libraries/cxf/src/test/java/org/qi4j/library/cxf/Subscription.java b/libraries/cxf/src/test/java/org/qi4j/library/cxf/Subscription.java
deleted file mode 100644
index cdd7e99..0000000
--- a/libraries/cxf/src/test/java/org/qi4j/library/cxf/Subscription.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2010 Niclas Hedhman.
- *
- * Licensed 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.qi4j.library.cxf;
-
-public class Subscription
-{
-    private String key;
-
-    public String getKey()
-    {
-        return key;
-    }
-
-    public void setKey( String key )
-    {
-        this.key = key;
-    }
-}
diff --git a/libraries/cxf/src/test/java/org/qi4j/library/cxf/divs/DivPoint.java b/libraries/cxf/src/test/java/org/qi4j/library/cxf/divs/DivPoint.java
deleted file mode 100644
index 147f490..0000000
--- a/libraries/cxf/src/test/java/org/qi4j/library/cxf/divs/DivPoint.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2010 Niclas Hedhman.
- *
- * Licensed 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.qi4j.library.cxf.divs;
-
-import org.qi4j.api.property.Property;
-import org.qi4j.api.value.ValueComposite;
-
-public interface DivPoint extends ValueComposite
-{
-    Property<String> dt();
-
-    Property<String> val();
-
-    Property<String> valCcy();
-
-    Property<String> divType();
-
-    Property<String> recType();
-
-    Property<String> net();
-
-    Property<String> netCcy();
-
-    Property<String> recDate();
-
-    Property<String> paydate();
-
-    Property<String> divTypeCD();
-
-    Property<String> comment();
-
-    Property<String> updateTS();
-
-    Property<String> lastUpdater();
-}
diff --git a/libraries/cxf/src/test/java/org/qi4j/library/cxf/divs/DivStream.java b/libraries/cxf/src/test/java/org/qi4j/library/cxf/divs/DivStream.java
deleted file mode 100644
index 221ec4d..0000000
--- a/libraries/cxf/src/test/java/org/qi4j/library/cxf/divs/DivStream.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright 2010 Niclas Hedhman.
- *
- * Licensed 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.qi4j.library.cxf.divs;
-
-import java.util.List;
-import org.qi4j.api.property.Property;
-import org.qi4j.api.value.ValueComposite;
-
-public interface DivStream extends ValueComposite
-{
-    Property<String> mdSymbol();
-
-    Property<String> streamName();
-
-    Property<String> consolidate();
-
-    Property<String> issueId();
-
-    Property<String> systemUpdateTS();
-
-    Property<String> userUpdateTS();
-
-    Property<List<DivPoint>> divPoints();
-}
diff --git a/libraries/cxf/src/test/java/org/qi4j/library/cxf/divs/DividendsMain.java b/libraries/cxf/src/test/java/org/qi4j/library/cxf/divs/DividendsMain.java
deleted file mode 100644
index 4e2458f..0000000
--- a/libraries/cxf/src/test/java/org/qi4j/library/cxf/divs/DividendsMain.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright 2010 Niclas Hedhman.
- *
- * Licensed 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.qi4j.library.cxf.divs;
-
-import org.qi4j.api.structure.Application;
-import org.qi4j.bootstrap.AssemblyException;
-import org.qi4j.bootstrap.ModuleAssembly;
-import org.qi4j.bootstrap.SingletonAssembler;
-import org.qi4j.library.cxf.CxfAssembler;
-
-public final class DividendsMain
-{
-    private DividendsMain()
-    {
-    }
-
-    public static void main( String[] args )
-        throws Exception
-    {
-        SingletonAssembler assembler = new SingletonAssembler()
-        {
-
-            public void assemble( ModuleAssembly module )
-                throws AssemblyException
-            {
-                module.services( ProjectedDividendsService.class ).instantiateOnStartup();
-                module.values( DivStream.class, DivPoint.class );
-                new CxfAssembler().assemble( module );
-            }
-        };
-        final Application application = assembler.application();
-        Runtime.getRuntime().addShutdownHook( new Thread()
-        {
-            @Override
-            public void run()
-            {
-                try
-                {
-                    application.passivate();
-                }
-                catch( Exception e )
-                {
-                    System.err.println( "Problem shutting down Qi4j" );
-                    e.printStackTrace();
-                }
-            }
-        } );
-    }
-}
diff --git a/libraries/cxf/src/test/java/org/qi4j/library/cxf/divs/DividendsTest.java b/libraries/cxf/src/test/java/org/qi4j/library/cxf/divs/DividendsTest.java
deleted file mode 100644
index 19e4c42..0000000
--- a/libraries/cxf/src/test/java/org/qi4j/library/cxf/divs/DividendsTest.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Copyright 2010 Niclas Hedhman.
- *
- * Licensed 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.qi4j.library.cxf.divs;
-
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.Date;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-import org.custommonkey.xmlunit.XMLAssert;
-
-public class DividendsTest
-{
-    private static final String EXPECTED =
-        "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">" +
-        "<soap:Body><ns1:DSDataResponse xmlns:ns1=\"http://divs.cxf.library.qi4j.org/\">" +
-        "<ns1:Snapshot>" +
-        "<ns1:entry>" +
-        "<ns1:key>bt.l/PRIVATE_niclas</ns1:key>" +
-        "<ns1:value xmlns:ns2=\"urn:qi4j:type:value:org.qi4j.library.cxf.divs\" " +
-        "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"ns2:DivStream\">" +
-        "<issueId>PC10YZNZC100</issueId>" +
-        "<divPoints>" +
-        "<ns3:anyType xmlns:ns3=\"http://cxf.apache.org/arrays\" xsi:type=\"ns2:DivPoint\">" +
-        "<updateTS>" + new Date( 2010, 10, 10 ).toString() + "</updateTS>" +
-        "<divTypeCD></divTypeCD>" +
-        "<valCcy>USD</valCcy>" +
-        "<recType>A</recType>" +
-        "<val>0.708</val>" +
-        "<dt>2010-02-12</dt>" +
-        "<net>0.637200003862381</net>" +
-        "<netCcy>USD</netCcy>" +
-        "<paydate>2017-09-19</paydate>" +
-        "<recDate>2014-06-16</recDate>" +
-        "<divType>REG</divType>" +
-        "<comment>Silly comment</comment>" +
-        "<lastUpdater>niclas</lastUpdater>" +
-        "</ns3:anyType>" +
-        "<ns3:anyType xmlns:ns3=\"http://cxf.apache.org/arrays\" xsi:type=\"ns2:DivPoint\">" +
-        "<updateTS>" + new Date( 2010, 10, 10 ).toString() + "</updateTS>" +
-        "<divTypeCD></divTypeCD>" +
-        "<valCcy>USD</valCcy>" +
-        "<recType>A</recType>" +
-        "<val>3.068</val>" +
-        "<dt>2020-02-22</dt>" +
-        "<net>2.7612000703811646</net>" +
-        "<netCcy>USD</netCcy>" +
-        "<paydate>2027-09-10</paydate>" +
-        "<recDate>2024-06-26</recDate>" +
-        "<divType>REG</divType>" +
-        "<comment>Silly comment</comment>" +
-        "<lastUpdater>niclas</lastUpdater>" +
-        "</ns3:anyType>" +
-        "</divPoints>" +
-        "<systemUpdateTS>" + new Date( 2010, 10, 10 ).toString() + "</systemUpdateTS>" +
-        "<streamName>PRIVATE_niclas</streamName>" +
-        "<userUpdateTS>" + new Date( 2010, 10, 10 ).toString() + "</userUpdateTS>" +
-        "<consolidate>N</consolidate>" +
-        "<mdSymbol>bt.l</mdSymbol>" +
-        "</ns1:value>" +
-        "</ns1:entry>" +
-        "</ns1:Snapshot>" +
-        "</ns1:DSDataResponse>" +
-        "</soap:Body>" +
-        "</soap:Envelope>";
-
-    @Test
-    public void whenRequestQi4jValueExpectCorrectResult()
-        throws Exception
-    {
-        DividendsMain.main( new String[ 0 ] );  // Start server;
-
-        HttpClient httpclient = new DefaultHttpClient();
-        HttpPost httpPost = new HttpPost( "http://localhost:9300/ProjectedDividendsService" );
-        httpPost.setHeader( "SOAPAction", "\"DSDataRequest\"" );
-        httpPost.setHeader( "Content-Type", "text/xml;charset=UTF-8" );
-        HttpEntity data = new StringEntity(
-            "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" " +
-            "xmlns:divs=\"http://divs.cxf.library.qi4j.org/\" " +
-            "xmlns:cxf=\"http://cxf.library.qi4j.org\">\n" +
-            "   <soapenv:Header/>\n" +
-            "   <soapenv:Body>\n" +
-            "      <divs:DSData>\n" +
-            "         <!--Optional:-->\n" +
-            "         <divs:RequestType>?</divs:RequestType>\n" +
-            "         <!--Optional:-->\n" +
-            "         <divs:DataService>?</divs:DataService>\n" +
-            "         <!--Optional:-->\n" +
-            "         <divs:Subscription>\n" +
-            "            <!--Optional:-->\n" +
-            "            <cxf:key>?</cxf:key>\n" +
-            "         </divs:Subscription>\n" +
-            "      </divs:DSData>\n" +
-            "   </soapenv:Body>\n" +
-            "</soapenv:Envelope>" );
-        httpPost.setEntity( data );
-        HttpResponse response = httpclient.execute( httpPost );
-        HttpEntity entity = response.getEntity();
-        String result = "";
-        if( entity != null )
-        {
-            InputStream instream = entity.getContent();
-            InputStreamReader isr = new InputStreamReader( instream );
-            BufferedReader br = new BufferedReader( isr );
-            String line = br.readLine();
-            while( line != null )
-            {
-                result = result + line;
-                line = br.readLine();
-            }
-        }
-        XMLAssert.assertXMLEqual( EXPECTED, result );
-    }
-}
diff --git a/libraries/cxf/src/test/java/org/qi4j/library/cxf/divs/ProjectedDividends.java b/libraries/cxf/src/test/java/org/qi4j/library/cxf/divs/ProjectedDividends.java
deleted file mode 100644
index 6736b69..0000000
--- a/libraries/cxf/src/test/java/org/qi4j/library/cxf/divs/ProjectedDividends.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright 2010 Niclas Hedhman.
- *
- * Licensed 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.qi4j.library.cxf.divs;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import javax.jws.WebMethod;
-import javax.jws.WebParam;
-import javax.jws.WebResult;
-import javax.jws.WebService;
-import org.qi4j.api.injection.scope.Structure;
-import org.qi4j.api.mixin.Mixins;
-import org.qi4j.api.value.ValueBuilder;
-import org.qi4j.api.value.ValueBuilderFactory;
-import org.qi4j.library.cxf.Subscription;
-
-@WebService
-@Mixins( ProjectedDividends.ProjectedDividendsMixin.class )
-public interface ProjectedDividends
-{
-    @WebMethod( action = "DSDataRequest", operationName = "DSData" )
-    @WebResult( name = "Snapshot" )
-    Map<String, DivStream> getSnapshot(
-        @WebParam( name = "RequestType" ) String requestType,
-        @WebParam( name = "DataService" ) String dataService,
-        @WebParam( name = "Subscription" ) Subscription subscription
-    );
-
-    public class ProjectedDividendsMixin
-        implements ProjectedDividends
-    {
-        private static final double NINETY_PERCENT = 0.9;
-        private static final float BASE_OFFSET = 0.236f;
-
-        @Structure
-        private ValueBuilderFactory vbf;
-
-        private int counter;
-
-        public Map<String, DivStream> getSnapshot( String requestType, String dataService, Subscription subscription )
-        {
-            HashMap<String, DivStream> result = new HashMap<String, DivStream>();
-            result.put( "bt.l/PRIVATE_niclas", createDivStream() );
-            return result;
-        }
-
-        private DivStream createDivStream()
-        {
-            ValueBuilder<DivStream> builder = vbf.newValueBuilder( DivStream.class );
-            DivStream prototype = builder.prototype();
-            List<DivPoint> divPoints = new ArrayList<DivPoint>();
-            for( int i = 0; i < 2; i++ )
-            {
-                divPoints.add( createDivPoint() );
-            }
-            prototype.divPoints().set( divPoints );
-            prototype.consolidate().set( "N" );
-            prototype.streamName().set( "PRIVATE_niclas" );
-            prototype.systemUpdateTS().set( new Date( 2010, 10, 10 ).toString() );
-            prototype.userUpdateTS().set( new Date( 2010, 10, 10 ).toString() );
-            prototype.issueId().set( "PC10YZNZC100" );
-            prototype.mdSymbol().set( "bt.l" );
-            return builder.newInstance();
-        }
-
-        private DivPoint createDivPoint()
-        {
-            ValueBuilder<DivPoint> builder = vbf.newValueBuilder( DivPoint.class );
-            DivPoint prototype = builder.prototype();
-            prototype.comment().set( "Silly comment " );
-            prototype.dt().set( createRandomDate() );
-            float amount = randomAmount();
-            prototype.val().set( "" + amount );
-            prototype.valCcy().set( "USD" );
-            prototype.divType().set( "REG" );
-            prototype.recType().set( "A" );
-            prototype.net().set( "" + ( amount * NINETY_PERCENT ) );
-            prototype.netCcy().set( "USD" );
-            prototype.recDate().set( createRandomDate() );
-            prototype.paydate().set( createRandomDate() );
-            prototype.divTypeCD().set( "" );
-            prototype.comment().set( "Silly comment" );
-            prototype.updateTS().set( new Date( 2010, 10, 10 ).toString() );
-            prototype.lastUpdater().set( "niclas" );
-            return builder.newInstance();
-        }
-
-        private float randomAmount()
-        {
-            return BASE_OFFSET * counter++;
-        }
-
-        private String createRandomDate()
-        {
-            return "20" + ( counter++ + 10 ) + "-0" + ( ( counter++ % 10 ) + 1 ) + "-" + ( ( counter++ % 19 ) + 10 );
-        }
-    }
-}
diff --git a/libraries/cxf/src/test/java/org/qi4j/library/cxf/divs/ProjectedDividendsService.java b/libraries/cxf/src/test/java/org/qi4j/library/cxf/divs/ProjectedDividendsService.java
deleted file mode 100644
index 700ecb8..0000000
--- a/libraries/cxf/src/test/java/org/qi4j/library/cxf/divs/ProjectedDividendsService.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2010 Niclas Hedhman.
- *
- * Licensed 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.qi4j.library.cxf.divs;
-
-import org.qi4j.library.cxf.JaxWsService;
-
-public interface ProjectedDividendsService extends ProjectedDividends, JaxWsService
-{
-}
diff --git a/libraries/eventsourcing-jdbm/build.gradle b/libraries/eventsourcing-jdbm/build.gradle
index 1ca9ae3..f5d0f25 100644
--- a/libraries/eventsourcing-jdbm/build.gradle
+++ b/libraries/eventsourcing-jdbm/build.gradle
@@ -1,6 +1,25 @@
-description = "Extension to the Qi4j Event Sourcing Library for providing a JDBM based event store."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - Event Sourcing - JDBM" }}
+description = "Extension to the Apache Zest™ Event Sourcing Library for providing a JDBM based event store."
+
+jar { manifest { name = "Apache Zest™ Library - Event Sourcing - JDBM" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
diff --git a/libraries/eventsourcing-jdbm/dev-status.xml b/libraries/eventsourcing-jdbm/dev-status.xml
index f8811d1..5adebd7 100644
--- a/libraries/eventsourcing-jdbm/dev-status.xml
+++ b/libraries/eventsourcing-jdbm/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
@@ -8,7 +24,7 @@
     <codebase>beta</codebase>
 
     <!-- none, brief, good, complete -->
-    <documentation>none</documentation>
+    <documentation>brief</documentation>
 
     <!-- none, some, good, complete -->
     <unittests>some</unittests>
diff --git a/libraries/eventsourcing-jdbm/src/docs/eventsourcing-jdbm.txt b/libraries/eventsourcing-jdbm/src/docs/eventsourcing-jdbm.txt
deleted file mode 100644
index 64c850d..0000000
--- a/libraries/eventsourcing-jdbm/src/docs/eventsourcing-jdbm.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-[[library-eventsourcing-jdbm, Event Sourcing JDBM Library]]
-= Event Sourcing - JDBM =
-
-[devstatus]
---------------
-source=libraries/eventsourcing-jdbm/dev-status.xml
---------------
-
-Event Sourcing - JDBM Library
-
-NOTE: This Library has no documentation yet. Learn how to contribute in <<community-docs>>.
-
-include::../../build/docs/buildinfo/artifact.txt[]
diff --git a/libraries/eventsourcing-jdbm/src/main/java/org/qi4j/library/eventsourcing/domain/source/jdbm/package.html b/libraries/eventsourcing-jdbm/src/main/java/org/qi4j/library/eventsourcing/domain/source/jdbm/package.html
index fc3f4fb..4951f57 100644
--- a/libraries/eventsourcing-jdbm/src/main/java/org/qi4j/library/eventsourcing/domain/source/jdbm/package.html
+++ b/libraries/eventsourcing-jdbm/src/main/java/org/qi4j/library/eventsourcing/domain/source/jdbm/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>JDBM EventStore.</h2>
diff --git a/libraries/eventsourcing-rest/build.gradle b/libraries/eventsourcing-rest/build.gradle
index f1d7c0e..ea1286a 100644
--- a/libraries/eventsourcing-rest/build.gradle
+++ b/libraries/eventsourcing-rest/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j Event Sourcing Library for Restful applications."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - Event Sourcing - Rest" }}
+description = "Apache Zest™ Event Sourcing Library for Restful applications."
+
+jar { manifest { name = "Apache Zest™ Library - Event Sourcing - Rest" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
diff --git a/libraries/eventsourcing-rest/dev-status.xml b/libraries/eventsourcing-rest/dev-status.xml
index f8811d1..5adebd7 100644
--- a/libraries/eventsourcing-rest/dev-status.xml
+++ b/libraries/eventsourcing-rest/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
@@ -8,7 +24,7 @@
     <codebase>beta</codebase>
 
     <!-- none, brief, good, complete -->
-    <documentation>none</documentation>
+    <documentation>brief</documentation>
 
     <!-- none, some, good, complete -->
     <unittests>some</unittests>
diff --git a/libraries/eventsourcing-rest/src/docs/eventsourcing-rest.txt b/libraries/eventsourcing-rest/src/docs/eventsourcing-rest.txt
deleted file mode 100644
index 4ca621b..0000000
--- a/libraries/eventsourcing-rest/src/docs/eventsourcing-rest.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-[[library-eventsourcing-rest, Event Sourcing ReST Library]]
-= Event Sourcing - ReST =
-
-[devstatus]
---------------
-source=libraries/eventsourcing-rest/dev-status.xml
---------------
-
-Event Sourcing - ReST Library
-
-NOTE: This Library has no documentation yet. Learn how to contribute in <<community-docs>>.
-
-include::../../build/docs/buildinfo/artifact.txt[]
diff --git a/libraries/eventsourcing-rest/src/main/java/org/qi4j/library/eventsourcing/domain/rest/server/package.html b/libraries/eventsourcing-rest/src/main/java/org/qi4j/library/eventsourcing/domain/rest/server/package.html
index a705e91..10862c4 100644
--- a/libraries/eventsourcing-rest/src/main/java/org/qi4j/library/eventsourcing/domain/rest/server/package.html
+++ b/libraries/eventsourcing-rest/src/main/java/org/qi4j/library/eventsourcing/domain/rest/server/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Restlet Resource exposing EventSourcing Events as Atom.</h2>
diff --git a/libraries/eventsourcing/build.gradle b/libraries/eventsourcing/build.gradle
index 47e5f74..05ed544 100644
--- a/libraries/eventsourcing/build.gradle
+++ b/libraries/eventsourcing/build.gradle
@@ -1,9 +1,29 @@
-description = "Qi4j Event Sourcing Library."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - Event Sourcing" }}
+description = "Apache Zest™ Event Sourcing Library."
+
+jar { manifest { name = "Apache Zest™ Library - Event Sourcing" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
+  compile libraries.slf4j_api
 
   testCompile(project(":org.qi4j.core:org.qi4j.core.testsupport"))
 
diff --git a/libraries/eventsourcing/dev-status.xml b/libraries/eventsourcing/dev-status.xml
index f8811d1..5adebd7 100644
--- a/libraries/eventsourcing/dev-status.xml
+++ b/libraries/eventsourcing/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
@@ -8,7 +24,7 @@
     <codebase>beta</codebase>
 
     <!-- none, brief, good, complete -->
-    <documentation>none</documentation>
+    <documentation>brief</documentation>
 
     <!-- none, some, good, complete -->
     <unittests>some</unittests>
diff --git a/libraries/eventsourcing/src/docs/eventsourcing.txt b/libraries/eventsourcing/src/docs/eventsourcing.txt
index 0da7404..6936ea5 100644
--- a/libraries/eventsourcing/src/docs/eventsourcing.txt
+++ b/libraries/eventsourcing/src/docs/eventsourcing.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[library-eventsourcing, Event Sourcing Library]]
 = Event Sourcing =
 
@@ -6,8 +25,111 @@
 source=libraries/eventsourcing/dev-status.xml
 --------------
 
-Event Sourcing Library
+The Event Sourcing Library supports generating, storing and replaying two types of events: application-events and domain-events.
 
-NOTE: This Library has no documentation yet. Learn how to contribute in <<community-docs>>.
+Application events are bound to Usecase and are produced by execution of specific methods (ones with `ApplicationEvent` as their first parameter).
+Each application event holds information about Usecase, method name and JSON serialized values of method parameters.
+
+Domain events are bound to entity instances and are produced by execution of annotated (see `@DomainEvent`) methods that belongs to `EntityComposite`.
+Each domain event (see `DomainEventValue`) holds information about entity type, identity, method name and JSON serialized values of method parameters.
+
+Both application and domain events are captured during `UnitOfWork` lifetime and are stored in `EventStore` after successfully completed `UnitOfWork` as collection together (see `UnitOfWorkDomainEventsValue` and `TransactionApplicationEvents`).
+
+There is support for replaying events.
+When events are replayed the same code is executed but no new events are generated.
+
+There are helper classes that enables a service to easily track events feed, and for domain events there is `EventRouter` that allow to specify specification->receiver routes.
 
 include::../../build/docs/buildinfo/artifact.txt[]
+
+*JDBM backed store*
+
+EventStore supports indexed and streamed access to events feed.
+There is in-memory and JDBM backed implementations.
+
+[devstatus]
+--------------
+source=libraries/eventsourcing-jdbm/dev-status.xml
+--------------
+
+include::../../../eventsourcing-jdbm/build/docs/buildinfo/artifact.txt[]
+
+*REST access*
+
+For remote access to feed there is `eventsourcing-rest` library that exposes events as Atom feeds.
+
+[devstatus]
+--------------
+source=libraries/eventsourcing-rest/dev-status.xml
+--------------
+
+include::../../../eventsourcing-rest/build/docs/buildinfo/artifact.txt[]
+
+
+== Application Events ==
+
+Assembly is done as follows:
+
+[snippet,java]
+----
+source=libraries/eventsourcing/src/test/java/org/qi4j/library/eventsourcing/application/ApplicationEventTest.java
+tag=assemblyAE
+----
+
+Configure application events store:
+[snippet,java]
+----
+source=libraries/eventsourcing/src/test/java/org/qi4j/library/eventsourcing/application/ApplicationEventTest.java
+tag=storeAE
+----
+
+Actual method on composite which execution emits application event.
+First parameter is `null` on "normal" execution.
+If it is not `null`, then the method call is a replay of previously created events.
+[snippet,java]
+----
+source=libraries/eventsourcing/src/test/java/org/qi4j/library/eventsourcing/application/ApplicationEventTest.java
+tag=methodAE
+----
+
+To enable execution capturing, you have to configure composite with concern:
+[snippet,java]
+----
+source=libraries/eventsourcing/src/test/java/org/qi4j/library/eventsourcing/application/ApplicationEventTest.java
+tag=concernAE
+----
+
+== Domain Events ==
+
+Assembly:
+
+[snippet,java]
+----
+source=libraries/eventsourcing/src/test/java/org/qi4j/library/eventsourcing/domain/DomainEventTest.java
+tag=assemblyDE
+----
+
+Configure domain events store:
+
+[snippet,java]
+----
+source=libraries/eventsourcing/src/test/java/org/qi4j/library/eventsourcing/domain/DomainEventTest.java
+tag=storeDE
+----
+
+Annotate your entity state changing methods.
+Event methods may only change state.
+They may not fail or thrown exceptions:
+[snippet,java]
+----
+source=libraries/eventsourcing/src/test/java/org/qi4j/library/eventsourcing/domain/DomainEventTest.java
+tag=methodDE
+----
+
+To enable method execution capturing, you have to configure entity with concern:
+
+[snippet,java]
+----
+source=libraries/eventsourcing/src/test/java/org/qi4j/library/eventsourcing/domain/DomainEventTest.java
+tag=concernDE
+----
diff --git a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/api/package.html b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/api/package.html
index 1add198..d759d34 100644
--- a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/api/package.html
+++ b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/api/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>EventSourcing Application API.</h2>
diff --git a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/factory/ApplicationEventFactoryService.java b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/factory/ApplicationEventFactoryService.java
index 675f6ba..e5c4e4f 100644
--- a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/factory/ApplicationEventFactoryService.java
+++ b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/factory/ApplicationEventFactoryService.java
@@ -16,7 +16,6 @@
 
 package org.qi4j.library.eventsourcing.application.factory;
 
-import java.util.Date;
 import org.json.JSONException;
 import org.json.JSONObject;
 import org.json.JSONStringer;
@@ -33,13 +32,14 @@
 import org.qi4j.api.value.ValueBuilder;
 import org.qi4j.api.value.ValueBuilderFactory;
 import org.qi4j.library.eventsourcing.application.api.ApplicationEvent;
-import org.qi4j.library.eventsourcing.domain.factory.UnitOfWorkNotificationConcern;
 import org.qi4j.library.eventsourcing.domain.spi.CurrentUser;
 
+import java.util.Date;
+
 /**
  * DomainEventValue factory
  */
-@Concerns(UnitOfWorkNotificationConcern.class)
+@Concerns(TransactionNotificationConcern.class)
 @Mixins(ApplicationEventFactoryService.Mixin.class)
 public interface ApplicationEventFactoryService
         extends ApplicationEventFactory, ServiceComposite
diff --git a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/factory/package.html b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/factory/package.html
index b9a6744..6353ddb 100644
--- a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/factory/package.html
+++ b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/factory/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>EventSourcing Application Factory.</h2>
diff --git a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/replay/package.html b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/replay/package.html
index 5b02776..126e083 100644
--- a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/replay/package.html
+++ b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/replay/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>EventSourcing Application Replay.</h2>
diff --git a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/source/helper/package.html b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/source/helper/package.html
index 8bf15ae9..32f1092 100644
--- a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/source/helper/package.html
+++ b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/source/helper/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>EventSourcing Application Source Helpers.</h2>
diff --git a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/source/memory/MemoryApplicationEventStoreService.java b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/source/memory/MemoryApplicationEventStoreService.java
new file mode 100644
index 0000000..6fa2bce
--- /dev/null
+++ b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/source/memory/MemoryApplicationEventStoreService.java
@@ -0,0 +1,142 @@
+/*
+ * 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.qi4j.library.eventsourcing.application.source.memory;
+
+import org.qi4j.api.activation.Activators;
+import org.qi4j.api.mixin.Mixins;
+import org.qi4j.api.service.ServiceComposite;
+import org.qi4j.io.Input;
+import org.qi4j.io.Output;
+import org.qi4j.io.Receiver;
+import org.qi4j.io.Sender;
+import org.qi4j.library.eventsourcing.application.api.TransactionApplicationEvents;
+import org.qi4j.library.eventsourcing.application.source.*;
+import org.qi4j.library.eventsourcing.domain.api.UnitOfWorkDomainEventsValue;
+
+import java.io.IOException;
+import java.util.*;
+
+/**
+ * In-Memory ApplicationEventStore. Mainly used for testing.
+ */
+@Mixins( MemoryApplicationEventStoreService.MemoryStoreMixin.class )
+@Activators( ApplicationEventStoreActivation.Activator.class )
+public interface MemoryApplicationEventStoreService
+    extends ApplicationEventSource, ApplicationEventStore, ApplicationEventStream, ApplicationEventStoreActivation, ServiceComposite
+{
+    abstract class MemoryStoreMixin
+        extends AbstractApplicationEventStoreMixin
+        implements ApplicationEventSource, ApplicationEventStoreActivation
+    {
+        // This list holds all transactions
+        private LinkedList<TransactionApplicationEvents> store = new LinkedList<TransactionApplicationEvents>();
+
+        @Override
+        public Input<TransactionApplicationEvents, IOException> transactionsAfter( final long afterTimestamp, final long maxTransactions )
+        {
+            return new Input<TransactionApplicationEvents, IOException>()
+            {
+                @Override
+                public <ReceiverThrowableType extends Throwable> void transferTo( Output<? super TransactionApplicationEvents, ReceiverThrowableType> output )
+                    throws IOException, ReceiverThrowableType
+                {
+                    // Lock store first
+                    lock.lock();
+                    try
+                    {
+                        output.receiveFrom( new Sender<TransactionApplicationEvents, IOException>()
+                        {
+                            @Override
+                            public <ReceiverThrowableType extends Throwable> void sendTo( Receiver<? super TransactionApplicationEvents, ReceiverThrowableType> receiver )
+                                throws ReceiverThrowableType, IOException
+                            {
+                                Iterator<TransactionApplicationEvents> iterator = store.iterator();
+
+                                long count = 0;
+
+                                while( iterator.hasNext() && count < maxTransactions )
+                                {
+                                    TransactionApplicationEvents next = iterator.next();
+                                    if( next.timestamp().get() > afterTimestamp )
+                                    {
+                                        receiver.receive( next );
+                                        count++;
+                                    }
+                                }
+                            }
+                        });
+                    }
+                    finally
+                    {
+                        lock.unlock();
+                    }
+                }
+            };
+        }
+
+        @Override
+        public Input<TransactionApplicationEvents, IOException> transactionsBefore( final long beforeTimestamp, final long maxTransactions )
+        {
+            return new Input<TransactionApplicationEvents, IOException>()
+            {
+                @Override
+                public <ReceiverThrowableType extends Throwable> void transferTo( Output<? super TransactionApplicationEvents, ReceiverThrowableType> output )
+                    throws IOException, ReceiverThrowableType
+                {
+                    // Lock store first
+                    lock.lock();
+                    try
+                    {
+                        output.receiveFrom( new Sender<TransactionApplicationEvents, IOException>()
+                        {
+                            @Override
+                            public <ReceiverThrowableType extends Throwable> void sendTo( Receiver<? super TransactionApplicationEvents, ReceiverThrowableType> receiver )
+                                throws ReceiverThrowableType, IOException
+                            {
+                                Iterator<TransactionApplicationEvents> iterator = store.descendingIterator();
+
+                                long count = 0;
+
+                                while( iterator.hasNext() && count < maxTransactions )
+                                {
+                                    TransactionApplicationEvents next = iterator.next();
+                                    if( next.timestamp().get() < beforeTimestamp )
+                                    {
+                                        receiver.receive( next );
+                                        count++;
+                                    }
+                                }
+                            }
+                        });
+                    }
+                    finally
+                    {
+                        lock.unlock();
+                    }
+                }
+            };
+        }
+
+        @Override
+        protected void storeEvents( TransactionApplicationEvents transactionDomain ) throws IOException
+        {
+            store.add( transactionDomain );
+        }
+    }
+}
diff --git a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/source/memory/package.html b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/source/memory/package.html
new file mode 100644
index 0000000..b92be93
--- /dev/null
+++ b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/source/memory/package.html
@@ -0,0 +1,21 @@
+<!--
+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.
+-->
+<html>
+    <body>
+        <h2>EventSourcing in-memory EventStore.</h2>
+    </body>
+</html>
\ No newline at end of file
diff --git a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/source/package.html b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/source/package.html
index 5821ad0..533fa0d 100644
--- a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/source/package.html
+++ b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/application/source/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>EventSourcing Application Source.</h2>
diff --git a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/bootstrap/EventsourcingAssembler.java b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/bootstrap/EventsourcingAssembler.java
new file mode 100644
index 0000000..228d6de
--- /dev/null
+++ b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/bootstrap/EventsourcingAssembler.java
@@ -0,0 +1,81 @@
+/*
+ * 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.qi4j.library.eventsourcing.bootstrap;
+
+import org.qi4j.bootstrap.Assemblers;
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.ImportedServiceDeclaration;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.library.eventsourcing.application.api.ApplicationEvent;
+import org.qi4j.library.eventsourcing.application.api.TransactionApplicationEvents;
+import org.qi4j.library.eventsourcing.application.factory.ApplicationEventFactoryService;
+import org.qi4j.library.eventsourcing.domain.api.DomainEventValue;
+import org.qi4j.library.eventsourcing.domain.api.UnitOfWorkDomainEventsValue;
+import org.qi4j.library.eventsourcing.domain.factory.CurrentUserUoWPrincipal;
+import org.qi4j.library.eventsourcing.domain.factory.DomainEventFactoryService;
+
+public class EventsourcingAssembler
+    extends Assemblers.Visibility<EventsourcingAssembler>
+{
+    private boolean domainEvents;
+    private boolean applicationEvents;
+
+    private boolean uowPrincipal;
+
+    public EventsourcingAssembler withDomainEvents()
+    {
+        domainEvents = true;
+        return this;
+    }
+
+    public EventsourcingAssembler withApplicationEvents()
+    {
+        applicationEvents = true;
+        return this;
+    }
+
+    public EventsourcingAssembler withCurrentUserFromUOWPrincipal()
+    {
+        uowPrincipal = true;
+        return this;
+    }
+
+    @Override
+    public void assemble(ModuleAssembly module) throws AssemblyException
+    {
+        if( domainEvents )
+        {
+            module.values( DomainEventValue.class, UnitOfWorkDomainEventsValue.class );
+            module.services( DomainEventFactoryService.class).visibleIn(visibility() );
+        }
+
+        if( applicationEvents )
+        {
+            module.values( ApplicationEvent.class, TransactionApplicationEvents.class );
+            module.services( ApplicationEventFactoryService.class ).visibleIn( visibility() );
+        }
+
+        if( uowPrincipal )
+        {
+            module.importedServices( CurrentUserUoWPrincipal.class )
+                .importedBy( ImportedServiceDeclaration.NEW_OBJECT );
+            module.objects( CurrentUserUoWPrincipal.class );
+        }
+    }
+}
diff --git a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/bootstrap/package.html b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/bootstrap/package.html
new file mode 100644
index 0000000..2b9376f
--- /dev/null
+++ b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/bootstrap/package.html
@@ -0,0 +1,21 @@
+<!--
+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.
+-->
+<html>
+    <body>
+        <h2>EventSourcing Assembly.</h2>
+    </body>
+</html>
\ No newline at end of file
diff --git a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/api/package.html b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/api/package.html
index fade02a..e27864c 100644
--- a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/api/package.html
+++ b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/api/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>EventSourcing Domain API.</h2>
diff --git a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/factory/DomainEventFactoryService.java b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/factory/DomainEventFactoryService.java
index 9194ba1..00dafb8 100644
--- a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/factory/DomainEventFactoryService.java
+++ b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/factory/DomainEventFactoryService.java
@@ -54,7 +54,7 @@
 
             DomainEventValue prototype = builder.prototype();
             prototype.name().set( name );
-            prototype.entityType().set( first(Qi4j.FUNCTION_DESCRIPTOR_FOR.map( entity ).types()).getName() );
+            prototype.entityType().set( first( Qi4j.FUNCTION_DESCRIPTOR_FOR.map( entity ).types()).getName() );
             prototype.entityId().set( entity.identity().get() );
 
             // JSON-ify parameters
diff --git a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/factory/package.html b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/factory/package.html
index cb68140..ec26fb1 100644
--- a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/factory/package.html
+++ b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/factory/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>EventSourcing Domain Factory.</h2>
diff --git a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/replay/package.html b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/replay/package.html
index c2b5b7b..f0df716 100644
--- a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/replay/package.html
+++ b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/replay/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>EventSourcing Domain Replay.</h2>
diff --git a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/source/helper/package.html b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/source/helper/package.html
index f130884..8bf2f63 100644
--- a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/source/helper/package.html
+++ b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/source/helper/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>EventSourcing Domain Source Helpers.</h2>
diff --git a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/source/memory/package.html b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/source/memory/package.html
index a118f2d..2fc27f2 100644
--- a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/source/memory/package.html
+++ b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/source/memory/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>In-Memory EventStore.</h2>
diff --git a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/source/package.html b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/source/package.html
index 74fd29e..c9754bb 100644
--- a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/source/package.html
+++ b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/source/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>EventSourcing Domain Source.</h2>
diff --git a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/spi/package.html b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/spi/package.html
index 391954c..1ad52b2 100644
--- a/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/spi/package.html
+++ b/libraries/eventsourcing/src/main/java/org/qi4j/library/eventsourcing/domain/spi/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>EventSourcing Domain SPI.</h2>
diff --git a/libraries/eventsourcing/src/test/java/org/qi4j/library/eventsourcing/application/ApplicationEventTest.java b/libraries/eventsourcing/src/test/java/org/qi4j/library/eventsourcing/application/ApplicationEventTest.java
new file mode 100644
index 0000000..7ccf0a2
--- /dev/null
+++ b/libraries/eventsourcing/src/test/java/org/qi4j/library/eventsourcing/application/ApplicationEventTest.java
@@ -0,0 +1,227 @@
+/*
+ * 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.qi4j.library.eventsourcing.application;
+
+import org.junit.Test;
+import org.qi4j.api.common.Optional;
+import org.qi4j.api.common.UseDefaults;
+import org.qi4j.api.composite.TransientComposite;
+import org.qi4j.api.entity.EntityBuilder;
+import org.qi4j.api.entity.EntityComposite;
+import org.qi4j.api.injection.scope.Service;
+import org.qi4j.api.injection.scope.Structure;
+import org.qi4j.api.mixin.Mixins;
+import org.qi4j.api.property.Property;
+import org.qi4j.api.unitofwork.UnitOfWork;
+import org.qi4j.api.unitofwork.UnitOfWorkCompletionException;
+import org.qi4j.api.unitofwork.UnitOfWorkFactory;
+import org.qi4j.api.usecase.UsecaseBuilder;
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.io.Output;
+import org.qi4j.io.Receiver;
+import org.qi4j.io.Sender;
+import org.qi4j.library.eventsourcing.application.api.ApplicationEvent;
+import org.qi4j.library.eventsourcing.application.api.TransactionApplicationEvents;
+import org.qi4j.library.eventsourcing.application.factory.ApplicationEventCreationConcern;
+import org.qi4j.library.eventsourcing.application.source.ApplicationEventSource;
+import org.qi4j.library.eventsourcing.application.source.helper.ApplicationEventParameters;
+import org.qi4j.library.eventsourcing.application.source.memory.MemoryApplicationEventStoreService;
+import org.qi4j.library.eventsourcing.bootstrap.EventsourcingAssembler;
+import org.qi4j.test.AbstractQi4jTest;
+import org.qi4j.test.EntityTestAssembler;
+
+import java.io.IOException;
+import java.security.Principal;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * User signup usecase with optional mailing list subscription.
+ * Subscription is not stored in domain model but is available via application events feed.
+ */
+public class ApplicationEventTest
+    extends AbstractQi4jTest
+{
+    @Service
+    ApplicationEventSource eventSource;
+
+    @Override
+    public void assemble( ModuleAssembly module ) throws AssemblyException
+    {
+        // START SNIPPET: assemblyAE
+        new EventsourcingAssembler()
+                .withApplicationEvents()
+                .withCurrentUserFromUOWPrincipal()
+                .assemble(module);
+        // END SNIPPET: assemblyAE
+
+        // START SNIPPET: storeAE
+        module.services( MemoryApplicationEventStoreService.class );
+        // END SNIPPET: storeAE
+
+        new EntityTestAssembler().assemble( module );
+
+        // START SNIPPET: concernAE
+        module.transients( Users.class ).withConcerns( ApplicationEventCreationConcern.class );
+        // END SNIPPET: concernAE
+
+        module.entities( UserEntity.class );
+
+    }
+
+
+    @Test
+    public void testApplicationEvent() throws Exception
+    {
+        Users users = module.newTransient( Users.class );
+
+        Principal administratorPrincipal = new Principal()
+        {
+            @Override
+            public String getName()
+            {
+                return "administrator";
+            }
+        };
+
+        UnitOfWork uow1 = module.newUnitOfWork( UsecaseBuilder.newUsecase( "User signup" ) );
+        uow1.setMetaInfo( administratorPrincipal );
+        users.signup( null, "user1", Arrays.asList( "news-a", "news-b" ) );
+        uow1.complete();
+
+        Thread.sleep( 1 ); // For UoWs not getting the same `currentTime`
+
+        UnitOfWork uow2 = module.newUnitOfWork();
+        uow2.setMetaInfo( administratorPrincipal );
+        users.signup( null, "user2", Collections.EMPTY_LIST );
+        uow2.complete();
+
+        Thread.sleep( 1 ); // For UoWs not getting the same `currentTime`
+
+        UnitOfWork uow3 = module.newUnitOfWork();
+        uow3.setMetaInfo( administratorPrincipal );
+        users.signup( null, "user3", Collections.singletonList( "news-c" ) );
+        uow3.complete();
+
+        // receive events from uow2 and later forwards
+        EventsInbox afterInbox = new EventsInbox();
+        eventSource.transactionsAfter( uow2.currentTime() - 1, Integer.MAX_VALUE ).transferTo( afterInbox );
+
+        assertEquals( 2, afterInbox.getEvents().size() );
+
+        ApplicationEvent signupEvent2 = afterInbox.getEvents().get( 0 ).events().get().get( 0 );
+        ApplicationEvent signupEvent3 = afterInbox.getEvents().get( 1 ).events().get().get( 0 );
+
+        assertEquals( "signup", signupEvent2.name().get() );
+        assertEquals( "user2", ApplicationEventParameters.getParameter( signupEvent2, "param1" ) );
+        assertEquals( "[]", ApplicationEventParameters.getParameter( signupEvent2, "param2" ) );
+
+        assertEquals( "signup", signupEvent3.name().get() );
+        assertEquals( "user3", ApplicationEventParameters.getParameter( signupEvent3, "param1" ) );
+        assertEquals( "[\"news-c\"]", ApplicationEventParameters.getParameter( signupEvent3, "param2" ) );
+
+        // receive events from uow2 backwards
+        EventsInbox beforeInbox = new EventsInbox();
+        eventSource.transactionsBefore( uow3.currentTime(), Integer.MAX_VALUE ).transferTo( beforeInbox );
+
+        assertEquals( 2, beforeInbox.getEvents().size() );
+
+        signupEvent2 = beforeInbox.getEvents().get( 0 ).events().get().get( 0 );
+        ApplicationEvent signupEvent1 = beforeInbox.getEvents().get( 1 ).events().get().get( 0 );
+
+        assertEquals( "signup", signupEvent2.name().get() );
+        assertEquals( "user2", ApplicationEventParameters.getParameter( signupEvent2, "param1" ) );
+        assertEquals( "[]", ApplicationEventParameters.getParameter( signupEvent2, "param2" ) );
+
+        assertEquals( "signup", signupEvent1.name().get());
+        assertEquals( "user1", ApplicationEventParameters.getParameter( signupEvent1, "param1" ) );
+        assertEquals( "[\"news-a\",\"news-b\"]", ApplicationEventParameters.getParameter( signupEvent1, "param2" ) );
+    }
+
+    static class EventsInbox implements Output<TransactionApplicationEvents, RuntimeException>
+    {
+        private List<TransactionApplicationEvents> events = new LinkedList<>();
+
+        @Override
+        public <SenderThrowableType extends Throwable> void receiveFrom( Sender<? extends TransactionApplicationEvents, SenderThrowableType> sender )
+            throws RuntimeException, SenderThrowableType
+        {
+            try
+            {
+                sender.sendTo( new Receiver<TransactionApplicationEvents, Throwable>()
+                {
+                    @Override
+                    public void receive( TransactionApplicationEvents item ) throws Throwable
+                    {
+                        events.add(item);
+                    }
+                });
+
+            }
+            catch( Throwable throwable )
+            {
+                throwable.printStackTrace();
+            }
+        }
+
+        public List<TransactionApplicationEvents> getEvents()
+        {
+            return events;
+        }
+    }
+
+    // START SNIPPET: methodAE
+    @Mixins( Users.Mixin.class )
+    public interface Users extends TransientComposite
+    {
+        void signup( @Optional ApplicationEvent evt, String username, List<String> mailinglists );
+        // END SNIPPET: methodAE
+
+        abstract class Mixin implements Users
+        {
+            @Structure
+            UnitOfWorkFactory uowFactory;
+
+            @Override
+            public void signup( ApplicationEvent evt, String username, List<String> mailinglists )
+            {
+                if (evt == null)
+                {
+                    UnitOfWork uow = uowFactory.currentUnitOfWork();
+
+                    EntityBuilder<UserEntity> builder = uow.newEntityBuilder( UserEntity.class );
+                    builder.instance().username().set( username );
+                    builder.newInstance();
+                }
+            }
+        }
+    }
+
+    public interface UserEntity
+            extends EntityComposite
+    {
+        @UseDefaults
+        Property<String> username();
+    }
+}
diff --git a/libraries/eventsourcing/src/test/java/org/qi4j/library/eventsourcing/domain/DomainEventTest.java b/libraries/eventsourcing/src/test/java/org/qi4j/library/eventsourcing/domain/DomainEventTest.java
index 7a84999..0d30d9e 100644
--- a/libraries/eventsourcing/src/test/java/org/qi4j/library/eventsourcing/domain/DomainEventTest.java
+++ b/libraries/eventsourcing/src/test/java/org/qi4j/library/eventsourcing/domain/DomainEventTest.java
@@ -28,6 +28,7 @@
 import org.qi4j.functional.Function;
 import org.qi4j.io.Outputs;
 import org.qi4j.io.Transforms;
+import org.qi4j.library.eventsourcing.bootstrap.EventsourcingAssembler;
 import org.qi4j.library.eventsourcing.domain.api.DomainEvent;
 import org.qi4j.library.eventsourcing.domain.api.DomainEventValue;
 import org.qi4j.library.eventsourcing.domain.api.UnitOfWorkDomainEventsValue;
@@ -52,13 +53,20 @@
     {
         new EntityTestAssembler(  ).assemble( module );
 
-        module.values( DomainEventValue.class, UnitOfWorkDomainEventsValue.class );
-        module.services( MemoryEventStoreService.class );
-        module.services( DomainEventFactoryService.class );
-        module.importedServices( CurrentUserUoWPrincipal.class ).importedBy( ImportedServiceDeclaration.NEW_OBJECT );
-        module.objects( CurrentUserUoWPrincipal.class );
+        // START SNIPPET: assemblyDE
+        new EventsourcingAssembler()
+                .withDomainEvents()
+                .withCurrentUserFromUOWPrincipal()
+                .assemble(module);
+        // END SNIPPET: assemblyDE
 
+        // START SNIPPET: storeDE
+        module.services( MemoryEventStoreService.class );
+        // END SNIPPET: storeDE
+
+        // START SNIPPET: concernDE
         module.entities( TestEntity.class ).withConcerns(DomainEventCreationConcern.class);
+        // END SNIPPET: concernDE
     }
 
     @Test
@@ -93,6 +101,7 @@
                 }, Outputs.systemOut() ));
     }
 
+    // START SNIPPET: methodDE
     @Mixins( TestEntity.Mixin.class )
     public interface TestEntity
         extends EntityComposite
@@ -112,4 +121,5 @@
             }
         }
     }
+    // END SNIPPET: methodDE
 }
diff --git a/libraries/eventsourcing/src/test/java/org/qi4j/library/eventsourcing/domain/source/helper/EventsTest.java b/libraries/eventsourcing/src/test/java/org/qi4j/library/eventsourcing/domain/source/helper/EventsTest.java
index 12ce6ac..b21733d 100644
--- a/libraries/eventsourcing/src/test/java/org/qi4j/library/eventsourcing/domain/source/helper/EventsTest.java
+++ b/libraries/eventsourcing/src/test/java/org/qi4j/library/eventsourcing/domain/source/helper/EventsTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.eventsourcing.domain.source.helper;
 
 import org.junit.Before;
diff --git a/libraries/eventsourcing/src/test/java/org/qi4j/library/eventsourcing/domain/source/helper/UnitOfWorkRouterTest.java b/libraries/eventsourcing/src/test/java/org/qi4j/library/eventsourcing/domain/source/helper/UnitOfWorkRouterTest.java
index f3286ff..5fa3a06 100644
--- a/libraries/eventsourcing/src/test/java/org/qi4j/library/eventsourcing/domain/source/helper/UnitOfWorkRouterTest.java
+++ b/libraries/eventsourcing/src/test/java/org/qi4j/library/eventsourcing/domain/source/helper/UnitOfWorkRouterTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.eventsourcing.domain.source.helper;
 
 import org.hamcrest.CoreMatchers;
diff --git a/libraries/fileconfig/build.gradle b/libraries/fileconfig/build.gradle
index 91f9366..830117a 100644
--- a/libraries/fileconfig/build.gradle
+++ b/libraries/fileconfig/build.gradle
@@ -1,9 +1,29 @@
-description = "Qi4j File Configuration Library provides platform specific file locations."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - FileConfig" }}
+description = "Apache Zest™ File Configuration Library provides platform specific file locations."
+
+jar { manifest { name = "Apache Zest™ Library - FileConfig" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
+  compile libraries.slf4j_api
 
   testCompile(project(":org.qi4j.core:org.qi4j.core.testsupport"))
 
diff --git a/libraries/fileconfig/dev-status.xml b/libraries/fileconfig/dev-status.xml
index a0c9fbb..bdf00e7 100644
--- a/libraries/fileconfig/dev-status.xml
+++ b/libraries/fileconfig/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/libraries/fileconfig/src/docs/fileconfig.txt b/libraries/fileconfig/src/docs/fileconfig.txt
index 9c42e89..ac973e6 100644
--- a/libraries/fileconfig/src/docs/fileconfig.txt
+++ b/libraries/fileconfig/src/docs/fileconfig.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[library-fileconfig,FileConfig Library]]
 = FileConfig =
 
@@ -8,7 +27,7 @@
 
 The FileConfig library provide a service for accessing application-specific directories.
 
-A lot of the Qi4j Libraries and Extensions make use of this library to locate files.
+A lot of the Zest™ Libraries and Extensions make use of this library to locate files.
 
 include::../../build/docs/buildinfo/artifact.txt[]
 
diff --git a/libraries/fileconfig/src/main/java/org/qi4j/library/fileconfig/FileConfigurationService.java b/libraries/fileconfig/src/main/java/org/qi4j/library/fileconfig/FileConfigurationService.java
index f1a1e3e..9bc1941 100644
--- a/libraries/fileconfig/src/main/java/org/qi4j/library/fileconfig/FileConfigurationService.java
+++ b/libraries/fileconfig/src/main/java/org/qi4j/library/fileconfig/FileConfigurationService.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.fileconfig;
 
 import java.io.File;
@@ -111,7 +129,7 @@
 
             data.user().set( new File( user ) );
 
-            // Set application name. This is taken from the Qi4j application but can be overriden by a system property
+            // Set application name. This is taken from the Zest application but can be overriden by a system property
             String application = System.getProperty( "application", app.name() );
 
             if ( !app.mode().equals( Application.Mode.production ) ) {
diff --git a/libraries/fileconfig/src/main/java/org/qi4j/library/fileconfig/package.html b/libraries/fileconfig/src/main/java/org/qi4j/library/fileconfig/package.html
index 03a68a4..03b5188 100644
--- a/libraries/fileconfig/src/main/java/org/qi4j/library/fileconfig/package.html
+++ b/libraries/fileconfig/src/main/java/org/qi4j/library/fileconfig/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>FileConfiguration Library.</h2>
diff --git a/libraries/fileconfig/src/main/resources/org/qi4j/library/fileconfig/FileConfiguration_mac.properties b/libraries/fileconfig/src/main/resources/org/qi4j/library/fileconfig/FileConfiguration_mac.properties
index 759ec35..7afb96e 100644
--- a/libraries/fileconfig/src/main/resources/org/qi4j/library/fileconfig/FileConfiguration_mac.properties
+++ b/libraries/fileconfig/src/main/resources/org/qi4j/library/fileconfig/FileConfiguration_mac.properties
@@ -1,3 +1,18 @@
+# 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.
+
 configuration={user}/Library/Preferences/{application}
 data={user}/Library/Application Support/{application}
 temporary={temp}/{application}
diff --git a/libraries/fileconfig/src/main/resources/org/qi4j/library/fileconfig/FileConfiguration_unix.properties b/libraries/fileconfig/src/main/resources/org/qi4j/library/fileconfig/FileConfiguration_unix.properties
index 09b4fc6..4ddf896 100644
--- a/libraries/fileconfig/src/main/resources/org/qi4j/library/fileconfig/FileConfiguration_unix.properties
+++ b/libraries/fileconfig/src/main/resources/org/qi4j/library/fileconfig/FileConfiguration_unix.properties
@@ -1,3 +1,18 @@
+# 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.
+
 configuration={user}/.{application}/etc
 data={user}/.{application}/data
 temporary={temp}/{application}
diff --git a/libraries/fileconfig/src/main/resources/org/qi4j/library/fileconfig/FileConfiguration_windows.properties b/libraries/fileconfig/src/main/resources/org/qi4j/library/fileconfig/FileConfiguration_windows.properties
index 0c7ba86..d338484 100644
--- a/libraries/fileconfig/src/main/resources/org/qi4j/library/fileconfig/FileConfiguration_windows.properties
+++ b/libraries/fileconfig/src/main/resources/org/qi4j/library/fileconfig/FileConfiguration_windows.properties
@@ -1,3 +1,18 @@
+# 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.
+
 configuration={user}/Application Data/{application}/conf
 data={user}/Application Data/{application}/data
 temporary={temp}/{application}
diff --git a/libraries/fileconfig/src/test/java/org/qi4j/library/fileconfig/FileConfiguration_mac.properties b/libraries/fileconfig/src/test/java/org/qi4j/library/fileconfig/FileConfiguration_mac.properties
index 081cdd5..0c28ceb 100644
--- a/libraries/fileconfig/src/test/java/org/qi4j/library/fileconfig/FileConfiguration_mac.properties
+++ b/libraries/fileconfig/src/test/java/org/qi4j/library/fileconfig/FileConfiguration_mac.properties
@@ -1,3 +1,18 @@
+# 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.
+
 # Get HOME from environment variables
 configuration={environment.HOME}/Library/Preferences/{application}
 
diff --git a/libraries/http/build.gradle b/libraries/http/build.gradle
index bfb49c9..bf7489b 100644
--- a/libraries/http/build.gradle
+++ b/libraries/http/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j Http Library provides embedded Jetty for Qi4j application use."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - Http" }}
+description = "Apache Zest™ Http Library provides embedded Jetty for Apache Zest™ application use."
+
+jar { manifest { name = "Apache Zest™ Library - Http" }}
 
 test {
   systemProperties 'networkaddress.cache.ttl': '0'
diff --git a/libraries/http/dev-status.xml b/libraries/http/dev-status.xml
index a0c9fbb..bdf00e7 100644
--- a/libraries/http/dev-status.xml
+++ b/libraries/http/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/libraries/http/src/docs/http.txt b/libraries/http/src/docs/http.txt
index e51b189..7e4b904 100644
--- a/libraries/http/src/docs/http.txt
+++ b/libraries/http/src/docs/http.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[library-http, HTTP Library]]
 = HTTP =
 
@@ -10,7 +29,7 @@
 filters assembly as Services.
 
 It's an easy way to embedd a servlet container and reuse everything that can be run in it (JAX-*, Restlet, Wicket,
-Vaadin, GWT etc..). If instead you want to run a Qi4j Application in a servlet container, see <<library-servlet>>.
+Vaadin, GWT etc..). If instead you want to run a Zest™ Application in a servlet container, see <<library-servlet>>.
 
 include::../../build/docs/buildinfo/artifact.txt[]
 
@@ -71,7 +90,7 @@
 
 === Configuration ===
 
-Underlying Jetty engine configuration is exposed as a Qi4j Service Configuration.
+Underlying Jetty engine configuration is exposed as a Zest™ Service Configuration.
 The only one that is mandatory is the port.
 
 See org.qi4j.library.http.JettyConfiguration for a reference of all available
@@ -112,7 +131,3 @@
 configuration properties.
 
 
-== Logging ==
-
-The SLF4J logger used by this library is named "org.qi4j.library.http".
-
diff --git a/libraries/http/src/main/java/org/qi4j/library/http/package.html b/libraries/http/src/main/java/org/qi4j/library/http/package.html
index 0a1cb1b..1451cf5 100644
--- a/libraries/http/src/main/java/org/qi4j/library/http/package.html
+++ b/libraries/http/src/main/java/org/qi4j/library/http/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>HTTP Library.</h2>
diff --git a/libraries/http/src/test/java/org/qi4j/library/http/dns/LocalManagedDns.java b/libraries/http/src/test/java/org/qi4j/library/http/dns/LocalManagedDns.java
index e411257..0fd6dc8 100644
--- a/libraries/http/src/test/java/org/qi4j/library/http/dns/LocalManagedDns.java
+++ b/libraries/http/src/test/java/org/qi4j/library/http/dns/LocalManagedDns.java
@@ -64,7 +64,6 @@
             log += " on non-managed name (" + name + ")";
             result = DEFAULT_DNS.lookupAllHostAddr( name );
         }
-        System.out.println( log + " will return: " + Arrays.toString( result ) );
         return result;
     }
 
diff --git a/libraries/http/src/test/resources/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor b/libraries/http/src/test/resources/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor
index 0f35325..ab17218 100644
--- a/libraries/http/src/test/resources/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor
+++ b/libraries/http/src/test/resources/META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor
@@ -1 +1,16 @@
+# 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.
+
 org.qi4j.library.http.dns.LocalManagedDnsDescriptor
\ No newline at end of file
diff --git a/libraries/http/src/test/resources/logback.xml b/libraries/http/src/test/resources/logback.xml
index 2e7627c..dcbdae2 100644
--- a/libraries/http/src/test/resources/logback.xml
+++ b/libraries/http/src/test/resources/logback.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
 <configuration>
 
     <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
diff --git a/libraries/invocation-cache/build.gradle b/libraries/invocation-cache/build.gradle
index 8079092..332d3d3 100644
--- a/libraries/invocation-cache/build.gradle
+++ b/libraries/invocation-cache/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j Invocation Cache Library provides caching framework for methods."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - Invocation Cache" }}
+description = "Apache Zest™ Invocation Cache Library provides caching framework for methods."
+
+jar { manifest { name = "Apache Zest™ Library - Invocation Cache" }}
 
 dependencies {
   compile( project(":org.qi4j.core:org.qi4j.core.api") )
diff --git a/libraries/invocation-cache/dev-status.xml b/libraries/invocation-cache/dev-status.xml
index f1a9f29..7ea746d 100644
--- a/libraries/invocation-cache/dev-status.xml
+++ b/libraries/invocation-cache/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/libraries/invocation-cache/src/docs/invocation-cache.txt b/libraries/invocation-cache/src/docs/invocation-cache.txt
index 113ce76..e613c6b 100644
--- a/libraries/invocation-cache/src/docs/invocation-cache.txt
+++ b/libraries/invocation-cache/src/docs/invocation-cache.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[library-invocation-cache, Invocation Cache Library]]
 = Invocation Cache =
 
@@ -6,9 +25,72 @@
 source=libraries/invocation-cache/dev-status.xml
 --------------
 
-The Invocation Cache Library provides constructs to easily cache composite methods invocations.
-It has nothing to do with the <<core-spi-cache>>.
+The Invocation Cache Library provides constructs to easily cache the return value of
+method invocations on composites.
 
-NOTE: This Library has no documentation yet. Learn how to contribute in <<community-docs>>.
+NOTE: It has nothing to do with the <<core-spi-cache>>.
 
 include::../../build/docs/buildinfo/artifact.txt[]
+
+
+By applying one of the <<def-concern,Concerns>> it is possible to cache the return values of method
+calls. The concern will in turn delegate to the +InvocationCache+ that is expected to be a
+<<def-private-mixin>> in the same composite.
+
+== +@Cached+ ==
+This annotation is used to mark the methods that should be considered for caching. Only if a
+caching concern has been defined and that an +InvocationCache+ implementation mixin has been provided
+will the caching actually take place.
+
+== +ReturnCachedValueConcern+ ==
+This generic mixin implementation will first look in the cache and see if the value is there, if so the value
+is unconditionally returned to the caller.
+
+This concern skip its function if there is no +InvocationCache+ mixin declared on the composite or if the method
+has a +void+ return type.
+
+== +ReturnCachedValueOnExceptionConcern+ ==
+This generic mixin implementation will first call the method, and if it fails with an Exception, it will try to
+return a value from the cache. If no value is present in the cache (i.e. null is returned from the cache) then
+the exception will be rethrown.
+
+This concern skip its function if there is no +InvocationCache+ mixin declared on the composite or if the method
+has a +void+ return type.
+
+== Example ==
+
+Let's say that we have some service that is very expensive to call.
+
+[snippet,java]
+----
+source=libraries/invocation-cache/src/test/java/org/qi4j/library/invocationcache/DocumentationSupport.java
+tag=composite
+----
+
+And we know that the argument combinations into this method are relatively few, we can simply declare the
++SimpleInvocationCache+ mixin implementation to store the permutations and return them if already been
+provided.
+
+[snippet,java]
+----
+source=libraries/invocation-cache/src/test/java/org/qi4j/library/invocationcache/DocumentationSupport.java
+tag=assembly
+----
+
+It is important to realize that the +SimpleInvocationCache+ implementation never drops the cached values,
+and it is not possible to instruct it to do so. So, in most cases it is required to implement the +InvocationCache+
+interface yourself, and choose a caching strategy that works for you.
+
+== Custom +InvocationCache+ implementation ==
+The interface to implement is very straight forward. It is important to realize that the implementation is a
+<<def-private-mixin>> of the composite where the caching is applied, and not a separate service. So, if
+the implementation is expecting to be part of an entity, it is possible to have
+
+[source,java]
+----
+@This
+private Identity myIdentity;
+----
+
+to get hold of the current entity's +Identity+. This approach makes the caching a lot simpler than if a separate
+service would have been used instead, but still possible to delegate to such.
\ No newline at end of file
diff --git a/libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/CacheInvocationResultSideEffect.java b/libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/CacheInvocationResultSideEffect.java
deleted file mode 100644
index fb3e73b..0000000
--- a/libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/CacheInvocationResultSideEffect.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2007 Rickard Öberg.
- *
- * Licensed  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.qi4j.library.invocationcache;
-
-import java.lang.reflect.Method;
-import java.util.Arrays;
-import org.qi4j.api.common.AppliesTo;
-import org.qi4j.api.injection.scope.Invocation;
-import org.qi4j.api.injection.scope.This;
-import org.qi4j.api.sideeffect.GenericSideEffect;
-
-/**
- * Cache result of @Cached method calls.
- */
-@AppliesTo( Cached.class )
-public class CacheInvocationResultSideEffect
-    extends GenericSideEffect
-{
-    @This
-    private InvocationCache cache;
-    @Invocation
-    private Method method;
-
-    @Override
-    public Object invoke( Object proxy, Method method, Object[] args )
-        throws Throwable
-    {
-        // Get value
-        // if an exception is thrown, don't do anything
-        Object res = result.invoke( proxy, method, args );
-        if( res == null )
-        {
-            res = Void.TYPE;
-        }
-        String cacheName = method.getName();
-        if( args != null )
-        {
-            cacheName += Arrays.asList( args );
-        }
-        Object oldResult = cache.cachedValue( cacheName );
-        if( oldResult == null || !oldResult.equals( result ) )
-        {
-            cache.setCachedValue( cacheName, result );
-        }
-        return result;
-    }
-}
diff --git a/libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/InvalidateCacheOnSettersSideEffect.java b/libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/InvalidateCacheOnSettersSideEffect.java
deleted file mode 100644
index f819a76..0000000
--- a/libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/InvalidateCacheOnSettersSideEffect.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright 2007 Rickard Öberg.
- *
- * Licensed  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.qi4j.library.invocationcache;
-
-import java.lang.reflect.Method;
-import org.qi4j.api.common.AppliesTo;
-import org.qi4j.api.common.AppliesToFilter;
-import org.qi4j.api.injection.scope.This;
-import org.qi4j.api.sideeffect.GenericSideEffect;
-
-/**
- * Invalidate cache on setters.
- */
-@AppliesTo( InvalidateCacheOnSettersSideEffect.AppliesTo.class )
-public class InvalidateCacheOnSettersSideEffect
-    extends GenericSideEffect
-{
-    public static class AppliesTo
-        implements AppliesToFilter
-    {
-        @Override
-        public boolean appliesTo( Method method, Class<?> mixin, Class<?> compositeType, Class<?> modifierClass )
-        {
-            return !( method.getDeclaringClass().equals( InvocationCache.class )
-                      || method.getDeclaringClass().equals( InvocationCacheMixin.class ) );
-
-        }
-    }
-
-    @This
-    private InvocationCache cache;
-
-    @Override
-    protected void invoke( Method method, Object[] args )
-    {
-        cache.clearCachedValues();
-    }
-}
diff --git a/libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/InvocationCache.java b/libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/InvocationCache.java
index 7d83355..4ab8e9c 100644
--- a/libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/InvocationCache.java
+++ b/libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/InvocationCache.java
@@ -17,9 +17,12 @@
  */
 package org.qi4j.library.invocationcache;
 
+import org.qi4j.api.mixin.Mixins;
+
 /**
  * Invocation Cache.
  */
+@Mixins( SimpleInvocationCacheMixin.class )
 public interface InvocationCache
 {
     Object setCachedValue( String name, Object aResult );
diff --git a/libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/InvocationCacheAbstractComposite.java b/libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/InvocationCacheAbstractComposite.java
deleted file mode 100644
index 183c490..0000000
--- a/libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/InvocationCacheAbstractComposite.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2007 Rickard Öberg.
- *
- * Licensed  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.qi4j.library.invocationcache;
-
-import org.qi4j.api.concern.Concerns;
-import org.qi4j.api.mixin.Mixins;
-import org.qi4j.api.sideeffect.SideEffects;
-
-/**
- * JAVADOC
- */
-@Mixins( InvocationCacheMixin.class )
-@Concerns( ReturnCachedValueOnExceptionConcern.class )
-@SideEffects( { CacheInvocationResultSideEffect.class, InvalidateCacheOnSettersSideEffect.class } )
-public interface InvocationCacheAbstractComposite
-{
-}
diff --git a/libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/ReturnCachedValueConcern.java b/libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/ReturnCachedValueConcern.java
index 8c0d2d2..9ad0d3f 100644
--- a/libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/ReturnCachedValueConcern.java
+++ b/libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/ReturnCachedValueConcern.java
@@ -21,6 +21,7 @@
 import java.lang.reflect.Method;
 import java.util.Arrays;
 import org.qi4j.api.common.AppliesTo;
+import org.qi4j.api.common.Optional;
 import org.qi4j.api.concern.ConcernOf;
 import org.qi4j.api.injection.scope.Invocation;
 import org.qi4j.api.injection.scope.This;
@@ -33,34 +34,29 @@
     extends ConcernOf<InvocationHandler>
     implements InvocationHandler
 {
-    @This
+    @This @Optional
     private InvocationCache cache;
-    @Invocation
-    private Method method;
 
     @Override
     public Object invoke( Object proxy, Method method, Object[] args )
         throws Throwable
     {
-        // Try cache
-        String cacheName = method.getName();
-        if( args != null )
+        boolean voidReturnType = method.getReturnType().equals( Void.TYPE );
+        if( cache != null || voidReturnType )
         {
-            cacheName += Arrays.asList( args );
-        }
-        Object result = cache.cachedValue( cacheName );
-        if( result != null )
-        {
-            if( result == Void.TYPE )
+            // Try cache
+            String cacheName = method.getName();
+            if( args != null )
             {
-                return null;
+                cacheName += Arrays.asList( args );
             }
-            else
+            Object result = cache.cachedValue( cacheName );
+            if( result != null )
             {
                 return result;
             }
         }
-        // No cached value found - call method
+        // No cached value found or no InvocationCache defined - call method
         return next.invoke( proxy, method, args );
     }
 }
diff --git a/libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/ReturnCachedValueOnExceptionConcern.java b/libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/ReturnCachedValueOnExceptionConcern.java
index 400baf5..1287b39 100644
--- a/libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/ReturnCachedValueOnExceptionConcern.java
+++ b/libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/ReturnCachedValueOnExceptionConcern.java
@@ -42,32 +42,29 @@
     public Object invoke( Object proxy, Method method, Object[] args )
         throws Throwable
     {
-        try
+        boolean voidReturnType = method.getReturnType().equals( Void.TYPE );
+        if( cache != null || voidReturnType ) // Skip if void return type or no InvocationCache has been defined.
         {
-            // Invoke method
-            return next.invoke( proxy, method, args );
-        }
-        catch( Exception e )
-        {
-            // Try cache
             String cacheName = method.getName();
             if( args != null )
             {
                 cacheName += Arrays.asList( args );
             }
-            Object result = cache.cachedValue( cacheName );
-            if( result != null )
+            try
             {
-                if( result == Void.TYPE )
-                {
-                    return null;
-                }
-                else
-                {
-                    return result;
-                }
+                // Invoke method
+                Object result = next.invoke( proxy, method, args );
+                // update cache
+                cache.setCachedValue( cacheName, result );
+                return result;
             }
-            throw e;
+            catch( Exception e )
+            {
+                // Try cache
+                return cache.cachedValue( cacheName );
+            }
         }
+        // if no InvocationCache is present.
+        return next.invoke( proxy, method, args );
     }
 }
diff --git a/libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/InvocationCacheMixin.java b/libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/SimpleInvocationCacheMixin.java
similarity index 75%
rename from libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/InvocationCacheMixin.java
rename to libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/SimpleInvocationCacheMixin.java
index b45a4a3..5897412 100644
--- a/libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/InvocationCacheMixin.java
+++ b/libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/SimpleInvocationCacheMixin.java
@@ -21,9 +21,18 @@
 import java.util.concurrent.ConcurrentHashMap;
 
 /**
- * Default implementation of InvocationCache.
+ * Simple implementation of InvocationCache.
+ * <p>
+ * This {@link InvocationCache} should typically not be used at all, and only serves as an
+ * example. The @{code cachedValues} member is never emptied, so it constitutes a memory leak
+ * if the method arguments keep changing.
+ * </p>
+ * <p>
+ * <b>IMPORTANT: Only use this is you know that only a small set of arguments are used into your
+ * method(s).</b>
+ * </p>
  */
-public class InvocationCacheMixin
+public class SimpleInvocationCacheMixin
     implements InvocationCache
 {
     private final Map<String, Object> cachedValues = new ConcurrentHashMap<>();
diff --git a/libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/package.html b/libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/package.html
index 4109884..09f0a48 100644
--- a/libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/package.html
+++ b/libraries/invocation-cache/src/main/java/org/qi4j/library/invocationcache/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Invocation Cache Library.</h2>
diff --git a/libraries/invocation-cache/src/test/java/org/qi4j/library/invocationcache/DocumentationSupport.java b/libraries/invocation-cache/src/test/java/org/qi4j/library/invocationcache/DocumentationSupport.java
new file mode 100644
index 0000000..782ce76
--- /dev/null
+++ b/libraries/invocation-cache/src/test/java/org/qi4j/library/invocationcache/DocumentationSupport.java
@@ -0,0 +1,51 @@
+/*
+ * 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.qi4j.library.invocationcache;
+
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.LayerAssembly;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.bootstrap.layered.ModuleAssembler;
+
+public class DocumentationSupport
+{
+// START SNIPPET: composite
+    public interface ExpensiveOperation
+    {
+        @Cached
+        double compute( double... arguments );
+    }
+// END SNIPPET: composite
+
+// START SNIPPET: assembly
+    public class ExpensiveModuleAssembler
+        implements ModuleAssembler{
+
+        @Override
+        public ModuleAssembly assemble( LayerAssembly layer, ModuleAssembly module )
+            throws AssemblyException
+        {
+            module.services( ExpensiveOperation.class )
+                .withMixins( SimpleInvocationCacheMixin.class )
+                .withConcerns( ReturnCachedValueConcern.class );
+            return module;
+        }
+    }
+// END SNIPPET: assembly
+}
diff --git a/libraries/jmx/build.gradle b/libraries/jmx/build.gradle
index 3216061..79193da 100644
--- a/libraries/jmx/build.gradle
+++ b/libraries/jmx/build.gradle
@@ -1,9 +1,29 @@
-description = "Qi4j JMX Library provides Java Management Extension (JMX) integration for Qi4j applications."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - JMX" }}
+description = "Apache Zest™ JMX Library provides Java Management Extension (JMX) integration for Apache Zest™ applications."
+
+jar { manifest { name = "Apache Zest™ Library - JMX" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
+  compile libraries.slf4j_api
 
   testCompile(project(":org.qi4j.core:org.qi4j.core.testsupport"))
 
diff --git a/libraries/jmx/dev-status.xml b/libraries/jmx/dev-status.xml
index 672ec3b..f549c99 100644
--- a/libraries/jmx/dev-status.xml
+++ b/libraries/jmx/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/libraries/jmx/src/docs/jmx.txt b/libraries/jmx/src/docs/jmx.txt
index fc5f1f0..b8421a4 100644
--- a/libraries/jmx/src/docs/jmx.txt
+++ b/libraries/jmx/src/docs/jmx.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[library-jmx, JMX Library]]
 = JMX =
 
@@ -6,7 +25,7 @@
 source=libraries/jmx/dev-status.xml
 --------------
 
-The JMX library provides a service that exposes a Qi4j app in
+The JMX library provides a service that exposes a Zest™ app in
 JMX automatically, giving you an opportunity to inspect the app much as
 you would with the <<tools-envisage>> tool.
 
diff --git a/libraries/jmx/src/main/java/org/qi4j/library/jmx/ApplicationManagerService.java b/libraries/jmx/src/main/java/org/qi4j/library/jmx/ApplicationManagerService.java
index 58062f8..1c31255 100644
--- a/libraries/jmx/src/main/java/org/qi4j/library/jmx/ApplicationManagerService.java
+++ b/libraries/jmx/src/main/java/org/qi4j/library/jmx/ApplicationManagerService.java
@@ -33,29 +33,29 @@
 import org.qi4j.api.service.ServiceComposite;
 import org.qi4j.api.service.ServiceDescriptor;
 import org.qi4j.api.service.ServiceReference;
-import org.qi4j.api.service.qualifier.ServiceQualifier;
 import org.qi4j.api.structure.Application;
 import org.qi4j.api.structure.Layer;
 import org.qi4j.api.structure.LayerDescriptor;
 import org.qi4j.api.structure.Module;
 import org.qi4j.api.structure.ModuleDescriptor;
 import org.qi4j.functional.HierarchicalVisitorAdapter;
-import org.qi4j.functional.Iterables;
 
+import static org.qi4j.api.service.qualifier.ServiceQualifier.withId;
+import static org.qi4j.functional.Iterables.filter;
 import static org.qi4j.functional.Iterables.first;
 
 /**
- * Expose the Qi4j app as a "tree" of MBeans.
+ * Expose the Zest app as a "tree" of MBeans.
  *
  * Other services should reuse the object names and create
  * nodes under the ones created here. For example:
  * <pre>
- * Qi4j:application=MyApp,layer=Application,module=MyModule,class=Service,service=MyService
+ * Zest:application=MyApp,layer=Application,module=MyModule,class=Service,service=MyService
  * </pre>
  * is exported by this service, so another exporter showing some aspect related to this service should
  * use this as base for the ObjectName, and add their own properties. Example:
  * <pre>
- * Qi4j:application=MyApp,layer=Application,module=MyModule,class=Service,service=MyService,name=Configuration
+ * Zest:application=MyApp,layer=Application,module=MyModule,class=Service,service=MyService,name=Configuration
  * </pre>
  * Use the following snippet to find the ObjectName of a service with a given identity:
  * <pre>
@@ -69,32 +69,31 @@
 {
 
     void exportApplicationStructure()
-            throws Exception;
+        throws Exception;
 
     void unexportApplicationStructure()
-            throws Exception;
+        throws Exception;
 
-    static class Activator
-            extends ActivatorAdapter<ServiceReference<ApplicationManagerService>>
+    class Activator
+        extends ActivatorAdapter<ServiceReference<ApplicationManagerService>>
     {
 
         @Override
         public void afterActivation( ServiceReference<ApplicationManagerService> activated )
-                throws Exception
+            throws Exception
         {
             activated.get().exportApplicationStructure();
         }
 
         @Override
         public void beforePassivation( ServiceReference<ApplicationManagerService> passivating )
-                throws Exception
+            throws Exception
         {
             passivating.get().unexportApplicationStructure();
         }
-
     }
 
-    static abstract class Mixin
+    abstract class Mixin
         implements ApplicationManagerService
     {
         @Service
@@ -103,7 +102,7 @@
         @Structure
         public Application application;
 
-        private List<ObjectName> mbeans = new ArrayList<ObjectName>();
+        private List<ObjectName> mbeans = new ArrayList<>();
 
         @Override
         public void exportApplicationStructure()
@@ -113,7 +112,7 @@
             {
                 Layer layer;
                 Module module;
-                Stack<ObjectName> names = new Stack<ObjectName>();
+                Stack<ObjectName> names = new Stack<>();
 
                 @Override
                 public boolean visitEnter( Object visited )
@@ -125,17 +124,15 @@
                         layer = application.findLayer( layerDescriptor.name() );
 
                         LayerBean layerBean = new LayerBean( layer, layerDescriptor );
-                        ObjectName objectName = new ObjectName( "Qi4j:application=" + application.name() + ",layer=" + layer
+                        ObjectName objectName = new ObjectName( "Zest:application=" + application.name() + ",layer=" + layer
                             .name() );
                         names.push( objectName );
 
                         RequiredModelMBean mbean = new ModelMBeanBuilder( objectName, layerDescriptor.name(), LayerBean.class
                             .getName() ).
                             attribute( "uses", "Layer usages", String.class.getName(), "Other layers that this layer uses", "getUses", null )
-                            .
-                                operation( "restart", "Restart layer", String.class.getName(), MBeanOperationInfo.ACTION_INFO )
-                            .
-                                newModelMBean();
+                            .operation( "restart", "Restart layer", String.class.getName(), MBeanOperationInfo.ACTION_INFO )
+                            .newModelMBean();
 
                         mbean.setManagedResource( layerBean, "ObjectReference" );
                         server.registerMBean( mbean, objectName );
@@ -164,7 +161,7 @@
                         ServiceDescriptor serviceDescriptor = (ServiceDescriptor) visited;
                         ObjectName objectName = new ObjectName( names.peek()
                                                                     .toString() + ",class=Service,service=" + serviceDescriptor
-                            .identity() );
+                                                                    .identity() );
                         RequiredModelMBean mbean = new ModelMBeanBuilder( objectName, serviceDescriptor.identity(), ServiceBean.class
                             .getName() ).
                             attribute( "Id", "Service id", String.class.getName(), "Id of service", "getId", null ).
@@ -190,7 +187,7 @@
                         ImportedServiceDescriptor importedServiceDescriptor = (ImportedServiceDescriptor) visited;
                         ObjectName objectName = new ObjectName( names.peek()
                                                                     .toString() + ",class=Imported service,importedservice=" + importedServiceDescriptor
-                            .identity() );
+                                                                    .identity() );
                         RequiredModelMBean mbean = new ModelMBeanBuilder( objectName, importedServiceDescriptor.identity(), ImportedServiceBean.class
                             .getName() ).
                             attribute( "Id", "Service id", String.class.getName(), "Id of service", "getId", null ).
@@ -234,7 +231,7 @@
         }
     }
 
-    public static class LayerBean
+    class LayerBean
     {
         private final Layer layer;
         private final LayerDescriptor layerDescriptor;
@@ -273,7 +270,7 @@
         }
     }
 
-    public static class ServiceBean
+    class ServiceBean
     {
         private final ServiceDescriptor serviceDescriptor;
         private final Module module;
@@ -296,27 +293,38 @@
 
         public String getType()
         {
-            return first( serviceDescriptor.types() ).getName();
+            Class<?> first = first( serviceDescriptor.types() );
+            if( first == null )
+            {
+                return null;
+            }
+            return first.getName();
         }
 
         public boolean isActive()
         {
-            return Iterables.first( Iterables.filter( ServiceQualifier.withId( serviceDescriptor.identity() ), module.findServices( first( serviceDescriptor
-                                                                                                                                               .types() ) ) ) )
-                .isActive();
+            Class<?> mainType = first( serviceDescriptor.types() );
+            ServiceReference<?> first = first( filter( withId( serviceDescriptor.identity() ),
+                                                       module.findServices( mainType ) )
+            );
+            return first != null && first.isActive();
         }
 
         public boolean isAvailable()
         {
-            return Iterables.first( Iterables.filter( ServiceQualifier.withId( serviceDescriptor.identity() ), module.findServices( first( serviceDescriptor
-                                                                                                                                               .types() ) ) ) )
-                .isAvailable();
+            Class<?> mainType = first( serviceDescriptor.types() );
+            ServiceReference<?> first = first( filter( withId( serviceDescriptor.identity() ),
+                                                       module.findServices( mainType ) )
+            );
+            return first != null && first.isAvailable();
         }
 
         public String restart()
         {
-            Iterable services = module.findServices( first( serviceDescriptor.types() ) );
-            ServiceReference serviceRef = ( ServiceReference ) Iterables.first( Iterables.filter( ServiceQualifier.withId( serviceDescriptor.identity() ), services ) );
+            Iterable<?> services = module.findServices( first( serviceDescriptor.types() ) );
+            ServiceReference<?> serviceRef = (ServiceReference) first( filter( withId( serviceDescriptor.identity() ),
+                                                                               services )
+            );
             if( serviceRef != null )
             {
                 try
@@ -337,7 +345,7 @@
         }
     }
 
-    public static class ImportedServiceBean
+    class ImportedServiceBean
     {
         private final ImportedServiceDescriptor serviceDescriptor;
 
@@ -358,7 +366,12 @@
 
         public String getType()
         {
-            return first( serviceDescriptor.types() ).getName();
+            Class<?> mainType = first( serviceDescriptor.types() );
+            if( mainType == null )
+            {
+                return null;
+            }
+            return mainType.getName();
         }
     }
 }
diff --git a/libraries/jmx/src/main/java/org/qi4j/library/jmx/MBeanTracker.java b/libraries/jmx/src/main/java/org/qi4j/library/jmx/MBeanTracker.java
index b665a66..5fe667c 100644
--- a/libraries/jmx/src/main/java/org/qi4j/library/jmx/MBeanTracker.java
+++ b/libraries/jmx/src/main/java/org/qi4j/library/jmx/MBeanTracker.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.jmx;
 
 import java.util.ArrayList;
diff --git a/libraries/jmx/src/main/java/org/qi4j/library/jmx/Qi4jMBeans.java b/libraries/jmx/src/main/java/org/qi4j/library/jmx/Qi4jMBeans.java
index 9ec0e95..fd71a45 100644
--- a/libraries/jmx/src/main/java/org/qi4j/library/jmx/Qi4jMBeans.java
+++ b/libraries/jmx/src/main/java/org/qi4j/library/jmx/Qi4jMBeans.java
@@ -20,7 +20,7 @@
 import org.qi4j.functional.Specification;
 
 /**
- * Helper for working with Qi4j MBeans.
+ * Helper for working with Zest MBeans.
  */
 public class Qi4jMBeans
 {
@@ -36,7 +36,7 @@
                 return item.getKeyPropertyList().size() == 5;
             }
 
-        }, server.queryNames( new ObjectName( "Qi4j:application=" + applicationName + ",*,service=" + serviceId ), null ) ) );
+        }, server.queryNames( new ObjectName( "Zest:application=" + applicationName + ",*,service=" + serviceId ), null ) ) );
     }
 
 }
diff --git a/libraries/jmx/src/main/java/org/qi4j/library/jmx/package.html b/libraries/jmx/src/main/java/org/qi4j/library/jmx/package.html
index 714706b..474e84b 100644
--- a/libraries/jmx/src/main/java/org/qi4j/library/jmx/package.html
+++ b/libraries/jmx/src/main/java/org/qi4j/library/jmx/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>JMX Library.</h2>
diff --git a/libraries/lang-beanshell/README.txt b/libraries/lang-beanshell/README.txt
new file mode 100644
index 0000000..aeee619
--- /dev/null
+++ b/libraries/lang-beanshell/README.txt
@@ -0,0 +1,10 @@
+
+BeanShell is licensed under LGPL, and Apache Software Foundation
+doesn't allow the use of LGPL in Apache projects.
+
+Therefor, Apache Zest™ had to drop this library component, but
+it is still available for separate download at
+
+https://github.com/Qi4j/qi4j-sdk
+
+in the libraries/lang-beanshell directory.
diff --git a/libraries/lang-beanshell/build.gradle b/libraries/lang-beanshell/build.gradle
deleted file mode 100644
index 72eb3ba..0000000
--- a/libraries/lang-beanshell/build.gradle
+++ /dev/null
@@ -1,14 +0,0 @@
-description = "Qi4j BeanShell Library allows for Mixins to be implemented in BeanShell (Java) scripts instead of directly in compiled Java."
-
-jar { manifest { name = "Qi4j Library - Scripting - BeanShell" }}
-
-dependencies {
-  compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
-  compile( project( ':org.qi4j.libraries:org.qi4j.library.scripting' ))
-  compile(libraries.beanshell)
-
-  testCompile(project(":org.qi4j.core:org.qi4j.core.testsupport"))
-
-  testRuntime(project(":org.qi4j.core:org.qi4j.core.runtime"))
-  testRuntime(libraries.logback)
-}
diff --git a/libraries/lang-beanshell/dev-status.xml b/libraries/lang-beanshell/dev-status.xml
deleted file mode 100644
index 654d3aa..0000000
--- a/libraries/lang-beanshell/dev-status.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
-        http://www.qi4j.org/schemas/2008/dev-status/1/dev-status.xsd">
-  <status>
-    <!--none,early,beta,stable,mature-->
-    <codebase>beta</codebase>
-
-    <!-- none, brief, good, complete -->
-    <documentation>none</documentation>
-
-    <!-- none, some, good, complete -->
-    <unittests>some</unittests>
-  </status>
-  <licenses>
-    <license>ALv2</license>
-  </licenses>
-</module>
\ No newline at end of file
diff --git a/libraries/lang-beanshell/licenses/lgpl.license b/libraries/lang-beanshell/licenses/lgpl.license
deleted file mode 100644
index 688e8a6..0000000
--- a/libraries/lang-beanshell/licenses/lgpl.license
+++ /dev/null
@@ -1,321 +0,0 @@
-TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-0. This License Agreement applies to any software library or other program
-which contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Lesser General
-Public License (also called "this License"). Each licensee is addressed as
-"you".
-
-A "library" means a collection of software functions and/or data prepared
-so as to be conveniently linked with application programs (which use some
-of those functions and data) to form executables.
-
-The "Library", below, refers to any such software library or work which
-has been distributed under these terms. A "work based on the Library"
-means either the Library or any derivative work under copyright law: that
-is to say, a work containing the Library or a portion of it, either
-verbatim or with modifications and/or translated straightforwardly into
-another language. (Hereinafter, translation is included without limitation
-in the term "modification".)
-
-"Source code" for a work means the preferred form of the work for making
-modifications to it. For a library, complete source code means all the
-source code for all modules it contains, plus any associated interface
-definition files, plus the scripts used to control compilation and
-installation of the library.
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of running a
-program using the Library is not restricted, and output from such a
-program is covered only if its contents constitute a work based on the
-Library (independent of the use of the Library in a tool for writing it).
-Whether that is true depends on what the Library does and what the program
-that uses the Library does.
-
-1. You may copy and distribute verbatim copies of the Library's complete
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the notices
-that refer to this License and to the absence of any warranty; and
-distribute a copy of this License along with the Library.
-
-You may charge a fee for the physical act of transferring a copy, and you
-may at your option offer warranty protection in exchange for a fee.
-
-2. You may modify your copy or copies of the Library or any portion of it,
-thus forming a work based on the Library, and copy and distribute such
-modifications or work under the terms of Section 1 above, provided that
-you also meet all of these conditions:
-
-    * a) The modified work must itself be a software library.
-    * b) You must cause the files modified to carry prominent notices
-         stating that you changed the files and the date of any change.
-    * c) You must cause the whole of the work to be licensed at no charge
-         to all third parties under the terms of this License.
-    * d) If a facility in the modified Library refers to a function or a
-         table of data to be supplied by an application program that uses
-         the facility, other than as an argument passed when the facility
-         is invoked, then you must make a good faith effort to ensure
-         that, in the event an application does not supply such function
-         or table, the facility still operates, and performs whatever part
-         of its purpose remains meaningful.
-
-      (For example, a function in a library to compute square roots has a
-      purpose that is entirely well-defined independent of the application.
-      Therefore, Subsection 2d requires that any application-supplied
-      function or table used by this function must be optional: if the
-      application does not supply it, the square root function must still
-      compute square roots.)
-
-These requirements apply to the modified work as a whole. If identifiable
-sections of that work are not derived from the Library, and can be
-reasonably considered independent and separate works in themselves, then
-this License, and its terms, do not apply to those sections when you
-distribute them as separate works. But when you distribute the same
-sections as part of a whole which is a work based on the Library, the
-distribution of the whole must be on the terms of this License, whose
-permissions for other licensees extend to the entire whole, and thus to
-each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest your
-rights to work written entirely by you; rather, the intent is to exercise
-the right to control the distribution of derivative or collective works
-based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of a
-storage or distribution medium does not bring the other work under the
-scope of this License.
-
-3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so that
-they refer to the ordinary GNU General Public License, version 2, instead
-of to this License. (If a newer version than version 2 of the ordinary GNU
-General Public License has appeared, then you can specify that version
-instead if you wish.) Do not make any other change in these notices.
-
-Once this change is made in a given copy, it is irreversible for that
-copy, so the ordinary GNU General Public License applies to all subsequent
-copies and derivative works made from that copy.
-
-This option is useful when you wish to copy part of the code of the
-Library into a program that is not a library.
-
-4. You may copy and distribute the Library (or a portion or derivative of
-it, under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you accompany it with the complete
-corresponding machine-readable source code, which must be distributed
-under the terms of Sections 1 and 2 above on a medium customarily used for
-software interchange.
-
-If distribution of object code is made by offering access to copy from a
-designated place, then offering equivalent access to copy the source code
-from the same place satisfies the requirement to distribute the source
-code, even though third parties are not compelled to copy the source along
-with the object code.
-
-5. A program that contains no derivative of any portion of the Library,
-but is designed to work with the Library by being compiled or linked with
-it, is called a "work that uses the Library". Such a work, in isolation,
-is not a derivative work of the Library, and therefore falls outside the
-scope of this License.
-
-However, linking a "work that uses the Library" with the Library creates
-an executable that is a derivative of the Library (because it contains
-portions of the Library), rather than a "work that uses the library". The
-executable is therefore covered by this License. Section 6 states terms
-for distribution of such executables.
-
-When a "work that uses the Library" uses material from a header file that
-is part of the Library, the object code for the work may be a derivative
-work of the Library even though the source code is not. Whether this is
-true is especially significant if the work can be linked without the
-Library, or if the work is itself a library. The threshold for this to be
-true is not precisely defined by law.
-
-If such an object file uses only numerical parameters, data structure
-layouts and accessors, and small macros and small inline functions (ten
-lines or less in length), then the use of the object file is unrestricted,
-regardless of whether it is legally a derivative work. (Executables
-containing this object code plus portions of the Library will still fall
-under Section 6.)
-
-Otherwise, if the work is a derivative of the Library, you may distribute
-the object code for the work under the terms of Section 6. Any executables
-containing that work also fall under Section 6, whether or not they are
-linked directly with the Library itself.
-
-6. As an exception to the Sections above, you may also combine or link a
-"work that uses the Library" with the Library to produce a work containing
-portions of the Library, and distribute that work under terms of your
-choice, provided that the terms permit modification of the work for the
-customer's own use and reverse engineering for debugging such
-modifications.
-
-You must give prominent notice with each copy of the work that the Library
-is used in it and that the Library and its use are covered by this
-License. You must supply a copy of this License. If the work during
-execution displays copyright notices, you must include the copyright
-notice for the Library among them, as well as a reference directing the
-user to the copy of this License. Also, you must do one of these things:
-
-    * a) Accompany the work with the complete corresponding machine-
-         readable source code for the Library including whatever changes
-         were used in the work (which must be distributed under Sections 1
-         and 2 above); and, if the work is an executable linked with the
-         Library, with the complete machine-readable "work that uses the
-         Library", as object code and/or source code, so that the user can
-         modify the Library and then relink to produce a modified
-         executable containing the modified Library. (It is understood
-         that the user who changes the contents of definitions files in
-         the Library will not necessarily be able to recompile the
-         application to use the modified definitions.)
-    * b) Use a suitable shared library mechanism for linking with the
-         Library. A suitable mechanism is one that (1) uses at run time a
-         copy of the library already present on the user's computer
-         system, rather than copying library functions into the
-         executable, and (2) will operate properly with a modified
-         version of the library, if the user installs one, as long as the
-         modified version is interface-compatible with the version that
-         the work was made with.
-    * c) Accompany the work with a written offer, valid for at least three
-         years, to give the same user the materials specified in
-         Subsection 6a, above, for a charge no more than the cost of
-         performing this distribution.
-    * d) If distribution of the work is made by offering access to copy
-         from a designated place, offer equivalent access to copy the
-         above specified materials from the same place.
-    * e) Verify that the user has already received a copy of these
-         materials or that you have already sent this user a copy.
-
-For an executable, the required form of the "work that uses the Library"
-must include any data and utility programs needed for reproducing the
-executable from it. However, as a special exception, the materials to be
-distributed need not include anything that is normally distributed (in
-either source or binary form) with the major components (compiler, kernel,
-and so on) of the operating system on which the executable runs, unless
-that component itself accompanies the executable.
-
-It may happen that this requirement contradicts the license restrictions
-of other proprietary libraries that do not normally accompany the
-operating system. Such a contradiction means you cannot use both them and
-the Library together in an executable that you distribute.
-
-7. You may place library facilities that are a work based on the Library
-side-by-side in a single library together with other library facilities
-not covered by this License, and distribute such a combined library,
-provided that the separate distribution of the work based on the Library
-and of the other library facilities is otherwise permitted, and provided
-that you do these two things:
-
-    * a) Accompany the combined library with a copy of the same work based
-         on the Library, uncombined with any other library facilities.
-         This must be distributed under the terms of the Sections above.
-    * b) Give prominent notice with the combined library of the fact that
-         part of it is a work based on the Library, and explaining where
-         to find the accompanying uncombined form of the same work.
-
-8. You may not copy, modify, sublicense, link with, or distribute the
-Library except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense, link with, or distribute the
-Library is void, and will automatically terminate your rights under this
-License. However, parties who have received copies, or rights, from you
-under this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-9. You are not required to accept this License, since you have not signed
-it. However, nothing else grants you permission to modify or distribute
-the Library or its derivative works. These actions are prohibited by law
-if you do not accept this License. Therefore, by modifying or distributing
-the Library (or any work based on the Library), you indicate your
-acceptance of this License to do so, and all its terms and conditions for
-copying, distributing or modifying the Library or works based on it.
-
-10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the original
-licensor to copy, distribute, link with or modify the Library subject to
-these terms and conditions. You may not impose any further restrictions on
-the recipients' exercise of the rights granted herein. You are not
-responsible for enforcing compliance by third parties with this License.
-
-11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot distribute
-so as to satisfy simultaneously your obligations under this License and
-any other pertinent obligations, then as a consequence you may not
-distribute the Library at all. For example, if a patent license would not
-permit royalty-free redistribution of the Library by all those who receive
-copies directly or indirectly through you, then the only way you could
-satisfy both it and this License would be to refrain entirely from
-distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any such
-claims; this section has the sole purpose of protecting the integrity of
-the free software distribution system which is implemented by public
-license practices. Many people have made generous contributions to the
-wide range of software distributed through that system in reliance on
-consistent application of that system; it is up to the author/donor to
-decide if he or she is willing to distribute software through any other
-system and a licensee cannot impose that choice.
-
-This section is intended to make thoroughly clear what is believed to be a
-consequence of the rest of this License.
-
-12. If the distribution and/or use of the Library is restricted in certain
-countries either by patents or by copyrighted interfaces, the original
-copyright holder who places the Library under this License may add an
-explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-13. The Free Software Foundation may publish revised and/or new versions
-of the Lesser General Public License from time to time. Such new versions
-will be similar in spirit to the present version, but may differ in detail
-to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by the
-Free Software Foundation. If the Library does not specify a license
-version number, you may choose any version ever published by the Free
-Software Foundation.
-
-14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these, write
-to the author to ask for permission. For software which is copyrighted by
-the Free Software Foundation, write to the Free Software Foundation; we
-sometimes make exceptions for this. Our decision will be guided by the two
-goals of preserving the free status of all derivatives of our free
-software and of promoting the sharing and reuse of software generally.
-
-NO WARRANTY
-
-15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE
-LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
-ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT
-LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES
-SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE
-WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
-ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
\ No newline at end of file
diff --git a/libraries/lang-beanshell/licenses/spl.license b/libraries/lang-beanshell/licenses/spl.license
deleted file mode 100644
index 7e0dfa9..0000000
--- a/libraries/lang-beanshell/licenses/spl.license
+++ /dev/null
@@ -1,472 +0,0 @@
- SUN PUBLIC LICENSE Version 1.0
-
-1. Definitions.
-
-	1.0.1. "Commercial Use" means distribution or otherwise making the
-	Covered Code available to a third party.
-
-	1.1. "Contributor" means each entity that creates or contributes to
-	the creation of Modifications.
-
-	1.2. "Contributor Version" means the combination of the Original Code,
-	prior Modifications used by a Contributor, and the Modifications made
-	by that particular Contributor.
-
-	1.3. "Covered Code" means the Original Code or Modifications or the
-	combination of the Original Code and Modifications, in each case
-	including portions thereof and corresponding documentation released
-	with the source code.
-
-	1.4. "Electronic Distribution Mechanism" means a mechanism generally
-	accepted in the software development community for the electronic
-	transfer of data.
-
-	1.5. "Executable" means Covered Code in any form other than Source
-	Code.
-
-	1.6. "Initial Developer" means the individual or entity identified as
-	the Initial Developer in the Source Code notice required by Exhibit A.
-
-	1.7. "Larger Work" means a work which combines Covered Code or
-	portions thereof with code not governed by the terms of this License.
-
-	1.8. "License" means this document.
-
-	1.8.1. "Licensable" means having the right to grant, to the maximum
-	extent possible, whether at the time of the initial grant or
-	subsequently acquired, any and all of the rights conveyed herein.
-
-	1.9. "Modifications" means any addition to or deletion from the
-	substance or structure of either the Original Code or any previous
-	Modifications. When Covered Code is released as a series of files, a
-	Modification is:
-
-	A. Any addition to or deletion from the contents of a file containing
-	Original Code or previous Modifications.
-
-	B. Any new file that contains any part of the Original Code or
-	previous Modifications.
-
-	1.10. "Original Code" means Source Code of computer software code
-	which is described in the Source Code notice required by Exhibit A as
-	Original Code, and which, at the time of its release under this
-	License is not already Covered Code governed by this License.
-
-	1.10.1. "Patent Claims" means any patent claim(s), now owned or
-	hereafter acquired, including without limitation, method, process, and
-	apparatus claims, in any patent Licensable by grantor.
-
-	1.11. "Source Code" means the preferred form of the Covered Code for
-	making modifications to it, including all modules it contains, plus
-	any associated documentation, interface definition files, scripts used
-	to control compilation and installation of an Executable, or source
-	code differential comparisons against either the Original Code or
-	another well known, available Covered Code of the Contributor's
-	choice. The Source Code can be in a compressed or archival form,
-	provided the appropriate decompression or de-archiving software is
-	widely available for no charge.
-
-	1.12. "You" (or "Your") means an individual or a legal entity
-	exercising rights under, and complying with all of the terms of, this
-	License or a future version of this License issued under Section 6.1.
-	For legal entities, "You" includes any entity which controls, is
-	controlled by, or is under common control with You. For purposes of
-	this definition, "control" means (a) the power, direct or indirect, to
-	cause the direction or management of such entity, whether by contract
-	or otherwise, or (b) ownership of more than fifty percent (50%) of the
-	outstanding shares or beneficial ownership of such entity.
-
-2. Source Code License.
-
-2.1 The Initial Developer Grant.
-
-	The Initial Developer hereby grants You a world-wide, royalty-free,
-	non-exclusive license, subject to third party intellectual property
-	claims:
-
-	(a)  under intellectual property rights (other than patent or
-	trademark) Licensable by Initial Developer to use, reproduce, modify,
-	display, perform, sublicense and distribute the Original Code (or
-	portions thereof) with or without Modifications, and/or as part of a
-	Larger Work; and
-
-	(b) under Patent Claims infringed by the making, using or selling of
-	Original Code, to make, have made, use, practice, sell, and offer for
-	sale, and/or otherwise dispose of the Original Code (or portions
-	thereof).
-
-	(c) the licenses granted in this Section 2.1(a) and (b) are effective
-	on the date Initial Developer first distributes Original Code under
-	the terms of this License.
-
-	(d) Notwithstanding Section 2.1(b) above, no patent license is
-	granted: 1) 	for code that You delete from the Original Code; 2)
-	separate from the 	Original Code; or 3) for infringements caused by:
-	i) the modification of the Original Code or ii) the combination of the
-	Original Code with other software or devices.
-
-2.2. Contributor Grant.
-
-	Subject to third party intellectual property claims, each Contributor
-	hereby grants You a world-wide, royalty-free, non-exclusive license
-
-	(a) under intellectual property rights (other than patent or
-	trademark) Licensable by Contributor, to use, reproduce,  modify,
-	display, perform, sublicense and distribute the Modifications created
-	by such Contributor (or portions thereof) either on an unmodified
-	basis, with other Modifications, as Covered Code and/or as part of a
-	Larger Work; and
-
-	(b) under Patent Claims infringed by the making, using, or selling of
-	Modifications made by that Contributor either alone and/or in
-	combination with its Contributor Version (or portions of such
-	combination), to make, use, sell, offer for sale, have made, and/or
-	otherwise dispose of: 1) Modifications made by that Contributor (or
-	portions thereof); and 2) the combination of Modifications made by
-	that Contributor with its Contributor Version (or portions of such
-	combination).
-
-	(c) the licenses granted in Sections 2.2(a) and 2.2(b) are effective
-	on the date Contributor first makes Commercial Use of the Covered
-	Code.
-
-	(d)  notwithstanding Section 2.2(b) above, no patent license is
-	granted: 1) for any code that Contributor has deleted from the
-	Contributor Version; 2)  separate from the Contributor Version; 3) for
-	infringements caused by: i) third party modifications of Contributor
-	Version or ii) the combination of Modifications made by that
-	Contributor with other software (except as part of the Contributor
-	Version) or other devices; or 4) under Patent Claims infringed by
-	Covered Code in the absence of Modifications made by that Contributor.
-
-3. Distribution Obligations.
-
-3.1. Application of License.
-
-	The Modifications which You create or to which You contribute are
-	governed by the terms of this License, including without limitation
-	Section 2.2. The Source Code version of Covered Code may be
-	distributed only under the terms of this License or a future version
-	of this License released under Section 6.1, and You must include a
-	copy of this License with every copy of the Source Code You
-	distribute. You may not offer or impose any terms on any Source Code
-	version that alters or restricts the applicable version of this
-	License or the recipients' rights hereunder. However, You may include
-	an additional document offering the additional rights described in
-	Section 3.5.
-
-3.2. Availability of Source Code.
-
-	Any Modification which You create or to which You contribute must be
-	made available in Source Code form under the terms of this License
-	either on the same media as an Executable version or via an accepted
-	Electronic Distribution Mechanism to anyone to whom you made an
-	Executable version available; and if made available via Electronic
-	Distribution Mechanism, must remain available for at least twelve (12)
-	months after the date it initially became available, or at least six
-	(6) months after a subsequent version of that particular Modification
-	has been made available to such recipients. You are responsible for
-	ensuring that the Source Code version remains available even if the
-	Electronic Distribution Mechanism is maintained by a third party.
-
-3.3. Description of Modifications.
-
-	You must cause all Covered Code to which You contribute to contain a
-	file documenting the changes You made to create that Covered Code and
-	the date of any change. You must include a prominent statement that
-	the Modification is derived, directly or indirectly, from Original
-	Code provided by the Initial Developer and including the name of the
-	Initial Developer in (a) the Source Code, and (b) in any notice in an
-	Executable version or related documentation in which You describe the
-	origin or ownership of the Covered Code.
-
-3.4. Intellectual Property Matters.
-
-	(a) Third Party Claims.
-
-	If Contributor has knowledge that a license under a third party's
-	intellectual property rights is required to exercise the rights
-	granted by such Contributor under Sections 2.1 or 2.2, Contributor
-	must include a text file with the Source Code distribution titled
-	"LEGAL'' which describes the claim and the party making the claim in
-	sufficient detail that a recipient will know whom to contact. If
-	Contributor obtains such knowledge after the Modification is made
-	available as described in Section 3.2, Contributor shall promptly
-	modify the LEGAL file in all copies Contributor makes available
-	thereafter and shall take other steps (such as notifying appropriate
-	mailing lists or newsgroups) reasonably calculated to inform those who
-	received the Covered Code that new knowledge has been obtained.
-
-	(b) Contributor APIs.
-
-	If Contributor's Modifications include an application programming
-	interface ("API") and Contributor has knowledge of patent licenses
-	which are reasonably necessary to implement that API, Contributor must
-	also include this information in the LEGAL file.
-
-	(c) Representations.
-
-	Contributor represents that, except as disclosed pursuant to Section
-	3.4(a) above, Contributor believes that Contributor's Modifications
-	are Contributor's original creation(s) and/or Contributor has
-	sufficient rights to grant the rights conveyed by this License.
-
-3.5. Required Notices.
-
-	You must duplicate the notice in Exhibit A in each file of the Source
-	Code. If it is not possible to put such notice in a particular Source
-	Code file due to its structure, then You must include such notice in a
-	location (such as a relevant directory) where a user would be likely
-	to look for such a notice.  If You created one or more Modification(s)
-	You may add your name as a Contributor to the notice described in
-	Exhibit A. You must also duplicate this License in any documentation
-	for the Source Code where You describe recipients' rights or ownership
-	rights relating to Covered Code. You may choose to offer, and to
-	charge a fee for, warranty, support, indemnity or liability
-	obligations to one or more recipients of Covered Code. However, You
-	may do so only on Your own behalf, and not on behalf of the Initial
-	Developer or any Contributor. You must make it absolutely clear than
-	any such warranty, support, indemnity or liability obligation is
-	offered by You alone, and You hereby agree to indemnify the Initial
-	Developer and every Contributor for any liability incurred by the
-	Initial Developer or such Contributor as a result of warranty,
-	support, indemnity or liability terms You offer.
-
-3.6. Distribution of Executable Versions.
-
-	You may distribute Covered Code in Executable form only if the
-	requirements of Section 3.1-3.5 have been met for that Covered Code,
-	and if You include a notice stating that the Source Code version of
-	the Covered Code is available under the terms of this License,
-	including a description of how and where You have fulfilled the
-	obligations of Section 3.2. The notice must be conspicuously included
-	in any notice in an Executable version, related documentation or
-	collateral in which You describe recipients' rights relating to the
-	Covered Code. You may distribute the Executable version of Covered
-	Code or ownership rights under a license of Your choice, which may
-	contain terms different from this License, provided that You are in
-	compliance with the terms of this License and that the license for the
-	Executable version does not attempt to limit or alter the recipient's
-	rights in the Source Code version from the rights set forth in this
-	License. If You distribute the Executable version under a different
-	license You must make it absolutely clear that any terms which differ
-	from this License are offered by You alone, not by the Initial
-	Developer or any Contributor. You hereby agree to indemnify the
-	Initial Developer and every Contributor for any liability incurred by
-	the Initial Developer or such Contributor as a result of any such
-	terms You offer.
-
-3.7. Larger Works.
-
-	You may create a Larger Work by combining Covered Code with other code
-	not governed by the terms of this License and distribute the Larger
-	Work as a single product. In such a case, You must make sure the
-	requirements of this License are fulfilled for the Covered Code.
-
-4. Inability to Comply Due to Statute or Regulation.
-
-	If it is impossible for You to comply with any of the terms of this
-	License with respect to some or all of the Covered Code due to
-	statute, judicial order, or regulation then You must: (a) comply with
-	the terms of this License to the maximum extent possible; and (b)
-	describe the limitations and the code they affect. Such description
-	must be included in the LEGAL file described in Section 3.4 and must
-	be included with all distributions of the Source Code. Except to the
-	extent prohibited by statute or regulation, such description must be
-	sufficiently detailed for a recipient of ordinary skill to be able to
-	understand it.
-
-5. Application of this License.
-
-	This License applies to code to which the Initial Developer has
-	attached the notice in Exhibit A and to related Covered Code.
-
-6. Versions of the License.
-
-6.1. New Versions.
-
-	Sun Microsystems, Inc. ("Sun") may publish revised and/or new versions
-	of the License from time to time. Each version will be given a
-	distinguishing version number.
-
-6.2. Effect of New Versions.
-
-	Once Covered Code has been published under a particular version of the
-	License, You may always continue to use it under the terms of that
-	version. You may also choose to use such Covered Code under the terms
-	of any subsequent version of the License published by Sun. No one
-	other than Sun has the right to modify the terms applicable to Covered
-	Code created under this License.
-
-6.3. Derivative Works.
-
-	If You create or use a modified version of this License (which you may
-	only do in order to apply it to code which is not already Covered Code
-	governed by this License), You must: (a) rename Your license so that
-	the phrases "Sun," "Sun Public License," or "SPL" or any confusingly
-	similar phrase do not appear in your license (except to note that your
-	license differs from this License) and (b) otherwise make it clear
-	that Your version of the license contains terms which differ from the
-	Sun Public License. (Filling in the name of the Initial Developer,
-	Original Code or Contributor in the notice described in Exhibit A
-	shall not of themselves be deemed to be modifications of this
-	License.)
-
-7. DISCLAIMER OF WARRANTY.
-
-	COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS'' BASIS,
-	WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
-	WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
-	DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
-	THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
-	IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
-	YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
-	COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
-	OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
-	ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
-
-8. TERMINATION.
-
-	8.1. This License and the rights granted hereunder will terminate
-	automatically if You fail to comply with terms herein and fail to cure
-	such breach within 30 days of becoming aware of the breach. All
-	sublicenses to the Covered Code which are properly granted shall
-	survive any termination of this License. Provisions which, by their
-	nature, must remain in effect beyond the termination of this License
-	shall survive.
-
-	8.2. If You initiate litigation by asserting a patent infringement
-	claim (excluding declaratory judgment actions) against Initial Developer
-	or a Contributor (the Initial Developer or Contributor against whom
-	You file such action is referred to as "Participant")  alleging that:
-
-	(a) such Participant's Contributor Version directly or indirectly
-	infringes any patent, then any and all rights granted by such
-	Participant to You under Sections 2.1 and/or 2.2 of this License
-	shall, upon 60 days notice from Participant terminate prospectively,
-	unless if within 60 days after receipt of notice You either: (i)
-	agree in writing to pay Participant a mutually agreeable reasonable
-	royalty for Your past and future use of Modifications made by such
-	Participant, or (ii) withdraw Your litigation claim with respect to
-	the Contributor Version against such Participant.  If within 60 days
-	of notice, a reasonable royalty and payment arrangement are not
-	mutually agreed upon in writing by the parties or the litigation claim
-	is not withdrawn, the rights granted by Participant to You under
-	Sections 2.1 and/or 2.2 automatically terminate at the expiration of
-	the 60 day notice period specified above.
-
-	(b) any software, hardware, or device, other than such Participant's
-	Contributor Version, directly or indirectly infringes any patent, then
-	any rights granted to You by such Participant under Sections 2.1(b)
-	and 2.2(b) are revoked effective as of the date You first made, used,
-	sold, distributed, or had made, Modifications made by that
-	Participant.
-
-	8.3. If You assert a patent infringement claim against Participant
-	alleging that such Participant's Contributor Version directly or
-	indirectly infringes any patent where such claim is resolved (such as
-	by license or settlement) prior to the initiation of patent
-	infringement litigation, then the reasonable value of the licenses
-	granted by such Participant under Sections 2.1 or 2.2 shall be taken
-	into account in determining the amount or value of any payment or
-	license.
-
-	8.4. In the event of termination under Sections 8.1 or 8.2 above,  all
-	end user license agreements (excluding distributors and resellers)
-	which have been validly granted by You or any distributor hereunder
-	prior to termination shall survive termination.
-
-9. LIMITATION OF LIABILITY.
-
-	UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
-	(INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
-	DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
-	OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
-	ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
-	CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
-	WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
-	COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
-	INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
-	LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
-	RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
-	PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
-	EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
-	THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
-
-10. U.S. GOVERNMENT END USERS.
-
-	The Covered Code is a "commercial item," as that term is defined in 48
-	C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software"
-	and "commercial computer software documentation," as such terms are
-	used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R.
-	12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all
-	U.S. Government End Users acquire Covered Code with only those rights
-	set forth herein.
-
-11. MISCELLANEOUS.
-
-	This License represents the complete agreement concerning subject
-	matter hereof. If any provision of this License is held to be
-	unenforceable, such provision shall be reformed only to the extent
-	necessary to make it enforceable. This License shall be governed by
-	California law provisions (except to the extent applicable law, if
-	any, provides otherwise), excluding its conflict-of-law provisions.
-	With respect to disputes in which at least one party is a citizen of,
-	or an entity chartered or registered to do business in the United
-	States of America, any litigation relating to this License shall be
-	subject to the jurisdiction of the Federal Courts of the Northern
-	District of California, with venue lying in Santa Clara County,
-	California, with the losing party responsible for costs, including
-	without limitation, court costs and reasonable attorneys' fees and
-	expenses. The application of the United Nations Convention on
-	Contracts for the International Sale of Goods is expressly excluded.
-	Any law or regulation which provides that the language of a contract
-	shall be construed against the drafter shall not apply to this
-	License.
-
-12. RESPONSIBILITY FOR CLAIMS.
-
-	As between Initial Developer and the Contributors, each party is
-	responsible for claims and damages arising, directly or indirectly,
-	out of its utilization of rights under this License and You agree to
-	work with Initial Developer and Contributors to distribute such
-	responsibility on an equitable basis. Nothing herein is intended or
-	shall be deemed to constitute any admission of liability.
-
-13. MULTIPLE-LICENSED CODE.
-
-	Initial Developer may designate portions of the Covered Code as
-	"Multiple-Licensed". "Multiple-Licensed" means that the Initial
-	Developer permits you to utilize portions of the Covered Code under
-	Your choice of the alternative licenses, if any, specified by the
-	Initial Developer in the file described in Exhibit A.
-
-Exhibit A -Sun Public License Notice.
-
-	The contents of this file are subject to the Sun Public License
-	Version 1.0 (the "License"); you may not use this file except in
-	compliance with the License. A copy of the License is available at
-	http://www.sun.com/
-
-	The Original Code is _________________. The Initial Developer of the
-	Original Code is ___________. Portions created by ______ are Copyright
-	(C)_________. All Rights Reserved.
-
-	Contributor(s): ______________________________________.
-
-	Alternatively, the contents of this file may be used under the terms
-	of the _____ license (the  "[___] License"), in which case the
-	provisions of [______] License are applicable  instead of those above.
-	If you wish to allow use of your version of this file only under the
-	terms of the [____] License and not to allow others to use your
-	version of this file under the SPL, indicate your decision by deleting
-	the provisions above and replace  them with the notice and other
-	provisions required by the [___] License. If you do not delete the
-	provisions above, a recipient may use your version of this file under
-	either the SPL or the [___] License."
-
-	[NOTE: The text of this Exhibit A may differ slightly from the text of
-	the notices in the Source Code files of the Original Code. You should
-	use the text of this Exhibit A rather than the text found in the
-	Original Code Source Code for Your Modifications.]
-
diff --git a/libraries/lang-beanshell/src/docs/lang-beanshell.txt b/libraries/lang-beanshell/src/docs/lang-beanshell.txt
deleted file mode 100644
index a870bdf..0000000
--- a/libraries/lang-beanshell/src/docs/lang-beanshell.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-[[library-script-beanshell, Beanshell Scripting Library]]
-= Beanshell Scripting =
-
-[devstatus]
---------------
-source=libraries/lang-beanshell/dev-status.xml
---------------
-
-Beanshell Scripting Library
-
-NOTE: This Library has no documentation yet. Learn how to contribute in <<community-docs>>.
-
-include::../../build/docs/buildinfo/artifact.txt[]
diff --git a/libraries/lang-beanshell/src/main/java/org/qi4j/lang/beanshell/BeanShellMixin.java b/libraries/lang-beanshell/src/main/java/org/qi4j/lang/beanshell/BeanShellMixin.java
deleted file mode 100644
index a276605..0000000
--- a/libraries/lang-beanshell/src/main/java/org/qi4j/lang/beanshell/BeanShellMixin.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Copyright 2008 Niclas Hedhman
- * Copyright 2007-2008 Rickard Öberg
- * Licensed 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.qi4j.lang.beanshell;
-
-import bsh.BshClassManager;
-import bsh.EvalError;
-import bsh.Interpreter;
-import bsh.NameSpace;
-import bsh.classpath.BshClassPath;
-import bsh.classpath.ClassManagerImpl;
-import java.io.*;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Map;
-import org.qi4j.api.common.AppliesTo;
-import org.qi4j.api.common.AppliesToFilter;
-import org.qi4j.api.composite.Composite;
-import org.qi4j.api.composite.TransientBuilderFactory;
-import org.qi4j.api.injection.scope.Structure;
-import org.qi4j.api.injection.scope.This;
-import org.qi4j.api.structure.Module;
-import org.qi4j.api.unitofwork.UnitOfWorkFactory;
-import org.qi4j.library.scripting.ScriptException;
-import org.qi4j.library.scripting.ScriptReloadable;
-
-/**
- * Generic mixin that implements interfaces by delegating to BeanShell methods
- * Each method in an interface is declared by a BeanShell method
- * in a file located in classpath with the name "&lt;interface&gt;.bsh",
- * where the interface name includes the package, and has "." replaced with "/".
- * <p>
- * Example:
- * </p>
- * <p>
- * org/qi4j/samples/hello/domain/HelloWorldSpeaker.bsh
- * </p>
- */
-@AppliesTo( BeanShellMixin.AppliesTo.class )
-public class BeanShellMixin
-    implements InvocationHandler, ScriptReloadable
-{
-    private static HashMap<Module, Interpreter> runtimes;
-
-    @This private Composite me;
-    @Structure private Module module;
-    @Structure private TransientBuilderFactory compositeBuilderFactory;
-    @Structure private UnitOfWorkFactory uowFactory;
-    private Map<Class, Object> mixins;
-
-    public static class AppliesTo
-        implements AppliesToFilter
-    {
-        private static Interpreter runtime = new Interpreter();
-
-        @Override
-        public boolean appliesTo( Method method, Class mixin, Class compositeType, Class modelClass )
-        {
-            // Need optimizations so that this method only build the namespace and extract the mixins
-            // once per composite.
-            try
-            {
-
-                NameSpace namespace = buildNamespace( compositeType, runtime );
-                if( namespace == null )
-                {
-                    return false;
-                }
-                runtime.setNameSpace( namespace );
-            }
-            catch( IOException e )
-            {
-                e.printStackTrace();  //TODO: Auto-generated, need attention.
-            }
-            Map<Class, Object> mixins = extractMixins( runtime.getClassManager() );
-            return mixins.containsKey( method.getDeclaringClass() );
-        }
-    }
-
-    static
-    {
-        runtimes = new HashMap<Module, Interpreter>();
-    }
-
-    @Override
-    public Object invoke( Object proxy, Method method, Object[] args )
-        throws Throwable
-    {
-        Interpreter runtime;
-        synchronized( BeanShellMixin.class )
-        {
-            runtime = runtimes.get( module );
-        }
-        if( runtime == null )
-        {
-            runtime = new Interpreter();
-            BshClassManager.createClassManager( runtime );
-            Class compositeType = me.getClass().getInterfaces()[ 0 ];
-            NameSpace namespace = buildNamespace( compositeType, runtime );
-            runtime.setNameSpace( namespace );
-            synchronized( BeanShellMixin.class )
-            {
-                runtimes.put( module, runtime );
-            }
-            runtime.set( "compositeBuilderFactory", compositeBuilderFactory );
-            runtime.set( "unitOfWorkFactory", uowFactory );
-        }
-        if( mixins == null )
-        {
-            mixins = extractMixins( runtime.getClassManager() );
-        }
-        Object instance = mixins.get( method.getDeclaringClass() );
-        return method.invoke( instance, args );
-    }
-
-    private static NameSpace buildNamespace( Class compositeType, Interpreter runtime )
-        throws IOException
-    {
-        ClassLoader loader = compositeType.getClassLoader();
-        BshClassManager classManager = BshClassManager.createClassManager( runtime );
-        classManager.setClassLoader( loader );
-        NameSpace namespace = new NameSpace( classManager, compositeType.getName() );
-
-        URL scriptUrl = getFunctionResource( compositeType );
-        if( scriptUrl == null )
-        {
-            return null;
-        }
-        Reader source = getSource( compositeType, scriptUrl );
-        try
-        {
-            runtime.eval( source, namespace, scriptUrl.toString() );
-        }
-        catch( EvalError evalError )
-        {
-            evalError.printStackTrace();  //TODO: Auto-generated, need attention.
-        }
-        return namespace;
-    }
-
-    private static Map<Class, Object> extractMixins( BshClassManager classManager )
-    {
-        Class mixinImpl = null;
-        try
-        {
-            Field field = ClassManagerImpl.class.getDeclaredField( "baseClassPath" );
-            field.setAccessible( true );
-            BshClassPath classpath = (BshClassPath) field.get( classManager );
-            String[] scriptedMixinNames = classpath.getAllNames();
-            Map<Class, Object> mixinTypes = new HashMap<Class, Object>();
-            for( String mixinName : scriptedMixinNames )
-            {
-                mixinImpl = classManager.classForName( mixinName );
-                Class[] interfaces = mixinImpl.getInterfaces();
-                Object mixinInstance = mixinImpl.newInstance();
-                for( Class mixinType : interfaces )
-                {
-                    mixinTypes.put( mixinType, mixinInstance );
-                }
-            }
-            return mixinTypes;
-        }
-        catch( IllegalAccessException e )
-        {
-            // Can not happen. Accessible is set to true, and a SecurityException will be thrown
-            // if the security doesn't allow direct inspection.
-            return null;
-        }
-        catch( NoSuchFieldException e )
-        {
-            throw new InternalError( "BeanShell version has been updated and is no longer compatible with this Qi4j version." );
-        }
-        catch( InstantiationException e )
-        {
-            throw new ScriptException( "Unable to instantiate BeanShell class: " + mixinImpl );
-        }
-    }
-
-    protected static Reader getSource( Class compositeType, URL scriptUrl )
-        throws IOException
-    {
-        if( scriptUrl == null )
-        {
-            throw new IOException( "No script found for method " + compositeType.getName() );
-        }
-        InputStream in = scriptUrl.openStream();
-        return new BufferedReader( new InputStreamReader( in ) );
-    }
-
-    private static URL getFunctionResource( Class compositeType )
-    {
-        String scriptName = getScriptName( compositeType );
-        ClassLoader loader = compositeType.getClassLoader();
-        return loader.getResource( scriptName );
-    }
-
-    private static String getScriptName( Class compositeType )
-    {
-        String classname = compositeType.getName();
-        return classname.replace( '.', '/' ) + ".bsh";
-    }
-
-    @Override
-    public void reloadScripts()
-    {
-        synchronized( BeanShellMixin.class )
-        {
-            runtimes.remove( module );
-        }
-    }
-}
\ No newline at end of file
diff --git a/libraries/lang-beanshell/src/main/java/org/qi4j/lang/beanshell/package.html b/libraries/lang-beanshell/src/main/java/org/qi4j/lang/beanshell/package.html
deleted file mode 100644
index 527017e..0000000
--- a/libraries/lang-beanshell/src/main/java/org/qi4j/lang/beanshell/package.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<html>
-    <body>
-        <h2>BeanShell Language Support Library.</h2>
-    </body>
-</html>
\ No newline at end of file
diff --git a/libraries/lang-beanshell/src/test/java/org/qi4j/lang/beanshell/BeanShellComposite.java b/libraries/lang-beanshell/src/test/java/org/qi4j/lang/beanshell/BeanShellComposite.java
deleted file mode 100644
index 9654be4..0000000
--- a/libraries/lang-beanshell/src/test/java/org/qi4j/lang/beanshell/BeanShellComposite.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright 2008 Niclas Hedhman
- * Licensed 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.qi4j.lang.beanshell;
-
-import org.qi4j.api.composite.TransientComposite;
-import org.qi4j.api.mixin.Mixins;
-
-/**
- * JAVADOC
- */
-@Mixins( BeanShellMixin.class )
-public interface BeanShellComposite extends Mixin1, TransientComposite
-{
-}
\ No newline at end of file
diff --git a/libraries/lang-beanshell/src/test/java/org/qi4j/lang/beanshell/BeanShellMixinTest.java b/libraries/lang-beanshell/src/test/java/org/qi4j/lang/beanshell/BeanShellMixinTest.java
deleted file mode 100644
index d616811..0000000
--- a/libraries/lang-beanshell/src/test/java/org/qi4j/lang/beanshell/BeanShellMixinTest.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2007-2008 Niclas Hedhman
- * Copyright 2007-2008 Rickard Öberg
- * Licensed 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.qi4j.lang.beanshell;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.qi4j.bootstrap.AssemblyException;
-import org.qi4j.bootstrap.ModuleAssembly;
-import org.qi4j.test.AbstractQi4jTest;
-
-public class BeanShellMixinTest
-    extends AbstractQi4jTest
-{
-    public void assemble( ModuleAssembly module )
-        throws AssemblyException
-    {
-        module.transients( BeanShellComposite.class );
-    }
-
-    @Test
-    public void testInvoke() throws Throwable
-    {
-        BeanShellComposite domain1 = module.newTransient( BeanShellComposite.class );
-        BeanShellComposite domain2 = module.newTransient( BeanShellComposite.class );
-        Assert.assertEquals( "do1() in Beanshell:1", domain1.do1() );
-        Assert.assertEquals( "do1() in Beanshell:2", domain1.do1() );
-        Assert.assertEquals( "do1() in Beanshell:3", domain1.do1() );
-        Assert.assertEquals( "do1() in Beanshell:4", domain1.do1() );
-        Assert.assertEquals( "do1() in Beanshell:1", domain2.do1() );
-        Assert.assertEquals( "do1() in Beanshell:2", domain2.do1() );
-        Assert.assertEquals( "do1() in Beanshell:3", domain2.do1() );
-        Assert.assertEquals( "do1() in Beanshell:4", domain2.do1() );
-        Assert.assertEquals( "do1() in Beanshell:5", domain2.do1() );
-        Assert.assertEquals( "do1() in Beanshell:6", domain2.do1() );
-        Assert.assertEquals( "do1() in Beanshell:5", domain1.do1() );
-    }
-}
\ No newline at end of file
diff --git a/libraries/lang-beanshell/src/test/java/org/qi4j/lang/beanshell/Mixin1.java b/libraries/lang-beanshell/src/test/java/org/qi4j/lang/beanshell/Mixin1.java
deleted file mode 100644
index bab518a..0000000
--- a/libraries/lang-beanshell/src/test/java/org/qi4j/lang/beanshell/Mixin1.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package org.qi4j.lang.beanshell;

-

-public interface Mixin1

-{

-    String do1();

-}
\ No newline at end of file
diff --git a/libraries/lang-beanshell/src/test/resources/org/qi4j/lang/beanshell/BeanShellComposite.bsh b/libraries/lang-beanshell/src/test/resources/org/qi4j/lang/beanshell/BeanShellComposite.bsh
deleted file mode 100644
index fa55bac..0000000
--- a/libraries/lang-beanshell/src/test/resources/org/qi4j/lang/beanshell/BeanShellComposite.bsh
+++ /dev/null
@@ -1,14 +0,0 @@
-
-import org.qi4j.lang.beanshell.Mixin1;
-
-public class Mixin1Impl
-    implements Mixin1
-{
-    private int counter;
-
-    public String do1()
-    {
-        counter++;
-        return "do1() in Beanshell:" + counter;
-    }
-}
\ No newline at end of file
diff --git a/libraries/lang-groovy/build.gradle b/libraries/lang-groovy/build.gradle
index 3b14c51..13f2578 100644
--- a/libraries/lang-groovy/build.gradle
+++ b/libraries/lang-groovy/build.gradle
@@ -1,7 +1,27 @@
-description = "Qi4j Groovy Library allows for Mixins to be implemented in Groovy scripts instead of directly in compiled Java."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - Scripting - Groovy" }}
+description = "Apache Zest™ Groovy Library allows for Mixins to be implemented in Groovy scripts instead of directly in compiled Java."
 
+jar { manifest { name = "Apache Zest™ Library - Scripting - Groovy" }}
+
+apply plugin: 'groovy'
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
diff --git a/libraries/lang-groovy/dev-status.xml b/libraries/lang-groovy/dev-status.xml
index cefc98a..2a02725 100644
--- a/libraries/lang-groovy/dev-status.xml
+++ b/libraries/lang-groovy/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
@@ -8,10 +24,10 @@
     <codebase>beta</codebase>
 
     <!-- none, brief, good, complete -->
-    <documentation>brief</documentation>
+    <documentation>good</documentation>
 
     <!-- none, some, good, complete -->
-    <unittests>some</unittests>
+    <unittests>good</unittests>
   </status>
   <licenses>
     <license>ALv2</license>
diff --git a/libraries/lang-groovy/src/docs/lang-groovy.txt b/libraries/lang-groovy/src/docs/lang-groovy.txt
index 5973765..e5a006a 100644
--- a/libraries/lang-groovy/src/docs/lang-groovy.txt
+++ b/libraries/lang-groovy/src/docs/lang-groovy.txt
@@ -1,4 +1,23 @@
-[[library-script-groovy, Groovy Scripting Library]]
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
+[[lang-groovy, Groovy Scripting Library]]
 = Groovy Scripting =
 
 [devstatus]
@@ -10,28 +29,81 @@
 
 include::../../build/docs/buildinfo/artifact.txt[]
 
-The Groovy Scripting Library is a Generic mixin that implements interfaces 
-by delegating to Groovy functions using Groovy. Each method in an interface 
-is declared by a Groovy method in a file located in classpath with the name
-"<interface>.groovy", where the interface name includes the package, and has 
-"." replaced with "/".
+The Groovy Scripting Library is a Generic mixin that implements interfaces by delegating to Groovy code from classpath resources.
 
-Example
+But before looking at how to use the Scripting library we'll see that *you don't need this library at all if you simply need to use Groovy classes as Fragments*.
+Then we'll see how to use Groovy class scripts and method scripts.
 
-    org/qi4j/samples/hello/domain/HelloWorldSpeaker.groovy
-    org/qi4j/samples/hello/domain/HelloWorldSpeaker.sayAgain.groovy
-
-That means that the HelloWorldSpeaker.groovy file may be co-located with the 
-class files in the same package. It is currently not supported to place 
-the Groovy implementation of the mixin in a different package than the 
-interface it implements.
-
-To use Groovy to implement the Mixin functionality for a given interface, 
-simply declare the +GroovyMixin+ like any other mixin, either in the interface 
-or at assembly time.
+All examples below are based on this type:
 
 [snippet,java]
 ----
-source=libraries/lang-groovy/src/test/java/org/qi4j/lang/groovy/HelloSpeaker.java
-tag=mixin
+source=libraries/lang-groovy/src/test/groovy/org/qi4j/lang/groovy/HelloSpeaker.java
+tag=speaker
 ----
+
+
+== Using compiled Groovy classes ==
+
+To directly use compiled Groovy classes as Fragments you don't need this library at all.
+
+Having this Groovy class compiled ;
+
+.HelloSpeakerMixin.groovy
+[snippet,groovy]
+----
+source=libraries/lang-groovy/src/test/groovy/org/qi4j/lang/groovy/HelloSpeakerMixin.groovy
+tag=direct
+----
+
+assemble it directly:
+
+[snippet,java]
+----
+source=libraries/lang-groovy/src/test/groovy/org/qi4j/lang/groovy/HelloSpeakerTest.java
+tag=direct
+----
+
+
+== Using Groovy class scripts ==
+
+Declare a Groovy class in a classpath resource file located in the same package as the implemented type with the name +<type>.groovy+:
+
+.HelloSpeaker.groovy
+[snippet,groovy]
+----
+source=libraries/lang-groovy/src/test/resources/org/qi4j/lang/groovy/HelloSpeaker.groovy
+tag=script
+----
+
+Then assemble it with the +GroovyMixin+:
+
+[snippet,java]
+----
+source=libraries/lang-groovy/src/test/groovy/org/qi4j/lang/groovy/HelloSpeakerTest.java
+tag=script
+----
+
+Groovy class scripts get +@This+ injection in a +This+ property if present.
+
+
+== Using Groovy method scripts ==
+
+Implement single composites methods, each in a classpath resource file located in the same package as the implemented type with the name +<type>.<method>.groovy+:
+
+.HelloSpeaker.sayHello.groovy
+[snippet,groovy]
+----
+source=libraries/lang-groovy/src/test/resources/org/qi4j/lang/groovy/HelloSpeaker.sayHello.groovy
+tag=script
+----
+
+Then assemble it with the +GroovyMixin+:
+
+[snippet,java]
+----
+source=libraries/lang-groovy/src/test/groovy/org/qi4j/lang/groovy/HelloSpeakerTest.java
+tag=script
+----
+
+Groovy method scripts get +@This+ injection as +This+ property and the methods arguments array as +args+.
diff --git a/libraries/lang-groovy/src/main/java/org/qi4j/lang/groovy/package.html b/libraries/lang-groovy/src/main/java/org/qi4j/lang/groovy/package.html
index 7656270..9425182 100644
--- a/libraries/lang-groovy/src/main/java/org/qi4j/lang/groovy/package.html
+++ b/libraries/lang-groovy/src/main/java/org/qi4j/lang/groovy/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Groovy Language Support Library.</h2>
diff --git a/libraries/lang-groovy/src/test/java/org/qi4j/lang/groovy/GroovyComposite.java b/libraries/lang-groovy/src/test/groovy/org/qi4j/lang/groovy/GroovyComposite.java
similarity index 100%
rename from libraries/lang-groovy/src/test/java/org/qi4j/lang/groovy/GroovyComposite.java
rename to libraries/lang-groovy/src/test/groovy/org/qi4j/lang/groovy/GroovyComposite.java
diff --git a/libraries/lang-groovy/src/test/java/org/qi4j/lang/groovy/GroovyMixinTest.java b/libraries/lang-groovy/src/test/groovy/org/qi4j/lang/groovy/GroovyMixinTest.java
similarity index 100%
rename from libraries/lang-groovy/src/test/java/org/qi4j/lang/groovy/GroovyMixinTest.java
rename to libraries/lang-groovy/src/test/groovy/org/qi4j/lang/groovy/GroovyMixinTest.java
diff --git a/libraries/lang-jruby/src/test/java/org/qi4j/lang/jruby/HelloSpeaker.java b/libraries/lang-groovy/src/test/groovy/org/qi4j/lang/groovy/HelloSpeaker.java
similarity index 75%
rename from libraries/lang-jruby/src/test/java/org/qi4j/lang/jruby/HelloSpeaker.java
rename to libraries/lang-groovy/src/test/groovy/org/qi4j/lang/groovy/HelloSpeaker.java
index 1aa9641..9dc0388 100644
--- a/libraries/lang-jruby/src/test/java/org/qi4j/lang/jruby/HelloSpeaker.java
+++ b/libraries/lang-groovy/src/test/groovy/org/qi4j/lang/groovy/HelloSpeaker.java
@@ -9,16 +9,11 @@
  * See the License for the specific language governing permissions and 
  * limitations under the License.
 */
-package org.qi4j.lang.jruby;
+package org.qi4j.lang.groovy;
 
-import org.qi4j.api.mixin.Mixins;
-
-// START SNIPPET: mixin
-import org.qi4j.lang.jruby.JRubyMixin;
-
-@Mixins(JRubyMixin.class)
+// START SNIPPET: speaker
 public interface HelloSpeaker
 {
-    void sayHello();
+    String sayHello( String name );
 }
-// END SNIPPET: mixin
+// END SNIPPET: speaker
diff --git a/libraries/cxf/src/test/java/org/qi4j/library/cxf/User.java b/libraries/lang-groovy/src/test/groovy/org/qi4j/lang/groovy/HelloSpeakerMixin.groovy
similarity index 68%
rename from libraries/cxf/src/test/java/org/qi4j/library/cxf/User.java
rename to libraries/lang-groovy/src/test/groovy/org/qi4j/lang/groovy/HelloSpeakerMixin.groovy
index ff3c6d1..f1ba758 100644
--- a/libraries/cxf/src/test/java/org/qi4j/library/cxf/User.java
+++ b/libraries/lang-groovy/src/test/groovy/org/qi4j/lang/groovy/HelloSpeakerMixin.groovy
@@ -1,5 +1,5 @@
 /*
- * Copyright 2010 Niclas Hedhman.
+ * Copyright (c) 2015 the original author or authors
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -15,20 +15,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.qi4j.lang.groovy;
 
-package org.qi4j.library.cxf;
-
-public class User
-{
-    private String name;
-
-    public void setName( String name )
-    {
-        this.name = name;
-    }
-
-    public String getName()
-    {
-        return name;
+// START SNIPPET: direct
+public class HelloSpeakerMixin implements HelloSpeaker {
+    public String sayHello( String name ) {
+        "Hello $name!"
     }
 }
+// END SNIPPET: direct
diff --git a/libraries/lang-groovy/src/test/groovy/org/qi4j/lang/groovy/HelloSpeakerTest.java b/libraries/lang-groovy/src/test/groovy/org/qi4j/lang/groovy/HelloSpeakerTest.java
new file mode 100644
index 0000000..1ef9124
--- /dev/null
+++ b/libraries/lang-groovy/src/test/groovy/org/qi4j/lang/groovy/HelloSpeakerTest.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2015 the original author or authors
+ *
+ * Licensed 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.qi4j.lang.groovy;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.test.AbstractQi4jTest;
+import org.qi4j.bootstrap.SingletonAssembler;
+
+public class HelloSpeakerTest extends AbstractQi4jTest
+{
+    public void assemble( ModuleAssembly module )
+        throws AssemblyException
+    {
+        module.transients( HelloSpeaker.class ).withMixins( GroovyMixin.class );
+    }
+
+    @Test
+    public void testHello()
+    {
+        HelloSpeaker speaker = module.newTransient( HelloSpeaker.class );
+        Assert.assertEquals( "Hello World!", speaker.sayHello( "World" ) );
+    }
+
+    @Test
+    public void testGroovyScriptResourceMixin()
+        throws Exception
+    {
+        // START SNIPPET: script
+        SingletonAssembler assembler = new SingletonAssembler()
+        {
+            @Override
+            public void assemble( ModuleAssembly assembly )
+                throws AssemblyException
+            {
+                assembly.transients( HelloSpeaker.class ).withMixins( GroovyMixin.class );
+            }
+        };
+        HelloSpeaker speaker = assembler.module().newTransient( HelloSpeaker.class );
+        Assert.assertEquals( "Hello World!", speaker.sayHello( "World" ) );
+        // END SNIPPET: script
+    }
+
+    @Test
+    public void testGroovyClassMixin()
+        throws Exception
+    {
+        // START SNIPPET: direct
+        SingletonAssembler assembler = new SingletonAssembler()
+        {
+            @Override
+            public void assemble( ModuleAssembly module )
+                throws AssemblyException
+            {
+                module.transients( HelloSpeaker.class ).withMixins( HelloSpeakerMixin.class );
+            }
+        };
+        HelloSpeaker speaker = assembler.module().newTransient( HelloSpeaker.class );
+        Assert.assertEquals( "Hello World!", speaker.sayHello( "World" ) );
+        // END SNIPPET: direct
+    }
+}
diff --git a/libraries/struts2-codebehind/src/main/resources/struts-plugin.xml b/libraries/lang-groovy/src/test/groovy/org/qi4j/lang/groovy/Mixin1.java
similarity index 60%
copy from libraries/struts2-codebehind/src/main/resources/struts-plugin.xml
copy to libraries/lang-groovy/src/test/groovy/org/qi4j/lang/groovy/Mixin1.java
index ccf2c42..1184a32 100644
--- a/libraries/struts2-codebehind/src/main/resources/struts-plugin.xml
+++ b/libraries/lang-groovy/src/test/groovy/org/qi4j/lang/groovy/Mixin1.java
@@ -1,32 +1,24 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-/*
- * $Id: pom.xml 559206 2007-07-24 21:01:18Z apetrelli $
- *
- * 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.
- */
--->
-
-<!DOCTYPE struts PUBLIC
-  "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-  "http://struts.apache.org/dtds/struts-2.0.dtd">
-
-<struts>
-  <bean type="com.opensymphony.xwork2.config.PackageProvider" name="qi4j"
-        class="org.qi4j.library.struts2.codebehind.Qi4jCodebehindPackageProvider"/>
-</struts>
+/*

+ * 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.qi4j.lang.groovy;

+

+public interface Mixin1

+{

+    String do1();

+}

diff --git a/libraries/lang-groovy/src/test/java/org/qi4j/lang/groovy/HelloSpeaker.java b/libraries/lang-groovy/src/test/java/org/qi4j/lang/groovy/HelloSpeaker.java
deleted file mode 100644
index a4527f0..0000000
--- a/libraries/lang-groovy/src/test/java/org/qi4j/lang/groovy/HelloSpeaker.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright 2007 Rickard Öberg
- * Licensed 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.qi4j.lang.groovy;
-
-import org.qi4j.api.mixin.Mixins;
-
-// START SNIPPET: mixin
-import org.qi4j.lang.groovy.GroovyMixin;
-// END SNIPPET: mixin
-
-// START SNIPPET: mixin
-@Mixins(GroovyMixin.class)
-public interface HelloSpeaker
-{
-    void sayHello();
-}
-// END SNIPPET: mixin
diff --git a/libraries/lang-groovy/src/test/java/org/qi4j/lang/groovy/Mixin1.java b/libraries/lang-groovy/src/test/java/org/qi4j/lang/groovy/Mixin1.java
deleted file mode 100644
index ba7c082..0000000
--- a/libraries/lang-groovy/src/test/java/org/qi4j/lang/groovy/Mixin1.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package org.qi4j.lang.groovy;

-

-public interface Mixin1

-{

-    String do1();

-}

diff --git a/libraries/cxf/src/test/java/org/qi4j/library/cxf/divs/Dividends.java b/libraries/lang-groovy/src/test/resources/org/qi4j/lang/groovy/HelloSpeaker.groovy
similarity index 74%
copy from libraries/cxf/src/test/java/org/qi4j/library/cxf/divs/Dividends.java
copy to libraries/lang-groovy/src/test/resources/org/qi4j/lang/groovy/HelloSpeaker.groovy
index 9eb8a88..eac3726 100644
--- a/libraries/cxf/src/test/java/org/qi4j/library/cxf/divs/Dividends.java
+++ b/libraries/lang-groovy/src/test/resources/org/qi4j/lang/groovy/HelloSpeaker.groovy
@@ -1,5 +1,5 @@
 /*
- * Copyright 2010 Niclas Hedhman.
+ * Copyright (c) 2015 the original author or authors
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -15,12 +15,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-package org.qi4j.library.cxf.divs;
-
-import org.qi4j.api.property.Property;
-
-public interface Dividends
-{
-    Property<DivStream> divStream();
+// START SNIPPET: script
+class HelloSpeaker {
+  def This
+  def sayHello( name ) {
+    "Hello $name!".toString()
+  }
 }
+// END SNIPPET: script
diff --git a/libraries/cxf/src/test/java/org/qi4j/library/cxf/divs/Dividends.java b/libraries/lang-groovy/src/test/resources/org/qi4j/lang/groovy/HelloSpeaker.sayHello.groovy
similarity index 75%
rename from libraries/cxf/src/test/java/org/qi4j/library/cxf/divs/Dividends.java
rename to libraries/lang-groovy/src/test/resources/org/qi4j/lang/groovy/HelloSpeaker.sayHello.groovy
index 9eb8a88..48a525e 100644
--- a/libraries/cxf/src/test/java/org/qi4j/library/cxf/divs/Dividends.java
+++ b/libraries/lang-groovy/src/test/resources/org/qi4j/lang/groovy/HelloSpeaker.sayHello.groovy
@@ -1,5 +1,5 @@
 /*
- * Copyright 2010 Niclas Hedhman.
+ * Copyright (c) 2015 the original author or authors
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -15,12 +15,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-package org.qi4j.library.cxf.divs;
-
-import org.qi4j.api.property.Property;
-
-public interface Dividends
-{
-    Property<DivStream> divStream();
-}
+// START SNIPPET: script
+"Hello ${args[0]}!".toString()
+// END SNIPPET: script
diff --git a/libraries/lang-groovy/src/test/resources/org/qi4j/lang/groovy/Mixin1.groovy b/libraries/lang-groovy/src/test/resources/org/qi4j/lang/groovy/Mixin1.groovy
index 637e39d..29429cc 100644
--- a/libraries/lang-groovy/src/test/resources/org/qi4j/lang/groovy/Mixin1.groovy
+++ b/libraries/lang-groovy/src/test/resources/org/qi4j/lang/groovy/Mixin1.groovy
@@ -1,3 +1,14 @@
+/*
+ * Copyright 2007 Rickard Öberg
+ * Licensed 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.
+*/
 public class Mixin1
 {
     def This
diff --git a/libraries/lang-javascript/build.gradle b/libraries/lang-javascript/build.gradle
index 2059b93..7500b34 100644
--- a/libraries/lang-javascript/build.gradle
+++ b/libraries/lang-javascript/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j JavaScript Library allows for Mixins to be implemented in JavaScript instead of directly in compiled Java."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - Scripting - JavaScript" }}
+description = "Apache Zest™ JavaScript Library allows for Mixins to be implemented in JavaScript instead of directly in compiled Java."
+
+jar { manifest { name = "Apache Zest™ Library - Scripting - JavaScript" }}
 
 
 dependencies {
diff --git a/libraries/lang-javascript/dev-status.xml b/libraries/lang-javascript/dev-status.xml
index cefc98a..58fda09 100644
--- a/libraries/lang-javascript/dev-status.xml
+++ b/libraries/lang-javascript/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/libraries/lang-javascript/src/docs/lang-javascript.txt b/libraries/lang-javascript/src/docs/lang-javascript.txt
index 394a8f3..ddd52e2 100644
--- a/libraries/lang-javascript/src/docs/lang-javascript.txt
+++ b/libraries/lang-javascript/src/docs/lang-javascript.txt
@@ -1,4 +1,23 @@
-[[library-script-javascript, Javascript Scripting Library]]
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
+[[lang-javascript, Javascript Scripting Library]]
 = Javascript Scripting =
 
 [devstatus]
diff --git a/libraries/lang-javascript/src/main/java/org/qi4j/lang/javascript/package.html b/libraries/lang-javascript/src/main/java/org/qi4j/lang/javascript/package.html
index eaf94eb..0825404 100644
--- a/libraries/lang-javascript/src/main/java/org/qi4j/lang/javascript/package.html
+++ b/libraries/lang-javascript/src/main/java/org/qi4j/lang/javascript/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>JavaScript Language Support Library.</h2>
diff --git a/libraries/lang-javascript/src/test/java/org/qi4j/lang/javascript/DomainType.java b/libraries/lang-javascript/src/test/java/org/qi4j/lang/javascript/DomainType.java
index 51fbd4a..fbc58d5 100644
--- a/libraries/lang-javascript/src/test/java/org/qi4j/lang/javascript/DomainType.java
+++ b/libraries/lang-javascript/src/test/java/org/qi4j/lang/javascript/DomainType.java
@@ -1,3 +1,21 @@
+/*

+ * 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.qi4j.lang.javascript;

 

 public interface DomainType

diff --git a/libraries/lang-javascript/src/test/resources/org/qi4j/lang/javascript/DomainType.js b/libraries/lang-javascript/src/test/resources/org/qi4j/lang/javascript/DomainType.js
index 91a7a62..848ebfe 100644
--- a/libraries/lang-javascript/src/test/resources/org/qi4j/lang/javascript/DomainType.js
+++ b/libraries/lang-javascript/src/test/resources/org/qi4j/lang/javascript/DomainType.js
@@ -1,3 +1,14 @@
+/*
+ * Copyright 2007 Rickard Öberg
+ * Licensed 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.
+ */
 // This is a line comment.
 
 /* A block comment should not interfere */
diff --git a/libraries/lang-jruby/NOTICE b/libraries/lang-jruby/NOTICE
deleted file mode 100644
index 68d2ae7..0000000
--- a/libraries/lang-jruby/NOTICE
+++ /dev/null
@@ -1,2153 +0,0 @@
-Qi4j Script Library - JRuby
-Copyright 2007-2008, The Qi4j Development Team of individuals.
-
-See http://www.qi4j.org/contributors.html for list of of individuals.
-Also see each file for additional information of Copyright claims.
-
-Qi4j is a community aggregated works under Copyright law.
-All parts of the original works at Qi4j is licensed under the
-Apache License ver 2.0 http://www.apache.org/licenses
-
-Below follows a list of binary dependencies and their licenses;
-----------------------------------------------------------------
-
-This module contains JRuby, software developed at http://jruby.org
-and avaiable under CPL, GPL and LGPL. The text below is from
-JRuby's COPYING information. Additional license information is
-available in licenses/jruby.license
-
-JRuby is Copyright (c) 2007-2010 The JRuby project, and is released
-under a tri CPL/GPL/LGPL license. You can use it, redistribute it
-and/or modify it under the terms of the:
-
-  Common Public License version 1.0
-  GNU General Public License version 2
-  GNU Lesser General Public License version 2.1
-
-lib/ruby/1.9/drb/*, build_lib/bytelist.jar
-(http://github.com/jruby/bytelist), build_lib/jruby-embed.jar
-(http://kenai.com/projects/jruby-embed) and build_lib/yydebug.jar
-(http://svn.codehaus.org/jruby/trunk/jay/yydebug) are released under
-the same copyright/license.
-
-Some additional libraries distributed with JRuby are not covered by
-JRuby's licence. Most of these libraries and their licenses are listed
-below. Also see LICENSE.RUBY for most files found in src/lib/ruby/1.8.
-
- bench/rails/public/javascripts/* are distributed under the MIT
- license, and have the following copyrights:
-
-   controls.js is Copyright:
-   (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-   (c) 2005-2007 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
-   (c) 2005-2007 Jon Tirsen (http://www.tirsen.com)
-
-   dragdrop.js is Copyright:
-   (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-   (c) 2005-2007 Sammi Williams (http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz)
-
-   effect.js is Copyright (c) 2005-2008 Thomas Fuchs.
-
-   prototype.js is Copyright (c) 2005-2007 Sam Stephenson.
-
- build_lib/*asm*jar (http://asm.objectweb.org) are distributed under the BSD license.
-
- build_lib/apt-mirror-api.jar, build_lib/bnd-0.0.249.jar,
- build_lib/commons-logging-1.1.1.jar, build_lib/joda-time-1.5.1.jar,
- BSF and ant are distributed under the Apache Software License,
- Version 1.1 (license file inside the jars).
-
- build_lib/constantine.jar (http://kenai.com/projects/constantine),
- build_lib/jcodings.jar (http://github.com/jruby/jcodings),
- build_lib/jaffl.jar (http://projectkenai.com/projects/jaffl) and
- build_lib/joni.jar (http://github.com/jruby/joni) are distributed
- under the MIT license.
-
- build_lib/jarjar-1.0rc8.jar (http://code.google.com/p/jarjar),
- build_lib/joda-time-1.5.1.jar (http://joda-time.sourceforge.net),
- build_lib/dynalang-0.3.jar (http://dynalang.sourceforge.net),
- build_lib/nailgun-0.7.1.jar and tool/nailgun/ng.exe
- (http://martiansoftware.com/nailgun) are distributed under the
- Apache License version 2.0.
-
- build_lib/emma*jar (http://emma.sourceforge.net) and
- build_lib/junit.jar (http://www.junit.org) are distributed under the
- Common Public License v1.0.
-
- build_lib/jffi*jar (http://kenai.com/projects/jffi) and
- build_lib/jgrapht-jdk1.5.jar (http://jgrapht.sourceforge.net) are
- distributed under the GPL v3.
-
- build_lib/jline-0.9.93 (http://jline.sourceforge.net) is distributed
- under the following license:
-
-   Redistribution and use in source and binary forms, with or
-   without modification, are permitted provided that the following
-   conditions are met:
-
-   Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-
-   Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer
-   in the documentation and/or other materials provided with
-   the distribution.
-
-   Neither the name of JLine nor the names of its contributors
-   may be used to endorse or promote products derived from this
-   software without specific prior written permission.
-
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-   BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
-   AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-   EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-   FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-   OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-   AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-   LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
-   IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
-   OF THE POSSIBILITY OF SUCH DAMAGE.
-
- build_lib/jna*jar (http://jna.dev.java.net) are distributed
- under the LGPL-2.1+ license.
-
- build_lib/invokedynamic.jar and build_lib/jsr292-mock.jar
- (http://code.google.com/p/jvm-language-runtime) are distributed
- under the LGPL license.
-
- Bouncycastle is released under the MIT license, and is Copyright (c)
- 2000 - 2006 The Legion Of The Bouncy Castle.
-
- Jyvaml and rbyaml are released under the MIT license, and are
- Copyright (c) 2006 Ola Bini.
-
-The complete text of the Common Public License is as follows:
-
-  Common Public License - v 1.0
-
-  THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON
-  PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF
-  THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
-
-  1. DEFINITIONS
-
-  "Contribution" means:
-
-  a) in the case of the initial Contributor, the initial code and
-    documentation distributed under this Agreement, and
-
-  b) in the case of each subsequent Contributor:
-
-  i) changes to the Program, and
-
-  ii) additions to the Program;
-
-  where such changes and/or additions to the Program originate
-  from and are distributed by that particular Contributor. A
-  Contribution 'originates' from a Contributor if it was added to the
-  Program by such Contributor itself or anyone acting on such
-  Contributor's behalf. Contributions do not include additions to the
-  Program which: (i) are separate modules of software distributed in
-  conjunction with the Program under their own license agreement,
-  and (ii) are not derivative works of the Program.
-
-  "Contributor" means any person or entity that distributes the Program.
-
-  "Licensed Patents " mean patent claims licensable by a Contributor
-  which are necessarily infringed by the use or sale of its Contribution
-  alone or when combined with the Program.
-
-  "Program" means the Contributions distributed in accordance with this Agreement.
-
-  "Recipient" means anyone who receives the Program under this
-  Agreement, including all Contributors.
-
-  2. GRANT OF RIGHTS
-
-  a) Subject to the terms of this Agreement, each Contributor
-  hereby grants Recipient a non-exclusive, worldwide, royalty-free
-  copyright license to reproduce, prepare derivative works of, publicly
-  display, publicly perform, distribute and sublicense the Contribution
-  of such Contributor, if any, and such derivative works, in source code
-  and object code form.
-
-  b) Subject to the terms of this Agreement, each Contributor
-  hereby grants Recipient a non-exclusive, worldwide, royalty-free
-  patent license under Licensed Patents to make, use, sell, offer to
-  sell, import and otherwise transfer the Contribution of such
-  Contributor, if any, in source code and object code form. This patent
-  license shall apply to the combination of the Contribution and the
-  Program if, at the time the Contribution is added by the Contributor,
-  such addition of the Contribution causes such combination to be
-  covered by the Licensed Patents. The patent license shall not apply to
-  any other combinations which include the Contribution. No hardware per
-  se is licensed hereunder.
-
-  c) Recipient understands that although each Contributor grants
-  the licenses to its Contributions set forth herein, no assurances are
-  provided by any Contributor that the Program does not infringe the
-  patent or other intellectual property rights of any other entity. Each
-  Contributor disclaims any liability to Recipient for claims brought by
-  any other entity based on infringement of intellectual property rights
-  or otherwise. As a condition to exercising the rights and licenses
-  granted hereunder, each Recipient hereby assumes sole responsibility
-  to secure any other intellectual property rights needed, if any. For
-  example, if a third party patent license is required to allow
-  Recipient to distribute the Program, it is Recipient's responsibility
-  to acquire that license before distributing the Program.
-
-  d) Each Contributor represents that to its knowledge it has
-  sufficient copyright rights in its Contribution, if any, to grant the
-  copyright license set forth in this Agreement.
-
-  3. REQUIREMENTS
-
-  A Contributor may choose to distribute the Program in object code form
-  under its own license agreement, provided that:
-
-  a) it complies with the terms and conditions of this Agreement;
-    and
-
-  b) its license agreement:
-
-  i) effectively disclaims on behalf of all Contributors all
-  warranties and conditions, express and implied, including warranties
-  or conditions of title and non-infringement, and implied warranties or
-  conditions of merchantability and fitness for a particular purpose;
-
-  ii) effectively excludes on behalf of all Contributors all
-  liability for damages, including direct, indirect, special, incidental
-  and consequential damages, such as lost profits;
-
-  iii) states that any provisions which differ from this Agreement
-  are offered by that Contributor alone and not by any other party; and
-
-  iv) states that source code for the Program is available from
-  such Contributor, and informs licensees how to obtain it in a
-  reasonable manner on or through a medium customarily used for software
-  exchange.
-
-  When the Program is made available in source code form:
-
-  a) it must be made available under this Agreement; and
-
-  b) a copy of this Agreement must be included with each copy of
-  the Program.
-
-  Contributors may not remove or alter any copyright notices contained
-  within the Program.
-
-  Each Contributor must identify itself as the originator of its
-  Contribution, if any, in a manner that reasonably allows subsequent
-  Recipients to identify the originator of the Contribution.
-
-  4. COMMERCIAL DISTRIBUTION
-
-  Commercial distributors of software may accept certain
-  responsibilities with respect to end users, business partners and the
-  like. While this license is intended to facilitate the commercial use
-  of the Program, the Contributor who includes the Program in a
-  commercial product offering should do so in a manner which does not
-  create potential liability for other Contributors. Therefore, if a
-  Contributor includes the Program in a commercial product offering,
-  such Contributor ("Commercial Contributor") hereby agrees to defend
-  and indemnify every other Contributor ("Indemnified Contributor")
-  against any losses, damages and costs (collectively "Losses") arising
-  from claims, lawsuits and other legal actions brought by a third party
-  against the Indemnified Contributor to the extent caused by the acts
-  or omissions of such Commercial Contributor in connection with its
-  distribution of the Program in a commercial product offering. The
-  obligations in this section do not apply to any claims or Losses
-  relating to any actual or alleged intellectual property
-  infringement. In order to qualify, an Indemnified Contributor must: a)
-  promptly notify the Commercial Contributor in writing of such claim,
-  and b) allow the Commercial Contributor to control, and cooperate with
-  the Commercial Contributor in, the defense and any related settlement
-  negotiations. The Indemnified Contributor may participate in any such
-  claim at its own expense.
-
-  For example, a Contributor might include the Program in a commercial
-  product offering, Product X. That Contributor is then a Commercial
-  Contributor. If that Commercial Contributor then makes performance
-  claims, or offers warranties related to Product X, those performance
-  claims and warranties are such Commercial Contributor's responsibility
-  alone. Under this section, the Commercial Contributor would have to
-  defend claims against the other Contributors related to those
-  performance claims and warranties, and if a court requires any other
-  Contributor to pay any damages as a result, the Commercial Contributor
-  must pay those damages.
-
-  5. NO WARRANTY
-
-  EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
-  PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY
-  WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
-  OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-  responsible for determining the appropriateness of using and
-  distributing the Program and assumes all risks associated with its
-  exercise of rights under this Agreement, including but not limited to
-  the risks and costs of program errors, compliance with applicable
-  laws, damage to or loss of data, programs or equipment, and
-  unavailability or interruption of operations.
-
-  6. DISCLAIMER OF LIABILITY
-
-  EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR
-  ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
-  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
-  WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
-  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
-  DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
-  HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-  7. GENERAL
-
-  If any provision of this Agreement is invalid or unenforceable under
-  applicable law, it shall not affect the validity or enforceability of
-  the remainder of the terms of this Agreement, and without further
-  action by the parties hereto, such provision shall be reformed to the
-  minimum extent necessary to make such provision valid and enforceable.
-
-  If Recipient institutes patent litigation against a Contributor with
-  respect to a patent applicable to software (including a cross-claim or
-  counterclaim in a lawsuit), then any patent licenses granted by that
-  Contributor to such Recipient under this Agreement shall terminate as
-  of the date such litigation is filed. In addition, if Recipient
-  institutes patent litigation against any entity (including a
-  cross-claim or counterclaim in a lawsuit) alleging that the Program
-  itself (excluding combinations of the Program with other software or
-  hardware) infringes such Recipient's patent(s), then such Recipient's
-  rights granted under Section 2(b) shall terminate as of the date such
-  litigation is filed.
-
-  All Recipient's rights under this Agreement shall terminate if it
-  fails to comply with any of the material terms or conditions of this
-  Agreement and does not cure such failure in a reasonable period of
-  time after becoming aware of such noncompliance. If all Recipient's
-  rights under this Agreement terminate, Recipient agrees to cease use
-  and distribution of the Program as soon as reasonably
-  practicable. However, Recipient's obligations under this Agreement and
-  any licenses granted by Recipient relating to the Program shall
-  continue and survive.
-
-  Everyone is permitted to copy and distribute copies of this Agreement,
-  but in order to avoid inconsistency the Agreement is copyrighted and
-  may only be modified in the following manner. The Agreement Steward
-  reserves the right to publish new versions (including revisions) of
-  this Agreement from time to time. No one other than the Agreement
-  Steward has the right to modify this Agreement. IBM is the initial
-  Agreement Steward. IBM may assign the responsibility to serve as the
-  Agreement Steward to a suitable separate entity. Each new version of
-  the Agreement will be given a distinguishing version number. The
-  Program (including Contributions) may always be distributed subject to
-  the version of the Agreement under which it was received. In addition,
-  after a new version of the Agreement is published, Contributor may
-  elect to distribute the Program (including its Contributions) under
-  the new version. Except as expressly stated in Sections 2(a) and 2(b)
-  above, Recipient receives no rights or licenses to the intellectual
-  property of any Contributor under this Agreement, whether expressly,
-  by implication, estoppel or otherwise. All rights in the Program not
-  expressly granted under this Agreement are reserved.
-
-  This Agreement is governed by the laws of the State of New York and
-  the intellectual property laws of the United States of America. No
-  party to this Agreement will bring a legal action under this Agreement
-  more than one year after the cause of action arose. Each party waives
- its rights to a jury trial in any resulting litigation.
-
-The complete text of the GNU General Public License v2 is as follows:
-
-          GNU GENERAL PUBLIC LICENSE
-             Version 2, June 1991
-
-   Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-                         59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-   Everyone is permitted to copy and distribute verbatim copies
-   of this license document, but changing it is not allowed.
-
-            Preamble
-
-    The licenses for most software are designed to take away your
-  freedom to share and change it. By contrast, the GNU General Public
-  License is intended to guarantee your freedom to share and change free
-  software--to make sure the software is free for all its users. This
-  General Public License applies to most of the Free Software
-  Foundation's software and to any other program whose authors commit to
-  using it. (Some other Free Software Foundation software is covered by
-  the GNU Library General Public License instead.) You can apply it to
-  your programs, too.
-
-    When we speak of free software, we are referring to freedom, not
-  price. Our General Public Licenses are designed to make sure that you
-  have the freedom to distribute copies of free software (and charge for
-  this service if you wish), that you receive source code or can get it
-  if you want it, that you can change the software or use pieces of it
-  in new free programs; and that you know you can do these things.
-
-    To protect your rights, we need to make restrictions that forbid
-  anyone to deny you these rights or to ask you to surrender the rights.
-  These restrictions translate to certain responsibilities for you if you
-  distribute copies of the software, or if you modify it.
-
-    For example, if you distribute copies of such a program, whether
-  gratis or for a fee, you must give the recipients all the rights that
-  you have. You must make sure that they, too, receive or can get the
-  source code. And you must show them these terms so they know their
-  rights.
-
-    We protect your rights with two steps: (1) copyright the software, and
-  (2) offer you this license which gives you legal permission to copy,
-  distribute and/or modify the software.
-
-    Also, for each author's protection and ours, we want to make certain
-  that everyone understands that there is no warranty for this free
-  software. If the software is modified by someone else and passed on, we
-  want its recipients to know that what they have is not the original, so
-  that any problems introduced by others will not reflect on the original
-  authors' reputations.
-
-    Finally, any free program is threatened constantly by software
-  patents. We wish to avoid the danger that redistributors of a free
-  program will individually obtain patent licenses, in effect making the
-  program proprietary. To prevent this, we have made it clear that any
-  patent must be licensed for everyone's free use or not licensed at all.
-
-    The precise terms and conditions for copying, distribution and
-  modification follow.
-
-          GNU GENERAL PUBLIC LICENSE
-     TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-    0. This License applies to any program or other work which contains
-  a notice placed by the copyright holder saying it may be distributed
-  under the terms of this General Public License. The "Program", below,
-  refers to any such program or work, and a "work based on the Program"
-  means either the Program or any derivative work under copyright law:
-  that is to say, a work containing the Program or a portion of it,
-  either verbatim or with modifications and/or translated into another
-  language. (Hereinafter, translation is included without limitation in
-  the term "modification".) Each licensee is addressed as "you".
-
-  Activities other than copying, distribution and modification are not
-  covered by this License; they are outside its scope. The act of
-  running the Program is not restricted, and the output from the Program
-  is covered only if its contents constitute a work based on the
-  Program (independent of having been made by running the Program).
-  Whether that is true depends on what the Program does.
-
-    1. You may copy and distribute verbatim copies of the Program's
-  source code as you receive it, in any medium, provided that you
-  conspicuously and appropriately publish on each copy an appropriate
-  copyright notice and disclaimer of warranty; keep intact all the
-  notices that refer to this License and to the absence of any warranty;
-  and give any other recipients of the Program a copy of this License
-  along with the Program.
-
-  You may charge a fee for the physical act of transferring a copy, and
-  you may at your option offer warranty protection in exchange for a fee.
-
-    2. You may modify your copy or copies of the Program or any portion
-  of it, thus forming a work based on the Program, and copy and
-  distribute such modifications or work under the terms of Section 1
-  above, provided that you also meet all of these conditions:
-
-      a) You must cause the modified files to carry prominent notices
-      stating that you changed the files and the date of any change.
-
-      b) You must cause any work that you distribute or publish, that in
-      whole or in part contains or is derived from the Program or any
-      part thereof, to be licensed as a whole at no charge to all third
-      parties under the terms of this License.
-
-      c) If the modified program normally reads commands interactively
-      when run, you must cause it, when started running for such
-      interactive use in the most ordinary way, to print or display an
-      announcement including an appropriate copyright notice and a
-      notice that there is no warranty (or else, saying that you provide
-      a warranty) and that users may redistribute the program under
-      these conditions, and telling the user how to view a copy of this
-      License. (Exception: if the Program itself is interactive but
-      does not normally print such an announcement, your work based on
-      the Program is not required to print an announcement.)
-
-  These requirements apply to the modified work as a whole. If
-  identifiable sections of that work are not derived from the Program,
-  and can be reasonably considered independent and separate works in
-  themselves, then this License, and its terms, do not apply to those
-  sections when you distribute them as separate works. But when you
-  distribute the same sections as part of a whole which is a work based
-  on the Program, the distribution of the whole must be on the terms of
-  this License, whose permissions for other licensees extend to the
-  entire whole, and thus to each and every part regardless of who wrote it.
-
-  Thus, it is not the intent of this section to claim rights or contest
-  your rights to work written entirely by you; rather, the intent is to
-  exercise the right to control the distribution of derivative or
-  collective works based on the Program.
-
-  In addition, mere aggregation of another work not based on the Program
-  with the Program (or with a work based on the Program) on a volume of
-  a storage or distribution medium does not bring the other work under
-  the scope of this License.
-
-    3. You may copy and distribute the Program (or a work based on it,
-  under Section 2) in object code or executable form under the terms of
-  Sections 1 and 2 above provided that you also do one of the following:
-
-      a) Accompany it with the complete corresponding machine-readable
-      source code, which must be distributed under the terms of Sections
-      1 and 2 above on a medium customarily used for software interchange; or,
-
-      b) Accompany it with a written offer, valid for at least three
-      years, to give any third party, for a charge no more than your
-      cost of physically performing source distribution, a complete
-      machine-readable copy of the corresponding source code, to be
-      distributed under the terms of Sections 1 and 2 above on a medium
-      customarily used for software interchange; or,
-
-      c) Accompany it with the information you received as to the offer
-      to distribute corresponding source code. (This alternative is
-      allowed only for noncommercial distribution and only if you
-      received the program in object code or executable form with such
-      an offer, in accord with Subsection b above.)
-
-  The source code for a work means the preferred form of the work for
-  making modifications to it. For an executable work, complete source
-  code means all the source code for all modules it contains, plus any
-  associated interface definition files, plus the scripts used to
-  control compilation and installation of the executable. However, as a
-  special exception, the source code distributed need not include
-  anything that is normally distributed (in either source or binary
-  form) with the major components (compiler, kernel, and so on) of the
-  operating system on which the executable runs, unless that component
-  itself accompanies the executable.
-
-  If distribution of executable or object code is made by offering
-  access to copy from a designated place, then offering equivalent
-  access to copy the source code from the same place counts as
-  distribution of the source code, even though third parties are not
-  compelled to copy the source along with the object code.
-
-    4. You may not copy, modify, sublicense, or distribute the Program
-  except as expressly provided under this License. Any attempt
-  otherwise to copy, modify, sublicense or distribute the Program is
-  void, and will automatically terminate your rights under this License.
-  However, parties who have received copies, or rights, from you under
-  this License will not have their licenses terminated so long as such
-  parties remain in full compliance.
-
-    5. You are not required to accept this License, since you have not
-  signed it. However, nothing else grants you permission to modify or
-  distribute the Program or its derivative works. These actions are
-  prohibited by law if you do not accept this License. Therefore, by
-  modifying or distributing the Program (or any work based on the
-  Program), you indicate your acceptance of this License to do so, and
-  all its terms and conditions for copying, distributing or modifying
-  the Program or works based on it.
-
-    6. Each time you redistribute the Program (or any work based on the
-  Program), the recipient automatically receives a license from the
-  original licensor to copy, distribute or modify the Program subject to
-  these terms and conditions. You may not impose any further
-  restrictions on the recipients' exercise of the rights granted herein.
-  You are not responsible for enforcing compliance by third parties to
-  this License.
-
-    7. If, as a consequence of a court judgment or allegation of patent
-  infringement or for any other reason (not limited to patent issues),
-  conditions are imposed on you (whether by court order, agreement or
-  otherwise) that contradict the conditions of this License, they do not
-  excuse you from the conditions of this License. If you cannot
-  distribute so as to satisfy simultaneously your obligations under this
-  License and any other pertinent obligations, then as a consequence you
-  may not distribute the Program at all. For example, if a patent
-  license would not permit royalty-free redistribution of the Program by
-  all those who receive copies directly or indirectly through you, then
-  the only way you could satisfy both it and this License would be to
-  refrain entirely from distribution of the Program.
-
-  If any portion of this section is held invalid or unenforceable under
-  any particular circumstance, the balance of the section is intended to
-  apply and the section as a whole is intended to apply in other
-  circumstances.
-
-  It is not the purpose of this section to induce you to infringe any
-  patents or other property right claims or to contest validity of any
-  such claims; this section has the sole purpose of protecting the
-  integrity of the free software distribution system, which is
-  implemented by public license practices. Many people have made
-  generous contributions to the wide range of software distributed
-  through that system in reliance on consistent application of that
-  system; it is up to the author/donor to decide if he or she is willing
-  to distribute software through any other system and a licensee cannot
-  impose that choice.
-
-  This section is intended to make thoroughly clear what is believed to
-  be a consequence of the rest of this License.
-
-    8. If the distribution and/or use of the Program is restricted in
-  certain countries either by patents or by copyrighted interfaces, the
-  original copyright holder who places the Program under this License
-  may add an explicit geographical distribution limitation excluding
-  those countries, so that distribution is permitted only in or among
-  countries not thus excluded. In such case, this License incorporates
-  the limitation as if written in the body of this License.
-
-    9. The Free Software Foundation may publish revised and/or new versions
-  of the General Public License from time to time. Such new versions will
-  be similar in spirit to the present version, but may differ in detail to
-  address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the Program
-  specifies a version number of this License which applies to it and "any
-  later version", you have the option of following the terms and conditions
-  either of that version or of any later version published by the Free
-  Software Foundation. If the Program does not specify a version number of
-  this License, you may choose any version ever published by the Free Software
-  Foundation.
-
-    10. If you wish to incorporate parts of the Program into other free
-  programs whose distribution conditions are different, write to the author
-  to ask for permission. For software which is copyrighted by the Free
-  Software Foundation, write to the Free Software Foundation; we sometimes
-  make exceptions for this. Our decision will be guided by the two goals
-  of preserving the free status of all derivatives of our free software and
-  of promoting the sharing and reuse of software generally.
-
-            NO WARRANTY
-
-    11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-  FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-  OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-  PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-  OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-  TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-  PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-  REPAIR OR CORRECTION.
-
-    12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-  WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-  REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-  INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-  OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-  TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-  YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-  PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-  POSSIBILITY OF SUCH DAMAGES.
-
-           END OF TERMS AND CONDITIONS
-
-The complete text of the GNU Lesser General Public License 2.1 is as follows:
-
-        GNU LESSER GENERAL PUBLIC LICENSE
-             Version 2.1, February 1999
-
-   Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-       59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-   Everyone is permitted to copy and distribute verbatim copies
-   of this license document, but changing it is not allowed.
-
-  [This is the first released version of the Lesser GPL. It also counts
-   as the successor of the GNU Library Public License, version 2, hence
-   the version number 2.1.]
-
-            Preamble
-
-    The licenses for most software are designed to take away your
-  freedom to share and change it. By contrast, the GNU General Public
-  Licenses are intended to guarantee your freedom to share and change
-  free software--to make sure the software is free for all its users.
-
-    This license, the Lesser General Public License, applies to some
-  specially designated software packages--typically libraries--of the
-  Free Software Foundation and other authors who decide to use it. You
-  can use it too, but we suggest you first think carefully about whether
-  this license or the ordinary General Public License is the better
-  strategy to use in any particular case, based on the explanations below.
-
-    When we speak of free software, we are referring to freedom of use,
-  not price. Our General Public Licenses are designed to make sure that
-  you have the freedom to distribute copies of free software (and charge
-  for this service if you wish); that you receive source code or can get
-  it if you want it; that you can change the software and use pieces of
-  it in new free programs; and that you are informed that you can do
-  these things.
-
-    To protect your rights, we need to make restrictions that forbid
-  distributors to deny you these rights or to ask you to surrender these
-  rights. These restrictions translate to certain responsibilities for
-  you if you distribute copies of the library or if you modify it.
-
-    For example, if you distribute copies of the library, whether gratis
-  or for a fee, you must give the recipients all the rights that we gave
-  you. You must make sure that they, too, receive or can get the source
-  code. If you link other code with the library, you must provide
-  complete object files to the recipients, so that they can relink them
-  with the library after making changes to the library and recompiling
-  it. And you must show them these terms so they know their rights.
-
-    We protect your rights with a two-step method: (1) we copyright the
-  library, and (2) we offer you this license, which gives you legal
-  permission to copy, distribute and/or modify the library.
-
-    To protect each distributor, we want to make it very clear that
-  there is no warranty for the free library. Also, if the library is
-  modified by someone else and passed on, the recipients should know
-  that what they have is not the original version, so that the original
-  author's reputation will not be affected by problems that might be
-  introduced by others.
-
-    Finally, software patents pose a constant threat to the existence of
-  any free program. We wish to make sure that a company cannot
-  effectively restrict the users of a free program by obtaining a
-  restrictive license from a patent holder. Therefore, we insist that
-  any patent license obtained for a version of the library must be
-  consistent with the full freedom of use specified in this license.
-
-    Most GNU software, including some libraries, is covered by the
-  ordinary GNU General Public License. This license, the GNU Lesser
-  General Public License, applies to certain designated libraries, and
-  is quite different from the ordinary General Public License. We use
-  this license for certain libraries in order to permit linking those
-  libraries into non-free programs.
-
-    When a program is linked with a library, whether statically or using
-  a shared library, the combination of the two is legally speaking a
-  combined work, a derivative of the original library. The ordinary
-  General Public License therefore permits such linking only if the
-  entire combination fits its criteria of freedom. The Lesser General
-  Public License permits more lax criteria for linking other code with
-  the library.
-
-    We call this license the "Lesser" General Public License because it
-  does Less to protect the user's freedom than the ordinary General
-  Public License. It also provides other free software developers Less
-  of an advantage over competing non-free programs. These disadvantages
-  are the reason we use the ordinary General Public License for many
-  libraries. However, the Lesser license provides advantages in certain
-  special circumstances.
-
-    For example, on rare occasions, there may be a special need to
-  encourage the widest possible use of a certain library, so that it becomes
-  a de-facto standard. To achieve this, non-free programs must be
-  allowed to use the library. A more frequent case is that a free
-  library does the same job as widely used non-free libraries. In this
-  case, there is little to gain by limiting the free library to free
-  software only, so we use the Lesser General Public License.
-
-    In other cases, permission to use a particular library in non-free
-  programs enables a greater number of people to use a large body of
-  free software. For example, permission to use the GNU C Library in
-  non-free programs enables many more people to use the whole GNU
-  operating system, as well as its variant, the GNU/Linux operating
-  system.
-
-    Although the Lesser General Public License is Less protective of the
-  users' freedom, it does ensure that the user of a program that is
-  linked with the Library has the freedom and the wherewithal to run
-  that program using a modified version of the Library.
-
-    The precise terms and conditions for copying, distribution and
-  modification follow. Pay close attention to the difference between a
-  "work based on the library" and a "work that uses the library". The
-  former contains code derived from the library, whereas the latter must
-  be combined with the library in order to run.
-
-        GNU LESSER GENERAL PUBLIC LICENSE
-     TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-    0. This License Agreement applies to any software library or other
-  program which contains a notice placed by the copyright holder or
-  other authorized party saying it may be distributed under the terms of
-  this Lesser General Public License (also called "this License").
-  Each licensee is addressed as "you".
-
-    A "library" means a collection of software functions and/or data
-  prepared so as to be conveniently linked with application programs
-  (which use some of those functions and data) to form executables.
-
-    The "Library", below, refers to any such software library or work
-  which has been distributed under these terms. A "work based on the
-  Library" means either the Library or any derivative work under
-  copyright law: that is to say, a work containing the Library or a
-  portion of it, either verbatim or with modifications and/or translated
-  straightforwardly into another language. (Hereinafter, translation is
-  included without limitation in the term "modification".)
-
-    "Source code" for a work means the preferred form of the work for
-  making modifications to it. For a library, complete source code means
-  all the source code for all modules it contains, plus any associated
-  interface definition files, plus the scripts used to control compilation
-  and installation of the library.
-
-    Activities other than copying, distribution and modification are not
-  covered by this License; they are outside its scope. The act of
-  running a program using the Library is not restricted, and output from
-  such a program is covered only if its contents constitute a work based
-  on the Library (independent of the use of the Library in a tool for
-  writing it). Whether that is true depends on what the Library does
-  and what the program that uses the Library does.
-
-    1. You may copy and distribute verbatim copies of the Library's
-  complete source code as you receive it, in any medium, provided that
-  you conspicuously and appropriately publish on each copy an
-  appropriate copyright notice and disclaimer of warranty; keep intact
-  all the notices that refer to this License and to the absence of any
-  warranty; and distribute a copy of this License along with the
-  Library.
-
-    You may charge a fee for the physical act of transferring a copy,
-  and you may at your option offer warranty protection in exchange for a
-  fee.
-
-    2. You may modify your copy or copies of the Library or any portion
-  of it, thus forming a work based on the Library, and copy and
-  distribute such modifications or work under the terms of Section 1
-  above, provided that you also meet all of these conditions:
-
-      a) The modified work must itself be a software library.
-
-      b) You must cause the files modified to carry prominent notices
-      stating that you changed the files and the date of any change.
-
-      c) You must cause the whole of the work to be licensed at no
-      charge to all third parties under the terms of this License.
-
-      d) If a facility in the modified Library refers to a function or a
-      table of data to be supplied by an application program that uses
-      the facility, other than as an argument passed when the facility
-      is invoked, then you must make a good faith effort to ensure that,
-      in the event an application does not supply such function or
-      table, the facility still operates, and performs whatever part of
-      its purpose remains meaningful.
-
-      (For example, a function in a library to compute square roots has
-      a purpose that is entirely well-defined independent of the
-      application. Therefore, Subsection 2d requires that any
-      application-supplied function or table used by this function must
-      be optional: if the application does not supply it, the square
-      root function must still compute square roots.)
-
-  These requirements apply to the modified work as a whole. If
-  identifiable sections of that work are not derived from the Library,
-  and can be reasonably considered independent and separate works in
-  themselves, then this License, and its terms, do not apply to those
-  sections when you distribute them as separate works. But when you
-  distribute the same sections as part of a whole which is a work based
-  on the Library, the distribution of the whole must be on the terms of
-  this License, whose permissions for other licensees extend to the
-  entire whole, and thus to each and every part regardless of who wrote
-  it.
-
-  Thus, it is not the intent of this section to claim rights or contest
-  your rights to work written entirely by you; rather, the intent is to
-  exercise the right to control the distribution of derivative or
-  collective works based on the Library.
-
-  In addition, mere aggregation of another work not based on the Library
-  with the Library (or with a work based on the Library) on a volume of
-  a storage or distribution medium does not bring the other work under
-  the scope of this License.
-
-    3. You may opt to apply the terms of the ordinary GNU General Public
-  License instead of this License to a given copy of the Library. To do
-  this, you must alter all the notices that refer to this License, so
-  that they refer to the ordinary GNU General Public License, version 2,
-  instead of to this License. (If a newer version than version 2 of the
-  ordinary GNU General Public License has appeared, then you can specify
-  that version instead if you wish.) Do not make any other change in
-  these notices.
-
-    Once this change is made in a given copy, it is irreversible for
-  that copy, so the ordinary GNU General Public License applies to all
-  subsequent copies and derivative works made from that copy.
-
-    This option is useful when you wish to copy part of the code of
-  the Library into a program that is not a library.
-
-    4. You may copy and distribute the Library (or a portion or
-  derivative of it, under Section 2) in object code or executable form
-  under the terms of Sections 1 and 2 above provided that you accompany
-  it with the complete corresponding machine-readable source code, which
-  must be distributed under the terms of Sections 1 and 2 above on a
-  medium customarily used for software interchange.
-
-    If distribution of object code is made by offering access to copy
-  from a designated place, then offering equivalent access to copy the
-  source code from the same place satisfies the requirement to
-  distribute the source code, even though third parties are not
-  compelled to copy the source along with the object code.
-
-    5. A program that contains no derivative of any portion of the
-  Library, but is designed to work with the Library by being compiled or
-  linked with it, is called a "work that uses the Library". Such a
-  work, in isolation, is not a derivative work of the Library, and
-  therefore falls outside the scope of this License.
-
-    However, linking a "work that uses the Library" with the Library
-  creates an executable that is a derivative of the Library (because it
-  contains portions of the Library), rather than a "work that uses the
-  library". The executable is therefore covered by this License.
-  Section 6 states terms for distribution of such executables.
-
-    When a "work that uses the Library" uses material from a header file
-  that is part of the Library, the object code for the work may be a
-  derivative work of the Library even though the source code is not.
-  Whether this is true is especially significant if the work can be
-  linked without the Library, or if the work is itself a library. The
-  threshold for this to be true is not precisely defined by law.
-
-    If such an object file uses only numerical parameters, data
-  structure layouts and accessors, and small macros and small inline
-  functions (ten lines or less in length), then the use of the object
-  file is unrestricted, regardless of whether it is legally a derivative
-  work. (Executables containing this object code plus portions of the
-  Library will still fall under Section 6.)
-
-    Otherwise, if the work is a derivative of the Library, you may
-  distribute the object code for the work under the terms of Section 6.
-  Any executables containing that work also fall under Section 6,
-  whether or not they are linked directly with the Library itself.
-
-    6. As an exception to the Sections above, you may also combine or
-  link a "work that uses the Library" with the Library to produce a
-  work containing portions of the Library, and distribute that work
-  under terms of your choice, provided that the terms permit
-  modification of the work for the customer's own use and reverse
-  engineering for debugging such modifications.
-
-    You must give prominent notice with each copy of the work that the
-  Library is used in it and that the Library and its use are covered by
-  this License. You must supply a copy of this License. If the work
-  during execution displays copyright notices, you must include the
-  copyright notice for the Library among them, as well as a reference
-  directing the user to the copy of this License. Also, you must do one
-  of these things:
-
-      a) Accompany the work with the complete corresponding
-      machine-readable source code for the Library including whatever
-      changes were used in the work (which must be distributed under
-      Sections 1 and 2 above); and, if the work is an executable linked
-      with the Library, with the complete machine-readable "work that
-      uses the Library", as object code and/or source code, so that the
-      user can modify the Library and then relink to produce a modified
-      executable containing the modified Library. (It is understood
-      that the user who changes the contents of definitions files in the
-      Library will not necessarily be able to recompile the application
-      to use the modified definitions.)
-
-      b) Use a suitable shared library mechanism for linking with the
-      Library. A suitable mechanism is one that (1) uses at run time a
-      copy of the library already present on the user's computer system,
-      rather than copying library functions into the executable, and (2)
-      will operate properly with a modified version of the library, if
-      the user installs one, as long as the modified version is
-      interface-compatible with the version that the work was made with.
-
-      c) Accompany the work with a written offer, valid for at
-      least three years, to give the same user the materials
-      specified in Subsection 6a, above, for a charge no more
-      than the cost of performing this distribution.
-
-      d) If distribution of the work is made by offering access to copy
-      from a designated place, offer equivalent access to copy the above
-      specified materials from the same place.
-
-      e) Verify that the user has already received a copy of these
-      materials or that you have already sent this user a copy.
-
-    For an executable, the required form of the "work that uses the
-  Library" must include any data and utility programs needed for
-  reproducing the executable from it. However, as a special exception,
-  the materials to be distributed need not include anything that is
-  normally distributed (in either source or binary form) with the major
-  components (compiler, kernel, and so on) of the operating system on
-  which the executable runs, unless that component itself accompanies
-  the executable.
-
-    It may happen that this requirement contradicts the license
-  restrictions of other proprietary libraries that do not normally
-  accompany the operating system. Such a contradiction means you cannot
-  use both them and the Library together in an executable that you
-  distribute.
-
-    7. You may place library facilities that are a work based on the
-  Library side-by-side in a single library together with other library
-  facilities not covered by this License, and distribute such a combined
-  library, provided that the separate distribution of the work based on
-  the Library and of the other library facilities is otherwise
-  permitted, and provided that you do these two things:
-
-      a) Accompany the combined library with a copy of the same work
-      based on the Library, uncombined with any other library
-      facilities. This must be distributed under the terms of the
-      Sections above.
-
-      b) Give prominent notice with the combined library of the fact
-      that part of it is a work based on the Library, and explaining
-      where to find the accompanying uncombined form of the same work.
-
-    8. You may not copy, modify, sublicense, link with, or distribute
-  the Library except as expressly provided under this License. Any
-  attempt otherwise to copy, modify, sublicense, link with, or
-  distribute the Library is void, and will automatically terminate your
-  rights under this License. However, parties who have received copies,
-  or rights, from you under this License will not have their licenses
-  terminated so long as such parties remain in full compliance.
-
-    9. You are not required to accept this License, since you have not
-  signed it. However, nothing else grants you permission to modify or
-  distribute the Library or its derivative works. These actions are
-  prohibited by law if you do not accept this License. Therefore, by
-  modifying or distributing the Library (or any work based on the
-  Library), you indicate your acceptance of this License to do so, and
-  all its terms and conditions for copying, distributing or modifying
-  the Library or works based on it.
-
-    10. Each time you redistribute the Library (or any work based on the
-  Library), the recipient automatically receives a license from the
-  original licensor to copy, distribute, link with or modify the Library
-  subject to these terms and conditions. You may not impose any further
-  restrictions on the recipients' exercise of the rights granted herein.
-  You are not responsible for enforcing compliance by third parties with
-  this License.
-
-    11. If, as a consequence of a court judgment or allegation of patent
-  infringement or for any other reason (not limited to patent issues),
-  conditions are imposed on you (whether by court order, agreement or
-  otherwise) that contradict the conditions of this License, they do not
-  excuse you from the conditions of this License. If you cannot
-  distribute so as to satisfy simultaneously your obligations under this
-  License and any other pertinent obligations, then as a consequence you
-  may not distribute the Library at all. For example, if a patent
-  license would not permit royalty-free redistribution of the Library by
-  all those who receive copies directly or indirectly through you, then
-  the only way you could satisfy both it and this License would be to
-  refrain entirely from distribution of the Library.
-
-  If any portion of this section is held invalid or unenforceable under any
-  particular circumstance, the balance of the section is intended to apply,
-  and the section as a whole is intended to apply in other circumstances.
-
-  It is not the purpose of this section to induce you to infringe any
-  patents or other property right claims or to contest validity of any
-  such claims; this section has the sole purpose of protecting the
-  integrity of the free software distribution system which is
-  implemented by public license practices. Many people have made
-  generous contributions to the wide range of software distributed
-  through that system in reliance on consistent application of that
-  system; it is up to the author/donor to decide if he or she is willing
-  to distribute software through any other system and a licensee cannot
-  impose that choice.
-
-  This section is intended to make thoroughly clear what is believed to
-  be a consequence of the rest of this License.
-
-    12. If the distribution and/or use of the Library is restricted in
-  certain countries either by patents or by copyrighted interfaces, the
-  original copyright holder who places the Library under this License may add
-  an explicit geographical distribution limitation excluding those countries,
-  so that distribution is permitted only in or among countries not thus
-  excluded. In such case, this License incorporates the limitation as if
-  written in the body of this License.
-
-    13. The Free Software Foundation may publish revised and/or new
-  versions of the Lesser General Public License from time to time.
-  Such new versions will be similar in spirit to the present version,
-  but may differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the Library
-  specifies a version number of this License which applies to it and
-  "any later version", you have the option of following the terms and
-  conditions either of that version or of any later version published by
-  the Free Software Foundation. If the Library does not specify a
-  license version number, you may choose any version ever published by
-  the Free Software Foundation.
-
-    14. If you wish to incorporate parts of the Library into other free
-  programs whose distribution conditions are incompatible with these,
-  write to the author to ask for permission. For software which is
-  copyrighted by the Free Software Foundation, write to the Free
-  Software Foundation; we sometimes make exceptions for this. Our
-  decision will be guided by the two goals of preserving the free status
-  of all derivatives of our free software and of promoting the sharing
-  and reuse of software generally.
-
-            NO WARRANTY
-
-    15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-  WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-  OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-  KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-  PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-  LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-  THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-    16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-  WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-  AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-  FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-  CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-  LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-  RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-  FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-  SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-  DAMAGES.
-
-           END OF TERMS AND CONDITIONS
-
-             How to Apply These Terms to Your New Libraries
-
-    If you develop a new library, and you want it to be of the greatest
-  possible use to the public, we recommend making it free software that
-  everyone can redistribute and change. You can do so by permitting
-  redistribution under these terms (or, alternatively, under the terms of the
-  ordinary General Public License).
-
-    To apply these terms, attach the following notices to the library. It is
-  safest to attach them to the start of each source file to most effectively
-  convey the exclusion of warranty; and each file should have at least the
-  "copyright" line and a pointer to where the full notice is found.
-
-      <one line to give the library's name and a brief idea of what it does.>
-      Copyright (C) <year> <name of author>
-
-      This library is free software; you can redistribute it and/or
-      modify it under the terms of the GNU Lesser General Public
-      License as published by the Free Software Foundation; either
-      version 2.1 of the License, or (at your option) any later version.
-
-      This library is distributed in the hope that it will be useful,
-      but WITHOUT ANY WARRANTY; without even the implied warranty of
-      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-      Lesser General Public License for more details.
-
-      You should have received a copy of the GNU Lesser General Public
-      License along with this library; if not, write to the Free Software
-      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-  Also add information on how to contact you by electronic and paper mail.
-
-  You should also get your employer (if you work as a programmer) or your
-  school, if any, to sign a "copyright disclaimer" for the library, if
-  necessary. Here is a sample; alter the names:
-
-    Yoyodyne, Inc., hereby disclaims all copyright interest in the
-    library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-    <signature of Ty Coon>, 1 April 1990
-    Ty Coon, President of Vice
-
-  That's all there is to it!
-
-The following licenses cover code other than JRuby which is included with JRuby.
-
-Licenses listed below include:
-
-* GNU General Public License version 3
-* Apache 2.0 License
-* BSD License
-* Apache Software License Version 1.1
-* MIT License
-
-The complete text of the GNU General Public License version 3 is as follows:
-
-          GNU GENERAL PUBLIC LICENSE
-             Version 3, 29 June 2007
-
-   Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
-   Everyone is permitted to copy and distribute verbatim copies
-   of this license document, but changing it is not allowed.
-
-            Preamble
-
-    The GNU General Public License is a free, copyleft license for
-  software and other kinds of works.
-
-    The licenses for most software and other practical works are designed
-  to take away your freedom to share and change the works. By contrast,
-  the GNU General Public License is intended to guarantee your freedom to
-  share and change all versions of a program--to make sure it remains free
-  software for all its users. We, the Free Software Foundation, use the
-  GNU General Public License for most of our software; it applies also to
-  any other work released this way by its authors. You can apply it to
-  your programs, too.
-
-    When we speak of free software, we are referring to freedom, not
-  price. Our General Public Licenses are designed to make sure that you
-  have the freedom to distribute copies of free software (and charge for
-  them if you wish), that you receive source code or can get it if you
-  want it, that you can change the software or use pieces of it in new
-  free programs, and that you know you can do these things.
-
-    To protect your rights, we need to prevent others from denying you
-  these rights or asking you to surrender the rights. Therefore, you have
-  certain responsibilities if you distribute copies of the software, or if
-  you modify it: responsibilities to respect the freedom of others.
-
-    For example, if you distribute copies of such a program, whether
-  gratis or for a fee, you must pass on to the recipients the same
-  freedoms that you received. You must make sure that they, too, receive
-  or can get the source code. And you must show them these terms so they
-  know their rights.
-
-    Developers that use the GNU GPL protect your rights with two steps:
-  (1) assert copyright on the software, and (2) offer you this License
-  giving you legal permission to copy, distribute and/or modify it.
-
-    For the developers' and authors' protection, the GPL clearly explains
-  that there is no warranty for this free software. For both users' and
-  authors' sake, the GPL requires that modified versions be marked as
-  changed, so that their problems will not be attributed erroneously to
-  authors of previous versions.
-
-    Some devices are designed to deny users access to install or run
-  modified versions of the software inside them, although the manufacturer
-  can do so. This is fundamentally incompatible with the aim of
-  protecting users' freedom to change the software. The systematic
-  pattern of such abuse occurs in the area of products for individuals to
-  use, which is precisely where it is most unacceptable. Therefore, we
-  have designed this version of the GPL to prohibit the practice for those
-  products. If such problems arise substantially in other domains, we
-  stand ready to extend this provision to those domains in future versions
-  of the GPL, as needed to protect the freedom of users.
-
-    Finally, every program is threatened constantly by software patents.
-  States should not allow patents to restrict development and use of
-  software on general-purpose computers, but in those that do, we wish to
-  avoid the special danger that patents applied to a free program could
-  make it effectively proprietary. To prevent this, the GPL assures that
-  patents cannot be used to render the program non-free.
-
-    The precise terms and conditions for copying, distribution and
-  modification follow.
-
-             TERMS AND CONDITIONS
-
-    0. Definitions.
-
-    "This License" refers to version 3 of the GNU General Public License.
-
-    "Copyright" also means copyright-like laws that apply to other kinds of
-  works, such as semiconductor masks.
-
-    "The Program" refers to any copyrightable work licensed under this
-  License. Each licensee is addressed as "you". "Licensees" and
-  "recipients" may be individuals or organizations.
-
-    To "modify" a work means to copy from or adapt all or part of the work
-  in a fashion requiring copyright permission, other than the making of an
-  exact copy. The resulting work is called a "modified version" of the
-  earlier work or a work "based on" the earlier work.
-
-    A "covered work" means either the unmodified Program or a work based
-  on the Program.
-
-    To "propagate" a work means to do anything with it that, without
-  permission, would make you directly or secondarily liable for
-  infringement under applicable copyright law, except executing it on a
-  computer or modifying a private copy. Propagation includes copying,
-  distribution (with or without modification), making available to the
-  public, and in some countries other activities as well.
-
-    To "convey" a work means any kind of propagation that enables other
-  parties to make or receive copies. Mere interaction with a user through
-  a computer network, with no transfer of a copy, is not conveying.
-
-    An interactive user interface displays "Appropriate Legal Notices"
-  to the extent that it includes a convenient and prominently visible
-  feature that (1) displays an appropriate copyright notice, and (2)
-  tells the user that there is no warranty for the work (except to the
-  extent that warranties are provided), that licensees may convey the
-  work under this License, and how to view a copy of this License. If
-  the interface presents a list of user commands or options, such as a
-  menu, a prominent item in the list meets this criterion.
-
-    1. Source Code.
-
-    The "source code" for a work means the preferred form of the work
-  for making modifications to it. "Object code" means any non-source
-  form of a work.
-
-    A "Standard Interface" means an interface that either is an official
-  standard defined by a recognized standards body, or, in the case of
-  interfaces specified for a particular programming language, one that
-  is widely used among developers working in that language.
-
-    The "System Libraries" of an executable work include anything, other
-  than the work as a whole, that (a) is included in the normal form of
-  packaging a Major Component, but which is not part of that Major
-  Component, and (b) serves only to enable use of the work with that
-  Major Component, or to implement a Standard Interface for which an
-  implementation is available to the public in source code form. A
-  "Major Component", in this context, means a major essential component
-  (kernel, window system, and so on) of the specific operating system
-  (if any) on which the executable work runs, or a compiler used to
-  produce the work, or an object code interpreter used to run it.
-
-    The "Corresponding Source" for a work in object code form means all
-  the source code needed to generate, install, and (for an executable
-  work) run the object code and to modify the work, including scripts to
-  control those activities. However, it does not include the work's
-  System Libraries, or general-purpose tools or generally available free
-  programs which are used unmodified in performing those activities but
-  which are not part of the work. For example, Corresponding Source
-  includes interface definition files associated with source files for
-  the work, and the source code for shared libraries and dynamically
-  linked subprograms that the work is specifically designed to require,
-  such as by intimate data communication or control flow between those
-  subprograms and other parts of the work.
-
-    The Corresponding Source need not include anything that users
-  can regenerate automatically from other parts of the Corresponding
-  Source.
-
-    The Corresponding Source for a work in source code form is that
-  same work.
-
-    2. Basic Permissions.
-
-    All rights granted under this License are granted for the term of
-  copyright on the Program, and are irrevocable provided the stated
-  conditions are met. This License explicitly affirms your unlimited
-  permission to run the unmodified Program. The output from running a
-  covered work is covered by this License only if the output, given its
-  content, constitutes a covered work. This License acknowledges your
-  rights of fair use or other equivalent, as provided by copyright law.
-
-    You may make, run and propagate covered works that you do not
-  convey, without conditions so long as your license otherwise remains
-  in force. You may convey covered works to others for the sole purpose
-  of having them make modifications exclusively for you, or provide you
-  with facilities for running those works, provided that you comply with
-  the terms of this License in conveying all material for which you do
-  not control copyright. Those thus making or running the covered works
-  for you must do so exclusively on your behalf, under your direction
-  and control, on terms that prohibit them from making any copies of
-  your copyrighted material outside their relationship with you.
-
-    Conveying under any other circumstances is permitted solely under
-  the conditions stated below. Sublicensing is not allowed; section 10
-  makes it unnecessary.
-
-    3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-    No covered work shall be deemed part of an effective technological
-  measure under any applicable law fulfilling obligations under article
-  11 of the WIPO copyright treaty adopted on 20 December 1996, or
-  similar laws prohibiting or restricting circumvention of such
-  measures.
-
-    When you convey a covered work, you waive any legal power to forbid
-  circumvention of technological measures to the extent such circumvention
-  is effected by exercising rights under this License with respect to
-  the covered work, and you disclaim any intention to limit operation or
-  modification of the work as a means of enforcing, against the work's
-  users, your or third parties' legal rights to forbid circumvention of
-  technological measures.
-
-    4. Conveying Verbatim Copies.
-
-    You may convey verbatim copies of the Program's source code as you
-  receive it, in any medium, provided that you conspicuously and
-  appropriately publish on each copy an appropriate copyright notice;
-  keep intact all notices stating that this License and any
-  non-permissive terms added in accord with section 7 apply to the code;
-  keep intact all notices of the absence of any warranty; and give all
-  recipients a copy of this License along with the Program.
-
-    You may charge any price or no price for each copy that you convey,
-  and you may offer support or warranty protection for a fee.
-
-    5. Conveying Modified Source Versions.
-
-    You may convey a work based on the Program, or the modifications to
-  produce it from the Program, in the form of source code under the
-  terms of section 4, provided that you also meet all of these conditions:
-
-      a) The work must carry prominent notices stating that you modified
-      it, and giving a relevant date.
-
-      b) The work must carry prominent notices stating that it is
-      released under this License and any conditions added under section
-      7. This requirement modifies the requirement in section 4 to
-      "keep intact all notices".
-
-      c) You must license the entire work, as a whole, under this
-      License to anyone who comes into possession of a copy. This
-      License will therefore apply, along with any applicable section 7
-      additional terms, to the whole of the work, and all its parts,
-      regardless of how they are packaged. This License gives no
-      permission to license the work in any other way, but it does not
-      invalidate such permission if you have separately received it.
-
-      d) If the work has interactive user interfaces, each must display
-      Appropriate Legal Notices; however, if the Program has interactive
-      interfaces that do not display Appropriate Legal Notices, your
-      work need not make them do so.
-
-    A compilation of a covered work with other separate and independent
-  works, which are not by their nature extensions of the covered work,
-  and which are not combined with it such as to form a larger program,
-  in or on a volume of a storage or distribution medium, is called an
-  "aggregate" if the compilation and its resulting copyright are not
-  used to limit the access or legal rights of the compilation's users
-  beyond what the individual works permit. Inclusion of a covered work
-  in an aggregate does not cause this License to apply to the other
-  parts of the aggregate.
-
-    6. Conveying Non-Source Forms.
-
-    You may convey a covered work in object code form under the terms
-  of sections 4 and 5, provided that you also convey the
-  machine-readable Corresponding Source under the terms of this License,
-  in one of these ways:
-
-      a) Convey the object code in, or embodied in, a physical product
-      (including a physical distribution medium), accompanied by the
-      Corresponding Source fixed on a durable physical medium
-      customarily used for software interchange.
-
-      b) Convey the object code in, or embodied in, a physical product
-      (including a physical distribution medium), accompanied by a
-      written offer, valid for at least three years and valid for as
-      long as you offer spare parts or customer support for that product
-      model, to give anyone who possesses the object code either (1) a
-      copy of the Corresponding Source for all the software in the
-      product that is covered by this License, on a durable physical
-      medium customarily used for software interchange, for a price no
-      more than your reasonable cost of physically performing this
-      conveying of source, or (2) access to copy the
-      Corresponding Source from a network server at no charge.
-
-      c) Convey individual copies of the object code with a copy of the
-      written offer to provide the Corresponding Source. This
-      alternative is allowed only occasionally and noncommercially, and
-      only if you received the object code with such an offer, in accord
-      with subsection 6b.
-
-      d) Convey the object code by offering access from a designated
-      place (gratis or for a charge), and offer equivalent access to the
-      Corresponding Source in the same way through the same place at no
-      further charge. You need not require recipients to copy the
-      Corresponding Source along with the object code. If the place to
-      copy the object code is a network server, the Corresponding Source
-      may be on a different server (operated by you or a third party)
-      that supports equivalent copying facilities, provided you maintain
-      clear directions next to the object code saying where to find the
-      Corresponding Source. Regardless of what server hosts the
-      Corresponding Source, you remain obligated to ensure that it is
-      available for as long as needed to satisfy these requirements.
-
-      e) Convey the object code using peer-to-peer transmission, provided
-      you inform other peers where the object code and Corresponding
-      Source of the work are being offered to the general public at no
-      charge under subsection 6d.
-
-    A separable portion of the object code, whose source code is excluded
-  from the Corresponding Source as a System Library, need not be
-  included in conveying the object code work.
-
-    A "User Product" is either (1) a "consumer product", which means any
-  tangible personal property which is normally used for personal, family,
-  or household purposes, or (2) anything designed or sold for incorporation
-  into a dwelling. In determining whether a product is a consumer product,
-  doubtful cases shall be resolved in favor of coverage. For a particular
-  product received by a particular user, "normally used" refers to a
-  typical or common use of that class of product, regardless of the status
-  of the particular user or of the way in which the particular user
-  actually uses, or expects or is expected to use, the product. A product
-  is a consumer product regardless of whether the product has substantial
-  commercial, industrial or non-consumer uses, unless such uses represent
-  the only significant mode of use of the product.
-
-    "Installation Information" for a User Product means any methods,
-  procedures, authorization keys, or other information required to install
-  and execute modified versions of a covered work in that User Product from
-  a modified version of its Corresponding Source. The information must
-  suffice to ensure that the continued functioning of the modified object
-  code is in no case prevented or interfered with solely because
-  modification has been made.
-
-    If you convey an object code work under this section in, or with, or
-  specifically for use in, a User Product, and the conveying occurs as
-  part of a transaction in which the right of possession and use of the
-  User Product is transferred to the recipient in perpetuity or for a
-  fixed term (regardless of how the transaction is characterized), the
-  Corresponding Source conveyed under this section must be accompanied
-  by the Installation Information. But this requirement does not apply
-  if neither you nor any third party retains the ability to install
-  modified object code on the User Product (for example, the work has
-  been installed in ROM).
-
-    The requirement to provide Installation Information does not include a
-  requirement to continue to provide support service, warranty, or updates
-  for a work that has been modified or installed by the recipient, or for
-  the User Product in which it has been modified or installed. Access to a
-  network may be denied when the modification itself materially and
-  adversely affects the operation of the network or violates the rules and
-  protocols for communication across the network.
-
-    Corresponding Source conveyed, and Installation Information provided,
-  in accord with this section must be in a format that is publicly
-  documented (and with an implementation available to the public in
-  source code form), and must require no special password or key for
-  unpacking, reading or copying.
-
-    7. Additional Terms.
-
-    "Additional permissions" are terms that supplement the terms of this
-  License by making exceptions from one or more of its conditions.
-  Additional permissions that are applicable to the entire Program shall
-  be treated as though they were included in this License, to the extent
-  that they are valid under applicable law. If additional permissions
-  apply only to part of the Program, that part may be used separately
-  under those permissions, but the entire Program remains governed by
-  this License without regard to the additional permissions.
-
-    When you convey a copy of a covered work, you may at your option
-  remove any additional permissions from that copy, or from any part of
-  it. (Additional permissions may be written to require their own
-  removal in certain cases when you modify the work.) You may place
-  additional permissions on material, added by you to a covered work,
-  for which you have or can give appropriate copyright permission.
-
-    Notwithstanding any other provision of this License, for material you
-  add to a covered work, you may (if authorized by the copyright holders of
-  that material) supplement the terms of this License with terms:
-
-      a) Disclaiming warranty or limiting liability differently from the
-      terms of sections 15 and 16 of this License; or
-
-      b) Requiring preservation of specified reasonable legal notices or
-      author attributions in that material or in the Appropriate Legal
-      Notices displayed by works containing it; or
-
-      c) Prohibiting misrepresentation of the origin of that material, or
-      requiring that modified versions of such material be marked in
-      reasonable ways as different from the original version; or
-
-      d) Limiting the use for publicity purposes of names of licensors or
-      authors of the material; or
-
-      e) Declining to grant rights under trademark law for use of some
-      trade names, trademarks, or service marks; or
-
-      f) Requiring indemnification of licensors and authors of that
-      material by anyone who conveys the material (or modified versions of
-      it) with contractual assumptions of liability to the recipient, for
-      any liability that these contractual assumptions directly impose on
-      those licensors and authors.
-
-    All other non-permissive additional terms are considered "further
-  restrictions" within the meaning of section 10. If the Program as you
-  received it, or any part of it, contains a notice stating that it is
-  governed by this License along with a term that is a further
-  restriction, you may remove that term. If a license document contains
-  a further restriction but permits relicensing or conveying under this
-  License, you may add to a covered work material governed by the terms
-  of that license document, provided that the further restriction does
-  not survive such relicensing or conveying.
-
-    If you add terms to a covered work in accord with this section, you
-  must place, in the relevant source files, a statement of the
-  additional terms that apply to those files, or a notice indicating
-  where to find the applicable terms.
-
-    Additional terms, permissive or non-permissive, may be stated in the
-  form of a separately written license, or stated as exceptions;
-  the above requirements apply either way.
-
-    8. Termination.
-
-    You may not propagate or modify a covered work except as expressly
-  provided under this License. Any attempt otherwise to propagate or
-  modify it is void, and will automatically terminate your rights under
-  this License (including any patent licenses granted under the third
-  paragraph of section 11).
-
-    However, if you cease all violation of this License, then your
-  license from a particular copyright holder is reinstated (a)
-  provisionally, unless and until the copyright holder explicitly and
-  finally terminates your license, and (b) permanently, if the copyright
-  holder fails to notify you of the violation by some reasonable means
-  prior to 60 days after the cessation.
-
-    Moreover, your license from a particular copyright holder is
-  reinstated permanently if the copyright holder notifies you of the
-  violation by some reasonable means, this is the first time you have
-  received notice of violation of this License (for any work) from that
-  copyright holder, and you cure the violation prior to 30 days after
-  your receipt of the notice.
-
-    Termination of your rights under this section does not terminate the
-  licenses of parties who have received copies or rights from you under
-  this License. If your rights have been terminated and not permanently
-  reinstated, you do not qualify to receive new licenses for the same
-  material under section 10.
-
-    9. Acceptance Not Required for Having Copies.
-
-    You are not required to accept this License in order to receive or
-  run a copy of the Program. Ancillary propagation of a covered work
-  occurring solely as a consequence of using peer-to-peer transmission
-  to receive a copy likewise does not require acceptance. However,
-  nothing other than this License grants you permission to propagate or
-  modify any covered work. These actions infringe copyright if you do
-  not accept this License. Therefore, by modifying or propagating a
-  covered work, you indicate your acceptance of this License to do so.
-
-    10. Automatic Licensing of Downstream Recipients.
-
-    Each time you convey a covered work, the recipient automatically
-  receives a license from the original licensors, to run, modify and
-  propagate that work, subject to this License. You are not responsible
-  for enforcing compliance by third parties with this License.
-
-    An "entity transaction" is a transaction transferring control of an
-  organization, or substantially all assets of one, or subdividing an
-  organization, or merging organizations. If propagation of a covered
-  work results from an entity transaction, each party to that
-  transaction who receives a copy of the work also receives whatever
-  licenses to the work the party's predecessor in interest had or could
-  give under the previous paragraph, plus a right to possession of the
-  Corresponding Source of the work from the predecessor in interest, if
-  the predecessor has it or can get it with reasonable efforts.
-
-    You may not impose any further restrictions on the exercise of the
-  rights granted or affirmed under this License. For example, you may
-  not impose a license fee, royalty, or other charge for exercise of
-  rights granted under this License, and you may not initiate litigation
-  (including a cross-claim or counterclaim in a lawsuit) alleging that
-  any patent claim is infringed by making, using, selling, offering for
-  sale, or importing the Program or any portion of it.
-
-    11. Patents.
-
-    A "contributor" is a copyright holder who authorizes use under this
-  License of the Program or a work on which the Program is based. The
-  work thus licensed is called the contributor's "contributor version".
-
-    A contributor's "essential patent claims" are all patent claims
-  owned or controlled by the contributor, whether already acquired or
-  hereafter acquired, that would be infringed by some manner, permitted
-  by this License, of making, using, or selling its contributor version,
-  but do not include claims that would be infringed only as a
-  consequence of further modification of the contributor version. For
-  purposes of this definition, "control" includes the right to grant
-  patent sublicenses in a manner consistent with the requirements of
-  this License.
-
-    Each contributor grants you a non-exclusive, worldwide, royalty-free
-  patent license under the contributor's essential patent claims, to
-  make, use, sell, offer for sale, import and otherwise run, modify and
-  propagate the contents of its contributor version.
-
-    In the following three paragraphs, a "patent license" is any express
-  agreement or commitment, however denominated, not to enforce a patent
-  (such as an express permission to practice a patent or covenant not to
-  sue for patent infringement). To "grant" such a patent license to a
-  party means to make such an agreement or commitment not to enforce a
-  patent against the party.
-
-    If you convey a covered work, knowingly relying on a patent license,
-  and the Corresponding Source of the work is not available for anyone
-  to copy, free of charge and under the terms of this License, through a
-  publicly available network server or other readily accessible means,
-  then you must either (1) cause the Corresponding Source to be so
-  available, or (2) arrange to deprive yourself of the benefit of the
-  patent license for this particular work, or (3) arrange, in a manner
-  consistent with the requirements of this License, to extend the patent
-  license to downstream recipients. "Knowingly relying" means you have
-  actual knowledge that, but for the patent license, your conveying the
-  covered work in a country, or your recipient's use of the covered work
-  in a country, would infringe one or more identifiable patents in that
-  country that you have reason to believe are valid.
-
-    If, pursuant to or in connection with a single transaction or
-  arrangement, you convey, or propagate by procuring conveyance of, a
-  covered work, and grant a patent license to some of the parties
-  receiving the covered work authorizing them to use, propagate, modify
-  or convey a specific copy of the covered work, then the patent license
-  you grant is automatically extended to all recipients of the covered
-  work and works based on it.
-
-    A patent license is "discriminatory" if it does not include within
-  the scope of its coverage, prohibits the exercise of, or is
-  conditioned on the non-exercise of one or more of the rights that are
-  specifically granted under this License. You may not convey a covered
-  work if you are a party to an arrangement with a third party that is
-  in the business of distributing software, under which you make payment
-  to the third party based on the extent of your activity of conveying
-  the work, and under which the third party grants, to any of the
-  parties who would receive the covered work from you, a discriminatory
-  patent license (a) in connection with copies of the covered work
-  conveyed by you (or copies made from those copies), or (b) primarily
-  for and in connection with specific products or compilations that
-  contain the covered work, unless you entered into that arrangement,
-  or that patent license was granted, prior to 28 March 2007.
-
-    Nothing in this License shall be construed as excluding or limiting
-  any implied license or other defenses to infringement that may
-  otherwise be available to you under applicable patent law.
-
-    12. No Surrender of Others' Freedom.
-
-    If conditions are imposed on you (whether by court order, agreement or
-  otherwise) that contradict the conditions of this License, they do not
-  excuse you from the conditions of this License. If you cannot convey a
-  covered work so as to satisfy simultaneously your obligations under this
-  License and any other pertinent obligations, then as a consequence you may
-  not convey it at all. For example, if you agree to terms that obligate you
-  to collect a royalty for further conveying from those to whom you convey
-  the Program, the only way you could satisfy both those terms and this
-  License would be to refrain entirely from conveying the Program.
-
-    13. Use with the GNU Affero General Public License.
-
-    Notwithstanding any other provision of this License, you have
-  permission to link or combine any covered work with a work licensed
-  under version 3 of the GNU Affero General Public License into a single
-  combined work, and to convey the resulting work. The terms of this
-  License will continue to apply to the part which is the covered work,
-  but the special requirements of the GNU Affero General Public License,
-  section 13, concerning interaction through a network will apply to the
-  combination as such.
-
-    14. Revised Versions of this License.
-
-    The Free Software Foundation may publish revised and/or new versions of
-  the GNU General Public License from time to time. Such new versions will
-  be similar in spirit to the present version, but may differ in detail to
-  address new problems or concerns.
-
-    Each version is given a distinguishing version number. If the
-  Program specifies that a certain numbered version of the GNU General
-  Public License "or any later version" applies to it, you have the
-  option of following the terms and conditions either of that numbered
-  version or of any later version published by the Free Software
-  Foundation. If the Program does not specify a version number of the
-  GNU General Public License, you may choose any version ever published
-  by the Free Software Foundation.
-
-    If the Program specifies that a proxy can decide which future
-  versions of the GNU General Public License can be used, that proxy's
-  public statement of acceptance of a version permanently authorizes you
-  to choose that version for the Program.
-
-    Later license versions may give you additional or different
-  permissions. However, no additional obligations are imposed on any
-  author or copyright holder as a result of your choosing to follow a
-  later version.
-
-    15. Disclaimer of Warranty.
-
-    THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-  APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-  HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-  OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-  PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-  IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-  ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-    16. Limitation of Liability.
-
-    IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-  WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-  THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-  GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-  USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-  DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-  PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-  EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-  SUCH DAMAGES.
-
-    17. Interpretation of Sections 15 and 16.
-
-    If the disclaimer of warranty and limitation of liability provided
-  above cannot be given local legal effect according to their terms,
-  reviewing courts shall apply local law that most closely approximates
-  an absolute waiver of all civil liability in connection with the
-  Program, unless a warranty or assumption of liability accompanies a
-  copy of the Program in return for a fee.
-
-           END OF TERMS AND CONDITIONS
-
-        How to Apply These Terms to Your New Programs
-
-    If you develop a new program, and you want it to be of the greatest
-  possible use to the public, the best way to achieve this is to make it
-  free software which everyone can redistribute and change under these terms.
-
-    To do so, attach the following notices to the program. It is safest
-  to attach them to the start of each source file to most effectively
-  state the exclusion of warranty; and each file should have at least
-  the "copyright" line and a pointer to where the full notice is found.
-
-      <one line to give the program's name and a brief idea of what it does.>
-      Copyright (C) <year> <name of author>
-
-      This program is free software: you can redistribute it and/or modify
-      it under the terms of the GNU General Public License as published by
-      the Free Software Foundation, either version 3 of the License, or
-      (at your option) any later version.
-
-      This program is distributed in the hope that it will be useful,
-      but WITHOUT ANY WARRANTY; without even the implied warranty of
-      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-      GNU General Public License for more details.
-
-      You should have received a copy of the GNU General Public License
-      along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-  Also add information on how to contact you by electronic and paper mail.
-
-    If the program does terminal interaction, make it output a short
-  notice like this when it starts in an interactive mode:
-
-      <program> Copyright (C) <year> <name of author>
-      This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-      This is free software, and you are welcome to redistribute it
-      under certain conditions; type `show c' for details.
-
-  The hypothetical commands `show w' and `show c' should show the appropriate
-  parts of the General Public License. Of course, your program's commands
-  might be different; for a GUI interface, you would use an "about box".
-
-    You should also get your employer (if you work as a programmer) or school,
-  if any, to sign a "copyright disclaimer" for the program, if necessary.
-  For more information on this, and how to apply and follow the GNU GPL, see
-  <http://www.gnu.org/licenses/>.
-
-    The GNU General Public License does not permit incorporating your program
-  into proprietary programs. If your program is a subroutine library, you
-  may consider it more useful to permit linking proprietary applications with
-  the library. If this is what you want to do, use the GNU Lesser General
-  Public License instead of this License. But first, please read
-  <http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
-The complete text of the Apache 2.0 License is as follows:
-
-                                Apache License
-                          Version 2.0, January 2004
-                       http://www.apache.org/licenses/
-
-  TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-  1. Definitions.
-
-     "License" shall mean the terms and conditions for use, reproduction,
-     and distribution as defined by Sections 1 through 9 of this document.
-
-     "Licensor" shall mean the copyright owner or entity authorized by
-     the copyright owner that is granting the License.
-
-     "Legal Entity" shall mean the union of the acting entity and all
-     other entities that control, are controlled by, or are under common
-     control with that entity. For the purposes of this definition,
-     "control" means (i) the power, direct or indirect, to cause the
-     direction or management of such entity, whether by contract or
-     otherwise, or (ii) ownership of fifty percent (50%) or more of the
-     outstanding shares, or (iii) beneficial ownership of such entity.
-
-     "You" (or "Your") shall mean an individual or Legal Entity
-     exercising permissions granted by this License.
-
-     "Source" form shall mean the preferred form for making modifications,
-     including but not limited to software source code, documentation
-     source, and configuration files.
-
-     "Object" form shall mean any form resulting from mechanical
-     transformation or translation of a Source form, including but
-     not limited to compiled object code, generated documentation,
-     and conversions to other media types.
-
-     "Work" shall mean the work of authorship, whether in Source or
-     Object form, made available under the License, as indicated by a
-     copyright notice that is included in or attached to the work
-     (an example is provided in the Appendix below).
-
-     "Derivative Works" shall mean any work, whether in Source or Object
-     form, that is based on (or derived from) the Work and for which the
-     editorial revisions, annotations, elaborations, or other modifications
-     represent, as a whole, an original work of authorship. For the purposes
-     of this License, Derivative Works shall not include works that remain
-     separable from, or merely link (or bind by name) to the interfaces of,
-     the Work and Derivative Works thereof.
-
-     "Contribution" shall mean any work of authorship, including
-     the original version of the Work and any modifications or additions
-     to that Work or Derivative Works thereof, that is intentionally
-     submitted to Licensor for inclusion in the Work by the copyright owner
-     or by an individual or Legal Entity authorized to submit on behalf of
-     the copyright owner. For the purposes of this definition, "submitted"
-     means any form of electronic, verbal, or written communication sent
-     to the Licensor or its representatives, including but not limited to
-     communication on electronic mailing lists, source code control systems,
-     and issue tracking systems that are managed by, or on behalf of, the
-     Licensor for the purpose of discussing and improving the Work, but
-     excluding communication that is conspicuously marked or otherwise
-     designated in writing by the copyright owner as "Not a Contribution."
-
-     "Contributor" shall mean Licensor and any individual or Legal Entity
-     on behalf of whom a Contribution has been received by Licensor and
-     subsequently incorporated within the Work.
-
-  2. Grant of Copyright License. Subject to the terms and conditions of
-     this License, each Contributor hereby grants to You a perpetual,
-     worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-     copyright license to reproduce, prepare Derivative Works of,
-     publicly display, publicly perform, sublicense, and distribute the
-     Work and such Derivative Works in Source or Object form.
-
-  3. Grant of Patent License. Subject to the terms and conditions of
-     this License, each Contributor hereby grants to You a perpetual,
-     worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-     (except as stated in this section) patent license to make, have made,
-     use, offer to sell, sell, import, and otherwise transfer the Work,
-     where such license applies only to those patent claims licensable
-     by such Contributor that are necessarily infringed by their
-     Contribution(s) alone or by combination of their Contribution(s)
-     with the Work to which such Contribution(s) was submitted. If You
-     institute patent litigation against any entity (including a
-     cross-claim or counterclaim in a lawsuit) alleging that the Work
-     or a Contribution incorporated within the Work constitutes direct
-     or contributory patent infringement, then any patent licenses
-     granted to You under this License for that Work shall terminate
-     as of the date such litigation is filed.
-
-  4. Redistribution. You may reproduce and distribute copies of the
-     Work or Derivative Works thereof in any medium, with or without
-     modifications, and in Source or Object form, provided that You
-     meet the following conditions:
-
-     (a) You must give any other recipients of the Work or
-         Derivative Works a copy of this License; and
-
-     (b) You must cause any modified files to carry prominent notices
-         stating that You changed the files; and
-
-     (c) You must retain, in the Source form of any Derivative Works
-         that You distribute, all copyright, patent, trademark, and
-         attribution notices from the Source form of the Work,
-         excluding those notices that do not pertain to any part of
-         the Derivative Works; and
-
-     (d) If the Work includes a "NOTICE" text file as part of its
-         distribution, then any Derivative Works that You distribute must
-         include a readable copy of the attribution notices contained
-         within such NOTICE file, excluding those notices that do not
-         pertain to any part of the Derivative Works, in at least one
-         of the following places: within a NOTICE text file distributed
-         as part of the Derivative Works; within the Source form or
-         documentation, if provided along with the Derivative Works; or,
-         within a display generated by the Derivative Works, if and
-         wherever such third-party notices normally appear. The contents
-         of the NOTICE file are for informational purposes only and
-         do not modify the License. You may add Your own attribution
-         notices within Derivative Works that You distribute, alongside
-         or as an addendum to the NOTICE text from the Work, provided
-         that such additional attribution notices cannot be construed
-         as modifying the License.
-
-     You may add Your own copyright statement to Your modifications and
-     may provide additional or different license terms and conditions
-     for use, reproduction, or distribution of Your modifications, or
-     for any such Derivative Works as a whole, provided Your use,
-     reproduction, and distribution of the Work otherwise complies with
-     the conditions stated in this License.
-
-  5. Submission of Contributions. Unless You explicitly state otherwise,
-     any Contribution intentionally submitted for inclusion in the Work
-     by You to the Licensor shall be under the terms and conditions of
-     this License, without any additional terms or conditions.
-     Notwithstanding the above, nothing herein shall supersede or modify
-     the terms of any separate license agreement you may have executed
-     with Licensor regarding such Contributions.
-
-  6. Trademarks. This License does not grant permission to use the trade
-     names, trademarks, service marks, or product names of the Licensor,
-     except as required for reasonable and customary use in describing the
-     origin of the Work and reproducing the content of the NOTICE file.
-
-  7. Disclaimer of Warranty. Unless required by applicable law or
-     agreed to in writing, Licensor provides the Work (and each
-     Contributor provides its Contributions) on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-     implied, including, without limitation, any warranties or conditions
-     of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-     PARTICULAR PURPOSE. You are solely responsible for determining the
-     appropriateness of using or redistributing the Work and assume any
-     risks associated with Your exercise of permissions under this License.
-
-  8. Limitation of Liability. In no event and under no legal theory,
-     whether in tort (including negligence), contract, or otherwise,
-     unless required by applicable law (such as deliberate and grossly
-     negligent acts) or agreed to in writing, shall any Contributor be
-     liable to You for damages, including any direct, indirect, special,
-     incidental, or consequential damages of any character arising as a
-     result of this License or out of the use or inability to use the
-     Work (including but not limited to damages for loss of goodwill,
-     work stoppage, computer failure or malfunction, or any and all
-     other commercial damages or losses), even if such Contributor
-     has been advised of the possibility of such damages.
-
-  9. Accepting Warranty or Additional Liability. While redistributing
-     the Work or Derivative Works thereof, You may choose to offer,
-     and charge a fee for, acceptance of support, warranty, indemnity,
-     or other liability obligations and/or rights consistent with this
-     License. However, in accepting such obligations, You may act only
-     on Your own behalf and on Your sole responsibility, not on behalf
-     of any other Contributor, and only if You agree to indemnify,
-     defend, and hold each Contributor harmless for any liability
-     incurred by, or claims asserted against, such Contributor by reason
-     of your accepting any such warranty or additional liability.
-
-  END OF TERMS AND CONDITIONS
-
-  APPENDIX: How to apply the Apache License to your work.
-
-     To apply the Apache License to your work, attach the following
-     boilerplate notice, with the fields enclosed by brackets "[]"
-     replaced with your own identifying information. (Don't include
-     the brackets!) The text should be enclosed in the appropriate
-     comment syntax for the file format. We also recommend that a
-     file or class name and description of purpose be included on the
-     same "printed page" as the copyright notice for easier
-     identification within third-party archives.
-
-  Copyright [yyyy] [name of copyright owner]
-
-  Licensed 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.
-
-The complete text of the BSD license can be is as follows:
-
-  Copyright (c) The Regents of the University of California.
-  All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions
-  are met:
-  1. Redistributions of source code must retain the above copyright
-     notice, this list of conditions and the following disclaimer.
-  2. Redistributions in binary form must reproduce the above copyright
-     notice, this list of conditions and the following disclaimer in the
-     documentation and/or other materials provided with the distribution.
-  3. Neither the name of the University nor the names of its contributors
-     may be used to endorse or promote products derived from this software
-     without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-  ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-  SUCH DAMAGE.
-
-The complete text of the Apache Software License Version 1.1 is as follows:
-
- /*
-  * ================================================================
-  * The Apache Software License, Version 1.1
-  * ================================================================
-  *
-  * Copyright (C) 2000-2002 The Apache Software Foundation. All
-  * rights reserved.
-  *
-  * Redistribution and use in source and binary forms, with or without
-  * modification, are permitted provided that the following
-  * conditions are met:
-  *
-  * 1. Redistributions of source code must retain the above copyright
-  * notice, this list of conditions and the following disclaimer.
-  *
-  * 2. Redistributions in binary form must reproduce the above copyright
-  * notice, this list of conditions and the following disclaimer in
-  * the documentation and/or other materials provided with the
-  * distribution.
-  *
-  * 3. The end-user documentation included with the redistribution, if
-  * any, must include the following acknowledgment: "This product
-  * includes software developed by the Apache Software Foundation
-  * (http://www.apache.org/)." Alternately, this acknowledgment may
-  * appear in the software itself, if and wherever such third-party
-  * acknowledgments normally appear.
-  *
-  * 4. The names "Ant" and "Apache Software Foundation" must not be
-  * used to endorse or promote products derived from this software
-  * without prior written permission. For written permission, please
-  * contact apache@apache.org.
-  *
-  * 5. Products derived from this software may not be called "Apache",
-  * nor may "Apache" appear in their name, without prior written
-  * permission of the Apache Software Foundation.
-  *
-  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-  * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION
-  * OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
-  * OF SUCH DAMAGE.
-  *
-  * This software consists of voluntary contributions made by many
-  * individuals on behalf of the Apache Software Foundation. For more
-  * information on the Apache Software Foundation, please see
-  * <http://www.apache.org/>.
-  *
-  */
-
-The complete text of the MIT license is as follows:
-
-  Permission is hereby granted, free of charge, to any person
-  obtaining a copy of this software and associated documentation
-  files (the ÒSoftwareÓ), to deal in the Software without
-  restriction, including without limitation the rights to use,
-  copy, modify, merge, publish, distribute, sublicense, and/or sell
-  copies of the Software, and to permit persons to whom the
-  Software is furnished to do so, subject to the following
-  conditions:
-
-  The above copyright notice and this permission notice shall be
-  included in all copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED ÒAS ISÓ, WITHOUT WARRANTY OF ANY KIND,
-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-  OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-  HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-  WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-  OTHER DEALINGS IN THE SOFTWARE.
-
-
-END OF NOTICE
\ No newline at end of file
diff --git a/libraries/lang-jruby/README.txt b/libraries/lang-jruby/README.txt
new file mode 100644
index 0000000..3b2dcf5
--- /dev/null
+++ b/libraries/lang-jruby/README.txt
@@ -0,0 +1,10 @@
+
+JRuby is licensed under LGPL, and Apache Software Foundation
+doesn't allow the use of LGPL in Apache projects.
+
+Therefor, Apache Zest™ had to drop this library component, but
+it is still available for separate download at
+
+https://github.com/Qi4j/qi4j-sdk
+
+in the libraries/lang-jruby directory.
diff --git a/libraries/lang-jruby/build.gradle b/libraries/lang-jruby/build.gradle
deleted file mode 100644
index 0d1ecbb..0000000
--- a/libraries/lang-jruby/build.gradle
+++ /dev/null
@@ -1,15 +0,0 @@
-description = "Qi4j JRuby Library allows for Mixins to be implemented in JRuby scripts instead of directly in compiled Java."
-
-jar { manifest { name = "Qi4j Library - Scripting - JRuby" }}
-
-
-dependencies {
-  compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
-  compile( project( ':org.qi4j.libraries:org.qi4j.library.scripting' ))
-  compile(libraries.jruby)
-
-  testCompile(project(":org.qi4j.core:org.qi4j.core.testsupport"))
-
-  testRuntime(project(":org.qi4j.core:org.qi4j.core.runtime"))
-  testRuntime(libraries.logback)
-}
diff --git a/libraries/lang-jruby/dev-status.xml b/libraries/lang-jruby/dev-status.xml
deleted file mode 100644
index cefc98a..0000000
--- a/libraries/lang-jruby/dev-status.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
-        http://www.qi4j.org/schemas/2008/dev-status/1/dev-status.xsd">
-  <status>
-    <!--none,early,beta,stable,mature-->
-    <codebase>beta</codebase>
-
-    <!-- none, brief, good, complete -->
-    <documentation>brief</documentation>
-
-    <!-- none, some, good, complete -->
-    <unittests>some</unittests>
-  </status>
-  <licenses>
-    <license>ALv2</license>
-  </licenses>
-</module>
\ No newline at end of file
diff --git a/libraries/lang-jruby/licenses/jruby.license b/libraries/lang-jruby/licenses/jruby.license
deleted file mode 100644
index 64b9511..0000000
--- a/libraries/lang-jruby/licenses/jruby.license
+++ /dev/null
@@ -1,60 +0,0 @@
-JRuby distributes some ruby modules which are distributed under Ruby
-license:
-
-Ruby is copyrighted free software by Yukihiro Matsumoto <matz@netlab.jp>.
-You can redistribute it and/or modify it under either the terms of the GPL
-(see the file GPL), or the conditions below:
-
-  1. You may make and give away verbatim copies of the source form of the
-     software without restriction, provided that you duplicate all of the
-     original copyright notices and associated disclaimers.
-
-  2. You may modify your copy of the software in any way, provided that
-     you do at least ONE of the following:
-
-       a) place your modifications in the Public Domain or otherwise
-          make them Freely Available, such as by posting said
-modifications to Usenet or an equivalent medium, or by allowing
-the author to include your modifications in the software.
-
-       b) use the modified software only within your corporation or
-          organization.
-
-       c) give non-standard binaries non-standard names, with
-          instructions on where to get the original software distribution.
-
-       d) make other distribution arrangements with the author.
-
-  3. You may distribute the software in object code or binary form,
-     provided that you do at least ONE of the following:
-
-       a) distribute the binaries and library files of the software,
-together with instructions (in the manual page or equivalent)
-on where to get the original distribution.
-
-       b) accompany the distribution with the machine-readable source of
-the software.
-
-       c) give non-standard binaries non-standard names, with
-          instructions on where to get the original software distribution.
-
-       d) make other distribution arrangements with the author.
-
-  4. You may modify and include the part of the software into any other
-     software (possibly commercial). But some files in the distribution
-     are not written by the author, so that they are not under these terms.
-
-     For the list of those files and their copying conditions, see the
-     file LEGAL.
-
-  5. The scripts and library files supplied as input to or produced as
-     output from the software do not automatically fall under the
-     copyright of the software, but belong to whomever generated them,
-     and may be sold commercially, and may be aggregated with this
-     software.
-
-  6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
-     IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-     PURPOSE.
-
diff --git a/libraries/lang-jruby/src/docs/lang-jruby.txt b/libraries/lang-jruby/src/docs/lang-jruby.txt
deleted file mode 100644
index a7113c2..0000000
--- a/libraries/lang-jruby/src/docs/lang-jruby.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-[[library-script-jruby, JRuby Scripting Library]]
-= JRuby Scripting =
-
-[devstatus]
---------------
-source=libraries/lang-jruby/dev-status.xml
---------------
-
-The JRuby Scripting Library allows Mixin methods to be implemented in Ruby and loaded dynamically on first use.
-
-include::../../build/docs/buildinfo/artifact.txt[]
-
-The JRuby Scripting Library is a Generic mixin that implements interfaces by delegating to Ruby functions using JRuby. Each method in an interface is declared by a Ruby method in a file located in classpath with the name "<interface>.rb", where the interface name includes the package, and has "." replaced with "/".
-
-Example: 
-
-    org/qi4j/samples/hello/domain/HelloWorldSpeaker.rb
-
-That means that the HelloWorldSpeaker.rb file may be co-located with the class files in the same package. It is currently not supported to place the JRuby implementation of the mixin in a different package than the interface it implements.
-
-To use JRuby to implement the Mixin functionality for a given interface, 
-simply declare the +JRubyMixin+ like any other mixin, either in the interface 
-or at assembly time.
-
-[snippet,java]
-----
-source=libraries/lang-jruby/src/test/java/org/qi4j/lang/jruby/HelloSpeaker.java
-tag=mixin
-----
diff --git a/libraries/lang-jruby/src/main/java/org/qi4j/lang/jruby/JRubyMixin.java b/libraries/lang-jruby/src/main/java/org/qi4j/lang/jruby/JRubyMixin.java
deleted file mode 100644
index 9d4bd01..0000000
--- a/libraries/lang-jruby/src/main/java/org/qi4j/lang/jruby/JRubyMixin.java
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * Copyright 2007 Rickard Öberg
- * Licensed 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.qi4j.lang.jruby;
-
-import java.io.*;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Map;
-import org.jruby.*;
-import org.jruby.exceptions.RaiseException;
-import org.jruby.internal.runtime.methods.CallConfiguration;
-import org.jruby.internal.runtime.methods.DynamicMethod;
-import org.jruby.javasupport.JavaEmbedUtils;
-import org.jruby.runtime.Block;
-import org.jruby.runtime.ThreadContext;
-import org.jruby.runtime.Visibility;
-import org.jruby.runtime.builtin.IRubyObject;
-import org.qi4j.api.common.AppliesTo;
-import org.qi4j.api.common.AppliesToFilter;
-import org.qi4j.api.composite.Composite;
-import org.qi4j.api.composite.TransientBuilderFactory;
-import org.qi4j.api.injection.scope.Service;
-import org.qi4j.api.injection.scope.Structure;
-import org.qi4j.api.injection.scope.This;
-import org.qi4j.api.property.Property;
-import org.qi4j.library.scripting.ScriptReloadable;
-
-/**
- * Generic mixin that implements interfaces by delegating to Ruby functions
- * using JRuby. Each method in an interface is declared by a Ruby method
- * in a file located in classpath with the name "&lt;interface&gt;.rb",
- * where the interface name includes the package, and has "." replaced with "/".
- * <p>
- * Example:
- * </p>
- * <pre><code>
- * org/qi4j/samples/hello/domain/HelloWorldSpeaker.rb
- * </code></pre>
- */
-@AppliesTo( JRubyMixin.AppliesTo.class )
-public class JRubyMixin
-    implements InvocationHandler, ScriptReloadable
-{
-    @This private Composite me;
-
-    @Service private Ruby runtime;
-
-    private Map<Class, IRubyObject> rubyObjects = new HashMap<Class, IRubyObject>();
-
-    public static class AppliesTo
-        implements AppliesToFilter
-    {
-
-        @Override
-        public boolean appliesTo( Method method, Class compositeType, Class mixin, Class modelClass )
-        {
-            return getFunctionResoure( method ) != null;
-        }
-
-    }
-
-    @Structure TransientBuilderFactory factory;
-
-    @Override
-    public Object invoke( Object proxy, Method method, Object[] args ) throws Throwable
-    {
-        try
-        {
-            // Get Ruby object for declaring class of the method
-            Class declaringClass = method.getDeclaringClass();
-            IRubyObject rubyObject = rubyObjects.get( declaringClass );
-
-            // If not yet created, create one
-            if( rubyObject == null )
-            {
-                // Create object instance
-                try
-                {
-                    rubyObject = runtime.evalScriptlet( declaringClass.getSimpleName() + ".new()" );
-                }
-                catch( RaiseException e )
-                {
-                    if( e.getException() instanceof RubyNameError )
-                    {
-                        // Initialize Ruby class
-                        String script = getFunction( method );
-                        runtime.evalScriptlet( script );
-
-                        // Try creating a Ruby instance again
-                        rubyObject = runtime.evalScriptlet( declaringClass.getSimpleName() + ".new()" );
-                    }
-                    else
-                    {
-                        throw e;
-                    }
-                }
-
-                // Set @this variable to Composite
-                IRubyObject meRuby = JavaEmbedUtils.javaToRuby( runtime, me );
-                RubyClass rubyClass = meRuby.getMetaClass();
-                if( !rubyClass.isFrozen() )
-                {
-                    SetterDynamicMethod setter = new SetterDynamicMethod( runtime.getObjectSpaceModule(), Visibility.PUBLIC, null );
-                    GetterDynamicMethod getter = new GetterDynamicMethod( runtime.getObjectSpaceModule(), Visibility.PUBLIC, null );
-                    Method[] compositeMethods = me.getClass().getInterfaces()[ 0 ].getMethods();
-                    for( Method compositeMethod : compositeMethods )
-                    {
-                        if( Property.class.isAssignableFrom( compositeMethod.getReturnType() ) )
-                        {
-
-                            rubyClass.addMethod( compositeMethod.getName() + "=", setter );
-                            rubyClass.addMethod( compositeMethod.getName(), getter );
-                        }
-                    }
-                    rubyClass.freeze( ThreadContext.newContext( runtime ) );
-                }
-
-                RubyObjectAdapter rubyObjectAdapter = JavaEmbedUtils.newObjectAdapter();
-                rubyObjectAdapter.setInstanceVariable( rubyObject, "@this", meRuby );
-                rubyObjects.put( declaringClass, rubyObject );
-            }
-
-            // Convert method arguments and invoke the method
-            IRubyObject rubyResult;
-            if( args != null )
-            {
-                IRubyObject[] rubyArgs = new IRubyObject[args.length];
-                for( int i = 0; i < args.length; i++ )
-                {
-                    Object arg = args[ i ];
-                    rubyArgs[ i ] = JavaEmbedUtils.javaToRuby( runtime, arg );
-                }
-                rubyResult = rubyObject.callMethod( runtime.getCurrentContext(), method.getName(), rubyArgs );
-            }
-            else
-            {
-                rubyResult = rubyObject.callMethod( runtime.getCurrentContext(), method.getName() );
-            }
-
-            // Convert result to Java
-            Object result = JavaEmbedUtils.rubyToJava( runtime, rubyResult, method.getReturnType() );
-            return result;
-        }
-        catch( Exception e )
-        {
-            e.printStackTrace();
-            throw e;
-        }
-    }
-
-    @Override
-    public void reloadScripts()
-    {
-        rubyObjects.clear();
-    }
-
-    protected String getFunction( Method aMethod )
-        throws IOException
-    {
-        URL scriptUrl = getFunctionResoure( aMethod );
-
-        if( scriptUrl == null )
-        {
-            throw new IOException( "No script found for method " + aMethod.getName() );
-        }
-
-        InputStream in = scriptUrl.openStream();
-        BufferedReader scriptReader = new BufferedReader( new InputStreamReader( in ) );
-        String line;
-        StringBuilder sb = new StringBuilder();
-        while( ( line = scriptReader.readLine() ) != null )
-        {
-            sb.append( line ).append( "\n" );
-        }
-        return sb.toString();
-    }
-
-    protected static URL getFunctionResoure( Method method )
-    {
-        Class<?> declaringClass = method.getDeclaringClass();
-        String classname = declaringClass.getName();
-        String scriptFile = classname.replace( '.', File.separatorChar ) + ".rb";
-        ClassLoader loader = declaringClass.getClassLoader();
-        URL scriptUrl = loader.getResource( scriptFile );
-        return scriptUrl;
-    }
-
-    private static class SetterDynamicMethod
-        extends DynamicMethod
-    {
-        private SetterDynamicMethod( RubyModule rubyModule, Visibility visibility, CallConfiguration callConfiguration )
-        {
-            super( rubyModule, visibility, callConfiguration );
-        }
-
-        @Override
-        public IRubyObject call( ThreadContext threadContext, IRubyObject iRubyObject, RubyModule rubyModule, String methodName, IRubyObject[] iRubyObjects, Block block )
-        {
-            String propertyName = methodName.substring( 0, methodName.length() - 1 );
-            IRubyObject prop = iRubyObject.callMethod( threadContext, propertyName );
-            prop.callMethod( threadContext, "set", iRubyObjects );
-            return null;
-        }
-
-        @Override
-        public DynamicMethod dup()
-        {
-            return this;
-        }
-
-    }
-
-    private static class GetterDynamicMethod
-        extends DynamicMethod
-    {
-        private GetterDynamicMethod( RubyModule rubyModule, Visibility visibility, CallConfiguration callConfiguration )
-        {
-            super( rubyModule, visibility, callConfiguration );
-        }
-
-        @Override
-        public IRubyObject call( ThreadContext threadContext, IRubyObject iRubyObject, RubyModule rubyModule, String methodName, IRubyObject[] iRubyObjects, Block block )
-        {
-            try
-            {
-                String propertyName = methodName;
-                Object thisComposite = JavaEmbedUtils.rubyToJava( iRubyObject.getRuntime(), iRubyObject, Object.class );
-                Method propertyMethod = thisComposite.getClass().getMethod( propertyName );
-                Property property = (Property) propertyMethod.invoke( thisComposite );
-                Object propertyValue = property.get();
-                IRubyObject prop = JavaEmbedUtils.javaToRuby( iRubyObject.getRuntime(), propertyValue );
-                return prop;
-            }
-            catch( Exception e )
-            {
-                throw new RaiseException( new RubyNameError( iRubyObject.getRuntime(), iRubyObject.getMetaClass(), "Could not find property " + methodName ) );
-            }
-        }
-
-        @Override
-        public DynamicMethod dup()
-        {
-            return this;
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/libraries/lang-jruby/src/main/java/org/qi4j/lang/jruby/package.html b/libraries/lang-jruby/src/main/java/org/qi4j/lang/jruby/package.html
deleted file mode 100644
index b42f7e3..0000000
--- a/libraries/lang-jruby/src/main/java/org/qi4j/lang/jruby/package.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<html>
-    <body>
-        <h2>Ruby Language Support Library.</h2>
-    </body>
-</html>
\ No newline at end of file
diff --git a/libraries/lang-jruby/src/test/java/org/qi4j/lang/jruby/JRubyMixinTest.java b/libraries/lang-jruby/src/test/java/org/qi4j/lang/jruby/JRubyMixinTest.java
deleted file mode 100644
index 433d62f..0000000
--- a/libraries/lang-jruby/src/test/java/org/qi4j/lang/jruby/JRubyMixinTest.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.qi4j.lang.jruby;
-/*
- * Copyright 2007 Rickard Öberg
- * Licensed 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.
-*/
-
-import org.jruby.Ruby;
-import org.junit.Assert;
-import org.junit.Test;
-import org.qi4j.api.service.importer.InstanceImporter;
-import org.qi4j.bootstrap.AssemblyException;
-import org.qi4j.bootstrap.ModuleAssembly;
-import org.qi4j.test.AbstractQi4jTest;
-
-public class JRubyMixinTest extends AbstractQi4jTest
-{
-    public void assemble( ModuleAssembly module )
-        throws AssemblyException
-    {
-        module.transients( MyDomainType.class ).withMixins( JRubyMixin.class );
-
-        Ruby ruby = Ruby.newInstance();
-        module.importedServices( Ruby.class ).importedBy( InstanceImporter.class ).setMetaInfo( ruby );
-    }
-
-    @Test
-    public void testInvoke()
-        throws Throwable
-    {
-        MyDomainType domain = module.newTransientBuilder( MyDomainType.class ).newInstance();
-
-        Assert.assertEquals( "do1() in Ruby mixin.", domain.do1() );
-    }
-}
\ No newline at end of file
diff --git a/libraries/lang-jruby/src/test/java/org/qi4j/lang/jruby/MyDomainType.java b/libraries/lang-jruby/src/test/java/org/qi4j/lang/jruby/MyDomainType.java
deleted file mode 100644
index 4e4d36c..0000000
--- a/libraries/lang-jruby/src/test/java/org/qi4j/lang/jruby/MyDomainType.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package org.qi4j.lang.jruby;

-

-public interface MyDomainType

-{

-    String do1();

-}
\ No newline at end of file
diff --git a/libraries/lang-jruby/src/test/resources/org/qi4j/lang/jruby/MyDomainType.rb b/libraries/lang-jruby/src/test/resources/org/qi4j/lang/jruby/MyDomainType.rb
deleted file mode 100644
index 8c405c9..0000000
--- a/libraries/lang-jruby/src/test/resources/org/qi4j/lang/jruby/MyDomainType.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-class MyDomainType
-    def do1
-        return "do1() in Ruby mixin."
-    end
-end
diff --git a/libraries/lang-scala/build.gradle b/libraries/lang-scala/build.gradle
index adf7708..9ca2527 100644
--- a/libraries/lang-scala/build.gradle
+++ b/libraries/lang-scala/build.gradle
@@ -1,14 +1,44 @@
-description = "Qi4j BeanShell Library allows for Mixins to be implemented in BeanShell (Java) scripts instead of directly in compiled Java."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - Scripting - BeanShell" }}
+description = "Apache Zest™ Scala Library allows for Mixins to be implemented in Scala."
+
+jar { manifest { name = "Apache Zest™ Library - Scripting - Scala" }}
+
+apply plugin: 'scala'
+
+tasks.withType(ScalaCompile) {
+    scalaCompileOptions.useAnt = true
+    scalaCompileOptions.fork = true
+    configure( scalaCompileOptions.forkOptions ) {
+        memoryMaximumSize = '1g'
+        jvmArgs = [ '-XX:MaxPermSize=512m' ]
+    }
+}
 
 dependencies {
-  compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
-  compile(libraries.scala)
+  compile project( ':org.qi4j.core:org.qi4j.core.bootstrap' )
+  compile libraries.scala
 
-  testCompile(project(":org.qi4j.core:org.qi4j.core.testsupport"))
-  testCompile(project(":org.qi4j.extensions:org.qi4j.extension.indexing-rdf"))
+  testCompile project( ':org.qi4j.core:org.qi4j.core.testsupport' )
+  testCompile project( ':org.qi4j.extensions:org.qi4j.extension.indexing-rdf' )
 
-  testRuntime(project(":org.qi4j.core:org.qi4j.core.runtime"))
-  testRuntime(libraries.logback)
+  testRuntime project( ':org.qi4j.core:org.qi4j.core.runtime' )
+  testRuntime libraries.slf4j_simple
 }
diff --git a/libraries/lang-scala/dev-status.xml b/libraries/lang-scala/dev-status.xml
index 654d3aa..58fda09 100644
--- a/libraries/lang-scala/dev-status.xml
+++ b/libraries/lang-scala/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
@@ -8,7 +24,7 @@
     <codebase>beta</codebase>
 
     <!-- none, brief, good, complete -->
-    <documentation>none</documentation>
+    <documentation>brief</documentation>
 
     <!-- none, some, good, complete -->
     <unittests>some</unittests>
diff --git a/libraries/lang-scala/src/docs/lang-scala.txt b/libraries/lang-scala/src/docs/lang-scala.txt
index 6591d74..c4b3a8f 100644
--- a/libraries/lang-scala/src/docs/lang-scala.txt
+++ b/libraries/lang-scala/src/docs/lang-scala.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[lang-scala, Scala Library]]
 = Scala Support =
 
@@ -6,4 +25,93 @@
 source=libraries/lang-scala/dev-status.xml
 --------------
 
+The Scala Support Library allows Fragments and Composites to be written as Scala traits.
+
 include::../../build/docs/buildinfo/artifact.txt[]
+
+The Scala Support Library is a Generic mixin class that implements  Composites by delegating to Scala traits.
+
+
+== Composition ==
+
+Example mixin declaration:
+[snippet,scala]
+----
+source=libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloWorldMixin2.scala
+tag=mixin
+----
+
+Example composite declaration:
+[snippet,scala]
+----
+source=libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloWorldComposite.scala
+tag=composite
+----
+
+Example typed concern:
+[snippet,scala]
+----
+source=libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloThereConcern.scala
+tag=typedconcern
+----
+
+Example generic concern with filter:
+[snippet,scala]
+----
+source=libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/ExclamationGenericConcern.scala
+tag=genericconcern
+----
+
+And the assembly code.
+Note that the `ScalaTraitMixin` must be added.
+[snippet,java]
+----
+source=libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloWorldCompositeTest.java
+tag=composite
+----
+
+That pretty much covers the domain model part.
+Usage from Java is transparent, since it looks just like interfaces and classes.
+
+
+== Entity composites ==
+
+The following example separate between command interface (suggestions to change), events (after the fact), and data, so they are in three separate traits below.
+Only commands are called by client code.
+
+[snippet,scala]
+----
+source=libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/TestEntity.scala
+tag=entity
+----
+
+The `self` operator thing solves the `@This` injection requirements, although it doesn't do private injections (i.e. the Entity *has* to extend Events and Data for it to work).
+
+Everything is statically typed.
+
+And the corresponding assembly code:
+
+[snippet,java]
+----
+source=libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloWorldCompositeTest.java
+tag=entity
+----
+
+
+== Services composites ==
+
+The following example is a pretty simple service written as a Scala trait:
+
+[snippet,scala]
+----
+source=libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/TestService.scala
+tag=service
+----
+
+And the corresponding assembly code:
+
+[snippet,java]
+----
+source=libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloWorldCompositeTest.java
+tag=service
+----
diff --git a/libraries/lang-scala/src/main/java/org/qi4j/lang/scala/ScalaTraitMixin.java b/libraries/lang-scala/src/main/java/org/qi4j/lang/scala/ScalaTraitMixin.java
index 04c4048..65912d9 100644
--- a/libraries/lang-scala/src/main/java/org/qi4j/lang/scala/ScalaTraitMixin.java
+++ b/libraries/lang-scala/src/main/java/org/qi4j/lang/scala/ScalaTraitMixin.java
@@ -41,24 +41,23 @@
 /**
  * Generic mixin that handles delegation to Scala trait implementations.
  */
-@AppliesTo(ScalaTraitMixin.TraitFilter.class)
+@AppliesTo( ScalaTraitMixin.TraitFilter.class )
 public class ScalaTraitMixin
     implements InvocationHandler
 {
-    private static Map<Class<?>, Map<Method, InvocationHandler>> methods = new HashMap<Class<?>, Map<Method, InvocationHandler>>();
+    private static Map<Class<?>, Map<Method, InvocationHandler>> methods = new HashMap<>();
 
     private Class<?> compositeType;
 
     public ScalaTraitMixin( @This Composite composite )
     {
-        compositeType = Qi4j.FUNCTION_DESCRIPTOR_FOR.map( composite).primaryType();
+        compositeType = Qi4j.FUNCTION_DESCRIPTOR_FOR.map( composite ).primaryType();
     }
 
     @Override
     public Object invoke( Object composite, Method method, Object[] args ) throws Throwable
     {
         InvocationHandler handler = methods.get( compositeType ).get( method );
-
         return handler.invoke( composite, method, args );
     }
 
@@ -68,35 +67,37 @@
         @Override
         public boolean appliesTo( Method method, Class<?> mixin, Class<?> compositeType, Class<?> fragmentClass )
         {
-            if (isScalaTrait(method.getDeclaringClass()))
+            if( isScalaTrait( method.getDeclaringClass() ) )
             {
                 // Service injection
-                if (method.getAnnotation( Service.class ) != null)
+                if( method.getAnnotation( Service.class ) != null )
                 {
-                    if (method.getReturnType().equals( ServiceReference.class ))
+                    if( method.getReturnType().equals( ServiceReference.class ) )
                     {
                         InvocationHandler handler = new InvocationHandler()
                         {
                             @Override
                             public Object invoke( Object composite, Method method, Object[] objects ) throws Throwable
                             {
-                                return ((CompositeInstance)Proxy.getInvocationHandler( composite )).module().findService( method.getReturnType() );
-                            }
-                        };
-                        getHandlers( compositeType ).put( method, handler );
-                    } else
-                    {
-                        InvocationHandler handler = new InvocationHandler()
-                        {
-                            @Override
-                            public Object invoke( Object composite, Method method, Object[] objects ) throws Throwable
-                            {
-                                return ((CompositeInstance)Proxy.getInvocationHandler( composite )).module().findService( method.getReturnType() ).get();
+                                return ( (CompositeInstance) Proxy.getInvocationHandler( composite ) ).module()
+                                    .findService( method.getReturnType() );
                             }
                         };
                         getHandlers( compositeType ).put( method, handler );
                     }
-
+                    else
+                    {
+                        InvocationHandler handler = new InvocationHandler()
+                        {
+                            @Override
+                            public Object invoke( Object composite, Method method, Object[] objects ) throws Throwable
+                            {
+                                return ( (CompositeInstance) Proxy.getInvocationHandler( composite ) ).module()
+                                    .findService( method.getReturnType() ).get();
+                            }
+                        };
+                        getHandlers( compositeType ).put( method, handler );
+                    }
                     return true;
                 }
 
@@ -109,17 +110,22 @@
                     @Override
                     public Class map( Class aClass )
                     {
-                        if ( declaringClass.isAssignableFrom(aClass))
+                        if( declaringClass.isAssignableFrom( aClass ) )
                         {
                             try
                             {
-                                aClass.getClassLoader().loadClass( aClass.getName()+"$class" );
+                                aClass.getClassLoader().loadClass( aClass.getName() + "$class" );
 
-                                if (current == null)
+                                if( current == null )
+                                {
                                     current = aClass;
+                                }
                                 else
+                                {
                                     current = current.isAssignableFrom( aClass ) ? aClass : current;
-                            } catch( ClassNotFoundException e )
+                                }
+                            }
+                            catch( ClassNotFoundException e )
                             {
                                 // Ignore - no trait implementation found
                             }
@@ -129,14 +135,16 @@
                     }
                 }, Iterables.map( Classes.RAW_CLASS, interfacesOf( compositeType ) ) ) );
 
-                if (traitClass == null)
+                if( traitClass == null )
+                {
                     return false;
+                }
 
                 try
                 {
-                    Class traitMixin = traitClass.getClassLoader().loadClass( traitClass.getName()+"$class" );
+                    Class traitMixin = traitClass.getClassLoader().loadClass( traitClass.getName() + "$class" );
                     Class<?>[] methodParameterTypes = method.getParameterTypes();
-                    Class[] parameterTypes = new Class[1+ methodParameterTypes.length];
+                    Class[] parameterTypes = new Class[1 + methodParameterTypes.length];
                     parameterTypes[0] = traitClass;
                     System.arraycopy( methodParameterTypes, 0, parameterTypes, 1, methodParameterTypes.length );
                     final Method traitMethod = traitMixin.getMethod( method.getName(), parameterTypes );
@@ -148,7 +156,6 @@
                         @Override
                         public Object invoke( Object composite, Method method, Object[] args ) throws Throwable
                         {
-
                             if( args != null )
                             {
                                 Object[] params = new Object[args.length + 1];
@@ -156,20 +163,26 @@
                                 System.arraycopy( args, 0, params, 1, args.length );
 
                                 return traitMethod.invoke( null, params );
-                            } else
+                            }
+                            else
+                            {
                                 return traitMethod.invoke( null, composite );
+                            }
                         }
                     } );
 
                     return true;
-                } catch( ClassNotFoundException e )
-                {
-                    return false;
-                } catch( NoSuchMethodException e )
+                }
+                catch( ClassNotFoundException e )
                 {
                     return false;
                 }
-            } else
+                catch( NoSuchMethodException e )
+                {
+                    return false;
+                }
+            }
+            else
             {
                 return false;
             }
@@ -179,7 +192,7 @@
         {
             for( Annotation annotation : declaringClass.getAnnotations() )
             {
-                if (annotation.annotationType().getSimpleName().equals( "ScalaSignature" ))
+                if( annotation.annotationType().getSimpleName().equals( "ScalaSignature" ) )
                 {
                     return true;
                 }
@@ -187,15 +200,14 @@
             return false;
         }
 
-        private Map<Method, InvocationHandler> getHandlers(Class<?> compositeType)
+        private Map<Method, InvocationHandler> getHandlers( Class<?> compositeType )
         {
             Map<Method,InvocationHandler> handlerMap = methods.get( compositeType );
-            if (handlerMap == null)
+            if( handlerMap == null )
             {
-                handlerMap = new HashMap<Method, InvocationHandler>();
+                handlerMap = new HashMap<>();
                 methods.put( compositeType, handlerMap );
             }
-
             return handlerMap;
         }
     }
diff --git a/libraries/lang-scala/src/main/java/org/qi4j/lang/scala/package.html b/libraries/lang-scala/src/main/java/org/qi4j/lang/scala/package.html
index 8d14f4c..bfba947 100644
--- a/libraries/lang-scala/src/main/java/org/qi4j/lang/scala/package.html
+++ b/libraries/lang-scala/src/main/java/org/qi4j/lang/scala/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Scala Language Support Library.</h2>
diff --git a/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/ExclamationGenericConcern.scala b/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/ExclamationGenericConcern.scala
index 29b71ff..a87c91d 100644
--- a/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/ExclamationGenericConcern.scala
+++ b/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/ExclamationGenericConcern.scala
@@ -1,3 +1,14 @@
+/*
+ * Copyright 2011 Rickard Öberg
+ * Licensed 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.qi4j.sample.scala
 
 import java.lang.reflect.Method
@@ -7,7 +18,7 @@
 /**
  * Add an exclamation mark to the returned string
  */
-
+// START SNIPPET: genericconcern
 @AppliesTo(Array(classOf[ StringFilter ]))
 class ExclamationGenericConcern
   extends GenericConcern
@@ -22,3 +33,4 @@
     .getReturnType
     .equals(classOf[ String ])
 }
+// END SNIPPET: genericconcern
diff --git a/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloThereConcern.scala b/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloThereConcern.scala
index 5c50b7b..33e7981 100644
--- a/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloThereConcern.scala
+++ b/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloThereConcern.scala
@@ -1,12 +1,22 @@
+/*
+ * Copyright 2011 Rickard Öberg
+ * Licensed 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.qi4j.sample.scala
 
 import org.qi4j.api.concern.ConcernOf
 
-/**
- * TODO
- */
+// START SNIPPET: typedconcern
 class HelloThereConcern
   extends ConcernOf[ HelloWorldMixin2 ] with HelloWorldMixin2
 {
   override def sayHello(name: String ) = next.sayHello("there " + name)
-}
\ No newline at end of file
+}
+// END SNIPPET: typedconcern
diff --git a/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloWorldComposite.scala b/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloWorldComposite.scala
index 64ba652..0a209d8 100644
--- a/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloWorldComposite.scala
+++ b/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloWorldComposite.scala
@@ -1,8 +1,21 @@
+/*
+ * Copyright 2011 Rickard Öberg
+ * Licensed 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.qi4j.sample.scala
 
 import org.qi4j.api.composite.TransientComposite
 import org.qi4j.api.concern.Concerns
 
+// START SNIPPET: composite
 @Concerns(Array(classOf[ HelloThereConcern ]))
 trait HelloWorldComposite
   extends TransientComposite with HelloWorldMixin with HelloWorldMixin2
+// END SNIPPET: composite
diff --git a/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloWorldComposite2.scala b/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloWorldComposite2.scala
index a86c1cc..621143c 100644
--- a/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloWorldComposite2.scala
+++ b/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloWorldComposite2.scala
@@ -1,3 +1,14 @@
+/*
+ * Copyright 2011 Rickard Öberg
+ * Licensed 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.qi4j.sample.scala
 
 trait HelloWorldComposite2
diff --git a/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloWorldCompositeTest.java b/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloWorldCompositeTest.java
index ebc4aae..e418bdd 100644
--- a/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloWorldCompositeTest.java
+++ b/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloWorldCompositeTest.java
@@ -1,11 +1,20 @@
+/*
+ * Copyright 2011 Rickard Öberg
+ * Licensed 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.qi4j.sample.scala;
 
-import java.io.IOException;
 import org.junit.Assert;
 import org.junit.Test;
 import org.qi4j.api.constraint.ConstraintViolationException;
 import org.qi4j.api.unitofwork.UnitOfWork;
-import org.qi4j.api.unitofwork.UnitOfWorkCompletionException;
 import org.qi4j.bootstrap.AssemblyException;
 import org.qi4j.bootstrap.ModuleAssembly;
 import org.qi4j.bootstrap.SingletonAssembler;
@@ -24,6 +33,7 @@
 {
     @Test
     public void testComposite()
+        throws Exception
     {
         SingletonAssembler assembler = new SingletonAssembler()
         {
@@ -31,9 +41,11 @@
             public void assemble( ModuleAssembly module )
                 throws AssemblyException
             {
+                // START SNIPPET: composite
                 module.transients( HelloWorldComposite.class, HelloWorldComposite2.class ).
                     withMixins( ScalaTraitMixin.class ).
                     withConcerns( ExclamationGenericConcern.class );
+                // END SNIPPET: composite
             }
         };
 
@@ -56,7 +68,7 @@
 
     @Test
     public void testEntity()
-        throws UnitOfWorkCompletionException, IOException
+        throws Exception
     {
         SingletonAssembler assembler = new SingletonAssembler()
         {
@@ -64,8 +76,12 @@
             public void assemble( ModuleAssembly module )
                 throws AssemblyException
             {
+                // START SNIPPET: entity
                 module.entities( TestEntity.class ).withMixins( ScalaTraitMixin.class );
+                // END SNIPPET: entity
+                // START SNIPPET: service
                 module.services( TestService.class ).withMixins( ScalaTraitMixin.class );
+                // END SNIPPET: service
 
                 new EntityTestAssembler().assemble( module );
                 new RdfMemoryStoreAssembler().assemble( module );
diff --git a/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloWorldMixin.scala b/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloWorldMixin.scala
index 1a2a2b0..e630f99 100644
--- a/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloWorldMixin.scala
+++ b/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloWorldMixin.scala
@@ -1,3 +1,14 @@
+/*
+ * Copyright 2011 Rickard Öberg
+ * Licensed 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.qi4j.sample.scala
 
 trait HelloWorldMixin
diff --git a/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloWorldMixin2.scala b/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloWorldMixin2.scala
index 45d7e0b..aeb8250 100644
--- a/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloWorldMixin2.scala
+++ b/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloWorldMixin2.scala
@@ -1,8 +1,21 @@
+/*
+ * Copyright 2011 Rickard Öberg
+ * Licensed 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.qi4j.sample.scala
 
 import org.qi4j.library.constraints.annotation.MaxLength
 
+// START SNIPPET: mixin
 trait HelloWorldMixin2
 {
   def sayHello(@MaxLength(10) name: String ): String = "Hello " + name
-}
\ No newline at end of file
+}
+// END SNIPPET: mixin
diff --git a/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloWorldMixin3.scala b/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloWorldMixin3.scala
index cc61030..5b504bc 100644
--- a/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloWorldMixin3.scala
+++ b/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/HelloWorldMixin3.scala
@@ -1,3 +1,14 @@
+/*
+ * Copyright 2011 Rickard Öberg
+ * Licensed 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.qi4j.sample.scala
 
 /**
diff --git a/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/TestEntity.scala b/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/TestEntity.scala
index 611ca33..1440c8d 100644
--- a/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/TestEntity.scala
+++ b/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/TestEntity.scala
@@ -1,3 +1,14 @@
+/*
+ * Copyright 2011 Rickard Öberg
+ * Licensed 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.qi4j.sample.scala
 
 import org.qi4j.api.entity.EntityComposite
@@ -8,6 +19,7 @@
 /**
  * Test entity
  */
+ // START SNIPPET: entity
 trait TestEntity
   extends EntityComposite with Commands with Events with Data
 
@@ -46,4 +58,5 @@
     // Register change by modifying state
     foo = newValue
   }
-}
\ No newline at end of file
+}
+// END SNIPPET: entity
diff --git a/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/TestService.scala b/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/TestService.scala
index 9c09674..9c77111 100644
--- a/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/TestService.scala
+++ b/libraries/lang-scala/src/test/scala/org/qi4j/sample/scala/TestService.scala
@@ -1,3 +1,14 @@
+/*
+ * Copyright 2011 Rickard Öberg
+ * Licensed 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.qi4j.sample.scala
 
 import org.qi4j.api.service.ServiceComposite
@@ -5,8 +16,10 @@
 /**
  * Test service that repeats given string
  */
+ // START SNIPPET: service
 trait TestService
   extends ServiceComposite
 {
   def repeat(input: String ): String = input + input
-}
\ No newline at end of file
+}
+// END SNIPPET: service
diff --git a/libraries/locking/build.gradle b/libraries/locking/build.gradle
index 861fc27..b31c2a4 100644
--- a/libraries/locking/build.gradle
+++ b/libraries/locking/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j Locking Library provides lock management for methods."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - Locking" }}
+description = "Apache Zest™ Locking Library provides lock management for methods."
+
+jar { manifest { name = "Apache Zest™ Library - Locking" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.api"))
diff --git a/libraries/locking/dev-status.xml b/libraries/locking/dev-status.xml
index d381831..f549c99 100644
--- a/libraries/locking/dev-status.xml
+++ b/libraries/locking/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
@@ -8,7 +24,7 @@
     <codebase>stable</codebase>
 
     <!-- none, brief, good, complete -->
-    <documentation>none</documentation>
+    <documentation>brief</documentation>
 
     <!-- none, some, good, complete -->
     <unittests>some</unittests>
diff --git a/libraries/locking/src/docs/locking.txt b/libraries/locking/src/docs/locking.txt
index 531b43a..6f1f9ee 100644
--- a/libraries/locking/src/docs/locking.txt
+++ b/libraries/locking/src/docs/locking.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[library-locking, Locking Library]]
 = Locking =
 
@@ -6,8 +25,43 @@
 source=libraries/locking/dev-status.xml
 --------------
 
-Locking Library
+The Locking Library is a simple way to mark method with Read or Write locks, and the details is handled by this
+library.
 
-NOTE: This Library has no documentation yet. Learn how to contribute in <<community-docs>>.
+This library is heavily used in EntityStore implementations.
+
 
 include::../../build/docs/buildinfo/artifact.txt[]
+
+The library creates a +java.util.concurrent.ReentrantReadWriteLock+ which is shared for all methods within the
+composite. It then acquires the read or write lock in a concern that is applied to the methods of the composite, which
+have the corresponding annotations.
+
+== +@ReadLock+ ==
+This annotation will apply the +ReadLockConcern+ to the method, and acquire the +lock.readLock()+ on entry and relase
+it on exit of the method. See the +ReentrantReadWriteLock+ for details on how/when to use it and the exact semantics.
+
+== +@WriteLock+ ==
+This annotation will apply the +WriteLockConcern+ to the method, and acquire the +lock.writeLock()+ on entry and relase
+it on exit of the method. See the +ReentrantReadWriteLock+ for details on how/when to use it and the exact semantics.
+
+== +LockingAbstractComposite+ ==
+This composite type is the easiest way to use this library. Simple extend you composite type interface with this
+interface and start marking the methods with the above annotations. No other complex assembly is required.
+
+[source,java]
+----
+public interface SomeService
+    extends ServiceComposite, LockingAbstractComposite
+{
+}
+----
+
+or apply it during assembly, in case that is the only choice (such as existing/external interfaces)
+
+[snippet,java]
+----
+source=libraries/locking/src/test/java/org/qi4j/library/locking/DocumentationSupport.java
+tag=assembly
+----
+
diff --git a/libraries/locking/src/main/java/org/qi4j/library/locking/ReadLockConcern.java b/libraries/locking/src/main/java/org/qi4j/library/locking/ReadLockConcern.java
index 55c96a3..39e8a80 100644
--- a/libraries/locking/src/main/java/org/qi4j/library/locking/ReadLockConcern.java
+++ b/libraries/locking/src/main/java/org/qi4j/library/locking/ReadLockConcern.java
@@ -66,7 +66,7 @@
      * Fix for this bug:
      * http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6822370
      *
-     * @param lock
+     * @param lock the lock to be acquired.
      */
     protected void lock( Lock lock )
     {
@@ -74,7 +74,8 @@
         {
             try
             {
-                while( !(lock.tryLock() || lock.tryLock( 1000, TimeUnit.MILLISECONDS )) )
+                //noinspection StatementWithEmptyBody
+                while( !lock.tryLock( 1000, TimeUnit.MILLISECONDS ) )
                 {
                     // On timeout, try again
                 }
diff --git a/libraries/locking/src/main/java/org/qi4j/library/locking/WriteLockConcern.java b/libraries/locking/src/main/java/org/qi4j/library/locking/WriteLockConcern.java
index 0444084..f391667 100644
--- a/libraries/locking/src/main/java/org/qi4j/library/locking/WriteLockConcern.java
+++ b/libraries/locking/src/main/java/org/qi4j/library/locking/WriteLockConcern.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.locking;
 
 import java.lang.reflect.InvocationHandler;
@@ -26,7 +44,6 @@
         throws Throwable
     {
         Lock writeLock = lock.writeLock();
-
         lock(writeLock);
         try
         {
@@ -34,14 +51,7 @@
         }
         finally
         {
-            try
-            {
-                writeLock.unlock();
-            }
-            catch( Exception e )
-            {
-                e.printStackTrace();
-            }
+            writeLock.unlock();
         }
     }
 
@@ -55,7 +65,8 @@
         {
             try
             {
-                while( !(lock.tryLock() || lock.tryLock( 1000, TimeUnit.MILLISECONDS )) )
+                //noinspection StatementWithEmptyBody
+                while( !lock.tryLock( 1000, TimeUnit.MILLISECONDS ) )
                 {
                     // On timeout, try again
                 }
diff --git a/libraries/locking/src/main/java/org/qi4j/library/locking/package.html b/libraries/locking/src/main/java/org/qi4j/library/locking/package.html
index dbd6eeb..8084dca 100644
--- a/libraries/locking/src/main/java/org/qi4j/library/locking/package.html
+++ b/libraries/locking/src/main/java/org/qi4j/library/locking/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Locking Library.</h2>
diff --git a/libraries/locking/src/test/java/org/qi4j/library/locking/DocumentationSupport.java b/libraries/locking/src/test/java/org/qi4j/library/locking/DocumentationSupport.java
new file mode 100644
index 0000000..c227bb7
--- /dev/null
+++ b/libraries/locking/src/test/java/org/qi4j/library/locking/DocumentationSupport.java
@@ -0,0 +1,42 @@
+/*
+ * 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.qi4j.library.locking;
+
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.LayerAssembly;
+import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.bootstrap.layered.ModuleAssembler;
+
+public class DocumentationSupport
+{
+// START SNIPPET: assembly
+    public class MyModuleAssembler
+        implements ModuleAssembler{
+
+        @Override
+        public ModuleAssembly assemble( LayerAssembly layer, ModuleAssembly module )
+            throws AssemblyException
+        {
+            module.services( MyService.class ).withTypes( LockingAbstractComposite.class );
+            return module;
+        }
+    }
+// END SNIPPET: assembly
+    public interface MyService {}
+}
diff --git a/libraries/logging/build.gradle b/libraries/logging/build.gradle
index cd0a86e..f2dde7e 100644
--- a/libraries/logging/build.gradle
+++ b/libraries/logging/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j Logging Library provides an advanced logging framework which separates trace, debug and log systems."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - Logging" }}
+description = "Apache Zest™ Logging Library provides an advanced logging framework which separates trace, debug and log systems."
+
+jar { manifest { name = "Apache Zest™ Library - Logging" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
diff --git a/libraries/logging/dev-status.xml b/libraries/logging/dev-status.xml
index a0c9fbb..bdf00e7 100644
--- a/libraries/logging/dev-status.xml
+++ b/libraries/logging/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/libraries/logging/src/docs/logging.txt b/libraries/logging/src/docs/logging.txt
index 06d823a..ed7f6b6 100644
--- a/libraries/logging/src/docs/logging.txt
+++ b/libraries/logging/src/docs/logging.txt
@@ -21,7 +21,7 @@
 source=libraries/logging/dev-status.xml
 --------------
 
-First of all, Qi4j is taking a fresh look at all things that we take for granted. Logging is one such thing.
+First of all, Zest™ is taking a fresh look at all things that we take for granted. Logging is one such thing.
 
 It should (but is not) obvious that Logging are used for three very distinct purposes, and in our opinion the concepts
 are not related and should not be abstracted in the same fashion, as has been the norm in Log4j, JDK logging, Commons
@@ -80,7 +80,7 @@
 == Tracing ==
 
 Tracing is the process of tracking all the methods that has been called. There are two levels of tracing available in
-Qi4j. Either Trace All or trace where a annotation has been given.
+Zest. Either Trace All or trace where a annotation has been given.
 
 If the TraceAllConcern is added to a composite, and there is a TraceService visible, then all method calls into that
 composite is traced.
diff --git a/libraries/logging/src/main/java/org/qi4j/logging/debug/DebugConcern.java b/libraries/logging/src/main/java/org/qi4j/logging/debug/DebugConcern.java
index 4823248..8158d08 100644
--- a/libraries/logging/src/main/java/org/qi4j/logging/debug/DebugConcern.java
+++ b/libraries/logging/src/main/java/org/qi4j/logging/debug/DebugConcern.java
@@ -33,11 +33,6 @@
     @Optional @Service private DebuggingService loggingService;
     @This private Composite composite;
 
-    public DebugConcern()
-    {
-        System.out.println( "DebugConcern created." );
-    }
-
     @Override
     public Integer debugLevel()
     {
@@ -51,7 +46,6 @@
     @Override
     public void debug( int priority, String message )
     {
-        System.out.println( "L:" + composite );
         if( loggingService == null )
         {
             return;
diff --git a/libraries/logging/src/main/java/org/qi4j/logging/debug/package.html b/libraries/logging/src/main/java/org/qi4j/logging/debug/package.html
index 53c16da..e090255 100644
--- a/libraries/logging/src/main/java/org/qi4j/logging/debug/package.html
+++ b/libraries/logging/src/main/java/org/qi4j/logging/debug/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Debug Logging.</h2>
diff --git a/libraries/logging/src/main/java/org/qi4j/logging/debug/records/package.html b/libraries/logging/src/main/java/org/qi4j/logging/debug/records/package.html
index 61cb50f..6588b52 100644
--- a/libraries/logging/src/main/java/org/qi4j/logging/debug/records/package.html
+++ b/libraries/logging/src/main/java/org/qi4j/logging/debug/records/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Debug Logging Records.</h2>
diff --git a/libraries/logging/src/main/java/org/qi4j/logging/debug/service/DebugOnConsoleSideEffect.java b/libraries/logging/src/main/java/org/qi4j/logging/debug/service/DebugOnConsoleSideEffect.java
index 14fa3e4..8d369aa 100644
--- a/libraries/logging/src/main/java/org/qi4j/logging/debug/service/DebugOnConsoleSideEffect.java
+++ b/libraries/logging/src/main/java/org/qi4j/logging/debug/service/DebugOnConsoleSideEffect.java
@@ -62,7 +62,7 @@
 
     private String getCompositeName( Composite composite )
     {
-        return first(Qi4j.FUNCTION_DESCRIPTOR_FOR.map( composite ).types()).getName();
+        return first( Qi4j.FUNCTION_DESCRIPTOR_FOR.map( composite ).types()).getName();
     }
 
     @Override
diff --git a/libraries/logging/src/main/java/org/qi4j/logging/debug/service/DebuggingServiceMixin.java b/libraries/logging/src/main/java/org/qi4j/logging/debug/service/DebuggingServiceMixin.java
index a77307e..b2fd04f 100644
--- a/libraries/logging/src/main/java/org/qi4j/logging/debug/service/DebuggingServiceMixin.java
+++ b/libraries/logging/src/main/java/org/qi4j/logging/debug/service/DebuggingServiceMixin.java
@@ -175,6 +175,6 @@
 
     private String getCompositeName( Composite composite )
     {
-        return first(Qi4j.FUNCTION_DESCRIPTOR_FOR.map( composite ).types()).getName();
+        return first( Qi4j.FUNCTION_DESCRIPTOR_FOR.map( composite ).types()).getName();
     }
 }
diff --git a/libraries/logging/src/main/java/org/qi4j/logging/debug/service/package.html b/libraries/logging/src/main/java/org/qi4j/logging/debug/service/package.html
index d27e9ed..667c4ca 100644
--- a/libraries/logging/src/main/java/org/qi4j/logging/debug/service/package.html
+++ b/libraries/logging/src/main/java/org/qi4j/logging/debug/service/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Debug Logging Service.</h2>
diff --git a/libraries/logging/src/main/java/org/qi4j/logging/log/assemblies/package.html b/libraries/logging/src/main/java/org/qi4j/logging/log/assemblies/package.html
index f5d7b56..b2ed0f1 100644
--- a/libraries/logging/src/main/java/org/qi4j/logging/log/assemblies/package.html
+++ b/libraries/logging/src/main/java/org/qi4j/logging/log/assemblies/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Logging Assembly.</h2>
diff --git a/libraries/logging/src/main/java/org/qi4j/logging/log/package.html b/libraries/logging/src/main/java/org/qi4j/logging/log/package.html
index 439d25b..f6ffb4c 100644
--- a/libraries/logging/src/main/java/org/qi4j/logging/log/package.html
+++ b/libraries/logging/src/main/java/org/qi4j/logging/log/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Logging.</h2>
diff --git a/libraries/logging/src/main/java/org/qi4j/logging/log/records/package.html b/libraries/logging/src/main/java/org/qi4j/logging/log/records/package.html
index aeb88d9..4e5fdc7 100644
--- a/libraries/logging/src/main/java/org/qi4j/logging/log/records/package.html
+++ b/libraries/logging/src/main/java/org/qi4j/logging/log/records/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Logging Records.</h2>
diff --git a/libraries/logging/src/main/java/org/qi4j/logging/log/service/LoggingServiceMixin.java b/libraries/logging/src/main/java/org/qi4j/logging/log/service/LoggingServiceMixin.java
index 9374913..4360467 100644
--- a/libraries/logging/src/main/java/org/qi4j/logging/log/service/LoggingServiceMixin.java
+++ b/libraries/logging/src/main/java/org/qi4j/logging/log/service/LoggingServiceMixin.java
@@ -166,6 +166,6 @@
 
     private String getCompositeName( Composite composite )
     {
-        return first(Qi4j.FUNCTION_DESCRIPTOR_FOR.map( composite ).types()).getName();
+        return first( Qi4j.FUNCTION_DESCRIPTOR_FOR.map( composite ).types()).getName();
     }
 }
diff --git a/libraries/logging/src/main/java/org/qi4j/logging/log/service/package.html b/libraries/logging/src/main/java/org/qi4j/logging/log/service/package.html
index befaad3..2f3d69a 100644
--- a/libraries/logging/src/main/java/org/qi4j/logging/log/service/package.html
+++ b/libraries/logging/src/main/java/org/qi4j/logging/log/service/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Logging Service.</h2>
diff --git a/libraries/logging/src/main/java/org/qi4j/logging/trace/assemblies/package.html b/libraries/logging/src/main/java/org/qi4j/logging/trace/assemblies/package.html
index 31b9026..ba2e6e8 100644
--- a/libraries/logging/src/main/java/org/qi4j/logging/trace/assemblies/package.html
+++ b/libraries/logging/src/main/java/org/qi4j/logging/trace/assemblies/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Trace Logging Assembly.</h2>
diff --git a/libraries/logging/src/main/java/org/qi4j/logging/trace/package.html b/libraries/logging/src/main/java/org/qi4j/logging/trace/package.html
index 8ae6e59..06071c6 100644
--- a/libraries/logging/src/main/java/org/qi4j/logging/trace/package.html
+++ b/libraries/logging/src/main/java/org/qi4j/logging/trace/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Trace Logging.</h2>
diff --git a/libraries/logging/src/main/java/org/qi4j/logging/trace/records/package.html b/libraries/logging/src/main/java/org/qi4j/logging/trace/records/package.html
index e3e3767..8427d7c 100644
--- a/libraries/logging/src/main/java/org/qi4j/logging/trace/records/package.html
+++ b/libraries/logging/src/main/java/org/qi4j/logging/trace/records/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Trace Logging Records.</h2>
diff --git a/libraries/logging/src/main/java/org/qi4j/logging/trace/service/package.html b/libraries/logging/src/main/java/org/qi4j/logging/trace/service/package.html
index 29a638e..ef86918 100644
--- a/libraries/logging/src/main/java/org/qi4j/logging/trace/service/package.html
+++ b/libraries/logging/src/main/java/org/qi4j/logging/trace/service/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Trace Logging Service.</h2>
diff --git a/libraries/logging/src/main/java/org/qi4j/logging/view/package.html b/libraries/logging/src/main/java/org/qi4j/logging/view/package.html
index 4172446..ba513ab 100644
--- a/libraries/logging/src/main/java/org/qi4j/logging/view/package.html
+++ b/libraries/logging/src/main/java/org/qi4j/logging/view/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Log Viewers.</h2>
diff --git a/libraries/logging/src/test/java/org/qi4j/logging/docsupport/LoggingDocs.java b/libraries/logging/src/test/java/org/qi4j/logging/docsupport/LoggingDocs.java
index cdcd753..a39f1f2 100644
--- a/libraries/logging/src/test/java/org/qi4j/logging/docsupport/LoggingDocs.java
+++ b/libraries/logging/src/test/java/org/qi4j/logging/docsupport/LoggingDocs.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.logging.docsupport;
 
 import org.qi4j.api.common.Optional;
diff --git a/libraries/logging/src/test/resources/org/qi4j/logging/debug/service/DebuggingServiceComposite.properties b/libraries/logging/src/test/resources/org/qi4j/logging/debug/service/DebuggingServiceComposite.properties
index c8bf729..1d8a579 100644
--- a/libraries/logging/src/test/resources/org/qi4j/logging/debug/service/DebuggingServiceComposite.properties
+++ b/libraries/logging/src/test/resources/org/qi4j/logging/debug/service/DebuggingServiceComposite.properties
@@ -1 +1,16 @@
+# 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.
+
 debugLevel=100
diff --git a/libraries/metrics/build.gradle b/libraries/metrics/build.gradle
index 38ea7e5..7c1ac09 100644
--- a/libraries/metrics/build.gradle
+++ b/libraries/metrics/build.gradle
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-description = "Qi4j Locking Library provides lock management for methods."
+description = "Apache Zest™ Metrics Library."
 
-jar { manifest { name = "Qi4j Library - Locking" }}
+jar { manifest { name = "Apache Zest™ Library - Metrics" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
diff --git a/libraries/metrics/dev-status.xml b/libraries/metrics/dev-status.xml
index d3fd848..04d78d0 100644
--- a/libraries/metrics/dev-status.xml
+++ b/libraries/metrics/dev-status.xml
@@ -21,13 +21,13 @@
         http://www.qi4j.org/schemas/2008/dev-status/1/dev-status.xsd">
   <status>
     <!--none,early,beta,stable,mature-->
-    <codebase>early</codebase>
+    <codebase>beta</codebase>
 
     <!-- none, brief, good, complete -->
-    <documentation>none</documentation>
+    <documentation>brief</documentation>
 
     <!-- none, some, good, complete -->
-    <unittests>none</unittests>
+    <unittests>some</unittests>
   </status>
   <licenses>
     <license>ALv2</license>
diff --git a/libraries/metrics/src/docs/metrics.txt b/libraries/metrics/src/docs/metrics.txt
index 3072992..857c99a 100644
--- a/libraries/metrics/src/docs/metrics.txt
+++ b/libraries/metrics/src/docs/metrics.txt
@@ -14,7 +14,7 @@
 //////////////////////
 
 [[library-metrics,Metrics Library]]
-= Metrics Library=
+= Metrics Library =
 
 The Metrics library is available to application code to get production metrics from their applications. It allows
 applications to easily mark critical section for metrics gathering, without handling the details with the Metrics
@@ -25,8 +25,8 @@
 == Usage ==
 There are currently the following possibilities available;
 
-    * @TimingCapture
-    * @Counting
+    * @TimingCapture - capture timing on a single method
+    * TimingCaptureAll - capture timing on all methods of a composite
 
 Before looking at the details of these, we need to point out that there are some pre-conditions for Metrics to be
 working. First of all, you need to install a Metrics Extensions, most likely the
@@ -39,3 +39,25 @@
 There is a TimingCaptureAllConcern, which when added to a composite will install a _Timer_ for every method call
 in the composite.
 
+== @TimingCapture ==
+The +@TimingCapture+ annotation can be placed on any method of the composite, to indicate that
+a Timer is wanted on that method.
+
+Example;
+
+[snippet,java]
+----
+source=libraries/metrics/src/test/java/org/qi4j/library/metrics/DocumentationSupport.java
+tag=capture
+----
+
+== Which method? ==
+It is valid to annotate either the composite interface methods or the mixin implementation methods.
+Any of the method declarations should work. From the testcases we have the following example;
+
+[snippet,java]
+----
+source=libraries/metrics/src/test/java/org/qi4j/library/metrics/MetricsTest.java
+tag=complex-capture
+----
+
diff --git a/libraries/metrics/src/main/java/org/qi4j/library/metrics/package.html b/libraries/metrics/src/main/java/org/qi4j/library/metrics/package.html
index 172e501..5f91a38 100644
--- a/libraries/metrics/src/main/java/org/qi4j/library/metrics/package.html
+++ b/libraries/metrics/src/main/java/org/qi4j/library/metrics/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Metrics Library.</h2>
diff --git a/libraries/metrics/src/test/java/org/qi4j/library/metrics/DocumentationSupport.java b/libraries/metrics/src/test/java/org/qi4j/library/metrics/DocumentationSupport.java
new file mode 100644
index 0000000..bd5dc4e
--- /dev/null
+++ b/libraries/metrics/src/test/java/org/qi4j/library/metrics/DocumentationSupport.java
@@ -0,0 +1,79 @@
+/*
+ * 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.qi4j.library.metrics;
+
+
+import java.util.List;
+import org.qi4j.bootstrap.Assembler;
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.bootstrap.ModuleAssembly;
+
+public class DocumentationSupport
+{
+// START SNIPPET: capture
+    public interface Router
+    {
+        @TimingCapture
+        List<Coordinate> route( String source, String destination );
+    }
+
+    public class RouterAlgorithm1
+        implements Router
+    {
+        @Override
+        public List<Coordinate> route( String source, String destination )
+        {
+// END SNIPPET: capture
+            return null;
+// START SNIPPET: capture
+        }
+    }
+
+    public class RouterAlgorithm2
+        implements Router
+    {
+        @Override
+        public List<Coordinate> route( String source, String destination )
+        {
+// END SNIPPET: capture
+            return null;
+// START SNIPPET: capture
+        }
+
+// END SNIPPET: capture
+        public class MyAsembler implements Assembler
+        {
+// START SNIPPET: capture
+            @Override
+            public void assemble( ModuleAssembly module )
+                throws AssemblyException
+            {
+                module.addServices( Router.class ).identifiedBy( "router1" ).withMixins( RouterAlgorithm1.class );
+                module.addServices( Router.class ).identifiedBy( "router2" ).withMixins( RouterAlgorithm2.class );
+// END SNIPPET: capture
+// START SNIPPET: capture
+            }
+        }
+    }
+// END SNIPPET: capture
+
+    public class Coordinate
+    {
+    }
+}
diff --git a/libraries/metrics/src/test/java/org/qi4j/library/metrics/MetricsTest.java b/libraries/metrics/src/test/java/org/qi4j/library/metrics/MetricsTest.java
index a34b2ab..2ec08be 100644
--- a/libraries/metrics/src/test/java/org/qi4j/library/metrics/MetricsTest.java
+++ b/libraries/metrics/src/test/java/org/qi4j/library/metrics/MetricsTest.java
@@ -78,6 +78,7 @@
     {
         Country underTest = module.newTransient( Country1.class );
         String result = runTest( underTest );
+        result = result.replace( "\r", "" );
         assertTrue( lastLine( result, 1 ).contains( "=====================" ) );
         System.out.println( "---END TEST---" );
     }
@@ -87,6 +88,7 @@
     {
         Country underTest = module.newTransient( Country2.class );
         String result = runTest( underTest );
+        result = result.replace( "\r", "" );
         assertThat( lastLine( result, 34 ), equalTo( "org.qi4j.library.metrics.Country.SomeApplication:" ) );
         assertThat( lastLine( result, 33 ).trim(), equalTo( "name() [TimingCapture]:" ) );
         assertThat( lastLine( result, 16 ).trim(), equalTo( "updateName() [TimingCapture]:" ) );
@@ -103,7 +105,7 @@
     {
         Country underTest = module.newTransient( Country3.class );
         String result = runTest( underTest );
-        System.out.println( result );
+        result = result.replace( "\r", "" );
         assertThat( lastLine( result, 17 ), equalTo( "org.qi4j.library.metrics.Country.SomeApplication:" ) );
         assertThat( lastLine( result, 16 ).trim(), equalTo( "updateName() [TimingCapture]:" ) );
         assertTrue( lastLine( result, 5 ).contains( "75% <=" ) );
@@ -131,6 +133,7 @@
         return result.toString();
     }
 
+// START SNIPPET: complex-capture
     public interface Country extends TransientComposite
     {
         @Optional
@@ -181,7 +184,6 @@
     public static abstract class Country3Mixin
         implements Country3
     {
-
         @Override
         @TimingCapture
         public void updateName( String newName )
@@ -189,4 +191,5 @@
             name().set( newName );
         }
     }
+// END SNIPPET: complex-capture
 }
diff --git a/libraries/neo4j/build.gradle b/libraries/neo4j/build.gradle
deleted file mode 100644
index 8819f7b..0000000
--- a/libraries/neo4j/build.gradle
+++ /dev/null
@@ -1,14 +0,0 @@
-description = "Qi4j Neo4j Library provides a service wrapper for the Neo4j Graph Database"
-
-jar { manifest { name = "Qi4j Library - Neo4j" }}
-
-dependencies {
-  compile(project(":org.qi4j.core:org.qi4j.core.spi"))
-  compile(project(":org.qi4j.libraries:org.qi4j.library.fileconfig"))
-  compile(libraries.neo4j)
-
-  testCompile(project(":org.qi4j.core:org.qi4j.core.testsupport"))
-
-  testRuntime(project(":org.qi4j.core:org.qi4j.core.runtime"))
-  testRuntime(libraries.logback)
-}
\ No newline at end of file
diff --git a/libraries/neo4j/dev-status.xml b/libraries/neo4j/dev-status.xml
deleted file mode 100644
index 26a1204..0000000
--- a/libraries/neo4j/dev-status.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
-        http://www.qi4j.org/schemas/2008/dev-status/1/dev-status.xsd">
-    <status>
-        <!--none,early,beta,stable,mature-->
-        <codebase>beta</codebase>
-
-        <!-- none, brief, good, complete -->
-        <documentation>brief</documentation>
-
-        <!-- none, some, good, complete -->
-        <unittests>some</unittests>
-    </status>
-    <licenses>
-        <license>ALv2</license>
-    </licenses>
-</module>
diff --git a/libraries/neo4j/src/docs/neo4j.txt b/libraries/neo4j/src/docs/neo4j.txt
deleted file mode 100644
index 0e13414..0000000
--- a/libraries/neo4j/src/docs/neo4j.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-[[library-neo4j, Neo4j Library]]
-= Neo4j =
-
-[devstatus]
---------------
-source=libraries/neo4j/dev-status.xml
---------------
-
-The Neo4J Library provides a Neo4J embedded database as a Qi4j Service.
-
-include::../../build/docs/buildinfo/artifact.txt[]
-
-== Assembly ==
-
-Simply assemble the Service:
-
-[snippet,java]
-----
-source=libraries/neo4j/src/test/java/org/qi4j/library/neo4j/DocumentationSupport.java
-tag=assembly
-----
-
-== Usage ==
-
-The embedded Neo4J database files are stored in the `data` directory defined using the <<library-fileconfig>>.
-
-[snippet,java]
-----
-source=libraries/neo4j/src/test/java/org/qi4j/library/neo4j/DocumentationSupport.java
-tag=neo4j
-----
diff --git a/libraries/neo4j/src/main/java/org/qi4j/library/neo4j/EmbeddedDatabaseService.java b/libraries/neo4j/src/main/java/org/qi4j/library/neo4j/EmbeddedDatabaseService.java
deleted file mode 100644
index cecd08b..0000000
--- a/libraries/neo4j/src/main/java/org/qi4j/library/neo4j/EmbeddedDatabaseService.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (c) 2011, Rickard Öberg. All Rights Reserved.
- *
- * Licensed 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.qi4j.library.neo4j;
-
-import java.io.File;
-import org.neo4j.graphdb.GraphDatabaseService;
-import org.neo4j.kernel.EmbeddedGraphDatabase;
-import org.qi4j.api.activation.ActivatorAdapter;
-import org.qi4j.api.activation.Activators;
-import org.qi4j.api.injection.scope.Service;
-import org.qi4j.api.injection.scope.Uses;
-import org.qi4j.api.mixin.Mixins;
-import org.qi4j.api.service.ServiceComposite;
-import org.qi4j.api.service.ServiceDescriptor;
-import org.qi4j.api.service.ServiceReference;
-import org.qi4j.library.fileconfig.FileConfiguration;
-
-/**
- * TODO
- */
-@Mixins(EmbeddedDatabaseService.Mixin.class)
-@Activators( EmbeddedDatabaseService.Activator.class )
-public interface EmbeddedDatabaseService
-    extends ServiceComposite
-{
-    void startDatabase()
-            throws Exception;
-    
-    void stopDatabase()
-            throws Exception;
-    
-    GraphDatabaseService database();
-    
-    class Activator
-            extends ActivatorAdapter<ServiceReference<EmbeddedDatabaseService>>
-    {
-
-        @Override
-        public void afterActivation( ServiceReference<EmbeddedDatabaseService> activated )
-                throws Exception
-        {
-            activated.get().startDatabase();
-        }
-
-        @Override
-        public void beforePassivation( ServiceReference<EmbeddedDatabaseService> passivating )
-                throws Exception
-        {
-            passivating.get().stopDatabase();
-        }
-        
-    }
-
-    abstract class Mixin
-        implements EmbeddedDatabaseService
-    {
-        @Service
-        FileConfiguration config;
-
-        @Uses
-        ServiceDescriptor descriptor;
-
-        EmbeddedGraphDatabase db;
-
-        @Override
-        public void startDatabase()
-            throws Exception
-        {
-            String path = new File( config.dataDirectory(), identity().get() ).getAbsolutePath();
-            db = new EmbeddedGraphDatabase( path );
-        }
-
-        @Override
-        public void stopDatabase()
-            throws Exception
-        {
-            db.shutdown();
-        }
-        
-        @Override
-        public GraphDatabaseService database()
-        {
-            return db;
-        }
-
-    }
-}
diff --git a/libraries/neo4j/src/main/java/org/qi4j/library/neo4j/package.html b/libraries/neo4j/src/main/java/org/qi4j/library/neo4j/package.html
deleted file mode 100644
index 6083b0c..0000000
--- a/libraries/neo4j/src/main/java/org/qi4j/library/neo4j/package.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<html>
-    <body>
-        <h2>Neo4j Library.</h2>
-    </body>
-</html>
\ No newline at end of file
diff --git a/libraries/neo4j/src/test/java/org/qi4j/library/neo4j/DocumentationSupport.java b/libraries/neo4j/src/test/java/org/qi4j/library/neo4j/DocumentationSupport.java
deleted file mode 100644
index 357db1f..0000000
--- a/libraries/neo4j/src/test/java/org/qi4j/library/neo4j/DocumentationSupport.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2012, Paul Merlin.
- *
- * Licensed 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.qi4j.library.neo4j;
-
-import org.neo4j.graphdb.GraphDatabaseService;
-import org.qi4j.api.injection.scope.Service;
-import org.qi4j.bootstrap.Assembler;
-import org.qi4j.bootstrap.AssemblyException;
-import org.qi4j.bootstrap.ModuleAssembly;
-
-public class DocumentationSupport
-        implements Assembler
-{
-
-    // START SNIPPET: assembly
-    public void assemble( ModuleAssembly module )
-            throws AssemblyException
-    {
-        module.services( EmbeddedDatabaseService.class );
-    }
-    // END SNIPPET: assembly
-
-    // START SNIPPET: neo4j
-    @Service EmbeddedDatabaseService neo4jService;
-
-    public void doSomething()
-    {
-        GraphDatabaseService db = neo4jService.database();
-        // END SNIPPET: neo4j
-        // START SNIPPET: neo4j
-    }
-    // END SNIPPET: neo4j
-
-}
diff --git a/libraries/neo4j/src/test/java/org/qi4j/library/neo4j/EmbeddedDatabaseServiceTest.java b/libraries/neo4j/src/test/java/org/qi4j/library/neo4j/EmbeddedDatabaseServiceTest.java
deleted file mode 100644
index 5368cdb..0000000
--- a/libraries/neo4j/src/test/java/org/qi4j/library/neo4j/EmbeddedDatabaseServiceTest.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (c) 2011, Rickard Öberg. All Rights Reserved.
- *
- * Licensed 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.qi4j.library.neo4j;
-
-import org.junit.Test;
-import org.neo4j.graphdb.GraphDatabaseService;
-import org.neo4j.graphdb.Node;
-import org.neo4j.graphdb.RelationshipType;
-import org.neo4j.graphdb.Transaction;
-import org.qi4j.bootstrap.AssemblyException;
-import org.qi4j.bootstrap.ModuleAssembly;
-import org.qi4j.library.fileconfig.FileConfigurationService;
-import org.qi4j.test.AbstractQi4jTest;
-
-/**
- * TODO
- */
-public class EmbeddedDatabaseServiceTest
-    extends AbstractQi4jTest
-{
-    enum TestRelationships implements RelationshipType
-    {
-        KNOWS
-    }
-
-    @Override
-    public void assemble( ModuleAssembly module )
-        throws AssemblyException
-    {
-        module.services( FileConfigurationService.class );
-        module.services( EmbeddedDatabaseService.class );
-    }
-
-    @Test
-    public void testDatabase()
-    {
-        GraphDatabaseService database = module.findService( EmbeddedDatabaseService.class ).get().database();
-
-        {
-            Transaction tx = database.beginTx();
-
-            try
-            {
-                Node rickard = database.createNode();
-                rickard.setProperty( "name", "Rickard" );
-
-                Node niclas = database.createNode();
-                niclas.setProperty( "name", "Niclas" );
-
-                rickard.createRelationshipTo( niclas, TestRelationships.KNOWS );
-
-                tx.success();
-            }
-            finally
-            {
-                tx.finish();
-            }
-        }
-    }
-}
diff --git a/libraries/osgi/build.gradle b/libraries/osgi/build.gradle
index 3473bb6..887f470 100644
--- a/libraries/osgi/build.gradle
+++ b/libraries/osgi/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j OSGi Library provides integration of OSGi and Qi4j, so that services in each system can be shared."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - OSGi Integration" }}
+description = "Apache Zest™ OSGi Library provides integration of OSGi and Apache Zest™, so that services in each system can be shared."
+
+jar { manifest { name = "Apache Zest™ Library - OSGi Integration" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.api"))
diff --git a/libraries/osgi/dev-status.xml b/libraries/osgi/dev-status.xml
index 89e7fa1..515291a 100644
--- a/libraries/osgi/dev-status.xml
+++ b/libraries/osgi/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/libraries/osgi/src/docs/osgi.txt b/libraries/osgi/src/docs/osgi.txt
index f0eb552..957bbfc 100644
--- a/libraries/osgi/src/docs/osgi.txt
+++ b/libraries/osgi/src/docs/osgi.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[library-osgi, OSGi Library]]
 = OSGi =
 
@@ -6,12 +25,12 @@
 source=libraries/osgi/dev-status.xml
 --------------
 
-OSGi Library allows you to import OSGi services as Qi4j Services and to export Qi4j Services as OSGi Services both
-leveraging the Qi4j Availability and OSGi FallbackStrategy mechanisms.
+OSGi Library allows you to import OSGi services as Zest™ Services and to export Zest™ Services as OSGi Services both
+leveraging the Zest™ Availability and OSGi FallbackStrategy mechanisms.
 
 include::../../build/docs/buildinfo/artifact.txt[]
 
-== Export Qi4j services to an OSGi Bundle ==
+== Export Zest™ services to an OSGi Bundle ==
 
 [snippet,java]
 ----
@@ -20,7 +39,7 @@
 ----
 
 
-== Import OSGi services in a Qi4j Module ==
+== Import OSGi services in a Zest™ Module ==
 
 [snippet,java]
 ----
diff --git a/libraries/osgi/src/main/java/org/qi4j/library/osgi/FallbackStrategy.java b/libraries/osgi/src/main/java/org/qi4j/library/osgi/FallbackStrategy.java
index a725db2..7cce688 100644
--- a/libraries/osgi/src/main/java/org/qi4j/library/osgi/FallbackStrategy.java
+++ b/libraries/osgi/src/main/java/org/qi4j/library/osgi/FallbackStrategy.java
@@ -1,9 +1,20 @@
 /*
- * Copyright (c) 2010 Morgan Stanley & Co. Incorporated, All Rights Reserved
+ * 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
  *
- * Unpublished copyright.  All rights reserved.  This material contains
- * proprietary information that shall be used or copied only within
- * Morgan Stanley, except with written permission of Morgan Stanley.
+ *   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.qi4j.library.osgi;
 
diff --git a/libraries/osgi/src/main/java/org/qi4j/library/osgi/OSGiEnabledService.java b/libraries/osgi/src/main/java/org/qi4j/library/osgi/OSGiEnabledService.java
index 4a4b565..efe8e9c 100644
--- a/libraries/osgi/src/main/java/org/qi4j/library/osgi/OSGiEnabledService.java
+++ b/libraries/osgi/src/main/java/org/qi4j/library/osgi/OSGiEnabledService.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.osgi;
 
 import java.lang.reflect.Type;
diff --git a/libraries/osgi/src/main/java/org/qi4j/library/osgi/OSGiImportInfo.java b/libraries/osgi/src/main/java/org/qi4j/library/osgi/OSGiImportInfo.java
index 6eca47a..8f283bd 100644
--- a/libraries/osgi/src/main/java/org/qi4j/library/osgi/OSGiImportInfo.java
+++ b/libraries/osgi/src/main/java/org/qi4j/library/osgi/OSGiImportInfo.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.osgi;
 
 import org.osgi.framework.BundleContext;
diff --git a/libraries/osgi/src/main/java/org/qi4j/library/osgi/OSGiServiceExporter.java b/libraries/osgi/src/main/java/org/qi4j/library/osgi/OSGiServiceExporter.java
index d8c330a..0f3ee7d 100644
--- a/libraries/osgi/src/main/java/org/qi4j/library/osgi/OSGiServiceExporter.java
+++ b/libraries/osgi/src/main/java/org/qi4j/library/osgi/OSGiServiceExporter.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.osgi;
 
 import java.util.ArrayList;
@@ -17,7 +35,7 @@
 import static org.qi4j.api.util.Classes.interfacesOf;
 
 /**
- * Export Qi4j services to an OSGi Bundle.
+ * Export Zest services to an OSGi Bundle.
  */
 @Mixins( OSGiServiceExporter.OSGiServiceExporterMixin.class )
 @Activators( OSGiServiceExporter.Activator.class )
diff --git a/libraries/osgi/src/main/java/org/qi4j/library/osgi/OSGiServiceImporter.java b/libraries/osgi/src/main/java/org/qi4j/library/osgi/OSGiServiceImporter.java
index ef759f0..3f302f6 100644
--- a/libraries/osgi/src/main/java/org/qi4j/library/osgi/OSGiServiceImporter.java
+++ b/libraries/osgi/src/main/java/org/qi4j/library/osgi/OSGiServiceImporter.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.osgi;
 
 import java.lang.reflect.InvocationHandler;
@@ -12,7 +30,7 @@
 import org.qi4j.api.service.ServiceUnavailableException;
 
 /**
- * Import OSGi services in a Qi4j Module.
+ * Import OSGi services in a Zest Module.
  */
 public class OSGiServiceImporter
     implements ServiceImporter
diff --git a/libraries/osgi/src/main/java/org/qi4j/library/osgi/package.html b/libraries/osgi/src/main/java/org/qi4j/library/osgi/package.html
index 415ed75..7d9b47b 100644
--- a/libraries/osgi/src/main/java/org/qi4j/library/osgi/package.html
+++ b/libraries/osgi/src/main/java/org/qi4j/library/osgi/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>OSGi Library.</h2>
diff --git a/libraries/osgi/src/test/java/org/qi4j/library/osgi/DocumentationSupport.java b/libraries/osgi/src/test/java/org/qi4j/library/osgi/DocumentationSupport.java
index 5cb7627..9eccaee 100644
--- a/libraries/osgi/src/test/java/org/qi4j/library/osgi/DocumentationSupport.java
+++ b/libraries/osgi/src/test/java/org/qi4j/library/osgi/DocumentationSupport.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.osgi;
 
 import org.osgi.framework.BundleContext;
diff --git a/libraries/osgi/src/test/java/org/qi4j/library/osgi/OSGiServiceTest.java b/libraries/osgi/src/test/java/org/qi4j/library/osgi/OSGiServiceTest.java
index a9a2589..bcc5ba6 100644
--- a/libraries/osgi/src/test/java/org/qi4j/library/osgi/OSGiServiceTest.java
+++ b/libraries/osgi/src/test/java/org/qi4j/library/osgi/OSGiServiceTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.osgi;
 
 import org.junit.Test;
diff --git a/libraries/rdf/build.gradle b/libraries/rdf/build.gradle
index 135a83b..dff55b5 100644
--- a/libraries/rdf/build.gradle
+++ b/libraries/rdf/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j RDF Library provides commonalities of various RDF based services in Qi4j, such as RDF Indexing."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - RDF" }}
+description = "Apache Zest™ RDF Library provides commonalities of various RDF based services in Apache Zest™, such as RDF Indexing."
+
+jar { manifest { name = "Apache Zest™ Library - RDF" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.spi"))
diff --git a/libraries/rdf/dev-status.xml b/libraries/rdf/dev-status.xml
index d381831..f8669b1 100644
--- a/libraries/rdf/dev-status.xml
+++ b/libraries/rdf/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/libraries/rdf/src/docs/rdf.txt b/libraries/rdf/src/docs/rdf.txt
index 8ebb55b..b2bf2c3 100644
--- a/libraries/rdf/src/docs/rdf.txt
+++ b/libraries/rdf/src/docs/rdf.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[library-rdf, RDF Library]]
 = RDF =
 
diff --git a/libraries/rdf/src/main/java/org/qi4j/library/rdf/Qi4jEntity.java b/libraries/rdf/src/main/java/org/qi4j/library/rdf/Qi4jEntity.java
index e021b55..f6d357c 100644
--- a/libraries/rdf/src/main/java/org/qi4j/library/rdf/Qi4jEntity.java
+++ b/libraries/rdf/src/main/java/org/qi4j/library/rdf/Qi4jEntity.java
@@ -19,7 +19,7 @@
 
 
 /**
- * This is the RDF vocabulary for Qi4j Entity data.
+ * This is the RDF vocabulary for Zest Entity data.
  */
 public interface Qi4jEntity
 {
diff --git a/libraries/rdf/src/main/java/org/qi4j/library/rdf/Qi4jEntityType.java b/libraries/rdf/src/main/java/org/qi4j/library/rdf/Qi4jEntityType.java
index 96d1367..5a16e25 100644
--- a/libraries/rdf/src/main/java/org/qi4j/library/rdf/Qi4jEntityType.java
+++ b/libraries/rdf/src/main/java/org/qi4j/library/rdf/Qi4jEntityType.java
@@ -19,7 +19,7 @@
 
 
 /**
- * This is the RDF vocabulary for Qi4j EntityType data.
+ * This is the RDF vocabulary for Zest EntityType data.
  */
 public interface Qi4jEntityType
 {
diff --git a/libraries/rdf/src/main/java/org/qi4j/library/rdf/Qi4jRdf.java b/libraries/rdf/src/main/java/org/qi4j/library/rdf/Qi4jRdf.java
index 26ec8b4..98fd120 100644
--- a/libraries/rdf/src/main/java/org/qi4j/library/rdf/Qi4jRdf.java
+++ b/libraries/rdf/src/main/java/org/qi4j/library/rdf/Qi4jRdf.java
@@ -19,7 +19,7 @@
 
 
 /**
- * This is the RDF vocabulary for Qi4j.
+ * This is the RDF vocabulary for Zest.
  */
 public interface Qi4jRdf
 {
diff --git a/libraries/rdf/src/main/java/org/qi4j/library/rdf/entity/package.html b/libraries/rdf/src/main/java/org/qi4j/library/rdf/entity/package.html
index 6866a68..b638d82 100644
--- a/libraries/rdf/src/main/java/org/qi4j/library/rdf/entity/package.html
+++ b/libraries/rdf/src/main/java/org/qi4j/library/rdf/entity/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>RDF Entity Serializer.</h2>
diff --git a/libraries/rdf/src/main/java/org/qi4j/library/rdf/model/Model2XML.java b/libraries/rdf/src/main/java/org/qi4j/library/rdf/model/Model2XML.java
index 615bc90..ae83204 100644
--- a/libraries/rdf/src/main/java/org/qi4j/library/rdf/model/Model2XML.java
+++ b/libraries/rdf/src/main/java/org/qi4j/library/rdf/model/Model2XML.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.rdf.model;
 
 import java.util.HashMap;
diff --git a/libraries/rdf/src/main/java/org/qi4j/library/rdf/model/package.html b/libraries/rdf/src/main/java/org/qi4j/library/rdf/model/package.html
index 61d9da0..0f17f94 100644
--- a/libraries/rdf/src/main/java/org/qi4j/library/rdf/model/package.html
+++ b/libraries/rdf/src/main/java/org/qi4j/library/rdf/model/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>RDF Application Model Serializer.</h2>
diff --git a/libraries/rdf/src/main/java/org/qi4j/library/rdf/package.html b/libraries/rdf/src/main/java/org/qi4j/library/rdf/package.html
index 7b2507e..9b22669 100644
--- a/libraries/rdf/src/main/java/org/qi4j/library/rdf/package.html
+++ b/libraries/rdf/src/main/java/org/qi4j/library/rdf/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>RDF Library.</h2>
diff --git a/libraries/rdf/src/main/java/org/qi4j/library/rdf/repository/NativeRepositoryService.java b/libraries/rdf/src/main/java/org/qi4j/library/rdf/repository/NativeRepositoryService.java
index c098fb8..94e6486 100644
--- a/libraries/rdf/src/main/java/org/qi4j/library/rdf/repository/NativeRepositoryService.java
+++ b/libraries/rdf/src/main/java/org/qi4j/library/rdf/repository/NativeRepositoryService.java
@@ -32,183 +32,190 @@
 import org.qi4j.api.service.ServiceReference;
 import org.qi4j.library.fileconfig.FileConfiguration;
 
-@Mixins({NativeRepositoryService.NativeRepositoryMixin.class})
+@Mixins( { NativeRepositoryService.NativeRepositoryMixin.class } )
 @Activators( NativeRepositoryService.Activator.class )
 public interface NativeRepositoryService extends Repository, ServiceComposite, Availability
 {
     @Override
     void initialize()
-            throws RepositoryException;
+        throws RepositoryException;
 
     @Override
     void shutDown()
-            throws RepositoryException;
+        throws RepositoryException;
 
     public static class Activator
-            extends ActivatorAdapter<ServiceReference<NativeRepositoryService>>
+        extends ActivatorAdapter<ServiceReference<NativeRepositoryService>>
     {
 
         @Override
         public void afterActivation( ServiceReference<NativeRepositoryService> activated )
-                throws Exception
+            throws Exception
         {
             activated.get().initialize();
         }
 
         @Override
         public void beforePassivation( ServiceReference<NativeRepositoryService> passivating )
-                throws Exception
+            throws Exception
         {
             passivating.get().shutDown();
         }
-
     }
 
-
     public static abstract class NativeRepositoryMixin
-           implements NativeRepositoryService, ResetableRepository
-   {
-      @Optional
-      @Service
-      FileConfiguration fileConfiguration;
+        implements NativeRepositoryService, ResetableRepository
+    {
+        @Optional
+        @Service
+        FileConfiguration fileConfiguration;
 
-      @This
-      private Configuration<NativeConfiguration> configuration;
+        @This
+        private Configuration<NativeConfiguration> configuration;
 
-      private SailRepository repo;
-      private boolean isNotInitialized;
+        private SailRepository repo;
+        private boolean isNotInitialized;
 
-      public NativeRepositoryMixin()
-      {
-         isNotInitialized = true;
-         repo = new SailRepository(new NativeStore());
-      }
+        public NativeRepositoryMixin()
+        {
+            isNotInitialized = true;
+            repo = new SailRepository( new NativeStore() );
+        }
 
-      @Override
-      public void setDataDir(File dataDir)
-      {
-         repo.setDataDir(dataDir);
-      }
+        @Override
+        public void setDataDir( File dataDir )
+        {
+            repo.setDataDir( dataDir );
+        }
 
-      @Override
-      public File getDataDir()
-      {
-         return repo.getDataDir();
-      }
+        @Override
+        public File getDataDir()
+        {
+            return repo.getDataDir();
+        }
 
-      @Override
-      public void initialize()
-              throws RepositoryException
-      {
-         String dataDir = configuration.get().dataDirectory().get();
-         if (dataDir == null || "".equals(dataDir))
-         {
-            if (fileConfiguration != null)
+        @Override
+        public void initialize()
+            throws RepositoryException
+        {
+            String dataDir = configuration.get().dataDirectory().get();
+            File dataDirectory;
+            if( dataDir == null || "".equals( dataDir ) )
             {
-               dataDir = new File(fileConfiguration.dataDirectory(), configuration.get().identity().get()).getAbsolutePath();
-            } else
-            {
-               String id = configuration.get().identity().get();
-               if (id == null || "".equals(id))
-               {
-                  dataDir = "./rdf/repositories/qi4j";
-               } else
-               {
-                  dataDir = "./rdf/repositories/" + id;
-               }
+                String serviceIdentity = configuration.get().identity().get();
+                if( fileConfiguration != null )
+                {
+                    dataDir = new File( fileConfiguration.dataDirectory(), serviceIdentity ).getAbsolutePath();
+                }
+                else
+                {
+                    if( serviceIdentity == null || "".equals( serviceIdentity ) )
+                    {
+                        dataDir = "./rdf/repositories/qi4j";
+                    }
+                    else
+                    {
+                        dataDir = "./rdf/repositories/" + serviceIdentity;
+                    }
+                }
+                configuration.get().dataDirectory().set( dataDir );
+                configuration.save();
+                dataDirectory = new File( dataDir );
             }
-            configuration.get().dataDirectory().set(dataDir);
-            configuration.save();
-         }
-         initializeRepository(new File(dataDir));
-      }
-
-      @Override
-      public boolean isInitialized()
-      {
-         return !isNotInitialized;
-      }
-
-      @Override
-      public void shutDown()
-              throws RepositoryException
-      {
-          repo.shutDown();
-      }
-
-      @Override
-      public boolean isWritable()
-              throws RepositoryException
-      {
-         return repo.isWritable();
-      }
-
-      @Override
-      public RepositoryConnection getConnection()
-              throws RepositoryException
-      {
-         if (isNotInitialized)
-         {
-            return null;
-         }
-         return repo.getConnection();
-      }
-
-      @Override
-      public ValueFactory getValueFactory()
-      {
-         return repo.getValueFactory();
-      }
-
-      @Override
-      public void discardEntireRepository()
-              throws RepositoryException
-      {
-         File dataDir = repo.getDataDir();
-         repo.shutDown();
-         delete(dataDir);
-         initializeRepository(dataDir);
-      }
-
-      private void delete(File dataDir)
-      {
-         File[] children = dataDir.listFiles();
-         for (File child : children)
-         {
-            if (child.isDirectory())
+            else
             {
-               delete(child);
-            } else
-            {
-               //noinspection ResultOfMethodCallIgnored
-               child.delete();
+                dataDirectory = new File( dataDir ).getAbsoluteFile();
             }
-         }
-      }
+            initializeRepository( dataDirectory );
+        }
 
-      private void initializeRepository(File dataDir)
-              throws RepositoryException
-      {
-         String tripleIndexes = configuration.get().tripleIndexes().get();
-         if (tripleIndexes == null)
-         {
-            tripleIndexes = "";
-            configuration.get().tripleIndexes().set(tripleIndexes);
-         }
-         boolean forceSync = configuration.get().forceSync().get();
+        @Override
+        public boolean isInitialized()
+        {
+            return !isNotInitialized;
+        }
 
-         NativeStore store = (NativeStore) repo.getSail();
-         store.setDataDir(dataDir);
-         store.setTripleIndexes(tripleIndexes);
-         store.setForceSync(forceSync);
-         repo.initialize();
-         isNotInitialized = false;
-      }
+        @Override
+        public void shutDown()
+            throws RepositoryException
+        {
+            repo.shutDown();
+        }
 
-       @Override
-       public boolean isAvailable()
-       {
-           return !isNotInitialized;
-       }
-   }
+        @Override
+        public boolean isWritable()
+            throws RepositoryException
+        {
+            return repo.isWritable();
+        }
+
+        @Override
+        public RepositoryConnection getConnection()
+            throws RepositoryException
+        {
+            if( isNotInitialized )
+            {
+                return null;
+            }
+            return repo.getConnection();
+        }
+
+        @Override
+        public ValueFactory getValueFactory()
+        {
+            return repo.getValueFactory();
+        }
+
+        @Override
+        public void discardEntireRepository()
+            throws RepositoryException
+        {
+            File dataDir = repo.getDataDir();
+            repo.shutDown();
+            delete( dataDir );
+            initializeRepository( dataDir );
+        }
+
+        private void delete( File dataDir )
+        {
+            File[] children = dataDir.listFiles();
+            for( File child : children )
+            {
+                if( child.isDirectory() )
+                {
+                    delete( child );
+                }
+                else
+                {
+                    //noinspection ResultOfMethodCallIgnored
+                    child.delete();
+                }
+            }
+        }
+
+        private void initializeRepository( File dataDir )
+            throws RepositoryException
+        {
+            String tripleIndexes = configuration.get().tripleIndexes().get();
+            if( tripleIndexes == null )
+            {
+                tripleIndexes = "";
+                configuration.get().tripleIndexes().set( tripleIndexes );
+            }
+            boolean forceSync = configuration.get().forceSync().get();
+
+            NativeStore store = (NativeStore) repo.getSail();
+            store.setDataDir( dataDir );
+            store.setTripleIndexes( tripleIndexes );
+            store.setForceSync( forceSync );
+            repo.initialize();
+            isNotInitialized = false;
+        }
+
+        @Override
+        public boolean isAvailable()
+        {
+            return !isNotInitialized;
+        }
+    }
 }
diff --git a/libraries/rdf/src/main/java/org/qi4j/library/rdf/repository/package.html b/libraries/rdf/src/main/java/org/qi4j/library/rdf/repository/package.html
index 1132cdc..129d9a7 100644
--- a/libraries/rdf/src/main/java/org/qi4j/library/rdf/repository/package.html
+++ b/libraries/rdf/src/main/java/org/qi4j/library/rdf/repository/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>RDF Repositories.</h2>
diff --git a/libraries/rdf/src/main/java/org/qi4j/library/rdf/serializer/package.html b/libraries/rdf/src/main/java/org/qi4j/library/rdf/serializer/package.html
index 6b25a3c..d1fbf42 100644
--- a/libraries/rdf/src/main/java/org/qi4j/library/rdf/serializer/package.html
+++ b/libraries/rdf/src/main/java/org/qi4j/library/rdf/serializer/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>RDF Serializer.</h2>
diff --git a/libraries/rdf/src/test/java/org/qi4j/library/rdf/Model2XMLTest.java b/libraries/rdf/src/test/java/org/qi4j/library/rdf/Model2XMLTest.java
index c1a2f3b..bdff5ac 100644
--- a/libraries/rdf/src/test/java/org/qi4j/library/rdf/Model2XMLTest.java
+++ b/libraries/rdf/src/test/java/org/qi4j/library/rdf/Model2XMLTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.rdf;
 
 import org.junit.Test;
diff --git a/libraries/rdf/src/test/java/org/qi4j/library/rdf/entity/EntitySerializerTest.java b/libraries/rdf/src/test/java/org/qi4j/library/rdf/entity/EntitySerializerTest.java
index d41466d..a89f518 100644
--- a/libraries/rdf/src/test/java/org/qi4j/library/rdf/entity/EntitySerializerTest.java
+++ b/libraries/rdf/src/test/java/org/qi4j/library/rdf/entity/EntitySerializerTest.java
@@ -25,16 +25,17 @@
 import org.qi4j.api.injection.scope.Uses;
 import org.qi4j.api.unitofwork.UnitOfWork;
 import org.qi4j.api.unitofwork.UnitOfWorkCompletionException;
+import org.qi4j.api.usecase.Usecase;
 import org.qi4j.api.usecase.UsecaseBuilder;
 import org.qi4j.api.value.ValueBuilder;
 import org.qi4j.bootstrap.AssemblyException;
 import org.qi4j.bootstrap.ModuleAssembly;
-import org.qi4j.entitystore.memory.MemoryEntityStoreService;
 import org.qi4j.library.rdf.DcRdf;
 import org.qi4j.library.rdf.Rdfs;
 import org.qi4j.library.rdf.serializer.RdfXmlSerializer;
 import org.qi4j.spi.entity.EntityState;
 import org.qi4j.spi.entitystore.EntityStore;
+import org.qi4j.spi.entitystore.EntityStoreUnitOfWork;
 import org.qi4j.test.AbstractQi4jTest;
 import org.qi4j.test.EntityTestAssembler;
 import org.qi4j.valueserialization.orgjson.OrgJsonValueSerializationAssembler;
@@ -45,10 +46,13 @@
 public class EntitySerializerTest
     extends AbstractQi4jTest
 {
-    @Service EntityStore entityStore;
-    @Uses EntityStateSerializer serializer;
+    @Service
+    EntityStore entityStore;
+    @Uses
+    EntityStateSerializer serializer;
 
-    public void assemble( ModuleAssembly module ) throws AssemblyException
+    public void assemble( ModuleAssembly module )
+        throws AssemblyException
     {
         new EntityTestAssembler().assemble( module );
         new OrgJsonValueSerializationAssembler().assemble( module );
@@ -58,8 +62,10 @@
         module.objects( EntityStateSerializer.class, EntitySerializerTest.class );
     }
 
-    @Override @Before
-    public void setUp() throws Exception
+    @Override
+    @Before
+    public void setUp()
+        throws Exception
     {
         super.setUp();
 
@@ -69,21 +75,25 @@
     }
 
     @Test
-    public void testEntitySerializer() throws RDFHandlerException
+    public void testEntitySerializer()
+        throws RDFHandlerException
     {
         EntityReference entityReference = new EntityReference( "test2" );
-        EntityState entityState = entityStore.newUnitOfWork( UsecaseBuilder.newUsecase( "Test" ), module, System.currentTimeMillis() ).entityStateOf( entityReference );
+        Usecase usecase = UsecaseBuilder.newUsecase( "Test" );
+        long currentTime = System.currentTimeMillis();
+        EntityStoreUnitOfWork unitOfWork = entityStore.newUnitOfWork( usecase, module, currentTime );
+        EntityState entityState = unitOfWork.entityStateOf( module, entityReference );
 
         Iterable<Statement> graph = serializer.serialize( entityState );
 
         String[] prefixes = new String[]{ "rdf", "dc", " vc" };
         String[] namespaces = new String[]{ Rdfs.RDF, DcRdf.NAMESPACE, "http://www.w3.org/2001/vcard-rdf/3.0#" };
 
-
         new RdfXmlSerializer().serialize( graph, new PrintWriter( System.out ), prefixes, namespaces );
     }
 
-    void createDummyData() throws UnitOfWorkCompletionException
+    void createDummyData()
+        throws UnitOfWorkCompletionException
     {
         UnitOfWork unitOfWork = module.newUnitOfWork();
         try
diff --git a/libraries/rdf/src/test/java/org/qi4j/library/rdf/entity/test.xml b/libraries/rdf/src/test/java/org/qi4j/library/rdf/entity/test.xml
index c25e015..b2de33f 100644
--- a/libraries/rdf/src/test/java/org/qi4j/library/rdf/entity/test.xml
+++ b/libraries/rdf/src/test/java/org/qi4j/library/rdf/entity/test.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
 <rdf:RDF
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
diff --git a/libraries/rdf/src/test/java/org/qi4j/library/rdf/entity/test2.xml b/libraries/rdf/src/test/java/org/qi4j/library/rdf/entity/test2.xml
index 11a738f..91ff53b 100644
--- a/libraries/rdf/src/test/java/org/qi4j/library/rdf/entity/test2.xml
+++ b/libraries/rdf/src/test/java/org/qi4j/library/rdf/entity/test2.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
 <rdf:RDF
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
diff --git a/libraries/rdf/src/test/resources/org/qi4j/library/rdf/repository/NativeRepositoryService.properties b/libraries/rdf/src/test/resources/org/qi4j/library/rdf/repository/NativeRepositoryService.properties
index b434acf..5c42def 100644
--- a/libraries/rdf/src/test/resources/org/qi4j/library/rdf/repository/NativeRepositoryService.properties
+++ b/libraries/rdf/src/test/resources/org/qi4j/library/rdf/repository/NativeRepositoryService.properties
@@ -1 +1,16 @@
+# 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.
+
 tripleIndexes=spoc
diff --git a/libraries/rest-client/build.gradle b/libraries/rest-client/build.gradle
index ab9fa12..04b1ce9 100644
--- a/libraries/rest-client/build.gradle
+++ b/libraries/rest-client/build.gradle
@@ -1,12 +1,32 @@
-description = "Qi4j REST Client Library provides a client library for the Qi4j REST Server library"
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - REST Client" }}
+description = "Apache Zest™ REST Client Library provides a client library for the Apache Zest™ REST Server library"
+
+jar { manifest { name = "Apache Zest™ Library - REST Client" }}
 
 dependencies {
 
     compile project( ":org.qi4j.core:org.qi4j.core.api" )
     compile project( ":org.qi4j.libraries:org.qi4j.library.rest-common" )
     compile libraries.restlet
+    compile libraries.slf4j_api
 
     testCompile project( ":org.qi4j.core:org.qi4j.core.testsupport" )
     testCompile project( ":org.qi4j.libraries:org.qi4j.library.rest-server" )
diff --git a/libraries/rest-client/dev-status.xml b/libraries/rest-client/dev-status.xml
index f0ee6e9..a294481 100644
--- a/libraries/rest-client/dev-status.xml
+++ b/libraries/rest-client/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/libraries/rest-client/src/docs/primer.txt b/libraries/rest-client/src/docs/primer.txt
index 2548f66..62245bd 100644
--- a/libraries/rest-client/src/docs/primer.txt
+++ b/libraries/rest-client/src/docs/primer.txt
@@ -1,7 +1,26 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[library-rest-client-primer, HATEOAS Primer]]
 = ReST - HATEOAS Primer
 
-The Qi4j ReST Client implements HATEOAS (Hypermedia As The Engine Of Application State) to the full extent intended
+The Zest™ ReST Client implements HATEOAS (Hypermedia As The Engine Of Application State) to the full extent intended
 by Roy Fielding. The ReST Client Library enables the creation of HATEOAS applications that are NOT using the URL space,
 and it is NOT about doing RPC calls over HTTP using a common exchange format (like JSON).
 
@@ -60,7 +79,7 @@
 It becomes possible to blend general application and error handling logic with use case specific handlers.
 
 That's basically it. This is where I want to go with support for REST, as a way to truly leverage the REST ideas and
-make it very easy to do REST applications *and* clients based on Qi4j, by keeping the application logic on the server.
+make it very easy to do REST applications *and* clients based on Zest, by keeping the application logic on the server.
 In the long run there would also be a JavaScript version of the client, with the same characteristics, so that you can
-easily build a jQuery UI for Qi4j REST apps.
+easily build a jQuery UI for Zest™ REST apps.
 
diff --git a/libraries/rest-client/src/docs/rest-client.txt b/libraries/rest-client/src/docs/rest-client.txt
index 0914aef..dafd6db 100644
--- a/libraries/rest-client/src/docs/rest-client.txt
+++ b/libraries/rest-client/src/docs/rest-client.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[library-rest-client, ReST Client Library]]
 = ReST Client =
 
diff --git a/libraries/rest-client/src/main/java/org/qi4j/library/rest/client/api/ErrorHandler.java b/libraries/rest-client/src/main/java/org/qi4j/library/rest/client/api/ErrorHandler.java
index e7ffb73..0afbbf4 100644
--- a/libraries/rest-client/src/main/java/org/qi4j/library/rest/client/api/ErrorHandler.java
+++ b/libraries/rest-client/src/main/java/org/qi4j/library/rest/client/api/ErrorHandler.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.rest.client.api;
 
 import java.util.LinkedHashMap;
diff --git a/libraries/rest-client/src/main/java/org/qi4j/library/rest/client/api/HandlerCommand.java b/libraries/rest-client/src/main/java/org/qi4j/library/rest/client/api/HandlerCommand.java
index 0ece52d..aed48bb 100644
--- a/libraries/rest-client/src/main/java/org/qi4j/library/rest/client/api/HandlerCommand.java
+++ b/libraries/rest-client/src/main/java/org/qi4j/library/rest/client/api/HandlerCommand.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.rest.client.api;
 
 import java.lang.reflect.ParameterizedType;
diff --git a/libraries/rest-client/src/main/java/org/qi4j/library/rest/client/api/package.html b/libraries/rest-client/src/main/java/org/qi4j/library/rest/client/api/package.html
index 6b8f657..c7ceff6 100644
--- a/libraries/rest-client/src/main/java/org/qi4j/library/rest/client/api/package.html
+++ b/libraries/rest-client/src/main/java/org/qi4j/library/rest/client/api/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>ReST Client API.</h2>
diff --git a/libraries/rest-client/src/main/java/org/qi4j/library/rest/client/package.html b/libraries/rest-client/src/main/java/org/qi4j/library/rest/client/package.html
index 618f022..0e5a93a 100644
--- a/libraries/rest-client/src/main/java/org/qi4j/library/rest/client/package.html
+++ b/libraries/rest-client/src/main/java/org/qi4j/library/rest/client/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>ReST Client Library.</h2>
diff --git a/libraries/rest-client/src/main/java/org/qi4j/library/rest/client/requestwriter/package.html b/libraries/rest-client/src/main/java/org/qi4j/library/rest/client/requestwriter/package.html
index 2a491ef..74b7484 100644
--- a/libraries/rest-client/src/main/java/org/qi4j/library/rest/client/requestwriter/package.html
+++ b/libraries/rest-client/src/main/java/org/qi4j/library/rest/client/requestwriter/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>ReST Client Request Writers.</h2>
diff --git a/libraries/rest-client/src/main/java/org/qi4j/library/rest/client/responsereader/package.html b/libraries/rest-client/src/main/java/org/qi4j/library/rest/client/responsereader/package.html
index b7421d1..4e41789 100644
--- a/libraries/rest-client/src/main/java/org/qi4j/library/rest/client/responsereader/package.html
+++ b/libraries/rest-client/src/main/java/org/qi4j/library/rest/client/responsereader/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>ReST Client Response Readers.</h2>
diff --git a/libraries/rest-client/src/main/java/org/qi4j/library/rest/client/spi/package.html b/libraries/rest-client/src/main/java/org/qi4j/library/rest/client/spi/package.html
index 79b77e5..4525d5f 100644
--- a/libraries/rest-client/src/main/java/org/qi4j/library/rest/client/spi/package.html
+++ b/libraries/rest-client/src/main/java/org/qi4j/library/rest/client/spi/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>ReST Client SPI.</h2>
diff --git a/libraries/rest-client/src/main/resources/org/qi4j/library/rest/client/rest-client.properties b/libraries/rest-client/src/main/resources/org/qi4j/library/rest/client/rest-client.properties
index 61cc69e..4a0ac1d 100644
--- a/libraries/rest-client/src/main/resources/org/qi4j/library/rest/client/rest-client.properties
+++ b/libraries/rest-client/src/main/resources/org/qi4j/library/rest/client/rest-client.properties
@@ -1,3 +1,18 @@
+# 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.
+
 #Client
 requestwriters=org.qi4j.library.rest.client.requestwriter.FormRequestWriter,\
   org.qi4j.library.rest.client.requestwriter.ValueCompositeRequestWriter\
diff --git a/libraries/rest-client/src/test/java/org/qi4j/library/rest/client/ContextResourceClientFactoryTest.java b/libraries/rest-client/src/test/java/org/qi4j/library/rest/client/ContextResourceClientFactoryTest.java
index fd9f274..7175b9e 100644
--- a/libraries/rest-client/src/test/java/org/qi4j/library/rest/client/ContextResourceClientFactoryTest.java
+++ b/libraries/rest-client/src/test/java/org/qi4j/library/rest/client/ContextResourceClientFactoryTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.rest.client;
 
 import java.io.File;
diff --git a/libraries/rest-client/src/test/java/org/qi4j/library/rest/client/ContinuousIntegrationTest.java b/libraries/rest-client/src/test/java/org/qi4j/library/rest/client/ContinuousIntegrationTest.java
index 432b21d..6b75fe7 100644
--- a/libraries/rest-client/src/test/java/org/qi4j/library/rest/client/ContinuousIntegrationTest.java
+++ b/libraries/rest-client/src/test/java/org/qi4j/library/rest/client/ContinuousIntegrationTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.rest.client;
 
 import org.hamcrest.CoreMatchers;
diff --git a/libraries/rest-client/src/test/java/org/qi4j/library/rest/client/RssReaderTest.java b/libraries/rest-client/src/test/java/org/qi4j/library/rest/client/RssReaderTest.java
index ea70376..961ef5b 100644
--- a/libraries/rest-client/src/test/java/org/qi4j/library/rest/client/RssReaderTest.java
+++ b/libraries/rest-client/src/test/java/org/qi4j/library/rest/client/RssReaderTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.rest.client;
 
 import java.util.ArrayList;
@@ -36,7 +54,7 @@
 
 /**
  * Reads Qi4j Github commits on develop ATOM feed and prints out all title and detail url for each entry.
- * This is an example of how to use the RSS client for something more generic that was not produced by Qi4j REST server
+ * This is an example of how to use the RSS client for something more generic that was not produced by Zest REST server
  * library.
  */
 public class RssReaderTest
diff --git a/libraries/rest-client/src/test/java/org/qi4j/library/rest/client/docsupport/RestPrimerDocs.java b/libraries/rest-client/src/test/java/org/qi4j/library/rest/client/docsupport/RestPrimerDocs.java
index 26917dd..dea72ac 100644
--- a/libraries/rest-client/src/test/java/org/qi4j/library/rest/client/docsupport/RestPrimerDocs.java
+++ b/libraries/rest-client/src/test/java/org/qi4j/library/rest/client/docsupport/RestPrimerDocs.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.rest.client.docsupport;
 
 import org.hamcrest.CoreMatchers;
diff --git a/libraries/rest-common/build.gradle b/libraries/rest-common/build.gradle
index 10732b9..cfe7410 100644
--- a/libraries/rest-common/build.gradle
+++ b/libraries/rest-common/build.gradle
@@ -1,20 +1,29 @@
-description = "Qi4j REST Library provides various Restlet resources that can be used to expose Qi4j entities and indexes. Mostly for debugging."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - REST" }}
+description = "Apache Zest™ REST Library provides various Restlet resources that can be used to expose Apache Zest™ entities and indexes. Mostly for debugging."
+
+jar { manifest { name = "Apache Zest™ Library - REST" }}
 
 dependencies {
-  compile(project(":org.qi4j.libraries:org.qi4j.library.rdf"))
-//    compile(project(":org.qi4j.libraries:org.qi4j.library.rest-common"))
-  compile(project(':org.qi4j.extensions:org.qi4j.extension.indexing-rdf'))
-  compile(libraries.restlet)
-  compile(libraries.velocity)
-  compile(libraries.servlet_api)
-//  compile('org.openrdf.sesame:sesame-queryresultio-sparqlxml:' + rdfVersion)
-//  compile('org.openrdf.sesame:sesame-queryresultio-sparqljson:' + rdfVersion)
-
-  testCompile(project(":org.qi4j.core:org.qi4j.core.testsupport"))
-  testCompile(project(":org.qi4j.libraries:org.qi4j.library.http"))
-
-  testRuntime(project(":org.qi4j.core:org.qi4j.core.runtime"))
-  testRuntime(libraries.logback)
+  compile project( ':org.qi4j.core:org.qi4j.core.bootstrap' )
+  compile libraries.restlet
+  compile libraries.velocity
+  compile libraries.servlet_api
 }
diff --git a/libraries/rest-common/dev-status.xml b/libraries/rest-common/dev-status.xml
index 9af10c0..37f9020 100644
--- a/libraries/rest-common/dev-status.xml
+++ b/libraries/rest-common/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/libraries/rest-common/src/docs/rest-common.txt b/libraries/rest-common/src/docs/rest-common.txt
index aae7c4c..ee1c445 100644
--- a/libraries/rest-common/src/docs/rest-common.txt
+++ b/libraries/rest-common/src/docs/rest-common.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[library-rest-common, ReST Common Library]]
 = ReST Common =
 
diff --git a/libraries/rest-common/src/main/java/org/qi4j/library/rest/common/link/package.html b/libraries/rest-common/src/main/java/org/qi4j/library/rest/common/link/package.html
index fbe9546..7fc3cda 100644
--- a/libraries/rest-common/src/main/java/org/qi4j/library/rest/common/link/package.html
+++ b/libraries/rest-common/src/main/java/org/qi4j/library/rest/common/link/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>ReST Link Support.</h2>
diff --git a/libraries/rest-common/src/main/java/org/qi4j/library/rest/common/package.html b/libraries/rest-common/src/main/java/org/qi4j/library/rest/common/package.html
index 79f6587..4d4e042 100644
--- a/libraries/rest-common/src/main/java/org/qi4j/library/rest/common/package.html
+++ b/libraries/rest-common/src/main/java/org/qi4j/library/rest/common/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>ReST Common Library.</h2>
diff --git a/libraries/rest-common/src/main/java/org/qi4j/library/rest/common/table/package.html b/libraries/rest-common/src/main/java/org/qi4j/library/rest/common/table/package.html
index a0438d6..331aab0 100644
--- a/libraries/rest-common/src/main/java/org/qi4j/library/rest/common/table/package.html
+++ b/libraries/rest-common/src/main/java/org/qi4j/library/rest/common/table/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>ReST Table Support.</h2>
diff --git a/libraries/rest-server/build.gradle b/libraries/rest-server/build.gradle
index 4a8e093..b9d14cb 100644
--- a/libraries/rest-server/build.gradle
+++ b/libraries/rest-server/build.gradle
@@ -1,11 +1,31 @@
-description = "Qi4j REST Server Library provides a server component for building REST API's based on usecases"
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - REST server" }}
+description = "Apache Zest™ REST Server Library provides a server component for building REST API's based on usecases"
+
+jar { manifest { name = "Apache Zest™ Library - REST server" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.api"))
   compile(project(":org.qi4j.libraries:org.qi4j.library.rest-common"))
   compile(libraries.servlet_api)
+  compile libraries.slf4j_api
   compile(libraries.velocity)
   compile(libraries.restlet)
   compile(libraries.freemarker)
diff --git a/libraries/rest-server/dev-status.xml b/libraries/rest-server/dev-status.xml
index 9af10c0..37f9020 100644
--- a/libraries/rest-server/dev-status.xml
+++ b/libraries/rest-server/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/libraries/rest-server/src/docs/rest-server.txt b/libraries/rest-server/src/docs/rest-server.txt
index 54fbcba..4a7fc72 100644
--- a/libraries/rest-server/src/docs/rest-server.txt
+++ b/libraries/rest-server/src/docs/rest-server.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[library-rest-server, ReST Server Library]]
 = ReST Server =
 
diff --git a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/api/ContextResource.java b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/api/ContextResource.java
index 054b8ab..b7191d2 100644
--- a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/api/ContextResource.java
+++ b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/api/ContextResource.java
@@ -449,14 +449,17 @@
 
     /**
      * Transform a Java name to a human readable string by replacing uppercase characters
-     * with space+toLowerCase(char)
+     * with space+toLowerCase(char).
+     * <p>
      * Example:
+     * <pre><code>
      * changeDescription -> Change description
      * doStuffNow -> Do stuff now
+     * </code></pre>
      *
-     * @param name
+     * @param name Java name
      *
-     * @return
+     * @return Human readable name
      */
     private String humanReadable( String name )
     {
diff --git a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/api/InteractionConstraintsConcern.java b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/api/InteractionConstraintsConcern.java
index 8a3b587..7507db0 100644
--- a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/api/InteractionConstraintsConcern.java
+++ b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/api/InteractionConstraintsConcern.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.rest.server.api;
 
 import java.lang.annotation.Annotation;
diff --git a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/api/constraint/package.html b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/api/constraint/package.html
index 21346b0..d894adc 100644
--- a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/api/constraint/package.html
+++ b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/api/constraint/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>ReST Server Constraints.</h2>
diff --git a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/api/dci/package.html b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/api/dci/package.html
index 55a87d7..22b6e5d 100644
--- a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/api/dci/package.html
+++ b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/api/dci/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>ReST Server DCI API.</h2>
diff --git a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/api/package.html b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/api/package.html
index 7e8dac8..d901874 100644
--- a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/api/package.html
+++ b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/api/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>ReST Server API.</h2>
diff --git a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/assembler/package.html b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/assembler/package.html
index f6bcf56..c66f3ab 100644
--- a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/assembler/package.html
+++ b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/assembler/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>ReST Server Assembly.</h2>
diff --git a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/ConstraintViolationMessages.java b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/ConstraintViolationMessages.java
index 9f2ec76..d016c35 100644
--- a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/ConstraintViolationMessages.java
+++ b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/ConstraintViolationMessages.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.rest.server.restlet;
 
 import java.lang.annotation.Annotation;
diff --git a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/freemarker/ValueCompositeObjectWrapper.java b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/freemarker/ValueCompositeObjectWrapper.java
index 0643934..0be738d 100644
--- a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/freemarker/ValueCompositeObjectWrapper.java
+++ b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/freemarker/ValueCompositeObjectWrapper.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.rest.server.restlet.freemarker;
 
 import freemarker.template.DefaultObjectWrapper;
diff --git a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/freemarker/ValueCompositeTemplateModel.java b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/freemarker/ValueCompositeTemplateModel.java
index b3f80ab..e6524c2 100644
--- a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/freemarker/ValueCompositeTemplateModel.java
+++ b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/freemarker/ValueCompositeTemplateModel.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.rest.server.restlet.freemarker;
 
 import freemarker.template.ObjectWrapper;
diff --git a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/freemarker/package.html b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/freemarker/package.html
index a4bbb76..b018992 100644
--- a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/freemarker/package.html
+++ b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/freemarker/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Restlet ReST Server FreeMarker Templating.</h2>
diff --git a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/package.html b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/package.html
index 66d47e9..3856933 100644
--- a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/package.html
+++ b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Restlet ReST Server.</h2>
diff --git a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/requestreader/DefaultRequestReader.java b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/requestreader/DefaultRequestReader.java
index 0dc0bad..49d627b 100644
--- a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/requestreader/DefaultRequestReader.java
+++ b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/requestreader/DefaultRequestReader.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.rest.server.restlet.requestreader;
 
 import java.lang.annotation.Annotation;
diff --git a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/requestreader/package.html b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/requestreader/package.html
index 3b2491b..0b92e29 100644
--- a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/requestreader/package.html
+++ b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/requestreader/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Restlet ReST Server Request Readers.</h2>
diff --git a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/responsewriter/package.html b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/responsewriter/package.html
index 2bbd248..369b329 100644
--- a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/responsewriter/package.html
+++ b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/restlet/responsewriter/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Restlet ReST Server Response Writers.</h2>
diff --git a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/spi/CommandResult.java b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/spi/CommandResult.java
index 72107e1..5645566 100644
--- a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/spi/CommandResult.java
+++ b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/spi/CommandResult.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.rest.server.spi;
 
 /**
diff --git a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/spi/RequestReader.java b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/spi/RequestReader.java
index 9a3096d..d752238 100644
--- a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/spi/RequestReader.java
+++ b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/spi/RequestReader.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.rest.server.spi;
 
 import java.lang.reflect.Method;
diff --git a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/spi/ResponseWriter.java b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/spi/ResponseWriter.java
index 646335f..01efee7 100644
--- a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/spi/ResponseWriter.java
+++ b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/spi/ResponseWriter.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.rest.server.spi;
 
 import org.restlet.Response;
diff --git a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/spi/package.html b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/spi/package.html
index 665fa53..61f8776 100644
--- a/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/spi/package.html
+++ b/libraries/rest-server/src/main/java/org/qi4j/library/rest/server/spi/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>ReST Server SPI.</h2>
diff --git a/libraries/rest-server/src/main/resources/org/qi4j/library/rest/server/rest-server.properties b/libraries/rest-server/src/main/resources/org/qi4j/library/rest/server/rest-server.properties
index 6631c5f..8bc651c 100644
--- a/libraries/rest-server/src/main/resources/org/qi4j/library/rest/server/rest-server.properties
+++ b/libraries/rest-server/src/main/resources/org/qi4j/library/rest/server/rest-server.properties
@@ -1,3 +1,18 @@
+# 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.
+
 #Server
 responsewriters=org.qi4j.library.rest.server.restlet.responsewriter.ResourceTemplateResponseWriter,\
     org.qi4j.library.rest.server.restlet.responsewriter.DefaultResponseWriter,\
diff --git a/libraries/rest-server/src/main/resources/org/qi4j/library/rest/server/restlet/responsewriter/selectresource.htm b/libraries/rest-server/src/main/resources/org/qi4j/library/rest/server/restlet/responsewriter/selectresource.htm
index d768282..b358a30 100644
--- a/libraries/rest-server/src/main/resources/org/qi4j/library/rest/server/restlet/responsewriter/selectresource.htm
+++ b/libraries/rest-server/src/main/resources/org/qi4j/library/rest/server/restlet/responsewriter/selectresource.htm
@@ -1,22 +1,3 @@
-<!--
-
-
-    Copyright 2009-2011 Rickard Öberg
-
-    Licensed 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.
-
--->
-
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
     <title>${name}</title>
diff --git a/libraries/rest-server/src/main/resources/org/qi4j/library/rest/server/restlet/responsewriter/table.htm b/libraries/rest-server/src/main/resources/org/qi4j/library/rest/server/restlet/responsewriter/table.htm
index af232bd..3c5899e 100644
--- a/libraries/rest-server/src/main/resources/org/qi4j/library/rest/server/restlet/responsewriter/table.htm
+++ b/libraries/rest-server/src/main/resources/org/qi4j/library/rest/server/restlet/responsewriter/table.htm
@@ -1,22 +1,3 @@
-<!--
-
-
-    Copyright 2009-2011 Rickard Öberg
-
-    Licensed 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.
-
--->
-
 <html>
 <body>
 
diff --git a/libraries/rest-server/src/main/resources/org/qi4j/library/rest/server/restlet/responsewriter/value.htm b/libraries/rest-server/src/main/resources/org/qi4j/library/rest/server/restlet/responsewriter/value.htm
index 26b7449..4bdc380 100644
--- a/libraries/rest-server/src/main/resources/org/qi4j/library/rest/server/restlet/responsewriter/value.htm
+++ b/libraries/rest-server/src/main/resources/org/qi4j/library/rest/server/restlet/responsewriter/value.htm
@@ -1,20 +1,3 @@
-<!--
-    Copyright 2009-2011 Rickard Öberg
-
-    Licensed 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.
-
--->
-
 <html>
 <body>
 
diff --git a/libraries/rest-server/src/main/resources/velocity.properties b/libraries/rest-server/src/main/resources/velocity.properties
index c439d35..fb4ef10 100644
--- a/libraries/rest-server/src/main/resources/velocity.properties
+++ b/libraries/rest-server/src/main/resources/velocity.properties
@@ -1,3 +1,18 @@
+# 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.
+
 # ----------------------------------------------------------------------------
 # R U N T I M E  L O G
 # ----------------------------------------------------------------------------
diff --git a/libraries/rest/build.gradle b/libraries/rest/build.gradle
index 6c5422b..2c9ff02 100644
--- a/libraries/rest/build.gradle
+++ b/libraries/rest/build.gradle
@@ -1,11 +1,28 @@
-description = "Qi4j REST Library provides various Restlet resources that can be used to expose Qi4j entities and indexes. Mostly for debugging."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - REST" }}
+description = "Apache Zest™ REST Library provides various Restlet resources that can be used to expose Apache Zest™ entities and indexes. Mostly for debugging."
+
+jar { manifest { name = "Apache Zest™ Library - REST" }}
 
 dependencies {
 
-    compile project( ":org.qi4j.core:org.qi4j.core.api" )
-    compile project( ":org.qi4j.libraries:org.qi4j.library.rdf" )
     compile project( ':org.qi4j.extensions:org.qi4j.extension.indexing-rdf' )
     compile libraries.restlet
     compile libraries.sparql
diff --git a/libraries/rest/dev-status.xml b/libraries/rest/dev-status.xml
index 9af10c0..37f9020 100644
--- a/libraries/rest/dev-status.xml
+++ b/libraries/rest/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/libraries/rest/src/docs/rest.txt b/libraries/rest/src/docs/rest.txt
index e69de29..fc7aac6 100644
--- a/libraries/rest/src/docs/rest.txt
+++ b/libraries/rest/src/docs/rest.txt
@@ -0,0 +1,18 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
diff --git a/libraries/rest/src/main/java/org/qi4j/library/rest/admin/EntityResource.java b/libraries/rest/src/main/java/org/qi4j/library/rest/admin/EntityResource.java
index 3474970..328d2c0 100644
--- a/libraries/rest/src/main/java/org/qi4j/library/rest/admin/EntityResource.java
+++ b/libraries/rest/src/main/java/org/qi4j/library/rest/admin/EntityResource.java
@@ -37,7 +37,6 @@
 import org.qi4j.api.injection.scope.Structure;
 import org.qi4j.api.injection.scope.Uses;
 import org.qi4j.api.property.PropertyDescriptor;
-import org.qi4j.api.structure.Module;
 import org.qi4j.api.usecase.Usecase;
 import org.qi4j.api.usecase.UsecaseBuilder;
 import org.qi4j.api.value.ValueSerialization;
@@ -53,6 +52,7 @@
 import org.qi4j.spi.entitystore.EntityStore;
 import org.qi4j.spi.entitystore.EntityStoreUnitOfWork;
 import org.qi4j.spi.entitystore.helpers.JSONEntityState;
+import org.qi4j.spi.module.ModuleSpi;
 import org.restlet.data.CharacterSet;
 import org.restlet.data.Form;
 import org.restlet.data.Language;
@@ -74,10 +74,13 @@
 
     @Service
     private EntityStore entityStore;
+
     @Service
     private ValueSerialization valueSerialization;
+
     @Structure
-    private Module module;
+    private ModuleSpi module;
+
     @Uses
     private EntityStateSerializer entitySerializer;
     private String identity;
@@ -111,7 +114,7 @@
         try
         {
             EntityReference identityRef = EntityReference.parseEntityReference( identity );
-            uow.entityStateOf( identityRef ).remove();
+            uow.entityStateOf( module, identityRef ).remove();
             uow.applyChanges().commit();
             getResponse().setStatus( Status.SUCCESS_NO_CONTENT );
         }
@@ -176,7 +179,7 @@
         try
         {
             EntityReference entityReference = EntityReference.parseEntityReference( identity );
-            entityState = unitOfWork.entityStateOf( entityReference );
+            entityState = unitOfWork.entityStateOf( module, entityReference );
         }
         catch( EntityNotFoundException e )
         {
@@ -339,7 +342,6 @@
         };
         representation.setCharacterSet( CharacterSet.UTF_8 );
         return representation;
-
     }
 
     @Override
@@ -427,7 +429,7 @@
 
                         try
                         {
-                            unitOfWork.entityStateOf( reference );
+                            unitOfWork.entityStateOf( module, reference );
 
                             manyAssociation.remove( reference );
                             manyAssociation.add( index++, reference );
@@ -479,7 +481,7 @@
                         EntityReference reference = new EntityReference( identity );
                         try
                         {
-                            unitOfWork.entityStateOf( reference );
+                            unitOfWork.entityStateOf( module, reference );
 
                             namedAssociation.remove( name );
                             namedAssociation.put( name, reference );
diff --git a/libraries/rest/src/main/java/org/qi4j/library/rest/admin/Qi4jServerServlet.java b/libraries/rest/src/main/java/org/qi4j/library/rest/admin/Qi4jServerServlet.java
index 8f2dd06..28682fc 100644
--- a/libraries/rest/src/main/java/org/qi4j/library/rest/admin/Qi4jServerServlet.java
+++ b/libraries/rest/src/main/java/org/qi4j/library/rest/admin/Qi4jServerServlet.java
@@ -21,7 +21,7 @@
 import org.restlet.ext.servlet.ServerServlet;
 
 /**
- * Integration with Qi4j. Register an object extending Application to use.
+ * Integration with Zest. Register an object extending Application to use.
  */
 public class Qi4jServerServlet
     extends ServerServlet
diff --git a/libraries/rest/src/main/java/org/qi4j/library/rest/admin/package.html b/libraries/rest/src/main/java/org/qi4j/library/rest/admin/package.html
index 7e742f4..4727fba 100644
--- a/libraries/rest/src/main/java/org/qi4j/library/rest/admin/package.html
+++ b/libraries/rest/src/main/java/org/qi4j/library/rest/admin/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>ReST EntityStore, Index & Query Library.</h2>
diff --git a/libraries/rest/src/main/resources/org/qi4j/library/rest/admin/sparqlform.html b/libraries/rest/src/main/resources/org/qi4j/library/rest/admin/sparqlform.html
index 81e4bd1..83335f6 100644
--- a/libraries/rest/src/main/resources/org/qi4j/library/rest/admin/sparqlform.html
+++ b/libraries/rest/src/main/resources/org/qi4j/library/rest/admin/sparqlform.html
@@ -1,4 +1,20 @@
 <html>
+<!--
+  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.
+-->
 <head>
     <title>
         SPARQL Query
diff --git a/libraries/rest/src/main/resources/velocity.properties b/libraries/rest/src/main/resources/velocity.properties
index b77064e..7c522fd 100644
--- a/libraries/rest/src/main/resources/velocity.properties
+++ b/libraries/rest/src/main/resources/velocity.properties
@@ -1,3 +1,18 @@
+# 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.
+
 # ----------------------------------------------------------------------------
 # R U N T I M E  L O G
 # ----------------------------------------------------------------------------
diff --git a/libraries/rest/src/test/java/org/qi4j/library/rest/admin/RestTest.java b/libraries/rest/src/test/java/org/qi4j/library/rest/admin/RestTest.java
index cc3f7a9..8e6c586 100644
--- a/libraries/rest/src/test/java/org/qi4j/library/rest/admin/RestTest.java
+++ b/libraries/rest/src/test/java/org/qi4j/library/rest/admin/RestTest.java
@@ -187,7 +187,7 @@
         throws Exception
     {
         final RestTester restTester = module.newObject( RestTester.class );
-        final String result = restTester.getEntities();
+        final String result = restTester.getEntities().replace( "\r", "" );
         assertThat(
             "Returned RDF", result,
             anyOf(
diff --git a/libraries/scheduler/build.gradle b/libraries/scheduler/build.gradle
index eab2322..bc426ce 100644
--- a/libraries/scheduler/build.gradle
+++ b/libraries/scheduler/build.gradle
@@ -1,12 +1,32 @@
-description = "Qi4j Schduler Library for long term timing functionalities."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - Scheduler" }}
+description = "Apache Zest™ Schduler Library for long term timing functionalities."
+
+jar { manifest { name = "Apache Zest™ Library - Scheduler" }}
 
 
 dependencies {
     compile project( ":org.qi4j.core:org.qi4j.core.bootstrap" )
     compile project( ':org.qi4j.libraries:org.qi4j.library.constraints' )
     compile libraries.sked
+    compile libraries.slf4j_api
 
     testCompile project( ":org.qi4j.core:org.qi4j.core.testsupport" )
     testCompile project( ":org.qi4j.extensions:org.qi4j.extension.indexing-rdf" )
diff --git a/libraries/scheduler/dev-status.xml b/libraries/scheduler/dev-status.xml
index 21bb328..fc11ce4 100644
--- a/libraries/scheduler/dev-status.xml
+++ b/libraries/scheduler/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/libraries/scheduler/src/docs/scheduler.txt b/libraries/scheduler/src/docs/scheduler.txt
index aef4486..142907a 100644
--- a/libraries/scheduler/src/docs/scheduler.txt
+++ b/libraries/scheduler/src/docs/scheduler.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[library-scheduler,Scheduler Library]]
 = Scheduler =
 
@@ -56,7 +75,7 @@
 each TimelineRecord created when the Timeline feature is activated.
 
 The run() method of Tasks is wrapped in a UnitOfWork when called by the Scheduler.
-Thanks to the UnitOfWork handling in Qi4j, you can split the work done in your Tasks in
+Thanks to the UnitOfWork handling in Zest, you can split the work done in your Tasks in
 several UnitOfWorks, the one around the Task#run() invocation will then be paused.
 
 Here is a simple example:
@@ -118,6 +137,11 @@
 - @annualy or @yearly
 
 
+== Durability ==
+Schedules can either be ethereal or durable, passed as an argument to the +Scheduler+. If it is a durable
+schedule, then the Task must be an Entity Composite.
+
+When the
 == Observing the Timeline ==
 
 Timeline allow to browse in past and future Task runs. This feature is available only if you activate
diff --git a/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/Scheduler.java b/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/Scheduler.java
index 5052055..14df2ee 100644
--- a/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/Scheduler.java
+++ b/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/Scheduler.java
@@ -32,15 +32,24 @@
 
 /**
  * Scheduler.
- *
+ * <p>
  * This is the only interface you should use in your application for scheduling tasks.
- *
+ * </p>
+ * <p>
  * See {@link SchedulerConfiguration} for configuration properties.
+ * </p>
+ * <p>
  * See in {@link SchedulerAssembler} how to assemble a {@link Scheduler} and optional {@link Timeline}.
- *
+ * </p>
+ * <p>
  * By default, a {@link Schedule} is not durable. In other words, it do not survive an {@link Application} restart.
+ * </p>
+ * <p>
  * To make a {@link Schedule} durable, set it's durable property to true once its scheduled.
+ * </p>
+ * <p>
  * Durable {@link Schedule}s that have no future run are removed by {@code SchedulerGarbageCollector} (not implemented?).
+ * </p>
  */
 @Concerns( UnitOfWorkConcern.class )
 public interface Scheduler
diff --git a/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/SchedulerMixin.java b/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/SchedulerMixin.java
index 9058f45..c3f8f61 100644
--- a/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/SchedulerMixin.java
+++ b/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/SchedulerMixin.java
@@ -160,7 +160,6 @@
                 {
                     return;
                 }
-                System.out.println( "Next run at: " + new DateTime( nextRun ) );
                 timingQueue.add( new ScheduleTime( schedule.identity().get(), nextRun ) );
                 if( scheduleHandler == null )
                 {
@@ -175,14 +174,16 @@
                 {
                     return;
                 }
-                System.out.println( "Next run at: " + new DateTime( nextRun ) );
                 timingQueue.add( new ScheduleTime( schedule.identity().get(), nextRun ) );
                 ScheduleTime newFirst = timingQueue.first();
                 if( !first.equals( newFirst ) )
                 {
                     // We need to restart the managementThread, which is currently waiting for a 'later' event to
                     // occur than the one that was just scheduled.
-                    scheduleHandler.future.cancel( true );
+                    if( scheduleHandler != null && scheduleHandler.future != null )
+                    {
+                        scheduleHandler.future.cancel( true );
+                    }
                     dispatchHandler();
                 }
             }
@@ -220,11 +221,13 @@
         {
             corePoolSize = workersCount / 4;
         }
-        // Throws IllegalArgument if corePoolSize or keepAliveTime less than zero, or if workersCount less than or equal to zero, or if corePoolSize greater than workersCount.
+        // Throws IllegalArgument if corePoolSize or keepAliveTime less than zero,
+        // or if workersCount less than or equal to zero,
+        // or if corePoolSize greater than workersCount.
         taskExecutor = new ThreadPoolExecutor( corePoolSize, workersCount,
-                                               0, TimeUnit.MILLISECONDS,
-                                               new LinkedBlockingQueue<Runnable>( workQueueSize ),
-                                               threadFactory, rejectionHandler );
+            0, TimeUnit.MILLISECONDS,
+            new LinkedBlockingQueue<Runnable>( workQueueSize ),
+            threadFactory, rejectionHandler );
         taskExecutor.prestartAllCoreThreads();
         managementExecutor = new ScheduledThreadPoolExecutor( 2, threadFactory, rejectionHandler );
         loadSchedules();
@@ -267,6 +270,15 @@
     public void passivateService()
         throws Exception
     {
+        managementExecutor.shutdown();
+        taskExecutor.shutdown();
+
+        managementExecutor.awaitTermination( 5, TimeUnit.SECONDS );
+        managementExecutor.shutdownNow();
+
+        taskExecutor.awaitTermination( 5, TimeUnit.SECONDS );
+        taskExecutor.shutdownNow();
+
         LOGGER.debug( "Passivated" );
     }
 
@@ -277,7 +289,6 @@
     class ScheduleHandler
         implements Runnable
     {
-        private ScheduleRunner scheduleRunner;
         private ScheduledFuture<?> future;
 
         @Override
@@ -287,7 +298,7 @@
             {
                 ScheduleTime scheduleTime = timingQueue.first();
                 timingQueue.remove( scheduleTime );
-                scheduleRunner = new ScheduleRunner( scheduleTime, SchedulerMixin.this, module );
+                ScheduleRunner scheduleRunner = new ScheduleRunner( scheduleTime, SchedulerMixin.this, module );
                 taskExecutor.submit( scheduleRunner );
                 if( timingQueue.size() == 0 )
                 {
@@ -323,7 +334,6 @@
         @Override
         public void run()
         {
-            System.out.println( "Running Schedule" );
             Usecase usecase = UsecaseBuilder.newUsecase( "ScheduleRunner" );
             UnitOfWork uow = module.newUnitOfWork( usecase );
             try
diff --git a/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/bootstrap/package.html b/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/bootstrap/package.html
index e66a837..b9a2ef1 100644
--- a/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/bootstrap/package.html
+++ b/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/bootstrap/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Scheduler Assembly.</h2>
diff --git a/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/package.html b/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/package.html
index 917b4ec..a796ce1 100644
--- a/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/package.html
+++ b/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Scheduler Library.</h2>
diff --git a/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/schedule/Schedule.java b/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/schedule/Schedule.java
index 5fba485..ef2a214 100644
--- a/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/schedule/Schedule.java
+++ b/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/schedule/Schedule.java
@@ -71,7 +71,7 @@
      *
      * @param from The starting time when to look for the next time it will run.
      *
-     * @return The exact absolute time when this Schedule is to be run next time.
+     * @return The exact absolute time when this Schedule is to be run next time, or -1 if never
      */
     long nextRun( long from );
 
diff --git a/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/schedule/ScheduleFactory.java b/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/schedule/ScheduleFactory.java
index 7f5b88c..94b7fd2 100644
--- a/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/schedule/ScheduleFactory.java
+++ b/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/schedule/ScheduleFactory.java
@@ -27,6 +27,7 @@
 import org.qi4j.library.scheduler.Task;
 import org.qi4j.library.scheduler.schedule.cron.CronSchedule;
 import org.qi4j.library.scheduler.schedule.once.OnceSchedule;
+import org.qi4j.spi.uuid.UuidIdentityGeneratorService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -48,6 +49,9 @@
         @Service
         private SchedulerService scheduler;
 
+        @Service
+        private UuidIdentityGeneratorService uuid;
+
         @Override
         public CronSchedule newCronSchedule( Task task, String cronExpression, DateTime start, boolean durable )
         {
@@ -74,6 +78,7 @@
             CronSchedule prototype = builder.prototype();
             prototype.task().set( task );
             prototype.start().set( start );
+            prototype.identity().set( uuid.generate( CronSchedule.class ) );
             prototype.cronExpression().set( cronExpression );
             CronSchedule schedule = builder.newInstance();
             logger.info( "Schedule {} created: {}", schedule.presentationString(), schedule.identity().get() );
@@ -87,6 +92,7 @@
             CronSchedule builderInstance = builder.instance();
             builderInstance.task().set( task );
             builderInstance.start().set( start );
+            builderInstance.identity().set( uuid.generate( CronSchedule.class ) );
             builderInstance.cronExpression().set( cronExpression );
             CronSchedule schedule = builder.newInstance();
             logger.info( "Schedule {} created: {}", schedule.presentationString(), schedule.identity().get() );
@@ -99,6 +105,7 @@
             OnceSchedule builderInstance = builder.prototype();
             builderInstance.task().set( task );
             builderInstance.start().set( runAt );
+            builderInstance.identity().set( uuid.generate( CronSchedule.class ) );
             OnceSchedule schedule = builder.newInstance();
             logger.info( "Schedule {} created: {}", schedule.presentationString(), schedule.identity().get() );
             return schedule;
@@ -111,6 +118,7 @@
             OnceSchedule builderInstance = builder.instance();
             builderInstance.task().set( task );
             builderInstance.start().set( runAt );
+            builderInstance.identity().set( uuid.generate( CronSchedule.class ) );
             OnceSchedule schedule = builder.newInstance();
             logger.info( "Schedule {} created: {}", schedule.presentationString(), schedule.identity().get() );
             return schedule;
diff --git a/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/schedule/cron/CronSchedule.java b/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/schedule/cron/CronSchedule.java
index a1645bf..f9b8542 100644
--- a/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/schedule/cron/CronSchedule.java
+++ b/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/schedule/cron/CronSchedule.java
@@ -78,13 +78,15 @@
         @Override
         public long nextRun( long from )
         {
+            long actualFrom = from;
             long firstRun = start().get().getMillis();
             if( firstRun > from )
             {
-                from = firstRun;
+                actualFrom = firstRun;
             }
-            Long nextRun = new org.codeartisans.sked.cron.CronSchedule( cronExpression().get() ).firstRunAfter( from );
-            LOGGER.info( "Schedule.firstRunAfter({}) CronSchedule result is {}", from, firstRun );
+            Long nextRun = new org.codeartisans.sked.cron.CronSchedule( cronExpression().get() )
+                .firstRunAfter( actualFrom );
+            LOGGER.info( "CronSchedule::nextRun({}) is {}", from, firstRun );
             return nextRun;
         }
     }
diff --git a/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/schedule/cron/package.html b/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/schedule/cron/package.html
index 109311f..f3fd2c2 100644
--- a/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/schedule/cron/package.html
+++ b/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/schedule/cron/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Scheduler CRON Schedules.</h2>
diff --git a/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/schedule/once/package.html b/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/schedule/once/package.html
index c5d042b..c12fd5b 100644
--- a/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/schedule/once/package.html
+++ b/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/schedule/once/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Scheduler Once Schedules.</h2>
diff --git a/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/schedule/package.html b/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/schedule/package.html
index 0ba8f5c..7c74250 100644
--- a/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/schedule/package.html
+++ b/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/schedule/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Scheduler Schedules.</h2>
diff --git a/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/timeline/package.html b/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/timeline/package.html
index 4bf327a..1b757d2 100644
--- a/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/timeline/package.html
+++ b/libraries/scheduler/src/main/java/org/qi4j/library/scheduler/timeline/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Scheduler Timeline.</h2>
diff --git a/libraries/scheduler/src/test/java/org/qi4j/library/scheduler/FooTask.java b/libraries/scheduler/src/test/java/org/qi4j/library/scheduler/FooTask.java
index f46a256..6ab61fd 100644
--- a/libraries/scheduler/src/test/java/org/qi4j/library/scheduler/FooTask.java
+++ b/libraries/scheduler/src/test/java/org/qi4j/library/scheduler/FooTask.java
@@ -18,7 +18,7 @@
 package org.qi4j.library.scheduler;
 
 import org.qi4j.api.common.Optional;
-import org.qi4j.api.entity.EntityComposite;
+import org.qi4j.api.entity.Identity;
 import org.qi4j.api.injection.scope.This;
 import org.qi4j.api.mixin.Mixins;
 import org.qi4j.api.property.Property;
@@ -27,7 +27,7 @@
 
 @Mixins( FooTask.Mixin.class )
 public interface FooTask
-    extends Task, EntityComposite
+    extends Task, Identity
 {
     Property<String> input();
 
@@ -46,7 +46,7 @@
         @Override
         public void run()
         {
-            LOGGER.info( "FooTaskEntity.run({})", me.input().get() );
+            LOGGER.info( "FooTask.run({})", me.input().get() );
             if( me.input().get().equals( Constants.BAZAR ) )
             {
                 if( me.output().get() == null )
diff --git a/libraries/scheduler/src/test/resources/logback-test.xml b/libraries/scheduler/src/test/resources/logback-test.xml
index 4268e9f..76cc7c5 100644
--- a/libraries/scheduler/src/test/resources/logback-test.xml
+++ b/libraries/scheduler/src/test/resources/logback-test.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
 <configuration>
 
     <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
diff --git a/libraries/scheduler/test-repeatedly.sh b/libraries/scheduler/test-repeatedly.sh
index 0022c25..bb7516b 100755
--- a/libraries/scheduler/test-repeatedly.sh
+++ b/libraries/scheduler/test-repeatedly.sh
@@ -1,5 +1,20 @@
 #!/bin/sh
 
+# 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.
+
 # Run clean test once and test repeatedly
 # Stop on first failure
 # cat build/num-repeats to see how many times it ran
diff --git a/libraries/scripting/build.gradle b/libraries/scripting/build.gradle
index f9c682b..2d65e32 100644
--- a/libraries/scripting/build.gradle
+++ b/libraries/scripting/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j Common Scripting Library contains common classes across scripting implementations."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - Scripting - Common" }}
+description = "Apache Zest™ Common Scripting Library contains common classes across scripting implementations."
+
+jar { manifest { name = "Apache Zest™ Library - Scripting - Common" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.api"))
diff --git a/libraries/scripting/dev-status.xml b/libraries/scripting/dev-status.xml
index 654d3aa..afa3369 100644
--- a/libraries/scripting/dev-status.xml
+++ b/libraries/scripting/dev-status.xml
@@ -1,17 +1,33 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
         http://www.qi4j.org/schemas/2008/dev-status/1/dev-status.xsd">
   <status>
     <!--none,early,beta,stable,mature-->
-    <codebase>beta</codebase>
+    <codebase>stable</codebase>
 
     <!-- none, brief, good, complete -->
     <documentation>none</documentation>
 
     <!-- none, some, good, complete -->
-    <unittests>some</unittests>
+    <unittests>complete</unittests>
   </status>
   <licenses>
     <license>ALv2</license>
diff --git a/libraries/scripting/src/main/java/org/qi4j/library/scripting/package.html b/libraries/scripting/src/main/java/org/qi4j/library/scripting/package.html
new file mode 100644
index 0000000..fa4c48c
--- /dev/null
+++ b/libraries/scripting/src/main/java/org/qi4j/library/scripting/package.html
@@ -0,0 +1,21 @@
+<!--
+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.
+-->
+<html>
+    <body>
+        <h2>Scripting Library.</h2>
+    </body>
+</html>
\ No newline at end of file
diff --git a/libraries/scripting/src/test/java/org/qi4j/library/scripting/ScriptUtilImplTest.java b/libraries/scripting/src/test/java/org/qi4j/library/scripting/ScriptUtilImplTest.java
new file mode 100644
index 0000000..4b99809
--- /dev/null
+++ b/libraries/scripting/src/test/java/org/qi4j/library/scripting/ScriptUtilImplTest.java
@@ -0,0 +1,40 @@
+/*
+ * 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.qi4j.library.scripting;
+
+import org.junit.Test;
+
+import static org.hamcrest.core.IsEqual.equalTo;
+import static org.junit.Assert.assertThat;
+
+public class ScriptUtilImplTest
+{
+    @Test
+    public void testDefaultStream()
+    {
+        ScriptUtil underTest = new ScriptUtilImpl();
+        assertThat( underTest.getOut(), equalTo(System.out));
+    }
+
+    @Test( expected = ScriptException.class )
+    public void testException()
+    {
+        throw new ScriptException( "This is a test exception." );
+    }
+}
diff --git a/libraries/servlet/build.gradle b/libraries/servlet/build.gradle
index 657a4f7..130afdb 100644
--- a/libraries/servlet/build.gradle
+++ b/libraries/servlet/build.gradle
@@ -1,10 +1,30 @@
-description = "Qi4j Servlet Library provides integration of Qi4j into web applications."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - Servlet" }}
+description = "Apache Zest™ Servlet Library provides integration of Apache Zest™ into web applications."
+
+jar { manifest { name = "Apache Zest™ Library - Servlet" }}
 
 dependencies {
   compile( project(":org.qi4j.core:org.qi4j.core.bootstrap") )
-  compile( libraries.servlet_api )
+  compile libraries.servlet_api 
+  compile libraries.slf4j_api
 
   testCompile( project(":org.qi4j.core:org.qi4j.core.testsupport") )
   testCompile( libraries.jetty_webapp )
diff --git a/libraries/servlet/dev-status.xml b/libraries/servlet/dev-status.xml
index 24ed590..cbcd274 100644
--- a/libraries/servlet/dev-status.xml
+++ b/libraries/servlet/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/libraries/servlet/src/docs/servlet.txt b/libraries/servlet/src/docs/servlet.txt
index 9b2cab1..4af90c1 100644
--- a/libraries/servlet/src/docs/servlet.txt
+++ b/libraries/servlet/src/docs/servlet.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[library-servlet,Servlet Library]]
 = Servlet =
 
@@ -6,16 +25,16 @@
 source=libraries/servlet/dev-status.xml
 --------------
 
-This library provide the necessary boilerplate code to bootstrap a Qi4j Application in a Servlet container plus some
+This library provide the necessary boilerplate code to bootstrap a Zest™ Application in a Servlet container plus some
 facilities. It aims at a very simple need and is provided as an example integration.
 
-If instead you want to run a servlet container inside a Qi4j Application, see <<library-http>>.
+If instead you want to run a servlet container inside a Zest™ Application, see <<library-http>>.
 
 include::../../build/docs/buildinfo/artifact.txt[]
 
 == Application Bootstrap ==
 
-Extends `AbstractQi4jServletBootstrap` to easily bind a Qi4j `Application` activation/passivation to your webapp
+Extends `AbstractQi4jServletBootstrap` to easily bind a Zest™ `Application` activation/passivation to your webapp
 lifecycle.
 
 Use `Qi4jServletSupport#application(javax.servlet.ServletContext)` to get a handle on the `Application` from the
diff --git a/libraries/servlet/src/main/java/org/qi4j/library/servlet/Qi4jServletSupport.java b/libraries/servlet/src/main/java/org/qi4j/library/servlet/Qi4jServletSupport.java
index d1c7570..3e404e4 100644
--- a/libraries/servlet/src/main/java/org/qi4j/library/servlet/Qi4jServletSupport.java
+++ b/libraries/servlet/src/main/java/org/qi4j/library/servlet/Qi4jServletSupport.java
@@ -28,7 +28,7 @@
      */
     public static Application application( ServletContext servletContext )
     {
-        return ( Application ) servletContext.getAttribute( APP_IN_CTX ); // TODO try/catch and find a suitable Qi4j exception
+        return ( Application ) servletContext.getAttribute( APP_IN_CTX ); // TODO try/catch and find a suitable Zest exception
     }
 
     private Qi4jServletSupport()
diff --git a/libraries/servlet/src/main/java/org/qi4j/library/servlet/lifecycle/AbstractQi4jServletBootstrap.java b/libraries/servlet/src/main/java/org/qi4j/library/servlet/lifecycle/AbstractQi4jServletBootstrap.java
index 43c75fa..2a3607c 100644
--- a/libraries/servlet/src/main/java/org/qi4j/library/servlet/lifecycle/AbstractQi4jServletBootstrap.java
+++ b/libraries/servlet/src/main/java/org/qi4j/library/servlet/lifecycle/AbstractQi4jServletBootstrap.java
@@ -30,7 +30,7 @@
 /**
  * Abstract ServletContextListener implementing ApplicationAssembler.
  *
- * Extends this class to easily bind a Qi4j Application activation/passivation to your webapp lifecycle.
+ * Extends this class to easily bind a Zest Application activation/passivation to your webapp lifecycle.
  *
  * The {@link Application} is set as a {@link ServletContext} attribute named using a constant.
  * In your servlets, filters, whatever has access to the {@link ServletContext} use the following code to get a
@@ -62,10 +62,10 @@
 {
 
     private static final Logger LOGGER = LoggerFactory.getLogger( Qi4jServlet.class.getPackage().getName() );
-    // Qi4j Runtime
+    // Zest Runtime
     protected Qi4j api;
     protected Energy4Java qi4j;
-    // Qi4j Application
+    // Zest Application
     protected ApplicationDescriptor applicationModel;
     protected Application application;
 
@@ -122,7 +122,7 @@
                 afterApplicationPassivation( application );
             }
         } catch ( Exception ex ) {
-            LOGGER.warn( "Unable to passivate Qi4j Application.", ex );
+            LOGGER.warn( "Unable to passivate Zest Application.", ex );
         }
     }
 
diff --git a/libraries/servlet/src/main/java/org/qi4j/library/servlet/lifecycle/package.html b/libraries/servlet/src/main/java/org/qi4j/library/servlet/lifecycle/package.html
index f76c467..b692009 100644
--- a/libraries/servlet/src/main/java/org/qi4j/library/servlet/lifecycle/package.html
+++ b/libraries/servlet/src/main/java/org/qi4j/library/servlet/lifecycle/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Servlet Context Lifecycle.</h2>
diff --git a/libraries/servlet/src/main/java/org/qi4j/library/servlet/package.html b/libraries/servlet/src/main/java/org/qi4j/library/servlet/package.html
index cca9f99..edc745e 100644
--- a/libraries/servlet/src/main/java/org/qi4j/library/servlet/package.html
+++ b/libraries/servlet/src/main/java/org/qi4j/library/servlet/package.html
@@ -1,8 +1,24 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Servlet Library.</h2>
         <p>
-            This library provide the necessary mechanism to bootstrap a Qi4j Application in a Servlet container plus
+            This library provide the necessary mechanism to bootstrap a Zest™ Application in a Servlet container plus
             some facilities.
         </p>
 
@@ -13,12 +29,12 @@
 
         <h3>Application Bootstrap</h3>
         <p>
-            Extends {@link org.qi4j.library.servlet.lifecycle.AbstractQi4jServletBootstrap} to easily bind a Qi4j
+            Extends {@link org.qi4j.library.servlet.lifecycle.AbstractQi4jServletBootstrap} to easily bind a Zest™
             {@link org.qi4j.api.structure.Application} activation/passivation to your webapp lifecycle.
         </p>
         <p>
-            Use {@link Qi4jServletSupport#application(javax.servlet.ServletContext)} to get a handle on the
-            {@link org.qi4j.api.structure.Application} from the {@link javax.servlet.ServletContext}.
+            Use {@link org.qi4j.library.servlet.Qi4jServletSupport#application(javax.servlet.ServletContext)} to get
+            a handle on the {@link org.qi4j.api.structure.Application} from the {@link javax.servlet.ServletContext}.
         </p>
 
         <h3>Facilities</h3>
diff --git a/libraries/shiro-core/build.gradle b/libraries/shiro-core/build.gradle
index 28422b0..d57ac77 100644
--- a/libraries/shiro-core/build.gradle
+++ b/libraries/shiro-core/build.gradle
@@ -1,12 +1,32 @@
-description = "Qi4j Shiro Library integrates Apache Shiro security framework into Qi4j."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - Shiro Core" }}
+description = "Apache Zest™ Shiro Library integrates Apache Shiro security framework into Apache Zest™."
+
+jar { manifest { name = "Apache Zest™ Library - Shiro Core" }}
 
 dependencies {
 
   compile project( ":org.qi4j.core:org.qi4j.core.bootstrap" )
   compile libraries.shiro
   compile libraries.bouncy_castle
+  compile libraries.slf4j_api
 
   testCompile project( ":org.qi4j.core:org.qi4j.core.testsupport" )
   testCompile project( ":org.qi4j.libraries:org.qi4j.library.shiro-web" )
diff --git a/libraries/shiro-core/dev-status.xml b/libraries/shiro-core/dev-status.xml
index 24ed590..cbcd274 100644
--- a/libraries/shiro-core/dev-status.xml
+++ b/libraries/shiro-core/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/libraries/shiro-core/src/docs/shiro.txt b/libraries/shiro-core/src/docs/shiro.txt
index f939f12..a12a3e7 100644
--- a/libraries/shiro-core/src/docs/shiro.txt
+++ b/libraries/shiro-core/src/docs/shiro.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[library-shiro, Shiro Security Library]]
 = Shiro Security =
 
@@ -16,20 +35,20 @@
 application – from the smallest mobile applications to the largest web and enterprise applications.'' says the Apache
 Shiro website.
 
-Altough Apache Shiro can be used as-is with Qi4j Applications, this library provides integrations that can come in
+Altough Apache Shiro can be used as-is with Zest™ Applications, this library provides integrations that can come in
 handy. If your use case do not fit any of theses integrations, look at their respective code. You should find out
 pretty easily how to compose the provided code to write your integration. Don't hesitate to contribute interesting
 integrations to this very library.
 
 We invite you to read the comprehensive http://shiro.apache.org/documentation.html[Apache Shiro documentation], we will
-mostly discuss Qi4j related matters here.
+mostly discuss Zest™ related matters here.
 
 include::../../build/docs/buildinfo/artifact.txt[]
 
 == Basic usage ==
 
 For standalone applications, you can use plain Shiro easily. The only thing to do is to register a configured
-SecurityManager when activating your Qi4j Application. It can be done outside the application, before its activation,
+SecurityManager when activating your Zest™ Application. It can be done outside the application, before its activation,
 "à là" by-hand ;
 
 [snippet,java]
@@ -59,7 +78,7 @@
 
 Remember that this setup use a ThreadLocal SecurityManager singleton. Among other things it means that, althoug the
 IniSecurityManagerService is activated on Application activation, if you need to use Shiro in other Services that are
-activated on Application activation you should tell Qi4j about this dependency by injecting the SecurityManagerService
+activated on Application activation you should tell Zest™ about this dependency by injecting the SecurityManagerService
 in the laters.
 
 Once started you must remember to register the SecurityManager in Shiro's ThreadContext ;
@@ -97,10 +116,10 @@
 
 All the above is sufficient as long as you use the ini file to store user credentials and permissions or a Realm that
 has no dependency on your application code and can be specified in the ini file to be instanciated by Shiro outside the
-Qi4j scope.
+Zest™ scope.
 
 One usecase where it's not sufficient comes quickly as you would like to provide user credentials and permissions
-from Entities stored in an EntityStore or perform any custom logic involving your Qi4j Application.
+from Entities stored in an EntityStore or perform any custom logic involving your Zest™ Application.
 
 Let's look at a complete example using a Realm Service that extends one of the Shiro provided Realm which use in-memory
 credientials and configuring it ;
@@ -216,7 +235,7 @@
 
 Take the PasswordRealmService as a start and extend/rewrite it to suit your needs.
 
-If you happen to come with a Qi4j integration that could be valuable in this very library, don't hesitate to
+If you happen to come with a Zest™ integration that could be valuable in this very library, don't hesitate to
 contribute.
 
 
diff --git a/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/assembly/package.html b/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/assembly/package.html
index e3ba14c..bd0dad6 100644
--- a/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/assembly/package.html
+++ b/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/assembly/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Shiro Security Assembly.</h2>
diff --git a/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/concerns/package.html b/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/concerns/package.html
index f40d2c8..2c1faf9 100644
--- a/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/concerns/package.html
+++ b/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/concerns/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Shiro Security Concerns.</h2>
diff --git a/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/domain/common/package.html b/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/domain/common/package.html
index e4d2bfc..0b6ffb8 100644
--- a/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/domain/common/package.html
+++ b/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/domain/common/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Shiro Security Common Domain.</h2>
diff --git a/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/domain/passwords/package.html b/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/domain/passwords/package.html
index 43ccdb6..df9ff36 100644
--- a/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/domain/passwords/package.html
+++ b/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/domain/passwords/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Shiro Security Passwords Domain.</h2>
diff --git a/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/domain/permissions/RoleFactory.java b/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/domain/permissions/RoleFactory.java
index dcb97a8..900289e 100644
--- a/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/domain/permissions/RoleFactory.java
+++ b/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/domain/permissions/RoleFactory.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.shiro.domain.permissions;
 
 import java.util.Arrays;
diff --git a/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/domain/permissions/package.html b/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/domain/permissions/package.html
index 2f9ee50..3d0b2dd 100644
--- a/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/domain/permissions/package.html
+++ b/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/domain/permissions/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Shiro Security Permissions Domain.</h2>
diff --git a/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/ini/package.html b/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/ini/package.html
index afa788a..cd04c13 100644
--- a/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/ini/package.html
+++ b/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/ini/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Shiro Security INI Configuration Support.</h2>
diff --git a/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/package.html b/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/package.html
index d3de7e0..1b648ea 100644
--- a/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/package.html
+++ b/libraries/shiro-core/src/main/java/org/qi4j/library/shiro/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Shiro Security Library.</h2>
diff --git a/libraries/shiro-core/src/test/resources/logback-test.xml b/libraries/shiro-core/src/test/resources/logback-test.xml
index e75228f..8c9b50a 100644
--- a/libraries/shiro-core/src/test/resources/logback-test.xml
+++ b/libraries/shiro-core/src/test/resources/logback-test.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
 <configuration>
 
     <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
diff --git a/libraries/shiro-core/src/test/resources/standalone-shiro.ini b/libraries/shiro-core/src/test/resources/standalone-shiro.ini
index 2160de5..a9e5b0e 100644
--- a/libraries/shiro-core/src/test/resources/standalone-shiro.ini
+++ b/libraries/shiro-core/src/test/resources/standalone-shiro.ini
@@ -1,3 +1,18 @@
+# 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.
+
 # =============================================================================
 # Tutorial INI configuration
 #
diff --git a/libraries/shiro-web/build.gradle b/libraries/shiro-web/build.gradle
index 26fe0d6..ebf7da3 100644
--- a/libraries/shiro-web/build.gradle
+++ b/libraries/shiro-web/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j Shiro Library integrates Apache Shiro security framework into Qi4j. This bundle provides Servlet support."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - Shiro Web" }}
+description = "Apache Zest™ Shiro Library integrates Apache Shiro security framework into Apache Zest™. This bundle provides Servlet support."
+
+jar { manifest { name = "Apache Zest™ Library - Shiro Web" }}
 
 dependencies {
 
@@ -10,6 +29,7 @@
   compile project( ':org.qi4j.libraries:org.qi4j.library.http' )
   compile libraries.shiro_web
   compile libraries.servlet_api
+  compile libraries.slf4j_api
 
   testCompile project( ":org.qi4j.core:org.qi4j.core.testsupport" )
   testCompile project( ":org.qi4j.libraries:org.qi4j.library.shiro-web" )
diff --git a/libraries/shiro-web/dev-status.xml b/libraries/shiro-web/dev-status.xml
index 24ed590..cbcd274 100644
--- a/libraries/shiro-web/dev-status.xml
+++ b/libraries/shiro-web/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/libraries/shiro-web/src/docs/shiro-web.txt b/libraries/shiro-web/src/docs/shiro-web.txt
index 8a2b4cc..c92d9b8 100644
--- a/libraries/shiro-web/src/docs/shiro-web.txt
+++ b/libraries/shiro-web/src/docs/shiro-web.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[library-shiro-web, Shiro Web Security Library]]
 = Shiro Web Security =
 
@@ -18,16 +37,16 @@
 Shiro website.
 
 We invite you to read the comprehensive http://shiro.apache.org/documentation.html[Apache Shiro documentation], we will
-mostly discuss Qi4j related matters here.
+mostly discuss Zest™ related matters here.
 
 include::../../build/docs/buildinfo/artifact.txt[]
 
 == Servlet Context ==
 
-In a servlet context, being through the <<library-servlet>>, the <<library-http>> or your custom Qi4j application
+In a servlet context, being through the <<library-servlet>>, the <<library-http>> or your custom Zest™ application
 bootstrap, plain Shiro is usable. A WebEnvironment must be globally available and ShiroFilter must be registered.
 
-If you use a custom Qi4j application boostrap or the <<library-servlet>> you can directly use Shiro's provided
+If you use a custom Zest™ application boostrap or the <<library-servlet>> you can directly use Shiro's provided
 EnvironmentLoaderListener and ShiroFilter.
 
 If you use the <<library-http>> you can either directly use Shiro classes or use the assembly API as follows:
diff --git a/libraries/shiro-web/src/main/java/org/qi4j/library/shiro/web/assembly/package.html b/libraries/shiro-web/src/main/java/org/qi4j/library/shiro/web/assembly/package.html
index d93f676..14673b5 100644
--- a/libraries/shiro-web/src/main/java/org/qi4j/library/shiro/web/assembly/package.html
+++ b/libraries/shiro-web/src/main/java/org/qi4j/library/shiro/web/assembly/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Shiro Web Security Assembly.</h2>
diff --git a/libraries/shiro-web/src/main/java/org/qi4j/library/shiro/web/package.html b/libraries/shiro-web/src/main/java/org/qi4j/library/shiro/web/package.html
index 5c050e9..af1d4b8 100644
--- a/libraries/shiro-web/src/main/java/org/qi4j/library/shiro/web/package.html
+++ b/libraries/shiro-web/src/main/java/org/qi4j/library/shiro/web/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Shiro Web Security Library.</h2>
diff --git a/libraries/shiro-web/src/test/resources/logback-test.xml b/libraries/shiro-web/src/test/resources/logback-test.xml
index e75228f..8c9b50a 100644
--- a/libraries/shiro-web/src/test/resources/logback-test.xml
+++ b/libraries/shiro-web/src/test/resources/logback-test.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
 <configuration>
 
     <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
diff --git a/libraries/shiro-web/src/test/resources/web-shiro.ini b/libraries/shiro-web/src/test/resources/web-shiro.ini
index daa1b28..4bab076 100644
--- a/libraries/shiro-web/src/test/resources/web-shiro.ini
+++ b/libraries/shiro-web/src/test/resources/web-shiro.ini
@@ -1,3 +1,18 @@
+# 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.
+
 # =============================================================================
 # Tutorial INI configuration
 #
diff --git a/libraries/spring/build.gradle b/libraries/spring/build.gradle
index 93cb13a..f5b1613 100644
--- a/libraries/spring/build.gradle
+++ b/libraries/spring/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j Spring Library allows for tight integration of Spring Framework and Qi4j applications."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - Spring" }}
+description = "Apache Zest™ Spring Library allows for tight integration of Spring Framework and Apache Zest™ applications."
+
+jar { manifest { name = "Apache Zest™ Library - Spring" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
diff --git a/libraries/spring/dev-status.xml b/libraries/spring/dev-status.xml
index 654d3aa..58fda09 100644
--- a/libraries/spring/dev-status.xml
+++ b/libraries/spring/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
@@ -8,7 +24,7 @@
     <codebase>beta</codebase>
 
     <!-- none, brief, good, complete -->
-    <documentation>none</documentation>
+    <documentation>brief</documentation>
 
     <!-- none, some, good, complete -->
     <unittests>some</unittests>
diff --git a/libraries/spring/src/docs/spring.txt b/libraries/spring/src/docs/spring.txt
index 733095f..12ec47e 100644
--- a/libraries/spring/src/docs/spring.txt
+++ b/libraries/spring/src/docs/spring.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[library-spring, Spring Integration Library]]
 = Spring Integration =
 
@@ -6,8 +25,67 @@
 source=libraries/spring/dev-status.xml
 --------------
 
-Spring Integration Library
-
-NOTE: This Library has no documentation yet. Learn how to contribute in <<community-docs>>.
-
 include::../../build/docs/buildinfo/artifact.txt[]
+
+== Using Spring Framework in Apache Zest™ ==
+Zest™ supports that Spring Application Context is imported into the Zest™ runtime, and the declared Spring
+beans will be available as Zest™ services. The most important things to remember are;
+
+    1. Only Spring Singletons are currently supported.
+    2. One ApplicationContext per Zest™ Module.
+    3. The Zest™ service will be given the same name as the Spring Bean name.
+    4. Zest™ Configuration is not reacbable from the Spring bean (kind of obvious).
+
+[snippet,java]
+----
+source=libraries/spring/src/test/java/org/qi4j/library/spring/importer/Qi4jImportServiceTest.java
+tag=import
+----
+
+== Using Apache Zest™ in Spring Framework ==
+It is also possible to run a Zest™ Application as a Spring Bean and export its Services to Spring.
+
+Steps to export Zest™ service:
+
+    1. Create spring BeanFactory service of qi4j services to export.
+    2. Create a class that extends Qi4jApplicationBootstrap.
+    3. Sets the layer and module that register BeanFactory service.
+    4. Assemble qi4j application by implementing #assemble method.
+    5. Sets the identity of bean factory service. This identity is the spring bean name.
+    6. Declare qi4j bootstrap in spring xml application context.
+
+To bootstrap the Zest™ runtime in Spring, you should have a bootstrap bean that extends the
++org.qi4j.library.spring.bootstrap.Qi4jApplicationBootstrap+ and implement the
++org.springframework.context.ApplicationContextAware+.
+
+A new bean will appear in the application context, called +"qi4jApplication"+ which is only
+intended for internal use of this library.
+
+Example application context;
+[source,xml]
+----
+ <?xml version="1.0" encoding="UTF-8"?>
+
+ <beans xmlns="http://www.springframework.org/schema/beans"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xmlns:qi4j="http://www.qi4j.org/schema/qi4j/spring"
+  xsi:schemaLocation="
+  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+  http://www.qi4j.org/schema/qi4j/spring http://www.qi4j.org/schema/qi4j/spring/spring-0.5.xsd">
+
+  <!-- class that implements Qi4jApplicationBootstrap -->
+
+  <qi4j:bootstrap class="org.hedhman.niclas.MyZestBootstrapper"/>
+
+  <bean id="someService" class="org.hedhman.niclas.SomeService">
+
+  <constructor-arg ref="someService"/> <!-- Reference qi4j comment service -->
+
+ </bean>
+----
+
+[snippet,java]
+----
+source=libraries/spring/src/test/java/org/qi4j/library/spring/MyZestBootstrapper.java
+tag=code
+----
diff --git a/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/Qi4jApplicationBootstrap.java b/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/Qi4jApplicationBootstrap.java
index dccc63d..a60661b 100644
--- a/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/Qi4jApplicationBootstrap.java
+++ b/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/Qi4jApplicationBootstrap.java
@@ -22,9 +22,9 @@
 import org.springframework.context.ApplicationContextAware;
 
 /**
- * Run a Qi4j Application as a Spring Bean and export its Services to Spring.
+ * Run a Zest Application as a Spring Bean and export its Services to Spring.
  * <p>
- * Steps to export Qi4j service:
+ * Steps to export Zest service:
  * </p>
  * <ul>
  * <li>Create spring BeanFactory service of qi4j services to export.</li>
diff --git a/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/internal/application/Qi4jBootstrapBeanDefinitionParser.java b/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/internal/application/Qi4jBootstrapBeanDefinitionParser.java
index aa68dc1..fb875b3 100644
--- a/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/internal/application/Qi4jBootstrapBeanDefinitionParser.java
+++ b/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/internal/application/Qi4jBootstrapBeanDefinitionParser.java
@@ -57,10 +57,10 @@
         Class<?> bootstrapClass;
         try
         {
-            bootstrapClass = forName( bootstrapClassString );
+            bootstrapClass = forName( bootstrapClassString, getClass().getClassLoader() );
         } catch ( ClassNotFoundException e )
         {
-            readerContext.error( "Qi4j bootstrap class [" + bootstrapClassString + "] is not found.", anElement );
+            readerContext.error( "Zest bootstrap class [" + bootstrapClassString + "] is not found.", anElement );
             return null;
         }
 
diff --git a/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/internal/application/package.html b/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/internal/application/package.html
index 4bd5c19..e1c2093 100644
--- a/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/internal/application/package.html
+++ b/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/internal/application/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Spring Integration internal package.</h2>
diff --git a/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/internal/package.html b/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/internal/package.html
index 4bd5c19..e1c2093 100644
--- a/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/internal/package.html
+++ b/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/internal/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Spring Integration internal package.</h2>
diff --git a/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/internal/service/ServiceFactoryBean.java b/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/internal/service/ServiceFactoryBean.java
index b5a143a..76c5bff 100644
--- a/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/internal/service/ServiceFactoryBean.java
+++ b/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/internal/service/ServiceFactoryBean.java
@@ -40,7 +40,7 @@
 
         if( serviceReference == null )
         {
-            throw new IllegalArgumentException( "Qi4j service with id [" + aServiceId + "] is not found." );
+            throw new IllegalArgumentException( "Zest service with id [" + aServiceId + "] is not found." );
         }
     }
 
diff --git a/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/internal/service/package.html b/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/internal/service/package.html
index 4bd5c19..e1c2093 100644
--- a/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/internal/service/package.html
+++ b/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/internal/service/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Spring Integration internal package.</h2>
diff --git a/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/package.html b/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/package.html
index 4427a23..664565f 100644
--- a/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/package.html
+++ b/libraries/spring/src/main/java/org/qi4j/library/spring/bootstrap/package.html
@@ -1,5 +1,21 @@
+<!--
+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.
+-->
 <html>
     <body>
-        <h2>Run a Qi4j Application as a Spring Bean and export its Services to Spring.</h2>
+        <h2>Run a Zest™ Application as a Spring Bean and export its Services to Spring.</h2>
     </body>
 </html>
\ No newline at end of file
diff --git a/libraries/spring/src/main/java/org/qi4j/library/spring/importer/SpringImporterAssembler.java b/libraries/spring/src/main/java/org/qi4j/library/spring/importer/SpringImporterAssembler.java
index 43d1ec3..f7f06f9 100644
--- a/libraries/spring/src/main/java/org/qi4j/library/spring/importer/SpringImporterAssembler.java
+++ b/libraries/spring/src/main/java/org/qi4j/library/spring/importer/SpringImporterAssembler.java
@@ -30,7 +30,7 @@
     private Visibility defaultVisibility;
 
     /**
-     * Import all beans from the given ApplicationContext as services in Qi4j,
+     * Import all beans from the given ApplicationContext as services in Zest,
      * using Module as Visibility.
      *
      * @param context the Spring ApplicationContext
@@ -42,7 +42,7 @@
 
 
     /**
-     * Import all beans from the given ApplicationContext as services in Qi4j,
+     * Import all beans from the given ApplicationContext as services in Zest,
      * using the specified Visibility level.
      *
      * @param context           the Spring ApplicationContext
diff --git a/libraries/spring/src/main/java/org/qi4j/library/spring/importer/package.html b/libraries/spring/src/main/java/org/qi4j/library/spring/importer/package.html
index 9a4ef36..5a9a6cc 100644
--- a/libraries/spring/src/main/java/org/qi4j/library/spring/importer/package.html
+++ b/libraries/spring/src/main/java/org/qi4j/library/spring/importer/package.html
@@ -1,5 +1,21 @@
+<!--
+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.
+-->
 <html>
     <body>
-        <h2>Import Spring Services inside a Qi4j Application.</h2>
+        <h2>Import Spring Services inside a Zest™ Application.</h2>
     </body>
 </html>
\ No newline at end of file
diff --git a/libraries/spring/src/main/java/org/qi4j/library/spring/package.html b/libraries/spring/src/main/java/org/qi4j/library/spring/package.html
index fe8c92f..516d035 100644
--- a/libraries/spring/src/main/java/org/qi4j/library/spring/package.html
+++ b/libraries/spring/src/main/java/org/qi4j/library/spring/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Spring Integration.</h2>
diff --git a/libraries/spring/src/main/resources/META-INF/spring.handlers b/libraries/spring/src/main/resources/META-INF/spring.handlers
index a48d18a..67b4ee4 100644
--- a/libraries/spring/src/main/resources/META-INF/spring.handlers
+++ b/libraries/spring/src/main/resources/META-INF/spring.handlers
@@ -1 +1,16 @@
+# 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.
+
 http\://www.qi4j.org/schema/qi4j/spring=org.qi4j.library.spring.bootstrap.internal.Qi4jNamespaceHandler
\ No newline at end of file
diff --git a/libraries/spring/src/main/resources/META-INF/spring.schemas b/libraries/spring/src/main/resources/META-INF/spring.schemas
index 84bf1f8..6695877 100644
--- a/libraries/spring/src/main/resources/META-INF/spring.schemas
+++ b/libraries/spring/src/main/resources/META-INF/spring.schemas
@@ -1 +1,16 @@
+# 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.
+
 http\://www.qi4j.org/schema/qi4j/spring/spring-0.5.xsd=org/qi4j/library/spring/spring-0.5.xsd
\ No newline at end of file
diff --git a/libraries/spring/src/main/resources/org/qi4j/library/spring/spring-0.5.xsd b/libraries/spring/src/main/resources/org/qi4j/library/spring/spring-0.5.xsd
index 9bcea51..af62ecc 100644
--- a/libraries/spring/src/main/resources/org/qi4j/library/spring/spring-0.5.xsd
+++ b/libraries/spring/src/main/resources/org/qi4j/library/spring/spring-0.5.xsd
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
 <xsd:schema xmlns="http://www.qi4j.org/schema/qi4j/spring"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
             xmlns:beans="http://www.springframework.org/schema/beans"
diff --git a/libraries/spring/src/test/java/org/qi4j/library/spring/MyZestBootstrapper.java b/libraries/spring/src/test/java/org/qi4j/library/spring/MyZestBootstrapper.java
new file mode 100644
index 0000000..afcf0a2
--- /dev/null
+++ b/libraries/spring/src/test/java/org/qi4j/library/spring/MyZestBootstrapper.java
@@ -0,0 +1,49 @@
+/*
+ * 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.qi4j.library.spring;
+
+import org.qi4j.bootstrap.ApplicationAssembly;
+import org.qi4j.bootstrap.AssemblyException;
+import org.qi4j.library.spring.bootstrap.Qi4jApplicationBootstrap;
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+
+// START SNIPPET: code
+public class MyZestBootstrapper extends Qi4jApplicationBootstrap
+        implements ApplicationContextAware
+{
+    private ApplicationContext applicationContext;
+
+    @Override
+    public void assemble(ApplicationAssembly assembly) throws AssemblyException
+    {
+        // Normal assembly of an application.
+// END SNIPPET: code
+// START SNIPPET: code
+    }
+
+    @Override
+    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException
+    {
+        this.applicationContext = applicationContext;
+    }
+
+}
+// END SNIPPET: code
diff --git a/libraries/spring/src/test/java/org/qi4j/library/spring/bootstrap/TextProcessingService.java b/libraries/spring/src/test/java/org/qi4j/library/spring/bootstrap/TextProcessingService.java
index 3c91701..e219568 100644
--- a/libraries/spring/src/test/java/org/qi4j/library/spring/bootstrap/TextProcessingService.java
+++ b/libraries/spring/src/test/java/org/qi4j/library/spring/bootstrap/TextProcessingService.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.spring.bootstrap;
 
 public interface TextProcessingService
diff --git a/libraries/spring/src/test/java/org/qi4j/library/spring/bootstrap/ToUppercaseService.java b/libraries/spring/src/test/java/org/qi4j/library/spring/bootstrap/ToUppercaseService.java
index 8e34cc3..1e6c259 100644
--- a/libraries/spring/src/test/java/org/qi4j/library/spring/bootstrap/ToUppercaseService.java
+++ b/libraries/spring/src/test/java/org/qi4j/library/spring/bootstrap/ToUppercaseService.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.library.spring.bootstrap;
 
 public class ToUppercaseService
diff --git a/libraries/spring/src/test/java/org/qi4j/library/spring/importer/Qi4jImportServiceTest.java b/libraries/spring/src/test/java/org/qi4j/library/spring/importer/Qi4jImportServiceTest.java
index 4f48850..fc76bea 100644
--- a/libraries/spring/src/test/java/org/qi4j/library/spring/importer/Qi4jImportServiceTest.java
+++ b/libraries/spring/src/test/java/org/qi4j/library/spring/importer/Qi4jImportServiceTest.java
@@ -54,8 +54,9 @@
             public void assemble( ModuleAssembly module ) throws AssemblyException
             {
                 module.objects( Qi4jImportServiceTest.class );
-
+                // START SNIPPET: import
                 new SpringImporterAssembler( appContext ).assemble( module );
+                // END SNIPPET: import
             }
         };
 
diff --git a/libraries/spring/src/test/resources/org/qi4j/library/spring/bootstrap/Qi4jExportServiceTest-context.xml b/libraries/spring/src/test/resources/org/qi4j/library/spring/bootstrap/Qi4jExportServiceTest-context.xml
index 44f07ae..a96ec1c 100644
--- a/libraries/spring/src/test/resources/org/qi4j/library/spring/bootstrap/Qi4jExportServiceTest-context.xml
+++ b/libraries/spring/src/test/resources/org/qi4j/library/spring/bootstrap/Qi4jExportServiceTest-context.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:qi4j="http://www.qi4j.org/schema/qi4j/spring"
     xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
diff --git a/libraries/spring/src/test/resources/org/qi4j/library/spring/importer/Qi4jImportServiceTest-context.xml b/libraries/spring/src/test/resources/org/qi4j/library/spring/importer/Qi4jImportServiceTest-context.xml
index b0bc881..19c9af7 100644
--- a/libraries/spring/src/test/resources/org/qi4j/library/spring/importer/Qi4jImportServiceTest-context.xml
+++ b/libraries/spring/src/test/resources/org/qi4j/library/spring/importer/Qi4jImportServiceTest-context.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
 <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="
diff --git a/libraries/sql-bonecp/build.gradle b/libraries/sql-bonecp/build.gradle
index f5f032b..a503338 100644
--- a/libraries/sql-bonecp/build.gradle
+++ b/libraries/sql-bonecp/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j SQL BoneCP Library provides BoneCP support."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - SQL BoneCP" }}
+description = "Apache Zest™ SQL BoneCP Library provides BoneCP support."
+
+jar { manifest { name = "Apache Zest™ Library - SQL BoneCP" }}
 
 dependencies {
   compile(project(":org.qi4j.libraries:org.qi4j.library.sql"))
diff --git a/libraries/sql-bonecp/dev-status.xml b/libraries/sql-bonecp/dev-status.xml
index a0c9fbb..bdf00e7 100644
--- a/libraries/sql-bonecp/dev-status.xml
+++ b/libraries/sql-bonecp/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/libraries/sql-bonecp/src/main/java/org/qi4j/library/sql/bonecp/package.html b/libraries/sql-bonecp/src/main/java/org/qi4j/library/sql/bonecp/package.html
index 3753129..4060d7f 100644
--- a/libraries/sql-bonecp/src/main/java/org/qi4j/library/sql/bonecp/package.html
+++ b/libraries/sql-bonecp/src/main/java/org/qi4j/library/sql/bonecp/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>SQL BoneCP Support.</h2>
diff --git a/libraries/sql-c3p0/build.gradle b/libraries/sql-c3p0/build.gradle
deleted file mode 100644
index 9060de7..0000000
--- a/libraries/sql-c3p0/build.gradle
+++ /dev/null
@@ -1,9 +0,0 @@
-description = "Qi4j SQL C3P0 Library provides C3P0 support."
-
-jar { manifest { name = "Qi4j Library - SQL C3P0" }}
-
-dependencies {
-  compile(project(":org.qi4j.libraries:org.qi4j.library.sql"))
-  compile(libraries.c3p0)
-}
-
diff --git a/libraries/sql-c3p0/dev-status.xml b/libraries/sql-c3p0/dev-status.xml
deleted file mode 100644
index a0c9fbb..0000000
--- a/libraries/sql-c3p0/dev-status.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
-        http://www.qi4j.org/schemas/2008/dev-status/1/dev-status.xsd">
-  <status>
-    <!--none,early,beta,stable,mature-->
-    <codebase>stable</codebase>
-
-    <!-- none, brief, good, complete -->
-    <documentation>good</documentation>
-
-    <!-- none, some, good, complete -->
-    <unittests>good</unittests>
-  </status>
-  <licenses>
-    <license>ALv2</license>
-  </licenses>
-</module>
diff --git a/libraries/sql-c3p0/src/main/java/org/qi4j/library/sql/c3p0/C3P0DataSourceServiceAssembler.java b/libraries/sql-c3p0/src/main/java/org/qi4j/library/sql/c3p0/C3P0DataSourceServiceAssembler.java
deleted file mode 100644
index 7cb5ed6..0000000
--- a/libraries/sql-c3p0/src/main/java/org/qi4j/library/sql/c3p0/C3P0DataSourceServiceAssembler.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2012, Paul Merlin. All Rights Reserved.
- *
- * Licensed 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.qi4j.library.sql.c3p0;
-
-import org.qi4j.api.common.Visibility;
-import org.qi4j.bootstrap.ModuleAssembly;
-import org.qi4j.library.sql.assembly.AbstractPooledDataSourceServiceAssembler;
-
-/**
- * Use this Assembler to register a DataSourceService based on C3P0 and its Configuration entity.
- */
-public class C3P0DataSourceServiceAssembler
-        extends AbstractPooledDataSourceServiceAssembler<C3P0DataSourceServiceAssembler>
-{
-
-    @Override
-    protected void onAssemble( ModuleAssembly module, String identity, Visibility visibility )
-    {
-        module.services( C3P0DataSourceServiceImporter.class ).identifiedBy( identity ).visibleIn( visibility );
-    }
-
-}
diff --git a/libraries/sql-c3p0/src/main/java/org/qi4j/library/sql/c3p0/C3P0DataSourceServiceImporter.java b/libraries/sql-c3p0/src/main/java/org/qi4j/library/sql/c3p0/C3P0DataSourceServiceImporter.java
deleted file mode 100644
index 36baf5c..0000000
--- a/libraries/sql-c3p0/src/main/java/org/qi4j/library/sql/c3p0/C3P0DataSourceServiceImporter.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (c) 2011, Rickard Öberg. All Rights Reserved.
- * Copyright (c) 2012, Paul Merlin. All Rights Reserved.
- *
- * Licensed 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.qi4j.library.sql.c3p0;
-
-import com.mchange.v2.c3p0.ComboPooledDataSource;
-import com.mchange.v2.c3p0.DataSources;
-import java.sql.SQLException;
-import java.util.Properties;
-import javax.sql.DataSource;
-import org.qi4j.api.activation.Activators;
-import org.qi4j.api.mixin.Mixins;
-import org.qi4j.api.service.ServiceComposite;
-import org.qi4j.api.service.ServiceImporter;
-import org.qi4j.library.sql.datasource.AbstractDataSourceServiceImporterMixin;
-import org.qi4j.library.sql.datasource.DataSourceConfigurationValue;
-import org.qi4j.library.sql.datasource.DataSourceServiceImporterActivation;
-
-/**
- * DataSource service implemented as a ServiceImporter.
- *
- * Import visible DataSources as Services. The default Mixin use the C3P0
- * pooling system optionaly wrapped with CircuitBreaker using a proxy.
- */
-@Mixins( C3P0DataSourceServiceImporter.Mixin.class )
-@Activators( DataSourceServiceImporterActivation.Activator.class )
-public interface C3P0DataSourceServiceImporter
-        extends ServiceImporter<DataSource>, DataSourceServiceImporterActivation, ServiceComposite
-{
-
-    public static class Mixin
-            extends AbstractDataSourceServiceImporterMixin<ComboPooledDataSource>
-    {
-
-        @Override
-        protected ComboPooledDataSource setupDataSourcePool( DataSourceConfigurationValue config )
-                throws Exception
-        {
-            ComboPooledDataSource pool = new ComboPooledDataSource();
-
-            Class.forName( config.driver().get() );
-            pool.setDriverClass( config.driver().get() );
-            pool.setJdbcUrl( config.url().get() );
-
-            if ( !config.username().get().equals( "" ) ) {
-                pool.setUser( config.username().get() );
-                pool.setPassword( config.password().get() );
-            }
-
-            if ( config.minPoolSize().get() != null ) {
-                pool.setMinPoolSize( config.minPoolSize().get() );
-            }
-            if ( config.maxPoolSize().get() != null ) {
-                pool.setMaxPoolSize( config.maxPoolSize().get() );
-            }
-            if ( config.loginTimeoutSeconds().get() != null ) {
-                pool.setLoginTimeout( config.loginTimeoutSeconds().get() );
-            }
-            if ( config.maxConnectionAgeSeconds().get() != null ) {
-                pool.setMaxIdleTime( config.maxConnectionAgeSeconds().get() );
-            }
-            if ( config.validationQuery().get() != null ) {
-                pool.setPreferredTestQuery( config.validationQuery().get() );
-            }
-
-            String props = config.properties().get();
-            String[] properties = props.split( "," );
-            Properties poolProperties = new Properties();
-            for ( String property : properties ) {
-                if ( property.trim().length() > 0 ) {
-                    String[] keyvalue = property.trim().split( "=" );
-                    poolProperties.setProperty( keyvalue[0], keyvalue[1] );
-                }
-            }
-            pool.setProperties( poolProperties );
-
-            return pool;
-        }
-
-        @Override
-        protected void passivateDataSourcePool( ComboPooledDataSource dataSourcePool )
-                throws SQLException
-        {
-            DataSources.destroy( dataSourcePool );
-        }
-
-    }
-
-}
\ No newline at end of file
diff --git a/libraries/sql-c3p0/src/main/java/org/qi4j/library/sql/c3p0/package.html b/libraries/sql-c3p0/src/main/java/org/qi4j/library/sql/c3p0/package.html
deleted file mode 100644
index 808a038..0000000
--- a/libraries/sql-c3p0/src/main/java/org/qi4j/library/sql/c3p0/package.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<html>
-    <body>
-        <h2>SQL C3P0 Support.</h2>
-    </body>
-</html>
\ No newline at end of file
diff --git a/libraries/sql-dbcp/build.gradle b/libraries/sql-dbcp/build.gradle
index fee3e1d..51abe7c 100644
--- a/libraries/sql-dbcp/build.gradle
+++ b/libraries/sql-dbcp/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j SQL DBCP Library provides DBCP support."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - SQL DBCP" }}
+description = "Apache Zest™ SQL DBCP Library provides DBCP support."
+
+jar { manifest { name = "Apache Zest™ Library - SQL DBCP" }}
 
 dependencies {
   compile(project(":org.qi4j.libraries:org.qi4j.library.sql"))
diff --git a/libraries/sql-dbcp/dev-status.xml b/libraries/sql-dbcp/dev-status.xml
index a0c9fbb..bdf00e7 100644
--- a/libraries/sql-dbcp/dev-status.xml
+++ b/libraries/sql-dbcp/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/libraries/sql-dbcp/src/main/java/org/qi4j/library/sql/dbcp/package.html b/libraries/sql-dbcp/src/main/java/org/qi4j/library/sql/dbcp/package.html
index 263c853..493bf47 100644
--- a/libraries/sql-dbcp/src/main/java/org/qi4j/library/sql/dbcp/package.html
+++ b/libraries/sql-dbcp/src/main/java/org/qi4j/library/sql/dbcp/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>SQL Apache DBCP Support.</h2>
diff --git a/libraries/sql-liquibase/build.gradle b/libraries/sql-liquibase/build.gradle
index 20bff89..910552e 100644
--- a/libraries/sql-liquibase/build.gradle
+++ b/libraries/sql-liquibase/build.gradle
@@ -1,13 +1,33 @@
-description = "Qi4j SQL Liquibase Library provides Liquibase support."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - SQL Liquibase" }}
+description = "Apache Zest™ SQL Liquibase Library provides Liquibase support."
+
+jar { manifest { name = "Apache Zest™ Library - SQL Liquibase" }}
 
 dependencies {
   compile(project(":org.qi4j.libraries:org.qi4j.library.sql"))
   compile(libraries.liquibase)
+  compile libraries.slf4j_api
 
   testCompile(project(":org.qi4j.core:org.qi4j.core.testsupport"))
-  testCompile(project(":org.qi4j.libraries:org.qi4j.library.sql-c3p0"))
+  testCompile(project(":org.qi4j.libraries:org.qi4j.library.sql-dbcp"))
 
   testRuntime(project(":org.qi4j.core:org.qi4j.core.runtime"))
   testRuntime(libraries.derby)
diff --git a/libraries/sql-liquibase/dev-status.xml b/libraries/sql-liquibase/dev-status.xml
index a0c9fbb..bdf00e7 100644
--- a/libraries/sql-liquibase/dev-status.xml
+++ b/libraries/sql-liquibase/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/libraries/sql-liquibase/src/main/java/org/qi4j/library/sql/liquibase/package.html b/libraries/sql-liquibase/src/main/java/org/qi4j/library/sql/liquibase/package.html
index 969170c..95ddcf2 100644
--- a/libraries/sql-liquibase/src/main/java/org/qi4j/library/sql/liquibase/package.html
+++ b/libraries/sql-liquibase/src/main/java/org/qi4j/library/sql/liquibase/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>SQL Liquibase Support.</h2>
diff --git a/libraries/sql-liquibase/src/test/java/org/qi4j/library/sql/liquibase/LiquibaseServiceTest.java b/libraries/sql-liquibase/src/test/java/org/qi4j/library/sql/liquibase/LiquibaseServiceTest.java
index 3f89434..82e56e8 100644
--- a/libraries/sql-liquibase/src/test/java/org/qi4j/library/sql/liquibase/LiquibaseServiceTest.java
+++ b/libraries/sql-liquibase/src/test/java/org/qi4j/library/sql/liquibase/LiquibaseServiceTest.java
@@ -37,8 +37,8 @@
 import org.qi4j.io.Inputs;
 import org.qi4j.io.Outputs;
 import org.qi4j.library.sql.assembly.DataSourceAssembler;
-import org.qi4j.library.sql.c3p0.C3P0DataSourceServiceAssembler;
 import org.qi4j.library.sql.common.Databases;
+import org.qi4j.library.sql.dbcp.DBCPDataSourceServiceAssembler;
 import org.qi4j.test.EntityTestAssembler;
 
 import static org.hamcrest.CoreMatchers.equalTo;
@@ -66,7 +66,7 @@
                 // Create in-memory store for configurations
                 new EntityTestAssembler().assemble( configModule );
 
-                new C3P0DataSourceServiceAssembler().
+                new DBCPDataSourceServiceAssembler().
                     identifiedBy( "datasource-service" ).
                     withConfig( configModule, Visibility.layer ).
                     assemble( module );
diff --git a/libraries/sql-liquibase/src/test/resources/changelog.xml b/libraries/sql-liquibase/src/test/resources/changelog.xml
index 9824e6b..9ae0236 100644
--- a/libraries/sql-liquibase/src/test/resources/changelog.xml
+++ b/libraries/sql-liquibase/src/test/resources/changelog.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
 <databaseChangeLog
      xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
diff --git a/libraries/sql-liquibase/src/test/resources/testds-liquibase.properties b/libraries/sql-liquibase/src/test/resources/testds-liquibase.properties
index 72329e5..93b1eeb 100644
--- a/libraries/sql-liquibase/src/test/resources/testds-liquibase.properties
+++ b/libraries/sql-liquibase/src/test/resources/testds-liquibase.properties
@@ -1,3 +1,18 @@
+# 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.
+
 enabled=true
 url=jdbc:derby:memory:testdb3;create=true
 driver=org.apache.derby.jdbc.EmbeddedDriver
diff --git a/libraries/sql/build.gradle b/libraries/sql/build.gradle
index 2d1ae83..d4789c3 100644
--- a/libraries/sql/build.gradle
+++ b/libraries/sql/build.gradle
@@ -1,17 +1,36 @@
-description = "Qi4j SQL Library provides SQL support."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - SQL" }}
+description = "Apache Zest™ SQL Library provides SQL support."
+
+jar { manifest { name = "Apache Zest™ Library - SQL" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
   compile(project(":org.qi4j.libraries:org.qi4j.library.circuitbreaker"))
   compile(project(":org.qi4j.libraries:org.qi4j.library.conversion"))
   compile(project(":org.qi4j.libraries:org.qi4j.library.jmx"))
+  compile libraries.slf4j_api
 
   testCompile(project(":org.qi4j.core:org.qi4j.core.testsupport"))
   testCompile(project(":org.qi4j.core:org.qi4j.core.runtime"))
   testCompile(project(":org.qi4j.libraries:org.qi4j.library.sql-bonecp"))
-  testCompile(project(":org.qi4j.libraries:org.qi4j.library.sql-c3p0"))
   testCompile(project(":org.qi4j.libraries:org.qi4j.library.sql-dbcp"))
   testCompile(project(":org.qi4j.libraries:org.qi4j.library.sql-liquibase"))
   testCompile(project(":org.qi4j.extensions:org.qi4j.extension.entitystore-preferences"))
diff --git a/libraries/sql/dev-status.xml b/libraries/sql/dev-status.xml
index a0c9fbb..bdf00e7 100644
--- a/libraries/sql/dev-status.xml
+++ b/libraries/sql/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/libraries/sql/src/docs/sql.txt b/libraries/sql/src/docs/sql.txt
index 1344e8c..ffad172 100644
--- a/libraries/sql/src/docs/sql.txt
+++ b/libraries/sql/src/docs/sql.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[library-sql,SQL Library]]
 = SQL =
 
@@ -23,10 +42,9 @@
 
 == DataSource and connection pools ==
 
-DataSource support comes in four flavors:
+DataSource support comes in three flavors:
 
 - using the http://jolbox.com/[BoneCP] connection pool
-- using the http://sourceforge.net/projects/c3p0/[C3P0] connection pool
 - using the http://commons.apache.org/dbcp/[Apache DBCP] connection pool
 - importing an existing DataSource provided at assembly time
 
@@ -55,21 +73,6 @@
 tag=bonecp
 ----
 
-*C3P0*
-
-[devstatus]
---------------
-source=libraries/sql-c3p0/dev-status.xml
---------------
-
-include::../../../sql-c3p0/build/docs/buildinfo/artifact.txt[]
-
-[snippet,java]
-----
-source=libraries/sql/src/test/java/org/qi4j/library/sql/DocumentationSupport.java
-tag=c3p0
-----
-
 *Apache DBCP*
 
 [devstatus]
@@ -123,7 +126,7 @@
 
 === Importing an existing DataSource ===
 
-Importing an existing DataSource at assembly time is usefull when your Qi4j
+Importing an existing DataSource at assembly time is usefull when your Zest
 Application runs in an environment where DataSource are already provided.
 
 [snippet,java]
diff --git a/libraries/sql/src/main/java/org/qi4j/library/sql/assembly/package.html b/libraries/sql/src/main/java/org/qi4j/library/sql/assembly/package.html
index 0e7f116..b3b62a7 100644
--- a/libraries/sql/src/main/java/org/qi4j/library/sql/assembly/package.html
+++ b/libraries/sql/src/main/java/org/qi4j/library/sql/assembly/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>SQL Library Assembly.</h2>
diff --git a/libraries/sql/src/main/java/org/qi4j/library/sql/common/package.html b/libraries/sql/src/main/java/org/qi4j/library/sql/common/package.html
index de68445..e8cb99d 100644
--- a/libraries/sql/src/main/java/org/qi4j/library/sql/common/package.html
+++ b/libraries/sql/src/main/java/org/qi4j/library/sql/common/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>SQL Library Utilities.</h2>
diff --git a/libraries/sql/src/main/java/org/qi4j/library/sql/datasource/package.html b/libraries/sql/src/main/java/org/qi4j/library/sql/datasource/package.html
index d8b11ac..3d3502d 100644
--- a/libraries/sql/src/main/java/org/qi4j/library/sql/datasource/package.html
+++ b/libraries/sql/src/main/java/org/qi4j/library/sql/datasource/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>SQL Library DataSource Support.</h2>
diff --git a/libraries/sql/src/main/java/org/qi4j/library/sql/jmx/DataSourceConfigurationManagerService.java b/libraries/sql/src/main/java/org/qi4j/library/sql/jmx/DataSourceConfigurationManagerService.java
index 3642f12..5833f53 100644
--- a/libraries/sql/src/main/java/org/qi4j/library/sql/jmx/DataSourceConfigurationManagerService.java
+++ b/libraries/sql/src/main/java/org/qi4j/library/sql/jmx/DataSourceConfigurationManagerService.java
@@ -142,7 +142,7 @@
 
                 MBeanInfo mbeanInfo = new MBeanInfo( DataSourceConfiguration.class.getName(), name, attributes.toArray( new MBeanAttributeInfo[ attributes.size() ] ), null, operations.toArray( new MBeanOperationInfo[ operations.size() ] ), null );
                 Object mbean = new ConfigurableDataSource( dataSourceService, mbeanInfo, name, properties );
-                ObjectName configurableDataSourceName = new ObjectName( "Qi4j:application=" + application.name() + ",class=Datasource,name=" + name );
+                ObjectName configurableDataSourceName = new ObjectName( "Zest:application=" + application.name() + ",class=Datasource,name=" + name );
                 server.registerMBean( mbean, configurableDataSourceName );
                 configurationNames.add( configurableDataSourceName );
             }
diff --git a/libraries/sql/src/main/java/org/qi4j/library/sql/jmx/package.html b/libraries/sql/src/main/java/org/qi4j/library/sql/jmx/package.html
index 565a9d1..ee7f93f 100644
--- a/libraries/sql/src/main/java/org/qi4j/library/sql/jmx/package.html
+++ b/libraries/sql/src/main/java/org/qi4j/library/sql/jmx/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>SQL Library JMX Support.</h2>
diff --git a/libraries/sql/src/test/java/org/qi4j/library/sql/DocumentationSupport.java b/libraries/sql/src/test/java/org/qi4j/library/sql/DocumentationSupport.java
index bb5fcad..b9ea940 100644
--- a/libraries/sql/src/test/java/org/qi4j/library/sql/DocumentationSupport.java
+++ b/libraries/sql/src/test/java/org/qi4j/library/sql/DocumentationSupport.java
@@ -26,7 +26,6 @@
 import org.qi4j.library.circuitbreaker.CircuitBreaker;
 import org.qi4j.library.sql.assembly.DataSourceAssembler;
 import org.qi4j.library.sql.bonecp.BoneCPDataSourceServiceAssembler;
-import org.qi4j.library.sql.c3p0.C3P0DataSourceServiceAssembler;
 import org.qi4j.library.sql.dbcp.DBCPDataSourceServiceAssembler;
 
 import static org.qi4j.library.sql.DocumentationSupport.Constants.DS_ID;
@@ -88,15 +87,6 @@
                 assemble( module );
             // END SNIPPET: bonecp
 
-            // START SNIPPET: c3p0
-            // Assemble the C3P0 based Service Importer
-            new C3P0DataSourceServiceAssembler().
-                identifiedBy( DS_SERVICE_ID ).
-                visibleIn( Visibility.module ).
-                withConfig( config, Visibility.layer ).
-                assemble( module );
-            // END SNIPPET: c3p0
-
             // START SNIPPET: dbcp
             // Assemble the Apache DBCP based Service Importer
             new DBCPDataSourceServiceAssembler().
diff --git a/libraries/sql/src/test/java/org/qi4j/library/sql/jmx/DataSourceConfigurationManagerServiceTest.java b/libraries/sql/src/test/java/org/qi4j/library/sql/jmx/DataSourceConfigurationManagerServiceTest.java
index f06ac2a..a428c05 100644
--- a/libraries/sql/src/test/java/org/qi4j/library/sql/jmx/DataSourceConfigurationManagerServiceTest.java
+++ b/libraries/sql/src/test/java/org/qi4j/library/sql/jmx/DataSourceConfigurationManagerServiceTest.java
@@ -34,9 +34,9 @@
 import org.qi4j.library.jmx.JMXAssembler;
 import org.qi4j.library.sql.assembly.DataSourceAssembler;
 import org.qi4j.library.sql.assembly.DataSourceJMXAssembler;
-import org.qi4j.library.sql.c3p0.C3P0DataSourceServiceAssembler;
 import org.qi4j.library.sql.common.Databases;
 import org.qi4j.library.sql.datasource.DataSources;
+import org.qi4j.library.sql.dbcp.DBCPDataSourceServiceAssembler;
 import org.qi4j.library.sql.liquibase.LiquibaseConfiguration;
 import org.qi4j.library.sql.liquibase.LiquibaseService;
 import org.qi4j.test.EntityTestAssembler;
@@ -80,7 +80,7 @@
                 new EntityTestAssembler().visibleIn( Visibility.layer ).assemble( module );
 
                 // Set up DataSource service that will manage the connection pools
-                new C3P0DataSourceServiceAssembler().identifiedBy( "datasource-service" ).visibleIn( Visibility.layer ).assemble( module );
+                new DBCPDataSourceServiceAssembler().identifiedBy( "datasource-service" ).visibleIn( Visibility.layer ).assemble( module );
 
                 {
                     ModuleAssembly testModule = module.layer().module( "TestDS" );
diff --git a/libraries/sql/src/test/resources/changelog.xml b/libraries/sql/src/test/resources/changelog.xml
index 9824e6b..9ae0236 100644
--- a/libraries/sql/src/test/resources/changelog.xml
+++ b/libraries/sql/src/test/resources/changelog.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
 <databaseChangeLog
      xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
diff --git a/libraries/sql/src/test/resources/testds.properties b/libraries/sql/src/test/resources/testds.properties
index 03bf132..8fc9229 100644
--- a/libraries/sql/src/test/resources/testds.properties
+++ b/libraries/sql/src/test/resources/testds.properties
@@ -1,3 +1,18 @@
+# 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.
+
 enabled=true
 url=jdbc:derby:memory:testdb;create=true
 driver=org.apache.derby.jdbc.EmbeddedDriver
diff --git a/libraries/sql/src/test/resources/testds2.properties b/libraries/sql/src/test/resources/testds2.properties
index 6a0d06e..e62e9fe 100644
--- a/libraries/sql/src/test/resources/testds2.properties
+++ b/libraries/sql/src/test/resources/testds2.properties
@@ -1,3 +1,18 @@
+# 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.
+
 enabled=true
 url=jdbc:derby:memory:testdb2;create=true
 driver=org.apache.derby.jdbc.EmbeddedDriver
diff --git a/libraries/struts2-codebehind/build.gradle b/libraries/struts2-codebehind/build.gradle
deleted file mode 100644
index fa2933f..0000000
--- a/libraries/struts2-codebehind/build.gradle
+++ /dev/null
@@ -1,14 +0,0 @@
-description = "Qi4j Struts Library allows integration of Qi4j into Struts2 applications."
-
-jar { manifest { name = "Qi4j Library - Struts2 - Code Behind"}}
-
-dependencies {
-  compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
-  compile( project( ':org.qi4j.libraries:org.qi4j.library.struts2-plugin' ) )
-  compile(libraries.struts_codebehind)
-
-  testCompile(project(":org.qi4j.core:org.qi4j.core.testsupport"))
-
-  testRuntime(project(":org.qi4j.core:org.qi4j.core.runtime"))
-  testRuntime(libraries.logback)
-}
\ No newline at end of file
diff --git a/libraries/struts2-codebehind/dev-status.xml b/libraries/struts2-codebehind/dev-status.xml
deleted file mode 100644
index 654d3aa..0000000
--- a/libraries/struts2-codebehind/dev-status.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
-        http://www.qi4j.org/schemas/2008/dev-status/1/dev-status.xsd">
-  <status>
-    <!--none,early,beta,stable,mature-->
-    <codebase>beta</codebase>
-
-    <!-- none, brief, good, complete -->
-    <documentation>none</documentation>
-
-    <!-- none, some, good, complete -->
-    <unittests>some</unittests>
-  </status>
-  <licenses>
-    <license>ALv2</license>
-  </licenses>
-</module>
\ No newline at end of file
diff --git a/libraries/struts2-codebehind/src/docs/struts-codebehind.txt b/libraries/struts2-codebehind/src/docs/struts-codebehind.txt
deleted file mode 100644
index b6c129c..0000000
--- a/libraries/struts2-codebehind/src/docs/struts-codebehind.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-[[library-struts-codebehind, Struts Code Behind Library]]
-= Struts - Code Behind =
-
-[devstatus]
---------------
-source=libraries/struts2-codebehind/dev-status.xml
---------------
-
-Struts Code Behing Library
-
-NOTE: This Library has no documentation yet. Learn how to contribute in <<community-docs>>.
-
-include::../../build/docs/buildinfo/artifact.txt[]
diff --git a/libraries/struts2-codebehind/src/main/java/org/qi4j/library/struts2/codebehind/Qi4jCodebehindPackageProvider.java b/libraries/struts2-codebehind/src/main/java/org/qi4j/library/struts2/codebehind/Qi4jCodebehindPackageProvider.java
deleted file mode 100644
index 00fa0c7..0000000
--- a/libraries/struts2-codebehind/src/main/java/org/qi4j/library/struts2/codebehind/Qi4jCodebehindPackageProvider.java
+++ /dev/null
@@ -1,723 +0,0 @@
-package org.qi4j.library.struts2.codebehind;
-
-import com.opensymphony.xwork2.config.Configuration;
-import com.opensymphony.xwork2.config.ConfigurationException;
-import com.opensymphony.xwork2.config.PackageProvider;
-import com.opensymphony.xwork2.config.entities.ActionConfig;
-import com.opensymphony.xwork2.config.entities.PackageConfig;
-import com.opensymphony.xwork2.config.entities.ResultConfig;
-import com.opensymphony.xwork2.config.entities.ResultTypeConfig;
-import com.opensymphony.xwork2.inject.Inject;
-import com.opensymphony.xwork2.util.ClassLoaderUtil;
-import com.opensymphony.xwork2.util.logging.Logger;
-import com.opensymphony.xwork2.util.logging.LoggerFactory;
-import java.lang.annotation.Annotation;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.*;
-import javax.servlet.ServletContext;
-import org.apache.struts2.config.*;
-import org.qi4j.library.struts2.ActionConfiguration;
-
-/**
- * This is inspired by the ClasspathPackageProvider from the struts2-codebehind-plugin.  Most of the code
- * is directly copied from the 2.1.1 version of the plugin but modified to only look for the @Action annotation
- * and to accept interfaces as well as classes.
- */
-public class Qi4jCodebehindPackageProvider
-    implements PackageProvider
-{
-
-    private ActionConfiguration actionConfiguration;
-
-    /**
-     * The default page prefix (or "path").
-     * Some applications may place pages under "/WEB-INF" as an extreme security precaution.
-     */
-    protected static final String DEFAULT_PAGE_PREFIX = "struts.configuration.classpath.defaultPagePrefix";
-
-    /**
-     * The default page prefix (none).
-     */
-    private String defaultPagePrefix = "";
-
-    /**
-     * The default page extension,  to use in place of ".jsp".
-     */
-    protected static final String DEFAULT_PAGE_EXTENSION = "struts.configuration.classpath.defaultPageExtension";
-
-    /**
-     * The defacto default page extension, usually associated with JavaServer Pages.
-     */
-    private String defaultPageExtension = ".jsp";
-
-    /**
-     * A setting to indicate a custom default parent package,
-     * to use in place of "struts-default".
-     */
-    protected static final String DEFAULT_PARENT_PACKAGE = "struts.configuration.classpath.defaultParentPackage";
-
-    /**
-     * Name of the framework's default configuration package,
-     * that application configuration packages automatically inherit.
-     */
-    private String defaultParentPackage = "struts-default";
-
-    /**
-     * The default page prefix (or "path").
-     * Some applications may place pages under "/WEB-INF" as an extreme security precaution.
-     */
-    protected static final String FORCE_LOWER_CASE = "struts.configuration.classpath.forceLowerCase";
-
-    /**
-     * Whether to use a lowercase letter as the initial letter of an action.
-     * If false, actions will retain the initial uppercase letter from the Action class.
-     * (<code>view.action</code> (true) versus <code>View.action</code> (false)).
-     */
-    private boolean forceLowerCase = true;
-
-    /**
-     * Default suffix that can be used to indicate POJO "Action" classes.
-     */
-    private static final String ACTION = "Action";
-
-    /**
-     * Helper class to scan class path for server pages.
-     */
-    private PageLocator pageLocator = new ClasspathPageLocator();
-
-    /**
-     * Flag to indicate the packages have been loaded.
-     *
-     * @see #loadPackages
-     * @see #needsReload
-     */
-    private boolean initialized = false;
-
-    private PackageLoader packageLoader;
-
-    /**
-     * Logging instance for this class.
-     */
-    private static final Logger LOG = LoggerFactory.getLogger( Qi4jCodebehindPackageProvider.class );
-
-    /**
-     * The XWork Configuration for this application.
-     *
-     * @see #init
-     */
-    private Configuration configuration;
-
-    private String actionPackages;
-
-    private ServletContext servletContext;
-
-    /**
-     * PageLocator defines a locate method that can be used to discover server pages.
-     */
-    public static interface PageLocator
-    {
-        public URL locate( String path );
-    }
-
-    /**
-     * ClasspathPathLocator searches the classpath for server pages.
-     */
-    public static class ClasspathPageLocator
-        implements PageLocator
-    {
-        @Override
-        public URL locate( String path )
-        {
-            return ClassLoaderUtil.getResource( path, getClass() );
-        }
-    }
-
-    @Inject( "actionPackages" )
-    public void setActionPackages( String packages )
-    {
-        this.actionPackages = packages;
-    }
-
-    @Inject
-    public void setServletContext( ServletContext ctx )
-    {
-        this.servletContext = ctx;
-    }
-
-    @Inject
-    public void setActionConfiguration( ActionConfiguration actionConfiguration )
-    {
-        this.actionConfiguration = actionConfiguration;
-    }
-
-    /**
-     * Register a default parent package for the actions.
-     *
-     * @param defaultParentPackage the new defaultParentPackage
-     */
-    @Inject( value = DEFAULT_PARENT_PACKAGE, required = false )
-    public void setDefaultParentPackage( String defaultParentPackage )
-    {
-        this.defaultParentPackage = defaultParentPackage;
-    }
-
-    /**
-     * Register a default page extension to use when locating pages.
-     *
-     * @param defaultPageExtension the new defaultPageExtension
-     */
-    @Inject( value = DEFAULT_PAGE_EXTENSION, required = false )
-    public void setDefaultPageExtension( String defaultPageExtension )
-    {
-        this.defaultPageExtension = defaultPageExtension;
-    }
-
-    /**
-     * Reigster a default page prefix to use when locating pages.
-     *
-     * @param defaultPagePrefix the defaultPagePrefix to set
-     */
-    @Inject( value = DEFAULT_PAGE_PREFIX, required = false )
-    public void setDefaultPagePrefix( String defaultPagePrefix )
-    {
-        this.defaultPagePrefix = defaultPagePrefix;
-    }
-
-    /**
-     * Whether to use a lowercase letter as the initial letter of an action.
-     *
-     * @param force If false, actions will retain the initial uppercase letter from the Action class.
-     *              (<code>view.action</code> (true) versus <code>View.action</code> (false)).
-     */
-    @Inject( value = FORCE_LOWER_CASE, required = false )
-    public void setForceLowerCase( String force )
-    {
-        this.forceLowerCase = "true".equals( force );
-    }
-
-    /**
-     * Register a PageLocation to use to scan for server pages.
-     *
-     * @param locator
-     */
-    public void setPageLocator( PageLocator locator )
-    {
-        this.pageLocator = locator;
-    }
-
-    @Override
-    public void init( Configuration configuration )
-        throws ConfigurationException
-    {
-        this.configuration = configuration;
-    }
-
-    @Override
-    public boolean needsReload()
-    {
-        return !initialized;
-    }
-
-    /**
-     * Clears and loads the list of packages registered at construction.
-     *
-     * @throws ConfigurationException
-     */
-    @Override
-    public void loadPackages()
-        throws ConfigurationException
-    {
-        packageLoader = new PackageLoader();
-        String[] names = actionPackages.split( "\\s*[,]\\s*" );
-        // Initialize the classloader scanner with the configured packages
-        if( names.length > 0 )
-        {
-            setPageLocator( new ServletContextPageLocator( servletContext ) );
-        }
-        loadPackages( names );
-        initialized = true;
-    }
-
-    protected void loadPackages( String[] pkgs )
-        throws ConfigurationException
-    {
-        for( Class cls : actionConfiguration.getClasses() )
-        {
-            processActionClass( cls, pkgs );
-        }
-
-        for( PackageConfig config : packageLoader.createPackageConfigs() )
-        {
-            configuration.addPackageConfig( config.getName(), config );
-        }
-    }
-
-    /**
-     * Create a default action mapping for a class instance.
-     *
-     * The namespace annotation is honored, if found, otherwise
-     * the Java package is converted into the namespace
-     * by changing the dots (".") to slashes ("/").
-     *
-     * @param cls  Action or POJO instance to process
-     * @param pkgs List of packages that were scanned for Actions
-     */
-    protected void processActionClass( Class<?> cls, String[] pkgs )
-    {
-        String name = cls.getName();
-        String actionPackage = cls.getPackage().getName();
-        String actionNamespace = null;
-        String actionName = null;
-
-        org.apache.struts2.config.Action actionAnn =
-            (org.apache.struts2.config.Action) cls.getAnnotation( org.apache.struts2.config.Action.class );
-        if( actionAnn != null )
-        {
-            actionName = actionAnn.name();
-            if( actionAnn.namespace().equals( org.apache.struts2.config.Action.DEFAULT_NAMESPACE ) )
-            {
-                actionNamespace = "";
-            }
-            else
-            {
-                actionNamespace = actionAnn.namespace();
-            }
-        }
-        else
-        {
-            for( String pkg : pkgs )
-            {
-                if( name.startsWith( pkg ) )
-                {
-                    if( LOG.isDebugEnabled() )
-                    {
-                        LOG.debug( "ClasspathPackageProvider: Processing class " + name );
-                    }
-                    name = name.substring( pkg.length() + 1 );
-
-                    actionNamespace = "";
-                    actionName = name;
-                    int pos = name.lastIndexOf( '.' );
-                    if( pos > -1 )
-                    {
-                        actionNamespace = "/" + name.substring( 0, pos ).replace( '.', '/' );
-                        actionName = name.substring( pos + 1 );
-                    }
-                    break;
-                }
-            }
-            // Truncate Action suffix if found
-            if( actionName.endsWith( getClassSuffix() ) )
-            {
-                actionName = actionName.substring( 0, actionName.length() - getClassSuffix().length() );
-            }
-
-            // Force initial letter of action to lowercase, if desired
-            if( ( forceLowerCase ) && ( actionName.length() > 1 ) )
-            {
-                int lowerPos = actionName.lastIndexOf( '/' ) + 1;
-                StringBuilder sb = new StringBuilder();
-                sb.append( actionName.substring( 0, lowerPos ) );
-                sb.append( Character.toLowerCase( actionName.charAt( lowerPos ) ) );
-                sb.append( actionName.substring( lowerPos + 1 ) );
-                actionName = sb.toString();
-            }
-        }
-
-        PackageConfig.Builder pkgConfig = loadPackageConfig( actionNamespace, actionPackage, cls );
-
-        // In case the package changed due to namespace annotation processing
-        if( !actionPackage.equals( pkgConfig.getName() ) )
-        {
-            actionPackage = pkgConfig.getName();
-        }
-
-        Annotation annotation = cls.getAnnotation( ParentPackage.class );
-        if( annotation != null )
-        {
-            String parent = ( (ParentPackage) annotation ).value()[0];
-            PackageConfig parentPkg = configuration.getPackageConfig( parent );
-            if( parentPkg == null )
-            {
-                throw new ConfigurationException( "ClasspathPackageProvider: Unable to locate parent package " + parent, annotation );
-            }
-            pkgConfig.addParent( parentPkg );
-
-            if( !isNotEmpty( pkgConfig.getNamespace() ) && isNotEmpty( parentPkg.getNamespace() ) )
-            {
-                pkgConfig.namespace( parentPkg.getNamespace() );
-            }
-        }
-
-        ResultTypeConfig defaultResultType = packageLoader.getDefaultResultType( pkgConfig );
-        ActionConfig actionConfig = new ActionConfig.Builder( actionPackage, actionName, cls.getName() )
-            .addResultConfigs( new ResultMap<String, ResultConfig>( cls, actionName, defaultResultType ) )
-            .build();
-        pkgConfig.addActionConfig( actionName, actionConfig );
-    }
-
-    protected String getClassSuffix()
-    {
-        return ACTION;
-    }
-
-    /**
-     * Finds or creates the package configuration for an Action class.
-     *
-     * The namespace annotation is honored, if found,
-     * and the namespace is checked for a parent configuration.
-     *
-     * @param actionNamespace The configuration namespace
-     * @param actionPackage   The Java package containing our Action classes
-     * @param actionClass     The Action class instance
-     *
-     * @return PackageConfig object for the Action class
-     */
-    protected PackageConfig.Builder loadPackageConfig( String actionNamespace, String actionPackage, Class actionClass )
-    {
-        PackageConfig.Builder parent = null;
-
-        // Check for the @Namespace annotation
-        if( actionClass != null )
-        {
-            Namespace ns = (Namespace) actionClass.getAnnotation( Namespace.class );
-            if( ns != null )
-            {
-                parent = loadPackageConfig( actionNamespace, actionPackage, null );
-                actionNamespace = ns.value();
-                actionPackage = actionClass.getName();
-
-                // See if the namespace has been overridden by the @Action annotation
-            }
-            else
-            {
-                org.apache.struts2.config.Action actionAnn =
-                    (org.apache.struts2.config.Action) actionClass.getAnnotation( org.apache.struts2.config.Action.class );
-                if( actionAnn != null && !actionAnn.DEFAULT_NAMESPACE.equals( actionAnn.namespace() ) )
-                {
-                    // we pass null as the namespace in case the parent package hasn't been loaded yet
-                    parent = loadPackageConfig( null, actionPackage, null );
-                    actionPackage = actionClass.getName();
-                }
-            }
-        }
-
-        PackageConfig.Builder pkgConfig = packageLoader.getPackage( actionPackage );
-        if( pkgConfig == null )
-        {
-            pkgConfig = new PackageConfig.Builder( actionPackage );
-
-            pkgConfig.namespace( actionNamespace );
-            if( parent == null )
-            {
-                PackageConfig cfg = configuration.getPackageConfig( defaultParentPackage );
-                if( cfg != null )
-                {
-                    pkgConfig.addParent( cfg );
-                }
-                else
-                {
-                    throw new ConfigurationException( "ClasspathPackageProvider: Unable to locate default parent package: " +
-                                                      defaultParentPackage );
-                }
-            }
-            packageLoader.registerPackage( pkgConfig );
-
-            // if the parent package was first created by a child, ensure the namespace is correct
-        }
-        else if( pkgConfig.getNamespace() == null )
-        {
-            pkgConfig.namespace( actionNamespace );
-        }
-
-        if( parent != null )
-        {
-            packageLoader.registerChildToParent( pkgConfig, parent );
-        }
-
-        if( LOG.isDebugEnabled() )
-        {
-            LOG.debug( "class:" + actionClass + " parent:" + parent + " current:" + ( pkgConfig != null ? pkgConfig.getName() : "" ) );
-        }
-        return pkgConfig;
-    }
-
-    /**
-     * Creates ResultConfig objects from result annotations,
-     * and if a result isn't found, creates it on the fly.
-     */
-    class ResultMap<K, V>
-        extends HashMap<K, V>
-    {
-        private Class actionClass;
-        private String actionName;
-        private ResultTypeConfig defaultResultType;
-
-        public ResultMap( Class actionClass, String actionName, ResultTypeConfig defaultResultType )
-        {
-            this.actionClass = actionClass;
-            this.actionName = actionName;
-            this.defaultResultType = defaultResultType;
-
-            // check if any annotations are around
-            buildFromAnnotations( actionClass );
-        }
-
-        /**
-         * Recursively finds annotations from all parent classes and interfaces.
-         *
-         * @param actionClass
-         */
-        private void buildFromAnnotations( Class actionClass )
-        {
-            if( actionClass == null || actionClass.getName().equals( Object.class.getName() ) )
-            {
-                return;
-            }
-
-            //noinspection unchecked
-            Results results = (Results) actionClass.getAnnotation( Results.class );
-            if( results != null )
-            {
-                // first check here...
-                for( int i = 0; i < results.value().length; i++ )
-                {
-                    Result result = results.value()[ i ];
-                    ResultConfig config = createResultConfig( result );
-                    if( !containsKey( (K) config.getName() ) )
-                    {
-                        put( (K) config.getName(), (V) config );
-                    }
-                }
-            }
-
-            // what about a single Result annotation?
-            Result result = (Result) actionClass.getAnnotation( Result.class );
-            if( result != null )
-            {
-                ResultConfig config = createResultConfig( result );
-                if( !containsKey( (K) config.getName() ) )
-                {
-                    put( (K) config.getName(), (V) config );
-                }
-            }
-
-            buildFromAnnotations( actionClass.getSuperclass() );
-            for( Class implementedInterface : actionClass.getInterfaces() )
-            {
-                buildFromAnnotations( implementedInterface );
-            }
-        }
-
-        /**
-         * Extracts result name and value and calls {@link #createResultConfig}.
-         *
-         * @param result Result annotation reference representing result type to create
-         *
-         * @return New or cached ResultConfig object for result
-         */
-        protected ResultConfig createResultConfig( Result result )
-        {
-            Class<? extends Object> cls = result.type();
-            if( cls == NullResult.class )
-            {
-                cls = null;
-            }
-            return createResultConfig( result.name(), cls, result.value(), createParameterMap( result.params() ) );
-        }
-
-        protected Map<String, String> createParameterMap( String[] parms )
-        {
-            Map<String, String> map = new HashMap<String, String>();
-            int subtract = parms.length % 2;
-            if( subtract != 0 )
-            {
-                LOG.warn( "Odd number of result parameters key/values specified.  The final one will be ignored." );
-            }
-            for( int i = 0; i < parms.length - subtract; i++ )
-            {
-                String key = parms[ i++ ];
-                String value = parms[ i ];
-                map.put( key, value );
-                if( LOG.isDebugEnabled() )
-                {
-                    LOG.debug( "Adding parmeter[" + key + ":" + value + "] to result." );
-                }
-            }
-            return map;
-        }
-
-        /**
-         * Creates a default ResultConfig,
-         * using either the resultClass or the default ResultType for configuration package
-         * associated this ResultMap class.
-         *
-         * @param key         The result type name
-         * @param resultClass The class for the result type
-         * @param location    Path to the resource represented by this type
-         *
-         * @return A ResultConfig for key mapped to location
-         */
-        private ResultConfig createResultConfig( Object key, Class<? extends Object> resultClass,
-                                                 String location,
-                                                 Map<? extends Object, ? extends Object> configParams
-        )
-        {
-            if( resultClass == null )
-            {
-                configParams = defaultResultType.getParams();
-                String className = defaultResultType.getClassName();
-                try
-                {
-                    resultClass = ClassLoaderUtil.loadClass( className, getClass() );
-                }
-                catch( ClassNotFoundException ex )
-                {
-                    throw new ConfigurationException( "ClasspathPackageProvider: Unable to locate result class " + className, actionClass );
-                }
-            }
-
-            String defaultParam;
-            try
-            {
-                defaultParam = (String) resultClass.getField( "DEFAULT_PARAM" ).get( null );
-            }
-            catch( Exception e )
-            {
-                // not sure why this happened, but let's just use a sensible choice
-                defaultParam = "location";
-            }
-
-            HashMap params = new HashMap();
-            if( configParams != null )
-            {
-                params.putAll( configParams );
-            }
-
-            params.put( defaultParam, location );
-            return new ResultConfig.Builder( (String) key, resultClass.getName() ).addParams( params ).build();
-        }
-    }
-
-    /**
-     * Search classpath for a page.
-     */
-    private final class ServletContextPageLocator
-        implements PageLocator
-    {
-        private final ServletContext context;
-        private ClasspathPageLocator classpathPageLocator = new ClasspathPageLocator();
-
-        private ServletContextPageLocator( ServletContext context )
-        {
-            this.context = context;
-        }
-
-        @Override
-        public URL locate( String path )
-        {
-            URL url = null;
-            try
-            {
-                url = context.getResource( path );
-                if( url == null )
-                {
-                    url = classpathPageLocator.locate( path );
-                }
-            }
-            catch( MalformedURLException e )
-            {
-                if( LOG.isDebugEnabled() )
-                {
-                    LOG.debug( "Unable to resolve path " + path + " against the servlet context" );
-                }
-            }
-            return url;
-        }
-    }
-
-    private static class PackageLoader
-    {
-
-        /**
-         * The package configurations for scanned Actions.
-         */
-        private Map<String, PackageConfig.Builder> packageConfigBuilders = new HashMap<String, PackageConfig.Builder>();
-
-        private Map<PackageConfig.Builder, PackageConfig.Builder> childToParent = new HashMap<PackageConfig.Builder, PackageConfig.Builder>();
-
-        public PackageConfig.Builder getPackage( String name )
-        {
-            return packageConfigBuilders.get( name );
-        }
-
-        public void registerChildToParent( PackageConfig.Builder child, PackageConfig.Builder parent )
-        {
-            childToParent.put( child, parent );
-        }
-
-        public void registerPackage( PackageConfig.Builder builder )
-        {
-            packageConfigBuilders.put( builder.getName(), builder );
-        }
-
-        public Collection<PackageConfig> createPackageConfigs()
-        {
-            Map<String, PackageConfig> configs = new HashMap<String, PackageConfig>();
-
-            Set<PackageConfig.Builder> builders;
-            while( ( builders = findPackagesWithNoParents() ).size() > 0 )
-            {
-                for( PackageConfig.Builder parent : builders )
-                {
-                    PackageConfig config = parent.build();
-                    configs.put( config.getName(), config );
-                    packageConfigBuilders.remove( config.getName() );
-
-                    for( Iterator<Map.Entry<PackageConfig.Builder, PackageConfig.Builder>> i = childToParent.entrySet()
-                        .iterator(); i.hasNext(); )
-                    {
-                        Map.Entry<PackageConfig.Builder, PackageConfig.Builder> entry = i.next();
-                        if( entry.getValue() == parent )
-                        {
-                            entry.getKey().addParent( config );
-                            i.remove();
-                        }
-                    }
-                }
-            }
-            return configs.values();
-        }
-
-        Set<PackageConfig.Builder> findPackagesWithNoParents()
-        {
-            Set<PackageConfig.Builder> builders = new HashSet<PackageConfig.Builder>();
-            for( PackageConfig.Builder child : packageConfigBuilders.values() )
-            {
-                if( !childToParent.containsKey( child ) )
-                {
-                    builders.add( child );
-                }
-            }
-            return builders;
-        }
-
-        public ResultTypeConfig getDefaultResultType( PackageConfig.Builder pkgConfig )
-        {
-            PackageConfig.Builder parent;
-            PackageConfig.Builder current = pkgConfig;
-
-            while( ( parent = childToParent.get( current ) ) != null )
-            {
-                current = parent;
-            }
-            return current.getResultType( current.getFullDefaultResultType() );
-        }
-    }
-
-    public static boolean isNotEmpty( String text )
-    {
-        return ( text != null ) && !"".equals( text );
-    }
-}
diff --git a/libraries/struts2-codebehind/src/main/java/org/qi4j/library/struts2/codebehind/bootstrap/CodebehindAssembler.java b/libraries/struts2-codebehind/src/main/java/org/qi4j/library/struts2/codebehind/bootstrap/CodebehindAssembler.java
deleted file mode 100644
index 2d18c73..0000000
--- a/libraries/struts2-codebehind/src/main/java/org/qi4j/library/struts2/codebehind/bootstrap/CodebehindAssembler.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.qi4j.library.struts2.codebehind.bootstrap;
-
-import org.qi4j.bootstrap.Assembler;
-import org.qi4j.bootstrap.AssemblyException;
-import org.qi4j.bootstrap.ModuleAssembly;
-import org.qi4j.library.struts2.codebehind.Qi4jCodebehindPackageProvider;
-
-public class CodebehindAssembler
-    implements Assembler
-{
-
-    @Override
-    public void assemble( ModuleAssembly aModule )
-        throws AssemblyException
-    {
-        aModule.objects( Qi4jCodebehindPackageProvider.class );
-    }
-}
diff --git a/libraries/struts2-codebehind/src/main/java/org/qi4j/library/struts2/codebehind/package.html b/libraries/struts2-codebehind/src/main/java/org/qi4j/library/struts2/codebehind/package.html
deleted file mode 100644
index 0b947fb..0000000
--- a/libraries/struts2-codebehind/src/main/java/org/qi4j/library/struts2/codebehind/package.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<html>
-    <body>
-        <h2>Struts 2 CodeBehind Integration.</h2>
-    </body>
-</html>
\ No newline at end of file
diff --git a/libraries/struts2-convention/build.gradle b/libraries/struts2-convention/build.gradle
deleted file mode 100644
index 4da7550..0000000
--- a/libraries/struts2-convention/build.gradle
+++ /dev/null
@@ -1,14 +0,0 @@
-description = "Qi4j Struts Library allows integration of Qi4j into Struts2 applications."
-
-jar { manifest { name = "Qi4j Library - Struts2 - Convention" }}
-
-dependencies {
-  compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
-  compile( project( ':org.qi4j.libraries:org.qi4j.library.struts2-plugin' ) )
-  compile(libraries.struts_convention)
-
-  testCompile(project(":org.qi4j.core:org.qi4j.core.testsupport"))
-
-  testRuntime(project(":org.qi4j.core:org.qi4j.core.runtime"))
-  testRuntime(libraries.logback)
-}
\ No newline at end of file
diff --git a/libraries/struts2-convention/dev-status.xml b/libraries/struts2-convention/dev-status.xml
deleted file mode 100644
index 654d3aa..0000000
--- a/libraries/struts2-convention/dev-status.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
-        http://www.qi4j.org/schemas/2008/dev-status/1/dev-status.xsd">
-  <status>
-    <!--none,early,beta,stable,mature-->
-    <codebase>beta</codebase>
-
-    <!-- none, brief, good, complete -->
-    <documentation>none</documentation>
-
-    <!-- none, some, good, complete -->
-    <unittests>some</unittests>
-  </status>
-  <licenses>
-    <license>ALv2</license>
-  </licenses>
-</module>
\ No newline at end of file
diff --git a/libraries/struts2-convention/src/docs/struts-convention.txt b/libraries/struts2-convention/src/docs/struts-convention.txt
deleted file mode 100644
index 405ebbc..0000000
--- a/libraries/struts2-convention/src/docs/struts-convention.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-[[library-struts-convention, Struts Convention Library]]
-= Struts - Convention =
-
-[devstatus]
---------------
-source=libraries/struts2-convention/dev-status.xml
---------------
-
-Struts Convention Library
-
-NOTE: This Library has no documentation yet. Learn how to contribute in <<community-docs>>.
-
-include::../../build/docs/buildinfo/artifact.txt[]
diff --git a/libraries/struts2-convention/src/main/java/org/qi4j/library/struts2/convention/Qi4jPackageBasedActionConfigBuilder.java b/libraries/struts2-convention/src/main/java/org/qi4j/library/struts2/convention/Qi4jPackageBasedActionConfigBuilder.java
deleted file mode 100644
index 6604dd8..0000000
--- a/libraries/struts2-convention/src/main/java/org/qi4j/library/struts2/convention/Qi4jPackageBasedActionConfigBuilder.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package org.qi4j.library.struts2.convention;
-
-import com.opensymphony.xwork2.ObjectFactory;
-import com.opensymphony.xwork2.config.Configuration;
-import com.opensymphony.xwork2.inject.Container;
-import com.opensymphony.xwork2.inject.Inject;
-import java.lang.reflect.Modifier;
-import org.apache.struts2.convention.PackageBasedActionConfigBuilder;
-import org.qi4j.library.struts2.ActionConfiguration;
-
-public class Qi4jPackageBasedActionConfigBuilder
-    extends PackageBasedActionConfigBuilder
-{
-
-    private final ActionConfiguration actionConfiguration;
-
-    @Inject
-    public Qi4jPackageBasedActionConfigBuilder( Configuration configuration, Container container,
-                                                ObjectFactory objectFactory,
-                                                @Inject( "struts.convention.redirect.to.slash" ) String redirectToSlash,
-                                                @Inject( "struts.convention.default.parent.package" ) String defaultParentPackage,
-                                                ActionConfiguration actionConfiguration
-    )
-    {
-        super( configuration, container, objectFactory, redirectToSlash, defaultParentPackage );
-        this.actionConfiguration = actionConfiguration;
-    }
-
-    @Override
-    public void buildActionConfigs()
-    {
-        buildConfiguration( actionConfiguration.getClasses() );
-    }
-
-    @Override
-    protected boolean cannotInstantiate( Class<?> actionClass )
-    {
-        return actionClass.isAnnotation()
-               || actionClass.isEnum()
-               || ( !actionClass.isInterface() && ( actionClass.getModifiers() & Modifier.ABSTRACT ) != 0 );
-    }
-}
diff --git a/libraries/struts2-convention/src/main/java/org/qi4j/library/struts2/convention/Qi4jPackageProvider.java b/libraries/struts2-convention/src/main/java/org/qi4j/library/struts2/convention/Qi4jPackageProvider.java
deleted file mode 100644
index ff58d48..0000000
--- a/libraries/struts2-convention/src/main/java/org/qi4j/library/struts2/convention/Qi4jPackageProvider.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package org.qi4j.library.struts2.convention;
-
-import com.opensymphony.xwork2.config.Configuration;
-import com.opensymphony.xwork2.config.ConfigurationException;
-import com.opensymphony.xwork2.config.PackageProvider;
-import com.opensymphony.xwork2.inject.Inject;
-import org.apache.struts2.convention.ActionConfigBuilder;
-
-public class Qi4jPackageProvider implements PackageProvider {
-
-    private ActionConfigBuilder actionConfigBuilder;
-
-    @Inject("qi4j")
-    public Qi4jPackageProvider(ActionConfigBuilder actionConfigBuilder) {
-        this.actionConfigBuilder = actionConfigBuilder;
-    }
-
-    @Override
-    public void init(Configuration configuration) throws ConfigurationException {
-    }
-
-    @Override
-    public void loadPackages() throws ConfigurationException {
-        actionConfigBuilder.buildActionConfigs();
-    }
-
-    @Override
-    public boolean needsReload() {
-        return false;
-    }
-
-}
diff --git a/libraries/struts2-convention/src/main/java/org/qi4j/library/struts2/convention/package.html b/libraries/struts2-convention/src/main/java/org/qi4j/library/struts2/convention/package.html
deleted file mode 100644
index b8c9db4..0000000
--- a/libraries/struts2-convention/src/main/java/org/qi4j/library/struts2/convention/package.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<html>
-    <body>
-        <h2>Struts 2 Convention Integration.</h2>
-    </body>
-</html>
\ No newline at end of file
diff --git a/libraries/struts2-convention/src/main/resources/struts-plugin.xml b/libraries/struts2-convention/src/main/resources/struts-plugin.xml
deleted file mode 100644
index 0eb7ef4..0000000
--- a/libraries/struts2-convention/src/main/resources/struts-plugin.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE struts PUBLIC
-  "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-  "http://struts.apache.org/dtds/struts-2.0.dtd">
-
-<struts>
-  <bean type="org.apache.struts2.convention.ActionConfigBuilder" name="qi4j"
-        class="org.qi4j.library.struts2.convention.Qi4jPackageBasedActionConfigBuilder"/>
-
-  <bean type="com.opensymphony.xwork2.config.PackageProvider" name="qi4j"
-        class="org.qi4j.library.struts2.convention.Qi4jPackageProvider"/>
-</struts>
diff --git a/libraries/struts2-plugin/build.gradle b/libraries/struts2-plugin/build.gradle
deleted file mode 100644
index 4e75ab5..0000000
--- a/libraries/struts2-plugin/build.gradle
+++ /dev/null
@@ -1,15 +0,0 @@
-description = "Qi4j Struts Library allows integration of Qi4j into Struts2 applications."
-
-jar { manifest { name = "Qi4j Library - Struts2" }}
-
-dependencies {
-  compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
-  compile(libraries.struts_core)
-  compile(libraries.freemarker)
-  compile(libraries.servlet_api)
-
-  testCompile(project(":org.qi4j.core:org.qi4j.core.testsupport"))
-
-  testRuntime(project(":org.qi4j.core:org.qi4j.core.runtime"))
-  testRuntime(libraries.logback)
-}
\ No newline at end of file
diff --git a/libraries/struts2-plugin/dev-status.xml b/libraries/struts2-plugin/dev-status.xml
deleted file mode 100644
index 654d3aa..0000000
--- a/libraries/struts2-plugin/dev-status.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
-        http://www.qi4j.org/schemas/2008/dev-status/1/dev-status.xsd">
-  <status>
-    <!--none,early,beta,stable,mature-->
-    <codebase>beta</codebase>
-
-    <!-- none, brief, good, complete -->
-    <documentation>none</documentation>
-
-    <!-- none, some, good, complete -->
-    <unittests>some</unittests>
-  </status>
-  <licenses>
-    <license>ALv2</license>
-  </licenses>
-</module>
\ No newline at end of file
diff --git a/libraries/struts2-plugin/src/docs/struts-plugin.txt b/libraries/struts2-plugin/src/docs/struts-plugin.txt
deleted file mode 100644
index 05e22ff..0000000
--- a/libraries/struts2-plugin/src/docs/struts-plugin.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-[[library-struts-plugin, Struts Plugin Library]]
-= Struts - Plugin =
-
-[devstatus]
---------------
-source=libraries/struts2-plugin/dev-status.xml
---------------
-
-Struts Plugin Library
-
-NOTE: This Library has no documentation yet. Learn how to contribute in <<community-docs>>.
-
-include::../../build/docs/buildinfo/artifact.txt[]
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/ActionConfiguration.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/ActionConfiguration.java
deleted file mode 100644
index bdd38b8..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/ActionConfiguration.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package org.qi4j.library.struts2;
-
-import java.io.Serializable;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-import org.qi4j.api.common.Visibility;
-import org.qi4j.api.composite.Composite;
-import org.qi4j.api.composite.TransientComposite;
-import org.qi4j.bootstrap.Assembler;
-import org.qi4j.bootstrap.AssemblyException;
-import org.qi4j.bootstrap.ModuleAssembly;
-
-public class ActionConfiguration
-    implements Assembler, Serializable
-{
-    static final long serialVersionUID = 1L;
-
-    private final Set<Class> objectTypes;
-    private final Set<Class<? extends Composite>> compositeTypes;
-
-    public ActionConfiguration()
-    {
-        compositeTypes = new HashSet<Class<? extends Composite>>();
-        objectTypes = new HashSet<Class>();
-    }
-
-    public void addObjects( Class... objectTypes )
-        throws AssemblyException
-    {
-        this.objectTypes.addAll( Arrays.asList( objectTypes ) );
-    }
-
-    public void addComposites( Class<? extends Composite>... compositeTypes )
-        throws AssemblyException
-    {
-        this.compositeTypes.addAll( Arrays.asList( compositeTypes ) );
-    }
-
-    public Set<Class> getClasses()
-    {
-        Set<Class> classes = new HashSet<Class>( objectTypes );
-        classes.addAll( compositeTypes );
-        return Collections.unmodifiableSet( classes );
-    }
-
-    @Override
-    public void assemble( ModuleAssembly module )
-        throws AssemblyException
-    {
-        module.objects( objectTypes.toArray( new Class[]{ } ) ).visibleIn( Visibility.module );
-        module.transients( (Class<? extends TransientComposite>[]) compositeTypes.toArray( new Class[]{ } ) )
-            .visibleIn( Visibility.module );
-    }
-}
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/ActionService.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/ActionService.java
deleted file mode 100644
index 66d99ae..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/ActionService.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package org.qi4j.library.struts2;
-
-import org.qi4j.api.service.ServiceComposite;
-
-public interface ActionService
-    extends ServiceComposite
-{
-}
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Constants.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Constants.java
deleted file mode 100644
index a8476f2..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Constants.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*  Copyright 2008 Edward Yakop.
- *
- * Licensed 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.qi4j.library.struts2;
-
-public class Constants
-{
-    public static String SERVLET_ATTRIBUTE = "qi4j.application.initializer";
-}
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/ConstraintViolationInterceptor.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/ConstraintViolationInterceptor.java
deleted file mode 100644
index a099cbf..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/ConstraintViolationInterceptor.java
+++ /dev/null
@@ -1,213 +0,0 @@
-package org.qi4j.library.struts2;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.ValidationAware;
-import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
-import com.opensymphony.xwork2.interceptor.PreResultListener;
-import com.opensymphony.xwork2.util.ValueStack;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import org.qi4j.api.Qi4j;
-import org.qi4j.api.composite.Composite;
-import org.qi4j.api.constraint.ConstraintViolation;
-import org.qi4j.library.struts2.util.ClassNameMapper;
-
-import static java.util.Collections.emptyMap;
-import static org.qi4j.library.struts2.util.ClassNameFilters.removeSuffixes;
-import static org.qi4j.library.struts2.util.ClassNames.classNameInDotNotation;
-
-/**
- * <p>ConstraintViolationInterceptor adds constraint violations from the ActionContext to the Action's field errors.</p>
- *
- * <p>This interceptor adds any error found in the {@link ActionContext}'s constraint violations map as a field error
- * (provided that the action implements {@link ValidationAware}). In addition, any field that contains a constraint
- * violation has its original value saved such that any subsequent requests for that value return the original value
- * rather than the value in the action. This is important because if the value "abc" is submitted and can't be set
- * on a property requiring at least 5 characters, we want to display the original string ("abc") again rather than the
- * original value (likely an empty string, which would make very little sense to the user).</p>
- *
- * <p>This is similar, in principle, to the XWork ConversionErrorInterceptor and much of the code is reflects that.</p>
- */
-public class ConstraintViolationInterceptor
-    extends AbstractInterceptor
-{
-    static final long serialVersionUID = 1L;
-
-    public static final String CONTEXT_CONSTRAINT_VIOLATIONS = ConstraintViolationInterceptor.class.getName() + ".constraintViolations";
-
-    protected Object getOverrideExpr( ActionInvocation invocation, FieldConstraintViolations violations )
-    {
-        return "'" + violations.value() + "'";
-    }
-
-    @Override
-    public String intercept( ActionInvocation invocation )
-        throws Exception
-    {
-        ActionContext invocationContext = invocation.getInvocationContext();
-        ValueStack stack = invocationContext.getValueStack();
-
-        Object action = invocation.getAction();
-        if( action instanceof ValidationAware )
-        {
-            ValidationAware va = (ValidationAware) action;
-            HashMap<Object, Object> propertyOverrides = new HashMap<Object, Object>();
-            for( Map.Entry<String, FieldConstraintViolations> fieldViolations : fieldConstraintViolations( invocationContext )
-                .entrySet() )
-            {
-                addConstraintViolationFieldErrors( stack, va, fieldViolations.getKey(), fieldViolations.getValue() );
-                propertyOverrides.put( fieldViolations.getKey(), getOverrideExpr( invocation, fieldViolations.getValue() ) );
-            }
-            // if there were some errors, put the original (fake) values in place right before the result
-            if( !propertyOverrides.isEmpty() )
-            {
-                overrideActionValues( invocation, stack, propertyOverrides );
-            }
-        }
-
-        return invocation.invoke();
-    }
-
-    private void overrideActionValues(
-        ActionInvocation invocation, ValueStack stack, final HashMap<Object, Object> propertyOverrides
-    )
-    {
-        invocation.addPreResultListener( new PreResultListener()
-        {
-            @Override
-            public void beforeResult( ActionInvocation invocation, String resultCode )
-            {
-                invocation.getStack().setExprOverrides( propertyOverrides );
-            }
-        } );
-    }
-
-    private void addConstraintViolationFieldErrors(
-        ValueStack stack, ValidationAware va, String fieldName, FieldConstraintViolations violations
-    )
-    {
-        for( ConstraintViolation constraintViolation : violations.constraintViolations() )
-        {
-            Object target = violations.target();
-            String message = message( target, violations.propertyName(), constraintViolation, stack );
-            va.addFieldError( fieldName, message );
-        }
-    }
-
-    @SuppressWarnings( "unchecked" )
-    private Map<String, FieldConstraintViolations> fieldConstraintViolations( ActionContext context )
-    {
-        Map<String, FieldConstraintViolations> violations =
-            (Map<String, FieldConstraintViolations>) context.get( CONTEXT_CONSTRAINT_VIOLATIONS );
-        if( violations == null )
-        {
-            return emptyMap();
-        }
-
-        return violations;
-    }
-
-    protected String message( Object target,
-                              String propertyName,
-                              ConstraintViolation constraintViolation,
-                              ValueStack stack
-    )
-    {
-        String messageKey = messageKey( target, propertyName, constraintViolation );
-        String getTextExpression = "getText('" + messageKey + "')";
-        String message = (String) stack.findValue( getTextExpression );
-
-        if( message == null )
-        {
-            message = messageKey;
-        }
-
-        return message;
-    }
-
-    /**
-     * <p>The message key is generated based on the type of the target, the name of the property and the type of the
-     * constraint violation.  So, if the target has type ItemEntity with a name property that has a not empty constraint
-     * and the user doesn't enter anything for the value, the corresponding message key would be
-     * 'item.name.not.empty.constraint.violated'.</p>
-     *
-     * <p>Note that if the type name of the target ends with 'Composite' or 'Entity', those will be removed and the
-     * rest of the name will be converted from camel-case to a dot notation.  This is true of the constraint types as
-     * well.  So a constraint named NotEmpty will be converted to not.empty as in the example above.</p>
-     * @param target JAVADOC
-     * @param propertyName JAVADOC
-     * @param violation JAVADOC
-     * @return JAVADOC
-     */
-    protected String messageKey( Object target, String propertyName, ConstraintViolation violation )
-    {
-        Iterable<Class<?>> types;
-        if( target instanceof Composite )
-        {
-            Composite composite = (Composite) target;
-            types = Qi4j.FUNCTION_DESCRIPTOR_FOR.map( composite ).types();
-        }
-        else
-        {
-            ArrayList<Class<?>> list = new ArrayList<Class<?>>( 1 );
-            list.add(target.getClass());
-            types = list;
-        }
-
-        return classNameInDotNotation( types, withoutCompositeOrEntitySuffix )
-               + "." + propertyName
-               + "." + constraintKeyPart( violation )
-               + ".constraint.violated";
-    }
-
-    private static final ClassNameMapper withoutCompositeOrEntitySuffix = removeSuffixes( "Composite", "Entity" );
-
-    private String constraintKeyPart( ConstraintViolation constraintViolation )
-    {
-        return classNameInDotNotation( constraintViolation.constraint().annotationType() );
-    }
-
-    public static class FieldConstraintViolations
-    {
-        private final Object target;
-        private final String propertyName;
-        private final Object value;
-        private final Collection<ConstraintViolation> constraintViolations;
-
-        public FieldConstraintViolations(
-            Object aTarget,
-            String aPropertyName,
-            Object aValue,
-            Collection<ConstraintViolation> constraintViolations
-        )
-        {
-            target = aTarget;
-            propertyName = aPropertyName;
-            value = aValue;
-            this.constraintViolations = constraintViolations;
-        }
-
-        public Object target()
-        {
-            return target;
-        }
-
-        public String propertyName()
-        {
-            return propertyName;
-        }
-
-        public Object value()
-        {
-            return value;
-        }
-
-        public Collection<ConstraintViolation> constraintViolations()
-        {
-            return constraintViolations;
-        }
-    }
-}
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/EntityCompositeConverter.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/EntityCompositeConverter.java
deleted file mode 100644
index ce50167..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/EntityCompositeConverter.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package org.qi4j.library.struts2;
-
-import com.opensymphony.xwork2.inject.Inject;
-import java.util.Map;
-import org.apache.struts2.util.StrutsTypeConverter;
-import org.qi4j.api.entity.EntityComposite;
-import org.qi4j.api.unitofwork.UnitOfWork;
-import org.qi4j.api.unitofwork.UnitOfWorkFactory;
-
-/**
- * <p>Converts Strings to entities and entities to strings.</p>
- *
- * <p>To convert from a string to an entity the value passed in is expected to be an identity.  The identity can
- * be either a fully qualified identity, e.g org.qi4j.example.Person:368e27f0-ea39-497a-9069-ffb5f41bf174-0, or it can
- * be just the uuid.</p>
- *
- * <p>Conversion to a String is done using the EntityComposites identity and and returning just the uuid portion.</p>
- */
-public class EntityCompositeConverter
-    extends StrutsTypeConverter
-{
-    private UnitOfWorkFactory uowf;
-
-    @Inject
-    public void setUnitOfWorkFactory( UnitOfWorkFactory uowf )
-    {
-        this.uowf = uowf;
-    }
-
-    @Override
-    public Object convertFromString( Map context, String[] values, Class toClass )
-    {
-        String identity = extractIdentity( values );
-        UnitOfWork uow = uowf.currentUnitOfWork();
-        return uow.get( toClass, identity );
-    }
-
-    @Override
-    public String convertToString( Map context, Object o )
-    {
-        return ( (EntityComposite) o ).identity().get();
-    }
-
-    private String extractIdentity( String[] values )
-    {
-        String identity = values[ 0 ];
-        int separatorIndex = identity.indexOf( ':' );
-        if( separatorIndex == -1 )
-        {
-            return identity;
-        }
-        return identity = identity.substring( separatorIndex + 1 );
-    }
-}
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Qi4jApplicationBootstrapListener.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Qi4jApplicationBootstrapListener.java
deleted file mode 100644
index ee9cb9e..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Qi4jApplicationBootstrapListener.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*  Copyright 2008 Edward Yakop.
- *
- * Licensed 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.qi4j.library.struts2;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
-import org.qi4j.api.structure.Application;
-import org.qi4j.api.structure.Module;
-import org.qi4j.bootstrap.ApplicationAssembler;
-import org.qi4j.bootstrap.AssemblyException;
-import org.qi4j.bootstrap.Energy4Java;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static org.qi4j.library.struts2.Constants.SERVLET_ATTRIBUTE;
-
-public abstract class Qi4jApplicationBootstrapListener
-    implements ServletContextListener
-{
-    private static final Logger LOG = LoggerFactory.getLogger( Qi4jApplicationBootstrapListener.class );
-
-    private Application application;
-
-    @Override
-    public final void contextInitialized( ServletContextEvent sce )
-    {
-        LOG.info( "Qi4j Plugin: Initializing" );
-
-        ServletContext context = sce.getServletContext();
-        application = createNewApplication( context );
-
-        if( application != null )
-        {
-            Module module = qi4jStrutsModule( application );
-            context.setAttribute( SERVLET_ATTRIBUTE, module );
-
-            try
-            {
-                application.activate();
-            }
-            catch( Exception e )
-            {
-                throw new IllegalStateException( e );
-            }
-        }
-        else
-        {
-            throw new IllegalStateException( "None of the assembly creation methods returned a non-null assembler" );
-        }
-        LOG.info( "... initialized qi4j-struts integration successfully" );
-    }
-
-    /**
-     * @param application Qi4j application.
-     *
-     * @return Qi4j struts module.
-     */
-    protected abstract Module qi4jStrutsModule( Application application );
-
-    private Application createNewApplication( ServletContext context )
-    {
-        Energy4Java qi4j = new Energy4Java();
-
-        // Try create assembler
-        final ApplicationAssembler assembler = createAssembler();
-        if( assembler != null )
-        {
-            try
-            {
-                return qi4j.newApplication( assembler );
-            }
-            catch( AssemblyException e )
-            {
-                throw new IllegalStateException( e );
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     * Override this method to create an application assembler.
-     *
-     * @return An application assembler.
-     */
-    protected ApplicationAssembler createAssembler()
-    {
-        return null;
-    }
-
-    @Override
-    public final void contextDestroyed( ServletContextEvent sce )
-    {
-        try
-        {
-            application.passivate();
-        }
-        catch( Exception e )
-        {
-            throw new IllegalStateException( e );
-        }
-    }
-}
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Qi4jFilterDispatcher.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Qi4jFilterDispatcher.java
deleted file mode 100644
index ddc0aae..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Qi4jFilterDispatcher.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package org.qi4j.library.struts2;
-
-import com.opensymphony.xwork2.config.Configuration;
-import com.opensymphony.xwork2.config.ConfigurationException;
-import com.opensymphony.xwork2.config.ConfigurationManager;
-import com.opensymphony.xwork2.config.ContainerProvider;
-import com.opensymphony.xwork2.inject.ContainerBuilder;
-import com.opensymphony.xwork2.inject.Context;
-import com.opensymphony.xwork2.inject.Factory;
-import com.opensymphony.xwork2.util.location.LocatableProperties;
-import javax.servlet.FilterConfig;
-import org.apache.struts2.config.BeanSelectionProvider;
-import org.apache.struts2.dispatcher.Dispatcher;
-import org.apache.struts2.dispatcher.FilterDispatcher;
-import org.qi4j.api.composite.TransientBuilderFactory;
-import org.qi4j.api.object.ObjectFactory;
-import org.qi4j.api.structure.Module;
-import org.qi4j.api.unitofwork.UnitOfWorkFactory;
-
-import static org.qi4j.library.struts2.Constants.SERVLET_ATTRIBUTE;
-
-public class Qi4jFilterDispatcher
-    extends FilterDispatcher
-{
-    @Override
-    protected Dispatcher createDispatcher( final FilterConfig filterConfig )
-    {
-        Dispatcher dispatcher = super.createDispatcher( filterConfig );
-        ConfigurationManager configurationManager = createConfigurationManager( filterConfig );
-        dispatcher.setConfigurationManager( configurationManager );
-        return dispatcher;
-    }
-
-    protected ConfigurationManager createConfigurationManager( FilterConfig filterConfig )
-    {
-        ConfigurationManager configurationManager = new ConfigurationManager( BeanSelectionProvider.DEFAULT_BEAN_NAME );
-        configurationManager.addContainerProvider( new Qi4jContainerProvider( module( filterConfig ) ) );
-        return configurationManager;
-    }
-
-    private Module module( FilterConfig filterConfig )
-    {
-        return (Module) filterConfig.getServletContext().getAttribute( SERVLET_ATTRIBUTE );
-    }
-
-    class Qi4jContainerProvider
-        implements ContainerProvider
-    {
-        private final Module module;
-        private boolean registered = false;
-
-        Qi4jContainerProvider( Module aModule )
-        {
-            module = aModule;
-        }
-
-        @Override
-        public void register( ContainerBuilder builder, LocatableProperties props )
-            throws ConfigurationException
-        {
-            factory( builder, UnitOfWorkFactory.class, module );
-            factory( builder, ObjectFactory.class, module );
-            factory( builder, TransientBuilderFactory.class, module );
-            factory( builder, ActionConfiguration.class, actionConfiguration() );
-            registered = true;
-        }
-
-        @Override
-        public boolean needsReload()
-        {
-            return !registered;
-        }
-
-        @Override
-        public void init( Configuration configuration )
-            throws ConfigurationException
-        {
-        }
-
-        @Override
-        public void destroy()
-        {
-        }
-
-        private <T> void factory( ContainerBuilder builder, Class<T> type, final T value )
-        {
-            builder.factory( type, new Factory<T>()
-            {
-                @Override
-                public T create( Context context )
-                {
-                    return value;
-                }
-            } );
-        }
-
-        private ActionConfiguration actionConfiguration()
-        {
-            return module.findService( ActionService.class ).metaInfo( ActionConfiguration.class );
-        }
-    }
-}
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Qi4jObjectFactory.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Qi4jObjectFactory.java
deleted file mode 100644
index 42fd19b..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Qi4jObjectFactory.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*  Copyright 2008 Edward Yakop.
- *
- * Licensed 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.qi4j.library.struts2;
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.inject.Inject;
-import java.util.HashMap;
-import java.util.Map;
-import org.apache.struts2.util.ObjectFactoryDestroyable;
-import org.qi4j.api.common.ConstructionException;
-import org.qi4j.api.composite.NoSuchTransientException;
-import org.qi4j.api.composite.TransientBuilderFactory;
-import org.qi4j.api.object.NoSuchObjectException;
-import org.qi4j.api.object.ObjectFactory;
-
-import static org.qi4j.library.struts2.Qi4jObjectFactory.ClassType.*;
-
-/**
- * Qi4j implementation of struts object factory.
- */
-public class Qi4jObjectFactory
-    extends com.opensymphony.xwork2.ObjectFactory
-    implements ObjectFactoryDestroyable
-{
-    private static final long serialVersionUID = 1L;
-
-    static enum ClassType
-    {
-        qi4jComposite,
-        qi4jObject,
-        object
-    }
-
-    private final Map<Class, ClassType> types;
-
-    private ObjectFactory objectFactory;
-    private TransientBuilderFactory compositeBuilderFactory;
-
-    public Qi4jObjectFactory()
-    {
-        types = new HashMap<Class, ClassType>();
-    }
-
-    @Inject
-    public void setObjectFactory( ObjectFactory objectFactory )
-    {
-        this.objectFactory = objectFactory;
-    }
-
-    @Inject
-    public void setCompositeBuilderFactory( TransientBuilderFactory compositeBuilderFactory )
-    {
-        this.compositeBuilderFactory = compositeBuilderFactory;
-    }
-
-    /**
-     * Build a generic Java object of the given type.
-     *
-     * @param classType    Type of Object to build
-     * @param extraContext A map of extra context which uses the same keys as the {@link ActionContext}
-     */
-    @Override
-    @SuppressWarnings( "unchecked" )
-    public Object buildBean( Class classType, Map extraContext )
-        throws Exception
-    {
-        // TODO: What to do with extraContext
-
-        ClassType type = types.get( classType );
-        if( type != null )
-        {
-            switch( type )
-            {
-            case object:
-                return createStandardObject( classType, false );
-            case qi4jComposite:
-                return createQi4jComposite( classType, false );
-            case qi4jObject:
-                return createQi4jObject( classType, false );
-            }
-        }
-
-        // Figure out what kind of object is this.
-        Object object = createQi4jComposite( classType, true );
-        if( object == null )
-        {
-            object = createQi4jObject( classType, true );
-
-            if( object == null )
-            {
-                object = createStandardObject( classType, true );
-            }
-        }
-
-        return object;
-    }
-
-    private Object createStandardObject( Class aClass, boolean isAddToTypes )
-        throws Exception
-    {
-        Object obj = null;
-        Exception exception = null;
-        try
-        {
-            obj = aClass.newInstance();
-        }
-        catch( InstantiationException e )
-        {
-            exception = e;
-        }
-        catch( IllegalAccessException e )
-        {
-            exception = e;
-        }
-
-        if( isAddToTypes )
-        {
-            addToType( aClass, object );
-        }
-
-        if( exception != null )
-        {
-            throw exception;
-        }
-
-        return obj;
-    }
-
-    @SuppressWarnings( "unchecked" )
-    private Object createQi4jObject( Class aClass, boolean isAddToTypes )
-    {
-        if( objectFactory == null )
-        {
-            return null;
-        }
-
-        ConstructionException exception = null;
-        Object obj = null;
-
-        try
-        {
-            obj = objectFactory.newObject( aClass );
-        }
-        catch( NoSuchObjectException e )
-        {
-            return null;
-        }
-        catch( ConstructionException e )
-        {
-            exception = e;
-        }
-
-        if( isAddToTypes )
-        {
-            addToType( aClass, qi4jObject );
-        }
-
-        if( exception != null )
-        {
-            throw exception;
-        }
-
-        return obj;
-    }
-
-    @SuppressWarnings( "unchecked" )
-    private Object createQi4jComposite( Class aClass, boolean isAddToTypes )
-    {
-        if( compositeBuilderFactory == null )
-        {
-            return null;
-        }
-
-        Object obj = null;
-        ConstructionException exception = null;
-
-        try
-        {
-            obj = compositeBuilderFactory.newTransient( aClass );
-        }
-        catch( NoSuchTransientException e )
-        {
-            return null;
-        }
-        catch( ConstructionException e )
-        {
-            exception = e;
-        }
-
-        if( isAddToTypes )
-        {
-            addToType( aClass, qi4jComposite );
-        }
-
-        if( exception != null )
-        {
-            throw exception;
-        }
-
-        return obj;
-    }
-
-    private void addToType( Class aClass, ClassType aClassType )
-    {
-        synchronized( types )
-        {
-            types.put( aClass, aClassType );
-        }
-    }
-
-    /**
-     * Allows for ObjectFactory implementations that support Actions without no-arg constructors.
-     *
-     * @return {@code false}.
-     */
-    @Override
-    public boolean isNoArgConstructorRequired()
-    {
-        return false;
-    }
-
-    @Override
-    public final void destroy()
-    {
-        types.clear();
-    }
-}
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Qi4jPropertyAccessor.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Qi4jPropertyAccessor.java
deleted file mode 100644
index 673de8b..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/Qi4jPropertyAccessor.java
+++ /dev/null
@@ -1,214 +0,0 @@
-package org.qi4j.library.struts2;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import ognl.MethodFailedException;
-import ognl.ObjectMethodAccessor;
-import ognl.ObjectPropertyAccessor;
-import ognl.OgnlContext;
-import ognl.OgnlException;
-import ognl.OgnlRuntime;
-import org.qi4j.api.Qi4j;
-import org.qi4j.api.association.Association;
-import org.qi4j.api.association.ManyAssociation;
-import org.qi4j.api.association.NamedAssociation;
-import org.qi4j.api.constraint.ConstraintViolation;
-import org.qi4j.api.constraint.ConstraintViolationException;
-import org.qi4j.api.injection.scope.Structure;
-import org.qi4j.api.property.Property;
-import org.qi4j.library.struts2.ConstraintViolationInterceptor.FieldConstraintViolations;
-
-import static com.opensymphony.xwork2.conversion.impl.XWorkConverter.CONVERSION_PROPERTY_FULLNAME;
-import static ognl.OgnlRuntime.getConvertedType;
-import static ognl.OgnlRuntime.getFieldValue;
-import static org.qi4j.library.struts2.ConstraintViolationInterceptor.CONTEXT_CONSTRAINT_VIOLATIONS;
-
-/**
- * <p>An implementation of the ObjectPropertyAccessor that provides conversion for Qi4j properties.  The typical way that
- * OGNL gets/sets object attributes is by finding the corresponding JavaBean getter/setter methods.  This
- * ObjectPropertyAccessor checks if there is a Qi4j property on the Composite and if there is uses the properties
- * get/set methods.</p>
- *
- * <p>When setting Property values, if a ConstraintViolationException is thrown it is added to the context so that
- * it can be processed and by the ConstraintViolationInterceptor, similar to how conversion exceptions are handled by
- * the ConversionErrorInterceptor</p>
- *
- * <p>When setting Association values, we attempt to convert the value to the association type using the normal XWork
- * converter mechanisms.  If the type is an EntityComposite, we already have a converter registered
- * {@link EntityCompositeConverter} to handle conversion from a string identity to an object.  If the type is not an
- * EntityComposite, but the actual values are EntityComposites, you can register the {@link EntityCompositeConverter}
- * for your type in your xwork-conversion.properties file.</p>
- *
- * <p>NOTE: We can't do this as a regular converter because Qi4j composites doesn't (nor should it be) following the
- * JavaBean standard.  We might be able to only override the getProperty() method here and have regular converters for
- * Property, Association and SetAssociation but I haven't tried that yet so it may not work as expected.</p>
- *
- * <p>TODO: Doesn't yet handle ManyAssociations, but these shouldn't be too hard to add</p>
- */
-public class Qi4jPropertyAccessor
-    extends ObjectPropertyAccessor
-{
-    private static final Object[] BLANK_ARGUMENTS = new Object[0];
-
-    private final ObjectMethodAccessor methodAccessor = new ObjectMethodAccessor();
-
-    @Structure
-    Qi4j api;
-
-    @Override
-    public final Object getProperty( Map aContext, Object aTarget, Object aPropertyName )
-        throws OgnlException
-    {
-        String fieldName = aPropertyName.toString();
-        Object qi4jField = getQi4jField( aContext, aTarget, fieldName );
-        if( qi4jField != null )
-        {
-            Class<?> memberClass = qi4jField.getClass();
-            if( Property.class.isAssignableFrom( memberClass ) )
-            {
-                Property<?> property = (Property) qi4jField;
-                return property.get();
-            }
-            else if( Association.class.isAssignableFrom( memberClass ) )
-            {
-                Association<?> association = (Association) qi4jField;
-                return association.get();
-            }
-            else if( ManyAssociation.class.isAssignableFrom( memberClass ) )
-            {
-                return qi4jField;
-            }
-            else if( NamedAssociation.class.isAssignableFrom( memberClass ) )
-            {
-                return qi4jField;
-            }
-        }
-
-        return super.getProperty( aContext, aTarget, fieldName );
-    }
-
-    @SuppressWarnings( "unchecked" )
-    private Object getQi4jField( Map aContext, Object aTarget, String aFieldName )
-        throws OgnlException
-    {
-        if( aTarget != null )
-        {
-            // Is target#name a method? e.g. cat.name()
-            try
-            {
-                return methodAccessor.callMethod( aContext, aTarget, aFieldName, BLANK_ARGUMENTS );
-            }
-            catch( MethodFailedException e )
-            {
-                // Means not a property/association
-            }
-
-            // Is target#name a field? e.g. action.field1, where field1 is extracted from a composite
-            OgnlContext ognlContext = (OgnlContext) aContext;
-            try
-            {
-                return getFieldValue( ognlContext, aTarget, aFieldName, true );
-            }
-            catch( NoSuchFieldException e )
-            {
-                // Means not a field
-            }
-        }
-
-        return null;
-    }
-
-    @Override
-    @SuppressWarnings( "unchecked" )
-    public final void setProperty( Map aContext, Object aTarget, Object aPropertyName, Object aPropertyValue )
-        throws OgnlException
-    {
-        String fieldName = aPropertyName.toString();
-        Object qi4jField = getQi4jField( aContext, aTarget, fieldName );
-
-        if( qi4jField != null )
-        {
-            Class<?> memberClass = qi4jField.getClass();
-
-            if( Property.class.isAssignableFrom( memberClass ) )
-            {
-                Property property = (Property) qi4jField;
-
-                OgnlContext ognlContext = (OgnlContext) aContext;
-                Class<?> propertyType = (Class) api.propertyDescriptorFor( property ).type();
-                Object convertedValue = getConvertedType(
-                    ognlContext, aTarget, null, fieldName, aPropertyValue, propertyType );
-                try
-                {
-                    property.set( convertedValue );
-                }
-                catch( ConstraintViolationException e )
-                {
-                    Collection<ConstraintViolation> violations = e.constraintViolations();
-                    handleConstraintViolation( aContext, aTarget, fieldName, convertedValue, violations );
-                }
-
-                return;
-            }
-            else if( Association.class.isAssignableFrom( memberClass ) )
-            {
-                Association association = (Association) qi4jField;
-                OgnlContext ognlContext = (OgnlContext) aContext;
-                Class<?> associationType = (Class) api.associationDescriptorFor( association ).type();
-                Object convertedValue = getConvertedType(
-                    ognlContext, aTarget, null, fieldName, aPropertyValue, associationType );
-                if( convertedValue == OgnlRuntime.NoConversionPossible )
-                {
-                    throw new OgnlException( "Could not convert value to association type" );
-                }
-                try
-                {
-                    association.set( convertedValue );
-                }
-                catch( ConstraintViolationException e )
-                {
-                    Collection<ConstraintViolation> violations = e.constraintViolations();
-                    handleConstraintViolation( aContext, aTarget, fieldName, aPropertyValue, violations );
-                }
-
-                return;
-            }
-            else if( ManyAssociation.class.isAssignableFrom( memberClass ) )
-            {
-                throw new OgnlException( "Setting many association [" + fieldName + "] is impossible." );
-            }
-            else if( NamedAssociation.class.isAssignableFrom( memberClass ) )
-            {
-                throw new OgnlException( "Setting named association [" + fieldName + "] is impossible." );
-            }
-        }
-
-        super.setProperty( aContext, aTarget, aPropertyName, aPropertyValue );
-    }
-
-    @SuppressWarnings( "unchecked" )
-    protected final void handleConstraintViolation(
-        Map aContext, Object aTarget, String aPropertyName, Object aPropertyValue,
-        Collection<ConstraintViolation> violations
-    )
-    {
-        Map<String, FieldConstraintViolations> allPropertyConstraintViolations
-                                               = (Map<String, FieldConstraintViolations>) aContext.get( CONTEXT_CONSTRAINT_VIOLATIONS );
-        if( allPropertyConstraintViolations == null )
-        {
-            allPropertyConstraintViolations = new HashMap<>();
-            aContext.put( CONTEXT_CONSTRAINT_VIOLATIONS, allPropertyConstraintViolations );
-        }
-
-        String realFieldName = aPropertyName;
-        String fieldFullName = (String) aContext.get( CONVERSION_PROPERTY_FULLNAME );
-        if( fieldFullName != null )
-        {
-            realFieldName = fieldFullName;
-        }
-        // Add another violation
-        allPropertyConstraintViolations.put(
-            realFieldName, new FieldConstraintViolations( aTarget, aPropertyName, aPropertyValue, violations ) );
-    }
-}
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/UnitOfWorkInterceptor.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/UnitOfWorkInterceptor.java
deleted file mode 100644
index 2a21be3..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/UnitOfWorkInterceptor.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package org.qi4j.library.struts2;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
-import org.qi4j.api.injection.scope.Structure;
-import org.qi4j.api.unitofwork.UnitOfWork;
-import org.qi4j.api.unitofwork.UnitOfWorkFactory;
-
-/**
- * <p>An interceptor to be used to start a UnitOfWork if one has not yet been started.  If this interceptor creates a
- * new UnitOfWork it will also add a PreResultListener to make sure the unit of work is completed or discarded before
- * the result is executed.  This is important so that the rendering of the result does not make any changes to the
- * entities it is dealing with (we can maybe make this an option, to keep the UnitOfWork open until the invocation stack
- * returns to this interceptor or if it should use the PreResultListener, but for now I like the PreResultListener
- * better as it is safer).</p>
- *
- * <p>When a new UnitOfWork is created by this interceptor a decision must be made when closing it whether to discard
- * the UnitOfWork or complete it.  For now, if the resultCode is "success", we complete the UnitOfWork, otherwise we
- * discard it.  There are many things we can do here to make it more flexible, e.g. allow the user to specify result
- * codes to complete or, conversely, codes that should result in the UnitOfWork being discarded.  Since we have access
- * to the action invocation we could also do something with annotations on the method to be executed to allow user to
- * specify more specifically for that method what results should result in discards or completions.</p>
- */
-public class UnitOfWorkInterceptor
-    extends AbstractInterceptor
-{
-
-    private static final long serialVersionUID = 1L;
-
-    @Structure
-    private UnitOfWorkFactory uowf;
-
-    @Override
-    public String intercept( ActionInvocation invocation )
-        throws Exception
-    {
-        boolean createdUnitOfWork = false;
-        UnitOfWork uow;
-        if (!uowf.isUnitOfWorkActive())
-        {
-            uow = uowf.newUnitOfWork();
-            createdUnitOfWork = true;
-        } else
-        {
-            uow = uowf.currentUnitOfWork();
-        }
-
-        String resultCode = null;
-        try
-        {
-            resultCode = invocation.invoke();
-        }
-        finally
-        {
-            if( createdUnitOfWork && uow.isOpen() )
-            {
-                if( shouldComplete( invocation, resultCode ) )
-                {
-                    uow.complete();
-                }
-                else
-                {
-                    uow.discard();
-                }
-            }
-        }
-        return resultCode;
-    }
-
-    protected boolean shouldComplete( ActionInvocation invocation, String resultCode )
-    {
-        return Action.SUCCESS.equals( resultCode );
-    }
-}
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/bootstrap/Struts2PluginAssembler.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/bootstrap/Struts2PluginAssembler.java
deleted file mode 100644
index 76d97eb..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/bootstrap/Struts2PluginAssembler.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*  Copyright 2008 Edward Yakop.
- *
- * Licensed 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.qi4j.library.struts2.bootstrap;
-
-import org.qi4j.api.common.Visibility;
-import org.qi4j.bootstrap.Assembler;
-import org.qi4j.bootstrap.AssemblyException;
-import org.qi4j.bootstrap.ModuleAssembly;
-import org.qi4j.library.struts2.ActionConfiguration;
-import org.qi4j.library.struts2.ActionService;
-import org.qi4j.library.struts2.UnitOfWorkInterceptor;
-
-public class Struts2PluginAssembler
-    implements Assembler
-{
-    private final ActionConfiguration actionConfiguration;
-
-    public Struts2PluginAssembler( ActionConfiguration actionConfiguration )
-    {
-        this.actionConfiguration = actionConfiguration;
-    }
-
-    @Override
-    public void assemble( ModuleAssembly module )
-        throws AssemblyException
-    {
-        module.objects( UnitOfWorkInterceptor.class ).visibleIn( Visibility.module );
-        module.services( ActionService.class )
-            .setMetaInfo( actionConfiguration )
-            .visibleIn( Visibility.module );
-        actionConfiguration.assemble( module );
-    }
-}
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/package.html b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/package.html
deleted file mode 100644
index 9e13d67..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/package.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<html>
-    <body>
-        <h2>Struts 2 Integration.</h2>
-    </body>
-</html>
\ No newline at end of file
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/HasInput.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/HasInput.java
deleted file mode 100644
index 1d6f83f..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/HasInput.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package org.qi4j.library.struts2.support;
-
-public interface HasInput
-{
-
-    String input()
-        throws Exception;
-}
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/ProvidesEntityOf.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/ProvidesEntityOf.java
deleted file mode 100644
index 3e641ba..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/ProvidesEntityOf.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package org.qi4j.library.struts2.support;
-
-public interface ProvidesEntityOf<T>
-{
-    String getId();
-
-    void setId( String id );
-
-    T getEntity();
-}
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/ProvidesEntityOfMixin.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/ProvidesEntityOfMixin.java
deleted file mode 100644
index d9de329..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/ProvidesEntityOfMixin.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package org.qi4j.library.struts2.support;
-
-import org.qi4j.api.injection.scope.Structure;
-import org.qi4j.api.injection.scope.This;
-import org.qi4j.api.unitofwork.NoSuchEntityException;
-import org.qi4j.api.unitofwork.UnitOfWork;
-import org.qi4j.api.unitofwork.UnitOfWorkFactory;
-
-import static org.qi4j.library.struts2.util.ParameterizedTypes.findTypeVariables;
-
-public abstract class ProvidesEntityOfMixin<T>
-    implements ProvidesEntityOf<T>, StrutsAction
-{
-
-    @This
-    private ProvidesEntityOf<T> entityProvider;
-
-    @Structure
-    private UnitOfWorkFactory uowf;
-
-    private String id;
-    private T entity;
-
-    @Override
-    public String getId()
-    {
-        return id;
-    }
-
-    @Override
-    public void setId( String id )
-    {
-        this.id = id;
-    }
-
-    @Override
-    public T getEntity()
-    {
-        return entity;
-    }
-
-    protected void loadEntity()
-    {
-        UnitOfWork uow = uowf.currentUnitOfWork();
-        try
-        {
-            entity = uow.get( typeToLoad(), entityProvider.getId() );
-        }
-        catch( NoSuchEntityException e )
-        {
-            addActionError( getText( "entity.not.found" ) );
-        }
-    }
-
-    protected Class<T> typeToLoad()
-    {
-        return (Class<T>) findTypeVariables( entityProvider.getClass(), ProvidesEntityOf.class )[ 0 ];
-    }
-}
\ No newline at end of file
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/StrutsAction.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/StrutsAction.java
deleted file mode 100644
index f25c03c..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/StrutsAction.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package org.qi4j.library.struts2.support;
-
-import com.opensymphony.xwork2.*;
-
-public interface StrutsAction
-    extends Action, Validateable, ValidationAware, TextProvider, LocaleProvider
-{
-}
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/add/ProvidesAddingOf.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/add/ProvidesAddingOf.java
deleted file mode 100644
index cda0550..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/add/ProvidesAddingOf.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package org.qi4j.library.struts2.support.add;
-
-import com.opensymphony.xwork2.Preparable;
-import org.qi4j.library.struts2.support.HasInput;
-import org.qi4j.library.struts2.support.StrutsAction;
-
-public interface ProvidesAddingOf<T>
-    extends Preparable, HasInput, StrutsAction
-{
-    T getState();
-}
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/add/ProvidesAddingOfMixin.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/add/ProvidesAddingOfMixin.java
deleted file mode 100644
index eb5fbe5..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/add/ProvidesAddingOfMixin.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package org.qi4j.library.struts2.support.add;
-
-import com.opensymphony.xwork2.ActionSupport;
-import org.qi4j.api.entity.EntityBuilder;
-import org.qi4j.api.injection.scope.Structure;
-import org.qi4j.api.injection.scope.This;
-import org.qi4j.api.unitofwork.UnitOfWork;
-import org.qi4j.api.unitofwork.UnitOfWorkFactory;
-
-import static org.qi4j.library.struts2.util.ClassNames.classNameInDotNotation;
-import static org.qi4j.library.struts2.util.ParameterizedTypes.findTypeVariables;
-
-public abstract class ProvidesAddingOfMixin<T>
-    extends ActionSupport
-    implements ProvidesAddingOf<T>
-{
-
-    @This
-    private ProvidesAddingOf<T> action;
-
-    @Structure
-    private UnitOfWorkFactory uowf;
-
-    private EntityBuilder<T> builder;
-
-    @Override
-    public T getState()
-    {
-        return builder.instance();
-    }
-
-    @Override
-    public void prepare()
-        throws Exception
-    {
-        prepareEntityBuilder();
-    }
-
-    @Override
-    public String input()
-    {
-        return INPUT;
-    }
-
-    @Override
-    public String execute()
-        throws Exception
-    {
-        addSuccessMessage();
-        return SUCCESS;
-    }
-
-    @SuppressWarnings( "unchecked" )
-    protected Class<T> typeToAdd()
-    {
-        return (Class<T>) findTypeVariables( action.getClass(), ProvidesAddingOf.class )[ 0 ];
-    }
-
-    protected void addSuccessMessage()
-    {
-        addActionMessage( getText( classNameInDotNotation( typeToAdd() ) + ".successfully.added" ) );
-    }
-
-    protected void prepareEntityBuilder()
-        throws Exception
-    {
-        UnitOfWork uow = uowf.currentUnitOfWork();
-        builder = uow.newEntityBuilder( typeToAdd() );
-    }
-}
\ No newline at end of file
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/edit/ProvidesEditingOf.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/edit/ProvidesEditingOf.java
deleted file mode 100644
index db1ec90..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/edit/ProvidesEditingOf.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.qi4j.library.struts2.support.edit;
-
-import com.opensymphony.xwork2.Preparable;
-import org.qi4j.library.struts2.support.HasInput;
-import org.qi4j.library.struts2.support.ProvidesEntityOf;
-import org.qi4j.library.struts2.support.StrutsAction;
-
-public interface ProvidesEditingOf<T>
-    extends ProvidesEntityOf<T>, Preparable, HasInput, StrutsAction
-{
-    void prepareInput()
-        throws Exception;
-}
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/edit/ProvidesEditingOfMixin.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/edit/ProvidesEditingOfMixin.java
deleted file mode 100644
index baeaaa1..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/edit/ProvidesEditingOfMixin.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package org.qi4j.library.struts2.support.edit;
-
-import org.qi4j.api.injection.scope.This;
-import org.qi4j.library.struts2.support.ProvidesEntityOfMixin;
-
-import static org.qi4j.library.struts2.util.ParameterizedTypes.findTypeVariables;
-
-public abstract class ProvidesEditingOfMixin<T>
-    extends ProvidesEntityOfMixin<T>
-    implements ProvidesEditingOf<T>
-{
-
-    @This
-    private ProvidesEditingOf<T> action;
-
-    @Override
-    public void prepare()
-        throws Exception
-    {
-        loadEntity();
-    }
-
-    @Override
-    public void prepareInput()
-        throws Exception
-    {
-
-    }
-
-    @Override
-    public String input()
-    {
-        if( getEntity() == null )
-        {
-            return "entity-not-found";
-        }
-        return INPUT;
-    }
-
-    @Override
-    protected Class<T> typeToLoad()
-    {
-        return (Class<T>) findTypeVariables( action.getClass(), ProvidesEditingOf.class )[ 0 ];
-    }
-}
\ No newline at end of file
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/list/ProvidesListOf.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/list/ProvidesListOf.java
deleted file mode 100644
index 8ccb688..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/list/ProvidesListOf.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package org.qi4j.library.struts2.support.list;
-
-import com.opensymphony.xwork2.Preparable;
-import org.qi4j.library.struts2.support.StrutsAction;
-
-public interface ProvidesListOf<T>
-    extends Preparable, StrutsAction
-{
-    Iterable<T> list();
-}
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/list/ProvidesListOfMixin.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/list/ProvidesListOfMixin.java
deleted file mode 100644
index 5bbb291..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/list/ProvidesListOfMixin.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package org.qi4j.library.struts2.support.list;
-
-import com.opensymphony.xwork2.ActionSupport;
-import org.qi4j.api.injection.scope.Structure;
-import org.qi4j.api.injection.scope.This;
-import org.qi4j.api.query.QueryBuilder;
-import org.qi4j.api.query.QueryBuilderFactory;
-import org.qi4j.api.unitofwork.UnitOfWork;
-import org.qi4j.api.unitofwork.UnitOfWorkFactory;
-
-import static org.qi4j.library.struts2.util.ParameterizedTypes.findTypeVariables;
-
-public abstract class ProvidesListOfMixin<T>
-    extends ActionSupport
-    implements ProvidesListOf<T>
-{
-
-    @This
-    private ProvidesListOf<T> action;
-
-    @Structure
-    private UnitOfWorkFactory uowf;
-
-    @Structure
-    private QueryBuilderFactory qbf;
-
-    private Iterable<T> results;
-
-    @Override
-    public Iterable<T> list()
-    {
-        return results;
-    }
-
-    /**
-     * This is where we'll load the list of entities.  Not because it is any better than the execute() method, I
-     * would actually prefer doing it in the execute method.  But since these list actions can be the target
-     * of redirects after errors, actionErrors may not be empty which would mean execute() would never get called.
-     * One way around this would be to have a different interceptor stack just for these list actions that doesn't
-     * do validation, but for now we'll just use the prepare() method.  We can change it easily enough later if this
-     * becomes an issue for some reason.
-     */
-    @Override
-    public void prepare()
-        throws Exception
-    {
-        UnitOfWork uow = uowf.currentUnitOfWork();
-        QueryBuilder<T> qb = qbf.newQueryBuilder( typeToList() );
-        results = uow.newQuery( qb );
-    }
-
-    private Class<T> typeToList()
-    {
-        return (Class<T>) findTypeVariables( action.getClass(), ProvidesListOf.class )[ 0 ];
-    }
-}
\ No newline at end of file
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/view/ProvidesViewOf.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/view/ProvidesViewOf.java
deleted file mode 100644
index 1a6ed39..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/view/ProvidesViewOf.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.qi4j.library.struts2.support.view;
-
-import org.qi4j.library.struts2.support.ProvidesEntityOf;
-import org.qi4j.library.struts2.support.StrutsAction;
-
-public interface ProvidesViewOf<T>
-    extends ProvidesEntityOf<T>, StrutsAction
-{
-}
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/view/ProvidesViewOfMixin.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/view/ProvidesViewOfMixin.java
deleted file mode 100644
index 9ab138a..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/support/view/ProvidesViewOfMixin.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.qi4j.library.struts2.support.view;
-
-import org.qi4j.api.injection.scope.This;
-import org.qi4j.library.struts2.support.ProvidesEntityOfMixin;
-
-import static org.qi4j.library.struts2.util.ParameterizedTypes.findTypeVariables;
-
-public abstract class ProvidesViewOfMixin<T>
-    extends ProvidesEntityOfMixin<T>
-    implements ProvidesViewOf<T>
-{
-    @This
-    private ProvidesViewOf<T> action;
-
-    @Override
-    public String execute()
-    {
-        loadEntity();
-        return SUCCESS;
-    }
-
-    @Override
-    protected Class<T> typeToLoad()
-    {
-        return (Class<T>) findTypeVariables( action.getClass(), ProvidesViewOf.class )[ 0 ];
-    }
-}
\ No newline at end of file
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/util/ClassNameFilters.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/util/ClassNameFilters.java
deleted file mode 100644
index 3d41cdf..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/util/ClassNameFilters.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package org.qi4j.library.struts2.util;
-
-public final class ClassNameFilters
-{
-    private ClassNameFilters()
-    {
-    }
-
-    public static ClassNameMapper passThruMapper = new ClassNameMapper()
-    {
-        @Override
-        public String map( Class<?> type )
-        {
-            return type.getName();
-        }
-    };
-
-    public static ClassNameMapper removeSuffixes( final String... suffixes )
-    {
-        return new ClassNameMapper()
-        {
-            @Override
-            public String map( Class<?> type )
-            {
-                String className = type.getName();
-                for( String suffix : suffixes )
-                {
-                    if( className.endsWith( suffix ) )
-                    {
-                        return className.substring( 0, className.length() - suffix.length() );
-                    }
-                }
-                return className;
-            }
-        };
-    }
-}
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/util/ClassNameMapper.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/util/ClassNameMapper.java
deleted file mode 100644
index 93f3a8f..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/util/ClassNameMapper.java
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- *
- */
-package org.qi4j.library.struts2.util;
-
-import org.qi4j.functional.Function;
-
-public interface ClassNameMapper extends Function<Class<?>,String>
-{
-    @Override
-    String map( Class<?> type );
-}
\ No newline at end of file
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/util/ClassNames.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/util/ClassNames.java
deleted file mode 100644
index 69e3ae8..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/util/ClassNames.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package org.qi4j.library.struts2.util;
-
-import java.util.Arrays;
-import org.qi4j.functional.Function;
-import org.qi4j.functional.Iterables;
-
-import static java.lang.Character.isLowerCase;
-import static java.lang.Character.toLowerCase;
-
-public final class ClassNames
-{
-    private ClassNames()
-    {
-    }
-
-    public static String classNameInDotNotation( Class<?> type )
-    {
-        Function<Class<?>, String> mapper = ClassNameFilters.passThruMapper;
-        Iterable<String> map = Iterables.map( mapper, Arrays.asList( type ) );
-        return ClassNames.camelCaseToDotNotation( map );
-    }
-
-    public static String classNameInDotNotation( Iterable<Class<?>> type, ClassNameMapper mapper )
-    {
-        Iterable<String> map = Iterables.map( mapper, type );
-        return ClassNames.camelCaseToDotNotation( map );
-    }
-
-    public static String camelCaseToDotNotation( Iterable<String> names )
-    {
-        StringBuilder sb = new StringBuilder();
-        int count = 0;
-        for( String name : names )
-        {
-            if( count++ > 0 )
-            {
-                sb.append( "," );
-            }
-            sb.append( camelCaseToDotNotation( name ) );
-        }
-        if( count == 1 )
-        {
-            return sb.toString();
-        }
-        sb.append( "]" );
-        return "[" + sb.toString();
-    }
-
-    private static String camelCaseToDotNotation( String name )
-    {
-        StringBuilder sb = new StringBuilder( name.length() );
-        sb.append( toLowerCase( name.charAt( 0 ) ) );
-        for( int i = 1; i < name.length(); i++ )
-        {
-            char c = name.charAt( i );
-            if( isLowerCase( c ) )
-            {
-                sb.append( c );
-            }
-            else
-            {
-                sb.append( '.' );
-                sb.append( toLowerCase( c ) );
-            }
-        }
-        return sb.toString();
-    }
-}
diff --git a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/util/ParameterizedTypes.java b/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/util/ParameterizedTypes.java
deleted file mode 100644
index 3c56560..0000000
--- a/libraries/struts2-plugin/src/main/java/org/qi4j/library/struts2/util/ParameterizedTypes.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.qi4j.library.struts2.util;
-
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-
-public final class ParameterizedTypes
-{
-    private ParameterizedTypes()
-    {
-    }
-
-    public static <S, T extends S> Type[] findTypeVariables( Class<T> type, Class<S> searchType )
-    {
-        return ParameterizedTypes.findParameterizedType( type, searchType ).getActualTypeArguments();
-    }
-
-    public static <S, T extends S> ParameterizedType findParameterizedType( Class<T> type, Class<S> searchType )
-    {
-        return ParameterizedTypes.findParameterizedType( (Type) type, searchType );
-    }
-
-    static ParameterizedType findParameterizedType( Type type, Type searchType )
-    {
-        if( type instanceof ParameterizedType && ( (ParameterizedType) type ).getRawType().equals( searchType ) )
-        {
-            return (ParameterizedType) type;
-        }
-        Type[] parents = ( (Class<?>) type ).getGenericInterfaces();
-        for( Type parent : parents )
-        {
-            ParameterizedType foundType = findParameterizedType( parent, searchType );
-            if( foundType != null )
-            {
-                return foundType;
-            }
-        }
-        return null;
-    }
-}
diff --git a/libraries/struts2-plugin/src/main/resources/struts-plugin.xml b/libraries/struts2-plugin/src/main/resources/struts-plugin.xml
deleted file mode 100644
index 5eaf6f9..0000000
--- a/libraries/struts2-plugin/src/main/resources/struts-plugin.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-/*
- * $Id: pom.xml 559206 2007-07-24 21:01:18Z apetrelli $
- *
- * 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.
- */
--->
-
-<!DOCTYPE struts PUBLIC
-  "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-  "http://struts.apache.org/dtds/struts-2.0.dtd">
-
-<struts>
-  <bean type="com.opensymphony.xwork2.ObjectFactory" name="qi4j" class="org.qi4j.library.struts2.Qi4jObjectFactory"/>
-  <constant name="struts.objectFactory" value="qi4j"/>
-
-  <bean type="ognl.PropertyAccessor" name="org.qi4j.composite.Composite"
-        class="org.qi4j.library.struts2.Qi4jPropertyAccessor"/>
-</struts>
diff --git a/libraries/struts2-plugin/src/main/resources/xwork-conversion.properties b/libraries/struts2-plugin/src/main/resources/xwork-conversion.properties
deleted file mode 100644
index 8636560..0000000
--- a/libraries/struts2-plugin/src/main/resources/xwork-conversion.properties
+++ /dev/null
@@ -1 +0,0 @@
-org.qi4j.api.entity.EntityComposite=org.qi4j.library.struts2.EntityCompositeConverter
\ No newline at end of file
diff --git a/libraries/struts2-plugin/src/test/java/org/qi4j/library/struts2/util/ParameterizedTypesTest.java b/libraries/struts2-plugin/src/test/java/org/qi4j/library/struts2/util/ParameterizedTypesTest.java
deleted file mode 100644
index 8836097..0000000
--- a/libraries/struts2-plugin/src/test/java/org/qi4j/library/struts2/util/ParameterizedTypesTest.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.qi4j.library.struts2.util;
-
-import org.junit.Test;
-
-import java.lang.reflect.ParameterizedType;
-
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-
-public class ParameterizedTypesTest
-{
-    @Test
-    public void findParameterizedType()
-    {
-        assertEquals(
-            GarbageMan.class.getGenericInterfaces()[ 0 ],
-            ParameterizedTypes.findParameterizedType( GarbageMan.class, HandlerOf.class )
-        );
-    }
-
-    @Test
-    public void findTypeVariables()
-    {
-        assertArrayEquals(
-                ((ParameterizedType) GarbageMan.class.getGenericInterfaces()[0]).getActualTypeArguments(),
-                ParameterizedTypes.findTypeVariables( GarbageMan.class, HandlerOf.class )
-        );
-    }
-
-    static interface HandlerOf<T>
-    {
-    }
-
-    static interface Trash
-    {
-    }
-
-    static final class GarbageMan implements HandlerOf<Trash>
-    {
-    }
-}
diff --git a/libraries/uid/build.gradle b/libraries/uid/build.gradle
index 57b0619..eb6dcfd 100644
--- a/libraries/uid/build.gradle
+++ b/libraries/uid/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j UID Library contains various Identity generation services."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - UID" }}
+description = "Apache Zest™ UID Library contains various Identity generation services."
+
+jar { manifest { name = "Apache Zest™ Library - UID" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
diff --git a/libraries/uid/dev-status.xml b/libraries/uid/dev-status.xml
index a0c9fbb..bdf00e7 100644
--- a/libraries/uid/dev-status.xml
+++ b/libraries/uid/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/libraries/uid/src/docs/uid.txt b/libraries/uid/src/docs/uid.txt
index fdadb3a..710b606 100644
--- a/libraries/uid/src/docs/uid.txt
+++ b/libraries/uid/src/docs/uid.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[library-uid, UID Library]]
 = UID =
 
diff --git a/libraries/uid/src/main/java/org/qi4j/library/uid/sequence/assembly/package.html b/libraries/uid/src/main/java/org/qi4j/library/uid/sequence/assembly/package.html
index b3921b5..d4bb2f2 100644
--- a/libraries/uid/src/main/java/org/qi4j/library/uid/sequence/assembly/package.html
+++ b/libraries/uid/src/main/java/org/qi4j/library/uid/sequence/assembly/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Sequence Services Assembly.</h2>
diff --git a/libraries/uid/src/main/java/org/qi4j/library/uid/sequence/package.html b/libraries/uid/src/main/java/org/qi4j/library/uid/sequence/package.html
index e394ba1..0a7ead9 100644
--- a/libraries/uid/src/main/java/org/qi4j/library/uid/sequence/package.html
+++ b/libraries/uid/src/main/java/org/qi4j/library/uid/sequence/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Sequence Services.</h2>
diff --git a/libraries/uid/src/main/java/org/qi4j/library/uid/uuid/assembly/package.html b/libraries/uid/src/main/java/org/qi4j/library/uid/uuid/assembly/package.html
index 4967eb4..6202f3e 100644
--- a/libraries/uid/src/main/java/org/qi4j/library/uid/uuid/assembly/package.html
+++ b/libraries/uid/src/main/java/org/qi4j/library/uid/uuid/assembly/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>UUID Service Assembly.</h2>
diff --git a/libraries/uid/src/main/java/org/qi4j/library/uid/uuid/package.html b/libraries/uid/src/main/java/org/qi4j/library/uid/uuid/package.html
index a0db5a5..6925b32 100644
--- a/libraries/uid/src/main/java/org/qi4j/library/uid/uuid/package.html
+++ b/libraries/uid/src/main/java/org/qi4j/library/uid/uuid/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>UUID Service.</h2>
diff --git a/libraries/uowfile/build.gradle b/libraries/uowfile/build.gradle
index bcb9664..e0f3116 100644
--- a/libraries/uowfile/build.gradle
+++ b/libraries/uowfile/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j UoWFile Library provides file operations binding to UoWs."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Library - UoWFile" }}
+description = "Apache Zest™ UoWFile Library provides file operations binding to UoWs."
+
+jar { manifest { name = "Apache Zest™ Library - UoWFile" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
diff --git a/libraries/uowfile/dev-status.xml b/libraries/uowfile/dev-status.xml
index a844ab5..43df615 100644
--- a/libraries/uowfile/dev-status.xml
+++ b/libraries/uowfile/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/libraries/uowfile/src/docs/uowfile.txt b/libraries/uowfile/src/docs/uowfile.txt
index 990b74b..b3a1c00 100644
--- a/libraries/uowfile/src/docs/uowfile.txt
+++ b/libraries/uowfile/src/docs/uowfile.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[library-uowfile,UoWFile Library]]
 = UoWFile =
 
diff --git a/libraries/uowfile/src/main/java/org/qi4j/library/uowfile/bootstrap/package.html b/libraries/uowfile/src/main/java/org/qi4j/library/uowfile/bootstrap/package.html
index 2b755b8..c887e26 100644
--- a/libraries/uowfile/src/main/java/org/qi4j/library/uowfile/bootstrap/package.html
+++ b/libraries/uowfile/src/main/java/org/qi4j/library/uowfile/bootstrap/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>UnitOfWork File Assembly.</h2>
diff --git a/libraries/uowfile/src/main/java/org/qi4j/library/uowfile/internal/package.html b/libraries/uowfile/src/main/java/org/qi4j/library/uowfile/internal/package.html
index 8a62b22..bdb34b1 100644
--- a/libraries/uowfile/src/main/java/org/qi4j/library/uowfile/internal/package.html
+++ b/libraries/uowfile/src/main/java/org/qi4j/library/uowfile/internal/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>UnitOfWork File Library Internal Package.</h2>
diff --git a/libraries/uowfile/src/main/java/org/qi4j/library/uowfile/plural/package.html b/libraries/uowfile/src/main/java/org/qi4j/library/uowfile/plural/package.html
index aa03f5c..d0b791e 100644
--- a/libraries/uowfile/src/main/java/org/qi4j/library/uowfile/plural/package.html
+++ b/libraries/uowfile/src/main/java/org/qi4j/library/uowfile/plural/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>UnitOfWork File Plural Support.</h2>
diff --git a/libraries/uowfile/src/main/java/org/qi4j/library/uowfile/singular/package.html b/libraries/uowfile/src/main/java/org/qi4j/library/uowfile/singular/package.html
index 02c7ac9..378e2a8 100644
--- a/libraries/uowfile/src/main/java/org/qi4j/library/uowfile/singular/package.html
+++ b/libraries/uowfile/src/main/java/org/qi4j/library/uowfile/singular/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>UnitOfWork File Singular Support.</h2>
diff --git a/libraries/uowfile/src/test/java/org/qi4j/library/uowfile/HasUoWFileTest.java b/libraries/uowfile/src/test/java/org/qi4j/library/uowfile/HasUoWFileTest.java
index c7de8d2..a9e0864 100644
--- a/libraries/uowfile/src/test/java/org/qi4j/library/uowfile/HasUoWFileTest.java
+++ b/libraries/uowfile/src/test/java/org/qi4j/library/uowfile/HasUoWFileTest.java
@@ -41,6 +41,7 @@
 import org.qi4j.bootstrap.ModuleAssembly;
 import org.qi4j.io.Inputs;
 import org.qi4j.io.Outputs;
+import org.qi4j.library.fileconfig.FileConfigurationAssembler;
 import org.qi4j.library.uowfile.bootstrap.UoWFileAssembler;
 import org.qi4j.library.uowfile.internal.ConcurrentUoWFileModificationException;
 import org.qi4j.library.uowfile.singular.HasUoWFileLifecycle;
@@ -168,6 +169,7 @@
         // END SNIPPET: assembly
         module.services( TestService.class );
         new EntityTestAssembler().assemble( module );
+        new FileConfigurationAssembler().assemble( module );
         // START SNIPPET: assembly
     }
     // END SNIPPET: assembly
diff --git a/libraries/uowfile/src/test/java/org/qi4j/library/uowfile/HasUoWFilesTest.java b/libraries/uowfile/src/test/java/org/qi4j/library/uowfile/HasUoWFilesTest.java
index 8ecd1ab..c330676 100644
--- a/libraries/uowfile/src/test/java/org/qi4j/library/uowfile/HasUoWFilesTest.java
+++ b/libraries/uowfile/src/test/java/org/qi4j/library/uowfile/HasUoWFilesTest.java
@@ -41,6 +41,7 @@
 import org.qi4j.bootstrap.ModuleAssembly;
 import org.qi4j.io.Inputs;
 import org.qi4j.io.Outputs;
+import org.qi4j.library.fileconfig.FileConfigurationAssembler;
 import org.qi4j.library.uowfile.bootstrap.UoWFileAssembler;
 import org.qi4j.library.uowfile.internal.ConcurrentUoWFileModificationException;
 import org.qi4j.library.uowfile.plural.HasUoWFilesLifecycle;
@@ -183,6 +184,7 @@
         // END SNIPPET: assembly
         module.services( TestService.class );
         new EntityTestAssembler().assemble( module );
+        new FileConfigurationAssembler().assemble( module );
         // START SNIPPET: assembly
     }
     // END SNIPPET: assembly
diff --git a/libraries/wrapper/gradle-wrapper.jar b/libraries/wrapper/gradle-wrapper.jar
deleted file mode 100644
index 14e0c25..0000000
--- a/libraries/wrapper/gradle-wrapper.jar
+++ /dev/null
Binary files differ
diff --git a/libraries/wrapper/gradle-wrapper.properties b/libraries/wrapper/gradle-wrapper.properties
deleted file mode 100644
index 3948108..0000000
--- a/libraries/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-#Sun Nov 14 18:18:06 CST 2010
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
-#distributionVersion=0.9-rc-1
-#urlRoot=http\://dist.codehaus.org/gradle
-distributionVersion=0.9
-urlRoot=http\://gradle.artifactoryonline.com/gradle/distributions
-distributionName=gradle
-distributionClassifier=bin
diff --git a/manual/build.gradle b/manual/build.gradle
index 6528572..c754880 100644
--- a/manual/build.gradle
+++ b/manual/build.gradle
@@ -1,11 +1,30 @@
-description = "Qi4j Manuals and Website."
+/*
+ * 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.
+ */
+
+description = "Apache Zest™ Manuals and Website."
 
 dependencies {
   compile( project( ":org.qi4j.core:org.qi4j.core.bootstrap" ) )
   compile( project( ":org.qi4j.libraries:org.qi4j.library.constraints" ) )
   compile( project( ":org.qi4j.libraries:org.qi4j.library.logging" ) )
   runtime( project( ":org.qi4j.core:org.qi4j.core.runtime" ) )
-  runtime( libraries.logback )
+  runtime( libraries.slf4j_simple )
 }
 
 
@@ -27,19 +46,19 @@
 
 task website( type: org.qi4j.gradle.plugin.Documentation,
               dependsOn: rootProject.allprojects.tasks.flatten().findAll { it.name == AsciidocBuildInfo.TASK_NAME } ) {
-  docName = 'website'
-  docType = 'article'
+  docName 'website'
+  docType 'article'
 }
 
 task archiveWebsite( type: Copy ) {
   dependsOn website
   if( rootProject.version == '0' || rootProject.version.contains( "SNAPSHOT" ) )
   {
-    into( "$rootProject.projectDir/../qi4j.github.com/develop" )
+    into( "$rootProject.projectDir/../zest-web/site/content/java/develop" )
   }
   else
   {
-    into( "$rootProject.projectDir/../qi4j.github.com/$version" )
+    into( "$rootProject.projectDir/../zest-web/site/content/java/$version" )
   }
   from( 'build/docs/website/' )
 }
@@ -48,8 +67,8 @@
   dependsOn archiveWebsite
   if( rootProject.version != '0' && !rootProject.version.contains( "SNAPSHOT" ) )
   {
-    from( "$rootProject.projectDir/../qi4j.github.com/$version/" )
-    into( "$rootProject.projectDir/../qi4j.github.com/latest/" )
+    from( "$rootProject.projectDir/../zest-web/site/content/java/$version/" )
+    into( "$rootProject.projectDir/../zest-web/site/content/java/latest/" )
   }
 }
 
@@ -59,3 +78,19 @@
 //  dependsOn referenceManual
 //  dependsOn recipes
 }
+
+// Skip if asciidoc is not found in PATH when building a 0 or SNAPSHOT version,
+// or if skipAsciidocIfAbsent property is set and asciidoc is not found in PATH
+[ website, archiveWebsite, copyWebsite, manuals ]*.onlyIf {
+  def skipAsciidocIfAbsent = rootProject.hasProperty( 'skipAsciidocIfAbsent' ) ? rootProject.skipAsciidocIfAbsent : false
+  def pathDirs = System.getenv( 'PATH' ).split( File.pathSeparator )
+  def present = pathDirs.collect( { new File( it, 'asciidoc') } ).flatten().findAll( { it.isFile() } )
+  if( !skipAsciidocIfAbsent && version != '0' && !version.contains( 'SNAPSHOT' ) ) {
+    project.logger.debug 'Asciidoc tasks forced because version is no-0 and no-SNAPSHOT, hope you have Asciidoc installed'
+    return true
+  }
+  if( !present ) {
+    project.logger.warn 'Asciidoc not found in PATH, manual tasks will skip, please install http://www.methods.co.nz/asciidoc/'
+  }
+  present
+}
diff --git a/manual/src/conf/asciidoc.conf b/manual/src/conf/asciidoc.conf
index 164b2bb..c301c6d 100644
--- a/manual/src/conf/asciidoc.conf
+++ b/manual/src/conf/asciidoc.conf
@@ -1,3 +1,18 @@
+# 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.
+
 [miscellaneous]
 tabsize=4
 
diff --git a/manual/src/conf/docbook.conf b/manual/src/conf/docbook.conf
index e690287..12f2b00 100644
--- a/manual/src/conf/docbook.conf
+++ b/manual/src/conf/docbook.conf
@@ -1,3 +1,18 @@
+# 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.
+
 [image-inlinemacro]
 <inlinemediaobject>
   <imageobject>
diff --git a/manual/src/conf/docbook45.conf b/manual/src/conf/docbook45.conf
index be084a0..636b039 100644
--- a/manual/src/conf/docbook45.conf
+++ b/manual/src/conf/docbook45.conf
@@ -1,3 +1,18 @@
+# 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.
+
 #
 # docbook45.conf
 #
diff --git a/manual/src/conf/linkedimages.conf b/manual/src/conf/linkedimages.conf
index d6818ce..6f0b562 100644
--- a/manual/src/conf/linkedimages.conf
+++ b/manual/src/conf/linkedimages.conf
@@ -1,3 +1,18 @@
+# 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.
+
 [image-blockmacro]
 <figure{id? id="{id}"}{role? role="{role}"}{reftext? xreflabel="{reftext}"}{pgwide-option? pgwide="1"}><title>{title}</title>
 {title%}<informalfigure{id? id="{id}"}{role? role="{role}"}{reftext? xreflabel="{reftext}"}>{pgwide-option?<?dbfo pgwide="1"?>}
diff --git a/manual/src/conf/xhtml.conf b/manual/src/conf/xhtml.conf
index 9f37dea..c06a4ca 100644
--- a/manual/src/conf/xhtml.conf
+++ b/manual/src/conf/xhtml.conf
@@ -1,3 +1,18 @@
+# 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.
+
 ASCIIDOC_OPTS = '--attribute docinfo1 --attribute=icons --doctype book'
 FOP_OPTS = ''
 XSLTPROC_OPTS = '--xinclude'
diff --git a/manual/src/docs/reference/docinfo.xml b/manual/src/docs/reference/docinfo.xml
index 48f36c6..28df1f5 100644
--- a/manual/src/docs/reference/docinfo.xml
+++ b/manual/src/docs/reference/docinfo.xml
@@ -1,11 +1,27 @@
+<!--
+  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.
+-->
 <authorgroup>
-  <corpauthor>The Qi4j Community
+  <corpauthor>The Zest™ Community
   </corpauthor>
 </authorgroup>
 
 <copyright>
 <year>2011</year>
-<holder>Qi4j Community</holder>
+<holder>Zest™ Community</holder>
 </copyright>
 
 <legalnotice>
diff --git a/manual/src/docs/reference/index.txt b/manual/src/docs/reference/index.txt
index 2de87c7..0b2d397 100644
--- a/manual/src/docs/reference/index.txt
+++ b/manual/src/docs/reference/index.txt
@@ -1,5 +1,24 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[reference-documentation,Reference Manual]]
-= Qi4jv{revnumber} Reference Manual =
+= Apache Zest™ v{revnumber} Reference Manual =
 
 :qi4j-version: {revnumber}
 :qi4j-buildnumber: {revnumber}
diff --git a/manual/src/docs/tutorials/docinfo.xml b/manual/src/docs/tutorials/docinfo.xml
index 6ae5e26..7c3ae97 100644
--- a/manual/src/docs/tutorials/docinfo.xml
+++ b/manual/src/docs/tutorials/docinfo.xml
@@ -1,11 +1,27 @@
+<!--
+  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.
+-->
 <authorgroup>
-  <corpauthor>The Qi4j Community
+  <corpauthor>The Zest™ Community
   </corpauthor>
 </authorgroup>
 
 <copyright>
   <year>2011</year>
-  <holder>Qi4j Community</holder>
+  <holder>Zest™ Community</holder>
 </copyright>
 
 <legalnotice>
diff --git a/manual/src/docs/tutorials/howto-assembly-application.txt b/manual/src/docs/tutorials/howto-assembly-application.txt
index dcb520c..05e2ad7 100644
--- a/manual/src/docs/tutorials/howto-assembly-application.txt
+++ b/manual/src/docs/tutorials/howto-assembly-application.txt
@@ -23,13 +23,13 @@
 
 include::../../../../core/bootstrap/build/docs/buildinfo/artifact.txt[]
 
-At runtime you will need the Core Runtime artifact too. See the <<howto-depend-on-qi4j>> tutorial for details.
+At runtime you will need the Core Runtime artifact too. See the <<howto-depend-on-zest>> tutorial for details.
 
 == Basics ==
 
-First let's recap the structural requirements of Qi4j;
+First let's recap the structural requirements of Zest;
 
-    * There is one and only one Application instance per Qi4j Runtime.
+    * There is one and only one Application instance per Zest™ Runtime.
     * Every Application must contain one or more Layers.
     * All Composites must be declared in one or more Modules.
     * Each Module belong to a Layer.
@@ -40,7 +40,7 @@
 
 == Application ==
 
-The first one means that for each Qi4j Runtime you start, there will be exactly one application. As far as we know, Qi4j
+The first one means that for each Zest™ Runtime you start, there will be exactly one application. As far as we know, Zest
 is fully isolated, meaning there are no static members being populated and such.
 
 == Layers ==
@@ -49,7 +49,7 @@
 whiteboards (or even black boards for those old enough), and sometimes organized the codebases along such boundaries.
 But, there has been little effort to enforce the Layer mechanism in code, although it is an extremely powerful
 construct. First of all it implies directional dependency and a high degree of order, spagetti code is reduced if
-successfully implemented. For Qi4j, it means that we can restrict access to Composite and Object declarations, so that
+successfully implemented. For Zest, it means that we can restrict access to Composite and Object declarations, so that
 higher layers can not reach them incidentally. You can enforce architecture to a high degree. You can require all
 creation of composites to go through an exposed Factory, which doesn't require the Composite to be public. And so on.
 Layers have hierarchy, i.e. one layer is top of one or more layers, and is below one or more layers, except for the
@@ -58,7 +58,7 @@
 
 == Modules ==
 
-The Module concept has also been around forever. And in Qi4j we also makes the Modules explicit. Each Module belong to a
+The Module concept has also been around forever. And in Zest™ we also makes the Modules explicit. Each Module belong to a
 Layer, and for each Module you declare the Composite and Object types for that Module, together with a Visibility rule,
 one of; application, layer, module.
 
@@ -109,7 +109,7 @@
 How to structure your code is beyond the scope of this section. If you are an experienced designer, you will have done
 that before, and you may have started out with good intentions at times only to find yourself in a spaghetti swamp
 later, or perhaps in the also famous "Clear as Clay" or "Ball (bowl?) of Mud". Either way, you need to draw on your
-experience and come up with good structure that Qi4j lets you enforce.
+experience and come up with good structure that Zest™ lets you enforce.
 
 So, for the sake of education, we are going to look at an application that consists of many layers, each with a few
 modules. See picture below.
@@ -127,7 +127,7 @@
 -----------
 
 The above is the basic setup on how to structure a real-world applicaton, unless you intend to mess with the
-implementations of various Qi4j systems (yes there are hooks for that too), but that is definitely beyond the scope of
+implementations of various Zest™ systems (yes there are hooks for that too), but that is definitely beyond the scope of
 this tutorial.
 
 Now, the createXyzLayer() methods were excluded to keep the sample crisp and easy to follow. Let's take a look at what
@@ -158,5 +158,5 @@
 tag=shutdown
 -----------
 
-This concludes this tutorial. We have looked how to get the initial Qi4j runtime going, how to declare the assembly
+This concludes this tutorial. We have looked how to get the initial Zest™ runtime going, how to declare the assembly
 for application model creation and finally the activation of the model itself.
diff --git a/manual/src/docs/tutorials/howto-build-system.txt b/manual/src/docs/tutorials/howto-build-system.txt
index 9c551c9..ab2d3fa 100644
--- a/manual/src/docs/tutorials/howto-build-system.txt
+++ b/manual/src/docs/tutorials/howto-build-system.txt
@@ -1,24 +1,43 @@
-[[build-system,Build System]]
-= Build System =
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
 
-This tutorial is intended for developpers who want to build the Qi4j SDK themselves.
-It describe the Qi4j SDK Build System from compilation to publication of artifacts for consumption by other
+[[build-system,Build System]]
+= Zest™ Build System =
+
+This tutorial is intended for developpers who want to build the Zest™ SDK themselves.
+It describe the Zest™ SDK Build System from compilation to publication of artifacts for consumption by other
 applications.
 
-If instead you want to setup your project build system to depend on modules of the Qi4j SDK see the
-<<howto-depend-on-qi4j,dedicated tutorial>>.
+If instead you want to setup your project build system to depend on modules of the Zest™ SDK see the
+<<howto-depend-on-zest,dedicated tutorial>>.
 
 
 == Gradle ==
 
 NOTE: All major Java IDEs have great Gradle support.
-Visit the http://www.gradle.org/tooling[Gradle Tooling] page to learn how to import the Qi4j SDK build into your
+Visit the http://www.gradle.org/tooling[Gradle Tooling] page to learn how to import the Zest™ SDK build into your
 favorite IDE.
 
-Qi4j community migrated away from Maven after several years of frustration, especially around release management,
+Zest™ community migrated away from Maven after several years of frustration, especially around release management,
 versioning and cross-module dependency resolution issues, in Feb 2011.
 The tool of choice is now Gradle, and it doesn't require any installation, there are +gradlew+ and +gradlew.bat+ in
-the root folder of the Qi4j SDK that will bootstrap Gradle if not done so already.
+the root folder of the Zest™ SDK that will bootstrap Gradle if not done so already.
 
 If you are new to Gradle, you should keep the http://www.gradle.org/documentation[documentation] at hands.
 
@@ -29,13 +48,20 @@
 
 == Root project tasks ==
 
-The Qi4j SDK root project has tasks that work with the whole SDK.
+The Zest™ SDK root project has tasks that work with the whole SDK.
 The default build, triggered when running gradle without any command line arguments, compiles the code and run the
 tests, but nothing else.
 A quick way to check that nothing broke.
 
 Here are some of theses global tasks we defined:
 
+goOffline::
++
+--
+Resolve, download and cache all needed dependencies.
+Useful to go offline.
+--
+
 clean::
 +
 --
@@ -46,7 +72,7 @@
 +
 --
 Run the tests and other checks like checkstyle.
-Reports are generated in +qi4j-sdk/build/reports+.
+Reports are generated in +build/reports+.
 --
 
 install::
@@ -61,14 +87,14 @@
 +
 --
 Produces all the archives, javadocs, manuals and website content.
-The output is generated to +qi4j-sdk/build+.
+The output is generated to +build+.
 --
 
 release::
 +
 --
 Uploads the release artifacts to the distribution servers and creates the release output into the
-+qi4j-sdk/build/distributions+ directory.
++build/distributions+ directory.
 --
 
 
@@ -83,7 +109,7 @@
 ----
 
 This example will output all gradle tasks available in the +tests/performance+ module where you should find
-the +testPerf+ task that run the Qi4j performance test suite.
+the +testPerf+ task that run the Zest™ performance test suite.
 
 
 == Versions ==
@@ -105,40 +131,18 @@
 
 == Tests ==
 
-NOTE: See the http://qi4j.org/community/ci.html[Qi4j Continuous Integration] for current tests results
+NOTE: See the https://builds.apache.org/view/S-Z/view/Zest/[Zest™ Continuous Integration] for current tests results
 
-// TODO
-
-=== Regression tests ===
-
-They are not part of the default build.
-
-// TODO
-
-
-=== Performance tests ===
-
-Performance tests provide performance mesurements for typical Qi4j use cases.
-They are not part of the default build.
-
-// TODO
-
-
-=== Complex tests ===
-
-Complex tests are the ones that requires manual operation to be executed.
-They are not part of the default build.
-
-// TODO
-
+Unit and integration tests are located near the code under test.
+You'll find theses tests across the whole SDK.
 
 === Unit tests requiring external services ===
 
-NOTE: The HTML test reports generated by Gradle show skipped tests.
-
 Among unit tests, some require an external service to be run.
 For example, the MongoDB EntityStore extension requires an actual MongoDB server to run its tests.
 
+NOTE: The HTML test reports generated by Gradle show skipped tests.
+
 All thoses tests should be part of the default build and check if the service is available at its default location
 on +localhost+ and skip if not.
 This is easily achieved using http://junit.sourceforge.net/javadoc/org/junit/Assume.html[JUnit assumptions].
@@ -152,13 +156,42 @@
 - PostgreSQL for +extensions/entitystore-sql+ and +extensions/indexing-sql+ (need setup, see test source)
 - MySQL for +extensions/entitystore-sql+ (need setup, see test source)
 
+=== Performance tests ===
 
-== Releasing the Qi4j SDK ==
+Performance tests provide performance mesurements for typical Zest™ use cases.
+They are not part of the default build and are located in the `tests/performance` directory of the SDK.
+
+They can be run with the following Gradle command:
+
+[source,bash]
+-----------
+./gradlew :org.qi4j.tests:org.qi4j.test.performance:testPerf
+-----------
+
+Results will then be available in the test reports.
+
+
+== Documentation generation ==
+
+The build generates a documentation minisite:
+
+[source,bash]
+-----------
+./gradlew -p manual website
+-----------
+
+Output is in `~/manual/build/docs/website`.
+
+You'll need Asciidoc and docbook-xsl installed.
+
+
+
+== Build for releases ==
 
 IMPORTANT: Remember that if a +version+ property is not defined, the build system will refuse to make a release and upload.
 
-The Qi4j SDK build system is setup for an easy release process.
-This is very useful to the Qi4j Core Team but can also be useful to third parties that want to cut a in-house release.
+The Zest™ SDK build system is setup for an easy release process.
+This is very useful to the Zest™ Core Team but can also be useful to third parties that want to cut a in-house release.
 In this regard, we try to make every aspect of the release process usable for such cases.
 
 The following sections describe various aspects of the release process.
@@ -167,12 +200,12 @@
 
 === Release Criteria ===
 
-The Qi4j SDK modules are of varying maturity level and we try to maintain a STATUS (+dev-status.xml+) file indicating
+The Zest™ SDK modules are of varying maturity level and we try to maintain a STATUS (+dev-status.xml+) file indicating
 how good the codebase, documentation and unit tests are for each of the modules. This is highly subjective and
 potentially different individuals will judge this differently, but at least it gives a ballpark idea of the situation
 for our users.
 
-The Qi4j SDK build system use the values from the +dev-status.xml+ files to filter out non-releasable modules out for
+The Zest™ SDK build system use the values from the +dev-status.xml+ files to filter out non-releasable modules out for
 the +javadocs+ and +uploadArchives+ root project tasks.
 Moreover, the +release+ task ensure that no releasable module depends on module(s) that don't fit the release criteria
 and throw a detailed exception if need be.
@@ -183,7 +216,7 @@
 === Signing ===
 
 Artifact signing is done using PGP.
-You need to provide Gradle the following properties
+You need to provide Gradle the following properties, `~/.gradle/gradle.properties` is a good place:
 
     signing.keyId=FB751943
     signing.password=foobar
@@ -202,10 +235,10 @@
 By default RELEASES must satisfy ReleaseSpecification, SNAPSHOT don't.
 ReleaseSpecification usage can be turned on or off by setting the `uploadReleaseSpec` property to false.
 
-By default RELEASES and SNAPHOTS are uploaded using WEBDAV.
+By default RELEASES and SNAPHOTS are uploaded using HTTP.
 Used Wagon can be overriden by setting the `uploadWagon` property.
 
-By default RELEASES and SNAPSHOTS are uploaded to Cloudbees.
+By default RELEASES and SNAPSHOTS are uploaded to the Apache Nexus.
 Target repository can be overriden by setting the `uploadRepository` property.
 
 No username/password is provided by default.
@@ -215,7 +248,7 @@
 
 [source,bash]
 -----------
-./gradlew uploadArchives -Dversion=2.0-SNAPSHOT -PuploadReleaseSpec=false \
+./gradlew uploadArchives -Dversion=3.2.1-SNAPSHOT -PuploadReleaseSpec=false \
     -PuploadWagon=what:ever:wagon -PuploadRepository=http://what.ever.repository/url \
     -PuploadUsername=foo -PuploadPassword=bar
 -----------
@@ -224,7 +257,7 @@
 
 [source,bash]
 -----------
-./gradlew uploadArchives -Dversion=2.0 -PuploadRepository=file:///path/to/local/repository
+./gradlew uploadArchives -Dversion=3.2.1 -PuploadRepository=file:///path/to/local/repository
 -----------
 
 See the http://www.gradle.org/docs/current/userguide/maven_plugin.html#wagonLibs[Gradle documentation] about
diff --git a/manual/src/docs/tutorials/howto-configure-service.txt b/manual/src/docs/tutorials/howto-configure-service.txt
index 3022b33..86751b5 100644
--- a/manual/src/docs/tutorials/howto-configure-service.txt
+++ b/manual/src/docs/tutorials/howto-configure-service.txt
@@ -15,17 +15,17 @@
 
 [[howto-configure-service,Configure a Service]]
 = Configure a Service =
-Qi4j supports a Configuration system for services. The configuration instance itself is an Entity and is therefor
+Zest™ supports a Configuration system for services. The configuration instance itself is an Entity and is therefor
 readable, writeable and queryable, just like other Entities. This should make Configuration management much simpler,
 since you can easily build GUI tools to allow editing of these in runtime. However, to simplify the initial values of
-the Configuration instance, Qi4j also does the initial bootstrapping of the Configuration entity for you. This HowTo is
+the Configuration instance, Zest™ also does the initial bootstrapping of the Configuration entity for you. This HowTo is
 going to show how.
 
 If you want to reproduce what's explained in this tutorial, remember to depend on the Core Bootstrap artifact:
 
 include::../../../../core/bootstrap/build/docs/buildinfo/artifact.txt[]
 
-At runtime you will need the Core Runtime artifact too. See the <<howto-depend-on-qi4j>> tutorial for details.
+At runtime you will need the Core Runtime artifact too. See the <<howto-depend-on-zest>> tutorial for details.
 
 == We need a Service ==
 
@@ -139,7 +139,7 @@
 File: org/qi4j/manual/travel/OrbitzService.properties
 
 == Changing Configuration in runtime ==
-Unlike most frameworks, the Configuration in Qi4j is an active Entity, and once the properties file has been read once
+Unlike most frameworks, the Configuration in Zest™ is an active Entity, and once the properties file has been read once
 at the first(!) startup, it no longer serves any purpose. The Configuration will always be retrieved from the
 EntityStore. Changes to the properties file are not taken into consideration if the Configuration entity is found in the
 entity store.
diff --git a/manual/src/docs/tutorials/howto-contextual-fragments.txt b/manual/src/docs/tutorials/howto-contextual-fragments.txt
index 40573c9..1dc423c 100644
--- a/manual/src/docs/tutorials/howto-contextual-fragments.txt
+++ b/manual/src/docs/tutorials/howto-contextual-fragments.txt
@@ -29,7 +29,7 @@
 
 include::../../../../core/bootstrap/build/docs/buildinfo/artifact.txt[]
 
-At runtime you will need the Core Runtime artifact too. See the <<howto-depend-on-qi4j>> tutorial for details.
+At runtime you will need the Core Runtime artifact too. See the <<howto-depend-on-zest>> tutorial for details.
 
 The mixins, sideeffects and concerns are added during the bootstrap phase. It is very straight-forward;
 
diff --git a/manual/src/docs/tutorials/howto-create-concern.txt b/manual/src/docs/tutorials/howto-create-concern.txt
index 9b319f5..a36ea99 100644
--- a/manual/src/docs/tutorials/howto-create-concern.txt
+++ b/manual/src/docs/tutorials/howto-create-concern.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[howto-create-concern,Create a Concern]]
 = Create a Concern =
 
@@ -7,7 +26,7 @@
 
 include::../../../../core/bootstrap/build/docs/buildinfo/artifact.txt[]
 
-At runtime you will need the Core Runtime artifact too. See the <<howto-depend-on-qi4j>> tutorial for details.
+At runtime you will need the Core Runtime artifact too. See the <<howto-depend-on-zest>> tutorial for details.
 
 == Typed Concern ==
 
@@ -22,8 +41,8 @@
 Note that we could have implemented the InventoryConcern as an abstract class if we were not interested in __all__ the methods in the Order interface.
 Extending the ConcernOf is a convenience mechanism, instead of an explicit @ConcernFor annotation on
 a private field, which can be used in rare occasions when you are not able to extend. This base class defines the next
-field, which is set up by the Qi4j runtime and points to the next fragment in the call stack. We can also see that the
-InventoryService is provided to the concern, which is done with dependency injection. Qi4j also supports dependency
+field, which is set up by the Zest™ runtime and points to the next fragment in the call stack. We can also see that the
+InventoryService is provided to the concern, which is done with dependency injection. Zest™ also supports dependency
 injection via constructors and methods.
 
 It can be used as follows;
diff --git a/manual/src/docs/tutorials/howto-create-constraint.txt b/manual/src/docs/tutorials/howto-create-constraint.txt
index 603f3dd..23dfab7 100644
--- a/manual/src/docs/tutorials/howto-create-constraint.txt
+++ b/manual/src/docs/tutorials/howto-create-constraint.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[howto-create-constraint,Create a Constraint]]
 = Create a Constraint =
 
@@ -7,7 +26,7 @@
 
 include::../../../../core/bootstrap/build/docs/buildinfo/artifact.txt[]
 
-At runtime you will need the Core Runtime artifact too. See the <<howto-depend-on-qi4j>> tutorial for details.
+At runtime you will need the Core Runtime artifact too. See the <<howto-depend-on-zest>> tutorial for details.
 
 == Method Constraint ==
 
diff --git a/manual/src/docs/tutorials/howto-create-entity.txt b/manual/src/docs/tutorials/howto-create-entity.txt
index 1b69e14..41ffe94 100644
--- a/manual/src/docs/tutorials/howto-create-entity.txt
+++ b/manual/src/docs/tutorials/howto-create-entity.txt
@@ -15,9 +15,9 @@
 
 [[howto-create-entity,Create an Entity]]
 = Create an Entity =
-One of the most common tasks in Qi4j is the management of the life cycle of Entities. Since Qi4j is capable of
+One of the most common tasks in Zest™ is the management of the life cycle of Entities. Since Zest™ is capable of
 delivering much higher performance than traditional Object-Relational Mapping technologies, we also expect that people
-use Entities more frequently in Qi4j applications, so it is a very important topic to cover.
+use Entities more frequently in Zest™ applications, so it is a very important topic to cover.
 
 If you want to reproduce what's explained in this tutorial, remember to depend on the Core Bootstrap artifact:
 
@@ -26,7 +26,7 @@
 Moreover, you'll need an EntityStore for persistence and an Indexing engine for querying. Choose among the available
 implementations listed in the <<extensions>> section.
 
-At runtime you will need the Core Runtime artifact too. See the <<howto-depend-on-qi4j>> tutorial for details.
+At runtime you will need the Core Runtime artifact too. See the <<howto-depend-on-zest>> tutorial for details.
 
 == Basics First ==
 
@@ -39,7 +39,7 @@
 interface. The Visibility rules will be applied to associate the right EntityComposite when a domain type is requested.
 Ambiguities are not accepted and will result in runtime exceptions.
 
-Qi4j supports that each entity instance can have more than one entity type, and it is managed per instance. This feature
+Zest™ supports that each entity instance can have more than one entity type, and it is managed per instance. This feature
 is beyond the scope of this HowTO and will be covered subsequently.
 
 == Good Practice ==
@@ -125,7 +125,7 @@
 
 == The Entity Factory ==
 
-The entity factory is something you need to write yourself, but as with most things in Qi4j it will end up being a
+The entity factory is something you need to write yourself, but as with most things in Zest™ it will end up being a
 fairly small implementation. So how is that done?
 
 [snippet,java]
@@ -134,7 +134,7 @@
 tag=carFactory
 -----------
 
-That is just the domain interface. We now need to make the service interface, which Qi4j needs to identify services and
+That is just the domain interface. We now need to make the service interface, which Zest™ needs to identify services and
 make it possible for the service injection later.
 
 [snippet,java]
@@ -151,7 +151,7 @@
 tag=carFactoryMixin1
 -----------
 
-And doing that, first of all we need to request Qi4j runtime to give us the Module
+And doing that, first of all we need to request Zest™ runtime to give us the Module
 that our code belongs to, and the UnitOfWork current context the execution is happening in.
 
 Injections that are related to the Visibility rules are handled by the @Structure annotation. And the easiest way for us
@@ -163,7 +163,7 @@
 tag=carFactoryMixin2
 -----------
 
-Here Qi4j will inject the member module with the correct Module. In case we only need the Module
+Here Zest™ will inject the member module with the correct Module. In case we only need the Module
 during the construction, we can also request it in the same manner as constructor argument.
 
 [snippet,java]
diff --git a/manual/src/docs/tutorials/howto-create-sideeffect.txt b/manual/src/docs/tutorials/howto-create-sideeffect.txt
index 6c40829..2675168 100644
--- a/manual/src/docs/tutorials/howto-create-sideeffect.txt
+++ b/manual/src/docs/tutorials/howto-create-sideeffect.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[howto-create-sideeffect,Create a SideEffect]]
 = Create a SideEffect =
 
@@ -7,7 +26,7 @@
 
 include::../../../../core/bootstrap/build/docs/buildinfo/artifact.txt[]
 
-At runtime you will need the Core Runtime artifact too. See the <<howto-depend-on-qi4j>> tutorial for details.
+At runtime you will need the Core Runtime artifact too. See the <<howto-depend-on-zest>> tutorial for details.
 
 == Typed SideEffect ==
 
@@ -22,9 +41,9 @@
 The MailNotifySideEffect is implemented as an abstract class, since we are not interested in the many other methods in
 the Confirmable interface. Extending the SideEffectOf is a convenience mechanism, instead of an explicit @SideEffectFor
 annotation on a private field, which can be used in rare occasions when you are not able to extend. This base class
-defines the next field, which is set up by the Qi4j runtime and points to the next fragment in the call stack. We can
+defines the next field, which is set up by the Zest™ runtime and points to the next fragment in the call stack. We can
 also see that the MailService, HasLineItems and HasCustomer are provided to the side-effect, which is done with
-dependency injection. Qi4j also supports dependency injection via constructors and methods.
+dependency injection. Zest™ also supports dependency injection via constructors and methods.
 
 It can be used as follows;
 
diff --git a/manual/src/docs/tutorials/howto-depend-on-qi4j.txt b/manual/src/docs/tutorials/howto-depend-on-qi4j.txt
deleted file mode 100644
index 76b7306..0000000
--- a/manual/src/docs/tutorials/howto-depend-on-qi4j.txt
+++ /dev/null
@@ -1,180 +0,0 @@
-[[howto-depend-on-qi4j,Depend on Qi4j in your build]]
-= Depend on Qi4j in your build =
-
-NOTE: Some of the <<libraries>> and <<extensions>> depend on artifacts that are not deployed in central, you'll need to
-add other repositories to your build scripts accordingly.
-
-Release artifacts, including sources and javadoc, are deployed to
-
-https://repository-qi4j.forge.cloudbees.com/release/[https://repository-qi4j.forge.cloudbees.com/release/].
-
-Snapshot artifacts, including sources and javadoc, are built against the `develop` branch and deployed weekly to
-
-https://repository-qi4j.forge.cloudbees.com/snapshot/[https://repository-qi4j.forge.cloudbees.com/snapshot/].
-
-As they are not deployed to central you need to add the repositories to your build scripts.
-
-
-== Manually ==
-
-If you don't rely on your build scripts dependency resolution mechanism you should
-http://qi4j.org/downloads.html[download] the SDK distribution.
-
-== Using Maven ==
-
-First you need to register the Qi4j repositories:
-
-[source,xml]
-----
-<repositories>
-    <repository>
-        <id>qi4j-releases</id>
-        <url>https://repository-qi4j.forge.cloudbees.com/release/</url>
-    </repository>
-    <repository>
-        <id>qi4j-snapshots</id>
-        <url>https://repository-qi4j.forge.cloudbees.com/snapshot/</url>
-        <releases><enabled>false</enabled></releases>
-        <snapshots><enabled>true</enabled></snapshots>
-    </repository>
-</repositories>
-----
-
-After that you can declare dependencies on Qi4j artifacts:
-
-[source,xml]
-----
-<dependencies>
-    <dependency>
-        <groupId>org.qi4j.core</groupId>
-        <artifactId>org.qi4j.core.bootstrap</artifactId>
-        <version>QI4J_VERSION</version>
-    </dependency>
-    <dependency>
-        <groupId>org.qi4j.core</groupId>
-        <artifactId>org.qi4j.core.runtime</artifactId>
-        <version>QI4J_VERSION</version>
-        <scope>runtime</scope>
-    </dependency>
-    <dependency>
-        <groupId>org.qi4j.core</groupId>
-        <artifactId>org.qi4j.core.testsupport</artifactId>
-        <version>QI4J_VERSION</version>
-        <scope>test</scope>
-    </dependency>
-</dependencies>
-----
-
-Where `QI4J_VERSION` is the Qi4j version you want to use.
-
-== Using Gradle ==
-
-First you need to register the Qi4j repositories:
-
-[source,groovy]
-----
-repositories {
-    maven { name 'qi4j-releases'; url "https://repository-qi4j.forge.cloudbees.com/release/" }
-    maven { name 'qi4j-snapshots'; url "https://repository-qi4j.forge.cloudbees.com/snapshot/" }
-}
-----
-
-After that you can declare dependencies on Qi4j artifacts:
-
-[source,groovy]
-----
-dependencies {
-    compile     "org.qi4j.core:org.qi4j.core.bootstrap:QI4J_VERSION"
-    runtime     "org.qi4j.core:org.qi4j.core.runtime:QI4J_VERSION"
-    testCompile "org.qi4j.core:org.qi4j.core.testsupport:QI4J_VERSION"
-}
-----
-
-Where `QI4J_VERSION` is the Qi4j version you want to use.
-
-== Using Buildr ==
-
-First you need to register the Qi4j repositories:
-
-[source,ruby]
-----
-repositories.remote << 'https://repository-qi4j.forge.cloudbees.com/release/'
-repositories.remote << 'https://repository-qi4j.forge.cloudbees.com/snapshot/'
-----
-
-After that you can declare dependencies on Qi4j artifacts:
-
-[source,ruby]
-----
-compile.with 'org.qi4j.core:org.qi4j.core.bootstrap:QI4J_VERSION'
-package(:war).with :libs => 'org.qi4j.core:org.qi4j.core.runtime:QI4J_VERSION'
-test.with 'org.qi4j.core:org.qi4j.core.testsupport:QI4J_VERSION'
-----
-
-Where `QI4J_VERSION` is the Qi4j version you want to use.
-
-== Using SBT ==
-
-First you need to register the Qi4j repositories:
-
-[source,scala]
-----
-resolvers += "qi4j-releases" at "https://repository-qi4j.forge.cloudbees.com/release/"
-
-resolvers += "qi4j-snapshots" at "https://repository-qi4j.forge.cloudbees.com/snapshot/"
-----
-
-After that you can declare dependencies on Qi4j artifacts:
-
-[source,scala]
-----
-libraryDependencies += \
-    "org.qi4j.core" % "org.qi4j.core.bootstrap" % "QI4J_VERSION" \
-    withSources() withJavadoc()
-libraryDependencies += \
-    "org.qi4j.core" % "org.qi4j.core.runtime" % "QI4J_VERSION" % "runtime" \
-    withSources() withJavadoc()
-libraryDependencies += \
-    "org.qi4j.core" % "org.qi4j.core.testsupport" % "QI4J_VERSION" % "test" \
-    withSources() withJavadoc()
-----
-
-Where `QI4J_VERSION` is the Qi4j version you want to use.
-
-== Using Ivy ==
-
-First you need to register the Qi4j repositories in a `ivysettings.xml` file:
-
-[source,xml]
-----
-<ivysettings>
-    <settings defaultResolver="chain"/>
-    <resolvers>
-        <chain name="chain">
-            <ibiblio name="qi4j-releases"  m2compatible="true"
-                     root="https://repository-qi4j.forge.cloudbees.com/release/"/>
-            <ibiblio name="qi4j-snapshots" m2compatible="true"
-                     root="https://repository-qi4j.forge.cloudbees.com/snapshot/"/>
-        </chain>
-    </resolvers>
-</ivysettings>
-----
-
-After that you can declare dependencies on Qi4j artifacts:
-
-[source,xml]
-----
-<ivy-module>
-    <dependencies>
-        <dependency org="org.qi4j.core" name="org.qi4j.core.bootstrap"
-                    rev="QI4J_VERSION"  conf="default" />
-        <dependency org="org.qi4j.core" name="org.qi4j.core.runtime"
-                    rev="QI4J_VERSION"  conf="runtime" />
-        <dependency org="org.qi4j.core" name="org.qi4j.core.testsupport"
-                    rev="QI4J_VERSION"  conf="test" />
-    </dependencies>
-</ivy-module>
-----
-
-Where `QI4J_VERSION` is the Qi4j version you want to use.
-
diff --git a/manual/src/docs/tutorials/howto-depend-on-zest.txt b/manual/src/docs/tutorials/howto-depend-on-zest.txt
new file mode 100644
index 0000000..1d0b629
--- /dev/null
+++ b/manual/src/docs/tutorials/howto-depend-on-zest.txt
@@ -0,0 +1,193 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
+[[howto-depend-on-zest,Depend on Zest™ in your build]]
+= Depend on Zest™ in your build =
+
+NOTE: Some of the <<libraries>> and <<extensions>> depend on artifacts that are not deployed in central, you'll need to
+add other repositories to your build scripts accordingly.
+
+Release artifacts, including sources and javadoc, are deployed to Maven Central:
+
+http://repo1.maven.org/maven2/ (US)
+
+http://uk.maven.org/maven2/ (Europe)
+
+Snapshot artifacts, including sources and javadoc, are built against the `develop` branch and deployed weekly to the Apache SNAPSHOTS repository:
+
+http://repository.apache.org/snapshots/
+
+
+== Manually ==
+
+If you don't rely on your build scripts dependency resolution mechanism you should
+https://zest.apache.org/download.html[download] the SDK distribution.
+
+
+== Using Maven ==
+
+You simply declare dependencies on Zest™ artifacts:
+
+[source,xml]
+----
+<dependencies>
+    <dependency>
+        <groupId>org.qi4j.core</groupId>
+        <artifactId>org.qi4j.core.bootstrap</artifactId>
+        <version>ZEST_VERSION</version>
+    </dependency>
+    <dependency>
+        <groupId>org.qi4j.core</groupId>
+        <artifactId>org.qi4j.core.runtime</artifactId>
+        <version>ZEST_VERSION</version>
+        <scope>runtime</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.qi4j.core</groupId>
+        <artifactId>org.qi4j.core.testsupport</artifactId>
+        <version>ZEST_VERSION</version>
+        <scope>test</scope>
+    </dependency>
+</dependencies>
+----
+
+Where `ZEST_VERSION` is the Zest™ version you want to use.
+
+If you want to use +-SNAPSHOT+ versions, you need to register the Apache Snapshots repository:
+
+[source,xml]
+----
+<repositories>
+    <repository>
+        <id>apache-snapshots</id>
+        <url>https://repository.apache.org/snapshots/</url>
+        <releases><enabled>false</enabled></releases>
+        <snapshots><enabled>true</enabled></snapshots>
+    </repository>
+</repositories>
+----
+
+
+== Using Gradle ==
+
+You simply declare dependencies on Zest™ artifacts:
+
+[source,groovy]
+----
+dependencies {
+    compile     "org.qi4j.core:org.qi4j.core.bootstrap:ZEST_VERSION"
+    runtime     "org.qi4j.core:org.qi4j.core.runtime:ZEST_VERSION"
+    testCompile "org.qi4j.core:org.qi4j.core.testsupport:ZEST_VERSION"
+}
+----
+
+Where `ZEST_VERSION` is the Zest™ version you want to use.
+
+If you want to use +-SNAPSHOT+ versions, you need to register the Apache Snapshots repository:
+
+[source,groovy]
+----
+repositories {
+    maven { name 'apache-snapshots'; url "https://repository.apache.org/snapshots/" }
+}
+----
+
+
+== Using Buildr ==
+
+You simply declare dependencies on Zest™ artifacts:
+
+[source,ruby]
+----
+compile.with 'org.qi4j.core:org.qi4j.core.bootstrap:ZEST_VERSION'
+package(:war).with :libs => 'org.qi4j.core:org.qi4j.core.runtime:ZEST_VERSION'
+test.with 'org.qi4j.core:org.qi4j.core.testsupport:ZEST_VERSION'
+----
+
+Where `ZEST_VERSION` is the Zest™ version you want to use.
+
+If you want to use +-SNAPSHOT+ versions, you need to register the Apache Snapshots repository:
+
+[source,ruby]
+----
+repositories.remote << 'https://repository.apache.org/snapshots/'
+----
+
+
+== Using SBT ==
+
+You simply declare dependencies on Zest™ artifacts:
+
+[source,scala]
+----
+libraryDependencies += \
+    "org.qi4j.core" % "org.qi4j.core.bootstrap" % "ZEST_VERSION" \
+    withSources() withJavadoc()
+libraryDependencies += \
+    "org.qi4j.core" % "org.qi4j.core.runtime" % "ZEST_VERSION" % "runtime" \
+    withSources() withJavadoc()
+libraryDependencies += \
+    "org.qi4j.core" % "org.qi4j.core.testsupport" % "ZEST_VERSION" % "test" \
+    withSources() withJavadoc()
+----
+
+Where `ZEST_VERSION` is the Zest™ version you want to use.
+
+If you want to use +-SNAPSHOT+ versions, you need to register the Apache Snapshots repository:
+
+[source,scala]
+----
+resolvers += "apache-snapshots" at "https://repository.apache.org/snapshots/"
+----
+
+
+== Using Ivy ==
+
+You simply declare dependencies on Zest™ artifacts:
+
+[source,xml]
+----
+<ivy-module>
+    <dependencies>
+        <dependency org="org.qi4j.core" name="org.qi4j.core.bootstrap"
+                    rev="ZEST_VERSION"  conf="default" />
+        <dependency org="org.qi4j.core" name="org.qi4j.core.runtime"
+                    rev="ZEST_VERSION"  conf="runtime" />
+        <dependency org="org.qi4j.core" name="org.qi4j.core.testsupport"
+                    rev="ZEST_VERSION"  conf="test" />
+    </dependencies>
+</ivy-module>
+----
+
+Where `ZEST_VERSION` is the Zest™ version you want to use.
+
+If you want to use +-SNAPSHOT+ versions, you need to register the Apache Snapshots repository in a `ivysettings.xml` file:
+
+[source,xml]
+----
+<ivysettings>
+    <settings defaultResolver="chain"/>
+    <resolvers>
+        <chain name="chain">
+            <ibiblio name="apache-snapshots" m2compatible="true"
+                     root="https://repository.apache.org/snapshots/"/>
+        </chain>
+    </resolvers>
+</ivysettings>
+----
diff --git a/manual/src/docs/tutorials/howto-invocation-annotation.txt b/manual/src/docs/tutorials/howto-invocation-annotation.txt
new file mode 100644
index 0000000..200ed44
--- /dev/null
+++ b/manual/src/docs/tutorials/howto-invocation-annotation.txt
@@ -0,0 +1,78 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
+[[howto-invocation-annotation,Use @Invocation]]
+= Use @Invocation =
+The @Invocation annotation is relatively unknown but can be rather powerful to use, especially when creating
+libraries that needs to be flexible of what the user needs to do.
+
+@Invocation is a different +InjectionScope+, which is a concept to tell Zest runtime where to look for the
+instances to be injected. Other, more well-known, +InjectionScope+ annotations are +@This+, +@Structure+ and
++@Service+.
+
+The +@Invocation+ injection scope can provide the following types, all related to the on-going method invocation,
+which is especially useful in Generic Concerns or Generic Mixins;
+
+    * +java.lang.reflect.Method+ - The current method being invoked.
+    * +java.lang.reflect.AnnotatedElement+ - An descriptor for all annotations of the Method.
+    * _Custom Annotations_ - Your own annotation type.
+    * +java.util.Iterable<Method>+ - An iterable of all declared methods of the composite type.
+
+== java.lang.reflect.Method ==
+This injection will simply provide the +java.lang.reflect.Method+ of the on-going call. For generic fragments that
+will be the same as the second argument in the +java.lang.reflect.InvocationHandler.invoke()+ method. Sometimes
+it is useful to obtain this for typed fragment as well, to reduce names in Strings.
+
+== java.lang.reflect.AnnotatedElement ==
+This Reflection API class encapsulates the annotation aspect of any element that can be annotated. Zest implements
+this interface for the Composite. That means that annotations for both the method as well as the composite is provided
+through this injection.
+
+== Custom Annotations ==
+It is often useful to introduce one's own annotations, especially for libraries, and use these annotations to direct
+the runtime to do different things. Many of the "built-in" features in Zest is actually done by this mechanism and
+not directly implemented in the Core Runtime.
+
+First create an annotation of your own liking, it must have +java.lang.annotation.Retention+ set to +RUNTIME+
+
+[snippet,java]
+-----------
+source=core/runtime/src/test/java/org/qi4j/runtime/injection/InvocationInjectionTest.java
+tag=annotation
+-----------
+
+After that it is possible to have this annotation placed on composite type methods,
+
+[snippet,java]
+-----------
+source=core/runtime/src/test/java/org/qi4j/runtime/injection/InvocationInjectionTest.java
+tag=declaration
+-----------
+
+and then the annotation can simply be injected into your Concerns or Mixins, like this;
+
+[snippet,java]
+-----------
+source=core/runtime/src/test/java/org/qi4j/runtime/injection/InvocationInjectionTest.java
+tag=use1
+-----------
+
+== java.util.Iterable<Method> ==
+This injection will provide all the declared methods of the current composite. This is particularly useful for mixins
+or concerns that builds information about the composite they belong to.
\ No newline at end of file
diff --git a/manual/src/docs/tutorials/howto-leverage-properties.txt b/manual/src/docs/tutorials/howto-leverage-properties.txt
index 24bde2c..1934f8c 100644
--- a/manual/src/docs/tutorials/howto-leverage-properties.txt
+++ b/manual/src/docs/tutorials/howto-leverage-properties.txt
@@ -16,7 +16,7 @@
 [[howto-leverage-properties,Leverage Properties]]
 = Leverage Properties =
 
-Qi4j does not follow the JavaBeans standard for property support. Instead, a much more explicit concept is in place. The
+Zest™ does not follow the JavaBeans standard for property support. Instead, a much more explicit concept is in place. The
 advantages are enormous, and the only real downside is that people are already destroyed, thinking in so called POJO
 terms.
 
@@ -24,9 +24,9 @@
 
 include::../../../../core/api/build/docs/buildinfo/artifact.txt[]
 
-At runtime you will need the Core Runtime artifact too. See the <<howto-depend-on-qi4j>> tutorial for details.
+At runtime you will need the Core Runtime artifact too. See the <<howto-depend-on-zest>> tutorial for details.
 
-So in Qi4j, instead of writing;
+So in Zest, instead of writing;
 
 [snippet,java]
 -----------
@@ -70,7 +70,7 @@
 
 == Persistence ==
 
-The Property concept also allows a much better defined persistence model. In Qi4j, only Property and Association
+The Property concept also allows a much better defined persistence model. In Zest, only Property and Association
 instances are persisted, and that makes the semantics around the persistence system very clear.
 
 Properties reference values only, and these values must be Serializable, which means that Properties can not contain
diff --git a/manual/src/docs/tutorials/howto-releasing-apache.txt b/manual/src/docs/tutorials/howto-releasing-apache.txt
new file mode 100644
index 0000000..f529318
--- /dev/null
+++ b/manual/src/docs/tutorials/howto-releasing-apache.txt
@@ -0,0 +1,635 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
+[[releasing-apache,Releasing Zest]]
+= Releasing Zest™
+
+[WARNING]
+====
+You need a unix-like environment to actually perform the release process.
+This tutorial is known to work on Linux and Mac.
+====
+
+This tutorial is intended for Apache Zest™ commiters who want to release a new version of Apache Zest™ (Java Edition) at The Apache Software Foundation.
+It describes the tools and processes of a typical release.
+
+It is intended to be a recommendation of best practices for the Apache Zest™ project.
+The instructions provided here are consistent with, but not a replacement for the https://www.apache.org/dev/release.html[ASF Release Guidelines].
+
+
+
+== Preparing a release
+
+
+=== Select a Release Manager
+
+A Zest committer (normally one of the development team) should post an email to the development list proposing that a release be made and nominating a release manager.
+Typically, the proposer volunteers as the release manager and it passes by https://www.apache.org/foundation/glossary.html#LazyConsensus[lazy consensus].
+
+
+=== Clone/Checkout all repositories
+
+Clone/checkout all needed repositories, next to each other:
+
+[source,shell]
+----
+mkdir zest-repos
+cd zest-repos
+git clone https://git-wip-us.apache.org/repos/asf/zest-java.git zest-java
+svn checkout https://svn.apache.org/repos/asf/zest/ zest-web
+svn checkout --depth empty https://dist.apache.org/repos/dist/ zest-dist
+cd zest-dist
+svn update --set-depth immediates dev
+svn update --set-depth immediates release
+svn update --set-depth infinity dev/zest
+svn update --set-depth infinity release/zest
+----
+
+You should then get the following directory tree:
+
+[source,text]
+----
+.
+└── zest-repos
+    ├── zest-java           # Apache Zest™ (Java Edition) source
+    ├── zest-web            # https://zest.apache.org/ website
+    └── zest-dist
+        ├── dev
+        |   └── zest        # Releases candidate distributions
+        └── release
+            └── zest        # Releases distributions
+----
+
+
+[TIP]
+====
+From now on, all command line snippets start from the `zest-repos` directory.
+====
+
+
+=== Build Apache Zest™ (Java Edition)
+
+Ensure you can test, build Apache Zest™ (Java Edition), including the documentation minisite generation using Asciidoc and artifact signing.
+
+Here is what should pass before going further:
+
+[source,shell]
+----
+cd zest-java
+./gradlew -Dversion="<RELEASE-VERSION>" website signArchives
+----
+
+See the <<build-system, Build System>> tutorial for details.
+
+
+=== Install Jekyll
+
+Moreover, you will need to have a valid http://jekyllrb.com/[Jekyll] installation as the Apache Zest™ https://zest.apache.org/[website] is generated using it.
+
+
+=== Setup git flow
+
+`git-flow` is a git extension that add git commands to easily use the git flow branching model the Apache Zest™ project follows.
+See the https://github.com/nvie/gitflow/wiki/Installation[installation instructions].
+
+
+=== Setup git signing
+
+Ensure you can sign git tags.
+
+[source,shell]
+----
+git config --global user.signingkey <YOUR-PGP-ID>
+----
+
+See the https://git-scm.com/book/tr/v2/Git-Tools-Signing-Your-Work[Git Tools - Signing Your Work] section of the Git book.
+
+
+=== Setup Apache Nexus credentials
+
+See the Apache https://www.apache.org/dev/publishing-maven-artifacts.html[Publishing Maven Artifacts] guide and the Apache Zest™ (Java Edition) <<build-system,Build System>> tutorial.
+
+
+=== Update the `KEYS` files if needed.
+
+The reference `KEYS` file can be found at the `zest-java` repository's root, that is `zest-java/KEYS`.
+Ensure that it contains your public key.
+
+Next, diff it against the ones present in the `dev` and `release` distribution areas:
+
+[source,shell]
+----
+diff zest-java/KEYS zest-dist/dev/zest/KEYS
+diff zest-java/KEYS zest-dist/release/zest/KEYS
+----
+
+And update them if needed:
+
+[source,shell]
+----
+cp zest-java/KEYS zest-dist/dev/zest/KEYS
+cp zest-java/KEYS zest-dist/release/zest/KEYS
+cd zest-dist/dev/zest
+svn add dev/zest/KEYS release/zest/KEYS
+svn commit -m "zest: updating Zest KEYS"
+----
+
+
+
+== Creating a Release Candidate
+
+
+=== Resolve JIRA issues
+
+Resolve all issues on that version!
+They can be resolved by:
+
+- fixing
+- marking them as `INVALID` or `WONTFIX`
+- changing their fix version to another unreleased version
+
+See the https://issues.apache.org/jira/browse/ZEST[ZEST] project on JIRA.
+
+
+=== Prepare Release-Notes
+
+Apache Zest™ release-notes are generated from JIRA issues.
+
+Open the target Zest™ version's release-notes in https://issues.apache.org/jira/browse/ZEST/?selectedTab=com.atlassian.jira.jira-projects-plugin:roadmap-panel[JIRA] and review them.
+
+JIRA can produces release-notes as HTML or plain-text.
+Set it up to generate plain-text release-notes.
+
+We will need these in several formats.
+Starting from the plain-text one we will generate the others.
+
+First save the text-plain release-notes in a file named `apache-zest-java-<RELEASE-VERSION>-release-notes.txt`.
+A good place for this file would be in the `zest-repos` directory created earlier, alongside all repositories.
+
+Convert to Asciidoc:
+
+[source,shell]
+----
+cat "apache-zest-java-<RELEASE-VERSION>-release-notes.txt" | \
+  sed -e "s/* \[ZEST-\([0-9]\)*\]/- https:\/\/issues.apache.org\/jira\/browse\/ZEST-\1[ZEST-\1]/" | \
+  sed -e "s/^\*\*/===/" > "apache-zest-java-<RELEASE-VERSION>-release-notes.adoc"
+----
+
+Convert to Markdown:
+
+[source,shell]
+----
+cat "apache-zest-java-<RELEASE-VERSION>-release-notes.txt" | \
+  sed -e "s/* \[ZEST-\([0-9]\)*\]/- [ZEST-\1](https:\/\/issues.apache.org\/jira\/browse\/ZEST-\1)/" | \
+  sed -e "s/^\*\*/###/" > "apache-zest-java-<RELEASE-VERSION>-release-notes.md"
+----
+
+You should then have the following files:
+
+[source,shell]
+----
+.
+├── apache-zest-java-<RELEASE-VERSION>-release-notes.txt
+├── apache-zest-java-<RELEASE-VERSION>-release-notes.adoc
+└── apache-zest-java-<RELEASE-VERSION>-release-notes.md
+----
+
+We will use them later.
+
+
+=== Create a RC branch
+
+We use `<RELEASE-VERSION>-RC#` where `RELEASE-VERSION` is the target release version and `RC#` for Release Candidate and an incremental number in case the release process has to be done several times.
+
+[source,shell]
+----
+cd zest-java
+git flow release start "<RELEASE-VERSION>-RC#"
+----
+
+This will eventually generates a `<RELEASE-VERSION>-RC#` tag that we will amend with a `<RELEASE-VERSION>` signed tag if the vote passes, see below.
+
+
+=== Audit artifacts and distributions
+
+Make a complete build, deploying maven artifacts locally:
+
+[source,shell]
+----
+cd zest-java
+./gradlew -Dversion="<RELEASE-VERSION>" -PuploadRepository="file://$(pwd)/build/repositories/zest-java" \
+    clean assemble checkDists uploadArchives
+----
+
+Review maven artifacts in `build/repositories/zest-java`.
+
+Also review the release distributions in `build/distributions` where you should find the following files:
+
+[source,shell]
+----
+.
+├── apache-zest-java-<RELEASE-VERSION>-bin.tgz
+├── apache-zest-java-<RELEASE-VERSION>-bin.tgz.MD5
+├── apache-zest-java-<RELEASE-VERSION>-bin.tgz.SHA-512
+├── apache-zest-java-<RELEASE-VERSION>-bin.tgz.asc
+├── apache-zest-java-<RELEASE-VERSION>-bin.zip
+├── apache-zest-java-<RELEASE-VERSION>-bin.zip.MD5
+├── apache-zest-java-<RELEASE-VERSION>-bin.zip.SHA-512
+├── apache-zest-java-<RELEASE-VERSION>-bin.zip.asc
+├── apache-zest-java-<RELEASE-VERSION>-src.tgz
+├── apache-zest-java-<RELEASE-VERSION>-src.tgz.MD5
+├── apache-zest-java-<RELEASE-VERSION>-src.tgz.SHA-512
+├── apache-zest-java-<RELEASE-VERSION>-src.tgz.asc
+├── apache-zest-java-<RELEASE-VERSION>-src.zip
+├── apache-zest-java-<RELEASE-VERSION>-src.zip.MD5
+├── apache-zest-java-<RELEASE-VERSION>-src.zip.SHA-512
+└── apache-zest-java-<RELEASE-VERSION>-src.zip.asc
+----
+
+If any, make the required changes, commit them and iterate.
+
+
+=== Close the RC branch
+
+Once you are satisfied with the produced artifacts, close the release candidate branch:
+
+[source,shell]
+----
+cd zest-java
+git flow release finish "<RELEASE-VERSION>-RC#"
+----
+
+
+=== Checkout the RC tag
+
+To build the release candidate bits, we need to checkout the release candidate tag, that will eventually be promoted as a signed release tag, because the Apache Zest™ build system generates versionning information based on git metadata.
+
+[source,shell]
+----
+cd zest-java
+git checkout "<RELEASE-VERSION>-RC#"
+----
+
+
+=== Build RC artifacts and distributions
+
+[source,shell]
+----
+cd zest-java
+./gradlew -Dversion="<RELEASE-VERSION>" clean assemble
+----
+
+
+=== Stage RC maven artifacts
+
+Stage artifacts to https://repository.apache.org/[repository.apache.org] :
+
+[source,shell]
+----
+cd zest-java
+./gradlew -Dversion="<RELEASE-VERSION>" uploadArchives
+----
+
+Close the staging Nexus repository by following the https://www.apache.org/dev/publishing-maven-artifacts.html#close-stage[Closing the staged repository] guide.
+
+
+=== Upload RC distributions
+
+Source and binary distributions, checksums and signatures must be uploaded to https://dist.apache.org/repos/dist/dev/zest/[dist.apache.org/repos/dist/dev/zest].
+This build created these in the `buid/distributions` directory, named `apache-zest-java-<RELEASE-VERSION>-[src|bin]*.*`.
+As this release still is a simple candidate, we'll rename them before upload to advertise this in their names.
+
+[source,shell]
+----
+# Source ZIP
+cp "zest-java/build/distributions/apache-zest-java-<RELEASE-VERSION>-src.zip" "zest-dist/dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-src.zip"
+cp "zest-java/build/distributions/apache-zest-java-<RELEASE-VERSION>-src.zip.MD5" "zest-dist/dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-src.zip.MD5"
+cp "zest-java/build/distributions/apache-zest-java-<RELEASE-VERSION>-src.zip.SHA-512" "zest-dist/dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-src.zip.SHA-512"
+cp "zest-java/build/distributions/apache-zest-java-<RELEASE-VERSION>-src.zip.asc" "zest-dist/dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-src.zip.asc"
+# Source TAR.GZ
+cp "zest-java/build/distributions/apache-zest-java-<RELEASE-VERSION>-src.tgz" "zest-dist/dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-src.tgz"
+cp "zest-java/build/distributions/apache-zest-java-<RELEASE-VERSION>-src.tgz.MD5" "zest-dist/dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-src.tgz.MD5"
+cp "zest-java/build/distributions/apache-zest-java-<RELEASE-VERSION>-src.tgz.SHA-512" "zest-dist/dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-src.tgz.SHA-512"
+cp "zest-java/build/distributions/apache-zest-java-<RELEASE-VERSION>-src.tgz.asc" "zest-dist/dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-src.tgz.asc"
+# Binary ZIP
+cp "zest-java/build/distributions/apache-zest-java-<RELEASE-VERSION>-bin.zip" "zest-dist/dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-bin.zip"
+cp "zest-java/build/distributions/apache-zest-java-<RELEASE-VERSION>-bin.zip.MD5" "zest-dist/dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-bin.zip.MD5"
+cp "zest-java/build/distributions/apache-zest-java-<RELEASE-VERSION>-bin.zip.SHA-512" "zest-dist/dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-bin.zip.SHA-512"
+cp "zest-java/build/distributions/apache-zest-java-<RELEASE-VERSION>-bin.zip.asc" "zest-dist/dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-bin.zip.asc"
+# Binary TAR.GZ
+cp "zest-java/build/distributions/apache-zest-java-<RELEASE-VERSION>-bin.tgz" "zest-dist/dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-bin.tgz"
+cp "zest-java/build/distributions/apache-zest-java-<RELEASE-VERSION>-bin.tgz.MD5" "zest-dist/dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-bin.tgz.MD5"
+cp "zest-java/build/distributions/apache-zest-java-<RELEASE-VERSION>-bin.tgz.SHA-512" "zest-dist/dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-bin.tgz.SHA-512"
+cp "zest-java/build/distributions/apache-zest-java-<RELEASE-VERSION>-bin.tgz.asc" "zest-dist/dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-bin.tgz.asc"
+----
+
+And then upload them:
+
+[source,shell]
+----
+cd zest-dist/dev/zest
+svn add * --force
+svn commit -m "zest: upload <RELEASE-VERSION> to dist/dev/zest"
+----
+
+
+== Run the vote
+
+Send a "VOTE" to the mailto:dev@zest.apache.org[developer mailing list] including links to release artifacts. A VOTE always contains two parts. Send an email to the developer mailing list with the subject line:
+
+[source,text]
+----
+[VOTE] Release Zest (Java Edition) version <RELEASE-VERSION>
+----
+
+Here is a sample template:
+
+[source,text]
+----
+Dear community,
+
+I am happy to start the VOTE thread for Apache Zest (Java Edition) <RELEASE-VERSION>!
+
+The changelog for this release can be found here: https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12316820&version=12332997
+
+Tag: https://git-wip-us.apache.org/repos/asf?p=zest-java.git;a=tag;h=cc0f8211bf47b2df72a6239c9fdcd1d6906ea246
+
+The distributions to be voted on are located here: https://dist.apache.org/repos/dist/dev/zest/
+
+Convenience artifacts in a maven repository are staged here: https://repository.apache.org/content/groups/staging/org/qi4j/
+
+Release distributions and convenience artifacts are signed with the following key: https://dist.apache.org/repos/dist/dev/zest/KEYS
+
+Please vote on releasing this package as Apache Zest (Java Edition) <RELEASE-VERSION>.
+
+The vote is open for the next 72 hours and passes if a majority of at least three +1 PMC votes are cast and there must be more positive than negative votes.
+
+[ ] +1 Release Apache Zest (Java Edition) <RELEASE-VERSION>
+[ ]  0 I don't have a strong opinion about this, but I assume it's ok
+[ ] -1 Do not release Apache Zest (Java Edition) <RELEASE-VERSION> because...
+
+Here is my vote:
+
++1 (binding)
+
+Cheers
+----
+
+After the vote is over, send a "RESULT" email to the list with the subject line:
+
+[source,text]
+----
+[RESULT][VOTE] Release Zest (Java Edition) version <RELEASE-VERSION>
+----
+
+Here is a sample template:
+
+[source,text]
+----
+To: "Zest Developers List" <dev@zest.apache.org>
+CC: "Zest Project Management Committee List" <private@zest.apache.org>
+Subject: [RESULT][VOTE] Release Zest (Java Edition) version <RELEASE-VERSION>
+
+Hi,
+
+The vote has passed|failed with the following result:
+
++1 (binding): <<list of names>>
++1 (non binding): <<list of names>>
+
+I will promote|drop the distributions and artifacts.
+----
+
+Votes on whether a package is ready to be released use majority approval -- i.e., at least three PMC members must vote affirmatively for release, and there must be more positive than negative votes.
+
+
+== VOTE passes
+
+
+=== Seal the release
+
+Create and sign the release git tag from the unsigned release candidate tag:
+
+[source,shell]
+----
+cd zest-java
+git tag -s "<RELEASE-VERSION>" "<RELEASE-VERSION>-RC#"
+----
+
+Push all git changes:
+
+[source,shell]
+----
+cd zest-java
+git checkout master
+git push origin master
+git checkout develop
+git push origin master
+git push origin --tags
+----
+
+
+=== Publish bits
+
+Promote the staged Nexus repository so it gets synched to Maven Central by following the https://www.apache.org/dev/publishing-maven-artifacts.html#promote[Promoting a repo] guide.
+
+Move the release distributions, checksums and signatures from https://dist.apache.org/repos/dist/dev/zest/[zest-dist/dev/zest] to https://dist.apache.org/repos/dist/release/zest/[zest-dist/release/zest]:
+
+[source,shell]
+----
+cd zest-dist
+# Source ZIP
+svn move "dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-src.zip" "release/zest/apache-zest-java-<RELEASE-VERSION>-src.zip"
+svn move "dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-src.zip.MD5" "release/zest/apache-zest-java-<RELEASE-VERSION>-src.zip.MD5"
+svn move "dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-src.zip.SHA-512" "release/zest/apache-zest-java-<RELEASE-VERSION>-src.zip.SHA-512"
+svn move "dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-src.zip.asc" "release/zest/apache-zest-java-<RELEASE-VERSION>-src.zip.asc"
+# Source TAR.GZ
+svn move "dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-src.tgz" "release/zest/apache-zest-java-<RELEASE-VERSION>-src.tgz"
+svn move "dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-src.tgz.MD5" "release/zest/apache-zest-java-<RELEASE-VERSION>-src.tgz.MD5"
+svn move "dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-src.tgz.SHA-512" "release/zest/apache-zest-java-<RELEASE-VERSION>-src.tgz.SHA-512"
+svn move "dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-src.tgz.asc" "release/zest/apache-zest-java-<RELEASE-VERSION>-src.tgz.asc"
+# Binary ZIP
+svn move "dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-bin.zip" "release/zest/apache-zest-java-<RELEASE-VERSION>-bin.zip"
+svn move "dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-bin.zip.MD5" "release/zest/apache-zest-java-<RELEASE-VERSION>-bin.zip.MD5"
+svn move "dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-bin.zip.SHA-512" "release/zest/apache-zest-java-<RELEASE-VERSION>-bin.zip.SHA-512"
+svn move "dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-bin.zip.asc" "release/zest/apache-zest-java-<RELEASE-VERSION>-bin.zip.asc"
+# Binary TAR.GZ
+svn move "dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-bin.tgz" "release/zest/apache-zest-java-<RELEASE-VERSION>-bin.tgz"
+svn move "dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-bin.tgz.MD5" "release/zest/apache-zest-java-<RELEASE-VERSION>-bin.tgz.MD5"
+svn move "dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-bin.tgz.SHA-512" "release/zest/apache-zest-java-<RELEASE-VERSION>-bin.tgz.SHA-512"
+svn move "dev/zest/apache-zest-java-<RELEASE-VERSION>-RC#-bin.tgz.asc" "release/zest/apache-zest-java-<RELEASE-VERSION>-bin.tgz.asc"
+----
+
+And upload them:
+
+[source,shell]
+----
+cd zest-dist
+svn commit -m "zest: <RELEASE-VERSION>-RC# vote passed, promoted as <RELEASE-VERSION> release"
+----
+
+
+=== Wait 24 hours
+
+For mirrors to pick up the new bits.
+
+
+=== Prepare an announcement
+
+Coordinate a press release with press@apache.org.
+
+    TODO
+
+You can reuse the release-notes content from the `txt`/`adoc`/`md` files created earlier.
+
+This annoucement will be used in a variety of media like emails, websites etc...
+Start with a text version and once satisfied create at least a Markdown version for the website, see below.
+
+
+=== Update the Zest™ website
+
+Generate the documentation and javadoc minisite:
+
+[source,shell]
+----
+cd zest-java
+./gradlew -Dversion="<RELEASE-VERSION>" archiveJavadocs manuals
+----
+
+This will automatically put all files into the `zest-web` website repository.
+
+Create a new post on the Zest™ website by creating a new Markdown file:
+
+[source,shell]
+----
+cd zest-web
+touch "site/src/_posts/YYYY-MM-DD-apache-zest-java-<RELEASE-VERSION>.md"
+open !$
+----
+
+You can reuse the Markdown formatted announcement content.
+
+Add the new released version in `zest-web/site/content/java/versions.json` below the `latest` entry:
+
+[source,js]
+----
+{
+    "develop": "develop",
+    "latest": "latest",
+    "<RELEASE-VERSION>", "<RELEASE-VERSION>",
+    "2.0": "2.0",
+    "<=1.4.x": "1.4"
+}
+----
+
+Finally, edit `zest-web/site/src/_data/releases.yml` with the new release data.
+Upmost is the latest:
+
+[source,text]
+----
+- version: <RELEASE-VERSION>
+  announcement: YYYY/MM/DD/apache-zest-java-<RELEASE-VERSION>
+  signer: John Doe
+  pgpId: FB751943
+----
+
+You can run the Zest™ website locally:
+
+[source,shell]
+----
+cd zest-web
+jekyll serve
+----
+
+Open http://127.0.0.1:4000/[http://127.0.0.1:4000/] to live-preview your changes.
+
+Once you are satisfied with the changes, build the production website:
+
+[source,shell]
+----
+cd zest-web
+jekyll build
+----
+
+And publish it:
+
+[source,shell]
+----
+svn add * --force
+svn commit -m "zest: update website"
+----
+
+
+=== Register the release
+
+Register the new release at https://reporter.apache.org/[reporter.apache.org]
+
+
+=== Announce
+
+Finally, send an announcement to mailto:dev@zest.apache.org[dev@] and mailto:users@zest.apache.org[users@] mailing lists. Email announcements should have the subject line:
+
+[source,text]
+----
+[ANNOUNCE] Released Zest (Java Edition) version <RELEASE-VERSION>
+----
+
+The announcement email should contains the release-notes as text, remember they are in the `apache-zest-java-<RELEASE-VERSION>-release-notes.txt` file you created earlier.
+
+
+
+== VOTE fails
+
+
+=== Record failure
+
+We keep the release candidate git history.
+It can be useful for reviewers to have access to it.
+Remember, we created a release candidate branch and tags, no signed release tag.
+
+[source,shell]
+----
+cd zest-java
+git checkout master
+git push origin master
+git checkout develop
+git push origin master
+git push origin --tags
+----
+
+
+=== Drop RC artifacts and distributions
+
+Drop the Nexus staging repository by following the https://www.apache.org/dev/publishing-maven-artifacts.html#drop[Dropping a repo] guide.
+
+Drop distributions, checksums and signatures from https://dist.apache.org/repos/dist/dev/zest/[zest-dist/dev/zest]
+
+[source,shell]
+----
+cd zest-dist/dev/zest/
+rm "*<RELEASE-VERSION>-RC#*.*"
+svn add * --force
+svn commit -m "zest: dropping <RELEASE-VERSION>-RC# from dist/dev/zest as the vote failed"
+----
+
+
+=== Start over
+
+If a new RC is to be created, restart the process as described above.
+
diff --git a/manual/src/docs/tutorials/howto-use-io.txt b/manual/src/docs/tutorials/howto-use-io.txt
index ac1ae10..7eaecf6 100644
--- a/manual/src/docs/tutorials/howto-use-io.txt
+++ b/manual/src/docs/tutorials/howto-use-io.txt
@@ -80,7 +80,7 @@
 
 include::../../../../core/runtime/build/docs/buildinfo/artifact.txt[]
 
-See the <<howto-depend-on-qi4j>> tutorial for details.
+See the <<howto-depend-on-zest>> tutorial for details.
 
 Once theses parts were identified it was mostly just a matter of putting interfaces on these pieces, and making sure
 they can be easily used in many different situations. The result is as follows.
@@ -245,10 +245,10 @@
 System.out.println("Nr of lines:"+counter.getCount())
 --------------
 
-== Usage in the Qi4j SPI ==
+== Usage in the Zest™ SPI ==
 
 Now I can finally get back to my initial problem that led me to look into this: how to implement a good way to access
-EntityStates in a Qi4j EntityStore, and perform restores of backups. The current version of accessing EntityStates look
+EntityStates in a Zest™ EntityStore, and perform restores of backups. The current version of accessing EntityStates look
 like this:
 
 [source,java]
@@ -322,5 +322,5 @@
 allowing these tasks to be decorated with extra features when needed.
 
 This article has outlined one way to do this, and the API and helpers that I've described are available in the current
-Qi4j Core 1.3-SNAPSHOT in Git (see Qi4j homepage for access details). The idea is to start using it throughout Qi4j
+Zest™ Core 1.3-SNAPSHOT in Git (see Zest™ homepage for access details). The idea is to start using it throughout Zest
 wherever we need to do I/O of the type described here.
\ No newline at end of file
diff --git a/manual/src/docs/tutorials/howto-writing-docs.txt b/manual/src/docs/tutorials/howto-writing-docs.txt
index 726aa45..d5eb13e 100644
--- a/manual/src/docs/tutorials/howto-writing-docs.txt
+++ b/manual/src/docs/tutorials/howto-writing-docs.txt
@@ -1,5 +1,24 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[community-docs,Writing Documentation]]
-= Writing Qi4j Documentation =
+= Writing Zest™ Documentation =
 
 The documents use the asciidoc format, see:
 
@@ -8,6 +27,9 @@
 
 The cheatsheet is really useful!
 
+You need to install `asciidoc` and `docbook-xsl`.
+
+
 [[community-docs-overall-flow,Documentation Flow]]
 == Overall Flow ==
 
@@ -21,7 +43,7 @@
 The above files are all consumed by the build of the manual (by adding them as dependencies).
 To get content included in the manual, it has to be explicitly included by a document in the manual as well.
 
-The whole documentation set is generated from the _*manual*_ module in the +qi4j-sdk+, and we are currently only creating the website.
+The whole documentation set is generated from the _*manual*_ module in the SDK, and we are currently only creating the website.
 The User Guide and Reference Manual are future projects.
 
 == Headings and document structure ==
@@ -105,28 +127,28 @@
 
 [source]
 ----
-http://www.qi4j.org/[Link text here]
+https://zest.apache.org/[Link text here]
 ----
 
-Which renders like: http://www.qi4j.org/[Link text here]
+Which renders like: https://zest.apache.org/[Link text here]
 
 For short links it may be better not to add a link text, just do:
 
 [source]
 ----
-http://www.qi4j.org/
+https://zest.apache.org/
 ----
 
-Which renders like: http://www.qi4j.org/
+Which renders like: https://zest.apache.org/
 
 It's ok to have a dot right after the URL, it won't be part of the link.
 
 [source]
 ----
-http://www.qi4j.org/.
+https://zest.apache.org/.
 ----
 
-Which renders like: http://www.qi4j.org/.
+Which renders like: https://zest.apache.org/.
 
 == Text Formatting ==
 
@@ -209,7 +231,7 @@
  -----------
 ----
 
-The source file is relative to the +qi4j-sdk+ root, and the 'tag' is defined in the source file.
+The source file is relative to the SDK root, and the 'tag' is defined in the source file.
 The above could be bringing in content that looks like;
 
 [source]
diff --git a/manual/src/docs/userguide/core.txt b/manual/src/docs/userguide/core.txt
index 80cc7e2..b6d77de 100644
--- a/manual/src/docs/userguide/core.txt
+++ b/manual/src/docs/userguide/core.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 :leveloffset: 1
 
 [[core,Core]]
@@ -5,20 +24,20 @@
 
 == Overview ==
 
-The Qi4j Core is composed of several artifacts described in this section.
+The Zest™ Core is composed of several artifacts described in this section.
 
 The following figure show the Core artifacts alongside <<libraries,libraries>> and <<extensions,extensions>>, and, in green,
 typical applications artifacts. This is not a full code dependency graph but should give you a good overview of how the
-pieces fit together. Find out more about each of the Qi4j Core artifacts below.
+pieces fit together. Find out more about each of the Zest™ Core artifacts below.
 
-.Qi4j Core Overview
+.Zest™ Core Overview
 image::core-overview.png[]
 
 //*<<core-api,Core API>>*
 === Core API ===
 
 //____
-The Qi4j Core API is the primary interface for client application code during the main execution phase, i.e. after the
+The Zest™ Core API is the primary interface for client application code during the main execution phase, i.e. after the
 application has been activated.
 
 <<core-api,Learn more>>
@@ -27,9 +46,9 @@
 //*<<core-bootstrap-assembly,Core Bootstrap>>*
 === Core Bootstrap ===
 //____
-Qi4j has a distinct bootstrap phase, also known as the _Assembly_ of an application, where the applications structure
+Zest™ has a distinct bootstrap phase, also known as the _Assembly_ of an application, where the applications structure
 is defined programmatically. Once all the layers, modules and all the composite types in each module have been defined
-the model is instantiated into an application. This enables the entire _structure_ system in Qi4j, where types "belongs"
+the model is instantiated into an application. This enables the entire _structure_ system in Zest, where types "belongs"
 to a module and visibility rules define default behaviors, enforcement of architectural integrity and much more.
 
 <<core-bootstrap-assembly,Learn more>>
@@ -38,8 +57,8 @@
 //*<<core-testsupport,Core Test Support>>*
 === Core Test Support ===
 //____
-Qi4j comes with classes to help with testing. There is also some mocking support, to allow some of Qi4j’s unique
-aspects to be mocked, but since Qi4j is so flexible at a fine-granular level, we have found that mocking is seldom,
+Zest™ comes with classes to help with testing. There is also some mocking support, to allow some of Zest’s unique
+aspects to be mocked, but since Zest™ is so flexible at a fine-granular level, we have found that mocking is seldom,
 if ever, needed.
 
 <<core-testsupport,Learn more>>
@@ -48,9 +67,9 @@
 //*<<core-functional,Core Functional API>>*
 === Core Functional API ===
 //____
-The Qi4j Core Functional API is a generic package to work with Iterables in a "functional programming language" style.
+The Zest™ Core Functional API is a generic package to work with Iterables in a "functional programming language" style.
 
-This package is completely independent of everything else in Qi4j and may be used on its own in any kind of environment
+This package is completely independent of everything else in Zest™ and may be used on its own in any kind of environment
 such as Spring or Java EE applications.
 
 <<core-functional,Learn more>>
@@ -59,7 +78,7 @@
 //*<<core-io,Core I/O API>>*
 === Core I/O API ===
 //____
-The Qi4j Core I/O API tries to address the problem around shuffling data around from various I/O inputs and outputs,
+The Zest™ Core I/O API tries to address the problem around shuffling data around from various I/O inputs and outputs,
 possibly with transformations and filtering along the way.
 
 <<core-io,Learn more>>
@@ -68,7 +87,7 @@
 //*<<core-spi,Core Extension SPI>>*
 === Core Extension SPI ===
 //____
-The Qi4j Core Runtime has a number of extension points, which we call the _Qi4j Core Extension SPI_. These are defined
+The Zest™ Core Runtime has a number of extension points, which we call the _Zest™ Core Extension SPI_. These are defined
 interfaces used *only* by the Core Runtime and *never* directly by application code. <<extensions>> are assembled in
 applications during the bootstrap phase.
 
@@ -78,8 +97,8 @@
 //*<<core-spi,Core Runtime>>*
 === Core Runtime ===
 //____
-Your code should *never*, *ever*, have a dependency on Qi4j Core Runtime. If you think you need this, you should
-probably contact qi4j-dev forum at Google Groups and see if your usecase can either be solved in a existing way or
+Your code should *never*, *ever*, have a dependency on Zest™ Core Runtime. If you think you need this, you should
+probably contact dev@zest.apache.org and see if your usecase can either be solved in a existing way or
 perhaps that a new Core Extension SPI is needed.
 
 <<core-runtime,Learn more>>
diff --git a/manual/src/docs/userguide/docinfo.xml b/manual/src/docs/userguide/docinfo.xml
index 48f36c6..c970145 100644
--- a/manual/src/docs/userguide/docinfo.xml
+++ b/manual/src/docs/userguide/docinfo.xml
@@ -1,3 +1,19 @@
+<!--
+  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.
+-->
 <authorgroup>
   <corpauthor>The Qi4j Community
   </corpauthor>
diff --git a/manual/src/docs/userguide/extensions.txt b/manual/src/docs/userguide/extensions.txt
index acd1b14..511578f 100644
--- a/manual/src/docs/userguide/extensions.txt
+++ b/manual/src/docs/userguide/extensions.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 :leveloffset: 1
 
 [[extensions,Extensions]]
@@ -5,7 +24,7 @@
 
 == Overview ==
 
-We try to keep the Qi4j Core Runtime as lean as possible, and a lot of the power to the Qi4j Platform comes via its
+We try to keep the Zest™ Core Runtime as lean as possible, and a lot of the power to the Zest™ Platform comes via its
 Extension SPI, which defines clear ways to extend the platform. There are currently the following Extensions types,
 each with possibly more than one implementation;
 
@@ -18,7 +37,7 @@
    * Migration
 
 This section will go through each of the available extensions.
-The Qi4j Extensions are of varying maturity level and we try to maintain a STATUS (dev-status.xml) file indicating
+The Zest™ Extensions are of varying maturity level and we try to maintain a STATUS (dev-status.xml) file indicating
 how good the codebase, documentation and unit tests are for each of the libraries. This is highly subjective and
 potentially different individuals will judge this differently, but at least it gives a ballpark idea of the situation
 for our users.
@@ -54,10 +73,6 @@
 
 :leveloffset: 2
 
-include::../../../../extensions/entitystore-gae/src/docs/es-gae.txt[]
-
-:leveloffset: 2
-
 include::../../../../extensions/entitystore-hazelcast/src/docs/es-hazelcast.txt[]
 
 :leveloffset: 2
@@ -78,10 +93,6 @@
 
 :leveloffset: 2
 
-include::../../../../extensions/entitystore-neo4j/src/docs/es-neo4j.txt[]
-
-:leveloffset: 2
-
 include::../../../../extensions/entitystore-preferences/src/docs/es-preferences.txt[]
 
 :leveloffset: 2
@@ -98,10 +109,6 @@
 
 :leveloffset: 2
 
-include::../../../../extensions/entitystore-voldemort/src/docs/es-voldemort.txt[]
-
-:leveloffset: 2
-
 include::../../../../extensions/indexing-elasticsearch/src/docs/index-elasticsearch.txt[]
 
 :leveloffset: 2
diff --git a/manual/src/docs/userguide/faq.txt b/manual/src/docs/userguide/faq.txt
index d3136ce..bd93829 100644
--- a/manual/src/docs/userguide/faq.txt
+++ b/manual/src/docs/userguide/faq.txt
@@ -1,7 +1,26 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[faq,FAQ]]
 = Frequently Asked Questions =
 
-Is it possible to use Scala with Qi4j?::
-        Short Answer: Yes. Scala traits can be used as Qi4j fragments, and Qi4j composites can be used in Scala.
+Is it possible to use Scala with Zest?::
+        Short Answer: Yes. Scala traits can be used as Zest™ fragments, and Zest™ composites can be used in Scala.
 
 
diff --git a/manual/src/docs/userguide/glossary.txt b/manual/src/docs/userguide/glossary.txt
index 244fd6c..38a1205 100644
--- a/manual/src/docs/userguide/glossary.txt
+++ b/manual/src/docs/userguide/glossary.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 :leveloffset: 1
 
 [[glossary,Glossary Section]]
@@ -5,7 +24,7 @@
 
 == Glossary ==
 
-There are a lot of concepts in Qi4j which may have different meanings in other contexts. So in true DDD-style
+There are a lot of concepts in Zest™ which may have different meanings in other contexts. So in true DDD-style
 ubiquitous language, we are here listing the definitions of the terms and concepts that are being used.
 
 [glossary]
@@ -15,7 +34,7 @@
 An Abstract Mixin is an implementation of the <<def-mixin-type>> interface, but is an abstract class and has not
 implemented all the methods.
 
-The Qi4j runtime can use multiple <<def-mixin,Mixins>> for each <<def-mixin-type>> interface. It is also possible to let
+The Zest™ runtime can use multiple <<def-mixin,Mixins>> for each <<def-mixin-type>> interface. It is also possible to let
 a <<def-generic-mixin>> handle the remaining missing methods.
 --
 
@@ -34,10 +53,10 @@
 [[def-application,Application]]Application::
 +
 --
-Application is the top level concept handled by the Qi4j runtime instance. It holds the information about the
+Application is the top level concept handled by the Zest™ runtime instance. It holds the information about the
 <<def-layer,Layers>> in the application architecture. See <<def-structure>> for more information.
 
-There is one and only one Application instance per Qi4j Runtime instance.
+There is one and only one Application instance per Zest™ Runtime instance.
 --
 
 
@@ -83,7 +102,7 @@
 [[def-composite-metatype,Composite Meta Type]]Composite Meta Type::
 +
 --
-There are 5 Composite Meta Types defined in Qi4j, which each share the composition features but have distinct
+There are 5 Composite Meta Types defined in Zest, which each share the composition features but have distinct
 semantic differences.
 
 * <<def-entitycomposite>>
@@ -101,7 +120,7 @@
 created.
 
 Composite Type interfaces must be a sub-type of one of the 5 <<def-composite-metatype,Composite Meta Types>> defined in
-Qi4j otherwise it can not be instantiated.
+Zest™ otherwise it can not be instantiated.
 --
 
 
@@ -121,7 +140,7 @@
 
 Concerns are established by the use of the @Concerns annotation on composites.
 
-Concern is one of the 3 kinds of <<def-modifier,Modifiers>> defined in Qi4j.
+Concern is one of the 3 kinds of <<def-modifier,Modifiers>> defined in Zest.
 --
 
 
@@ -134,7 +153,7 @@
 properties files first time. Note that on consequent start-ups the properties file is not read, as the configuration is
 read from the EntityStore.
 
-ConfigurationComposite is one of the 5 <<def-composite-metatype,Composite Meta Types>> defined in Qi4j.
+ConfigurationComposite is one of the 5 <<def-composite-metatype,Composite Meta Types>> defined in Zest.
 
 See <<howto-configure-service>> to learn how to use Configuration Composites.
 --
@@ -143,7 +162,7 @@
 [[def-constraint,Constraint]]Constraint::
 +
 --
-Constraints are a kind of validators, which are consulted prior to invoking the method call. Qi4j currently only
+Constraints are a kind of validators, which are consulted prior to invoking the method call. Zest™ currently only
 supports ParameterConstraints on methods and value constraints on <<def-property,Properties>>, but future versions will
 include Constraint types for checking complete method calls and return values.
 
@@ -153,7 +172,7 @@
 
 See <<howto-create-constraint>> to learn how to write your own Constraints.
 
-Constraint is one of the 3 kinds of <<def-modifier,Modifiers>> defined in Qi4j.
+Constraint is one of the 3 kinds of <<def-modifier,Modifiers>> defined in Zest.
 --
 
 
@@ -163,7 +182,7 @@
 An Entity Composite, or just Entity for short, is a persisted composite with an <<def-identity>>. An entity only has
 scope within an <<def-unitofwork>> and is therefor inherently thread-safe.
 
-EntityComposite is one of the 5 <<def-composite-metatype,Composite Meta Types>> defined in Qi4j.
+EntityComposite is one of the 5 <<def-composite-metatype,Composite Meta Types>> defined in Zest.
 --
 
 
@@ -216,11 +235,11 @@
 <<def-modifier,Modifiers>> and an end-point that will link into the stateful <<def-mixin>>.
 
 It is important to recognize that, for memory footprint reasons, Invocation Stacks are shared across
-<<def-composite,Composites>> of the same <<def-composite-type>>. They are however thread-safe, in that Qi4j will never
+<<def-composite,Composites>> of the same <<def-composite-type>>. They are however thread-safe, in that Zest™ will never
 bind the same Invocation Stack to more than one <<def-composite>> instance during a method call, but that between method
 invocations the <<def-modifier,Modifiers>> in the Invocation Stack can not assume that it is bound to the same
 <<def-composite>> instance. Therefor, <<def-modifier,Modifiers>> are not expected to keep state between method
-invocations, and when it needs to do that, then it should reference a <<def-mixin>> via the @This annotation. Qi4j will
+invocations, and when it needs to do that, then it should reference a <<def-mixin>> via the @This annotation. Zest™ will
 during the binding of the Invocation Stack to the <<def-composite>>, also ensure that all referenced
 <<def-mixin,Mixins>> are correctly injected in the Invocation Stack.
 --
@@ -229,7 +248,7 @@
 [[def-layer,Layer]]Layer::
 +
 --
-Qi4j promotes a Layered application design, where Layers can only access lower Layers and not higher Layers or Layers at
+Zest™ promotes a Layered application design, where Layers can only access lower Layers and not higher Layers or Layers at
 the same level.
 --
 
@@ -326,7 +345,7 @@
 --
 Service Composite is a subtype of <<def-composite>>, and has a range of features built into it.
 
-ServiceComposite is one of the 5 <<def-composite-metatype,Composite Meta Types>> defined in Qi4j.
+ServiceComposite is one of the 5 <<def-composite-metatype,Composite Meta Types>> defined in Zest.
 
 See the <<core-api-service,Service Composite chapter>>.
 --
@@ -351,24 +370,24 @@
 
 SideEffects are established by the use of the @SideEffects annotation on composites.
 
-SideEffect is one of the 3 kinds of <<def-modifier,Modifiers>> defined in Qi4j.
+SideEffect is one of the 3 kinds of <<def-modifier,Modifiers>> defined in Zest.
 --
 
 
 [[def-structure,Structure]]Structure::
 +
 --
-Qi4j promotes a conventional view of application structure, that computer science has been using for decades.
+Zest™ promotes a conventional view of application structure, that computer science has been using for decades.
 
 The definition is as follows;
 
-* One <<def-application>> per Qi4j runtime instance.
+* One <<def-application>> per Zest™ runtime instance.
 * One or more <<def-layer,Layers>> per <<def-application>>.
 * Zero, one or more <<def-module,Modules>> per <<def-layer>>.
 * Zero, one or more Assemblies per <<def-module>>.
 
 The principle of this Structure is to assist the programmer to create well modularized applications, that are easily
-extended and maintained. Qi4j will restrict access between <<def-module,Modules>>, so that code can only reach
+extended and maintained. Zest™ will restrict access between <<def-module,Modules>>, so that code can only reach
 <<def-composite,Composites>> and Objects in <<def-module,Modules>> (including itself) of the same or lower
 <<def-layer,Layers>>.
 
@@ -405,7 +424,7 @@
 the value exists or it doesn't, no need for synchronization. Values are typically very easy to test and very robust to
 refactoring.
 
-Qi4j defines values as a primary meta type through the ValueComposite, as we think the benefits of values are great.
+Zest™ defines values as a primary meta type through the ValueComposite, as we think the benefits of values are great.
 The ValueComposite is very light-weight compared to the <<def-entitycomposite>>, and its value can still be persisted as
 part of an <<def-entitycomposite>> via a <<def-property>>.
 
diff --git a/manual/src/docs/userguide/index.txt b/manual/src/docs/userguide/index.txt
index 7c37d07..683dee0 100644
--- a/manual/src/docs/userguide/index.txt
+++ b/manual/src/docs/userguide/index.txt
@@ -1,4 +1,23 @@
-= Qi4j v{revnumber} User Guide =
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
+= Zest™ v{revnumber} User Guide =
 
 :qi4j-version: {revnumber}
 :qi4j-buildnumber: {revnumber}
diff --git a/manual/src/docs/userguide/libraries.txt b/manual/src/docs/userguide/libraries.txt
index cd98c24..b13ac39 100644
--- a/manual/src/docs/userguide/libraries.txt
+++ b/manual/src/docs/userguide/libraries.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 :leveloffset: 1
 
 [[libraries,Libraries]]
@@ -5,11 +24,22 @@
 
 == Overview ==
 
-The Qi4j Libraries are of varying maturity level and we try to maintain a STATUS (dev-status.xml) file indicating
+The Zest™ Libraries are of varying maturity level and we try to maintain a STATUS (dev-status.xml) file indicating
 how good the codebase, documentation and unit tests are for each of the libraries. This is highly subjective and
 potentially different individuals will judge this differently, but at least it gives a ballpark idea of the situation
 for our users.
 
+:leveloffset: 2
+
+include::../../../../libraries/lang-groovy/src/docs/lang-groovy.txt[]
+
+:leveloffset: 2
+
+include::../../../../libraries/lang-javascript/src/docs/lang-javascript.txt[]
+
+:leveloffset: 2
+
+include::../../../../libraries/lang-scala/src/docs/lang-scala.txt[]
 
 :leveloffset: 2
 
@@ -29,22 +59,10 @@
 
 :leveloffset: 2
 
-include::../../../../libraries/cxf/src/docs/cxf.txt[]
-
-:leveloffset: 2
-
 include::../../../../libraries/eventsourcing/src/docs/eventsourcing.txt[]
 
 :leveloffset: 2
 
-include::../../../../libraries/eventsourcing-jdbm/src/docs/eventsourcing-jdbm.txt[]
-
-:leveloffset: 2
-
-include::../../../../libraries/eventsourcing-rest/src/docs/eventsourcing-rest.txt[]
-
-:leveloffset: 2
-
 include::../../../../libraries/fileconfig/src/docs/fileconfig.txt[]
 
 :leveloffset: 2
@@ -69,7 +87,7 @@
 
 :leveloffset: 2
 
-include::../../../../libraries/neo4j/src/docs/neo4j.txt[]
+include::../../../../libraries/metrics/src/docs/metrics.txt[]
 
 :leveloffset: 2
 
@@ -101,26 +119,6 @@
 
 :leveloffset: 2
 
-include::../../../../libraries/lang-beanshell/src/docs/lang-beanshell.txt[]
-
-:leveloffset: 2
-
-include::../../../../libraries/lang-groovy/src/docs/lang-groovy.txt[]
-
-:leveloffset: 2
-
-include::../../../../libraries/lang-javascript/src/docs/lang-javascript.txt[]
-
-:leveloffset: 2
-
-include::../../../../libraries/lang-jruby/src/docs/lang-jruby.txt[]
-
-:leveloffset: 2
-
-include::../../../../libraries/lang-scala/src/docs/lang-scala.txt[]
-
-:leveloffset: 2
-
 include::../../../../libraries/servlet/src/docs/servlet.txt[]
 
 :leveloffset: 2
@@ -141,18 +139,6 @@
 
 :leveloffset: 2
 
-include::../../../../libraries/struts2-codebehind/src/docs/struts-codebehind.txt[]
-
-:leveloffset: 2
-
-include::../../../../libraries/struts2-convention/src/docs/struts-convention.txt[]
-
-:leveloffset: 2
-
-include::../../../../libraries/struts2-plugin/src/docs/struts-plugin.txt[]
-
-:leveloffset: 2
-
 include::../../../../libraries/uid/src/docs/uid.txt[]
 
 :leveloffset: 2
diff --git a/manual/src/docs/userguide/preface.txt b/manual/src/docs/userguide/preface.txt
index b187f5c..668d5b1 100644
--- a/manual/src/docs/userguide/preface.txt
+++ b/manual/src/docs/userguide/preface.txt
@@ -1,19 +1,38 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[preface, Preface]]
 = Preface =
 
-This is the reference manual for Qi4j version {qi4j-version}, written by members of the Qi4j Community.
+This is the reference manual for Zest™ version {qi4j-version}, written by members of the Zest™ Community.
 
 The main parts of the manual are:
 
-* <<introduction>> -- introducing Composite Oriented Programming concepts and Qi4j.
-* <<tutorials>> -- learn how to use Qi4j.
-* <<core-api>> -- detailed information on how to use Qi4j.
-* <<libraries>> -- detailed information on the many libraries available for Qi4j.
-* <<extensions>> -- detailed information each of the Qi4j extensions, such as entity stores,
+* <<introduction>> -- introducing Composite Oriented Programming concepts and Zest.
+* <<tutorials>> -- learn how to use Zest.
+* <<core-api>> -- detailed information on how to use Zest.
+* <<libraries>> -- detailed information on the many libraries available for Zest.
+* <<extensions>> -- detailed information each of the Zest™ extensions, such as entity stores,
 indexing, caching and runtime metrics.
 
 The material is practical, technical, and focused on answering specific questions. 
-It addresses how things work, what to do and what to avoid to successfully use Qi4j in domain rich applications.
+It addresses how things work, what to do and what to avoid to successfully use Zest™ in domain rich applications.
  
 The goal is to be thumb-through and rule-of-thumb friendly.
 
@@ -21,7 +40,7 @@
 When possible, the sections distill "rules of thumb" which you can keep in mind whenever you wander out of the house
 without this manual in your back pocket.
 
-The included code examples are executed when Qi4j is built and tested.
+The included code examples are executed when Zest™ is built and tested.
 
 _Who should read this?_
 
diff --git a/manual/src/docs/userguide/tools.txt b/manual/src/docs/userguide/tools.txt
index 5b7fbef..2a4b1e0 100644
--- a/manual/src/docs/userguide/tools.txt
+++ b/manual/src/docs/userguide/tools.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 :leveloffset: 1
 
 [[tools,Tools Section]]
@@ -5,18 +24,14 @@
 
 == Overview ==
 
-The Qi4j SDK comes with usefull development tools. Theses tools can come in
+The Zest™ SDK comes with usefull development tools. Theses tools can come in
 handy when assembled into your <<def-application>> in development
 <<def-application-mode>>.
 
-The tools are available in the +tools/+ directory of the Qi4j SDK.
+The tools are available in the +tools/+ directory of the Zest™ SDK.
 
 :leveloffset: 2
 
 include::../../../../tools/envisage/src/docs/envisage.txt[]
 
 :leveloffset: 2
-
-include::../../../../tools/entity-viewer/src/docs/entity-viewer.txt[]
-
-:leveloffset: 2
diff --git a/manual/src/docs/website/docinfo.xml b/manual/src/docs/website/docinfo.xml
index e69de29..a8f6a82 100644
--- a/manual/src/docs/website/docinfo.xml
+++ b/manual/src/docs/website/docinfo.xml
@@ -0,0 +1,16 @@
+<!--
+  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.
+-->
diff --git a/manual/src/docs/website/downloads/1.0.txt b/manual/src/docs/website/downloads/1.0.txt
deleted file mode 100644
index c0eb52c..0000000
--- a/manual/src/docs/website/downloads/1.0.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-*Release 1.0*;; signed by Niclas Hedhman, PGP ID: 33D70FC3
-
-[width="80%",grid="rows"]
-|=========================================================
-|||||
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.0/org.qi4j-1.0-bin.zip[qi4j-sdk-1.0-bin.zip]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.0/org.qi4j-1.0-bin.zip.md5[(md5)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.0/org.qi4j-1.0-bin.zip.sha1[(sha1)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.0/org.qi4j-1.0-bin.zip.asc[(asc)]
-|
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.0/org.qi4j-1.0-bin.tgz[qi4j-sdk-1.0-bin.tgz]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.0/org.qi4j-1.0-bin.tgz.md5[(md5)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.0/org.qi4j-1.0-bin.tgz.sha1[(sha1)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.0/org.qi4j-1.0-bin.tgz.asc[(asc)]
-|
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.0/org.qi4j-1.0-src.zip[qi4j-sdk-1.0-src.zip]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.0/org.qi4j-1.0-src.zip.md5[(md5)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.0/org.qi4j-1.0-src.zip.sha1[(sha1)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.0/org.qi4j-1.0-src.zip.asc[(asc)]
-|
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.0/org.qi4j-1.0-src.tgz[qi4j-sdk-1.0-src.tgz]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.0/org.qi4j-1.0-src.tgz.md5[(md5)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.0/org.qi4j-1.0-src.tgz.sha1[(sha1)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.0/org.qi4j-1.0-src.tgz.asc[(asc)]
-|
-|=========================================================
-
-
diff --git a/manual/src/docs/website/downloads/1.1.txt b/manual/src/docs/website/downloads/1.1.txt
deleted file mode 100644
index 49eb15c..0000000
--- a/manual/src/docs/website/downloads/1.1.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-*link:../1.4/qi4j/439.html[Release 1.1]*;; signed by Niclas Hedhman, PGP ID: 33D70FC3
-
-[width="80%",grid="rows"]
-|=========================================================
-|||||
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.1/org.qi4j-1.1-bin.zip[qi4j-sdk-1.1-bin.zip]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.1/org.qi4j-1.1-bin.zip.md5[(md5)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.1/org.qi4j-1.1-bin.zip.sha1[(sha1)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.1/org.qi4j-1.1-bin.zip.asc[(asc)]
-|
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.1/org.qi4j-1.1-bin.tgz[qi4j-sdk-1.1-bin.tgz]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.1/org.qi4j-1.1-bin.tgz.md5[(md5)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.1/org.qi4j-1.1-bin.tgz.sha1[(sha1)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.1/org.qi4j-1.1-bin.tgz.asc[(asc)]
-|
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.1/org.qi4j-1.1-src.zip[qi4j-sdk-1.1-src.zip]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.1/org.qi4j-1.1-src.zip.md5[(md5)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.1/org.qi4j-1.1-src.zip.sha1[(sha1)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.1/org.qi4j-1.1-src.zip.asc[(asc)]
-|
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.1/org.qi4j-1.1-src.tgz[qi4j-sdk-1.1-src.tgz]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.1/org.qi4j-1.1-src.tgz.md5[(md5)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.1/org.qi4j-1.1-src.tgz.sha1[(sha1)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.1/org.qi4j-1.1-src.tgz.asc[(asc)]
-|
-|=========================================================
-
-
diff --git a/manual/src/docs/website/downloads/1.2.txt b/manual/src/docs/website/downloads/1.2.txt
deleted file mode 100644
index c299e53..0000000
--- a/manual/src/docs/website/downloads/1.2.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-*link:../1.4/qi4j/399.html[Release 1.2]*;; signed by Niclas Hedhman, PGP ID: 33D70FC3
-
-[width="80%",grid="rows"]
-|=========================================================
-|||||
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.2/org.qi4j-1.2-bin.zip[qi4j-sdk-1.2-bin.zip]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.2/org.qi4j-1.2-bin.zip.md5[(md5)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.2/org.qi4j-1.2-bin.zip.sha1[(sha1)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.2/org.qi4j-1.2-bin.zip.asc[(asc)]
-|
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.2/org.qi4j-1.2-bin.tgz[qi4j-sdk-1.2-bin.tgz]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.2/org.qi4j-1.2-bin.tgz.md5[(md5)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.2/org.qi4j-1.2-bin.tgz.sha1[(sha1)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.2/org.qi4j-1.2-bin.tgz.asc[(asc)]
-|
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.2/org.qi4j-1.2-src.zip[qi4j-sdk-1.2-src.zip]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.2/org.qi4j-1.2-src.zip.md5[(md5)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.2/org.qi4j-1.2-src.zip.sha1[(sha1)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.2/org.qi4j-1.2-src.zip.asc[(asc)]
-|
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.2/org.qi4j-1.2-src.tgz[qi4j-sdk-1.2-src.tgz]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.2/org.qi4j-1.2-src.tgz.md5[(md5)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.2/org.qi4j-1.2-src.tgz.sha1[(sha1)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.2/org.qi4j-1.2-src.tgz.asc[(asc)]
-|
-|=========================================================
-
-
diff --git a/manual/src/docs/website/downloads/1.3.txt b/manual/src/docs/website/downloads/1.3.txt
deleted file mode 100644
index ab59899..0000000
--- a/manual/src/docs/website/downloads/1.3.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-*link:../1.4/qi4j/439.html[Release 1.3]*;; signed by Niclas Hedhman, PGP ID: 33D70FC3
-
-[width="80%",grid="rows"]
-|=========================================================
-|||||
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.3/org.qi4j-1.3-bin.zip[qi4j-sdk-1.3-bin.zip]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.3/org.qi4j-1.3-bin.zip.md5[(md5)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.3/org.qi4j-1.3-bin.zip.sha1[(sha1)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.3/org.qi4j-1.3-bin.zip.asc[(asc)]
-|
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.3/org.qi4j-1.3-bin.tgz[qi4j-sdk-1.3-bin.tgz]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.3/org.qi4j-1.3-bin.tgz.md5[(md5)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.3/org.qi4j-1.3-bin.tgz.sha1[(sha1)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.3/org.qi4j-1.3-bin.tgz.asc[(asc)]
-|
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.3/org.qi4j-1.3-src.zip[qi4j-sdk-1.3-src.zip]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.3/org.qi4j-1.3-src.zip.md5[(md5)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.3/org.qi4j-1.3-src.zip.sha1[(sha1)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.3/org.qi4j-1.3-src.zip.asc[(asc)]
-|
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.3/org.qi4j-1.3-src.tgz[qi4j-sdk-1.3-src.tgz]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.3/org.qi4j-1.3-src.tgz.md5[(md5)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.3/org.qi4j-1.3-src.tgz.sha1[(sha1)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.3/org.qi4j-1.3-src.tgz.asc[(asc)]
-|
-|=========================================================
-
-
diff --git a/manual/src/docs/website/downloads/1.4.1.txt b/manual/src/docs/website/downloads/1.4.1.txt
deleted file mode 100644
index 6d205f2..0000000
--- a/manual/src/docs/website/downloads/1.4.1.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-*link:../1.4/qi4j/441.html[Release 1.4.1]*;; signed by Niclas Hedhman, PGP ID: 33D70FC3
-
-[width="80%",grid="rows"]
-|=========================================================
-|||||
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4.1/org.qi4j-1.4.1-bin.zip[qi4j-sdk-1.4.1-bin.zip]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4.1/org.qi4j-1.4.1-bin.zip.md5[(md5)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4.1/org.qi4j-1.4.1-bin.zip.sha1[(sha1)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4.1/org.qi4j-1.4.1-bin.zip.asc[(asc)]
-|
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4.1/org.qi4j-1.4.1-bin.tgz[qi4j-sdk-1.4.1-bin.tgz]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4.1/org.qi4j-1.4.1-bin.tgz.md5[(md5)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4.1/org.qi4j-1.4.1-bin.tgz.sha1[(sha1)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4.1/org.qi4j-1.4.1-bin.tgz.asc[(asc)]
-|
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4.1/org.qi4j-1.4.1-src.zip[qi4j-sdk-1.4.1-src.zip]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4.1/org.qi4j-1.4.1-src.zip.md5[(md5)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4.1/org.qi4j-1.4.1-src.zip.sha1[(sha1)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4.1/org.qi4j-1.4.1-src.zip.asc[(asc)]
-|
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4.1/org.qi4j-1.4.1-src.tgz[qi4j-sdk-1.4.1-src.tgz]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4.1/org.qi4j-1.4.1-src.tgz.md5[(md5)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4.1/org.qi4j-1.4.1-src.tgz.sha1[(sha1)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4.1/org.qi4j-1.4.1-src.tgz.asc[(asc)]
-|
-|=========================================================
-
-
diff --git a/manual/src/docs/website/downloads/1.4.txt b/manual/src/docs/website/downloads/1.4.txt
deleted file mode 100644
index 8b97fd5..0000000
--- a/manual/src/docs/website/downloads/1.4.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-*link:../1.4/qi4j/441.html[Release 1.4]*;; signed by Niclas Hedhman, PGP ID: 33D70FC3
-
-[width="80%",grid="rows"]
-|=========================================================
-|||||
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4/org.qi4j-1.4-bin.zip[qi4j-sdk-1.4-bin.zip]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4/org.qi4j-1.4-bin.zip.md5[(md5)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4/org.qi4j-1.4-bin.zip.sha1[(sha1)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4/org.qi4j-1.4-bin.zip.asc[(asc)]
-|
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4/org.qi4j-1.4-bin.tgz[qi4j-sdk-1.4-bin.tgz]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4/org.qi4j-1.4-bin.tgz.md5[(md5)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4/org.qi4j-1.4-bin.tgz.sha1[(sha1)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4/org.qi4j-1.4-bin.tgz.asc[(asc)]
-|
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4/org.qi4j-1.4-src.zip[qi4j-sdk-1.4-src.zip]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4/org.qi4j-1.4-src.zip.md5[(md5)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4/org.qi4j-1.4-src.zip.sha1[(sha1)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4/org.qi4j-1.4-src.zip.asc[(asc)]
-|
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4/org.qi4j-1.4-src.tgz[qi4j-sdk-1.4-src.tgz]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4/org.qi4j-1.4-src.tgz.md5[(md5)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4/org.qi4j-1.4-src.tgz.sha1[(sha1)]
-|http://repository.ops4j.org/maven2/org/org.qi4j/1.4/org.qi4j-1.4-src.tgz.asc[(asc)]
-|
-|=========================================================
-
-
diff --git a/manual/src/docs/website/downloads/downloads.txt b/manual/src/docs/website/downloads/downloads.txt
deleted file mode 100644
index 705b80e..0000000
--- a/manual/src/docs/website/downloads/downloads.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-[[downloads,Downloads]]
-= Downloads =
-
-== Qi4j SDK ==
-We are working towards distributing a useful SDK for Qi4j development, usable without connectivity. This work has not
-been highest on the list and we are generally lagging in the release of the SDK in comparison to the artifact releases.
-We strive to change this in the future.
-
-=== Versioning ===
-Qi4j versioning tries to stick to;
-
-   * For changes in the 3rd version digit, for instance from 1.3.1 to 1.3.2, only bug fixes have occurred.
-   * For changes in the 2nd version digit, for instance from 1.3.1 to 1.4, more features have been added.
-   * For changes in the 1st version digit, for instance from 1.3.1 to 2.0, incompatibilities have been introduced.
-
-However, this will only be true for the Qi4j API, i.e. the classes found in org.qi4j.core.api JAR. For SPI and
-especially the runtime, we reserve the right of incompatible changes between releases in the second digit.
-
-Qi4j also has dependencies on other systems. We reserve the right that these dependencies may change between releases.
-For instance, a change between 1.1 and 1.2 was that CGLib was dropped and replaced by ASM as a new dependency.
-
-=== Releases ===
-Using Gradle, Maven, SBT, Ivy or any other build system that provide dependency management? Learn how to
-<<howto-depend-on-qi4j, depend on Qi4j in your build>>.
-
-The Qi4j SDK is split in two downloads: binaries and sources. Both downloads are available in the zip and tar.gz formats.
-The source code is also available on https://github.com/qi4j/qi4j-sdk[Github].
-
-include::1.4.1.txt[]
-include::1.4.txt[]
-include::1.3.txt[]
-include::1.2.txt[]
-include::1.1.txt[]
-include::1.0.txt[]
-
diff --git a/manual/src/docs/website/home.txt b/manual/src/docs/website/home.txt
index f732f19..6b82cff 100644
--- a/manual/src/docs/website/home.txt
+++ b/manual/src/docs/website/home.txt
@@ -1,23 +1,53 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 :leveloffset: 1
 
-[[home,Qi4j Home Page]]
-= Qi4j =
+[[home,Zest™ Home Page]]
+= Zest™ =
 
-IMPORTANT: This is the documentation for *Qi4j {revnumber}*. Use the version switcher on the left to browse other
+[IMPORTANT]
+.Zest™ {revnumber}
+====
+This is the documentation for *Zest™ {revnumber}*. Use the version switcher on the left to browse other
 versions documentation.
+====
 
-== What is Qi4j™? ==
-The short answer is that Qi4j™ is a framework for domain centric application development, including evolved concepts
-from http://en.wikipedia.org/wiki/Aspect-oriented_programming[AOP],
+== What is Apache Zest™ ? ==
+The short answer is that Apache Zest™ is a framework for domain centric application development, including evolved
+concepts from http://en.wikipedia.org/wiki/Aspect-oriented_programming[AOP],
 http://en.wikipedia.org/wiki/Dependency_injection[DI] and http://en.wikipedia.org/wiki/Domain-driven_design[DDD].
 
-Qi4j™ is an implementation of Composite Oriented Programming, using the standard Java platform, without the use of
+Zest™ is an implementation of Composite Oriented Programming, using the standard Java platform, without the use of
 any pre-processors or new language elements. Everything you know from Java still applies and you can leverage both
 your experience and toolkits to become more productive with Composite Oriented Programming today.
 
-Moreover, Qi4j™ enables Composite Oriented Programming on the Java platform, including both Java and Scala as primary
+Moreover, Zest™ enables Composite Oriented Programming on the Java platform, including both Java and Scala as primary
 languages as well as many of the plethora of languages running on the JVM as bridged languages.
 
+We strongly recommend the <<intro, introduction>> section.
+
+== Brief History ==
+Apache Zest™ started its life in 2007 as Qi4j™, initially at OPS4J's infrastructure and later on GitHub.
+In March 2015, Apache Zest™ was created with the Qi4j™ codebase as the base, existing Apache Members as the
+bootstrap Project Management Committee (PMC).
+
 image:intro-qi.png["Qi",align="center"]
 
 Qi4j™ is pronounced "chee for jay". This website is out of scope to explain the many
@@ -25,4 +55,3 @@
 Wikipedia. For us, Qi is the force/energy within the body, in this case the Java platform. Something that makes Java
 so much better, if it is found and channeled into a greater good.
 
-We strongly recommend the <<intro, introduction>> section.
diff --git a/manual/src/docs/website/index.txt b/manual/src/docs/website/index.txt
index 8890111..fa32170 100644
--- a/manual/src/docs/website/index.txt
+++ b/manual/src/docs/website/index.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 
 :leveloffset: 1
 
diff --git a/manual/src/docs/website/intro.txt b/manual/src/docs/website/intro.txt
index ad77f24..8b86d4a 100644
--- a/manual/src/docs/website/intro.txt
+++ b/manual/src/docs/website/intro.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 :leveloffset: 1
 
 [[intro,Introduction Section]]
diff --git a/manual/src/docs/website/javadocs.txt b/manual/src/docs/website/javadocs.txt
index b6fe285..690ee09 100644
--- a/manual/src/docs/website/javadocs.txt
+++ b/manual/src/docs/website/javadocs.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 :leveloffset: 1
 
 [[javadocs, JavaDocs]]
@@ -5,23 +24,37 @@
 
 == JavaDocs ==
 
+In this section you will find links to JavaDocs corresponding to this Apache Zest™ (Java Edition) version ({revnumber}), to some alias versions, and finally, to previous releases.
+
+=== Apache Zest™ (Java Edition) {revnumber} ===
+
+// JavaDocs for Apache Zest™ (Java Edition) {revnumber}:
+
+* link:javadocs/index.html[Release {revnumber}]
+
+
 === Alias Versions ===
 
-* link:../latest/javadocs/index.html[Latest Release == Master Branch]
-* link:../develop/javadocs/index.html[Develop Branch]
+Links to _"alias versions"_ JavaDocs:
 
-=== Releases ===
+* https://zest.apache.org/java/latest/javadocs/[Latest Release (`master` branch)]
+* https://zest.apache.org/java/develop/javadocs/[Development (`develop` branch)]
 
-* link:../2.0/javadocs/index.html[Release 2.0]
-* link:../1.4.1/javadocs/index.html[Release 1.4.1]
-* link:../1.4/javadocs/index.html[Release 1.4]
-* link:../1.3/javadocs/index.html[Release 1.3]
+
+=== Previous Releases ===
+
+Archived JavaDocs of previous releases:
+
+* https://zest.apache.org/java/2.0/javadocs/[Release 2.0]
+* https://zest.apache.org/java/1.4.1/javadocs/[Release 1.4.1]
+* https://zest.apache.org/java/1.4/javadocs/[Release 1.4]
+* https://zest.apache.org/java/1.3/javadocs/[Release 1.3]
 * Release 1.2
-** link:../1.2/javadocs/api[Core API]
-** link:../1.2/javadocs/bootstrap[Core Bootstrap]
-** link:../1.2/javadocs/spi[Core SPI]
+** https://zest.apache.org/java/1.2/javadocs/api[Core API]
+** https://zest.apache.org/java/1.2/javadocs/bootstrap[Core Bootstrap]
+** https://zest.apache.org/java/1.2/javadocs/spi[Core SPI]
 * Release 1.0
-** link:../1.0/javadocs/api[Core API]
-** link:../1.0/javadocs/bootstrap[Core Bootstrap]
-** link:../1.0/javadocs/spi[Core SPI]
+** https://zest.apache.org/java/1.0/javadocs/api[Core API]
+** https://zest.apache.org/java/1.0/javadocs/bootstrap[Core Bootstrap]
+** https://zest.apache.org/java/1.0/javadocs/spi[Core SPI]
 
diff --git a/manual/src/docs/website/junitReport.txt b/manual/src/docs/website/junitReport.txt
index d9e9c42..2f9111a 100644
--- a/manual/src/docs/website/junitReport.txt
+++ b/manual/src/docs/website/junitReport.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 //////////////////////
 This file is simply a placeholder.
 
diff --git a/manual/src/docs/website/news/20071113.txt b/manual/src/docs/website/news/20071113.txt
deleted file mode 100644
index b23f59d..0000000
--- a/manual/src/docs/website/news/20071113.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-[[news-20071113,Qi4j at Øredev 2007 - COP]]
-= @ Øredev 2007 - COP =
-
-Qi4J - Composite Oriented Programming Today
-
-OOP neglects the need of objects to adjust its behavior depending on the context. "John is a parent and programmer in the city, but a hunter and food in the jungle.". Same object, different contexts. OOP has also not fulfilled its promise of re-usability, partly due to such static behavior and partly due to its inability to deal with fine-granularity of states and behaviors.
-
-Composite Oriented Programming addresses these issues, and Qi4J is an implementation available to Java programmers today.
-
-See the http://archive.oredev.org/toppmeny/conference/java/qi4jcompositeorientedprog.4.76e8b1c6112f078db498000125951.html[Øredev archive].
-
-This presentation has been followed by a 6 hours Workshop.
diff --git a/manual/src/docs/website/news/20080130.txt b/manual/src/docs/website/news/20080130.txt
deleted file mode 100644
index 4a2681818..0000000
--- a/manual/src/docs/website/news/20080130.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-[[news-20080130,Qi4j at JFokus 2008 - COP]]
-= @ JFokus 2008 - COP =
-
-OOP neglects the need of objects to adjust its behavior depending on the
-context. "John is a parent and programmer in the city, but a hunter and food in
-the jungle.". Same object, different contexts. OOP has also not fulfilled its
-promise of re-usability, partly due to such static behavior and partly due to
-its inability to deal with fine-granularity of states and behaviors. Composite
-Oriented Programming addresses these issues, and Qi4J is an implementation
-available to Java programmers today.
-
-Check the presentation slides online
-http://www.jfokus.se/jfokus08/pres/jf08-CompositeOrientedProgrammingWithQi4j.pdf[here].
diff --git a/manual/src/docs/website/news/20080414.txt b/manual/src/docs/website/news/20080414.txt
deleted file mode 100644
index 2b20ef6..0000000
--- a/manual/src/docs/website/news/20080414.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-[[news-20080414,Qi4j 0.1 Released]]
-= Qi4j 0.1 Released =
-
-Freeze of Core API.
diff --git a/manual/src/docs/website/news/20080606.txt b/manual/src/docs/website/news/20080606.txt
deleted file mode 100644
index 1ccd8ce..0000000
--- a/manual/src/docs/website/news/20080606.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-[[news-20080606,Qi4j 0.2 Released]]
-= Qi4j 0.2 Released =
-
-Full Unit Test & Javadoc on Core API
diff --git a/manual/src/docs/website/news/20080808.txt b/manual/src/docs/website/news/20080808.txt
deleted file mode 100644
index 01e8b18..0000000
--- a/manual/src/docs/website/news/20080808.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-[[news-20080808,Qi4j 0.3 Released]]
-= Qi4j 0.3 Released =
-
-The 3rd pre-final release from the Qi4j community marks a new relatively stable milestone on the continued path to a production ready system. The 0.3 release is the 3rd major re-write of the Qi4j Core Runtime, after many lessons learned from previous implementations.
-
-"The current Qi4j Core Runtime is soooo much lighter and easier to work with, both for the Core developers as well as extensions and advanced libraries developers.", says Rickard Öberg, the Qi4j project lead. "We now have most of the ingredients in place for developers who want to delve into DDD without having to do everything from scratch. Having a toolkit to work with that speaks the same language as themselves, all the way from layers down to individual parameter constraints, makes life so much easier, and minimizes the need for translation from idea to actual code."
-
-"We now feel confident that the Qi4j Core Runtime has a good design and is stable enough to not go through any more disruptive changes. This enables us to move away from a feature-boxed release cycle into a more agile time-boxed one. This will enable more people to participate and use the Qi4j platform.", says Niclas Hedhman. He continues; "Stefano Mazzocchi (Apache) once told me; Only projects with 'Bad Code, Great Vision will build strong communities'. And I think Qi4j is exactly at this point right now. The vision for a better future is extremely promising, and we have so many areas that we need help to implement. Combined with a no barrier to write and commit code/documentation for all parts except Qi4j Core, we have the setup for accelerated participation in the months to come."
-
-With this release the Qi4j community moves from a feature-boxed release cycle into a time-boxed one. First week every month, there will be a release containing the work from previous release. Issues will be worked on in a semi-prioritized order and the participating developers are urged to keep the codebase stable towards the release date.
-
-Rickard is keen to point out the Application Visualizer that has been started since the 0.2 release, "Another key tool which this release introduces is the beginning of the application visualizer, which automatically shows what your application look like. One of the main disadvantages of earlier frameworks is that the developers typically felt out of control and unable to see what was going on. When you have so many pieces working together it is important to get the big picture, and this is what we are now enabling."
-
-"Our immediate next steps involves a new remote Entity Store, getting the application visualization tool ready, changes to the Query API including named and native queries, and we are looking into introducing more explicit Composite archetypes, such as TransientComposite and ValueComposite", says Rickard and then goes back coding.
-
-The rest of us just can't wait to see what is coming up next.
\ No newline at end of file
diff --git a/manual/src/docs/website/news/20080915.txt b/manual/src/docs/website/news/20080915.txt
deleted file mode 100644
index 3c14cc8..0000000
--- a/manual/src/docs/website/news/20080915.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-[[news-20080915,Qi4j at JavaZone 2008 - COP/Qi4j]]
-= @ JavaZone 2008 - COP/Qi4j =
-
-In the current programming culture we have lost the OOP idea of objects
-containing both logic and state, the idea of reuse has largely failed due to
-impractical mechanisms, and combining pieces of code into larger structures
-using AOP has not quite delivered on its promises. Building large-scale
-software also gives us challenges with regard to complexity, enforcing
-architectural rules and codebase explosion. What if we could look at what we
-have and figure out a new way to address these problems, while promoting the
-idea from domain oriented modeling and retaining what works with what we have
-now? Composite Oriented Programing is a new way of dealing with these problems,
-and this presentation will show how the Qi4j implementation on the Java
-platform will enable you to get more done with less work, and in a way that
-allows you to avoid the mentioned problems. It will describe the COP
-terminology and show examples on how to use Qi4j to implement domain oriented
-models.
-
-See the whole presentation online
-http://javazone.no/incogito/session/Qi4j+-+a+new+approach+to+old+problems.html[here].
diff --git a/manual/src/docs/website/news/20080919.txt b/manual/src/docs/website/news/20080919.txt
deleted file mode 100644
index 01be620..0000000
--- a/manual/src/docs/website/news/20080919.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-[[news-20080919,Qi4j 0.4 Released]]
-= Qi4j 0.4 Released =
-
-CleanUp after the 0.3 changes.
diff --git a/manual/src/docs/website/news/20081117.txt b/manual/src/docs/website/news/20081117.txt
deleted file mode 100644
index 6498065..0000000
--- a/manual/src/docs/website/news/20081117.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-[[news-20081117,Qi4j at Øredev 2008]]
-= @ Øredev 2008 - Qi4j =
-
-Qi4j - code, examples and demo
-
-Qi4j is an application development framework that promises to make it easier to
-create applications using DDD. But how does it accomplish this, and to what
-extent? This session will take us through the creation of a simple application
-using Qi4j and discuss the different features that simplify the developers life
-and makes it easier to apply agile practices.
-
-Watch the whole session online
-http://archive.oredev.org/topmenu/video/java/rickardobergqi4j.4.5a2d30d411ee6ffd28880001122.html[here].
diff --git a/manual/src/docs/website/news/20090109.txt b/manual/src/docs/website/news/20090109.txt
deleted file mode 100644
index 1398cd6..0000000
--- a/manual/src/docs/website/news/20090109.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-[[news-20090109, Qi4j 0.5 Released]]
-= Qi4j 0.5 Released =
-
-Stabilization of Core
diff --git a/manual/src/docs/website/news/20090110.txt b/manual/src/docs/website/news/20090110.txt
deleted file mode 100644
index 347857a..0000000
--- a/manual/src/docs/website/news/20090110.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-[[news-20090110,Qi4j at Årskonference 2009]]
-= @ Årskonference 2009 =
-
-It is indeed exciting times to be a Java developer in. Lots of stuff is
-happening in the Java space and it’s hard to predict what kind of
-development space we will be working in in the future.
-
-Will all our Java code run in a cloud somewhere ?
-
-Is “domain centric application development” the new magic wand we should
-be waving at our Java code ?
-
-Join us and meet Rickard Öberg and get an in-depth view on his new exciting
-project, Qi4j (qi4j.org)
diff --git a/manual/src/docs/website/news/20090219.txt b/manual/src/docs/website/news/20090219.txt
deleted file mode 100644
index 974e02c..0000000
--- a/manual/src/docs/website/news/20090219.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-[[news-20090219,Rickard explains DDD support in Qi4j]]
-= DDD support in Qi4j explained =
-
-Domain Driven Design has a special status in Qi4j, and its tactical bits are
-embraced in Qi4j itself. These includes Entities, Services and Values. In
-Rickard's blog entry http://www.jroller.com/rickard/entry/qi4j_and_state_modeling[Qi4j and state modeling],
-he covers these topics in a relatively easy to understand and pedagogic format. A highly recommended read
-for people who want to get a quick overview of what Qi4j is really about.
diff --git a/manual/src/docs/website/news/20090220.txt b/manual/src/docs/website/news/20090220.txt
deleted file mode 100644
index 5e15673..0000000
--- a/manual/src/docs/website/news/20090220.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-[[news-20090220,Qi4j 0.6 Released]]
-= Qi4j 0.6 Released =
-
-Goal of Full Test Coverage in Core. 
-
-Break-up of project.
diff --git a/manual/src/docs/website/news/20090420.txt b/manual/src/docs/website/news/20090420.txt
deleted file mode 100644
index 9bb5242..0000000
--- a/manual/src/docs/website/news/20090420.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-[[news-20090420,Qi4j 0.7 Released]]
-= Qi4j 0.7 Released =
-
-Query Cleanup.
diff --git a/manual/src/docs/website/news/20090510.txt b/manual/src/docs/website/news/20090510.txt
deleted file mode 100644
index c5a8f1d..0000000
--- a/manual/src/docs/website/news/20090510.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-[[news-20090510,Qi4j at JFokus 2009 - COP/DDD]]
-= @ JFokus 2009 - COP/DDD =
-
-At JFokus earlier this year Rickard Öberg was interviewed by Dan Bergh Johnsson
-about Composite Oriented Programming and Qi4j.
-
-The interview covers some of the rationale behind Composite Oriented
-Programming and the Qi4j project, its focus on DDD and why Java was chosen as
-language for the implementation. You can see the interview online on
-http://www.youtube.com/watch?v=RcJqcJND42s[YouTube].
diff --git a/manual/src/docs/website/news/20090903.txt b/manual/src/docs/website/news/20090903.txt
deleted file mode 100644
index 74982f5..0000000
--- a/manual/src/docs/website/news/20090903.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-[[news-20090903,Qi4j Persistence at JavaZone 2009]]
-= @ JavaZone 2009 - Persistence =
-
-JavaZone 2009 is held as usual in Oslo, Norway, on the 9th and 10th of
-September 2009. It is set to be an exciting event, Scandinavias larges Java
-Developer's conference, but covers adjacent languages as well, such as Scala,
-Groovy and JRuby. Qi4j is represented with a presentation by Niclas Hedhman
-about "Qi4j Persistence" (10th Sept, 11:45). The short time available will only
-allow for the basics of Qi4j Persistence to be covered, but the audience is
-expected to get tantalized and curious about our great framework for rich
-domain model development.
-
-Many other great speakers, both local Norwegians as well as International ones,
-will be present and all is set for a great conference, again...
-
-Niclas will of course be available most of the conference time for face-to-face
-discussions, feedback and questions on Qi4j topics.
-
-See you in Oslo.
\ No newline at end of file
diff --git a/manual/src/docs/website/news/20100125-2.txt b/manual/src/docs/website/news/20100125-2.txt
deleted file mode 100644
index c6becbb..0000000
--- a/manual/src/docs/website/news/20100125-2.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-[[news-20100125-2,Qi4j at Øredev 2009 : DCI in practice]]
-= @ Øredev 2009 - DCI =
-
-In this presentation that was recorded during Øredev 2009, Rickard Öberg
-presents how to use Qi4j to implement the DCI principles. DCI, or
-Data-Context-Interaction, is a new paradigm created by Trygve Reenskug,
-inventor of the MVC pattern.
-
-The presentation can be found
-http://www.oredev.org/prod/oredev/site.nsf/docsbycodename/session?opendocument&sid=88EF79931A074A1AC125759A003AB0ED&track=24116556E47101EAC12575A50049A141&day=5[here],
-and it was part of a DCI track with Trygve and Jim Coplien, who's presentations
-you can find
-http://www.oredev.org/prod/oredev/site.nsf/docsbycodename/session?opendocument&sid=B5D8BF332A282FEEC1257599003E5694&track=24116556E47101EAC12575A50049A141&day=5[here]
-and
-http://www.oredev.org/prod/oredev/site.nsf/docsbycodename/session?opendocument&sid=9986C37D739F8D39C12575940064F272&track=24116556E47101EAC12575A50049A141&day=5[here].
diff --git a/manual/src/docs/website/news/20100125.txt b/manual/src/docs/website/news/20100125.txt
deleted file mode 100644
index 4cb62d0..0000000
--- a/manual/src/docs/website/news/20100125.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-[[news-20100125,Rickard about Quicker Frameworks on the DDD website]]
-= Quicker Frameworks =
-
-Usually, a framework is created to make development faster by hiding the
-technical machinery underneath. Motivation behind Qi4j was very different. In
-this article written by Rickard Öberg for http://DomainDrivenDesign.org[DomainDrivenDesign.org],
-he talks about how this domain-centric application development framework makes it quicker.
-
-You can find the article on the DDD website http://domaindrivendesign.org/library/oberg_2009[here].
diff --git a/manual/src/docs/website/news/20100128.txt b/manual/src/docs/website/news/20100128.txt
deleted file mode 100644
index 6a4ee20..0000000
--- a/manual/src/docs/website/news/20100128.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-[[news-20100128,Qi4j SDK 1.0 has been released!]]
-= Qi4j SDK 1.0 has been released! =
-
-Qi4j SDK 1.0 has now been released. After 2 years of hard work, we have finally
-made an official release available. It contains all the core features of Qi4j,
-such as composites made from fragments like mixins, concerns, side-effects and
-constraints, and also the libraries and extensions that are useful for most
-application development.
-
-During this weeks JFokus conference in Stockholm, Sweden, the Qi4j community
-released Qi4j SDK 1.0. Rickard Öberg made two presentations in association with
-the conference, focusing on how Qi4j and Composite Oriented Programming makes
-working with domain models on the Java platform easier compared to the usual
-POJO approach typically used in todays application development.
-
-Qi4j is a significant step forward for the Java platform, with its focus on
-Domain Driven Design and support for the 
-http://www.artima.com/articles/dci_vision.html[Data-Context-Interaction]
-paradigm that is currently being worked on by Trygve Reenskaug as a way to
-revive object-orientation.
diff --git a/manual/src/docs/website/news/20100617.txt b/manual/src/docs/website/news/20100617.txt
deleted file mode 100644
index f31ce79..0000000
--- a/manual/src/docs/website/news/20100617.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-[[news-20100617,Qi4j SDK 1.1 is out!]]
-= Qi4j SDK 1.1 is out! =
-
-Qi4j community hereby announces the availability of Release 1.1 of Qi4j Core,
-Qi4j Libraries and Qi4j Extensions.
-
-Qi4j version 1.1 is now available. It is mostly an bug fix update, some SPI
-changes and a contributed EntityStore for EC2/S3 using Infinispan. The author,
-Philippe Van Dyck, explains;
-
-- Infinispan memory cache eviction mechanism is based on a memory threshold (i.e. you specify 100MB of memory for the cache in the store config)
-- RHQ monitoring with Infinispan plugin
-- Entries are gzipped on S3
-- Wicket load balancing is done with infinispan (custom pagestore)
-- I use a directory structure for qi4j identities ("Entity1/key1") with a webdav interface to it, so one can mount Qi4j's store in Mac OSX Finder.
-- EC2 S3_PING is used in jgroups to join the cluster of qi4j stores
-- Each Qi4j UnitOfWork is transaction backed with rollback support
-- S3 (blobstore) access is using Infinispan synchronous and transacted mode
-- EC2 images only contain the wicket web interface with a jetty https connector / when added to amazon elastic load balancer, Infinispan connects to the cache cluster and wicket begins to server load balanced requests - yep, just like that
-
-Current performance, as reported by RHQ, from EC2 to S3, is around 60ms per
-read/write from S3 (rough average). Elastic load balancing load tests with
-loadStorm are not done yet. But I don't know any NOSQL alternative offering a
-*permanent transacted monitored compressed Finder-mounted clustered
-load-balanced store*.
-
-Development continues towards 1.2 release, which includes better OSGi support,
-dropping CGLib dependency due to classloading issues, Google AppEngine support
-and hopefully the DCI support as developed in the StreamFlow project.
diff --git a/manual/src/docs/website/news/20100830.txt b/manual/src/docs/website/news/20100830.txt
deleted file mode 100644
index ac3643f..0000000
--- a/manual/src/docs/website/news/20100830.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-[[news-20100830,Qi4j at Apache Roadshow Shanghai]]
-= @ Apache Roadshow Shanghai =
-
-Qi4j was invited to present at the Apache Roadshow Shanghai 2010, largely due
-to Niclas Hedhman is currently living there and is an Apache Member. Niclas has
-reflected over how the presentation was done and some reactions from the
-audience. You can read all about it on his
-http://www.jroller.com/niclas/entry/qi4j_in_shanghai_part_2[blog].
diff --git a/manual/src/docs/website/news/20100918.txt b/manual/src/docs/website/news/20100918.txt
deleted file mode 100644
index b29c67f..0000000
--- a/manual/src/docs/website/news/20100918.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-[[news-20100918,Qi4j at JavaZone 2010 - ReST/DCI]]
-= @ JavaZone 2010 - ReST/DCI =
-
-Qi4j at JavaZone 2010, Oslo, Norway. Rickard Öberg presented
-"Implementing a Rest API with DCI and Qi4j" at JavaZone on the 8 Sept 2010.
-
-Implementing a REST API today is important in many cases, both as an
-integration point to your application and as a way for clients to access the
-application. But there are few frameworks out there that help you fulfil all
-the constraints of REST, and therefore only makes your API a REST-wannabe. This
-session will look at how you can use Qi4j along with the DCI pattern to
-implement a truly RESTful API, that follows all the constraints. We will look
-at how DCI maps to the RESTful way of thinking about web API's, and how Qi4j
-can help with the actual implementation.
-
-http://streaming.java.no/tcs/#page:recordingList&pageNumber:1&id:DD3955BC-997B-40C1-A7DC-421DB8EE6512[Watch the video]
diff --git a/manual/src/docs/website/news/20101023.txt b/manual/src/docs/website/news/20101023.txt
deleted file mode 100644
index 7d332c8..0000000
--- a/manual/src/docs/website/news/20101023.txt
+++ /dev/null
@@ -1,73 +0,0 @@
-[[news-20101023,Qi4j SDK 1.2 Released]]
-= Qi4j SDK 1.2 Released =
-
-The Qi4j community today announced the 3rd installment of the innovative Java
-framework, Qi4j. The main new features includes, SQL EntityStore, SQL
-Indexing/Querying, Caching SPI and a Service Qualifier API.
-
-Additional to the new features, numerous improvements were made along side with
-significant internal changes. Here is a break down of the more important issues;
-
-The Cache SPI is another important new feature. The pluggable Cache SPI means
-that it is equally simple to add new caching implementations as it is to add
-Entity Store implementations, in fact even easier since the SPI is very simple.
-The entity stores implementations that leverages the MapEntityStore layer in
-the Qi4j Runtime (which most do), will automatically benefit from the plugged
-in Cache.
-
-The support of SQL has been a long-standing requested item, and thanks to new
-community blood, we now have the first generation of both EntityStore
-implementation as well as using SQL backends for querying and indexing. These
-two implementations is a testament that the Qi4j data model is truly flexible.
-The current implementation does not, however, support mapping of existing
-tables and expect to 'own' the tables it needs. PostgreSQL and MySQL are the
-first support RDBMSes, and more are bound to follow in upcoming releases.
-
-SLF4J was introduced as a dependency in Qi4j Core, and slowly starting to add
-additional debug and trace statements in the internals of Qi4j Runtime to aid
-in troubleshooting.
-
-Qi4j community has also noted a JDK bug, which surface as a
-java.lang.ArrayStoreException, but is really a
-java.lang.TypeNotPresentException that gets treated incorrectly deep inside
-com.sun packages. This release did not manage to work around this, but we will
-in the next release.
-
-The bugs fixed are of various nature. Some of the bugs listed in the release
-notes are possibly fixed prior to Qi4j 1.1, but not identified correctly. The
-two most important bug fixes are QI-247, Incorrect delegation of Object methods
-in TransientComposite, and QI-241 regarding the matching algorithm for
-@AppliesTo. The latter may seriously affect existing applications to include
-fragments when it previously didn't.
-
-== Release Notes - Qi4j SDK 1.2 ==
-
-*New Features*
-
-- [QI-192] - Support indexing/querying of collection properties
-- [QI-260] - Introduce advanced cache (ehcache?) as a general purpose caching layer for all EntityStores
-- [QI-266] - Introduction of Service Qualifier API
-- [QI-268] - Cache SPI introduced in Core.
-- [QI-269] - Cache Extension - Ehcache
-
-*Improvements*
-
-- [QI-58] - Property -> Property .. -> .. Querying
-- [QI-232] - Entity Type resolution is flawed
-- [QI-249] - Visitor-pattern to work with throws -declaration
-- [QI-263] - Replace JDK logging with SLF4J
-- [QI-264] - Use exception handling pattern in visitors
-- [QI-265] - Introduce SLF4J as logging framework.
-- [QI-267] - EntityStoreSPI.applyChanges() should have the EntityStoreUnitOfWork passed along.
-
-*Bugs Fixed*
-
-- [QI-214] - Missing implementations of newEqualsPredicate
-- [QI-241] - AppliesTo match algorithm should be a OR condition in the targeted elements list
-- [QI-247] - Broken delegation of Object methods in TransientComposite
-- [QI-253] - Remaining bugs on moving to ASM
-- [QI-254] - FragmentClassLoader causes UnsupportedClassVersionError in most tests
-- [QI-255] - Qi4j tests do not take @Queryable(false) into account
-- [QI-256] - UndeclaredThrowableException - possibly related to new class-generation
-- [QI-257] - ConcernOf/SideEffectOf not working with <Property<SomeType>>
-- [QI-259] - JSONMapEntityStore did not update lastModified in entitystate
diff --git a/manual/src/docs/website/news/20110221.txt b/manual/src/docs/website/news/20110221.txt
deleted file mode 100644
index b8542b8..0000000
--- a/manual/src/docs/website/news/20110221.txt
+++ /dev/null
@@ -1,75 +0,0 @@
-[[news-20110221,Qi4j moves to Gradle]]
-= Qi4j moves to Gradle =
-
-The Qi4j project has discontinued its use of Maven and introduced Gradle as its
-build system.
-
-After fighting the Maven build system for years, and constantly looking for
-alternatives, the Qi4j community has finally decided to grab the bull by its
-horn and throw it out of the arena. Maven imposes a very rigid model on how to
-define your project, but has a weak internal model on how a build is executed.
-We therefor often see conflicts between plugins, plugins make too much 
-assumptions and ignoring settings that are actually provided formally, and not
-to even mention the fundamentally flawed versioning system.
-
-After a few evaluations of alternatives (Gradle & Buildr were the strong
-contenders), we have finally settled for Gradle (http://www.gradle.org and
-http://gradle.codehaus.org). Contrary to Maven, Gradle provides a strong
-internal model for build systems, but a flexible way to establish that model.
-In essence, in Maven, the declaration is static and the execution is 
-ill-defined, and in Gradle the model is established programmatically and the
-execution is done off the model.
-
-This allows for a great deal more flexibility. Gradle also have nice
-integration with Ant and Ivy, so Gradle's dependency system is handled by Ivy
-(without Ivy's XML) and it is easy to use any build tool that provides an Ant
-task, again programmatically.
-
-The absence of XML is refreshing. So instead of;
-
-[source,xml]
-----
-<dependencies>
-  <dependency>
-    <groupId>org.qi4j.core.runtime</groupId>
-    <artifactId>qi4j-core-api</artifactId>
-    <version>1.3</version>
-  </dependency>
-  <dependency>
-    <groupId>org.qi4j.core.runtime</groupId>
-    <artifactId>qi4j-core-runtime</artifactId>
-    <version>1.3</version>
-    <scope>test</scope>
-  </dependency>
-</dependencies>
-----
-
-The declaration of a dependency is done programmatically in Groovy code, so it
-can even be conditional and so forth, but the normal way is;
-
-[source,groovy]
-----
-dependencies {
-    compile "org.qi4j.core:qi4j-core-api:1.2"
-    testRuntime "org.qi4j.core:qi4j-core-runtime:1.2"
-}
-----
-
-And YES, there is a difference between testCompile and testRuntime. 1 line
-instead of Maven's 5-6 lines per dependency. And in true Ivy fashion, one can
-create one's own scopes, although I doubt we need that in the near future.
-
-The dependency system is worth mentioning; Since Gradle understand multi module
-projects very well, again unlike Maven, it resolves the build order according
-to the tasks needed. This means that an upstream module's tests can depend on a
-downstream module's output. And even if the build is executed in the upstream
-module, the downstream module will be recompiled if any changes happened in it.
-You never need to worry about "Oh, I forgot to recompile X" again...
-
-Gradle does not need an installation. The Qi4j SDK project comes with a Gradle
-bootstrapper, so it will install itself. Very nice.
-
-Qi4j is still committed to produce Maven artifacts for publishing to Maven
-repositories, and the upcoming 1.3 release will be the first one using Gradle for this.
-
-We hope that this will make Qi4j development more enjoyable.
diff --git a/manual/src/docs/website/news/20110415.txt b/manual/src/docs/website/news/20110415.txt
deleted file mode 100644
index 60b121f..0000000
--- a/manual/src/docs/website/news/20110415.txt
+++ /dev/null
@@ -1,103 +0,0 @@
-[[news-20110415,Qi4j SDK Release 1.3]]
-= Qi4j SDK Release 1.3 =
-
-Kuala Lumpur, 15 April 2011 - The Qi4j community today announced Release 1.3 of the innovative Java framework, Qi4j. This release is significant for several customers, moving to deploy Qi4j in business critical 24/7 systems. "We now feel that the core features of Qi4j are as stable as software systems ever get. Qi4j is now being deployed at a major investment bank in the risk pricing domain.", said Niclas Hedhman, co-inventor of Qi4j together with Rickard Öberg, who added "Qi4j has really proved itself in StreamFlow, and I am convinced that many of our paradigms will stand the test of time."
-
-This release sports many new features, such as Solr Indexing, JMX integration, Circuit-breaker library, innovative API for dealing with I/O, functional paradigms and much more, but an important focus was to stabilize the many libraries and extensions.
-
-The main new features are listed below. The community now sets its eyes ahead towards the next release(s), which will include an industrial automation alarm system, JMX aggregation for the cloud, Entity Viewers via the Rest API and a whole lot more documentation and test coverage. We all look forward to this and many other things to come from Qi4j, the most exciting, technology challenging project in the Open Source Java world.
-
-== I/O API ==
-
-Rickard Öberg is once again inventing new ways to do common things. The I/O API correctly separates the concerns of reading, writing, exception handling, transformation and filtering. This resulted in a DSL like way of writing stream handling code. The I/O API is completely independent of everything in Qi4j and may be used separately. We may release it as a separate artifact in the future.
-
-== JMX Integration ==
-
-By addding a single line of code, you will get the application structure represented in your JMX "tree view". Starting with a "Qi4j" node, under which each Qi4j Application is listed, followed by Layers, Modules and the Composites. All Services' configuration instances are exposed and can be changed via JMX, as can services be stopped, started and restarted.
-
-== OSGi Integration ==
-
-All of Qi4j is now OSGi-compliant. That means that all jars are OSGi bundles, with imports and exports. On top of that, this release also contains the beginning of a OSGi-specific library, which allows Qi4j Services to be exported as OSGi services and vice versa. This library is still in beta.
-
-== Circuit Breaker ==
-
-The CircuitBreaker library allows external resources to be monitored for health and taken 'offline' when facing trouble. This is also signalled via JMX for human intervention.
-
-== Solr Indexing ==
-
-To allow free-text searches of content in entities, Qi4j now has integrated Solr via the Qi4j Indexing/Query extension mechanism. It is not possible to do generic queries via this extension, but it leveraging the Named Query feature. Free-text search enable your data in existing entitystores by using the Reindexer extension.
-
-== UnitOfWork Retry ==
-
-The UnitOfWorkConcern now handles an optional UnitOfWorkRetry annotation, allowing full re-runs of work. Literally a single annotation allows developers to add retry logic (or remove the complex retry logic already in place).
-
-== JSON format now handles Maps ==
-
-The JSON serializer/deserializer has been equipped to handle Maps, by named properties instead of a java serialized map as was preveiously the case. The new deserializer logic is still compatible with the old format.
-
-== Job Scheduler ==
-
-A new library, org.qi4j.library.scheduler, can now launch jobs according to CRON formatted schedules.
-
-== Specifications in Assembly ==
-
-The ModuleAssembly system has been revised heavily, to allow different parts of the application to apply assembly information to composites. This allows for near functional programming style of setting up composites.
-
-== Iterables Utility ==
-
-Qi4j is innovating again, with a utility to do functional programming style in Java for Iterables. In this first release, the utility only contains the most basic operations, but will be extended over time.
-
-== Release Notes - Qi4j - Version 1.3 ==
-
-*New Features*
-
-- [QI-277] - JMX services
-- [QI-281] - Solr query/indexing
-- [QI-284] - Circuit breaker library
-- [QI-285] - Active -> Available
-- [QI-288] - Add a concern for handling retry on ConcurentModification
-- [QI-289] - Create a library for a job scheduler
-- [QI-291] - New API for doing I/O
-- [QI-295] - Exporter of Qi4j Services to OSGi
-- [QI-296] - Importer of OSGi services into the Qi4j world.
-- [QI-300] - Add test helper for scenarios
-- [QI-309] - Concern to handle ConcurentEntityModificationException and retry the UnitOfWork
-- [QI-320] - Maps in JSON format
-- [QI-321] - Specification driven assembly
-- [QI-341] - Support JodaTime natively in the toJSON() system.
-
-*Improvements*
-
-- [QI-275] - Enhance the community documentation to spell out the 'trust issues' in Core.
-- [QI-297] - Capture NullPointerException slightly more gracefully in ValueBuilderFactory
-- [QI-299] - Replace ServiceQualifier method with Specification
-- [QI-302] - Capture which class is declared final
-- [QI-305] - ObjectDescriptor in ModuleSPI
-- [QI-312] - Patch for Gradle build system
-- [QI-313] - Upgrade Neo4j extension to ver 1.2 
-- [QI-317] - Obscure Exception can be improved.
-- [QI-326] - Cobertura reports in the build.
-- [QI-339] - Add support for variables in RDF named queries
-
-*Bug*
-
-- [QI-272] - Changing properties in Lifecycle sometimes doesn't work
-- [QI-292] - ServiceLoader mechanism for Qi4j Runtime implementation is really awkward.
-- [QI-294] - qi4j-libraries: rdf/src/main/java/org/qi4j/library/rdf/model/ApplicationVisitor.java is not compilable
-- [QI-303] - Incorrect generics type for imported services.
-- [QI-304] - Composite extends Serializable
-- [QI-306] - Exception thrown when @Using on complex generic types
-- [QI-308] - The @UnitOfWorkDiscardOn annotation does not have runtime Retention
-- [QI-331] - BuildVersion class is in wrong package.
-- [QI-332] - Generated POMs doesn't include the <repository> sections needed.
-- [QI-333] - Qi4j Runtime needs a way to bootstrap in OSGi
-- [QI-334] - Maven source jars are not generated and uploaded.
-- [QI-335] - Maven javadoc jars are not generated and uploaded
-- [QI-337] - Package org.qi4j.api.specification is imported more than once in Core Runtime OSGi bundle declaration.
-- [QI-340] - NPE in ModuleUnitOfWork which should be a informative Exception
-
-*Task*
-
-- [QI-314] - Creation of proper SDK
-- [QI-315] - Define binary tarball layout
-- [QI-316] - Define source tarball layout
diff --git a/manual/src/docs/website/news/20110806.txt b/manual/src/docs/website/news/20110806.txt
deleted file mode 100644
index 7917d5f..0000000
--- a/manual/src/docs/website/news/20110806.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-[[news-20110806,Qi4j SDK Release 1.4]]
-= Qi4j SDK Release 1.4 =
-
-Shanghai, 5 Aug 2011 - The Qi4j community today announced Release 1.4 of the innovative Java framework, Qi4j. This release is a consolidation release of the 1.x development branch, as development focus now is directed towards 2.0. The main new features in version 1.4 is Named Associations and inclusion of an industrial automation inspired alarm system.
-
-== Summary ==
-
-The Qi4j Release 1.4 is a consolidation release, to bring together un-released features in the 1.x development branch. This is the last feature release in 1.x, and only serious bugs will be fixed and released. The Qi4j community will now focus on version 2.0 of Qi4j, which will again sport many ground=breaking features.
-
-== Named Associations ==
-
-In 1.4 it is now possible to map associations by name, and not only as a list. The name is local to the association itself, and operates very much like a Map. The entities referenced are as usual loaded lazily upon get() method.
-
-== Alarm System ==
-
-Industrial automation systems have long had alarm systems as the main mechanism for reporting problems in a large system. This metaphor is actually very well suited in today's complex enterprise systems as well. Alarms are in Qi4j implemented as an entity with a small state machine, dictated by an Alarm Model. The Standard Alarm model has four states; Normal, Activated, Deactivate and Acknowledged. After an alarm is activated, an individual person has to acknowledge the alarm before its state return to normal.
-
-Further work will be done in this area for aggregation, notficiation, reporting and visualization.
\ No newline at end of file
diff --git a/manual/src/docs/website/news/20120215.txt b/manual/src/docs/website/news/20120215.txt
deleted file mode 100644
index 7033167..0000000
--- a/manual/src/docs/website/news/20120215.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-[[news-20120215,Qi4j at JFokus 2012 - ReST]]
-= @ JFokus 2012 - ReST =
-
-Implementing a REST API today is important in many cases, both as an integration point to your application and as a way
-for clients to access the application. But there are few frameworks out there that help you fulfil all the constraints
-of REST, and therefore only makes your API a REST-wannabe. The idiom that's often missing is HATEOAS. This session will
-look at how you can build a ReSTful api and applying HATEOAS. The background of this session is the <<news-20100918>>
-presentation.
-
-http://www.parleys.com/#st=5&id=3059&sl=6[Watch the video]
-
-Check the presentation slides online
-http://www.jfokus.se/jfokus12/preso/jf12_TheRoadToRest.pdf
-
-On a related note, back in december 2012, Rickard posted "The domain model as REST anti-pattern" in his
-blog: http://www.jroller.com/rickard/entry/the_domain_model_as_rest
diff --git a/manual/src/docs/website/news/20120502.txt b/manual/src/docs/website/news/20120502.txt
deleted file mode 100644
index f166233..0000000
--- a/manual/src/docs/website/news/20120502.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-
-[[news-20120502,Qi4j Future]]
-= Qi4j's Future =
-
-Lately, the activity in Qi4j community has been fading. Key members of the community have been caught up in many
-different activities outside this community, from changing jobs to have additional personal commitments piling up.
-
-Speculation has been circulating whether Qi4j will simply die.
-
-Today, some of the community leaders met and decided to step up and start forging this project forward. There are
-a few immediate points which will be addressed first;
-
-* New website. Sitevision is causing more problems than it solves for us.
-
-* Documentation. It has always been lacking, partly due to Sitevision's barrier to editing. With plain text documentation
-developers no longer have an excuse not to document the features in Qi4j.
-
-* Roadmap to 2.0. Establish the features we want to incorporate and have done before 2.0. Effectively ensuring that
-all compatibility breaking features are included.
-
-We hope that these future efforts will re-instill confidence in the viability of Qi4j in your projects.
diff --git a/manual/src/docs/website/news/20120525.txt b/manual/src/docs/website/news/20120525.txt
deleted file mode 100644
index bc318fd..0000000
--- a/manual/src/docs/website/news/20120525.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-[[news-20120525,Qi4j launches new website]]
-= New Qi4j website! =
-
-After years with SiteVision from Senselogic, the Qi4j community has decided that SiteVision does not fulfill the needs
-of this community. Primarily, SiteVision can not satisfy some really central needs of open source communities;
-
-* Learning curve for SiteVision is higher than plain text tool chains.
-
-* Offline editing is not possible.
-
-* Distance between Sitevision server and users introduce network latencies that makes the SiteVision experience less
-than optimal.
-
-* Versioning is non-trivial. Keeping old versions of the site up and running in parallel will be important as users
-seek information about older versions of the Qi4j SDK online.
-
-* Integration with build system and codebase in general is fairly complex process.
-
-
-We are therefor saying a *Big THANK YOU* to Senselogic and SiteVision for the time past, but we are now excited in
-moving forward with a new website and an underlying toolchain for it.
-
-
-The site is completely static (for now), and is built from AsciiDoc plain text documents, plus various build-time
-integrations with the codebase, such as code snippets, and we will expand on this in the future, including
-_development status_ (dev-status.xml), any version available on website, automatic example output capturing and
-much more. We also hope to be able to integrate *Disqus* for user commentary on every page.
-
-Already, prior to launching the new site, the new toolchain has already proven itself worthy, as much more content
-has been generated by the community within a short period of time.
-
-"I think this is a great leap forward for us. Although content management systems are powerful, they don't serve
-the open source community needs very well.", says Niclas Hedhman, one of the Qi4j Core Team members.
-
-"We have tried to provide a styling format that works across a large set of browsers, operating systems and devices.",
-says Paul Merlin, another Core Team member who placed the final touches on the design.
-
-== Enjoy the new website ==
-
-Any feedback is welcome, either on GitHub or qi4j-dev forum at Google Groups.
-
diff --git a/manual/src/docs/website/news/news.txt b/manual/src/docs/website/news/news.txt
deleted file mode 100644
index 52d4c50..0000000
--- a/manual/src/docs/website/news/news.txt
+++ /dev/null
@@ -1,100 +0,0 @@
-:leveloffset: 1
-
-[[news,Newsworthy]]
-=  News =
-
-== News & Events ==
-
-[options="header"]
-|=========================================================
-|Date |Announcement
-
-|2012-May-25 |<<news-20120525>>
-|2012-May-07 |<<news-20120502>>
-|2012-Feb-15 |<<news-20120215>>
-|2011-Aug-06 |<<news-20110806>>
-|2011-Apr-15 |<<news-20110415>>
-|2011-Feb-21 |<<news-20110221>>
-|2010-Oct-23 |<<news-20101023>>
-|2010-Sep-18 |<<news-20100918>>
-|2010-Aug-30 |<<news-20100830>>
-|2010-Jun-17 |<<news-20100617>>
-|2010-Jan-28 |<<news-20100128>>
-|2010-Jan-25 |<<news-20100125-2>>
-|2010-Jan-25 |<<news-20100125>>
-|2009-Sep-03 |<<news-20090903>>
-|2009-May-10 |<<news-20090510>>
-|2009-Apr-20 |<<news-20090420>>
-|2009-Feb-20 |<<news-20090220>>
-|2009-Feb-19 |<<news-20090219>>
-|2009-Jan-10 |<<news-20090110>>
-|2009-Jan-09 |<<news-20090109>>
-|2008-Nov-17 |<<news-20081117>>
-|2008-Sep-19 |<<news-20080919>>
-|2008-Sep-15 |<<news-20080915>>
-|2008-Aug-08 |<<news-20080808>>
-|2008-Jun-06 |<<news-20080606>>
-|2008-Apr-14 |<<news-20080414>>
-|2008-Jan-30 |<<news-20080130>>
-|2007-Nov-13 |<<news-20071113>>
-|=========================================================
-
-:leveloffset: 2
-
-include::20120525.txt[]
-
-include::20120502.txt[]
-
-include::20120215.txt[]
-
-include::20110806.txt[]
-
-include::20110415.txt[]
-
-include::20110221.txt[]
-
-include::20101023.txt[]
-
-include::20100918.txt[]
-
-include::20100830.txt[]
-
-include::20100617.txt[]
-
-include::20100128.txt[]
-
-include::20100125-2.txt[]
-
-include::20100125.txt[]
-
-include::20090903.txt[]
-
-include::20090510.txt[]
-
-include::20090420.txt[]
-
-include::20090220.txt[]
-
-include::20090219.txt[]
-
-include::20090110.txt[]
-
-include::20090109.txt[]
-
-include::20081117.txt[]
-
-include::20080919.txt[]
-
-include::20080915.txt[]
-
-include::20080808.txt[]
-
-include::20080606.txt[]
-
-include::20080414.txt[]
-
-include::20080130.txt[]
-
-include::20071113.txt[]
-
-:leveloffset: 2
diff --git a/manual/src/docs/website/related.txt b/manual/src/docs/website/related.txt
index bac437c..453d078 100644
--- a/manual/src/docs/website/related.txt
+++ b/manual/src/docs/website/related.txt
@@ -1,9 +1,28 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[related,Related publications and projects]]
 = Related publications & projects =
 
-Qi4j addresses a wide range of concepts, the related publications and projects you'll find in this section span accross
+Zest™ addresses a wide range of concepts, the related publications and projects you'll find in this section span accross
 all theses concepts. Please note that this is not an exhaustive list but only some pointers to help you understand which
-principles Qi4j is based on.
+principles Zest™ is based on.
 
 
 == Publications ==
diff --git a/manual/src/docs/website/resources/css/qi4j.css b/manual/src/docs/website/resources/css/qi4j.css
index 92a0f3d..d302aae 100644
--- a/manual/src/docs/website/resources/css/qi4j.css
+++ b/manual/src/docs/website/resources/css/qi4j.css
@@ -1,3 +1,22 @@
+/*
+ * 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.
+ */
+
 span.remark
 {
     background: yellow;
diff --git a/manual/src/docs/website/resources/css/style.css b/manual/src/docs/website/resources/css/style.css
index ad7cae9..86374f1 100644
--- a/manual/src/docs/website/resources/css/style.css
+++ b/manual/src/docs/website/resources/css/style.css
@@ -233,6 +233,9 @@
     color: #9a9a9a;
     font-size: 80%;
 }
+.footer p {
+    text-shadow: none;    
+}
 
 div.informaltable
 {
diff --git a/manual/src/docs/website/samples.txt b/manual/src/docs/website/samples.txt
index 5bfbaaa..b4de2ff 100644
--- a/manual/src/docs/website/samples.txt
+++ b/manual/src/docs/website/samples.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 :leveloffset: 1
 
 [[samples,Samples Section]]
@@ -5,37 +24,37 @@
 
 == Overview ==
 
-The Qi4j SDK comes with several sample applications. This is a very good place
+The Zest™ SDK comes with several sample applications. This is a very good place
 to look for code examples and recipes.
 
-The samples are available in the +samples/+ directory of the Qi4j SDK.
+The samples are available in the +samples/+ directory of the Zest™ SDK.
 
 [[sample-dci, DCI Sample]]
 == DCI Sample ==
 
 Sample of how DCI (Data, Context & Interaction) pattern is implemented using
-Qi4j core only.
+Zest™ core only.
 
-https://github.com/Qi4j/qi4j-sdk/tree/develop/samples/dci[Browse Source]
+https://github.com/apache/zest-java/tree/develop/samples/dci[Browse Source]
 
 [[sample-dci-cargo,DCI Cargo Sample]]
 == DCI Cargo Sample ==
 
 Sample of how DCI (Data, Context & Interaction) pattern is implemented with
-Qi4j, for Eric Evans DDD sample.
+Zest™, for Eric Evans DDD sample.
 
 This sample, contributed by Marc Grue, is described in details on his
 website: http://marcgrue.com/
 
-https://github.com/Qi4j/qi4j-sdk/tree/develop/samples/dci-cargo[Browse Source]
+https://github.com/apache/zest-java/tree/develop/samples/dci-cargo[Browse Source]
 
 [[sample-forum,Forum Sample]]
 == Forum Sample ==
 
 Sample of how to build a web forum using <<library-rest-server>>,
-<<extension-es-neo4j>> and <<library-fileconfig>>.
+<<extension-es-file>> and <<library-fileconfig>>.
 
-https://github.com/Qi4j/qi4j-sdk/tree/develop/samples/forum[Browse Source]
+https://github.com/apache/zest-java/tree/develop/samples/forum[Browse Source]
 
 [[sample-car-rental,Car Rental Sample]]
 == Car Rental Sample ==
@@ -43,23 +62,23 @@
 Sample of implementation of a Car Rental application implemented as a Servlet
 based Webapp packaged as a WAR.
 
-https://github.com/Qi4j/qi4j-sdk/tree/develop/samples/rental[Browse Source]
+https://github.com/apache/zest-java/tree/develop/samples/rental[Browse Source]
 
 // [[sample-scala,Scala Sample]]
 // == Scala Sample ==
 //
-// Sample of how to use Scala with Qi4j.
+// Sample of how to use Scala with Zest™.
 //
-// https://github.com/Qi4j/qi4j-sdk/tree/develop/samples/scala[Browse Source]
+// https://github.com/apache/zest-java/tree/develop/samples/scala[Browse Source]
 
 [[sample-sql-support,SQL Support Sample]]
 == SQL Support Sample ==
 
 NOTE: This sample use PostgreSQL and drop all of its data once run in order to be runnable multiple times.
 
-Sample of how to fully use Qi4j SQL support : <<library-sql>>, <<extension-es-sql>> and <<extension-indexing-sql>>.
+Sample of how to fully use Zest™ SQL support : <<library-sql>>, <<extension-es-sql>> and <<extension-indexing-sql>>.
 
-https://github.com/Qi4j/qi4j-sdk/tree/develop/samples/sql-support[Browse Source]
+https://github.com/apache/zest-java/tree/develop/samples/sql-support[Browse Source]
 
 Here are the steps needed to setup the database using the `psql` utility command:
 
@@ -82,16 +101,9 @@
 
 A gradle task `runSample` is defined in this module as a shortcut to run the example. See <<build-system>>.
 
-[[sample-struts2,Struts2 Sample]]
-== Struts2 Sample ==
-
-Sample of how to use the Struts2 integration.
-
-https://github.com/Qi4j/qi4j-sdk/tree/develop/samples/struts2Hello[Browse Source]
-
 [[sample-swing,Swing Bindings Sample]]
 == Swing Bindings Sample ==
 
 Sample of how to write custom binders.
 
-https://github.com/Qi4j/qi4j-sdk/tree/develop/samples/swing[Browse Source]
+https://github.com/apache/zest-java/tree/develop/samples/swing[Browse Source]
diff --git a/manual/src/docs/website/tutorials.txt b/manual/src/docs/website/tutorials.txt
index 3b7d55f..256d8e8 100644
--- a/manual/src/docs/website/tutorials.txt
+++ b/manual/src/docs/website/tutorials.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 :leveloffset: 1
 
 [[tutorials,Tutorials Section]]
@@ -6,15 +25,15 @@
 == Overview ==
 
 TIP: Theses tutorials are based on actual code found in the `tutorials/` directory of the
-http://qi4j.org/downloads.html[Qi4j SDK sources]. You should start your favorite editor and find the code related to
+https://zest.apache.org/download.html[Zest™ SDK sources]. You should start your favorite editor and find the code related to
 this tutorial, run it and play with it.
 
-In this section you will find a comprehensive set of tutorials about Composite Oriented Programming using Qi4j.
+In this section you will find a comprehensive set of tutorials about Composite Oriented Programming using Zest™.
 
-[[tutorials-intro,Qi4j in 2 hours 42 minutes]]
-=== Qi4j in 2 hours 42 minutes ===
+[[tutorials-intro,Zest™ in 2 hours 42 minutes]]
+=== Zest™ in 2 hours 42 minutes ===
 
-This quite long introduction to Qi4j will start by brushing up an overview of the problems Qi4j solve, teach you what
+This quite long introduction to Zest™ will start by brushing up an overview of the problems Zest™ solve, teach you what
 Composite Oriented Programming is and guide you through the process of writing a complete Application around an adapted
 Hello World example.
 
@@ -23,13 +42,13 @@
 - <<thirty-minutes-intro>>
 - <<two-hours-intro>>
 
-=== Getting real with Qi4j ===
+=== Getting real with Zest™ ===
 
-Throughout this set of tutorials it will be shown how to depend on Qi4j in your build, how to assemble a complete
+Throughout this set of tutorials it will be shown how to depend on Zest™ in your build, how to assemble a complete
 application, how to create and work with Composites and Services, how to use contextual fragments and leverage
 properties.
 
-- <<howto-depend-on-qi4j>>
+- <<howto-depend-on-zest>>
 - <<howto-assemble-application>>
 - <<tut-composites>>
 - <<tut-services>>
@@ -48,13 +67,14 @@
 - <<howto-configure-service>>
 - <<howto-use-io>>
 
-=== Qi4j Development ===
+=== Zest™ Development ===
 
-This last set of tutorials you'll learn how to build the Qi4j SDK from sources including this very documentation website
-, the Qi4j manual, binaries and sources distributions.
+This last set of tutorials you'll learn how to build the Zest™ SDK from sources including this very documentation website
+, the Zest™ manual, binaries and sources distributions.
 
 - <<build-system>>
 - <<community-docs>>
+- <<releasing-apache>>
 
 
 :leveloffset: 2
@@ -75,7 +95,7 @@
 
 :leveloffset: 2
 
-include::../tutorials/howto-depend-on-qi4j.txt[]
+include::../tutorials/howto-depend-on-zest.txt[]
 
 :leveloffset: 2
 
@@ -119,6 +139,10 @@
 
 :leveloffset: 2
 
+include::../tutorials/howto-invocation-annotation.txt[]
+
+:leveloffset: 2
+
 include::../tutorials/howto-use-io.txt[]
 
 :leveloffset: 2
@@ -130,3 +154,7 @@
 include::../tutorials/howto-writing-docs.txt[]
 
 :leveloffset: 2
+
+include::../tutorials/howto-releasing-apache.txt[]
+
+:leveloffset: 2
diff --git a/manual/src/docs/website/xsl/chunked.xsl b/manual/src/docs/website/xsl/chunked.xsl
index 62c7f13..8848a8e 100644
--- a/manual/src/docs/website/xsl/chunked.xsl
+++ b/manual/src/docs/website/xsl/chunked.xsl
@@ -53,7 +53,16 @@
   <xsl:param name="generate.toc" select="''"/>
 
   <xsl:template name="footer.navigation">
-    <div class="footer">(c) 2012 The Qi4j Community</div>
+    <div class="footer">
+      <p>
+        Copyright © 2015 The Apache Software Foundation, Licensed under the <a href="http://www.apache.org/licenses/" target="_blank">Apache License, Version 2.0</a>.
+        <br/>
+        <small>
+            Apache Zest, Zest, Apache, the Apache feather logo, and the Apache Zest project logo are trademarks of The Apache Software Foundation.<br/>
+            All other marks mentioned may be trademarks or registered trademarks of their respective owners.
+        </small>
+      </p>
+    </div>
   </xsl:template>
 
   <xsl:template name="header.navigation">
diff --git a/manual/src/docs/website/xsl/head.xsl b/manual/src/docs/website/xsl/head.xsl
index 4d2c06c..297d67e 100644
--- a/manual/src/docs/website/xsl/head.xsl
+++ b/manual/src/docs/website/xsl/head.xsl
@@ -1,3 +1,19 @@
+<!--
+  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.
+-->
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 
   <xsl:template name="user.head.content">
@@ -58,7 +74,7 @@
 <!-- Analytics -->
  <script type="text/javascript">
   var _gaq = _gaq || [];
-  _gaq.push(['_setAccount', 'UA-3118496-1']);
+  _gaq.push(['_setAccount', 'UA-62007352-1']);
   _gaq.push(['_trackPageview']);
 
   (function() {
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/assemble/Docs.java b/manual/src/main/java/org/qi4j/manual/recipes/assemble/Docs.java
index 25b73ff..bc9a5bd 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/assemble/Docs.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/assemble/Docs.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.assemble;
 
 import org.qi4j.api.injection.scope.This;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/assemble/Main.java b/manual/src/main/java/org/qi4j/manual/recipes/assemble/Main.java
index 85c4f34..87c37c7 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/assemble/Main.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/assemble/Main.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.assemble;
 
 import org.qi4j.api.common.Visibility;
@@ -15,8 +33,8 @@
     public static void main( String[] args )
             throws Exception
     {
-        // Bootstrap Qi4j Runtime
-        // Create a Qi4j Runtime
+        // Bootstrap Zest Runtime
+        // Create a Zest Runtime
         qi4j = new Energy4Java();
 
         // Instantiate the Application Model.
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/concern/AnyMixinType.java b/manual/src/main/java/org/qi4j/manual/recipes/concern/AnyMixinType.java
index 3428a2f..f11b76f 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/concern/AnyMixinType.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/concern/AnyMixinType.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.concern;
 
 import org.qi4j.api.concern.Concerns;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/concern/InventoryConcern.java b/manual/src/main/java/org/qi4j/manual/recipes/concern/InventoryConcern.java
index 9328dd0..7d41006 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/concern/InventoryConcern.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/concern/InventoryConcern.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.concern;
 
 public class InventoryConcern
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/concern/LineItem.java b/manual/src/main/java/org/qi4j/manual/recipes/concern/LineItem.java
index 2503a77..39ae306 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/concern/LineItem.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/concern/LineItem.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.concern;
 
 
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/concern/MyAnnotation.java b/manual/src/main/java/org/qi4j/manual/recipes/concern/MyAnnotation.java
index 2b58dbe..1a95c5f 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/concern/MyAnnotation.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/concern/MyAnnotation.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.concern;
 
 public @interface MyAnnotation
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/concern/MyAppliesToFilter.java b/manual/src/main/java/org/qi4j/manual/recipes/concern/MyAppliesToFilter.java
index bd48f49..47a72d3 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/concern/MyAppliesToFilter.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/concern/MyAppliesToFilter.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.concern;
 
 import java.lang.reflect.Method;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/concern/MyGenericConcern.java b/manual/src/main/java/org/qi4j/manual/recipes/concern/MyGenericConcern.java
index ccae921..58ea48e 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/concern/MyGenericConcern.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/concern/MyGenericConcern.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.concern;
 
 import java.lang.reflect.Method;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/concern/Order.java b/manual/src/main/java/org/qi4j/manual/recipes/concern/Order.java
index e95039c..670b2a6 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/concern/Order.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/concern/Order.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.concern;
 
 import org.qi4j.api.concern.Concerns;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/contextualFragments/TraceAll.java b/manual/src/main/java/org/qi4j/manual/recipes/contextualFragments/TraceAll.java
index 0d985fc..273f95d 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/contextualFragments/TraceAll.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/contextualFragments/TraceAll.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.contextualFragments;
 
 import org.qi4j.bootstrap.AssemblyException;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/createConstraint/Dialer.java b/manual/src/main/java/org/qi4j/manual/recipes/createConstraint/Dialer.java
index c5e58d4..9cb8aed 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/createConstraint/Dialer.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/createConstraint/Dialer.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.createConstraint;
 
 // START SNIPPET: dialer
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/createConstraint/DialerComposite.java b/manual/src/main/java/org/qi4j/manual/recipes/createConstraint/DialerComposite.java
index dd3a9ce..ed569e2 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/createConstraint/DialerComposite.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/createConstraint/DialerComposite.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.createConstraint;
 
 import org.qi4j.api.constraint.Constraints;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/createConstraint/HasPhoneNumber.java b/manual/src/main/java/org/qi4j/manual/recipes/createConstraint/HasPhoneNumber.java
index 8d12dd4..810154d 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/createConstraint/HasPhoneNumber.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/createConstraint/HasPhoneNumber.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.createConstraint;
 
 import org.qi4j.api.property.Property;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/createConstraint/ParameterViolationConcern.java b/manual/src/main/java/org/qi4j/manual/recipes/createConstraint/ParameterViolationConcern.java
index 3cac3db..e5ef82d 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/createConstraint/ParameterViolationConcern.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/createConstraint/ParameterViolationConcern.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.createConstraint;
 
 import java.lang.annotation.Annotation;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/createConstraint/PhoneNumber.java b/manual/src/main/java/org/qi4j/manual/recipes/createConstraint/PhoneNumber.java
index 491b58b..0540d62 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/createConstraint/PhoneNumber.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/createConstraint/PhoneNumber.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.createConstraint;
 
 import org.qi4j.api.constraint.ConstraintDeclaration;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/createConstraint/PhoneNumberConstraint.java b/manual/src/main/java/org/qi4j/manual/recipes/createConstraint/PhoneNumberConstraint.java
index 33a46a0..7ed3fde 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/createConstraint/PhoneNumberConstraint.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/createConstraint/PhoneNumberConstraint.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.createConstraint;
 
 import org.qi4j.api.constraint.Constraint;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/createConstraint/PhoneNumberParameterViolationConcern.java b/manual/src/main/java/org/qi4j/manual/recipes/createConstraint/PhoneNumberParameterViolationConcern.java
index 6f12f7b..1303b08 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/createConstraint/PhoneNumberParameterViolationConcern.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/createConstraint/PhoneNumberParameterViolationConcern.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.createConstraint;
 
 import java.util.Collection;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/createEntity/Accident.java b/manual/src/main/java/org/qi4j/manual/recipes/createEntity/Accident.java
index 8276510..606e396 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/createEntity/Accident.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/createEntity/Accident.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.createEntity;
 
 import org.qi4j.api.property.Property;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/createEntity/AccidentValue.java b/manual/src/main/java/org/qi4j/manual/recipes/createEntity/AccidentValue.java
index ba19ba9..5928630 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/createEntity/AccidentValue.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/createEntity/AccidentValue.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.createEntity;
 
 import org.qi4j.api.value.ValueComposite;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/createEntity/Car.java b/manual/src/main/java/org/qi4j/manual/recipes/createEntity/Car.java
index 908e8a0..72cc30d 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/createEntity/Car.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/createEntity/Car.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.createEntity;
 
 import org.qi4j.api.association.Association;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/createEntity/CarEntity.java b/manual/src/main/java/org/qi4j/manual/recipes/createEntity/CarEntity.java
index a59d513..fb12239 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/createEntity/CarEntity.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/createEntity/CarEntity.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.createEntity;
 
 import org.qi4j.api.entity.EntityComposite;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/createEntity/CarEntityFactory.java b/manual/src/main/java/org/qi4j/manual/recipes/createEntity/CarEntityFactory.java
index 7d4681b..780e9ff 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/createEntity/CarEntityFactory.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/createEntity/CarEntityFactory.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.createEntity;
 
 // START SNIPPET: carFactory
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/createEntity/CarEntityFactoryMixin.java b/manual/src/main/java/org/qi4j/manual/recipes/createEntity/CarEntityFactoryMixin.java
index a04c4a2..20542b8 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/createEntity/CarEntityFactoryMixin.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/createEntity/CarEntityFactoryMixin.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.createEntity;
 
 import org.qi4j.api.entity.EntityBuilder;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/createEntity/CarEntityFactoryService.java b/manual/src/main/java/org/qi4j/manual/recipes/createEntity/CarEntityFactoryService.java
index 5c46427..68347ed 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/createEntity/CarEntityFactoryService.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/createEntity/CarEntityFactoryService.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.createEntity;
 
 import org.qi4j.api.mixin.Mixins;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/createEntity/Main.java b/manual/src/main/java/org/qi4j/manual/recipes/createEntity/Main.java
index 64806f3..d65efb2 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/createEntity/Main.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/createEntity/Main.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.createEntity;
 
 import org.qi4j.api.structure.Application;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/createEntity/Manufacturer.java b/manual/src/main/java/org/qi4j/manual/recipes/createEntity/Manufacturer.java
index 8e26f8a..c2087ca 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/createEntity/Manufacturer.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/createEntity/Manufacturer.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.createEntity;
 
 import org.qi4j.api.common.UseDefaults;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/createEntity/ManufacturerEntity.java b/manual/src/main/java/org/qi4j/manual/recipes/createEntity/ManufacturerEntity.java
index fceaba1..94b2e1a 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/createEntity/ManufacturerEntity.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/createEntity/ManufacturerEntity.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.createEntity;
 
 import org.qi4j.api.entity.EntityComposite;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/createEntity/ManufacturerRepository.java b/manual/src/main/java/org/qi4j/manual/recipes/createEntity/ManufacturerRepository.java
index ae44f12..2a080f1 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/createEntity/ManufacturerRepository.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/createEntity/ManufacturerRepository.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.createEntity;
 
 // START SNIPPET: repo
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/createEntity/ManufacturerRepositoryMixin.java b/manual/src/main/java/org/qi4j/manual/recipes/createEntity/ManufacturerRepositoryMixin.java
index f593a36..9389e0f 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/createEntity/ManufacturerRepositoryMixin.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/createEntity/ManufacturerRepositoryMixin.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.createEntity;
 
 import org.qi4j.api.injection.scope.Structure;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/createEntity/ManufacturerRepositoryService.java b/manual/src/main/java/org/qi4j/manual/recipes/createEntity/ManufacturerRepositoryService.java
index f51c7d2..31c8d6b 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/createEntity/ManufacturerRepositoryService.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/createEntity/ManufacturerRepositoryService.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.createEntity;
 
 import org.qi4j.api.mixin.Mixins;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/createEntity/MyAssembler.java b/manual/src/main/java/org/qi4j/manual/recipes/createEntity/MyAssembler.java
index 51aa864..fe9a0bd 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/createEntity/MyAssembler.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/createEntity/MyAssembler.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.createEntity;
 
 import org.qi4j.api.common.Visibility;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/io/Docs.java b/manual/src/main/java/org/qi4j/manual/recipes/io/Docs.java
index 2fb2746..71a21aa 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/io/Docs.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/io/Docs.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.io;
 
 import java.io.File;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/properties/Book.java b/manual/src/main/java/org/qi4j/manual/recipes/properties/Book.java
index cee6d00..81fba20 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/properties/Book.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/properties/Book.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.properties;
 
 import org.qi4j.api.property.Immutable;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/properties/BookFactory.java b/manual/src/main/java/org/qi4j/manual/recipes/properties/BookFactory.java
index 7c94b40..527ab8a 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/properties/BookFactory.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/properties/BookFactory.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.properties;
 
 import org.qi4j.api.composite.TransientBuilder;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/properties/SwingInfo.java b/manual/src/main/java/org/qi4j/manual/recipes/properties/SwingInfo.java
index 1e11bcb..0782adf 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/properties/SwingInfo.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/properties/SwingInfo.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.properties;
 
 import java.awt.Rectangle;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/properties/SwingPanel.java b/manual/src/main/java/org/qi4j/manual/recipes/properties/SwingPanel.java
index d6f5b7c..9736d11 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/properties/SwingPanel.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/properties/SwingPanel.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.properties;
 
 import java.awt.Rectangle;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/properties/pojo/Book.java b/manual/src/main/java/org/qi4j/manual/recipes/properties/pojo/Book.java
index 154633a..a394657 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/properties/pojo/Book.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/properties/pojo/Book.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.properties.pojo;
 
 // START SNIPPET: book
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/properties/pojo/MutableBook.java b/manual/src/main/java/org/qi4j/manual/recipes/properties/pojo/MutableBook.java
index 7815012..23a8fa9 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/properties/pojo/MutableBook.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/properties/pojo/MutableBook.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.properties.pojo;
 
 
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/AnyMixinType.java b/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/AnyMixinType.java
index 4e07572..1c7e841 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/AnyMixinType.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/AnyMixinType.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.sideeffects;
 
 import org.qi4j.api.concern.Concerns;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/Confirmable.java b/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/Confirmable.java
index a5d9639..2723472 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/Confirmable.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/Confirmable.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.sideeffects;
 
 public interface Confirmable
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/HasCustomer.java b/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/HasCustomer.java
index 6ec9132..ecfc9b3 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/HasCustomer.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/HasCustomer.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.sideeffects;
 
 public interface HasCustomer
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/HasLineItems.java b/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/HasLineItems.java
index f5522c5..9bd2de1 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/HasLineItems.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/HasLineItems.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.sideeffects;
 
 public interface HasLineItems
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/HasSequenceNumber.java b/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/HasSequenceNumber.java
index d955a6b..cbb53ee 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/HasSequenceNumber.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/HasSequenceNumber.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.sideeffects;
 
 public interface HasSequenceNumber
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/MailNotifySideEffect.java b/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/MailNotifySideEffect.java
index 7700b72..05b6ddd 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/MailNotifySideEffect.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/MailNotifySideEffect.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.sideeffects;
 
 import org.qi4j.api.sideeffect.SideEffectOf;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/MyAnnotation.java b/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/MyAnnotation.java
index 13b2a66..c2664bd 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/MyAnnotation.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/MyAnnotation.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.sideeffects;
 
 public @interface MyAnnotation
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/MyAppliesToFilter.java b/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/MyAppliesToFilter.java
index 6d9966b..f09e4e5 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/MyAppliesToFilter.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/MyAppliesToFilter.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.sideeffects;
 
 import java.lang.reflect.Method;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/MyGenericSideEffect.java b/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/MyGenericSideEffect.java
index d147a61..89432d5 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/MyGenericSideEffect.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/MyGenericSideEffect.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.sideeffects;
 
 import java.lang.reflect.Method;
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/Order.java b/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/Order.java
index 3e326b6..3624835 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/Order.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/Order.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.sideeffects;
 
 public interface Order
diff --git a/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/OrderEntity.java b/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/OrderEntity.java
index 5b8ce85..8875ff0 100644
--- a/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/OrderEntity.java
+++ b/manual/src/main/java/org/qi4j/manual/recipes/sideeffects/OrderEntity.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.recipes.sideeffects;
 
 import org.qi4j.api.entity.EntityComposite;
diff --git a/manual/src/main/java/org/qi4j/manual/travel/ExpediaService.properties b/manual/src/main/java/org/qi4j/manual/travel/ExpediaService.properties
index 1fcbc5f..5e00430 100644
--- a/manual/src/main/java/org/qi4j/manual/travel/ExpediaService.properties
+++ b/manual/src/main/java/org/qi4j/manual/travel/ExpediaService.properties
@@ -1,3 +1,18 @@
+# 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.
+
 #// START SNIPPET: params
 # Hostname to the TravelPlan service
 hostName=expedia.hedhman.org
diff --git a/manual/src/main/java/org/qi4j/manual/travel/Main.java b/manual/src/main/java/org/qi4j/manual/travel/Main.java
index 3c8b499..167b286 100644
--- a/manual/src/main/java/org/qi4j/manual/travel/Main.java
+++ b/manual/src/main/java/org/qi4j/manual/travel/Main.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.travel;
 
 import org.qi4j.bootstrap.AssemblyException;
diff --git a/manual/src/main/java/org/qi4j/manual/travel/OrbitzService.properties b/manual/src/main/java/org/qi4j/manual/travel/OrbitzService.properties
index a8433c1..5f410f8 100644
--- a/manual/src/main/java/org/qi4j/manual/travel/OrbitzService.properties
+++ b/manual/src/main/java/org/qi4j/manual/travel/OrbitzService.properties
@@ -1,3 +1,18 @@
+# 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.
+
 #// START SNIPPET: params
 # Hostname to the TravelPlan service
 hostName=orbitz.hedhman.org
diff --git a/manual/src/main/java/org/qi4j/manual/travel/TravelPlan.java b/manual/src/main/java/org/qi4j/manual/travel/TravelPlan.java
index 8bd13eb..6067b82 100644
--- a/manual/src/main/java/org/qi4j/manual/travel/TravelPlan.java
+++ b/manual/src/main/java/org/qi4j/manual/travel/TravelPlan.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.travel;
 
 // START SNIPPET: service
diff --git a/manual/src/main/java/org/qi4j/manual/travel/TravelPlanConfiguration.java b/manual/src/main/java/org/qi4j/manual/travel/TravelPlanConfiguration.java
index 5ab1abd..55a7cc9 100644
--- a/manual/src/main/java/org/qi4j/manual/travel/TravelPlanConfiguration.java
+++ b/manual/src/main/java/org/qi4j/manual/travel/TravelPlanConfiguration.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.travel;
 
 import org.qi4j.api.property.Property;
diff --git a/manual/src/main/java/org/qi4j/manual/travel/TravelPlanMixin.java b/manual/src/main/java/org/qi4j/manual/travel/TravelPlanMixin.java
index 7887948..f5bba98 100644
--- a/manual/src/main/java/org/qi4j/manual/travel/TravelPlanMixin.java
+++ b/manual/src/main/java/org/qi4j/manual/travel/TravelPlanMixin.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.manual.travel;
 
 import org.qi4j.api.injection.scope.This;
diff --git a/manual/src/main/java/org/qi4j/manual/travel/TravelPlanService.java b/manual/src/main/java/org/qi4j/manual/travel/TravelPlanService.java
index d3332bc..be772ae 100644
--- a/manual/src/main/java/org/qi4j/manual/travel/TravelPlanService.java
+++ b/manual/src/main/java/org/qi4j/manual/travel/TravelPlanService.java
@@ -1,3 +1,21 @@
+/*
+ * 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.
+ */
 // START SNIPPET: serviceComposite
 // The package is relevant to the Initial Values discussed later.
 package org.qi4j.manual.travel;
diff --git a/manual/src/main/java/org/qi4j/manual/travel/TravelPlanService.properties b/manual/src/main/java/org/qi4j/manual/travel/TravelPlanService.properties
index 90ddaac..0a2b9d0 100644
--- a/manual/src/main/java/org/qi4j/manual/travel/TravelPlanService.properties
+++ b/manual/src/main/java/org/qi4j/manual/travel/TravelPlanService.properties
@@ -1,3 +1,18 @@
+# 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.
+
 #// START SNIPPET: params
 # Hostname to the TravelPlan service
 hostName=niclas.hedhman.org
diff --git a/manual/src/resources/css/progressive-enhancement.css b/manual/src/resources/css/progressive-enhancement.css
index baf0253..590ec6d 100644
--- a/manual/src/resources/css/progressive-enhancement.css
+++ b/manual/src/resources/css/progressive-enhancement.css
@@ -1,3 +1,21 @@
+/*
+ * 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.
+ */
 
 /**
  * Continuous Integration - Jenkins Widget
diff --git a/manual/src/resources/images/logo-standard.png b/manual/src/resources/images/logo-standard.png
index c405d34..c8b255f 100644
--- a/manual/src/resources/images/logo-standard.png
+++ b/manual/src/resources/images/logo-standard.png
Binary files differ
diff --git a/manual/src/resources/js/progressive-enhancement.js b/manual/src/resources/js/progressive-enhancement.js
index 897e543..bbf6f86 100644
--- a/manual/src/resources/js/progressive-enhancement.js
+++ b/manual/src/resources/js/progressive-enhancement.js
@@ -1,3 +1,21 @@
+/*
+ * 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.
+ */
 
 
 /**
@@ -5,6 +23,8 @@
  */
 $( document ).ready( function($){
 
+    var atHome = window.location.hostname == "zest.apache.org"
+
     /**
      * Glossary.
      */
@@ -25,9 +45,7 @@
                 var dt = target.parent();
                 var dd = dt.next();
                 // Scroll
-                $.scrollTo( dt, 200, {
-                    'offset': -96
-                });
+                $.scrollTo( dt, 200, { 'offset': -96 });
                 // Highlight
                 dd.fadeOut(50).fadeIn(200);
             }
@@ -70,13 +88,13 @@
             $( "div.logo" ).append( switcher_html );
             var toURL = function( displayName )
             {
-                if( window.location.hostname == "qi4j.org" || window.location.hostname == "www.qi4j.org" )
+                if( atHome )
                 {
                     return "../" + versions[ displayName ];
                 }
                 else
                 {
-                    return "http://qi4j.org/" + versions[ displayName ];
+                    return "https://zest.apache.org/java/" + versions[ displayName ];
                 }
             }
             $( "div.logo select" ).change( function()
@@ -90,20 +108,62 @@
         }
     } );
 
-    // Add separator space between tutorials series
+    // Title links to their own anchor
+    $( "body > div.section .title" ).each( function( idx, title ) {
+        var $title = $( title );
+        var id = $title.find( 'a' ).attr( 'id' );
+        if( id ) {
+            $title.click( function() {
+                window.location.hash = id;
+            } );
+        }
+    } );
+
+    // Scroll down a bit on hash change so that target is not hidden under the floating top menu
+    function scrollToHash( hash ) {
+        if( hash ) {
+            var $target = $( hash );
+            if( $target ) {
+                setTimeout( function() { $.scrollTo( $target, 100, { 'offset': -96 }) }, 50 );
+            }
+        }
+    };
+    $( window ).bind( 'hashchange', function() {
+        scrollToHash( window.location.hash );
+    });
+    scrollToHash( window.location.hash );
+
+    // Enhance left nav
     $( "div.sub-nav div.toc dt" ).each( function( idx, dt ) {
         var $dt = $( dt );
         var item = $dt.find( "span.section:first-child" ).text().trim();
         switch( item )
         {
-            case "Qi4j in 2 minutes":
-                $dt.attr( "style", "margin-top: 24px" );
-                break;
-            case "Qi4j in 2 hours":
+            // Overview everywhere
+            case "Overview":
+                $dt.attr( "style", "margin-bottom: 24px" );
+            // Tutorials
+            case "Zest\u2122 in 2 hours":
             case "Leverage Properties":
             case "Use I/O API":
                 $dt.attr( "style", "margin-bottom: 24px" );
                 break;
+            // JavaDocs
+            case "JavaDocs":
+                $dt.hide();
+                break;
+            // Libraries
+            case "Alarms":
+                $dt.attr( "style", "margin-top: 24px" );
+                break;            
+            // Extensions
+            case "Ehcache Cache":
+            case "Memory EntityStore":
+            case "ElasticSearch Index/Query":
+            case "Yammer Metrics":
+            case "Migration":
+                $dt.attr( "style", "margin-top: 24px" );
+                break;            
         }
     } );
 
diff --git a/manual/src/resources/schemas/2008/dev-status/1/dev-status.xsd b/manual/src/resources/schemas/2008/dev-status/1/dev-status.xsd
index 537ae86..1174fdf 100644
--- a/manual/src/resources/schemas/2008/dev-status/1/dev-status.xsd
+++ b/manual/src/resources/schemas/2008/dev-status/1/dev-status.xsd
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
 <xs:schema attributeFormDefault="unqualified"
            elementFormDefault="qualified"
            targetNamespace="http://www.qi4j.org/schemas/2008/dev-status/1"
diff --git a/manual/src/xsl/chunked-basic.xsl b/manual/src/xsl/chunked-basic.xsl
index ce44202..0b60821 100644
--- a/manual/src/xsl/chunked-basic.xsl
+++ b/manual/src/xsl/chunked-basic.xsl
@@ -1,4 +1,20 @@
 <!--
+  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.
+-->
+<!--
   Generates chunked XHTML documents from DocBook XML source using DocBook XSL
   stylesheets.
 
diff --git a/manual/src/xsl/chunked-offline.xsl b/manual/src/xsl/chunked-offline.xsl
index 75683a0..4459ba2 100644
--- a/manual/src/xsl/chunked-offline.xsl
+++ b/manual/src/xsl/chunked-offline.xsl
@@ -1,4 +1,20 @@
 <!--
+  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.
+-->
+<!--
   Generates chunked XHTML documents from DocBook XML source using DocBook XSL
   stylesheets.
 
diff --git a/manual/src/xsl/common.xsl b/manual/src/xsl/common.xsl
index 34c0b55..bce356d 100644
--- a/manual/src/xsl/common.xsl
+++ b/manual/src/xsl/common.xsl
@@ -1,4 +1,20 @@
 <!--
+  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.
+-->
+<!--
   Inlcuded in xhtml.xsl, xhtml.chunked.xsl, htmlhelp.xsl.
   Contains common XSL stylesheets parameters.
   Output documents styled by docbook.css.
diff --git a/manual/src/xsl/disqus-footer.xsl b/manual/src/xsl/disqus-footer.xsl
index ff76b61..c5695db 100644
--- a/manual/src/xsl/disqus-footer.xsl
+++ b/manual/src/xsl/disqus-footer.xsl
@@ -1,3 +1,19 @@
+<!--
+  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.
+-->
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 
   <xsl:template name="user.footer.content">
@@ -106,7 +122,7 @@
 
 // GA
   var _gaq = _gaq || [];
-  _gaq.push(['_setAccount', 'UA-3118496-1']);
+  _gaq.push(['_setAccount', 'UA-62007352-1']);
   _gaq.push(['_trackPageview']);
 
   (function() {
diff --git a/manual/src/xsl/fo.xsl b/manual/src/xsl/fo.xsl
index 17a7b88..d125c94 100644
--- a/manual/src/xsl/fo.xsl
+++ b/manual/src/xsl/fo.xsl
@@ -1,4 +1,20 @@
 <!--
+  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.
+-->
+<!--
   Generates single FO document from DocBook XML source using DocBook XSL
   stylesheets.
 
diff --git a/manual/src/xsl/footer.xsl b/manual/src/xsl/footer.xsl
index faf6dfc..2e6d6e0 100644
--- a/manual/src/xsl/footer.xsl
+++ b/manual/src/xsl/footer.xsl
@@ -1,3 +1,19 @@
+<!--
+  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.
+-->
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 
   <xsl:template name="user.footer.content">
@@ -5,7 +21,7 @@
 <![CDATA[
  <script type="text/javascript">
   var _gaq = _gaq || [];
-  _gaq.push(['_setAccount', 'UA-3118496-1']);
+  _gaq.push(['_setAccount', 'UA-62007352-1']);
   _gaq.push(['_trackPageview']);
 
   (function() {
diff --git a/manual/src/xsl/head-offline.xsl b/manual/src/xsl/head-offline.xsl
index f5d11fa..4e8a120 100644
--- a/manual/src/xsl/head-offline.xsl
+++ b/manual/src/xsl/head-offline.xsl
@@ -1,3 +1,19 @@
+<!--
+  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.
+-->
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 
   <xsl:template name="user.head.content">
diff --git a/manual/src/xsl/html-params.xsl b/manual/src/xsl/html-params.xsl
index 102d7ea..970df0a 100644
--- a/manual/src/xsl/html-params.xsl
+++ b/manual/src/xsl/html-params.xsl
@@ -1,3 +1,19 @@
+<!--
+  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.
+-->
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                 version="1.0">
 
diff --git a/manual/src/xsl/offline-footer.xsl b/manual/src/xsl/offline-footer.xsl
index 6e5bcc3..d810632 100644
--- a/manual/src/xsl/offline-footer.xsl
+++ b/manual/src/xsl/offline-footer.xsl
@@ -1,3 +1,19 @@
+<!--
+  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.
+-->
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 
   <xsl:template name="user.footer.content">
diff --git a/manual/src/xsl/syntaxhighlight.xsl b/manual/src/xsl/syntaxhighlight.xsl
index 3a845af..c62013f 100644
--- a/manual/src/xsl/syntaxhighlight.xsl
+++ b/manual/src/xsl/syntaxhighlight.xsl
@@ -1,3 +1,19 @@
+<!--
+  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.
+-->
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 
   <xsl:template match="*/programlisting" mode="class.value">
diff --git a/manual/src/xsl/text.xsl b/manual/src/xsl/text.xsl
index 98ece6b..52e0266 100644
--- a/manual/src/xsl/text.xsl
+++ b/manual/src/xsl/text.xsl
@@ -1,3 +1,19 @@
+<!--
+  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.
+-->
 <?xml version="1.0"?>
 <!--
   Used by AsciiDoc a2x(1) for w3m(1) based text generation.
diff --git a/manual/src/xsl/xhtml.xsl b/manual/src/xsl/xhtml.xsl
index b7dfeaa..294564d 100644
--- a/manual/src/xsl/xhtml.xsl
+++ b/manual/src/xsl/xhtml.xsl
@@ -1,4 +1,20 @@
 <!--
+  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.
+-->
+<!--
   Generates single XHTML document from DocBook XML source using DocBook XSL
   stylesheets.
 
diff --git a/maven-compat.gradle b/maven-compat.gradle
index 82087f6..0387818 100644
--- a/maven-compat.gradle
+++ b/maven-compat.gradle
@@ -1,225 +1,282 @@
-apply plugin: 'maven'
+/*
+ * 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.
+ */
 
-pom {
+// See http://maven.apache.org/pom/asf/
 
-  project {
-    url 'http://www.qi4j.org'
-    organization {
-      name 'Qi4j Community'
-      url 'http://www.qi4j.org'
-    }
-    inceptionYear '2007'
-    issueManagement {
-      system 'jira'
-      url 'http://team.ops4j.org/browse/QI'
-    }
-    scm {
-      url "http://github.com/Qi4j/qi4j-sdk"
-      connection "scm:git:http://github.com/Qi4j/qi4j-sdk.git"
-      developerConnection "scm:git:git@github.com:Qi4j/qi4j-sdk.git"
-    }
-    licenses {
-      license {
-        name 'Apache License version 2.0'
-        url 'http://www.apache.org/licenses/LICENSE-2.0'
+uploadArchives {
+  repositories.mavenDeployer {
+
+    pom {
+
+      project {
+        url 'https://zest.apache.org/'
+        organization {
+          name 'The Apache Software Foundation'
+          url 'https://apache.org/'
+        }
+        inceptionYear '2007'
+        issueManagement {
+          system 'jira'
+          url 'https://issues.apache.org/jira/browse/ZEST'
+        }
+        scm {
+          url "https://github.com/apache/zest-java"
+          connection "scm:git:https://git-wip-us.apache.org/repos/asf/zest-java.git"
+          developerConnection "scm:git:https://git-wip-us.apache.org/repos/asf/zest-java.git"
+        }
+        licenses {
+          license {
+            name 'Apache License, version 2.0.'
+            url 'http://www.apache.org/licenses/LICENSE-2.0'
+          }
+        }
+        mailingLists {
+          mailingList {
+            name 'Users List'
+            subscribe 'users-subscribe@zest.apache.org'
+            unsubscribe 'users-unsubscribe@zest.apache.org'
+            post 'users@zest.apache.org'
+            archive 'https://mail-archives.apache.org/mod_mbox/zest-users/'
+            otherArchives {
+              otherArchive 'https://www.apache.org/foundation/mailinglists.html#archives'
+            }
+          }
+          mailingList {
+            name 'Development List'
+            subscribe 'dev-subscribe@zest.apache.org'
+            unsubscribe 'dev-unsubscribe@zest.apache.org'
+            post 'dev@zest.apache.org'
+            archive 'https://mail-archives.apache.org/mod_mbox/zest-dev/'
+            otherArchives {
+              otherArchive 'https://www.apache.org/foundation/mailinglists.html#archives'
+            }
+          }
+          mailingList {
+            name 'Commits List'
+            subscribe 'commits-subscribe@zest.apache.org'
+            unsubscribe 'commits-unsubscribe@zest.apache.org'
+            post 'commits@zest.apache.org'
+            archive 'https://mail-archives.apache.org/mod_mbox/zest-commits/'
+            otherArchives {
+              otherArchive 'https://www.apache.org/foundation/mailinglists.html#archives'
+            }
+          }
+        }
+        developers {
+          developer {
+            id 'niclas@hedhman.org'
+            name 'Niclas Hedhman'
+            email 'niclas@hedhman.org'
+            roles {
+              role 'Core Team'
+            }
+            organizationUrl 'http://www.qi4j.org'
+            timezone 'UTC+8'
+          }
+          developer {
+            id 'rickardoberg'
+            name 'Rickard \u00F6berg'
+            email 'rickard.oberg@jayway.se'
+            roles {
+              role 'Core Team'
+            }
+            url 'http://www.neotechnology.com'
+            organization 'Neo Technology AB'
+            organizationUrl 'http://www.neotechnology.com'
+            timezone 'UTC+8'
+          }
+          developer {
+            id 'edward.yakop@gmail.com'
+            name 'Edward Yakop'
+            email 'efy@codedragons.com'
+            roles {
+              role 'Core Team'
+            }
+            organizationUrl 'http://www.qi4j.org'
+            timezone 'UTC+8'
+          }
+          developer {
+            id 'adreghiciu@gmail.com'
+            name 'Alin Dreghiciu'
+            email 'adreghiciu@codedragons.com'
+            roles {
+              role 'Core Team'
+            }
+            organizationUrl 'http://www.qi4j.org'
+            timezone 'UTC+2'
+          }
+          developer {
+            id 'mesirii'
+            name 'Michael Hunger'
+            email 'qi4j@jexp.de'
+            roles {
+              role 'Core Team'
+            }
+            timezone 'CET'
+          }
+
+          developer {
+            id "muhdkamil"
+            name "Muhd Kamil bin Mohd Baki"
+            roles {
+              role 'Platform Team'
+            }
+            timezone "UTC+8"
+          }
+
+          developer {
+            id "ops4j@leangen.net"
+            name "David Leangen"
+            organization "Bioscene"
+            email "ops4j@leangen.net"
+            roles {
+              role 'Platform Team'
+            }
+            timezone "UTC+9"
+          }
+
+          developer {
+            id "sonny.gill@jayway.net"
+            name "Sonny Gill"
+            email "sonny.public@gmail.com"
+            roles {
+              role 'Community Team'
+            }
+            timezone "UTC+8"
+          }
+
+          developer {
+            id "taowen"
+            name "Tao Wen"
+            organization ""
+            email "taowen@gmail.com"
+            roles {
+              role 'Community Team'
+            }
+            timezone "UTC+8"
+          }
+
+          developer {
+            id "thobe"
+            name "Tobias Ivarsson"
+            email "tobias@neotechnology.com"
+            url "http://www.neotechnology.com"
+            organization "NeoTechnology"
+            organizationUrl "http://www.neotechnology.com"
+            roles {
+              role "Platform Team"
+            }
+            timezone "CET"
+          }
+
+          developer {
+            id "boon"
+            name "Lan Boon Ping"
+            email "boonping81@gmail.com"
+            roles {
+              role 'Platform Team'
+            }
+            timezone "UTC+8"
+          }
+
+          developer {
+            id "jan.kronquist@gmail.com"
+            name "Jan Kronquist"
+            email "jan.kronquist@gmail.com"
+            organization "Jayway"
+            roles {
+              role 'Platform Team'
+            }
+            timezone "CET"
+          }
+
+          developer {
+            id "nmwael"
+            name "Nino Saturnino Martinez Vazquez Wael"
+            roles {
+              role 'Platform Team'
+            }
+            timezone "CET"
+          }
+
+          developer {
+            id "peter@neubauer.se"
+            name "Peter Neubauer"
+            email "peter@neubauer.se"
+            roles {
+              role 'Platform Team'
+            }
+            timezone "CET"
+          }
+
+          developer {
+            id "rwallace"
+            name "Richard Wallace"
+            email "rwallace@thewallacepack.net"
+            roles {
+              role 'Platform Team'
+            }
+            timezone "UTC-7"
+          }
+
+          developer {
+            id "siannyhalim@gmail.com"
+            name "Sianny Halim"
+            email "siannyhalim@gmail.com"
+            roles {
+              role 'Platform Team'
+            }
+            timezone "UTC+8"
+          }
+
+          developer {
+            id "paul@nosphere.org"
+            name "Paul Merlin"
+            email "paul@nosphere.org"
+            roles {
+              role 'Core Team'
+            }
+            timezone "CET"
+          }
+
+          developer {
+            id "stas.dev+qi4j@gmail.com"
+            name "Stanislav Muhametsin"
+            email "stas.dev+qi4j@gmail.com"
+            roles {
+              role 'Platform Team'
+            }
+            timezone "UTC+2"
+          }
+
+          developer {
+            id "tonny"
+            name "Tonny Kohar"
+            roles {
+              role "Community Team"
+            }
+            email "tonny.kohar@gmail.com"
+            timezone "UTC+7"
+          }
+        }
       }
     }
-    developers {
-      developer {
-        id 'niclas@hedhman.org'
-        name 'Niclas Hedhman'
-        email 'niclas@hedhman.org'
-        roles {
-          role 'Core Team'
-        }
-        organizationUrl 'http://www.qi4j.org'
-        timezone 'UTC+8'
-      }
-      developer {
-        id 'rickardoberg'
-        name 'Rickard \u00F6berg'
-        email 'rickard.oberg@jayway.se'
-        roles {
-          role 'Core Team'
-        }
-        url 'http://www.neotechnology.com'
-        organization 'Neo Technology AB'
-        organizationUrl 'http://www.neotechnology.com'
-        timezone 'UTC+8'
-      }
-      developer {
-        id 'edward.yakop@gmail.com'
-        name 'Edward Yakop'
-        email 'efy@codedragons.com'
-        roles {
-          role 'Core Team'
-        }
-        organizationUrl 'http://www.qi4j.org'
-        timezone 'UTC+8'
-      }
-      developer {
-        id 'adreghiciu@gmail.com'
-        name 'Alin Dreghiciu'
-        email 'adreghiciu@codedragons.com'
-        roles {
-          role 'Core Team'
-        }
-        organizationUrl 'http://www.qi4j.org'
-        timezone 'UTC+2'
-      }
-      developer {
-        id 'mesirii'
-        name 'Michael Hunger'
-        email 'qi4j@jexp.de'
-        roles {
-          role 'Core Team'
-        }
-        timezone 'CET'
-      }
 
-      developer {
-        id "muhdkamil"
-        name "Muhd Kamil bin Mohd Baki"
-        roles {
-          role 'Platform Team'
-        }
-        timezone "UTC+8"
-      }
-
-      developer {
-        id "ops4j@leangen.net"
-        name "David Leangen"
-        organization "Bioscene"
-        email "ops4j@leangen.net"
-        roles {
-          role 'Platform Team'
-        }
-        timezone "UTC+9"
-      }
-
-      developer {
-        id "sonny.gill@jayway.net"
-        name "Sonny Gill"
-        email "sonny.public@gmail.com"
-        roles {
-          role 'Community Team'
-        }
-        timezone "UTC+8"
-      }
-
-      developer {
-        id "taowen"
-        name "Tao Wen"
-        organization ""
-        email "taowen@gmail.com"
-        roles {
-          role 'Community Team'
-        }
-        timezone "UTC+8"
-      }
-
-      developer {
-        id "thobe"
-        name "Tobias Ivarsson"
-        email "tobias@neotechnology.com"
-        url "http://www.neotechnology.com"
-        organization "NeoTechnology"
-        organizationUrl "http://www.neotechnology.com"
-        roles {
-          role "Platform Team"
-        }
-        timezone "CET"
-      }
-
-      developer {
-        id "boon"
-        name "Lan Boon Ping"
-        email "boonping81@gmail.com"
-        roles {
-          role 'Platform Team'
-        }
-        timezone "UTC+8"
-      }
-
-      developer {
-        id "jan.kronquist@gmail.com"
-        name "Jan Kronquist"
-        email "jan.kronquist@gmail.com"
-        organization "Jayway"
-        roles {
-          role 'Platform Team'
-        }
-        timezone "CET"
-      }
-
-      developer {
-        id "nmwael"
-        name "Nino Saturnino Martinez Vazquez Wael"
-        roles {
-          role 'Platform Team'
-        }
-        timezone "CET"
-      }
-
-      developer {
-        id "peter@neubauer.se"
-        name "Peter Neubauer"
-        email "peter@neubauer.se"
-        roles {
-          role 'Platform Team'
-        }
-        timezone "CET"
-      }
-
-      developer {
-        id "rwallace"
-        name "Richard Wallace"
-        email "rwallace@thewallacepack.net"
-        roles {
-          role 'Platform Team'
-        }
-        timezone "UTC-7"
-      }
-
-      developer {
-        id "siannyhalim@gmail.com"
-        name "Sianny Halim"
-        email "siannyhalim@gmail.com"
-        roles {
-          role 'Platform Team'
-        }
-        timezone "UTC+8"
-      }
-
-      developer {
-        id "paul@nosphere.org"
-        name "Paul Merlin"
-        email "paul@nosphere.org"
-        roles {
-          role 'Core Team'
-        }
-        timezone "CET"
-      }
-
-      developer {
-        id "stas.dev+qi4j@gmail.com"
-        name "Stanislav Muhametsin"
-        email "stas.dev+qi4j@gmail.com"
-        roles {
-          role 'Platform Team'
-        }
-        timezone "UTC+2"
-      }
-
-      developer {
-        id "tonny"
-        name "Tonny Kohar"
-        roles {
-          role "Community Team"
-        }
-        email "tonny.kohar@gmail.com"
-        timezone "UTC+7"
-      }
-    }
-  }
+  }  
 }
diff --git a/samples/dci-cargo/README.txt b/samples/dci-cargo/README.txt
index 24f12fc..b588156 100644
--- a/samples/dci-cargo/README.txt
+++ b/samples/dci-cargo/README.txt
@@ -1,7 +1,7 @@
 DCI Sample
 ==========
 
-This is a port of the DDD Sample application to the DCI paradigm using Java, Qi4j and Wicket.
+This is a port of the DDD Sample application to the DCI paradigm using Java, Zest™ and Wicket.
 
 The code is licensed under the Apache Software License 2.0 and lastest revisions are
 available from https://github.com/dci.
diff --git a/samples/dci-cargo/dcisample_a/build.gradle b/samples/dci-cargo/dcisample_a/build.gradle
index 26c1b9c..63927b4 100644
--- a/samples/dci-cargo/dcisample_a/build.gradle
+++ b/samples/dci-cargo/dcisample_a/build.gradle
@@ -1,27 +1,46 @@
-description = "Sample of how DCI (Data, Context & Interaction) pattern is implemented with Qi4j, for Eric Evans DDD sample."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Sample DCI Cargo - Sample A" }}
+description = "Sample of how DCI (Data, Context & Interaction) pattern is implemented with Apache Zest™, for Eric Evans DDD sample."
+
+jar { manifest { name = "Apache Zest™ Sample DCI Cargo - Sample A" }}
 
 dependencies {
 
-  compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
-  compile(project(":org.qi4j.libraries:org.qi4j.library.constraints"))
-  compile(project(":org.qi4j.libraries:org.qi4j.library.conversion"))
-  compile(project(":org.qi4j.libraries:org.qi4j.library.rdf"))
+  compile project( ':org.qi4j.core:org.qi4j.core.bootstrap' )
+  compile project( ':org.qi4j.libraries:org.qi4j.library.constraints' )
+  compile project( ':org.qi4j.libraries:org.qi4j.library.conversion' )
   compile project( ':org.qi4j.extensions:org.qi4j.extension.valueserialization-orgjson' )
-  compile(project(":org.qi4j.extensions:org.qi4j.extension.indexing-rdf"))
-  compile(project(":org.qi4j.tools:org.qi4j.tool.envisage"))
-  compile(libraries.jetty_webapp)
-  compile(libraries.wicket)
-  compile(libraries.wicket_devutils)
-  compile(libraries.wicket_stateless)
+  compile project( ':org.qi4j.extensions:org.qi4j.extension.indexing-rdf' )
+  compile project( ':org.qi4j.tools:org.qi4j.tool.envisage' )
+  compile libraries.jetty_webapp
+  compile libraries.wicket
+  compile libraries.wicket_devutils
+  compile libraries.wicket_stateless
+  compile libraries.slf4j_api
 
-  runtime(project(":org.qi4j.core:org.qi4j.core.runtime"))
+  runtime project( ':org.qi4j.core:org.qi4j.core.runtime' )
 
-  testCompile(project(":org.qi4j.core:org.qi4j.core.testsupport"))
-  testCompile(libraries.easymock)
+  testCompile project( ':org.qi4j.core:org.qi4j.core.testsupport' )
+  testCompile libraries.easymock
 
-  testRuntime(libraries.logback)
+  testRuntime libraries.logback
 
 }
 
diff --git a/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/pathfinder_a/api/package.html b/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/pathfinder_a/api/package.html
index 321f8e5..01921e5 100644
--- a/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/pathfinder_a/api/package.html
+++ b/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/pathfinder_a/api/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
 <body>
 <p>
diff --git a/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/pathfinder_a/internal/package.html b/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/pathfinder_a/internal/package.html
index 25d165a..3c4f049 100644
--- a/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/pathfinder_a/internal/package.html
+++ b/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/pathfinder_a/internal/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
 <body>
 <p>
diff --git a/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/pathfinder_a/package.html b/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/pathfinder_a/package.html
index 66d6304..af1b144 100644
--- a/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/pathfinder_a/package.html
+++ b/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/pathfinder_a/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
 <body>
 <p>
diff --git a/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/bootstrap/DCISampleApplication_a.java b/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/bootstrap/DCISampleApplication_a.java
index 690261d..292684a 100644
--- a/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/bootstrap/DCISampleApplication_a.java
+++ b/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/bootstrap/DCISampleApplication_a.java
@@ -35,7 +35,7 @@
 /**
  * DCI Sample application instance
  *
- * A Wicket application backed by Qi4j.
+ * A Wicket application backed by Zest.
  */
 public class DCISampleApplication_a
     extends WicketQi4jApplication
diff --git a/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/bootstrap/assembly/Assembler.java b/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/bootstrap/assembly/Assembler.java
index d4dca15..6191377 100644
--- a/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/bootstrap/assembly/Assembler.java
+++ b/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/bootstrap/assembly/Assembler.java
@@ -70,13 +70,13 @@
 import static org.qi4j.api.structure.Application.Mode.development;
 
 /**
- * Qi4j assembly of the DCI Sample application (version A)
+ * Zest assembly of the DCI Sample application (version A)
  *
- * A Qi4j application structure is declared by an assembly that defines which layers and modules
+ * A Zest application structure is declared by an assembly that defines which layers and modules
  * the application has and how they are allowed to depend on each other. Each layer could have it's
  * own assembly file in larger applications (read more at http://qi4j.org/latest/core-bootstrap-assembly.html).
  *
- * The Qi4j assembly doesn't follow a strict 1-1 correlation between the directory hierarchy and
+ * The Zest assembly doesn't follow a strict 1-1 correlation between the directory hierarchy and
  * the assembly structures. An example is the Entities:
  *
  * Entities can be promoted to Role Players when they are needed to play a Role in a Context.
@@ -88,7 +88,7 @@
  * Context layer. Note that there are still no "physical" upward dependencies from the Entities to
  * layers above.
  *
- * So dependency structure layers (ie. as shown by Structure101) are not the same as Qi4j layers.
+ * So dependency structure layers (ie. as shown by Structure101) are not the same as Zest layers.
  * See more at http://qi4j.org/latest/core-bootstrap-assembly.html
  *
  * TRY THIS: Run VisualizeApplicationStructure to see a cool visualization of the assembly below!
diff --git a/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/communication/query/BookingQueries.java b/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/communication/query/BookingQueries.java
index d4e5b33..6a047f3 100644
--- a/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/communication/query/BookingQueries.java
+++ b/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/communication/query/BookingQueries.java
@@ -34,7 +34,7 @@
 /**
  * Booking queries
  *
- * This is in a Qi4j composite since we can then conveniently get the routing service injected.
+ * This is in a Zest composite since we can then conveniently get the routing service injected.
  * We could choose to implement all query classes like this too.
  *
  * Used by the communication layer only. Can change according to ui needs.
diff --git a/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/context/shipping/booking/RouteException.java b/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/context/shipping/booking/RouteException.java
index 3a8dba2..3955794 100644
--- a/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/context/shipping/booking/RouteException.java
+++ b/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/context/shipping/booking/RouteException.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.sample.dcicargo.sample_a.context.shipping.booking;
 
 public class RouteException extends RuntimeException
diff --git a/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/infrastructure/WicketQi4jApplication.java b/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/infrastructure/WicketQi4jApplication.java
index 08dba41..20e3700 100644
--- a/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/infrastructure/WicketQi4jApplication.java
+++ b/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/infrastructure/WicketQi4jApplication.java
@@ -46,7 +46,7 @@
 import org.slf4j.LoggerFactory;
 
 /**
- * Base Wicket Web Application containing the Qi4j application.
+ * Base Wicket Web Application containing the Zest application.
  */
 public class WicketQi4jApplication
     extends WebApplication
@@ -75,10 +75,10 @@
     protected EntityToDTOService valueConverter;
 
     /**
-     * Qi4j Assembler
+     * Zest Assembler
      *
      * To let the custom application class (DCISampleApplication_x) focus on starting up the
-     * Wicket environment, I made a convention of having Qi4j Assembler files in an 'assembly'
+     * Wicket environment, I made a convention of having Zest Assembler files in an 'assembly'
      * folder beside the custom application class.
      *
      * There's always only one application file, but we could split the assemblage into several
@@ -104,7 +104,7 @@
         }
         catch( ClassNotFoundException e )
         {
-            throw new Exception( "Couldn't find Qi4j assembler in path '" + assemblerPath + "'" );
+            throw new Exception( "Couldn't find Zest assembler in path '" + assemblerPath + "'" );
         }
     }
 
@@ -141,21 +141,21 @@
     {
         try
         {
-            logger.info( "Starting Qi4j application" );
+            logger.info( "Starting Zest application" );
             Energy4Java qi4j = new Energy4Java();
             qi4jApp = qi4j.newApplication( getAssembler() );
             qi4jApp.activate();
             qi4jModule = qi4jApp.findModule( defaultLayerName(), defaultModuleName() );
 
-            // Qi4j injects @Structure and @Service elements into this application instance
+            // Zest injects @Structure and @Service elements into this application instance
             //qi4jModule.newObject( WicketQi4jApplication.class );
             qi4jModule.injectTo( this );
 
-            logger.info( "Started Qi4j application" );
+            logger.info( "Started Zest application" );
         }
         catch( Exception e )
         {
-            logger.error( "Could not start Qi4j application." );
+            logger.error( "Could not start Zest application." );
             e.printStackTrace();
             System.exit( 100 );
         }
@@ -220,7 +220,7 @@
         } );
     }
 
-    // Since Qi4j can only add concrete classes in the assembly, we need to implement a (dummy) getHomePage()
+    // Since Zest can only add concrete classes in the assembly, we need to implement a (dummy) getHomePage()
     // method here. Override in wicket application class with a real returned page class.
     @Override
     public Class<? extends Page> getHomePage()
@@ -238,7 +238,7 @@
 
         try
         {
-            logger.info( "Passivating Qi4j application" );
+            logger.info( "Passivating Zest application" );
             qi4jApp.passivate();
         }
         catch( Exception e )
diff --git a/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/infrastructure/model/EntityModel.java b/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/infrastructure/model/EntityModel.java
index 0b84428..0a9f138 100644
--- a/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/infrastructure/model/EntityModel.java
+++ b/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/infrastructure/model/EntityModel.java
@@ -22,6 +22,7 @@
 import org.qi4j.api.entity.EntityComposite;
 import org.qi4j.api.entity.EntityReference;
 import org.qi4j.api.unitofwork.NoSuchEntityException;
+import org.qi4j.api.usecase.Usecase;
 import org.qi4j.sample.dcicargo.sample_a.infrastructure.conversion.DTO;
 
 /**
@@ -69,7 +70,8 @@
         U entity = module.currentUnitOfWork().get( entityClass, identity );
         if( entity == null )
         {
-            throw new NoSuchEntityException( EntityReference.parseEntityReference( identity ), entityClass );
+            Usecase usecase = module.currentUnitOfWork().usecase();
+            throw new NoSuchEntityException( EntityReference.parseEntityReference( identity ), entityClass, usecase );
         }
         return entity;
     }
diff --git a/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/infrastructure/model/QueryModel.java b/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/infrastructure/model/QueryModel.java
index cb0639d..9f374ac 100644
--- a/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/infrastructure/model/QueryModel.java
+++ b/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/infrastructure/model/QueryModel.java
@@ -23,7 +23,7 @@
 import org.qi4j.api.query.Query;
 
 /**
- * Callback Wicket model that holds a Qi4j Query object that can be called when needed to
+ * Callback Wicket model that holds a Zest Query object that can be called when needed to
  * retrieve fresh data.
  */
 public abstract class QueryModel<T, U extends EntityComposite>
@@ -53,7 +53,7 @@
         return dtoList;
     }
 
-    // Callback to retrieve the (unserializable) Qi4j Query object
+    // Callback to retrieve the (unserializable) Zest Query object
     public abstract Query<U> getQuery();
 
     public T getValue( U entity )
diff --git a/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/infrastructure/model/ReadOnlyModel.java b/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/infrastructure/model/ReadOnlyModel.java
index 7e76f0c..f357356 100644
--- a/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/infrastructure/model/ReadOnlyModel.java
+++ b/samples/dci-cargo/dcisample_a/src/main/java/org/qi4j/sample/dcicargo/sample_a/infrastructure/model/ReadOnlyModel.java
@@ -23,7 +23,7 @@
 import org.qi4j.sample.dcicargo.sample_a.infrastructure.conversion.EntityToDTOService;
 
 /**
- * Abstract base model for Wicket model objects taking Qi4j objects.
+ * Abstract base model for Wicket model objects taking Zest objects.
  */
 public abstract class ReadOnlyModel<T>
     implements IModel<T>
diff --git a/samples/dci-cargo/dcisample_a/src/main/resources/log4j.properties b/samples/dci-cargo/dcisample_a/src/main/resources/log4j.properties
index 04dca53..02c5759 100644
--- a/samples/dci-cargo/dcisample_a/src/main/resources/log4j.properties
+++ b/samples/dci-cargo/dcisample_a/src/main/resources/log4j.properties
@@ -1,3 +1,18 @@
+# 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.
+
 log4j.appender.Stdout=org.apache.log4j.ConsoleAppender
 log4j.appender.Stdout.layout=org.apache.log4j.PatternLayout
 log4j.appender.Stdout.layout.conversionPattern=%-5p - %-26.26c{1} - %m\n
diff --git a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/BasePage.html b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/BasePage.html
index 35bad9f..87ec4f6 100644
--- a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/BasePage.html
+++ b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/BasePage.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <head>
     <title>DCI sample (version A)</title>
     <link href="css/style.css" rel="stylesheet" type="text/css"/>
@@ -39,11 +55,11 @@
                     <a href="http://tech.groups.yahoo.com/group/domaindrivendesign/" target="_blank">Forum</a>
                 </td>
                 <td valign="top">
-                    <a href="http://www.qi4j.org/" target="_blank">Website</a><br>
-                    <a href="http://old.nabble.com/Qi4j-dev-f33137.html" target="_blank">Forum</a><br>
-                    <a href="http://www.qi4j.org/qi4j/downloads.html" target="_blank">Download</a><br>
-                    <a href="http://repository.ops4j.org/maven2/org/qi4j/" target="_blank">Maven</a><br>
-                    <a href="https://github.com/qi4j" target="_blank">Github</a>
+                    <a href="https://zest.apache.org/" target="_blank">Website</a><br>
+                    <a href="https://zest.apache.org/community/get_help.html" target="_blank">Forum</a><br>
+                    <a href="https://zest.apache.org/download.html" target="_blank">Download</a><br>
+                    <a href="https://zest.apache.org/java/latest/howto-depend-on-zest.html" target="_blank">Maven</a><br>
+                    <a href="https://github.com/apache/zest-java" target="_blank">Github</a>
                 </td>
                 <td valign="top">
                     <a href="http://wicket.apache.org/" target="_blank">Website</a><br>
diff --git a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/booking/BookNewCargoPage.html b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/booking/BookNewCargoPage.html
index 3a9a601..80f9dc3 100644
--- a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/booking/BookNewCargoPage.html
+++ b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/booking/BookNewCargoPage.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <wicket:extend>
     <div class="headerMenu">
         Book new cargo
diff --git a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/booking/BookingBasePage.html b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/booking/BookingBasePage.html
index 8eee760..0af9860 100644
--- a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/booking/BookingBasePage.html
+++ b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/booking/BookingBasePage.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <wicket:extend>
     <div id="box">
         <wicket:child/>
diff --git a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/booking/CargoDetailsPage.html b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/booking/CargoDetailsPage.html
index c6e3ffa..8b3b1b2 100644
--- a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/booking/CargoDetailsPage.html
+++ b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/booking/CargoDetailsPage.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <wicket:extend>
 
     <div wicket:id="prevNext"></div>
diff --git a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/booking/CargoListPage.html b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/booking/CargoListPage.html
index 43ad2d6..850773a 100644
--- a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/booking/CargoListPage.html
+++ b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/booking/CargoListPage.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <wicket:extend>
     <div class="headerMenu">
         List of Cargos
diff --git a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/booking/ChangeDestinationPage.html b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/booking/ChangeDestinationPage.html
index bafa9b5..892722a 100644
--- a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/booking/ChangeDestinationPage.html
+++ b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/booking/ChangeDestinationPage.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <wicket:extend>
 
     <div class="headerMenu">
diff --git a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/booking/RouteCargoPage.html b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/booking/RouteCargoPage.html
index 532a756..7561f1f 100644
--- a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/booking/RouteCargoPage.html
+++ b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/booking/RouteCargoPage.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <wicket:extend>
 
     <div class="headerMenu">
diff --git a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/booking/RoutePanel.html b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/booking/RoutePanel.html
index 8b4f237..f7b8d82 100644
--- a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/booking/RoutePanel.html
+++ b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/booking/RoutePanel.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <wicket:panel>
     <h4 wicket:id="routeHeader"></h4>
     <span wicket:id="routeFeedback"></span>
diff --git a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/handling/RegisterHandlingEventPage.html b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/handling/RegisterHandlingEventPage.html
index a2ac417..537b3b0 100644
--- a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/handling/RegisterHandlingEventPage.html
+++ b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/handling/RegisterHandlingEventPage.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <wicket:extend>
     <div id="box">
 
diff --git a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/handling/RegisterHandlingEventPage.properties b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/handling/RegisterHandlingEventPage.properties
index f1cfef0..d8a7552 100644
--- a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/handling/RegisterHandlingEventPage.properties
+++ b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/handling/RegisterHandlingEventPage.properties
@@ -1,3 +1,18 @@
+# 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.
+
 handlingEvent.UNKNOWN=ERROR: *** UNKNOWN EVENT TYPE ***
 handlingEvent.RECEIVE=Received in ${location}.
 handlingEvent.LOAD=Loaded onto voyage ${voyage} in port ${location}.
diff --git a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/tracking/HandlingHistoryPanel.html b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/tracking/HandlingHistoryPanel.html
index 1be8490..f89e3ae 100644
--- a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/tracking/HandlingHistoryPanel.html
+++ b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/tracking/HandlingHistoryPanel.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <wicket:panel>
     <h4>Handling history</h4>
     <table>
diff --git a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/tracking/HandlingHistoryPanel.properties b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/tracking/HandlingHistoryPanel.properties
index 53ccab1..a92c7cd 100644
--- a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/tracking/HandlingHistoryPanel.properties
+++ b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/tracking/HandlingHistoryPanel.properties
@@ -1,3 +1,18 @@
+# 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.
+
 handlingEvent.UNKNOWN=ERROR: *** UNKNOWN EVENT TYPE ***
 handlingEvent.RECEIVE=Received in ${location}
 handlingEvent.LOAD=Loaded onto voyage ${voyage} in ${location}
diff --git a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/tracking/NextHandlingEventPanel.html b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/tracking/NextHandlingEventPanel.html
index 735e878..e37b8ce 100644
--- a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/tracking/NextHandlingEventPanel.html
+++ b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/tracking/NextHandlingEventPanel.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <wicket:panel>
     <p wicket:id="text" style="font-style:italic;font-weight: bold;"></p>
 </wicket:panel>
diff --git a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/tracking/NextHandlingEventPanel.properties b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/tracking/NextHandlingEventPanel.properties
index 08b0a36..eefa396 100644
--- a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/tracking/NextHandlingEventPanel.properties
+++ b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/tracking/NextHandlingEventPanel.properties
@@ -1,3 +1,18 @@
+# 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.
+
 expectedEvent.UNKNOWN=Next expected activity: Unknown...
 expectedEvent.ROUTE=Next expected activity: Routing of cargo
 expectedEvent.RECEIVE=Next expected activity: Receipt of cargo in ${location}
diff --git a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/tracking/TrackCargoPage.html b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/tracking/TrackCargoPage.html
index 4db767d..26de6b8 100644
--- a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/tracking/TrackCargoPage.html
+++ b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/tracking/TrackCargoPage.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <wicket:extend>
     <div id="box">
 
diff --git a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/tracking/TrackCargoPage.properties b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/tracking/TrackCargoPage.properties
index 6e99171..1f6a51f 100644
--- a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/tracking/TrackCargoPage.properties
+++ b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/communication/web/tracking/TrackCargoPage.properties
@@ -1,3 +1,18 @@
+# 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.
+
 cargoDropDown.null=Track known cargo
 
 eta=Estimated time of arrival in {0}: {1}
diff --git a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/infrastructure/wicket/link/LinkPanel.html b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/infrastructure/wicket/link/LinkPanel.html
index 24c1b55..a628cfb 100644
--- a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/infrastructure/wicket/link/LinkPanel.html
+++ b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/infrastructure/wicket/link/LinkPanel.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <wicket:panel>
 	<a wicket:id="link"><span wicket:id="label"></span></a>
 </wicket:panel>
diff --git a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/infrastructure/wicket/prevnext/PrevNext.html b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/infrastructure/wicket/prevnext/PrevNext.html
index 74e28f9..ca46915 100644
--- a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/infrastructure/wicket/prevnext/PrevNext.html
+++ b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/infrastructure/wicket/prevnext/PrevNext.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <wicket:head>
     <link href="css/prev-next.css" rel="stylesheet" type="text/css"/>
 </wicket:head>
diff --git a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/infrastructure/wicket/tabs/TabsPanel.html b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/infrastructure/wicket/tabs/TabsPanel.html
index 300cf66..7fc034a 100644
--- a/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/infrastructure/wicket/tabs/TabsPanel.html
+++ b/samples/dci-cargo/dcisample_a/src/main/resources/org/qi4j/sample/dcicargo/sample_a/infrastructure/wicket/tabs/TabsPanel.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <wicket:head>
     <link href="css/tabs.css" rel="stylesheet" type="text/css"/>
 </wicket:head>
diff --git a/samples/dci-cargo/dcisample_a/src/main/webapp/WEB-INF/web.xml b/samples/dci-cargo/dcisample_a/src/main/webapp/WEB-INF/web.xml
index ca34183..720a8bf 100644
--- a/samples/dci-cargo/dcisample_a/src/main/webapp/WEB-INF/web.xml
+++ b/samples/dci-cargo/dcisample_a/src/main/webapp/WEB-INF/web.xml
@@ -1,5 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
-
+<!--
+  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.
+-->
 <web-app xmlns="http://java.sun.com/xml/ns/javaee"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
diff --git a/samples/dci-cargo/dcisample_a/src/main/webapp/css/prev-next.css b/samples/dci-cargo/dcisample_a/src/main/webapp/css/prev-next.css
index a05e9e1..d6e85ce 100644
--- a/samples/dci-cargo/dcisample_a/src/main/webapp/css/prev-next.css
+++ b/samples/dci-cargo/dcisample_a/src/main/webapp/css/prev-next.css
@@ -1,3 +1,21 @@
+/*
+ * 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.
+ */
 
 .prevNextIcons {
   /* Modify custom positioning here */
diff --git a/samples/dci-cargo/dcisample_a/src/main/webapp/css/style.css b/samples/dci-cargo/dcisample_a/src/main/webapp/css/style.css
index 52786c1..ec9a49e 100644
--- a/samples/dci-cargo/dcisample_a/src/main/webapp/css/style.css
+++ b/samples/dci-cargo/dcisample_a/src/main/webapp/css/style.css
@@ -1,3 +1,22 @@
+/*
+ * 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.
+ */
+
 body {
     margin: 2em;
     font-family: 'Lucida Sans', 'Helvetica', 'Sans-serif', 'sans', sans-serif;
diff --git a/samples/dci-cargo/dcisample_a/src/main/webapp/css/tabs.css b/samples/dci-cargo/dcisample_a/src/main/webapp/css/tabs.css
index 619f17a..184b9c7 100644
--- a/samples/dci-cargo/dcisample_a/src/main/webapp/css/tabs.css
+++ b/samples/dci-cargo/dcisample_a/src/main/webapp/css/tabs.css
@@ -1,3 +1,22 @@
+/*
+ * 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.
+ */
+
 #tabs {
   margin-top:12px;
   float:left;
diff --git a/samples/dci-cargo/dcisample_b/build.gradle b/samples/dci-cargo/dcisample_b/build.gradle
index ebea1d2..ca9961a 100644
--- a/samples/dci-cargo/dcisample_b/build.gradle
+++ b/samples/dci-cargo/dcisample_b/build.gradle
@@ -1,27 +1,46 @@
-description = "Sample of how DCI (Data, Context & Interaction) pattern is implemented with Qi4j, for Eric Evans DDD sample."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Sample DCI Cargo - Sample B" }}
+description = "Sample of how DCI (Data, Context & Interaction) pattern is implemented with Apache Zest™, for Eric Evans DDD sample."
+
+jar { manifest { name = "Apache Zest™ Sample DCI Cargo - Sample B" }}
 
 dependencies {
 
-  compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
-  compile(project(":org.qi4j.libraries:org.qi4j.library.constraints"))
-  compile(project(":org.qi4j.libraries:org.qi4j.library.conversion"))
-  compile(project(":org.qi4j.libraries:org.qi4j.library.rdf"))
+  compile project( ':org.qi4j.core:org.qi4j.core.bootstrap' )
+  compile project( ':org.qi4j.libraries:org.qi4j.library.constraints' )
+  compile project( ':org.qi4j.libraries:org.qi4j.library.conversion' )
   compile project( ':org.qi4j.extensions:org.qi4j.extension.valueserialization-orgjson' )
-  compile(project(":org.qi4j.extensions:org.qi4j.extension.indexing-rdf"))
-  compile(project(":org.qi4j.tools:org.qi4j.tool.envisage"))
-  compile(libraries.jetty_webapp)
-  compile(libraries.wicket)
-  compile(libraries.wicket_devutils)
-  compile(libraries.wicket_stateless)
+  compile project( ':org.qi4j.extensions:org.qi4j.extension.indexing-rdf' )
+  compile project( ':org.qi4j.tools:org.qi4j.tool.envisage' )
+  compile libraries.jetty_webapp
+  compile libraries.wicket
+  compile libraries.wicket_devutils
+  compile libraries.wicket_stateless
+  compile libraries.slf4j_api
 
-  runtime(project(":org.qi4j.core:org.qi4j.core.runtime"))
+  runtime project( ':org.qi4j.core:org.qi4j.core.runtime' )
 
-  testCompile(project(":org.qi4j.core:org.qi4j.core.testsupport"))
-  testCompile(libraries.easymock)
+  testCompile project( ':org.qi4j.core:org.qi4j.core.testsupport' )
+  testCompile libraries.easymock
 
-  testRuntime(libraries.logback)
+  testRuntime libraries.logback
 
 }
 
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/pathfinder_b/api/package.html b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/pathfinder_b/api/package.html
index 321f8e5..01921e5 100644
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/pathfinder_b/api/package.html
+++ b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/pathfinder_b/api/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
 <body>
 <p>
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/pathfinder_b/internal/GraphDAO.java b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/pathfinder_b/internal/GraphDAO.java
index 15e86ea..f1929d4 100644
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/pathfinder_b/internal/GraphDAO.java
+++ b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/pathfinder_b/internal/GraphDAO.java
@@ -85,10 +85,6 @@
             voyages.add( new TransitPath( transitEdges ) );
         }
 
-        // Output for testing...
-//        for (int i = 0; i < voyages.size(); i++)
-//            System.out.println( i + " " + voyages.get( i ).print() );
-
         return voyages;
     }
 
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/pathfinder_b/internal/GraphTraversalServiceImpl.java b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/pathfinder_b/internal/GraphTraversalServiceImpl.java
index 2c59c53..9db0e44 100644
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/pathfinder_b/internal/GraphTraversalServiceImpl.java
+++ b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/pathfinder_b/internal/GraphTraversalServiceImpl.java
@@ -68,10 +68,6 @@
             {
                 final List<TransitPath> voyages = getShuffledVoyages( dao.voyages() );
 
-                // Output for testing...
-//                for (int i = 0; i < voyages.size(); i++)
-//                    System.out.println( i + " " + voyages.get( i ).print() );
-
                 for( TransitPath voyage : voyages )
                 {
                     if( depth >= voyage.getTransitEdges().size() )
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/pathfinder_b/internal/package.html b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/pathfinder_b/internal/package.html
index 25d165a..3c4f049 100644
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/pathfinder_b/internal/package.html
+++ b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/pathfinder_b/internal/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
 <body>
 <p>
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/pathfinder_b/package.html b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/pathfinder_b/package.html
index 66d6304..af1b144 100644
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/pathfinder_b/package.html
+++ b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/pathfinder_b/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
 <body>
 <p>
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/bootstrap/DCISampleApplication_b.java b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/bootstrap/DCISampleApplication_b.java
index 4e5a36f..3225e5b 100644
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/bootstrap/DCISampleApplication_b.java
+++ b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/bootstrap/DCISampleApplication_b.java
@@ -36,7 +36,7 @@
 /**
  * DCI Sample application instance
  *
- * A Wicket application backed by Qi4j.
+ * A Wicket application backed by Zest.
  */
 public class DCISampleApplication_b
     extends WicketQi4jApplication
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/bootstrap/assembly/Assembler.java b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/bootstrap/assembly/Assembler.java
index ce354db..f1d0776 100644
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/bootstrap/assembly/Assembler.java
+++ b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/bootstrap/assembly/Assembler.java
@@ -72,13 +72,13 @@
 import static org.qi4j.api.structure.Application.Mode.development;
 
 /**
- * Qi4j assembly of the DCI Sample application (version B)
+ * Zest assembly of the DCI Sample application (version B)
  *
- * A Qi4j application structure is declared by an assembly that defines which layers and modules
+ * A Zest application structure is declared by an assembly that defines which layers and modules
  * the application has and how they are allowed to depend on each other. Each layer could have it's
  * own assembly file in larger applications.
  *
- * The Qi4j assembly doesn't strictly map 1-1 to the directory hierarchy and the assembly
+ * The Zest assembly doesn't strictly map 1-1 to the directory hierarchy and the assembly
  * structures. An example is the Entities:
  *
  * Data objects (Entities and ValuesComposites) can be promoted to Role Players when they are
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/communication/query/BookingQueries.java b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/communication/query/BookingQueries.java
index 12c3bbb..a224f17 100644
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/communication/query/BookingQueries.java
+++ b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/communication/query/BookingQueries.java
@@ -35,7 +35,7 @@
 /**
  * Booking queries
  *
- * Implemented as a Qi4j composite since we can then conveniently get the routing service injected.
+ * Implemented as a Zest composite since we can then conveniently get the routing service injected.
  * We could choose to implement all query classes like this too.
  *
  * Used by the communication layer only. Can change according to ui needs.
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/communication/query/dto/CargoDTO.java b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/communication/query/dto/CargoDTO.java
index eb24f6e..d9ca4ef 100644
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/communication/query/dto/CargoDTO.java
+++ b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/communication/query/dto/CargoDTO.java
@@ -30,7 +30,7 @@
 /**
  * Cargo DTO
  *
- * Qi4j-comment:
+ * Zest-comment:
  * We need the @Unqualified annotation since the CargoDTO interface has other properties than {@link Cargo}
  * so that properties can not be directly mapped when we convert from entity to immutable value DTO.
  * With the annotation, property access methods are compared by name instead.
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/communication/query/dto/HandlingEventDTO.java b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/communication/query/dto/HandlingEventDTO.java
index 08a9ea2..c0a21b2 100644
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/communication/query/dto/HandlingEventDTO.java
+++ b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/communication/query/dto/HandlingEventDTO.java
@@ -29,7 +29,7 @@
 /**
  * HandlingEvent DTO
  *
- * Qi4j-comment:
+ * Zest-comment:
  * We need the @Unqualified annotation since the HandlingEventDTO interface has other properties than
  * {@link HandlingEvent} so that properties can not be directly mapped when we convert from entity to
  * immutable value DTO. With the annotation, property access methods are compared by name instead.
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/context/interaction/handling/inspection/event/InspectArrivedCargo.java b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/context/interaction/handling/inspection/event/InspectArrivedCargo.java
index 563d637..ba90b17 100644
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/context/interaction/handling/inspection/event/InspectArrivedCargo.java
+++ b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/context/interaction/handling/inspection/event/InspectArrivedCargo.java
@@ -42,7 +42,7 @@
 /**
  * Inspect Arrived Cargo (subfunction use case)
  *
- * This is one the variations of the {@link com.marcgrue.dcisample_b.context.interaction.handling.inspection.InspectCargoDeliveryStatus} use case.
+ * This is one the variations of the {@link org.qi4j.sample.dcicargo.sample_b.context.interaction.handling.inspection.InspectCargoDeliveryStatus} use case.
  */
 public class InspectArrivedCargo extends Context
 {
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/context/interaction/handling/inspection/event/InspectCargoInCustoms.java b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/context/interaction/handling/inspection/event/InspectCargoInCustoms.java
index 8b67067..1bbfb78 100644
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/context/interaction/handling/inspection/event/InspectCargoInCustoms.java
+++ b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/context/interaction/handling/inspection/event/InspectCargoInCustoms.java
@@ -41,7 +41,7 @@
 /**
  * Inspect Cargo In Customs (subfunction use case)
  *
- * This is one the variations of the {@link com.marcgrue.dcisample_b.context.interaction.handling.inspection.InspectCargoDeliveryStatus} use case.
+ * This is one the variations of the {@link org.qi4j.sample.dcicargo.sample_b.context.interaction.handling.inspection.InspectCargoDeliveryStatus} use case.
  *
  * Can the cargo get handled by customs only in the current port location?! Nothing now prevents
  * an unexpected cargo in customs in some random location. A domain expert is needed to explain
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/context/interaction/handling/inspection/event/InspectClaimedCargo.java b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/context/interaction/handling/inspection/event/InspectClaimedCargo.java
index 110a441..f009140 100644
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/context/interaction/handling/inspection/event/InspectClaimedCargo.java
+++ b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/context/interaction/handling/inspection/event/InspectClaimedCargo.java
@@ -39,7 +39,7 @@
 /**
  * Inspect Claimed Cargo (subfunction use case)
  *
- * This is one the variations of the {@link com.marcgrue.dcisample_b.context.interaction.handling.inspection.InspectCargoDeliveryStatus} use case.
+ * This is one the variations of the {@link org.qi4j.sample.dcicargo.sample_b.context.interaction.handling.inspection.InspectCargoDeliveryStatus} use case.
  *
  * NOTE: We don't throw any misrouted/misdirected exceptions even though the cargo might not have
  * followed the original itinerary. The cargo has been delivered at destination and claimed by
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/context/interaction/handling/inspection/event/InspectReceivedCargo.java b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/context/interaction/handling/inspection/event/InspectReceivedCargo.java
index 3caa509..1914636 100644
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/context/interaction/handling/inspection/event/InspectReceivedCargo.java
+++ b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/context/interaction/handling/inspection/event/InspectReceivedCargo.java
@@ -44,7 +44,7 @@
 /**
  * Inspect Received Cargo (subfunction use case)
  *
- * This is one the variations of the {@link com.marcgrue.dcisample_b.context.interaction.handling.inspection.InspectCargoDeliveryStatus} use case.
+ * This is one the variations of the {@link org.qi4j.sample.dcicargo.sample_b.context.interaction.handling.inspection.InspectCargoDeliveryStatus} use case.
  *
  * Note that we consider the cargo still on track if it's received in cargo origin regardless of routing status!
  */
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/context/interaction/handling/inspection/event/InspectUnhandledCargo.java b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/context/interaction/handling/inspection/event/InspectUnhandledCargo.java
index 476586c..ff667c1 100644
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/context/interaction/handling/inspection/event/InspectUnhandledCargo.java
+++ b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/context/interaction/handling/inspection/event/InspectUnhandledCargo.java
@@ -39,7 +39,7 @@
 /**
  * Inspect Unhandled Cargo (subfunction use case)
  *
- * This is one the variations of the {@link com.marcgrue.dcisample_b.context.interaction.handling.inspection.InspectCargoDeliveryStatus} use case.
+ * This is one the variations of the {@link org.qi4j.sample.dcicargo.sample_b.context.interaction.handling.inspection.InspectCargoDeliveryStatus} use case.
  *
  * Here we can check a cargo that hasn't been received in origin yet.
  */
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/context/interaction/handling/inspection/event/InspectUnloadedCargo.java b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/context/interaction/handling/inspection/event/InspectUnloadedCargo.java
index fe64e12..6893c59 100644
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/context/interaction/handling/inspection/event/InspectUnloadedCargo.java
+++ b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/context/interaction/handling/inspection/event/InspectUnloadedCargo.java
@@ -46,7 +46,7 @@
 /**
  * Inspect Unloaded Cargo (subfunction use case)
  *
- * This is one the variations of the {@link com.marcgrue.dcisample_b.context.interaction.handling.inspection.InspectCargoDeliveryStatus} use case.
+ * This is one the variations of the {@link org.qi4j.sample.dcicargo.sample_b.context.interaction.handling.inspection.InspectCargoDeliveryStatus} use case.
  */
 public class InspectUnloadedCargo extends Context
 {
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/infrastructure/WicketQi4jApplication.java b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/infrastructure/WicketQi4jApplication.java
index 1057bc6..63dcf0d 100644
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/infrastructure/WicketQi4jApplication.java
+++ b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/infrastructure/WicketQi4jApplication.java
@@ -43,7 +43,7 @@
 /**
  * WicketQi4jApplication
  *
- * Base Wicket Web Application containing the Qi4j application.
+ * Base Wicket Web Application containing the Zest application.
  */
 public class WicketQi4jApplication
     extends WebApplication
@@ -63,10 +63,10 @@
     protected EntityToDTOService valueConverter;
 
     /**
-     * Qi4j Assembler
+     * Zest Assembler
      *
      * To let the custom application class (DCISampleApplication_x) focus on starting up the
-     * Wicket environment, I made a convention of having Qi4j Assembler files in an 'assembly'
+     * Wicket environment, I made a convention of having Zest Assembler files in an 'assembly'
      * folder beside the custom application class.
      *
      * There's always only one application file, but we could split the assemblage into several
@@ -93,7 +93,7 @@
         }
         catch( ClassNotFoundException e )
         {
-            throw new Exception( "Couldn't find Qi4j assembler in path '" + assemblerPath + "'" );
+            throw new Exception( "Couldn't find Zest assembler in path '" + assemblerPath + "'" );
         }
     }
 
@@ -130,20 +130,20 @@
     {
         try
         {
-            logger.info( "Starting Qi4j application" );
+            logger.info( "Starting Zest application" );
             Energy4Java qi4j = new Energy4Java();
             qi4jApp = qi4j.newApplication( getAssembler() );
             qi4jApp.activate();
             qi4jModule = qi4jApp.findModule( defaultLayerName(), defaultModuleName() );
 
-            // Qi4j injects @Structure and @Service elements into this application instance
+            // Zest injects @Structure and @Service elements into this application instance
             qi4jModule.injectTo( this );
 
-            logger.info( "Started Qi4j application" );
+            logger.info( "Started Zest application" );
         }
         catch( Exception e )
         {
-            logger.error( "Could not start Qi4j application." );
+            logger.error( "Could not start Zest application." );
             e.printStackTrace();
             System.exit( 100 );
         }
@@ -202,7 +202,7 @@
         } );
     }
 
-    // Since Qi4j can only add concrete classes in the assembly, we need to implement a (dummy) getHomePage()
+    // Since Zest can only add concrete classes in the assembly, we need to implement a (dummy) getHomePage()
     // method here. Override in wicket application class with a real returned page class.
     @Override
     public Class<? extends Page> getHomePage()
@@ -220,7 +220,7 @@
 
         try
         {
-            logger.info( "Passivating Qi4j application" );
+            logger.info( "Passivating Zest application" );
             qi4jApp.passivate();
         }
         catch( Exception e )
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/infrastructure/conversion/DTO.java b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/infrastructure/conversion/DTO.java
index 6d8e973..1ee78b3 100644
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/infrastructure/conversion/DTO.java
+++ b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/infrastructure/conversion/DTO.java
@@ -25,7 +25,7 @@
  *
  * Base class for DTOs
  *
- * Qi4j-comment:
+ * Zest-comment:
  * ValueComposites that extend DTO are candidates to have association types converted and
  * assigned in the EntityToDTOService.
  */
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/infrastructure/model/EntityModel.java b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/infrastructure/model/EntityModel.java
index c4c267c..fc303e0 100644
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/infrastructure/model/EntityModel.java
+++ b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/infrastructure/model/EntityModel.java
@@ -22,15 +22,16 @@
 import org.qi4j.api.entity.EntityComposite;
 import org.qi4j.api.entity.EntityReference;
 import org.qi4j.api.unitofwork.NoSuchEntityException;
+import org.qi4j.api.usecase.Usecase;
 import org.qi4j.sample.dcicargo.sample_b.infrastructure.conversion.DTO;
 
 /**
  * EntityModel
  *
- * A Wicket Model that bridges to our Qi4j data store.
+ * A Wicket Model that bridges to our Zest data store.
  *
  * In Wicket we need to be able to pass around serializable data that can be "detachable".
- * Qi4j entities are therefore lazy loaded with a class and identity through our UnitOfWork
+ * Zest entities are therefore lazy loaded with a class and identity through our UnitOfWork
  * and then converted to a DTO ValueComposite.
  */
 public class EntityModel<T extends DTO, U extends EntityComposite>
@@ -75,7 +76,8 @@
         U entity = module.currentUnitOfWork().get( entityClass, identity );
         if( entity == null )
         {
-            throw new NoSuchEntityException( EntityReference.parseEntityReference( identity ), entityClass );
+            Usecase usecase = module.currentUnitOfWork().usecase();
+            throw new NoSuchEntityException( EntityReference.parseEntityReference( identity ), entityClass, usecase );
         }
         return entity;
     }
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/infrastructure/model/QueryModel.java b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/infrastructure/model/QueryModel.java
index b25f25d..eabf703 100644
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/infrastructure/model/QueryModel.java
+++ b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/infrastructure/model/QueryModel.java
@@ -25,7 +25,7 @@
 /**
  * QueryModel
  *
- * Callback Wicket model that holds a Qi4j Query object that can be called when needed to
+ * Callback Wicket model that holds a Zest Query object that can be called when needed to
  * retrieve fresh data.
  */
 public abstract class QueryModel<T, U extends EntityComposite>
@@ -55,7 +55,7 @@
         return dtoList;
     }
 
-    // Callback to retrieve the (unserializable) Qi4j Query object
+    // Callback to retrieve the (unserializable) Zest Query object
     public abstract Query<U> getQuery();
 
     public T getValue( U entity )
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/infrastructure/model/ReadOnlyModel.java b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/infrastructure/model/ReadOnlyModel.java
index 862663f..8eadb4f 100644
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/infrastructure/model/ReadOnlyModel.java
+++ b/samples/dci-cargo/dcisample_b/src/main/java/org/qi4j/sample/dcicargo/sample_b/infrastructure/model/ReadOnlyModel.java
@@ -25,7 +25,7 @@
 /**
  * ReadOnlyModel
  *
- * Abstract base model for Wicket model objects taking Qi4j objects.
+ * Abstract base model for Wicket model objects taking Zest objects.
  */
 public abstract class ReadOnlyModel<T>
     implements IModel<T>
diff --git a/samples/dci-cargo/dcisample_b/src/main/resources/log4j.properties b/samples/dci-cargo/dcisample_b/src/main/resources/log4j.properties
index 1565aa5..f212fe5 100644
--- a/samples/dci-cargo/dcisample_b/src/main/resources/log4j.properties
+++ b/samples/dci-cargo/dcisample_b/src/main/resources/log4j.properties
@@ -1,3 +1,18 @@
+# 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.
+
 log4j.appender.Stdout=org.apache.log4j.ConsoleAppender
 log4j.appender.Stdout.layout=org.apache.log4j.PatternLayout
 log4j.appender.Stdout.layout.conversionPattern=%-5p - %-36.36c{1} - %m\n
diff --git a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/BasePage.html b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/BasePage.html
index 5a788b8..010b6f8 100644
--- a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/BasePage.html
+++ b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/BasePage.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <head>
     <title>DCI sample (version B)</title>
     <link href="css/style.css" rel="stylesheet" type="text/css"/>
@@ -40,11 +56,11 @@
                     <a href="http://tech.groups.yahoo.com/group/domaindrivendesign/" target="_blank">Forum</a>
                 </td>
                 <td valign="top">
-                    <a href="http://www.qi4j.org/" target="_blank">Website</a><br>
-                    <a href="http://old.nabble.com/Qi4j-dev-f33137.html" target="_blank">Forum</a><br>
-                    <a href="http://www.qi4j.org/qi4j/downloads.html" target="_blank">Download</a><br>
-                    <a href="http://repository.ops4j.org/maven2/org/qi4j/" target="_blank">Maven</a><br>
-                    <a href="https://github.com/qi4j" target="_blank">Github</a>
+                    <a href="https://zest.apache.org/" target="_blank">Website</a><br>
+                    <a href="https://zest.apache.org/community/get_help.html" target="_blank">Forum</a><br>
+                    <a href="https://zest.apache.org/download.html" target="_blank">Download</a><br>
+                    <a href="https://zest.apache.org/java/latest/howto-depend-on-zest.html" target="_blank">Maven</a><br>
+                    <a href="https://github.com/apache/zest-java" target="_blank">Github</a>
                 </td>
                 <td valign="top">
                     <a href="http://wicket.apache.org/" target="_blank">Website</a><br>
diff --git a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/BookNewCargoPage.html b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/BookNewCargoPage.html
index 3a9a601..80f9dc3 100644
--- a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/BookNewCargoPage.html
+++ b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/BookNewCargoPage.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <wicket:extend>
     <div class="headerMenu">
         Book new cargo
diff --git a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/BookingBasePage.html b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/BookingBasePage.html
index 8eee760..0af9860 100644
--- a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/BookingBasePage.html
+++ b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/BookingBasePage.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <wicket:extend>
     <div id="box">
         <wicket:child/>
diff --git a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/CargoDetailsPage.html b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/CargoDetailsPage.html
index 211d548c..c78f1c5 100644
--- a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/CargoDetailsPage.html
+++ b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/CargoDetailsPage.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <wicket:extend>
 
     <div wicket:id="prevNext"></div>
diff --git a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/CargoListPage.html b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/CargoListPage.html
index 43ad2d6..850773a 100644
--- a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/CargoListPage.html
+++ b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/CargoListPage.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <wicket:extend>
     <div class="headerMenu">
         List of Cargos
diff --git a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/ChangeDestinationPage.html b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/ChangeDestinationPage.html
index bafa9b5..892722a 100644
--- a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/ChangeDestinationPage.html
+++ b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/ChangeDestinationPage.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <wicket:extend>
 
     <div class="headerMenu">
diff --git a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/ReRouteCargoPage.html b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/ReRouteCargoPage.html
index 1eb7d9e..7d1a4b2 100644
--- a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/ReRouteCargoPage.html
+++ b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/ReRouteCargoPage.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <wicket:extend>
 
     <div class="headerMenu">
diff --git a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/RouteCargoPage.html b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/RouteCargoPage.html
index acee724..069004e 100644
--- a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/RouteCargoPage.html
+++ b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/RouteCargoPage.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <wicket:extend>
 
     <div class="headerMenu">
diff --git a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/RoutePanel.html b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/RoutePanel.html
index 8b4f237..f7b8d82 100644
--- a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/RoutePanel.html
+++ b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/booking/RoutePanel.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <wicket:panel>
     <h4 wicket:id="routeHeader"></h4>
     <span wicket:id="routeFeedback"></span>
diff --git a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/handling/IncidentLoggingApplicationMockupPage.html b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/handling/IncidentLoggingApplicationMockupPage.html
index 47c296a..3827ced 100644
--- a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/handling/IncidentLoggingApplicationMockupPage.html
+++ b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/handling/IncidentLoggingApplicationMockupPage.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <wicket:extend>
     <div id="box">
 
diff --git a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/handling/IncidentLoggingApplicationMockupPage.properties b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/handling/IncidentLoggingApplicationMockupPage.properties
index 131819d..8c05b4d 100644
--- a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/handling/IncidentLoggingApplicationMockupPage.properties
+++ b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/handling/IncidentLoggingApplicationMockupPage.properties
@@ -1,3 +1,18 @@
+# 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.
+
 handlingEvent.UNKNOWN=ERROR: *** UNKNOWN EVENT TYPE ***
 handlingEvent.RECEIVE=Received in ${location}.
 handlingEvent.LOAD=Loaded onto voyage ${voyage} in port ${location}.
diff --git a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/tracking/HandlingHistoryPanel.html b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/tracking/HandlingHistoryPanel.html
index 1be8490..f89e3ae 100644
--- a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/tracking/HandlingHistoryPanel.html
+++ b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/tracking/HandlingHistoryPanel.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <wicket:panel>
     <h4>Handling history</h4>
     <table>
diff --git a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/tracking/HandlingHistoryPanel.properties b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/tracking/HandlingHistoryPanel.properties
index 4322528..089ebb1 100644
--- a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/tracking/HandlingHistoryPanel.properties
+++ b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/tracking/HandlingHistoryPanel.properties
@@ -1,3 +1,18 @@
+# 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.
+
 handlingEvent.UNKNOWN=ERROR: *** UNKNOWN EVENT TYPE ***
 handlingEvent.RECEIVE=Received in ${location}
 handlingEvent.LOAD=Loaded onto voyage ${voyage} in ${location}
diff --git a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/tracking/NextHandlingEventPanel.html b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/tracking/NextHandlingEventPanel.html
index 735e878..e37b8ce 100644
--- a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/tracking/NextHandlingEventPanel.html
+++ b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/tracking/NextHandlingEventPanel.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <wicket:panel>
     <p wicket:id="text" style="font-style:italic;font-weight: bold;"></p>
 </wicket:panel>
diff --git a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/tracking/NextHandlingEventPanel.properties b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/tracking/NextHandlingEventPanel.properties
index 750fdfa..506cd20 100644
--- a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/tracking/NextHandlingEventPanel.properties
+++ b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/tracking/NextHandlingEventPanel.properties
@@ -1,3 +1,18 @@
+# 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.
+
 nextEvent.UNKNOWN=Next expected activity: Unknown...
 nextEvent.ROUTE=Next expected activity: Routing of cargo
 nextEvent.RECEIVE=Next expected activity: Receipt of cargo in ${location}
diff --git a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/tracking/TrackCargoPage.html b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/tracking/TrackCargoPage.html
index 4db767d..26de6b8 100644
--- a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/tracking/TrackCargoPage.html
+++ b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/tracking/TrackCargoPage.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <wicket:extend>
     <div id="box">
 
diff --git a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/tracking/TrackCargoPage.properties b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/tracking/TrackCargoPage.properties
index 5fef84e..3e99229 100644
--- a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/tracking/TrackCargoPage.properties
+++ b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/communication/web/tracking/TrackCargoPage.properties
@@ -1,3 +1,18 @@
+# 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.
+
 cargoDropDown.null=Track known cargo
 
 eta=Estimated time of arrival in {0}: {1}
diff --git a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/infrastructure/wicket/link/LinkPanel.html b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/infrastructure/wicket/link/LinkPanel.html
index 24c1b55..a628cfb 100644
--- a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/infrastructure/wicket/link/LinkPanel.html
+++ b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/infrastructure/wicket/link/LinkPanel.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <wicket:panel>
 	<a wicket:id="link"><span wicket:id="label"></span></a>
 </wicket:panel>
diff --git a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/infrastructure/wicket/prevnext/PrevNext.html b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/infrastructure/wicket/prevnext/PrevNext.html
index 74e28f9..ca46915 100644
--- a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/infrastructure/wicket/prevnext/PrevNext.html
+++ b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/infrastructure/wicket/prevnext/PrevNext.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <wicket:head>
     <link href="css/prev-next.css" rel="stylesheet" type="text/css"/>
 </wicket:head>
diff --git a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/infrastructure/wicket/tabs/TabsPanel.html b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/infrastructure/wicket/tabs/TabsPanel.html
index 300cf66..7fc034a 100644
--- a/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/infrastructure/wicket/tabs/TabsPanel.html
+++ b/samples/dci-cargo/dcisample_b/src/main/resources/org/qi4j/sample/dcicargo/sample_b/infrastructure/wicket/tabs/TabsPanel.html
@@ -1,4 +1,20 @@
 <html xmlns:wicket>
+<!--
+  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.
+-->
 <wicket:head>
     <link href="css/tabs.css" rel="stylesheet" type="text/css"/>
 </wicket:head>
diff --git a/samples/dci-cargo/dcisample_b/src/main/webapp/WEB-INF/web.xml b/samples/dci-cargo/dcisample_b/src/main/webapp/WEB-INF/web.xml
index c652ec8..93b47d5 100644
--- a/samples/dci-cargo/dcisample_b/src/main/webapp/WEB-INF/web.xml
+++ b/samples/dci-cargo/dcisample_b/src/main/webapp/WEB-INF/web.xml
@@ -1,5 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
-
+<!--
+  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.
+-->
 <web-app xmlns="http://java.sun.com/xml/ns/javaee"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
diff --git a/samples/dci-cargo/dcisample_b/src/main/webapp/css/prev-next.css b/samples/dci-cargo/dcisample_b/src/main/webapp/css/prev-next.css
index a05e9e1..d6e85ce 100644
--- a/samples/dci-cargo/dcisample_b/src/main/webapp/css/prev-next.css
+++ b/samples/dci-cargo/dcisample_b/src/main/webapp/css/prev-next.css
@@ -1,3 +1,21 @@
+/*
+ * 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.
+ */
 
 .prevNextIcons {
   /* Modify custom positioning here */
diff --git a/samples/dci-cargo/dcisample_b/src/main/webapp/css/style.css b/samples/dci-cargo/dcisample_b/src/main/webapp/css/style.css
index 67230af..1bd59aa 100644
--- a/samples/dci-cargo/dcisample_b/src/main/webapp/css/style.css
+++ b/samples/dci-cargo/dcisample_b/src/main/webapp/css/style.css
@@ -1,3 +1,22 @@
+/*
+ * 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.
+ */
+
 body {
     margin: 2em;
     font-family: 'Lucida Sans', 'Helvetica', 'Sans-serif', 'sans', sans-serif;
diff --git a/samples/dci-cargo/dcisample_b/src/main/webapp/css/tabs.css b/samples/dci-cargo/dcisample_b/src/main/webapp/css/tabs.css
index 619f17a..184b9c7 100644
--- a/samples/dci-cargo/dcisample_b/src/main/webapp/css/tabs.css
+++ b/samples/dci-cargo/dcisample_b/src/main/webapp/css/tabs.css
@@ -1,3 +1,22 @@
+/*
+ * 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.
+ */
+
 #tabs {
   margin-top:12px;
   float:left;
diff --git a/samples/dci/build.gradle b/samples/dci/build.gradle
index eae0e1b..2d9ee86 100644
--- a/samples/dci/build.gradle
+++ b/samples/dci/build.gradle
@@ -1,7 +1,26 @@
+/*
+ * 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.
+ */
 
-description = "Sample of how DCI (Data, Context & Interaction) pattern is implemented with Qi4j."
 
-jar { manifest { name = "Qi4j Sample - DCI" }}
+description = "Sample of how DCI (Data, Context & Interaction) pattern is implemented with Apache Zest™."
+
+jar { manifest { name = "Apache Zest™ Sample - DCI" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
diff --git a/samples/dci/src/main/java/org/qi4j/dci/moneytransfer/context/Role.java b/samples/dci/src/main/java/org/qi4j/dci/moneytransfer/context/Role.java
index 6895b20..8cd32bf 100644
--- a/samples/dci/src/main/java/org/qi4j/dci/moneytransfer/context/Role.java
+++ b/samples/dci/src/main/java/org/qi4j/dci/moneytransfer/context/Role.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.dci.moneytransfer.context;
 
 /**
diff --git a/samples/dddsample2/src/main/java/org/qi4j/samples/cargo/app1/model/cargo/Cargo.java b/samples/dddsample2/src/main/java/org/qi4j/samples/cargo/app1/model/cargo/Cargo.java
index 4ca2a83..796c0eb 100755
--- a/samples/dddsample2/src/main/java/org/qi4j/samples/cargo/app1/model/cargo/Cargo.java
+++ b/samples/dddsample2/src/main/java/org/qi4j/samples/cargo/app1/model/cargo/Cargo.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.cargo.app1.model.cargo;
 
 import org.qi4j.api.common.Optional;
diff --git a/samples/forum/build.gradle b/samples/forum/build.gradle
index a136e30..c3e9ddd 100644
--- a/samples/forum/build.gradle
+++ b/samples/forum/build.gradle
@@ -1,13 +1,32 @@
+/*
+ * 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.
+ */
+
 description = "Sample of how to build a web forum"
 
-jar { manifest { name = "Qi4j Sample - Forum" }}
+jar { manifest { name = "Apache Zest™ Sample - Forum" }}
 
 dependencies {
 
   compile project( ":org.qi4j.core:org.qi4j.core.bootstrap" )
   compile project( ":org.qi4j.libraries:org.qi4j.library.rest-server" )
   compile project( ":org.qi4j.libraries:org.qi4j.library.fileconfig" )
-  compile project( ":org.qi4j.extensions:org.qi4j.extension.entitystore-neo4j" )
+  compile project( ":org.qi4j.extensions:org.qi4j.extension.entitystore-file" )
   compile project( ":org.qi4j.extensions:org.qi4j.extension.valueserialization-orgjson" )
   compile libraries.servlet_api
 
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/assembler/ForumAssembler.java b/samples/forum/src/main/java/org/qi4j/samples/forum/assembler/ForumAssembler.java
index 807886d..a6fe814 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/assembler/ForumAssembler.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/assembler/ForumAssembler.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.assembler;
 
 import java.lang.reflect.Modifier;
@@ -13,9 +31,8 @@
 import org.qi4j.bootstrap.ClassScanner;
 import org.qi4j.bootstrap.LayerAssembly;
 import org.qi4j.bootstrap.ModuleAssembly;
+import org.qi4j.entitystore.file.assembly.FileEntityStoreAssembler;
 import org.qi4j.entitystore.memory.MemoryEntityStoreService;
-import org.qi4j.entitystore.neo4j.NeoConfiguration;
-import org.qi4j.entitystore.neo4j.NeoEntityStoreService;
 import org.qi4j.functional.Function;
 import org.qi4j.library.fileconfig.FileConfigurationService;
 import org.qi4j.library.rest.common.ValueAssembler;
@@ -55,10 +72,10 @@
 
         assembly.setName( "Forum" );
 
+        ModuleAssembly configModule;
         LayerAssembly configuration = assembly.layer( "Configuration" );
         {
-            ModuleAssembly configModule = configuration.module( "Configuration" );
-            configModule.entities( NeoConfiguration.class ).visibleIn( Visibility.application );
+            configModule = configuration.module( "Configuration" );
             configModule.services( MemoryEntityStoreService.class );
             configModule.services( UuidIdentityGeneratorService.class );
             new OrgJsonValueSerializationAssembler().assemble( configModule );
@@ -68,7 +85,7 @@
         {
             ModuleAssembly entityStore = infrastructure.module( "EntityStore" );
             entityStore.services( FileConfigurationService.class );
-            entityStore.services( NeoEntityStoreService.class ).visibleIn( Visibility.application );
+            new FileEntityStoreAssembler().withConfig( configModule, Visibility.application ).assemble( entityStore );
             entityStore.services( UuidIdentityGeneratorService.class ).visibleIn( Visibility.application );
             new OrgJsonValueSerializationAssembler().
                 visibleIn( Visibility.application ).
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/context/Context.java b/samples/forum/src/main/java/org/qi4j/samples/forum/context/Context.java
index 120c2b3..e338833 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/context/Context.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/context/Context.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.context;
 
 import org.qi4j.api.Qi4j;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/context/Events.java b/samples/forum/src/main/java/org/qi4j/samples/forum/context/Events.java
index 3232edb..1fdae35 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/context/Events.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/context/Events.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.context;
 
 import org.qi4j.samples.forum.context.signup.Registration;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/context/EventsService.java b/samples/forum/src/main/java/org/qi4j/samples/forum/context/EventsService.java
index c040b2a..047890a 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/context/EventsService.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/context/EventsService.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.context;
 
 import java.lang.reflect.InvocationHandler;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/context/account/UpdateProfile.java b/samples/forum/src/main/java/org/qi4j/samples/forum/context/account/UpdateProfile.java
index 3fb0fd6..b87766c 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/context/account/UpdateProfile.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/context/account/UpdateProfile.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.context.account;
 
 import org.qi4j.api.constraint.Name;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/context/administration/BoardAdministration.java b/samples/forum/src/main/java/org/qi4j/samples/forum/context/administration/BoardAdministration.java
index 4a6a5aa..2797058 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/context/administration/BoardAdministration.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/context/administration/BoardAdministration.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.context.administration;
 
 import org.qi4j.api.constraint.Name;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/context/administration/ForumAdministration.java b/samples/forum/src/main/java/org/qi4j/samples/forum/context/administration/ForumAdministration.java
index e7c21bf..be5b3fd 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/context/administration/ForumAdministration.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/context/administration/ForumAdministration.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.context.administration;
 
 import org.qi4j.api.constraint.Name;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/context/administration/ForumsAdministration.java b/samples/forum/src/main/java/org/qi4j/samples/forum/context/administration/ForumsAdministration.java
index e166f1b..10dfb96 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/context/administration/ForumsAdministration.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/context/administration/ForumsAdministration.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.context.administration;
 
 import org.qi4j.api.constraint.Name;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/context/administration/ModeratorAdministration.java b/samples/forum/src/main/java/org/qi4j/samples/forum/context/administration/ModeratorAdministration.java
index 836788d..561c016 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/context/administration/ModeratorAdministration.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/context/administration/ModeratorAdministration.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.context.administration;
 
 import org.qi4j.api.injection.scope.Structure;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/context/administration/ModeratorsAdministration.java b/samples/forum/src/main/java/org/qi4j/samples/forum/context/administration/ModeratorsAdministration.java
index c5d9ffa..0632368 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/context/administration/ModeratorsAdministration.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/context/administration/ModeratorsAdministration.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.context.administration;
 
 import org.qi4j.api.injection.scope.Structure;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/context/administration/UsersAdministration.java b/samples/forum/src/main/java/org/qi4j/samples/forum/context/administration/UsersAdministration.java
index 17a4184..8329db3 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/context/administration/UsersAdministration.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/context/administration/UsersAdministration.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.context.administration;
 
 import org.qi4j.api.injection.scope.Structure;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/context/login/Login.java b/samples/forum/src/main/java/org/qi4j/samples/forum/context/login/Login.java
index 18bbb04..4694367 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/context/login/Login.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/context/login/Login.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.context.login;
 
 import org.qi4j.api.constraint.Name;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/context/moderation/ModerationContext.java b/samples/forum/src/main/java/org/qi4j/samples/forum/context/moderation/ModerationContext.java
index ae20c3a..e86740b 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/context/moderation/ModerationContext.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/context/moderation/ModerationContext.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.context.moderation;
 
 /**
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/context/signup/Registration.java b/samples/forum/src/main/java/org/qi4j/samples/forum/context/signup/Registration.java
index bf79f72..8110ba7 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/context/signup/Registration.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/context/signup/Registration.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.context.signup;
 
 import org.qi4j.api.property.Property;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/context/signup/Signup.java b/samples/forum/src/main/java/org/qi4j/samples/forum/context/signup/Signup.java
index 9212c73..a07ec2d 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/context/signup/Signup.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/context/signup/Signup.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.context.signup;
 
 import org.qi4j.api.composite.TransientComposite;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/context/view/ViewBoard.java b/samples/forum/src/main/java/org/qi4j/samples/forum/context/view/ViewBoard.java
index 120dcea..63f3d91 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/context/view/ViewBoard.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/context/view/ViewBoard.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.context.view;
 
 import org.qi4j.api.injection.scope.Structure;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/context/view/ViewForum.java b/samples/forum/src/main/java/org/qi4j/samples/forum/context/view/ViewForum.java
index 8b6638d..570b3cb 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/context/view/ViewForum.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/context/view/ViewForum.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.context.view;
 
 import org.qi4j.api.injection.scope.Structure;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/context/view/ViewPost.java b/samples/forum/src/main/java/org/qi4j/samples/forum/context/view/ViewPost.java
index 93c8c64..e927a42 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/context/view/ViewPost.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/context/view/ViewPost.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.context.view;
 
 import java.util.Date;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/context/view/ViewTopic.java b/samples/forum/src/main/java/org/qi4j/samples/forum/context/view/ViewTopic.java
index 86255b1..4dd33db 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/context/view/ViewTopic.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/context/view/ViewTopic.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.context.view;
 
 import org.qi4j.library.rest.server.api.ResourceIndex;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/data/Administrators.java b/samples/forum/src/main/java/org/qi4j/samples/forum/data/Administrators.java
index 076dd2f..513c6dd 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/data/Administrators.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/data/Administrators.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.data;
 
 import org.qi4j.api.association.ManyAssociation;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/data/Moderators.java b/samples/forum/src/main/java/org/qi4j/samples/forum/data/Moderators.java
index 2d89e61..4203d1e 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/data/Moderators.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/data/Moderators.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.data;
 
 import org.qi4j.api.association.ManyAssociation;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/data/entity/Board.java b/samples/forum/src/main/java/org/qi4j/samples/forum/data/entity/Board.java
index 2614749..3b8e8be 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/data/entity/Board.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/data/entity/Board.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.data.entity;
 
 import org.qi4j.api.association.Association;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/data/entity/Forum.java b/samples/forum/src/main/java/org/qi4j/samples/forum/data/entity/Forum.java
index d1386b7..93f923e 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/data/entity/Forum.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/data/entity/Forum.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.data.entity;
 
 import org.qi4j.api.association.ManyAssociation;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/data/entity/Forums.java b/samples/forum/src/main/java/org/qi4j/samples/forum/data/entity/Forums.java
index c881ba9..512a41f 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/data/entity/Forums.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/data/entity/Forums.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.data.entity;
 
 import org.qi4j.api.entity.EntityComposite;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/data/entity/Post.java b/samples/forum/src/main/java/org/qi4j/samples/forum/data/entity/Post.java
index 6757332..db780d7 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/data/entity/Post.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/data/entity/Post.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.data.entity;
 
 import java.util.Date;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/data/entity/Topic.java b/samples/forum/src/main/java/org/qi4j/samples/forum/data/entity/Topic.java
index c7f5c8f..3923d61 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/data/entity/Topic.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/data/entity/Topic.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.data.entity;
 
 import org.qi4j.api.association.Association;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/data/entity/User.java b/samples/forum/src/main/java/org/qi4j/samples/forum/data/entity/User.java
index 3f0d3a6..a0a7601 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/data/entity/User.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/data/entity/User.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.data.entity;
 
 import java.io.UnsupportedEncodingException;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/data/entity/Users.java b/samples/forum/src/main/java/org/qi4j/samples/forum/data/entity/Users.java
index 4b25a12..8b591c4 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/data/entity/Users.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/data/entity/Users.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.data.entity;
 
 import org.qi4j.api.entity.EntityBuilder;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/domainevent/DomainCommandResult.java b/samples/forum/src/main/java/org/qi4j/samples/forum/domainevent/DomainCommandResult.java
index 204bef5..8a8f2cd 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/domainevent/DomainCommandResult.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/domainevent/DomainCommandResult.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.domainevent;
 
 import org.qi4j.library.rest.server.spi.CommandResult;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/domainevent/DomainEvent.java b/samples/forum/src/main/java/org/qi4j/samples/forum/domainevent/DomainEvent.java
index ee96bd9..7ba4e9f 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/domainevent/DomainEvent.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/domainevent/DomainEvent.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.domainevent;
 
 import java.lang.annotation.Retention;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/domainevent/DomainEventValue.java b/samples/forum/src/main/java/org/qi4j/samples/forum/domainevent/DomainEventValue.java
index b1e1a98..9ba22d5 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/domainevent/DomainEventValue.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/domainevent/DomainEventValue.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.domainevent;
 
 import java.util.List;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/domainevent/ParameterValue.java b/samples/forum/src/main/java/org/qi4j/samples/forum/domainevent/ParameterValue.java
index f0b8de1..1f32b89 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/domainevent/ParameterValue.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/domainevent/ParameterValue.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.domainevent;
 
 import org.qi4j.api.property.Property;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/rest/ForumRestlet.java b/samples/forum/src/main/java/org/qi4j/samples/forum/rest/ForumRestlet.java
index 7c5487b..e573244 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/rest/ForumRestlet.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/rest/ForumRestlet.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.rest;
 
 import org.qi4j.library.rest.server.api.ContextRestlet;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/RootResource.java b/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/RootResource.java
index 881d31a..2d890b0 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/RootResource.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/RootResource.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.rest.resource;
 
 import java.util.Collections;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/administration/AdministrationResource.java b/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/administration/AdministrationResource.java
index 954c430..53c94cd 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/administration/AdministrationResource.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/administration/AdministrationResource.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.rest.resource.administration;
 
 import org.qi4j.library.rest.server.api.ContextResource;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/administration/ForumsResource.java b/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/administration/ForumsResource.java
index a0e5eba..c2cecc8 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/administration/ForumsResource.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/administration/ForumsResource.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.rest.resource.administration;
 
 import org.qi4j.library.rest.server.api.ContextResource;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/administration/UsersResource.java b/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/administration/UsersResource.java
index 7b3c6ba..3aa09fb 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/administration/UsersResource.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/administration/UsersResource.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.rest.resource.administration;
 
 import org.qi4j.api.query.Query;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/forum/BoardResource.java b/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/forum/BoardResource.java
index e84f53e..f408927 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/forum/BoardResource.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/forum/BoardResource.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.rest.resource.forum;
 
 import org.qi4j.library.rest.server.api.ContextResource;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/forum/ForumResource.java b/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/forum/ForumResource.java
index a5aa760..36864d7 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/forum/ForumResource.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/forum/ForumResource.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.rest.resource.forum;
 
 import org.qi4j.library.rest.server.api.ContextResource;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/forum/ForumsResource.java b/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/forum/ForumsResource.java
index 384e037..c48a28a 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/forum/ForumsResource.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/forum/ForumsResource.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.rest.resource.forum;
 
 import org.qi4j.library.rest.server.api.ContextResource;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/login/LoginResource.java b/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/login/LoginResource.java
index 5509f3d..76c4457 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/login/LoginResource.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/login/LoginResource.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.rest.resource.login;
 
 import org.qi4j.library.rest.server.api.ContextResource;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/signup/SignupResource.java b/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/signup/SignupResource.java
index 713ea2e..69a341a 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/signup/SignupResource.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/rest/resource/signup/SignupResource.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.rest.resource.signup;
 
 import org.qi4j.library.rest.server.api.ContextResource;
diff --git a/samples/forum/src/main/java/org/qi4j/samples/forum/service/BootstrapData.java b/samples/forum/src/main/java/org/qi4j/samples/forum/service/BootstrapData.java
index 8776a00..6800e6b 100644
--- a/samples/forum/src/main/java/org/qi4j/samples/forum/service/BootstrapData.java
+++ b/samples/forum/src/main/java/org/qi4j/samples/forum/service/BootstrapData.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.service;
 
 import org.qi4j.api.activation.ActivatorAdapter;
diff --git a/samples/forum/src/main/webapp/WEB-INF/web.xml b/samples/forum/src/main/webapp/WEB-INF/web.xml
index e69de29..a8f6a82 100644
--- a/samples/forum/src/main/webapp/WEB-INF/web.xml
+++ b/samples/forum/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,16 @@
+<!--
+  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.
+-->
diff --git a/samples/forum/src/test/java/org/qi4j/samples/forum/web/Main.java b/samples/forum/src/test/java/org/qi4j/samples/forum/web/Main.java
index 623ac12..298e66e 100644
--- a/samples/forum/src/test/java/org/qi4j/samples/forum/web/Main.java
+++ b/samples/forum/src/test/java/org/qi4j/samples/forum/web/Main.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.samples.forum.web;
 
 import org.qi4j.api.structure.Application;
diff --git a/samples/rental/build.gradle b/samples/rental/build.gradle
index 766876a..6044b2b 100644
--- a/samples/rental/build.gradle
+++ b/samples/rental/build.gradle
@@ -1,3 +1,22 @@
+/*
+ * 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.
+ */
+
 description = "Sample of implementation of a Car Rental application."
 
 apply plugin: 'war'
@@ -8,7 +27,7 @@
 // And then go to:
 //      http://localhost:8080/org.qi4j.sample.rental/rental/main
 
-jar { manifest { name = "Qi4j Sample - Car Rental" }}
+jar { manifest { name = "Apache Zest™ Sample - Car Rental" }}
 
 dependencies {
 
diff --git a/samples/rental/src/main/java/org/qi4j/sample/rental/web/QuikitServlet.java b/samples/rental/src/main/java/org/qi4j/sample/rental/web/QuikitServlet.java
index 0c4a1dc..f43328b 100644
--- a/samples/rental/src/main/java/org/qi4j/sample/rental/web/QuikitServlet.java
+++ b/samples/rental/src/main/java/org/qi4j/sample/rental/web/QuikitServlet.java
@@ -108,7 +108,7 @@
         }
         catch( Exception e )
         {
-            throw new ServletException( "Can not initialize Qi4j.", e );
+            throw new ServletException( "Can not initialize Zest.", e );
         }
     }
 
@@ -150,7 +150,7 @@
         }
         catch( Exception e )
         {
-            throw new RuntimeException( "Problem to passivate Qi4j", e );
+            throw new RuntimeException( "Problem to passivate Zest", e );
         }
     }
 
diff --git a/samples/rental/src/main/resources/org/qi4j/sample/rental/index.html b/samples/rental/src/main/resources/org/qi4j/sample/rental/index.html
index e69de29..a8f6a82 100644
--- a/samples/rental/src/main/resources/org/qi4j/sample/rental/index.html
+++ b/samples/rental/src/main/resources/org/qi4j/sample/rental/index.html
@@ -0,0 +1,16 @@
+<!--
+  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.
+-->
diff --git a/samples/rental/src/main/resources/org/qi4j/sample/rental/web/BookingPage.html b/samples/rental/src/main/resources/org/qi4j/sample/rental/web/BookingPage.html
index c5407fe..e777524 100644
--- a/samples/rental/src/main/resources/org/qi4j/sample/rental/web/BookingPage.html
+++ b/samples/rental/src/main/resources/org/qi4j/sample/rental/web/BookingPage.html
@@ -1,3 +1,19 @@
+<!--
+  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.
+-->
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"
       xmlns:qi="http://www.qi4j.org/ns/2009/quikit"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
diff --git a/samples/rental/src/main/resources/org/qi4j/sample/rental/web/MainPage.html b/samples/rental/src/main/resources/org/qi4j/sample/rental/web/MainPage.html
index 210a42d..a86b8ad 100644
--- a/samples/rental/src/main/resources/org/qi4j/sample/rental/web/MainPage.html
+++ b/samples/rental/src/main/resources/org/qi4j/sample/rental/web/MainPage.html
@@ -1,4 +1,20 @@
 <?xml version="1.0" ?>
+<!--
+  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.
+-->
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"
       xmlns:qi="http://www.qi4j.org/ns/2009/quikit"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
diff --git a/samples/rental/src/main/resources/resolve.properties b/samples/rental/src/main/resources/resolve.properties
index def6598..0184c5d 100644
--- a/samples/rental/src/main/resources/resolve.properties
+++ b/samples/rental/src/main/resources/resolve.properties
@@ -1,2 +1,17 @@
+# 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.
+
 http\://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd=xhtml1-strict.xsd
 http\://www.w3.org/2001/xml.xsd=xml.xsd
\ No newline at end of file
diff --git a/samples/rental/src/main/webapp/WEB-INF/web.xml b/samples/rental/src/main/webapp/WEB-INF/web.xml
index ea6025e..67a2248 100644
--- a/samples/rental/src/main/webapp/WEB-INF/web.xml
+++ b/samples/rental/src/main/webapp/WEB-INF/web.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
 <web-app xmlns="http://java.sun.com/xml/ns/javaee"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
diff --git a/samples/sql-support/build.gradle b/samples/sql-support/build.gradle
index a7044c8..21eba5b 100644
--- a/samples/sql-support/build.gradle
+++ b/samples/sql-support/build.gradle
@@ -1,6 +1,25 @@
+/*
+ * 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.
+ */
+
 description = "SQL Support Sample."
 
-jar { manifest { name = "Qi4j Sample - SQL Support" }}
+jar { manifest { name = "Apache Zest™ Sample - SQL Support" }}
 
 dependencies {
 
@@ -12,7 +31,7 @@
 
     runtime project(":org.qi4j.core:org.qi4j.core.runtime")
     runtime libraries.postgres
-    runtime libraries.logback
+    runtime libraries.slf4j_simple
 
 }
 
diff --git a/samples/sql-support/src/main/java/org/qi4j/sample/sqlsupport/Main.java b/samples/sql-support/src/main/java/org/qi4j/sample/sqlsupport/Main.java
index 9eed9c7..bf529a7 100644
--- a/samples/sql-support/src/main/java/org/qi4j/sample/sqlsupport/Main.java
+++ b/samples/sql-support/src/main/java/org/qi4j/sample/sqlsupport/Main.java
@@ -60,7 +60,7 @@
                 try {
                     application.passivate();
                 } catch ( Exception ex ) {
-                    System.err.println( "Unable to passivate Qi4j application!" );
+                    System.err.println( "Unable to passivate Zest application!" );
                     ex.printStackTrace();
                 }
             }
diff --git a/samples/sql-support/src/main/resources/entitystore-postgresql.properties b/samples/sql-support/src/main/resources/entitystore-postgresql.properties
index 9b73610..ea8d622 100644
--- a/samples/sql-support/src/main/resources/entitystore-postgresql.properties
+++ b/samples/sql-support/src/main/resources/entitystore-postgresql.properties
@@ -1,2 +1,17 @@
+# 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.
+
 
 schemaName=sql_sample_entitystore
diff --git a/samples/sql-support/src/main/resources/indexing-sql.properties b/samples/sql-support/src/main/resources/indexing-sql.properties
index db8ea8f..83c837a 100644
--- a/samples/sql-support/src/main/resources/indexing-sql.properties
+++ b/samples/sql-support/src/main/resources/indexing-sql.properties
@@ -1,2 +1,17 @@
+# 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.
+
 
 schemaName=sql_sample_indexing
diff --git a/samples/sql-support/src/main/resources/logback.xml b/samples/sql-support/src/main/resources/logback.xml
deleted file mode 100644
index 98adf3d..0000000
--- a/samples/sql-support/src/main/resources/logback.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<configuration>
-
-    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
-        <layout class="ch.qos.logback.classic.PatternLayout">
-            <Pattern>[@%-10thread] %-5level %logger{42} - %msg%n</Pattern>
-        </layout>
-    </appender>
-
-    <root level="warn">
-        <appender-ref ref="stdout" />
-    </root>
-
-    <!-- SQL Support -->
-    <logger name="org.qi4j.library.sql" level="warn"/>
-
-    <!-- SQL EntityStore -->
-    <logger name="org.qi4j.entitystore.sql" level="warn"/>
-    <!-- Put this one to trace level to see all SQL strings -->
-    <logger name="org.qi4j.entitystore.sql.internal.database.DatabaseSQLStringsBuilder" level="warn"/>
-
-    <!-- SQL Index/Query -->
-    <logger name="org.qi4j.index.sql" level="warn"/>
-
-</configuration>
\ No newline at end of file
diff --git a/samples/sql-support/src/main/resources/postgresql-es-datasource.properties b/samples/sql-support/src/main/resources/postgresql-es-datasource.properties
index a906d84..f7d7ad5 100644
--- a/samples/sql-support/src/main/resources/postgresql-es-datasource.properties
+++ b/samples/sql-support/src/main/resources/postgresql-es-datasource.properties
@@ -1,3 +1,18 @@
+# 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.
+
 enabled=true
 url=jdbc:postgresql://localhost:5432/jdbc_test_db
 driver=org.postgresql.Driver
diff --git a/samples/sql-support/src/main/resources/postgresql-index-datasource.properties b/samples/sql-support/src/main/resources/postgresql-index-datasource.properties
index a906d84..f7d7ad5 100644
--- a/samples/sql-support/src/main/resources/postgresql-index-datasource.properties
+++ b/samples/sql-support/src/main/resources/postgresql-index-datasource.properties
@@ -1,3 +1,18 @@
+# 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.
+
 enabled=true
 url=jdbc:postgresql://localhost:5432/jdbc_test_db
 driver=org.postgresql.Driver
diff --git a/samples/struts2Hello/build.gradle b/samples/struts2Hello/build.gradle
deleted file mode 100644
index 9ba2559..0000000
--- a/samples/struts2Hello/build.gradle
+++ /dev/null
@@ -1,18 +0,0 @@
-description = "Sample of how to use the Struts2 integration."
-
-jar { manifest { name = "Qi4j Sample - Struts2" }}
-
-dependencies {
-  compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
-  compile(project(":org.qi4j.libraries:org.qi4j.library.struts2-plugin"))
-  compile(project(":org.qi4j.libraries:org.qi4j.library.struts2-codebehind"))
-  compile(project(":org.qi4j.extensions:org.qi4j.extension.indexing-rdf"))
-  compile(project(":org.qi4j.libraries:org.qi4j.library.constraints"))
-  compile(project(":org.qi4j.libraries:org.qi4j.library.rdf"))
-  compile(libraries.jetty_webapp)
-
-  testCompile(project(":org.qi4j.core:org.qi4j.core.testsupport"))
-
-  testRuntime(project(":org.qi4j.core:org.qi4j.core.runtime"))
-  testRuntime(libraries.logback)
-}
diff --git a/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/Item.java b/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/Item.java
deleted file mode 100644
index 468a48a..0000000
--- a/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/Item.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package org.qi4j.library.struts2.example;
-
-import org.qi4j.api.entity.EntityComposite;
-
-public interface Item
-    extends Nameable, EntityComposite
-{
-}
diff --git a/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/JettyLauncher.java b/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/JettyLauncher.java
deleted file mode 100644
index 6f10b29..0000000
--- a/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/JettyLauncher.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package org.qi4j.library.struts2.example;
-
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.server.ServerConnector;
-import org.eclipse.jetty.webapp.WebAppContext;
-
-public class JettyLauncher
-{
-
-    public static void main( String[] args )
-    {
-        Server server = new Server();
-
-        ServerConnector connector = new ServerConnector( server );
-        connector.setPort( 8080 );
-        server.addConnector( connector );
-
-        WebAppContext web = new WebAppContext( server, "struts2.example", "/example" );
-        web.setWar( "libraries/struts2/example/src/main/webapp/" );
-
-        try
-        {
-            server.start();
-            server.join();
-        }
-        catch( Exception e )
-        {
-            e.printStackTrace();
-            System.exit( 100 );
-        }
-    }
-}
diff --git a/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/Nameable.java b/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/Nameable.java
deleted file mode 100644
index f2a533a..0000000
--- a/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/Nameable.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.qi4j.library.struts2.example;
-
-import org.qi4j.api.property.Property;
-
-public interface Nameable
-{
-
-    Property<String> name();
-}
diff --git a/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/actions/AddItem.java b/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/actions/AddItem.java
deleted file mode 100644
index 700ce72..0000000
--- a/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/actions/AddItem.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.qi4j.library.struts2.example.actions;
-
-import org.apache.struts2.config.Result;
-import org.apache.struts2.config.Results;
-import org.apache.struts2.dispatcher.ServletActionRedirectResult;
-import org.qi4j.api.composite.Composite;
-import org.qi4j.api.mixin.Mixins;
-import org.qi4j.library.struts2.example.Item;
-import org.qi4j.library.struts2.support.add.ProvidesAddingOf;
-import org.qi4j.library.struts2.support.add.ProvidesAddingOfMixin;
-
-@Results( {
-    @Result( name = "input", value = "/jsp/addItem.jsp" ),
-    @Result( name = "error", value = "/jsp/addItem.jsp" ),
-    @Result( name = "success", value = "listItems", type = ServletActionRedirectResult.class )
-} )
-@Mixins( ProvidesAddingOfMixin.class )
-public interface AddItem
-    extends ProvidesAddingOf<Item>, Composite
-{
-}
diff --git a/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/actions/EditItem.java b/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/actions/EditItem.java
deleted file mode 100644
index dc77b4a..0000000
--- a/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/actions/EditItem.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.qi4j.library.struts2.example.actions;
-
-import com.opensymphony.xwork2.ActionSupport;
-import org.apache.struts2.config.Result;
-import org.apache.struts2.config.Results;
-import org.apache.struts2.dispatcher.ServletActionRedirectResult;
-import org.qi4j.api.composite.Composite;
-import org.qi4j.api.mixin.Mixins;
-import org.qi4j.library.struts2.example.Item;
-import org.qi4j.library.struts2.support.ProvidesEntityOfMixin;
-import org.qi4j.library.struts2.support.edit.ProvidesEditingOf;
-import org.qi4j.library.struts2.support.edit.ProvidesEditingOfMixin;
-
-@Results( {
-    @Result( name = "input", value = "/jsp/editItem.jsp" ),
-    @Result( name = "error", value = "/jsp/editItem.jsp" ),
-    @Result( name = "success", value = "listItems", type = ServletActionRedirectResult.class )
-} )
-@Mixins( { ProvidesEditingOfMixin.class, ProvidesEntityOfMixin.class, ActionSupport.class } )
-public interface EditItem
-    extends ProvidesEditingOf<Item>, Composite
-{
-}
diff --git a/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/actions/HelloWorldAction.java b/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/actions/HelloWorldAction.java
deleted file mode 100644
index 9805936..0000000
--- a/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/actions/HelloWorldAction.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * $Id: RequestUtils.java 394468 2006-04-16 12:16:03Z tmjee $
- *
- * Copyright 2006 The Apache Software Foundation.
- *
- * Licensed 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.qi4j.library.struts2.example.actions;
-
-import com.opensymphony.xwork2.ActionSupport;
-import com.opensymphony.xwork2.conversion.annotations.Conversion;
-import com.opensymphony.xwork2.conversion.annotations.TypeConversion;
-import com.opensymphony.xwork2.validator.annotations.RequiredFieldValidator;
-import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;
-import com.opensymphony.xwork2.validator.annotations.Validation;
-import org.apache.struts2.config.Result;
-import org.apache.struts2.config.Results;
-
-import java.util.Date;
-
-@Validation
-@Conversion
-@Results( { @Result( name = "input", value = "/jsp/index.jsp" ), @Result( value = "/jsp/helloWorld.jsp" ) } )
-public class HelloWorldAction
-    extends ActionSupport
-{
-
-    private static final long serialVersionUID = 1L;
-
-    private Date now;
-    private String name;
-
-    @TypeConversion( converter = "org.qi4j.library.struts2.example.converters.DateConverter" )
-    @RequiredFieldValidator( message = "Please enter the date" )
-    public void setDateNow( Date dateNow )
-    {
-        now = dateNow;
-    }
-
-    public Date getDateNow()
-    {
-        return now;
-    }
-
-    @RequiredStringValidator( message = "Please enter a name", trim = true )
-    public void setName( String userName )
-    {
-        name = userName;
-    }
-
-    public String getName()
-    {
-        return name;
-    }
-
-    @Override
-    public String execute()
-        throws Exception
-    {
-        return SUCCESS;
-    }
-}
diff --git a/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/actions/IndexAction.java b/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/actions/IndexAction.java
deleted file mode 100644
index 49a0c52..0000000
--- a/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/actions/IndexAction.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * $Id: RequestUtils.java 394468 2006-04-16 12:16:03Z tmjee $
- *
- * Copyright 2006 The Apache Software Foundation.
- *
- * Licensed 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.qi4j.library.struts2.example.actions;
-
-import com.opensymphony.xwork2.ActionSupport;
-import com.opensymphony.xwork2.conversion.annotations.Conversion;
-import com.opensymphony.xwork2.conversion.annotations.TypeConversion;
-import org.apache.struts2.config.Result;
-import org.qi4j.api.injection.scope.Structure;
-import org.qi4j.api.structure.Module;
-
-import java.util.Date;
-
-@Conversion
-@Result( value = "/jsp/index.jsp" )
-public class IndexAction
-    extends ActionSupport
-{
-
-    private static final long serialVersionUID = 1L;
-
-    @Structure
-    private Module module;
-
-    private Date now;
-
-    public IndexAction()
-    {
-        now = new Date();
-    }
-
-    @TypeConversion( converter = "org.qi4j.library.struts2.example.converters.DateConverter" )
-    public Date getDateNow()
-    {
-        return now;
-    }
-
-    public String getModuleName()
-    {
-        return module.name();
-    }
-
-    @Override
-    public String execute()
-        throws Exception
-    {
-        now = new Date();
-        return SUCCESS;
-    }
-}
diff --git a/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/actions/ListItems.java b/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/actions/ListItems.java
deleted file mode 100644
index e9a3a79..0000000
--- a/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/actions/ListItems.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.qi4j.library.struts2.example.actions;
-
-import org.apache.struts2.config.Result;
-import org.apache.struts2.config.Results;
-import org.qi4j.api.composite.Composite;
-import org.qi4j.api.mixin.Mixins;
-import org.qi4j.library.struts2.example.Item;
-import org.qi4j.library.struts2.support.list.ProvidesListOf;
-import org.qi4j.library.struts2.support.list.ProvidesListOfMixin;
-
-@Results( {
-    @Result( name = "success", value = "/jsp/listItems.jsp" )
-} )
-@Mixins( ProvidesListOfMixin.class )
-public interface ListItems
-    extends ProvidesListOf<Item>, Composite
-{
-}
diff --git a/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/converters/DateConverter.java b/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/converters/DateConverter.java
deleted file mode 100644
index 1a28fb3..0000000
--- a/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/converters/DateConverter.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * $Id: RequestUtils.java 394468 2006-04-16 12:16:03Z tmjee $
- *
- * Copyright 2006 The Apache Software Foundation.
- *
- * Licensed 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.qi4j.library.struts2.example.converters;
-
-import org.apache.struts2.util.StrutsTypeConverter;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Map;
-
-public class DateConverter
-    extends StrutsTypeConverter
-{
-    @Override
-    public final Object convertFromString( Map context, String[] values, Class toClass )
-    {
-        if( values != null && values.length > 0 && values[ 0 ] != null && values[ 0 ].length() > 0 )
-        {
-            SimpleDateFormat sdf = new SimpleDateFormat( "yyyy/MM/dd" );
-            try
-            {
-                return sdf.parse( values[ 0 ] );
-            }
-            catch( ParseException e )
-            {
-                throw new IllegalArgumentException( "Parse [" + values[ 0 ] + "] do date fail.", e );
-            }
-        }
-        return null;
-    }
-
-    @Override
-    public String convertToString( Map context, Object o )
-    {
-        if( o instanceof Date )
-        {
-            SimpleDateFormat sdf = new SimpleDateFormat( "yyyy/MM/dd" );
-            return sdf.format( (Date) o );
-        }
-        return "";
-    }
-}
-
diff --git a/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/listener/ExampleBootstrapListener.java b/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/listener/ExampleBootstrapListener.java
deleted file mode 100644
index dcb8d36..0000000
--- a/samples/struts2Hello/src/main/java/org/qi4j/library/struts2/example/listener/ExampleBootstrapListener.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*  Copyright 2008 Edward Yakop.
- *
- * Licensed 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.qi4j.library.struts2.example.listener;
-
-import org.qi4j.api.structure.Application;
-import org.qi4j.api.structure.Module;
-import org.qi4j.bootstrap.*;
-import org.qi4j.entitystore.memory.MemoryEntityStoreService;
-import org.qi4j.index.rdf.RdfIndexingEngineService;
-import org.qi4j.library.rdf.entity.EntityStateSerializer;
-import org.qi4j.library.rdf.repository.MemoryRepositoryService;
-import org.qi4j.library.struts2.ActionConfiguration;
-import org.qi4j.library.struts2.Qi4jApplicationBootstrapListener;
-import org.qi4j.library.struts2.bootstrap.Struts2PluginAssembler;
-import org.qi4j.library.struts2.codebehind.bootstrap.CodebehindAssembler;
-import org.qi4j.library.struts2.example.Item;
-import org.qi4j.library.struts2.example.actions.*;
-import org.qi4j.spi.uuid.UuidIdentityGeneratorService;
-
-/**
- * @author edward.yakop@gmail.com
- */
-public class ExampleBootstrapListener
-    extends Qi4jApplicationBootstrapListener
-{
-    @Override
-    protected final ApplicationAssembler createAssembler()
-    {
-        return new ApplicationAssembler()
-        {
-            public ApplicationAssembly assemble( ApplicationAssemblyFactory applicationFactory )
-                throws AssemblyException
-            {
-                return applicationFactory.newApplicationAssembly( new Assembler()
-                {
-                    public void assemble( ModuleAssembly aModule )
-                        throws AssemblyException
-                    {
-                        ActionConfiguration actionConfiguration = new ActionConfiguration();
-                        actionConfiguration.addObjects( HelloWorldAction.class, IndexAction.class );
-                        actionConfiguration.addComposites( AddItem.class, EditItem.class, ListItems.class );
-
-                        new Struts2PluginAssembler( actionConfiguration ).assemble( aModule );
-                        new CodebehindAssembler().assemble( aModule );
-
-                        aModule.entities( Item.class );
-                        aModule.services(
-                            MemoryEntityStoreService.class,
-                            UuidIdentityGeneratorService.class,
-                            MemoryRepositoryService.class,
-                            RdfIndexingEngineService.class
-                        );
-                        aModule.objects( EntityStateSerializer.class );
-                    }
-                } );
-            }
-        };
-    }
-
-    @Override
-    protected final Module qi4jStrutsModule( Application application )
-    {
-        return application.findModule( "Layer 1", "Module 1" );
-    }
-}
diff --git a/samples/struts2Hello/src/main/resources/log4j.properties b/samples/struts2Hello/src/main/resources/log4j.properties
deleted file mode 100644
index d973f20..0000000
--- a/samples/struts2Hello/src/main/resources/log4j.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-log4j.rootLogger = DEBUG, stdout
-
-log4j.category.com.opensymphony.sitemesh=DEBUG
-log4j.category.org.apache.struts2=INFO
-log4j.category.org.apache=INFO
-log4j.category.catalia=INFO
-
-log4j.appender.stdout = org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.Threshold = DEBUG
-log4j.appender.stdout.Target = System.out
-log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern = %d{ISO8601} %-5p [%F:%L] : %m%n
-
-
-
diff --git a/samples/struts2Hello/src/main/resources/struts.properties b/samples/struts2Hello/src/main/resources/struts.properties
deleted file mode 100644
index f802775..0000000
--- a/samples/struts2Hello/src/main/resources/struts.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-# struts.configuration=org.apache.struts2.config.DefaultConfiguration
-
-# struts.locale=en_US
-struts.i18n.encoding=UTF-8
-
-struts.objectFactory=qi4j
-struts.objectTypeDeterminer=tiger
-
-struts.mapper.class=org.apache.struts2.dispatcher.mapper.DefaultActionMapper
-
-# Make sure this is set to false during deployment
-# development mode
-struts.devMode = true
-struts.i18n.reload=true
-struts.configuration.xml.reload=true
-# end development mode
-
-#struts.url.http.port = 80
-#struts.url.https.port = 443
\ No newline at end of file
diff --git a/samples/struts2Hello/src/main/resources/struts.xml b/samples/struts2Hello/src/main/resources/struts.xml
deleted file mode 100644
index fd487b3..0000000
--- a/samples/struts2Hello/src/main/resources/struts.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<!DOCTYPE struts PUBLIC
-  "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-  "http://struts.apache.org/dtds/struts-2.0.dtd">
-<struts>
-  <constant name="struts.configuration.classpath.disableActionScanning" value="true"/>
-  <constant name="struts.configuration.classpath.defaultParentPackage" value="example-base"/>
-
-  <package name="example-base" extends="struts-default">
-    <interceptors>
-      <interceptor name="constraintViolation" class="org.qi4j.library.struts2.ConstraintViolationInterceptor"/>
-      <interceptor name="unitOfWork" class="org.qi4j.library.struts2.UnitOfWorkInterceptor"/>
-
-      <interceptor-stack name="exampleStack">
-        <interceptor-ref name="exception"/>
-        <interceptor-ref name="params"/>
-        <interceptor-ref name="servletConfig"/>
-        <interceptor-ref name="unitOfWork"/>
-        <interceptor-ref name="prepare"/>
-        <interceptor-ref name="i18n"/>
-        <interceptor-ref name="debugging"/>
-        <interceptor-ref name="profiling"/>
-        <interceptor-ref name="checkbox"/>
-        <interceptor-ref name="staticParams"/>
-        <interceptor-ref name="params"/>
-        <interceptor-ref name="conversionError"/>
-        <interceptor-ref name="constraintViolation"/>
-        <interceptor-ref name="validation">
-          <param name="excludeMethods">input,back,cancel,browse</param>
-        </interceptor-ref>
-        <interceptor-ref name="workflow">
-          <param name="excludeMethods">input,back,cancel,browse</param>
-        </interceptor-ref>
-      </interceptor-stack>
-    </interceptors>
-
-    <default-interceptor-ref name="exampleStack"/>
-
-    <default-action-ref name="index"/>
-  </package>
-</struts>
diff --git a/samples/struts2Hello/src/main/webapp/WEB-INF/decorators.xml b/samples/struts2Hello/src/main/webapp/WEB-INF/decorators.xml
deleted file mode 100644
index f630e64..0000000
--- a/samples/struts2Hello/src/main/webapp/WEB-INF/decorators.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<decorators defaultdir="/WEB-INF/decorators">
-  <!-- Any urls that are excluded will never be decorated by Sitemesh -->
-  <excludes>
-    <pattern>/nodecorate/*</pattern>
-    <pattern>/styles/*</pattern>
-    <pattern>/scripts/*</pattern>
-    <pattern>/images/*</pattern>
-    <pattern>/dojo/*</pattern>
-    <pattern>/struts/*</pattern>
-  </excludes>
-
-  <decorator name="main" page="main.jsp">
-    <pattern>/*</pattern>
-  </decorator>
-
-</decorators>
diff --git a/samples/struts2Hello/src/main/webapp/WEB-INF/decorators/main.jsp b/samples/struts2Hello/src/main/webapp/WEB-INF/decorators/main.jsp
deleted file mode 100644
index 426ff17..0000000
--- a/samples/struts2Hello/src/main/webapp/WEB-INF/decorators/main.jsp
+++ /dev/null
@@ -1,75 +0,0 @@
-<!DOCTYPE html PUBLIC

-"-//W3C//DTD XHTML 1.1 Transitional//EN"

-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

-

-<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

-<%@taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator" %>

-<%@taglib prefix="page" uri="http://www.opensymphony.com/sitemesh/page" %>

-<%@taglib prefix="s" uri="/struts-tags" %>

-

-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

-<head>

-    <title><decorator:title default="Struts Starter"/></title>

-    <link href="<s:url value='/styles/main.css'/>" rel="stylesheet" type="text/css" media="all"/>

-    <link href="<s:url value='/struts/niftycorners/niftyCorners.css'/>" rel="stylesheet" type="text/css"/>

-    <link href="<s:url value='/struts/niftycorners/niftyPrint.css'/>" rel="stylesheet" type="text/css" media="print"/>

-    <decorator:head/>

-</head>

-<body id="page-home">

-<div id="page">

-    <div id="header" class="clearfix">

-        HEADER

-        <hr/>

-    </div>

-

-    <div id="content" class="clearfix">

-        <div id="main">

-            <h3>Main Content</h3>

-            <decorator:body/>

-            <hr/>

-        </div>

-

-        <div id="sub">

-            <h3>Sub Content</h3>

-        </div>

-

-

-        <div id="local">

-            <h3>Local Nav. Bar</h3>

-            <ul>

-                <li><a href="#">Content page 1</a></li>

-                <li><a href="#">Content page 2</a></li>

-                <li><a href="#">Content page 3</a></li>

-                <li><a href="#">Content page 4</a></li>

-                <li><a href="#">Content page 5</a></li>

-                <li><a href="#">Content page 6</a></li>

-            </ul>

-        </div>

-

-

-        <div id="nav">

-            <div class="wrapper">

-                <h3>Nav. bar</h3>

-                <ul class="clearfix">

-                    <li><a href="#">Menu 1</a></li>

-                    <li><a href="#">Menu 2</a></li>

-                    <li><a href="#">Menu 3</a></li>

-                    <li><a href="#">Menu 4</a></li>

-                    <li><a href="#">Menu 5</a></li>

-                    <li class="last"><a href="#">Menu 6</a></li>

-                </ul>

-            </div>

-            <hr/>

-        </div>

-    </div>

-

-    <div id="footer" class="clearfix">

-        Footer

-    </div>

-

-</div>

-

-<div id="extra1">&nbsp;</div>

-<div id="extra2">&nbsp;</div>

-</body>

-</html>

diff --git a/samples/struts2Hello/src/main/webapp/WEB-INF/dwr.xml b/samples/struts2Hello/src/main/webapp/WEB-INF/dwr.xml
deleted file mode 100644
index 912f1b7..0000000
--- a/samples/struts2Hello/src/main/webapp/WEB-INF/dwr.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd">
-<dwr>
-  <allow>
-    <create creator="new" javascript="validator">
-      <param name="class" value="org.apache.struts2.validators.DWRValidator"/>
-    </create>
-    <convert converter="bean" match="com.opensymphony.xwork2.ValidationAwareSupport"/>
-  </allow>
-
-  <signatures>
-    <![CDATA[
-        import java.util.Map;
-        import org.apache.struts2.validators.DWRValidator;
-
-        DWRValidator.doPost(String, String, Map<String, String>);
-        ]]>
-  </signatures>
-</dwr>
diff --git a/samples/struts2Hello/src/main/webapp/WEB-INF/sitemesh.xml b/samples/struts2Hello/src/main/webapp/WEB-INF/sitemesh.xml
deleted file mode 100644
index 6aac707..0000000
--- a/samples/struts2Hello/src/main/webapp/WEB-INF/sitemesh.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<sitemesh>
-  <property name="decorators-file" value="/WEB-INF/decorators.xml"/>
-  <excludes file="${decorators-file}"/>
-
-  <page-parsers>
-    <parser content-type="text/html" class="com.opensymphony.module.sitemesh.parser.FastPageParser"/>
-  </page-parsers>
-
-  <decorator-mappers>
-
-    <mapper class="com.opensymphony.module.sitemesh.mapper.PageDecoratorMapper">
-      <param name="property.1" value="meta.decorator"/>
-      <param name="property.2" value="decorator"/>
-    </mapper>
-
-    <mapper class="com.opensymphony.module.sitemesh.mapper.FrameSetDecoratorMapper">
-    </mapper>
-
-    <mapper class="com.opensymphony.module.sitemesh.mapper.AgentDecoratorMapper">
-      <param name="match.MSIE" value="ie"/>
-      <param name="match.Mozilla [" value="ns"/>
-      <param name="match.Opera" value="opera"/>
-      <param name="match.Lynx" value="lynx"/>
-    </mapper>
-
-    <mapper class="com.opensymphony.module.sitemesh.mapper.PrintableDecoratorMapper">
-      <param name="decorator" value="printable"/>
-      <param name="parameter.name" value="printable"/>
-      <param name="parameter.value" value="true"/>
-    </mapper>
-
-    <mapper class="com.opensymphony.module.sitemesh.mapper.RobotDecoratorMapper">
-      <param name="decorator" value="robot"/>
-    </mapper>
-
-    <mapper class="com.opensymphony.module.sitemesh.mapper.ParameterDecoratorMapper">
-      <param name="decorator.parameter" value="decorator"/>
-      <param name="parameter.name" value="confirm"/>
-      <param name="parameter.value" value="true"/>
-    </mapper>
-
-    <mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">
-      <param name="config" value="${decorators-file}"/>
-    </mapper>
-
-  </decorator-mappers>
-
-</sitemesh>
diff --git a/samples/struts2Hello/src/main/webapp/WEB-INF/web.xml b/samples/struts2Hello/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index ebb60d0..0000000
--- a/samples/struts2Hello/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<web-app id="starter" version="2.4"
-         xmlns="http://java.sun.com/xml/ns/j2ee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-
-  <display-name>Qi4j - Struts 2 Example</display-name>
-
-  <!-- Listeners -->
-  <listener>
-    <listener-class>org.qi4j.library.struts2.example.listener.ExampleBootstrapListener</listener-class>
-  </listener>
-
-  <!-- Filters -->
-  <filter>
-    <filter-name>action2-cleanup</filter-name>
-    <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
-  </filter>
-  <filter>
-    <filter-name>sitemesh</filter-name>
-    <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
-  </filter>
-  <filter>
-    <filter-name>action2</filter-name>
-    <filter-class>org.qi4j.library.struts2.Qi4jFilterDispatcher</filter-class>
-    <init-param>
-      <param-name>actionPackages</param-name>
-      <param-value>org.qi4j.library.struts2.example.actions</param-value>
-    </init-param>
-  </filter>
-
-  <filter-mapping>
-    <filter-name>action2-cleanup</filter-name>
-    <url-pattern>/*</url-pattern>
-  </filter-mapping>
-  <filter-mapping>
-    <filter-name>sitemesh</filter-name>
-    <url-pattern>/*</url-pattern>
-  </filter-mapping>
-  <filter-mapping>
-    <filter-name>action2</filter-name>
-    <url-pattern>/*</url-pattern>
-  </filter-mapping>
-
-  <!-- Servlets -->
-  <servlet>
-    <servlet-name>dwr</servlet-name>
-    <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
-    <init-param>
-      <param-name>debug</param-name>
-      <param-value>true</param-value>
-    </init-param>
-  </servlet>
-  <servlet>
-    <servlet-name>jspSupportServlet</servlet-name>
-    <servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class>
-    <load-on-startup>5</load-on-startup>
-  </servlet>
-
-  <servlet-mapping>
-    <servlet-name>dwr</servlet-name>
-    <url-pattern>/dwr/*</url-pattern>
-  </servlet-mapping>
-
-  <!-- Welcome file lists -->
-  <welcome-file-list>
-    <welcome-file>index.jsp</welcome-file>
-  </welcome-file-list>
-</web-app>
diff --git a/samples/struts2Hello/src/main/webapp/index.jsp b/samples/struts2Hello/src/main/webapp/index.jsp
deleted file mode 100644
index 7be3471..0000000
--- a/samples/struts2Hello/src/main/webapp/index.jsp
+++ /dev/null
@@ -1 +0,0 @@
-<% response.sendRedirect( "index.action" ); %>
diff --git a/samples/struts2Hello/src/main/webapp/jsp/addItem.jsp b/samples/struts2Hello/src/main/webapp/jsp/addItem.jsp
deleted file mode 100644
index 528821d..0000000
--- a/samples/struts2Hello/src/main/webapp/jsp/addItem.jsp
+++ /dev/null
@@ -1,15 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-    <title>Add Item</title>
-</head>
-<body>
-<s:actionmessage/>
-<s:form>
-    <s:textfield name="state.name"/>
-    <s:submit/>
-</s:form>
-</body>
-</html>
-
diff --git a/samples/struts2Hello/src/main/webapp/jsp/editItem.jsp b/samples/struts2Hello/src/main/webapp/jsp/editItem.jsp
deleted file mode 100644
index 0b46cab..0000000
--- a/samples/struts2Hello/src/main/webapp/jsp/editItem.jsp
+++ /dev/null
@@ -1,15 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-    <title>Edit Item</title>
-</head>
-<body>
-<s:form>
-    <s:textfield name="entity.name"/>
-    <s:hidden name="id"/>
-    <s:submit/>
-</s:form>
-</body>
-</html>
-
diff --git a/samples/struts2Hello/src/main/webapp/jsp/helloWorld.jsp b/samples/struts2Hello/src/main/webapp/jsp/helloWorld.jsp
deleted file mode 100644
index aa3053a..0000000
--- a/samples/struts2Hello/src/main/webapp/jsp/helloWorld.jsp
+++ /dev/null
@@ -1,15 +0,0 @@
-<!DOCTYPE html PUBLIC

-"-//W3C//DTD XHTML 1.1 Transitional//EN"

-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

-

-<%@taglib prefix="s" uri="/struts-tags" %>

-

-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

-<head>

-    <title>Hello World</title>

-    <s:head/>

-</head>

-<body>

-<span>Hello <s:property value="name"/>, today is <s:property value="dateNow"/></span><br/>

-</body>

-</html>

diff --git a/samples/struts2Hello/src/main/webapp/jsp/index.jsp b/samples/struts2Hello/src/main/webapp/jsp/index.jsp
deleted file mode 100644
index 57deb2c..0000000
--- a/samples/struts2Hello/src/main/webapp/jsp/index.jsp
+++ /dev/null
@@ -1,17 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

-<%@taglib prefix="s" uri="/struts-tags" %>

-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

-<head>

-    <title>Index</title>

-    <s:head/>

-</head>

-<body>

-<s:form action="helloWorld">

-    <s:textfield label="Qi4j-Module name" name="moduleName" disabled="true"/>

-    <s:textfield label="What is your name?" name="name"/>

-    <s:textfield label="What is the date?" name="dateNow"/>

-    <s:submit/>

-</s:form>

-</body>

-</html>

-	
\ No newline at end of file
diff --git a/samples/struts2Hello/src/main/webapp/jsp/listItems.jsp b/samples/struts2Hello/src/main/webapp/jsp/listItems.jsp
deleted file mode 100644
index 02d843c..0000000
--- a/samples/struts2Hello/src/main/webapp/jsp/listItems.jsp
+++ /dev/null
@@ -1,20 +0,0 @@
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
-    <title>Item List</title>
-</head>
-<body>
-Items:
-<ul>
-    <s:iterator value="list().iterator()">
-        <li>
-            <s:property value="name()"/>
-            <a href="<s:url action="editItem" method="input"><s:param name="id" value="identity().get()" /></s:url>">Edit</a>
-        </li>
-    </s:iterator>
-</ul>
-<a href="<s:url action="addItem" method="input" />">Add</a>
-</body>
-</html>
-
diff --git a/samples/struts2Hello/src/main/webapp/styles/forms.css b/samples/struts2Hello/src/main/webapp/styles/forms.css
deleted file mode 100644
index c795405..0000000
--- a/samples/struts2Hello/src/main/webapp/styles/forms.css
+++ /dev/null
@@ -1,133 +0,0 @@
-/* A CSS Framework by Mike Stenhouse of Content with Style */

-

-/* FORM ELEMENTS */

-form

-{

-    margin: 0;

-    padding: 0;

-}

-

-form div,

-form p

-{

-    font-size: 1em;

-    margin: 0 0 1em 0;

-    padding: 0;

-}

-

-label

-{

-    font-weight: bold;

-}

-

-fieldset

-{

-    border: 1px solid #eee;

-    padding: 5px 10px;

-    margin: 0 0 1.5em 0;

-}

-

-fieldset legend

-{

-    color: #666;

-    font-size: 1.1em;

-    font-weight: bold;

-    margin: 0 0 0 0px;

-    padding: 0;

-    background-color: white;

-}

-

-* html fieldset legend

-{

-    margin: 0 0 10px -10px;

-}

-

-fieldset ul

-{

-    list-style: none;

-    margin: 0 0 1.5em 0;

-    padding: 0;

-}

-

-fieldset ul li

-{

-    list-style: none;

-    margin: 0 0 0.5em 0;

-    padding: 0;

-}

-

-input, select, textarea

-{

-    font-size: 1em;

-    font-family: arial, helvetica, verdana, sans-serif;

-

-    margin: 0;

-    padding: 2px;

-}

-

-input, select

-{

-    vertical-align: middle;

-}

-

-textarea

-{

-    width: 200px;

-    height: 8em;

-}

-

-input.check

-{

-    border: none;

-    width: auto;

-    height: auto;

-    margin: 0;

-}

-

-input.radio

-{

-    border: none;

-    width: auto;

-    height: auto;

-    margin: 0;

-}

-

-input.file

-{

-    height: auto;

-    width: 250px;

-}

-

-input.readonly

-{

-    background-color: transparent;

-    border: none;

-}

-

-input.button

-{

-    width: 10em;

-    border: 1px solid black;

-    background-color: #ddd;

-}

-

-input.image

-{

-    border: none;

-    width: auto;

-    height: auto;

-}

-

-form div.submit

-{

-    margin: 1em 0;

-}

-

-form div.submit input

-{

-    height: 2em;

-    width: 15em;

-}

-

-/* END FORM ELEMENTS */

-		
\ No newline at end of file
diff --git a/samples/struts2Hello/src/main/webapp/styles/layout-1col.css b/samples/struts2Hello/src/main/webapp/styles/layout-1col.css
deleted file mode 100644
index 3e4ae06..0000000
--- a/samples/struts2Hello/src/main/webapp/styles/layout-1col.css
+++ /dev/null
@@ -1,37 +0,0 @@
-/* A CSS Framework by Mike Stenhouse of Content with Style */

-

-@import url("nav-horizontal.css");

-

-/* NAV BAR AT THE TOP AND ONE COLUMN OF CONTENT */

-div#content

-{

-    position: relative;

-    width: 701px;

-

-    margin: 0 auto 20px auto;

-    padding: 0;

-

-    text-align: left;

-}

-

-div#main

-{

-    width: 100%;

-}

-

-div#local

-{

-    display: none;

-}

-

-div#sub

-{

-    display: none;

-}

-

-div#nav

-{

-    display: none;

-}

-

-/* END CONTENT */
\ No newline at end of file
diff --git a/samples/struts2Hello/src/main/webapp/styles/layout-navleft-1col.css b/samples/struts2Hello/src/main/webapp/styles/layout-navleft-1col.css
deleted file mode 100644
index 34aa873..0000000
--- a/samples/struts2Hello/src/main/webapp/styles/layout-navleft-1col.css
+++ /dev/null
@@ -1,41 +0,0 @@
-/* A CSS Framework by Mike Stenhouse of Content with Style */

-

-@import url("nav-vertical.css");

-

-/* NAV BAR ON THE LEFT AND ONE COLUMN OF CONTENT */

-div#content

-{

-    position: relative;

-    width: 780px;

-

-    margin: 0 auto 20px auto;

-    padding: 0;

-

-    text-align: left;

-}

-

-div#main

-{

-    float: right;

-    width: 560px;

-    display: inline;

-}

-

-div#local

-{

-    display: none;

-}

-

-div#sub

-{

-    display: none;

-}

-

-div#nav

-{

-    float: left;

-    width: 200px;

-    display: inline;

-}

-

-/* END CONTENT */
\ No newline at end of file
diff --git a/samples/struts2Hello/src/main/webapp/styles/layout-navleft-2col.css b/samples/struts2Hello/src/main/webapp/styles/layout-navleft-2col.css
deleted file mode 100644
index 1dc0f56..0000000
--- a/samples/struts2Hello/src/main/webapp/styles/layout-navleft-2col.css
+++ /dev/null
@@ -1,49 +0,0 @@
-/* A CSS Framework by Mike Stenhouse of Content with Style */

-

-@import url("nav-vertical.css");

-

-/* NAV BAR ON THE LEFT AND TWO COLUMNS OF CONTENT */

-div#content

-{

-    position: relative;

-    width: 780px;

-

-    margin: 0 auto 20px auto;

-    padding: 0;

-

-    text-align: left;

-}

-

-div#main

-{

-    float: right;

-    width: 340px;

-    display: inline;

-

-    margin-right: 220px;

-    margin-left: -220px;

-}

-

-div#local

-{

-    display: none;

-}

-

-div#sub

-{

-    float: right;

-    width: 200px;

-    display: inline;

-

-    margin-right: -340px;

-    margin-left: 200px;

-}

-

-div#nav

-{

-    float: left;

-    width: 200px;

-    display: inline;

-}

-

-/* END CONTENT */
\ No newline at end of file
diff --git a/samples/struts2Hello/src/main/webapp/styles/layout-navtop-1col.css b/samples/struts2Hello/src/main/webapp/styles/layout-navtop-1col.css
deleted file mode 100644
index 697bcb9..0000000
--- a/samples/struts2Hello/src/main/webapp/styles/layout-navtop-1col.css
+++ /dev/null
@@ -1,42 +0,0 @@
-/* A CSS Framework by Mike Stenhouse of Content with Style */

-

-@import url("nav-horizontal.css");

-

-/* NAV BAR AT THE TOP AND ONE COLUMN OF CONTENT */

-div#content

-{

-    position: relative;

-    width: 701px;

-

-    margin: 0 auto 20px auto;

-    padding: 0;

-

-    text-align: left;

-}

-

-div#main

-{

-    width: 100%;

-}

-

-div#local

-{

-    width: 100%;

-}

-

-div#sub

-{

-    width: 100%;

-}

-

-div#nav

-{

-    position: absolute;

-    top: -15px;

-    left: 0;

-    width: 100%;

-

-    text-align: left;

-}

-

-/* END CONTENT */
\ No newline at end of file
diff --git a/samples/struts2Hello/src/main/webapp/styles/layout-navtop-3col.css b/samples/struts2Hello/src/main/webapp/styles/layout-navtop-3col.css
deleted file mode 100644
index 7e4ac6f..0000000
--- a/samples/struts2Hello/src/main/webapp/styles/layout-navtop-3col.css
+++ /dev/null
@@ -1,53 +0,0 @@
-/* A CSS Framework by Mike Stenhouse of Content with Style */

-

-@import url("nav-horizontal.css");

-

-/* NAV BAR AT THE TOP, LOCAL NAV ON THE LEFT AND TWO COLUMNS OF CONTENT */

-div#content

-{

-    position: relative;

-    width: 701px;

-

-    margin: 0 auto 20px auto;

-    padding: 0;

-

-    text-align: left;

-}

-

-div#main

-{

-    float: left;

-    width: 300px;

-    display: inline;

-

-    margin-right: -200px;

-    margin-left: 200px;

-}

-

-div#sub

-{

-    float: right;

-    width: 180px;

-    display: inline;

-}

-

-div#local

-{

-    float: left;

-    width: 180px;

-    display: inline;

-

-    margin-left: -300px;

-}

-

-div#nav

-{

-    position: absolute;

-    top: -15px;

-    left: 0;

-    width: 701px;

-

-    text-align: left;

-}

-

-/* END CONTENT */
\ No newline at end of file
diff --git a/samples/struts2Hello/src/main/webapp/styles/layout-navtop-localleft.css b/samples/struts2Hello/src/main/webapp/styles/layout-navtop-localleft.css
deleted file mode 100644
index 92f56de..0000000
--- a/samples/struts2Hello/src/main/webapp/styles/layout-navtop-localleft.css
+++ /dev/null
@@ -1,46 +0,0 @@
-/* A CSS Framework by Mike Stenhouse of Content with Style */

-

-@import url("nav-horizontal.css");

-

-/* NAV BAR AT THE TOP, LOCAL NAVIGATION ON THE LEFT AND ONE COLUMN OF CONTENT */

-div#content

-{

-    position: relative;

-    width: 701px;

-

-    margin: 0 auto 20px auto;

-    padding: 0;

-

-    text-align: left;

-}

-

-div#main

-{

-    float: right;

-    width: 500px;

-    display: inline;

-}

-

-div#local

-{

-    float: left;

-    width: 200px;

-    display: inline;

-}

-

-div#sub

-{

-    display: none;

-}

-

-div#nav

-{

-    position: absolute;

-    top: -15px;

-    left: 0;

-    width: 100%;

-

-    text-align: left;

-}

-

-/* END CONTENT */
\ No newline at end of file
diff --git a/samples/struts2Hello/src/main/webapp/styles/layout-navtop-subright.css b/samples/struts2Hello/src/main/webapp/styles/layout-navtop-subright.css
deleted file mode 100644
index 03e45b7..0000000
--- a/samples/struts2Hello/src/main/webapp/styles/layout-navtop-subright.css
+++ /dev/null
@@ -1,46 +0,0 @@
-/* A CSS Framework by Mike Stenhouse of Content with Style */

-

-@import url("nav-horizontal.css");

-

-/* NAV BAR AT THE TOP AND TWO COLUMNS OF CONTENT */

-div#content

-{

-    position: relative;

-    width: 701px;

-

-    margin: 0 auto 20px auto;

-    padding: 0;

-

-    text-align: left;

-}

-

-div#main

-{

-    float: left;

-    width: 480px;

-    display: inline;

-}

-

-div#sub

-{

-    float: right;

-    width: 200px;

-    display: inline;

-}

-

-div#local

-{

-    display: none;

-}

-

-div#nav

-{

-    position: absolute;

-    top: -15px;

-    left: 0;

-    width: 100%;

-

-    text-align: left;

-}

-

-/* END CONTENT */
\ No newline at end of file
diff --git a/samples/struts2Hello/src/main/webapp/styles/layout.css b/samples/struts2Hello/src/main/webapp/styles/layout.css
deleted file mode 100644
index 32bd9c8..0000000
--- a/samples/struts2Hello/src/main/webapp/styles/layout.css
+++ /dev/null
@@ -1,150 +0,0 @@
-/* A CSS Framework by Mike Stenhouse of Content with Style */

-

-/* SITE SPECIFIC LAYOUT */

-body

-{

-    margin: 0;

-    padding: 0;

-

-    background: white;

-

-    text-align: center;

-}

-

-div#page

-{

-    width: 780px;

-

-    margin: 0 auto;

-    padding: 0;

-

-    background: white;

-    text-align: center;

-}

-

-/* HEADER */

-div#header

-{

-    margin: 0 0 5em 0;

-    padding: 40px 20px;

-

-    color: white;

-    background: black;

-

-    text-align: left;

-}

-

-div#branding

-{

-    float: left;

-    width: 40%;

-

-    margin: 0;

-    padding: 10px 0 10px 20px;

-

-    text-align: left;

-}

-

-div#search

-{

-    float: right;

-    width: 49%;

-

-    margin: 0;

-    padding: 16px 20px 0 0;

-

-    text-align: right;

-}

-

-/* END HEADER */

-

-/* CONTENT */

-div#content

-{

-

-}

-

-/* MAIN */

-div#main

-{

-

-}

-

-/* END MAIN */

-

-/* SUB */

-div#sub

-{

-

-}

-

-/* END SUB */

-

-/* END CONTENT */

-

-/* FOOTER */

-div#footer

-{

-    color: white;

-    background-color: black;

-}

-

-div#footer p

-{

-    font-size: 0.8em;

-

-    margin: 0;

-    padding: 15px;

-}

-

-/* END FOOTER */

-/* END LAYOUT */

-

-/* UL.SUBNAV */

-ul.subnav

-{

-    margin: 0;

-    padding: 0;

-

-    font-size: 0.8em;

-    list-style: none;

-}

-

-ul.subnav li

-{

-    margin: 0 0 1em 0;

-    padding: 0;

-    list-style: none;

-}

-

-ul.subnav li a,

-ul.subnav li a:link,

-ul.subnav li a:visited,

-ul.subnav li a:active

-{

-    text-decoration: none;

-    font-weight: bold;

-    color: black;

-}

-

-ul.subnav li a:hover

-{

-    text-decoration: underline;

-}

-

-ul.subnav li strong

-{

-    padding: 0 0 0 12px;

-    background: url("../i/subnav-highlight.gif") left top no-repeat transparent;

-}

-

-ul.subnav li strong a,

-ul.subnav li strong a:link,

-ul.subnav li strong a:visited,

-ul.subnav li strong a:active

-{

-    color: white;

-    background-color: black;

-}

-

-/* END UL.SUBNAV */

diff --git a/samples/struts2Hello/src/main/webapp/styles/main.css b/samples/struts2Hello/src/main/webapp/styles/main.css
deleted file mode 100644
index e69c545..0000000
--- a/samples/struts2Hello/src/main/webapp/styles/main.css
+++ /dev/null
@@ -1,21 +0,0 @@
-/*

-   Css Framework 

-   =============

-   	 - see http://www.contentwithstyle.co.uk/Articles/17/a-css-framework

-   	   for more info.

-*/

-@import url("tools.css");

-@import url("typo.css");

-@import url("forms.css");

-    /*

-      Swap layout stylesheet:

-        layout-navtop-localleft.css

-        layout-navtop-subright.css

-        layout-navtop-3col.css

-        layout-navtop-1col.css

-        layout-navleft-1col.css

-        layout-navleft-2col.css

-    */

-@import url("layout-navtop-localleft.css");

-@import url("layout.css");

-        
\ No newline at end of file
diff --git a/samples/struts2Hello/src/main/webapp/styles/nav-horizontal.css b/samples/struts2Hello/src/main/webapp/styles/nav-horizontal.css
deleted file mode 100644
index 8f91cfb..0000000
--- a/samples/struts2Hello/src/main/webapp/styles/nav-horizontal.css
+++ /dev/null
@@ -1,95 +0,0 @@
-/* A CSS Framework by Mike Stenhouse of Content with Style */

-

-/* NAV */

-div#nav

-{

-    font-size: 0.8em;

-}

-

-* html div#nav

-{

-/* hide ie/mac \*/

-    height: 1%; /* end hide */

-}

-

-div#nav div.wrapper

-{

-    position: absolute;

-    left: 0;

-    bottom: 0;

-    width: 100%;

-}

-

-div#nav ul

-{

-    width: auto;

-    width: 100%;

-

-    margin: 0;

-    padding: 0;

-

-    line-height: 1em;

-    list-style: none;

-}

-

-div#nav li

-{

-    float: left;

-    display: inline;

-

-    list-style: none;

-

-    margin: 0;

-    padding: 0;

-

-    line-height: 1em;

-    border-right: 1px solid #aaa;

-}

-

-div#nav li.last

-{

-    border-right: none;

-}

-

-div#nav a,

-div#nav a:link,

-div#nav a:active,

-div#nav a:visited

-{

-    display: inline-block; /* hide from ie/mac \*/

-    display: block; /* end hide */

-    font-weight: bold;

-    text-decoration: none;

-

-    margin: 0;

-    padding: 5px 38px 5px 38px;

-

-    color: black;

-    background: #ddd;

-}

-

-div#nav a:hover

-{

-    text-decoration: underline;

-}

-

-div#nav strong

-{

-    display: inline-block; /* hide from ie/mac \*/

-    display: block; /* end hide */

-

-    color: white;

-    background: black;

-}

-

-div#nav strong a,

-div#nav strong a:link,

-div#nav strong a:active,

-div#nav strong a:visited,

-div#nav strong a:hover

-{

-    color: white;

-    background-color: black;

-}

-

-/* END NAV */
\ No newline at end of file
diff --git a/samples/struts2Hello/src/main/webapp/styles/nav-vertical.css b/samples/struts2Hello/src/main/webapp/styles/nav-vertical.css
deleted file mode 100644
index d31eba1..0000000
--- a/samples/struts2Hello/src/main/webapp/styles/nav-vertical.css
+++ /dev/null
@@ -1,99 +0,0 @@
-/* A CSS Framework by Mike Stenhouse of Content with Style */

-

-/* NAV */

-div#nav

-{

-    font-size: 0.8em;

-}

-

-* html div#nav

-{

-/* hide ie/mac \*/

-    height: 1%; /* end hide */

-}

-

-div#nav div.wrapper

-{

-    width: 100%;

-

-    background: #ddd;

-}

-

-div#nav ul

-{

-    width: auto;

-    width: 100%;

-

-    margin: 0;

-    padding: 0;

-

-    line-height: 1em;

-    list-style: none;

-}

-

-div#nav li

-{

-    display: block;

-

-    list-style: none;

-

-    margin: 0;

-    padding: 0;

-

-    line-height: 1em;

-}

-

-* html div#nav li

-{

-/* hide ie/mac \*/

-    height: 1%; /* end hide */

-}

-

-div#nav li.last

-{

-

-}

-

-div#nav a,

-div#nav a:link,

-div#nav a:active,

-div#nav a:visited

-{

-    display: block;

-

-    font-weight: bold;

-    text-decoration: none;

-

-    margin: 0;

-    padding: 5px 10px 5px 10px;

-

-    color: black;

-    background: white;

-}

-

-div#nav a:hover

-{

-    color: white;

-    background: black;

-    text-decoration: underline;

-}

-

-div#nav strong

-{

-    display: block;

-

-    color: white;

-    background: black;

-}

-

-div#nav strong a,

-div#nav strong a:link,

-div#nav strong a:active,

-div#nav strong a:visited,

-div#nav strong a:hover

-{

-    color: white;

-    background-color: black;

-}

-

-/* END NAV */
\ No newline at end of file
diff --git a/samples/struts2Hello/src/main/webapp/styles/tools.css b/samples/struts2Hello/src/main/webapp/styles/tools.css
deleted file mode 100644
index 405ce0c..0000000
--- a/samples/struts2Hello/src/main/webapp/styles/tools.css
+++ /dev/null
@@ -1,84 +0,0 @@
-/* A CSS Framework by Mike Stenhouse of Content with Style */

-

-/* clearing */

-.stretch,

-.clear

-{

-    clear: both;

-    height: 1px;

-    margin: 0;

-    padding: 0;

-    font-size: 15px;

-    line-height: 1px;

-}

-

-.clearfix:after

-{

-    content: ".";

-    display: block;

-    height: 0;

-    clear: both;

-    visibility: hidden;

-}

-

-* html>body .clearfix

-{

-    display: inline-block;

-    width: 100%;

-}

-

-* html .clearfix

-{

-/* Hides from IE-mac \*/

-    height: 1%; /* End hide from IE-mac */

-}

-

-/* end clearing */

-

-/* replace */

-.replace

-{

-    display: block;

-

-    background-repeat: no-repeat;

-    background-position: left top;

-    background-color: transparent;

-}

-

-/* tidy these up */

-.replace *

-{

-    text-indent: -10000px;

-    display: block;

-

-    background-repeat: no-repeat;

-    background-position: left top;

-    background-color: transparent;

-}

-

-.replace a

-{

-    text-indent: 0;

-}

-

-.replace a span

-{

-    text-indent: -10000px;

-}

-

-/* end replace */

-

-/* accessibility */

-span.accesskey

-{

-    text-decoration: none;

-}

-

-.accessibility

-{

-    position: absolute;

-    top: -999em;

-    left: -999em;

-}

-

-/* end accessibility */
\ No newline at end of file
diff --git a/samples/struts2Hello/src/main/webapp/styles/typo.css b/samples/struts2Hello/src/main/webapp/styles/typo.css
deleted file mode 100644
index 255d63f..0000000
--- a/samples/struts2Hello/src/main/webapp/styles/typo.css
+++ /dev/null
@@ -1,236 +0,0 @@
-/* A CSS Framework by Mike Stenhouse of Content with Style */

-

-/* TYPOGRAPHY */

-body

-{

-    text-align: left;

-    font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;

-    font-size: 76%;

-    line-height: 1em;

-    color: #333;

-}

-

-div

-{

-    font-size: 1em;

-}

-

-img

-{

-    border: 0;

-}

-

-/* LINKS */

-a,

-a:link

-	a:active

-{

-    color: blue;

-    background-color: white;

-    text-decoration: underline;

-}

-

-a:visited

-{

-    color: purple;

-    background-color: transparent;

-}

-

-a:hover

-{

-    color: white;

-    background-color: black;

-    text-decoration: none;

-}

-

-/* END LINKS */

-

-/* HEADINGS */

-h1

-{

-    font-size: 2em;

-    line-height: 1.5em;

-    margin: 0 0 0.5em 0;

-    padding: 0;

-    color: black;

-}

-

-h2

-{

-    font-size: 1.5em;

-    line-height: 1.5em;

-    margin: 0 0 0.5em 0;

-    padding: 0;

-    color: black;

-}

-

-h3

-{

-    font-size: 1.3em;

-    line-height: 1.3em;

-    margin: 0 0 0.5em 0;

-    padding: 0;

-    color: black;

-}

-

-h4

-{

-    font-size: 1.2em;

-    line-height: 1.3em;

-    margin: 0 0 0.25em 0;

-    padding: 0;

-    color: black;

-}

-

-h5

-{

-    font-size: 1.1em;

-    line-height: 1.3em;

-    margin: 0 0 0.25em 0;

-    padding: 0;

-    color: black;

-}

-

-h6

-{

-    font-size: 1em;

-    line-height: 1.3em;

-    margin: 0 0 0.25em 0;

-    padding: 0;

-    color: black;

-}

-

-/* END HEADINGS */

-

-/* TEXT */

-p

-{

-    font-size: 1em;

-    margin: 0 0 1.5em 0;

-    padding: 0;

-    line-height: 1.4em;

-}

-

-blockquote

-{

-    border-left: 10px solid #ddd;

-    margin-left: 10px;

-}

-

-pre

-{

-    font-family: monospace;

-    font-size: 1.0em;

-}

-

-strong, b

-{

-    font-weight: bold;

-}

-

-em, i

-{

-    font-style: italic;

-}

-

-code

-{

-    font-family: "Courier New", Courier, monospace;

-    font-size: 1em;

-    white-space: pre;

-}

-

-/* END TEXT */

-

-/* LISTS */

-ul

-{

-    line-height: 1.4em;

-    margin: 0 0 1.5em 0;

-    padding: 0;

-}

-

-ul li

-{

-    margin: 0 0 0.25em 30px;

-    padding: 0;

-}

-

-ol

-{

-    font-size: 1.0em;

-    line-height: 1.4em;

-    margin: 0 0 1.5em 0;

-    padding: 0;

-}

-

-ol li

-{

-    font-size: 1.0em;

-    margin: 0 0 0.25em 30px;

-    padding: 0;

-}

-

-dl

-{

-    margin: 0 0 1.5em 0;

-    padding: 0;

-    line-height: 1.4em;

-}

-

-dl dt

-{

-    font-weight: bold;

-    margin: 0.25em 0 0.25em 0;

-    padding: 0;

-}

-

-dl dd

-{

-    margin: 0 0 0 30px;

-    padding: 0;

-}

-

-/* END LISTS */

-

-/* TABLE */

-table

-{

-    font-size: 1em;

-    margin: 0 0 1.5em 0;

-    padding: 0;

-}

-

-table caption

-{

-    font-weight: bold;

-    margin: 0 0 0 0;

-    padding: 0 0 1.5em 0;

-}

-

-th

-{

-    font-weight: bold;

-    text-align: left;

-}

-

-td

-{

-    font-size: 1em;

-}

-

-/* END TABLE */

-

-hr

-{

-    display: none;

-}

-

-div.hr

-{

-    height: 1px;

-    margin: 1.5em 10px;

-    border-bottom: 1px dotted black;

-}

-

-/* END TYPOGRAPHY */	
\ No newline at end of file
diff --git a/samples/swing/build.gradle b/samples/swing/build.gradle
index 7e34223..918363c 100644
--- a/samples/swing/build.gradle
+++ b/samples/swing/build.gradle
@@ -1,6 +1,25 @@
-description = "Sample of how to use the Struts2 integration."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Sample - Swing Bindings" }}
+description = "Sample of how to use the Swing bindings."
+
+jar { manifest { name = "Apache Zest™ Sample - Swing Bindings" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
diff --git a/samples/swing/src/main/java/org/qi4j/lib/swing/binding/example/CityValue.java b/samples/swing/src/main/java/org/qi4j/lib/swing/binding/example/CityValue.java
index 9619eec..bafdaf1 100644
--- a/samples/swing/src/main/java/org/qi4j/lib/swing/binding/example/CityValue.java
+++ b/samples/swing/src/main/java/org/qi4j/lib/swing/binding/example/CityValue.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.lib.swing.binding.example;
 
 import org.qi4j.api.value.ValueComposite;
diff --git a/samples/swing/src/main/java/org/qi4j/lib/swing/binding/example/CountryValue.java b/samples/swing/src/main/java/org/qi4j/lib/swing/binding/example/CountryValue.java
index f761a6b..5580ddb 100644
--- a/samples/swing/src/main/java/org/qi4j/lib/swing/binding/example/CountryValue.java
+++ b/samples/swing/src/main/java/org/qi4j/lib/swing/binding/example/CountryValue.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.lib.swing.binding.example;
 
 import org.qi4j.api.value.ValueComposite;
diff --git a/samples/swing/src/main/java/org/qi4j/lib/swing/binding/internal/AssociationFocusLostListener.java b/samples/swing/src/main/java/org/qi4j/lib/swing/binding/internal/AssociationFocusLostListener.java
index f9e886b..425c94c 100644
--- a/samples/swing/src/main/java/org/qi4j/lib/swing/binding/internal/AssociationFocusLostListener.java
+++ b/samples/swing/src/main/java/org/qi4j/lib/swing/binding/internal/AssociationFocusLostListener.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.lib.swing.binding.internal;
 
 import org.qi4j.api.association.Association;
diff --git a/samples/swing/src/main/java/org/qi4j/lib/swing/binding/internal/BoundAssociation.java b/samples/swing/src/main/java/org/qi4j/lib/swing/binding/internal/BoundAssociation.java
index 5c0daf0..b927cc3 100644
--- a/samples/swing/src/main/java/org/qi4j/lib/swing/binding/internal/BoundAssociation.java
+++ b/samples/swing/src/main/java/org/qi4j/lib/swing/binding/internal/BoundAssociation.java
@@ -18,6 +18,7 @@
 package org.qi4j.lib.swing.binding.internal;
 
 import org.qi4j.api.association.Association;
+import org.qi4j.api.entity.EntityReference;
 import org.qi4j.api.injection.scope.Service;
 import org.qi4j.api.injection.scope.Structure;
 import org.qi4j.api.injection.scope.Uses;
@@ -82,4 +83,10 @@
     {
         //To change body of implemented methods use File | Settings | File Templates.
     }
+
+    @Override
+    public EntityReference reference()
+    {
+        return actual.reference();
+    }
 }
diff --git a/samples/swing/src/main/java/org/qi4j/lib/swing/binding/internal/BoundManyAssociation.java b/samples/swing/src/main/java/org/qi4j/lib/swing/binding/internal/BoundManyAssociation.java
index a7dcb0f..19a0a36 100644
--- a/samples/swing/src/main/java/org/qi4j/lib/swing/binding/internal/BoundManyAssociation.java
+++ b/samples/swing/src/main/java/org/qi4j/lib/swing/binding/internal/BoundManyAssociation.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.lib.swing.binding.internal;
 
 import java.lang.reflect.Method;
@@ -5,6 +23,7 @@
 import java.util.List;
 import java.util.Set;
 import org.qi4j.api.association.ManyAssociation;
+import org.qi4j.api.entity.EntityReference;
 import org.qi4j.api.injection.scope.Service;
 import org.qi4j.api.injection.scope.Structure;
 import org.qi4j.api.injection.scope.Uses;
@@ -59,6 +78,12 @@
     }
 
     @Override
+    public Iterable<EntityReference> references()
+    {
+        return actualAssociations.references();
+    }
+
+    @Override
     public int count()
     {
         return actualAssociations.count();
diff --git a/samples/swing/src/main/java/org/qi4j/lib/swing/binding/internal/BoundNamedAssociation.java b/samples/swing/src/main/java/org/qi4j/lib/swing/binding/internal/BoundNamedAssociation.java
index 8e9f187..553adcc 100644
--- a/samples/swing/src/main/java/org/qi4j/lib/swing/binding/internal/BoundNamedAssociation.java
+++ b/samples/swing/src/main/java/org/qi4j/lib/swing/binding/internal/BoundNamedAssociation.java
@@ -1,9 +1,28 @@
+/*
+ * 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.qi4j.lib.swing.binding.internal;
 
 import java.lang.reflect.Method;
 import java.util.Iterator;
 import java.util.Map;
 import org.qi4j.api.association.NamedAssociation;
+import org.qi4j.api.entity.EntityReference;
 import org.qi4j.api.injection.scope.Service;
 import org.qi4j.api.injection.scope.Structure;
 import org.qi4j.api.injection.scope.Uses;
@@ -75,6 +94,18 @@
     }
 
     @Override
+    public Iterable<EntityReference> references()
+    {
+        return actualAssociations.references();
+    }
+
+    @Override
+    public EntityReference referenceOf( String name )
+    {
+        return actualAssociations.referenceOf( name );
+    }
+
+    @Override
     public Iterator<String> iterator()
     {
         return actualAssociations.iterator();
diff --git a/samples/swing/src/main/java/org/qi4j/lib/swing/binding/internal/BoundProperty.java b/samples/swing/src/main/java/org/qi4j/lib/swing/binding/internal/BoundProperty.java
index 30a88d6..7d22b44 100644
--- a/samples/swing/src/main/java/org/qi4j/lib/swing/binding/internal/BoundProperty.java
+++ b/samples/swing/src/main/java/org/qi4j/lib/swing/binding/internal/BoundProperty.java
@@ -17,19 +17,17 @@
  */
 package org.qi4j.lib.swing.binding.internal;
 
+import java.awt.event.FocusListener;
+import java.lang.reflect.Method;
+import javax.swing.JComponent;
 import org.qi4j.api.injection.scope.Service;
 import org.qi4j.api.injection.scope.Structure;
 import org.qi4j.api.injection.scope.Uses;
 import org.qi4j.api.object.ObjectFactory;
-import org.qi4j.api.property.GenericPropertyInfo;
 import org.qi4j.api.property.Property;
 import org.qi4j.lib.swing.binding.Binding;
 import org.qi4j.lib.swing.binding.SwingAdapter;
 
-import javax.swing.*;
-import java.awt.event.FocusListener;
-import java.lang.reflect.Method;
-
 public final class BoundProperty<T> extends AbstractBinding<T>
     implements Property<T>, Binding
 {
@@ -44,7 +42,8 @@
      * @throws IllegalArgumentException Thrown if the specified {@code aMethod} is {@code null}.
      */
     public BoundProperty( @Uses Method propertyMethod, @Structure ObjectFactory objectBuilderFactory,
-                          @Service Iterable<SwingAdapter> allAdapters )
+                          @Service Iterable<SwingAdapter> allAdapters
+    )
         throws IllegalArgumentException
     {
         super( propertyMethod, objectBuilderFactory, allAdapters );
diff --git a/samples/swing/src/main/java/org/qi4j/lib/swing/binding/internal/PropertyFocusLostListener.java b/samples/swing/src/main/java/org/qi4j/lib/swing/binding/internal/PropertyFocusLostListener.java
index da09261..e04702a 100644
--- a/samples/swing/src/main/java/org/qi4j/lib/swing/binding/internal/PropertyFocusLostListener.java
+++ b/samples/swing/src/main/java/org/qi4j/lib/swing/binding/internal/PropertyFocusLostListener.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.lib.swing.binding.internal;
 
 import org.qi4j.api.property.Property;
diff --git a/settings.gradle b/settings.gradle
index 43b4f2b..a66fd66 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,31 +1,46 @@
-include "core:functional",
-        "core:io",
-        "core:api",
-        "core:spi",
-        "core:testsupport",
-        "core:bootstrap",
-        "core:runtime",
+/*
+ * 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.
+ */
+
+include 'core:functional',
+        'core:io',
+        'core:api',
+        'core:spi',
+        'core:testsupport',
+        'core:bootstrap',
+        'core:runtime',
         'libraries:alarm',
         'libraries:circuitbreaker',
         'libraries:constraints',
         'libraries:conversion',
-        'libraries:cxf',
         'libraries:eventsourcing',
         'libraries:eventsourcing-jdbm',
         'libraries:eventsourcing-rest',
         'libraries:fileconfig',
         'libraries:http',
         'libraries:invocation-cache',
-        'libraries:lang-beanshell',
         'libraries:lang-groovy',
         'libraries:lang-javascript',
-        'libraries:lang-jruby',
         'libraries:lang-scala',
         'libraries:jmx',
         'libraries:locking',
         'libraries:logging',
         'libraries:metrics',
-        'libraries:neo4j',
         'libraries:osgi',
         'libraries:rdf',
         'libraries:rest',
@@ -40,30 +55,23 @@
         'libraries:spring',
         'libraries:sql',
         'libraries:sql-bonecp',
-        'libraries:sql-c3p0',
         'libraries:sql-dbcp',
         'libraries:sql-liquibase',
-        'libraries:struts2-plugin',
-        'libraries:struts2-codebehind',
-        'libraries:struts2-convention',
         'libraries:uid',
         'libraries:uowfile',
         'extensions:cache-ehcache',
         'extensions:cache-memcache',
         'extensions:entitystore-memory',
         'extensions:entitystore-file',
-        'extensions:entitystore-gae',
         'extensions:entitystore-hazelcast',
         'extensions:entitystore-jclouds',
         'extensions:entitystore-jdbm',
         'extensions:entitystore-leveldb',
         'extensions:entitystore-mongodb',
-        'extensions:entitystore-neo4j',
         'extensions:entitystore-preferences',
         'extensions:entitystore-redis',
         'extensions:entitystore-riak',
         'extensions:entitystore-sql',
-        'extensions:entitystore-voldemort',
         'extensions:indexing-elasticsearch',
         'extensions:indexing-rdf',
         'extensions:indexing-solr',
@@ -81,9 +89,7 @@
         'samples:forum',
         'samples:rental',
         'samples:sql-support',
-        'samples:struts2Hello',
         'samples:swing',
-        'tools:entity-viewer',
         'tools:model-detail',
         'tools:envisage',
         'tools:shell',
@@ -97,7 +103,6 @@
         'tutorials:introduction:thirtyminutes',
 //        'tutorials:introduction:twohours',
         'tutorials:services',
-        'tests:complex:gae',
         'tests:regression',
         'tests:performance'
 
diff --git a/src/bin-dist/NOTICE.txt b/src/bin-dist/NOTICE.txt
new file mode 100644
index 0000000..9f7b1a6
--- /dev/null
+++ b/src/bin-dist/NOTICE.txt
@@ -0,0 +1,5 @@
+Apache Zest™ (Java Edition) SDK Binary Distribution
+Copyright 2015 The Apache Software Foundation.
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/src/bin-dist/README.txt b/src/bin-dist/README.txt
new file mode 100644
index 0000000..e83242a
--- /dev/null
+++ b/src/bin-dist/README.txt
@@ -0,0 +1,50 @@
+
+Welcome to the world of Apache Zest
+   - Composite Oriented Programming on the Java platform.
+
+
+This Apache Zest™ Binary Distribution contains everything you need to
+create Zest™ applications.
+
+
+Zest™ (then Zest™) started in 2007, and is still in heavy development
+at the Apache Software Foundation. We would like
+developers around the world to participate in the advancement of this
+cool, new and challenging technology. We are especially interested in
+people willing to help improve the SDK, samples, tutorials, documentation
+and other supporting material.
+
+Please see https://zest.apache.org for more information.
+
+
+Licensing
+---------
+All Apache Zest™ code is licensed under an Apache License.
+
+Third-Party Dependencies may be licensed under other terms. The only
+required dependencies are SLF4J (MIT Licence), ASM (BSD Licence) and
+Joda-Time (Apache Licence).
+
+Finally, Zest™ TestSupport depends on JUnit 4.x and its dependencies, which
+is also not included in the SDK itself, as it is present among most Java
+developers.
+
+
+Dependencies not included
+-------------------------
+The binary distributions contains Zest™ artifacts only to keep the download
+size small. Each Zest™ artifact comes with a file prefixed ..-runtime-deps.txt
+that contains the list of its dependencies. Moreover, at the binary
+distribution's root, you'll find both Maven (go-offline.pom) and Gradle
+(go-offline.gradle) build files whoses sole purpose is to easily download all
+needed dependencies jars. Instructions are given into theses files.
+
+If you prefer to use a dependency management system, go to:
+https://zest.apache.org/java/latest/howto-depend-on-zest.html
+
+
+Thank you for trying out Apache Zest™ and Composite Oriented Programming.
+
+
+-- Apache Zest™ Team
+
diff --git a/src/javadoc/overview.html b/src/javadoc/overview.html
new file mode 100644
index 0000000..38affee
--- /dev/null
+++ b/src/javadoc/overview.html
@@ -0,0 +1,23 @@
+<!--
+  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.
+-->
+<html>
+    <body>
+        <h3>Welcome to the Apache Zest™ (Java Edition) SDK Javadoc.</h3>
+        <p>Apache Zest™ is a framework for domain centric application development, including evolved concepts from AOP, DI and DDD.</p>
+        <p><a href="https://zest.apache.org" target="_blank">zest.apache.org</a></p>
+    </body>
+</html>
diff --git a/tests/complex/gae/build.gradle b/tests/complex/gae/build.gradle
deleted file mode 100644
index 338ef37..0000000
--- a/tests/complex/gae/build.gradle
+++ /dev/null
@@ -1,18 +0,0 @@
-description = "Tests for Qi4j Google AppEngine Extension."
-
-jar { manifest { name = "Qi4j Tests - Google App Engine EntityStore" }}
-
-dependencies {
-  compile(project(":org.qi4j.core:org.qi4j.core.api"))
-  compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
-  compile(project(":org.qi4j.extensions:org.qi4j.extension.entitystore-gae"))
-  compile(libraries.servlet_api)
-  compile(libraries.slf4j_api)
-  compile(libraries.junit)
-  testRuntime(libraries.asm)
-  testRuntime(libraries.asm_commons)
-  testRuntime(libraries.slf4j_simple)
-  compile(project(":org.qi4j.core:org.qi4j.core.testsupport"))
-  testRuntime(project(":org.qi4j.core:org.qi4j.core.spi"))
-  testRuntime(project(":org.qi4j.core:org.qi4j.core.runtime"))
-}
\ No newline at end of file
diff --git a/tests/complex/gae/src/main/java/org/qi4j/test/gae/GaeTestServlet.java b/tests/complex/gae/src/main/java/org/qi4j/test/gae/GaeTestServlet.java
deleted file mode 100644
index d341b45..0000000
--- a/tests/complex/gae/src/main/java/org/qi4j/test/gae/GaeTestServlet.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright 2009 Niclas Hedhman.
- *
- * Licensed  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.qi4j.test.gae;
-
-import org.junit.Test;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-
-public final class GaeTestServlet
-    extends HttpServlet
-{
-    private UnitTests unitTests;
-
-    @Override
-    public void init()
-        throws ServletException
-    {
-        System.out.println( "Starting GAE EntityStore UnitTests" );
-        try
-        {
-            unitTests = new UnitTests();
-            unitTests.setUp();
-            unitTests.init();
-        }
-        catch( Exception e )
-        {
-            throw new ServletException( "Initialization Failed.", e );
-        }
-    }
-
-    @Override
-    public void destroy()
-    {
-        try
-        {
-            unitTests.tearDown();
-        }
-        catch( Exception e )
-        {
-            e.printStackTrace();
-        }
-    }
-
-    @Override
-    protected void doGet( HttpServletRequest req, HttpServletResponse resp )
-        throws ServletException, IOException
-    {
-        StringBuffer buffer = new StringBuffer();
-        Method[] methods = UnitTests.class.getMethods();
-        for( Method m : methods )
-        {
-            Test annot = m.getAnnotation( Test.class );
-            if( annot != null && Modifier.isPublic( m.getModifiers() ) )
-            {
-                try
-                {
-                    long t0 = System.currentTimeMillis();
-                    m.invoke( unitTests );
-                    long time = System.currentTimeMillis() - t0;
-                    add( buffer, m.getName() + " success. " + time + "ms.", true, null );
-                }
-                catch( InvocationTargetException e )
-                {
-                    add( buffer, m.getName() + " threw an Exception.", false, e.getTargetException() );
-                }
-                catch( IllegalAccessException e )
-                {
-                    e.printStackTrace(); // Can not happen?
-                }
-            }
-        }
-        PrintWriter pw = resp.getWriter();
-        pw.print( "<html><body><h1>Qi4j Entity Store Unit Tests</h1>" );
-        pw.print( buffer );
-        pw.print( "</body></html>" );
-    }
-
-    private void add( StringBuffer out, String message, boolean success, Throwable exception )
-    {
-        if( success )
-        {
-            out.append( "<p style=\"color:green;\">" );
-            out.append( message );
-            out.append( "</p>" );
-        }
-        else
-        {
-            StringWriter trace = new StringWriter();
-            PrintWriter pw = new PrintWriter( trace );
-            exception.printStackTrace( pw );
-            pw.flush();
-            pw.close();
-            out.append( "<p style=\"color:red;\">" );
-            out.append( message );
-            out.append( "</p><pre><code>" );
-            out.append( trace );
-            out.append( "</code></pre>" );
-        }
-
-    }
-}
diff --git a/tests/complex/gae/src/main/java/org/qi4j/test/gae/UnitTests.java b/tests/complex/gae/src/main/java/org/qi4j/test/gae/UnitTests.java
deleted file mode 100644
index 6a211b4..0000000
--- a/tests/complex/gae/src/main/java/org/qi4j/test/gae/UnitTests.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2009 Niclas Hedhman.
- *
- * Licensed  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.qi4j.test.gae;
-
-import org.qi4j.bootstrap.AssemblyException;
-import org.qi4j.bootstrap.ModuleAssembly;
-import org.qi4j.test.entity.AbstractEntityStoreTest;
-import org.qi4j.entitystore.gae.GaeEntityStoreService;
-import org.qi4j.entitystore.gae.GaeIdGeneratorService;
-
-public class UnitTests extends AbstractEntityStoreTest
-{
-    public void assemble( ModuleAssembly module )
-        throws AssemblyException
-    {
-        super.assemble( module );
-        System.out.println( "Registering GAE services." );
-        module.services( GaeEntityStoreService.class, GaeIdGeneratorService.class );
-    }
-}
diff --git a/tests/complex/gae/src/main/java/org/qi4j/test/gae2/GaeTestServlet.java b/tests/complex/gae/src/main/java/org/qi4j/test/gae2/GaeTestServlet.java
deleted file mode 100644
index 8b371e9..0000000
--- a/tests/complex/gae/src/main/java/org/qi4j/test/gae2/GaeTestServlet.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright 2009 Niclas Hedhman.
- *
- * Licensed  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.qi4j.test.gae2;
-
-import org.junit.Test;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-
-public final class GaeTestServlet
-    extends HttpServlet
-{
-    private UnitTests unitTests;
-
-    @Override
-    public void init()
-        throws ServletException
-    {
-        System.out.println( "Starting GAE EntityStore UnitTests" );
-        try
-        {
-            unitTests = new UnitTests();
-            unitTests.setUp();
-            unitTests.init();
-        }
-        catch( Exception e )
-        {
-            throw new ServletException( "Initialization Failed.", e );
-        }
-    }
-
-    @Override
-    public void destroy()
-    {
-        try
-        {
-            unitTests.tearDown();
-        }
-        catch( Exception e )
-        {
-            e.printStackTrace();
-        }
-    }
-
-    @Override
-    protected void doGet( HttpServletRequest req, HttpServletResponse resp )
-        throws ServletException, IOException
-    {
-        StringBuffer buffer = new StringBuffer();
-        Method[] methods = UnitTests.class.getMethods();
-        for( Method m : methods )
-        {
-            Test annot = m.getAnnotation( Test.class );
-            if( annot != null && Modifier.isPublic( m.getModifiers() ) )
-            {
-                try
-                {
-                    long t0 = System.currentTimeMillis();
-                    m.invoke( unitTests );
-                    long time = System.currentTimeMillis() - t0;
-                    add( buffer, m.getName() + " success. " + time + "ms.", true, null );
-                }
-                catch( InvocationTargetException e )
-                {
-                    add( buffer, m.getName() + " threw an Exception.", false, e.getTargetException() );
-                }
-                catch( IllegalAccessException e )
-                {
-                    e.printStackTrace(); // Can not happen?
-                }
-            }
-        }
-        PrintWriter pw = resp.getWriter();
-        pw.print( "<html><body><h1>Qi4j Entity Store Unit Tests</h1>" );
-        pw.print( buffer );
-        pw.print( "</body></html>" );
-    }
-
-    private void add( StringBuffer out, String message, boolean success, Throwable exception )
-    {
-        if( success )
-        {
-            out.append( "<p style=\"color:green;\">" );
-            out.append( message );
-            out.append( "</p>" );
-        }
-        else
-        {
-            StringWriter trace = new StringWriter();
-            PrintWriter pw = new PrintWriter( trace );
-            exception.printStackTrace( pw );
-            pw.flush();
-            pw.close();
-            out.append( "<p style=\"color:red;\">" );
-            out.append( message );
-            out.append( "</p><pre><code>" );
-            out.append( trace );
-            out.append( "</code></pre>" );
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/tests/complex/gae/src/main/java/org/qi4j/test/gae2/UnitTests.java b/tests/complex/gae/src/main/java/org/qi4j/test/gae2/UnitTests.java
deleted file mode 100644
index a03eb46..0000000
--- a/tests/complex/gae/src/main/java/org/qi4j/test/gae2/UnitTests.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2009 Niclas Hedhman.
- *
- * Licensed  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.qi4j.test.gae2;
-
-import org.qi4j.api.common.Visibility;
-import org.qi4j.bootstrap.AssemblyException;
-import org.qi4j.bootstrap.ModuleAssembly;
-import org.qi4j.entitystore.gae2.GaeEntityStoreConfiguration;
-import org.qi4j.entitystore.gae2.GaeEntityStoreService;
-import org.qi4j.entitystore.memory.MemoryEntityStoreService;
-import org.qi4j.test.entity.AbstractEntityStoreTest;
-
-public class UnitTests extends AbstractEntityStoreTest
-{
-    public void assemble( ModuleAssembly module )
-        throws AssemblyException
-    {
-        super.assemble( module );
-        System.out.println( "Registering GAE services." );
-        module.services( GaeEntityStoreService.class );
-
-        ModuleAssembly configModule = module.layer().module( "config" );
-        configModule.entities( GaeEntityStoreConfiguration.class ).visibleIn( Visibility.layer );
-        configModule.services( MemoryEntityStoreService.class );
-
-    }
-}
diff --git a/tests/complex/gae/src/main/resources/org/qi4j/entitystore/gae2/GaeEntityStoreService.properties b/tests/complex/gae/src/main/resources/org/qi4j/entitystore/gae2/GaeEntityStoreService.properties
deleted file mode 100644
index 3279af4..0000000
--- a/tests/complex/gae/src/main/resources/org/qi4j/entitystore/gae2/GaeEntityStoreService.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-readPolicy=eventual
-deadline=0.5
-entityKind=qi4j-json
diff --git a/tests/complex/gae/web/WEB-INF/appengine-web.xml b/tests/complex/gae/web/WEB-INF/appengine-web.xml
deleted file mode 100644
index 7b93161..0000000
--- a/tests/complex/gae/web/WEB-INF/appengine-web.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
-  <application>qi4j-entitystore-testsuite</application>
-  <version>1</version>
-</appengine-web-app>
diff --git a/tests/complex/gae/web/WEB-INF/web.xml b/tests/complex/gae/web/WEB-INF/web.xml
deleted file mode 100644
index 1670497..0000000
--- a/tests/complex/gae/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<web-app xmlns="http://java.sun.com/xml/ns/javaee"
-           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
-		  http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
-           version="2.5">
-
-  <servlet>
-    <display-name>Qi4j Entity Store Unit Tests</display-name>
-    <servlet-name>GaeTestServlet1</servlet-name>
-    <servlet-class>org.qi4j.test.gae.GaeTestServlet</servlet-class>
-  </servlet>
-  <servlet-mapping>
-    <servlet-name>GaeTestServlet1</servlet-name>
-    <url-pattern>/unit1/</url-pattern>
-  </servlet-mapping>
-
-
-  <servlet>
-    <display-name>Qi4j Entity Store Unit Tests - JSON version</display-name>
-    <servlet-name>GaeTestServlet2</servlet-name>
-    <servlet-class>org.qi4j.test.gae2.GaeTestServlet</servlet-class>
-  </servlet>
-  <servlet-mapping>
-    <servlet-name>GaeTestServlet2</servlet-name>
-    <url-pattern>/unit2/</url-pattern>
-  </servlet-mapping>
-</web-app>
diff --git a/tests/complex/gae/web/index.jsp b/tests/complex/gae/web/index.jsp
deleted file mode 100644
index 4ca32e6..0000000
--- a/tests/complex/gae/web/index.jsp
+++ /dev/null
@@ -1,12 +0,0 @@
-<%--
-  Created by IntelliJ IDEA.
-  User: niclas
-  Date: Feb 18, 2010
-  Time: 8:34:38 PM
-  To change this template use File | Settings | File Templates.
---%>
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<html>
-  <head><title>Simple jsp page</title></head>
-  <body>Place your content here</body>
-</html>
\ No newline at end of file
diff --git a/tests/performance/build.gradle b/tests/performance/build.gradle
index f08c88e..8ebd698 100644
--- a/tests/performance/build.gradle
+++ b/tests/performance/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j Performance Test Suite."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Tests - Performance" }}
+description = "Apache Zest™ Performance Test Suite."
+
+jar { manifest { name = "Apache Zest™ Tests - Performance" }}
 
 sourceSets {
     perf
@@ -10,7 +29,8 @@
 
     compile project( ":org.qi4j.core:org.qi4j.core.bootstrap" )
     compile libraries.junit
-    
+    compile libraries.slf4j_api
+
     perfCompile sourceSets.main.output
     perfCompile configurations.testCompile
     perfCompile sourceSets.test.output
diff --git a/tests/performance/src/main/java/org/qi4j/test/performance/entitystore/package.html b/tests/performance/src/main/java/org/qi4j/test/performance/entitystore/package.html
index b566ace..1f0f21a 100644
--- a/tests/performance/src/main/java/org/qi4j/test/performance/entitystore/package.html
+++ b/tests/performance/src/main/java/org/qi4j/test/performance/entitystore/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Performance Tests for EntityStores.</h2>
diff --git a/tests/performance/src/perf/java/org/qi4j/test/performance/runtime/composite/CompositeCreationPerformanceTest.java b/tests/performance/src/perf/java/org/qi4j/test/performance/runtime/composite/CompositeCreationPerformanceTest.java
index 6bda3d0..d287907 100644
--- a/tests/performance/src/perf/java/org/qi4j/test/performance/runtime/composite/CompositeCreationPerformanceTest.java
+++ b/tests/performance/src/perf/java/org/qi4j/test/performance/runtime/composite/CompositeCreationPerformanceTest.java
@@ -186,7 +186,7 @@
 
         long end = System.currentTimeMillis();
         long time = 1000000L * ( end - start ) / iter;
-        System.out.println( "Minimum Qi4j Object Creation Time:" + time + " nanoseconds per object" );
+        System.out.println( "Minimum Zest Object Creation Time:" + time + " nanoseconds per object" );
         return time;
     }
 
diff --git a/tests/performance/src/perf/resources/derby-datasource.properties b/tests/performance/src/perf/resources/derby-datasource.properties
index 03bf132..8fc9229 100644
--- a/tests/performance/src/perf/resources/derby-datasource.properties
+++ b/tests/performance/src/perf/resources/derby-datasource.properties
@@ -1,3 +1,18 @@
+# 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.
+
 enabled=true
 url=jdbc:derby:memory:testdb;create=true
 driver=org.apache.derby.jdbc.EmbeddedDriver
diff --git a/tests/performance/src/perf/resources/logback.xml b/tests/performance/src/perf/resources/logback.xml
index da447b6..46ad47d 100644
--- a/tests/performance/src/perf/resources/logback.xml
+++ b/tests/performance/src/perf/resources/logback.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
 <configuration>
 
     <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
diff --git a/tests/performance/src/perf/resources/org/qi4j/entitystore/jdbm/JdbmEntityStoreService.properties b/tests/performance/src/perf/resources/org/qi4j/entitystore/jdbm/JdbmEntityStoreService.properties
index d3b271d..56592c6 100644
--- a/tests/performance/src/perf/resources/org/qi4j/entitystore/jdbm/JdbmEntityStoreService.properties
+++ b/tests/performance/src/perf/resources/org/qi4j/entitystore/jdbm/JdbmEntityStoreService.properties
@@ -1,3 +1,18 @@
+# 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.
+
 
 # The file that will contain the JDBM data.
 file=build/tmp/jdbm/jdbmstore.data
diff --git a/tests/performance/src/perf/resources/org/qi4j/library/rdf/repository/rdf-indexing.properties b/tests/performance/src/perf/resources/org/qi4j/library/rdf/repository/rdf-indexing.properties
index 27d2609..4685ef4 100644
--- a/tests/performance/src/perf/resources/org/qi4j/library/rdf/repository/rdf-indexing.properties
+++ b/tests/performance/src/perf/resources/org/qi4j/library/rdf/repository/rdf-indexing.properties
@@ -1,2 +1,17 @@
+# 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.
+
 tripleIndexes=spoc,ospc
 dataDirectory=build/tmp/rdf
\ No newline at end of file
diff --git a/tests/performance/src/perf/resources/postgresql-datasource.properties b/tests/performance/src/perf/resources/postgresql-datasource.properties
index a906d84..f7d7ad5 100644
--- a/tests/performance/src/perf/resources/postgresql-datasource.properties
+++ b/tests/performance/src/perf/resources/postgresql-datasource.properties
@@ -1,3 +1,18 @@
+# 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.
+
 enabled=true
 url=jdbc:postgresql://localhost:5432/jdbc_test_db
 driver=org.postgresql.Driver
diff --git a/tests/regression/build.gradle b/tests/regression/build.gradle
index 6f03209..73bb428 100644
--- a/tests/regression/build.gradle
+++ b/tests/regression/build.gradle
@@ -1,6 +1,25 @@
-description = "Qi4j Regression Tests are added by community members who find bugs and typically reported via Jira issues. These tests are not run as part of the normal build, but is accessible from './gradlew regression' to allow builds to still work."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Tests - Regression" }}
+description = "Apache Zest™ Regression Tests are added by community members who find bugs and typically reported via Jira issues. These tests are not run as part of the normal build, but is accessible from './gradlew regression' to allow builds to still work."
+
+jar { manifest { name = "Apache Zest™ Tests - Regression" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.api"))
diff --git a/tests/regression/src/main/java/org/qi4j/test/regression/Regressions.java b/tests/regression/src/main/java/org/qi4j/test/regression/Regressions.java
index 8e51ed0..021f813 100644
--- a/tests/regression/src/main/java/org/qi4j/test/regression/Regressions.java
+++ b/tests/regression/src/main/java/org/qi4j/test/regression/Regressions.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.test.regression;
 
 /**
diff --git a/tools/entity-viewer/build.gradle b/tools/entity-viewer/build.gradle
deleted file mode 100644
index d44b98f..0000000
--- a/tools/entity-viewer/build.gradle
+++ /dev/null
@@ -1,19 +0,0 @@
-description = "A viewer of entities in the Entity Stores."
-
-jar { manifest { name = "Qi4j Entity Viewer" }}
-
-dependencies {
-  compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
-  compile(project(":org.qi4j.tools:org.qi4j.tool.model-detail"))
-
-  testCompile(project(":org.qi4j.core:org.qi4j.core.testsupport"))
-  testCompile(project(":org.qi4j.extensions:org.qi4j.extension.indexing-rdf"))
-
-  testRuntime(project(":org.qi4j.core:org.qi4j.core.runtime"))
-  testRuntime(libraries.logback)
-}
-
-task(runSample, dependsOn: 'testClasses', type: JavaExec) {
-    main = 'org.qi4j.swing.library.swing.entityviewer.sample.ApplicationSample'
-    classpath = sourceSets.test.runtimeClasspath
-}
diff --git a/tools/entity-viewer/dev-status.xml b/tools/entity-viewer/dev-status.xml
deleted file mode 100644
index c847a9f..0000000
--- a/tools/entity-viewer/dev-status.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
-        http://www.qi4j.org/schemas/2008/dev-status/1/dev-status.xsd">
-  <status>
-    <!--none,early,beta,stable,mature-->
-    <codebase>stable</codebase>
-
-    <!-- none, brief, good, complete -->
-    <documentation>brief</documentation>
-
-    <!-- none, some, good, complete -->
-    <unittests>none</unittests>
-
-  </status>
-  <licenses>
-    <license>ALv2</license>
-  </licenses>
-</module>
diff --git a/tools/entity-viewer/src/docs/entity-viewer.txt b/tools/entity-viewer/src/docs/entity-viewer.txt
deleted file mode 100644
index f809d65..0000000
--- a/tools/entity-viewer/src/docs/entity-viewer.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-[[tools-entity-viewer,EntityViewer Tool]]
-= Entity Viewer =
-
-EntityViewer is a Swing based Entities browser. It allows you to browse
-Entities persisted in EntityStores.
-
-== Usage ==
-
-EntityViewer can easily be used as follows:
-
-[snippet,java]
-----
-source=tools/entity-viewer/src/test/java/org/qi4j/swing/library/swing/entityviewer/sample/ApplicationSample.java
-tag=entity-viewer
-----
-
-A gradle task runSample is defined in this module as a shortcut to run the
-example. See <<build-system>>.
-
-== Screenshot ==
-
-image:tools-entity-viewer.png[width="800px"]
-
-== Embedd in your Application ==
-
-include::../../build/docs/buildinfo/artifact.txt[]
-
diff --git a/tools/entity-viewer/src/main/java/org/qi4j/library/swing/entityviewer/EntityViewer.form b/tools/entity-viewer/src/main/java/org/qi4j/library/swing/entityviewer/EntityViewer.form
deleted file mode 100644
index a36b697..0000000
--- a/tools/entity-viewer/src/main/java/org/qi4j/library/swing/entityviewer/EntityViewer.form
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="org.qi4j.library.swing.entityviewer.EntityViewer">
-  <grid id="27dc6" binding="mainPane" layout-manager="BorderLayout" hgap="0" vgap="0">
-    <constraints>
-      <xy x="20" y="20" width="500" height="400"/>
-    </constraints>
-    <properties/>
-    <border type="none"/>
-    <children>
-      <splitpane id="bf22c" binding="splitPane">
-        <constraints border-constraint="Center"/>
-        <properties/>
-        <border type="none"/>
-        <children>
-          <grid id="821ca" binding="propertiesAreaPane" layout-manager="BorderLayout" hgap="0" vgap="0">
-            <constraints>
-              <splitpane position="right"/>
-            </constraints>
-            <properties/>
-            <border type="none"/>
-            <children>
-              <grid id="551a3" layout-manager="GridBagLayout">
-                <constraints border-constraint="North"/>
-                <properties/>
-                <border type="none"/>
-                <children>
-                  <component id="f399c" class="javax.swing.JComboBox" binding="entitiesCombo">
-                    <constraints>
-                      <grid row="0" column="2" row-span="1" col-span="3" vsize-policy="0" hsize-policy="2" anchor="8" fill="1" indent="0" use-parent-layout="false"/>
-                      <gridbag weightx="0.3" weighty="0.0"/>
-                    </constraints>
-                    <properties/>
-                  </component>
-                  <component id="2218b" class="javax.swing.JLabel">
-                    <constraints>
-                      <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
-                      <gridbag weightx="0.0" weighty="0.0"/>
-                    </constraints>
-                    <properties>
-                      <text value="Entity"/>
-                    </properties>
-                  </component>
-                  <hspacer id="69a0b">
-                    <constraints>
-                      <grid row="0" column="1" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
-                      <gridbag weightx="0.0" weighty="0.0"/>
-                    </constraints>
-                  </hspacer>
-                </children>
-              </grid>
-            </children>
-          </grid>
-        </children>
-      </splitpane>
-    </children>
-  </grid>
-  <inspectionSuppressions>
-    <suppress inspection="NoLabelFor" id="f399c"/>
-  </inspectionSuppressions>
-</form>
diff --git a/tools/entity-viewer/src/main/java/org/qi4j/library/swing/entityviewer/EntityViewer.java b/tools/entity-viewer/src/main/java/org/qi4j/library/swing/entityviewer/EntityViewer.java
deleted file mode 100644
index 829f94b..0000000
--- a/tools/entity-viewer/src/main/java/org/qi4j/library/swing/entityviewer/EntityViewer.java
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- * Copyright (c) 2009, Tony Kohar. All Rights Reserved.
- *
- * Licensed  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.qi4j.library.swing.entityviewer;
-
-import java.awt.BorderLayout;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import javax.swing.ComboBoxModel;
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.JComboBox;
-import javax.swing.JComponent;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JSplitPane;
-import javax.swing.event.TreeSelectionEvent;
-import javax.swing.event.TreeSelectionListener;
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.TreePath;
-import org.qi4j.api.query.Query;
-import org.qi4j.api.query.QueryBuilder;
-import org.qi4j.api.structure.Application;
-import org.qi4j.api.structure.ApplicationDescriptor;
-import org.qi4j.api.structure.Module;
-import org.qi4j.api.unitofwork.UnitOfWork;
-import org.qi4j.spi.Qi4jSPI;
-import org.qi4j.tools.model.descriptor.ApplicationDetailDescriptor;
-import org.qi4j.tools.model.descriptor.ApplicationDetailDescriptorBuilder;
-import org.qi4j.tools.model.descriptor.EntityDetailDescriptor;
-import org.qi4j.tools.model.descriptor.LayerDetailDescriptor;
-import org.qi4j.tools.model.descriptor.ModuleDetailDescriptor;
-
-import static org.qi4j.functional.Iterables.first;
-
-/**
- * The Entity Viewer.
- */
-public class EntityViewer
-{
-    private JPanel mainPane;
-    private JComboBox entitiesCombo;
-    private JPanel propertiesAreaPane;
-    private JSplitPane splitPane;
-    private PropertiesPanel propertiesPanel;
-    private TreePanel treePanel;
-
-    private Qi4jSPI qi4jspi;
-    private ApplicationDescriptor model;
-    private Application application;
-
-    private JFrame frame;
-
-    public void show( Qi4jSPI qi4jspi, ApplicationDescriptor model, Application application )
-    {
-        this.qi4jspi = qi4jspi;
-        this.model = model;
-        this.application = application;
-
-        initUI();
-
-        frame = new JFrame();
-        frame.setContentPane( mainPane );
-        frame.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );
-        frame.setSize( 600, 600 );
-        //frame.pack();
-        frame.setVisible( true );
-    }
-
-    public void stop()
-    {
-        if( frame != null & frame.isDisplayable() )
-        {
-            frame.dispose();
-            frame = null;
-        }
-    }
-
-    private void initUI()
-    {
-        propertiesPanel = new PropertiesPanel();
-        propertiesPanel.initializeQi4J( qi4jspi );
-        propertiesAreaPane.add( propertiesPanel, BorderLayout.CENTER );
-
-        treePanel = new TreePanel();
-        treePanel.initializeQi4J( qi4jspi, model );
-        treePanel.reload();
-        splitPane.setLeftComponent( treePanel );
-
-        splitPane.setDividerLocation( 200 );
-
-        DefaultComboBoxModel entityComboModel = new DefaultComboBoxModel();
-        entitiesCombo.setModel( entityComboModel );
-
-        entitiesCombo.addItemListener( new ItemListener()
-        {
-            @Override
-            public void itemStateChanged( ItemEvent evt )
-            {
-                entitiesComboItemStateChanged( evt );
-            }
-        } );
-
-        treePanel.getTreeComponent().addTreeSelectionListener( new TreeSelectionListener()
-        {
-            @Override
-            public void valueChanged( TreeSelectionEvent evt )
-            {
-                treePanelValueChanged( evt );
-            }
-        } );
-
-        initEntityCombo( entityComboModel );
-    }
-
-    private void initEntityCombo( DefaultComboBoxModel entityComboModel )
-    {
-        // create the visitor to traverse the QI4J to find the module
-        ApplicationDetailDescriptor visitor = ApplicationDetailDescriptorBuilder.createApplicationDetailDescriptor( model );
-
-        // find all entities
-        Iterable<LayerDetailDescriptor> layerDescIter = visitor.layers();
-        for( LayerDetailDescriptor layerDesc : layerDescIter )
-        {
-            Iterable<ModuleDetailDescriptor> moduleDescIter = layerDesc.modules();
-            for( ModuleDetailDescriptor moduleDesc : moduleDescIter )
-            {
-                Iterable<EntityDetailDescriptor> entityDescIter = moduleDesc.entities();
-                for( EntityDetailDescriptor entity : entityDescIter )
-                {
-                    entityComboModel.addElement( entity );
-                }
-            }
-        }
-    }
-
-    /**
-     * Create simple query (display all properties) based on the supplied class.
-     *
-     * @param module the module to create the query
-     * @param clazz  the class to be queried
-     *
-     * @return query
-     */
-    protected Query createQuery( Module module, Class clazz )
-    {
-        UnitOfWork uow = module.newUnitOfWork();
-        QueryBuilder qb = module.newQueryBuilder( clazz );
-        return uow.newQuery( qb );
-    }
-
-    private Module findModule( EntityDetailDescriptor descriptor )
-    {
-        String lName = descriptor.module().layer().descriptor().name();
-        String mName = descriptor.module().descriptor().name();
-
-        return application.findModule( lName, mName );
-    }
-
-    /**
-     * Event Handler for EntitiesComboBox
-     *
-     * @param evt the Event
-     */
-    private void entitiesComboItemStateChanged( ItemEvent evt )
-    {
-        if( evt.getStateChange() == ItemEvent.DESELECTED )
-        {
-            return;
-        }
-
-        EntityDetailDescriptor entityDescriptor = (EntityDetailDescriptor) entitiesCombo.getSelectedItem();
-        Class clazz = first( entityDescriptor.descriptor().types() );
-
-        Module module = findModule( entityDescriptor );
-        Query query = createQuery( module, clazz );
-        propertiesPanel.reload( query );
-    }
-
-    /**
-     * Event Handler for TreePanel
-     *
-     * @param evt the Event
-     */
-    public void treePanelValueChanged( TreeSelectionEvent evt )
-    {
-        TreePath path = evt.getPath();
-        Object source = path.getLastPathComponent();
-        if( source == null )
-        {
-            return;
-        }
-
-        DefaultMutableTreeNode node = (DefaultMutableTreeNode) source;
-        Object obj = node.getUserObject();
-
-        if( obj == null )
-        {
-            return;
-        }
-
-        Class<?> clazz = obj.getClass();
-        if( EntityDetailDescriptor.class.isAssignableFrom( clazz ) )
-        {
-            EntityDetailDescriptor entityDesc = (EntityDetailDescriptor) obj;
-            Class entityType = first( entityDesc.descriptor().types() );
-
-            // Update the selected item on the combo box, which in turn update the properties table
-            ComboBoxModel comboModel = entitiesCombo.getModel();
-            int index = -1;
-            for( int i = 0; i < comboModel.getSize(); i++ )
-            {
-                EntityDetailDescriptor entityDesc1 = (EntityDetailDescriptor) comboModel.getElementAt( i );
-                Class entityType1 = first( entityDesc1.descriptor().types() );
-
-                if( entityType1.equals( entityType ) )
-                {
-                    index = i;
-                    break;
-                }
-            }
-
-            if( index >= 0 )
-            {
-                entitiesCombo.setSelectedIndex( index );
-            }
-        }
-    }
-
-    
-    {
-// GUI initializer generated by IntelliJ IDEA GUI Designer
-// >>> IMPORTANT!! <<<
-// DO NOT EDIT OR ADD ANY CODE HERE!
-        $$$setupUI$$$();
-    }
-
-    /**
-     * Method generated by IntelliJ IDEA GUI Designer
-     * >>> IMPORTANT!! <<<
-     * DO NOT edit this method OR call it in your code!
-     *
-     */
-    private void $$$setupUI$$$()
-    {
-        mainPane = new JPanel();
-        mainPane.setLayout( new BorderLayout( 0, 0 ) );
-        splitPane = new JSplitPane();
-        mainPane.add( splitPane, BorderLayout.CENTER );
-        propertiesAreaPane = new JPanel();
-        propertiesAreaPane.setLayout( new BorderLayout( 0, 0 ) );
-        splitPane.setRightComponent( propertiesAreaPane );
-        final JPanel panel1 = new JPanel();
-        panel1.setLayout( new GridBagLayout() );
-        propertiesAreaPane.add( panel1, BorderLayout.NORTH );
-        entitiesCombo = new JComboBox();
-        GridBagConstraints gbc;
-        gbc = new GridBagConstraints();
-        gbc.gridx = 2;
-        gbc.gridy = 0;
-        gbc.gridwidth = 3;
-        gbc.weightx = 0.3;
-        gbc.anchor = GridBagConstraints.WEST;
-        gbc.fill = GridBagConstraints.HORIZONTAL;
-        panel1.add( entitiesCombo, gbc );
-        final JLabel label1 = new JLabel();
-        label1.setText( "Entity" );
-        gbc = new GridBagConstraints();
-        gbc.gridx = 0;
-        gbc.gridy = 0;
-        gbc.anchor = GridBagConstraints.WEST;
-        panel1.add( label1, gbc );
-        final JPanel spacer1 = new JPanel();
-        gbc = new GridBagConstraints();
-        gbc.gridx = 1;
-        gbc.gridy = 0;
-        gbc.fill = GridBagConstraints.HORIZONTAL;
-        panel1.add( spacer1, gbc );
-    }
-
-    public JComponent $$$getRootComponent$$$()
-    {
-        return mainPane;
-    }
-}
diff --git a/tools/entity-viewer/src/main/java/org/qi4j/library/swing/entityviewer/PropertiesPanel.java b/tools/entity-viewer/src/main/java/org/qi4j/library/swing/entityviewer/PropertiesPanel.java
deleted file mode 100644
index 159ba1e..0000000
--- a/tools/entity-viewer/src/main/java/org/qi4j/library/swing/entityviewer/PropertiesPanel.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 2009, Tony Kohar. All Rights Reserved.
- *
- * Licensed  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.qi4j.library.swing.entityviewer;
-
-import java.awt.BorderLayout;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTable;
-import javax.swing.table.DefaultTableModel;
-import javax.swing.table.TableModel;
-import org.qi4j.api.association.AssociationStateHolder;
-import org.qi4j.api.entity.EntityComposite;
-import org.qi4j.api.entity.EntityDescriptor;
-import org.qi4j.api.property.PropertyDescriptor;
-import org.qi4j.api.query.Query;
-import org.qi4j.spi.Qi4jSPI;
-
-/**
- * Entity Properties Viewer as Swing Component.
- */
-public class PropertiesPanel
-    extends JPanel
-{
-    protected JTable propertiesTable;
-    protected Qi4jSPI qi4jspi;
-
-    public PropertiesPanel()
-    {
-        this.setLayout( new BorderLayout() );
-        JScrollPane scrollPane = new JScrollPane();
-        this.add( scrollPane, BorderLayout.CENTER );
-
-        propertiesTable = new JTable();
-        scrollPane.setViewportView( propertiesTable );
-    }
-
-    public void initializeQi4J( Qi4jSPI qi4j )
-    {
-        this.qi4jspi = qi4j;
-    }
-
-    /**
-     * Reload the table data with query based on the supplied query
-     *
-     * @param query the query to generate table data
-     */
-    public void reload( Query query )
-    {
-        TableModel tableModel = createData( query );
-        propertiesTable.setModel( tableModel );
-    }
-
-    /**
-     * Create table table or properties using the supplied query
-     *
-     * @param query the Query
-     *
-     * @return TableModel
-     */
-    protected TableModel createData( Query query )
-    {
-        DefaultTableModel model = new DefaultTableModel();
-
-        for( Object qObj : query )
-        {
-            AssociationStateHolder state = qi4jspi.stateOf( (EntityComposite) qObj );
-            EntityDescriptor descriptor = qi4jspi.entityDescriptorFor( (EntityComposite) qObj );
-            // genereate column, first time only
-            if( model.getColumnCount() < 1 )
-            {
-                for( PropertyDescriptor persistentPropertyDescriptor : descriptor.state()
-                    .properties() )
-                {
-                    model.addColumn( persistentPropertyDescriptor.qualifiedName().name() );
-                }
-            }
-
-            Object[] rowData = new Object[ model.getColumnCount() ];
-            int i = 0;
-            for( PropertyDescriptor persistentPropertyDescriptor : descriptor.state().properties() )
-            {
-                rowData[ i++] = state.propertyFor( persistentPropertyDescriptor.accessor() );
-            }
-            model.addRow( rowData );
-        }
-
-        return model;
-    }
-}
diff --git a/tools/entity-viewer/src/main/java/org/qi4j/library/swing/entityviewer/TreePanel.java b/tools/entity-viewer/src/main/java/org/qi4j/library/swing/entityviewer/TreePanel.java
deleted file mode 100644
index d877ad4..0000000
--- a/tools/entity-viewer/src/main/java/org/qi4j/library/swing/entityviewer/TreePanel.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (c) 2009, Tony Kohar. All Rights Reserved.
- *
- * Licensed  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.qi4j.library.swing.entityviewer;
-
-import java.awt.BorderLayout;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTree;
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.DefaultTreeModel;
-import javax.swing.tree.MutableTreeNode;
-import javax.swing.tree.TreeSelectionModel;
-import org.qi4j.api.structure.ApplicationDescriptor;
-import org.qi4j.spi.Qi4jSPI;
-import org.qi4j.tools.model.descriptor.ApplicationDetailDescriptor;
-import org.qi4j.tools.model.descriptor.ApplicationDetailDescriptorBuilder;
-import org.qi4j.tools.model.descriptor.EntityDetailDescriptor;
-import org.qi4j.tools.model.descriptor.LayerDetailDescriptor;
-import org.qi4j.tools.model.descriptor.ModuleDetailDescriptor;
-
-/**
- * Qi4J Application Tree Viewer as Swing Component.
- */
-public class TreePanel
-    extends JPanel
-{
-    protected JTree applicationTree;
-    protected Qi4jSPI qi4j;
-    private ApplicationDescriptor model;
-
-    public TreePanel()
-    {
-        this.setLayout( new BorderLayout() );
-
-        this.applicationTree = new JTree();
-        this.applicationTree.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION );
-
-        JScrollPane scrollPane = new JScrollPane();
-        this.add( scrollPane, BorderLayout.CENTER );
-        scrollPane.setViewportView( this.applicationTree );
-    }
-
-    public void initializeQi4J( Qi4jSPI qi4j, ApplicationDescriptor model )
-    {
-        this.qi4j = qi4j;
-        this.model = model;
-    }
-
-    public JTree getTreeComponent()
-    {
-        return applicationTree;
-    }
-
-    public void reload()
-    {
-        // build the visitor which allow traverse qi4j model
-        ApplicationDetailDescriptor visitor = ApplicationDetailDescriptorBuilder.createApplicationDetailDescriptor( model );
-        DefaultTreeModel treeModel = new DefaultTreeModel( new TreeModelBuilder().build( visitor ) );
-        applicationTree.setModel( treeModel );
-    }
-
-    /**
-     * Helper class to build tree model for up to 3 level depth, which focusing on the entity
-     */
-    class TreeModelBuilder
-    {
-
-        public MutableTreeNode build( ApplicationDetailDescriptor descriptor )
-        {
-            DefaultMutableTreeNode node = new DefaultMutableTreeNode( descriptor );
-            buildLayersNode( node, descriptor.layers() );
-            return node;
-        }
-
-        private void buildLayersNode( DefaultMutableTreeNode parent, Iterable<LayerDetailDescriptor> iter )
-        {
-            for( LayerDetailDescriptor descriptor : iter )
-            {
-                DefaultMutableTreeNode node = new DefaultMutableTreeNode( descriptor );
-                buildModulesNode( node, descriptor.modules() );
-                parent.add( node );
-            }
-        }
-
-        private void buildModulesNode( DefaultMutableTreeNode parent, Iterable<ModuleDetailDescriptor> iter )
-        {
-            for( ModuleDetailDescriptor descriptor : iter )
-            {
-                DefaultMutableTreeNode node = new DefaultMutableTreeNode( descriptor );
-                buildEntitiesNode( node, descriptor.entities() );
-                parent.add( node );
-            }
-        }
-
-        private void buildEntitiesNode( DefaultMutableTreeNode parent, Iterable<EntityDetailDescriptor> iter )
-        {
-            for( EntityDetailDescriptor descriptor : iter )
-            {
-                DefaultMutableTreeNode node = new DefaultMutableTreeNode( descriptor );
-                parent.add( node );
-            }
-        }
-    }
-
-}
diff --git a/tools/entity-viewer/src/main/java/org/qi4j/library/swing/entityviewer/package.html b/tools/entity-viewer/src/main/java/org/qi4j/library/swing/entityviewer/package.html
deleted file mode 100644
index 687f198..0000000
--- a/tools/entity-viewer/src/main/java/org/qi4j/library/swing/entityviewer/package.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<html>
-    <body>
-        <h2>EntityViewer Tool.</h2>
-    </body>
-</html>
diff --git a/tools/entity-viewer/src/test/java/org/qi4j/swing/library/swing/entityviewer/sample/ApplicationSample.java b/tools/entity-viewer/src/test/java/org/qi4j/swing/library/swing/entityviewer/sample/ApplicationSample.java
deleted file mode 100644
index df7aa67..0000000
--- a/tools/entity-viewer/src/test/java/org/qi4j/swing/library/swing/entityviewer/sample/ApplicationSample.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright (c) 2009, Tony Kohar. All Rights Reserved.
- *
- * Licensed  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.qi4j.swing.library.swing.entityviewer.sample;
-
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.qi4j.api.entity.EntityBuilder;
-import org.qi4j.api.entity.EntityComposite;
-import org.qi4j.api.property.Property;
-import org.qi4j.api.query.Query;
-import org.qi4j.api.unitofwork.UnitOfWork;
-import org.qi4j.api.unitofwork.UnitOfWorkCompletionException;
-import org.qi4j.bootstrap.AssemblyException;
-import org.qi4j.bootstrap.ModuleAssembly;
-import org.qi4j.index.rdf.assembly.RdfMemoryStoreAssembler;
-import org.qi4j.library.swing.entityviewer.EntityViewer;
-import org.qi4j.test.AbstractQi4jTest;
-import org.qi4j.test.EntityTestAssembler;
-
-import static org.qi4j.test.util.Assume.assumeDisplayPresent;
-
-public class ApplicationSample
-    extends AbstractQi4jTest
-{
-
-    @BeforeClass
-    public static void assumeDisplay()
-    {
-        assumeDisplayPresent();
-    }
-
-    @Override
-    public void assemble( ModuleAssembly module )
-        throws AssemblyException
-    {
-        module.entities( CarEntity.class );
-        module.entities( AnimalEntity.class );
-        new RdfMemoryStoreAssembler().assemble( module );
-        new EntityTestAssembler().assemble( module );
-    }
-
-    public void createTestData()
-        throws UnitOfWorkCompletionException
-    {
-        UnitOfWork uow = module.newUnitOfWork();
-        createCar( "Volvo", "S80", 2007 );
-        createCar( "Volvo", "C70", 2006 );
-        createCar( "Ford", "Transit", 2007 );
-        createCar( "Ford", "Mustang", 2007 );
-        createCar( "Ford", "Mustang", 2006 );
-        createCar( "Ford", "Mustang", 2005 );
-
-        createAnimal( "Cat", "Miaow" );
-        createAnimal( "Duck", "Kwek-kwek" );
-        createAnimal( "Dog", "Guk" );
-        createAnimal( "Cow", "Moooo" );
-
-        uow.complete();
-    }
-
-    public void testQuery()
-    {
-        UnitOfWork uow = module.newUnitOfWork();
-        Query<Car> query = uow.newQuery( module.newQueryBuilder( Car.class ) );
-        for( Car car : query )
-        {
-            System.out.println( car.model() + " | " + car.manufacturer() + " | " + car.year() );
-        }
-    }
-
-    public static void main( String[] args )
-        throws Exception
-    {
-        ApplicationSample sample = new ApplicationSample();
-        sample.runSample();
-    }
-
-    @Test
-    public void runSample()
-        throws Exception
-    {
-        setUp();
-        createTestData();
-        //testQuery();
-        // START SNIPPET: entity-viewer
-        new EntityViewer().show( qi4j.spi(), applicationModel, application );
-        // END SNIPPET: entity-viewer
-    }
-
-    private String createCar( String manufacturer, String model, int year )
-    {
-        UnitOfWork uow = module.currentUnitOfWork();
-        EntityBuilder<Car> builder = uow.newEntityBuilder( Car.class );
-        Car prototype = builder.instanceFor( CarEntity.class );
-        prototype.manufacturer().set( manufacturer );
-        prototype.model().set( model );
-        prototype.year().set( year );
-        CarEntity entity = (CarEntity) builder.newInstance();
-        return entity.identity().get();
-    }
-
-    private String createAnimal( String name, String sound )
-    {
-        UnitOfWork uow = module.currentUnitOfWork();
-        EntityBuilder<Animal> builder = uow.newEntityBuilder( Animal.class );
-        Animal prototype = builder.instanceFor( AnimalEntity.class );
-        prototype.name().set( name );
-        prototype.sound().set( sound );
-        AnimalEntity entity = (AnimalEntity) builder.newInstance();
-        return entity.identity().get();
-    }
-
-    public interface Car
-    {
-
-        Property<String> manufacturer();
-
-        Property<String> model();
-
-        Property<Integer> year();
-
-    }
-
-    public interface CarEntity
-        extends Car, EntityComposite
-    {
-    }
-
-    public interface Animal
-    {
-
-        Property<String> name();
-
-        Property<String> sound();
-
-    }
-
-    public interface AnimalEntity
-        extends Animal, EntityComposite
-    {
-    }
-
-}
diff --git a/tools/envisage/build.gradle b/tools/envisage/build.gradle
index 0fcab0b..65cca01 100644
--- a/tools/envisage/build.gradle
+++ b/tools/envisage/build.gradle
@@ -1,6 +1,25 @@
-description = "Visualizer of a Qi4j Application Structure."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Envisage" }}
+description = "Visualizer of a Apache Zest™ Application Structure."
+
+jar { manifest { name = "Apache Zest™ Envisage" }}
 
 dependencies {
 
diff --git a/tools/envisage/dev-status.xml b/tools/envisage/dev-status.xml
index c847a9f..4458bbb 100644
--- a/tools/envisage/dev-status.xml
+++ b/tools/envisage/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/tools/envisage/src/docs/envisage.txt b/tools/envisage/src/docs/envisage.txt
index 2bdd6cd..01551c0 100644
--- a/tools/envisage/src/docs/envisage.txt
+++ b/tools/envisage/src/docs/envisage.txt
@@ -1,7 +1,26 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[tools-envisage,Envisage Tool]]
 = Envisage =
 
-Envisage is a Swing based visualization tool for the Qi4j Application model.
+Envisage is a Swing based visualization tool for the Zest™ Application model.
 Visualizations can be printed to PDFs.
 
 == Usage ==
diff --git a/tools/envisage/src/main/java/org/qi4j/envisage/EnvisageFrame.form b/tools/envisage/src/main/java/org/qi4j/envisage/EnvisageFrame.form
index 2039b6f..07a444e 100644
--- a/tools/envisage/src/main/java/org/qi4j/envisage/EnvisageFrame.form
+++ b/tools/envisage/src/main/java/org/qi4j/envisage/EnvisageFrame.form
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
 <form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="org.qi4j.envisage.EnvisageFrame">
   <grid id="27dc6" binding="contentPane" layout-manager="BorderLayout" hgap="0" vgap="0">
     <constraints>
diff --git a/tools/envisage/src/main/java/org/qi4j/envisage/Main.java b/tools/envisage/src/main/java/org/qi4j/envisage/Main.java
index a4d4674..83414c6 100644
--- a/tools/envisage/src/main/java/org/qi4j/envisage/Main.java
+++ b/tools/envisage/src/main/java/org/qi4j/envisage/Main.java
@@ -32,7 +32,6 @@
         throws ClassNotFoundException, IllegalAccessException, InstantiationException, AssemblyException
     {
         String applicationAssemblerName = args[0];
-        System.out.println( "Assembler:" + applicationAssemblerName );
         Class applicationAssemblerClass = Class.forName( applicationAssemblerName );
         ApplicationAssembler assembler = (ApplicationAssembler) applicationAssemblerClass.newInstance();
 
diff --git a/tools/envisage/src/main/java/org/qi4j/envisage/detail/APIPane.form b/tools/envisage/src/main/java/org/qi4j/envisage/detail/APIPane.form
index b57f89f..d59d086 100644
--- a/tools/envisage/src/main/java/org/qi4j/envisage/detail/APIPane.form
+++ b/tools/envisage/src/main/java/org/qi4j/envisage/detail/APIPane.form
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
 <form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="org.qi4j.envisage.detail.APIPane">
   <grid id="27dc6" binding="contentPane" layout-manager="BorderLayout" hgap="0" vgap="0">
     <constraints>
diff --git a/tools/envisage/src/main/java/org/qi4j/envisage/detail/DependencyPane.form b/tools/envisage/src/main/java/org/qi4j/envisage/detail/DependencyPane.form
index 3b3e55a..c69348b 100644
--- a/tools/envisage/src/main/java/org/qi4j/envisage/detail/DependencyPane.form
+++ b/tools/envisage/src/main/java/org/qi4j/envisage/detail/DependencyPane.form
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
 <form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="org.qi4j.envisage.detail.DependencyPane">
   <grid id="27dc6" binding="contentPane" layout-manager="BorderLayout" hgap="0" vgap="0">
     <constraints>
diff --git a/tools/envisage/src/main/java/org/qi4j/envisage/detail/GeneralPane.form b/tools/envisage/src/main/java/org/qi4j/envisage/detail/GeneralPane.form
index 459af32..6a4d975 100644
--- a/tools/envisage/src/main/java/org/qi4j/envisage/detail/GeneralPane.form
+++ b/tools/envisage/src/main/java/org/qi4j/envisage/detail/GeneralPane.form
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
 <form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="org.qi4j.envisage.detail.GeneralPane">
   <grid id="27dc6" binding="contentPane" layout-manager="BorderLayout" hgap="0" vgap="0">
     <constraints>
diff --git a/tools/envisage/src/main/java/org/qi4j/envisage/detail/ImportedByPane.form b/tools/envisage/src/main/java/org/qi4j/envisage/detail/ImportedByPane.form
index eb7dfab..09ab310 100644
--- a/tools/envisage/src/main/java/org/qi4j/envisage/detail/ImportedByPane.form
+++ b/tools/envisage/src/main/java/org/qi4j/envisage/detail/ImportedByPane.form
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
 <form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="org.qi4j.envisage.detail.ImportedByPane">
   <grid id="27dc6" binding="contentPane" layout-manager="GridBagLayout">
     <constraints>
diff --git a/tools/envisage/src/main/java/org/qi4j/envisage/detail/MethodPane.form b/tools/envisage/src/main/java/org/qi4j/envisage/detail/MethodPane.form
index b4886c6..9cc7068 100644
--- a/tools/envisage/src/main/java/org/qi4j/envisage/detail/MethodPane.form
+++ b/tools/envisage/src/main/java/org/qi4j/envisage/detail/MethodPane.form
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
 <form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="org.qi4j.envisage.detail.MethodPane">
   <grid id="27dc6" binding="contentPane" layout-manager="BorderLayout" hgap="0" vgap="0">
     <constraints>
diff --git a/tools/envisage/src/main/java/org/qi4j/envisage/detail/SPIPane.form b/tools/envisage/src/main/java/org/qi4j/envisage/detail/SPIPane.form
index ab440f7..c50407a 100644
--- a/tools/envisage/src/main/java/org/qi4j/envisage/detail/SPIPane.form
+++ b/tools/envisage/src/main/java/org/qi4j/envisage/detail/SPIPane.form
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
 <form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="org.qi4j.envisage.detail.SPIPane">
   <grid id="27dc6" binding="contentPane" layout-manager="BorderLayout" hgap="0" vgap="0">
     <constraints>
diff --git a/tools/envisage/src/main/java/org/qi4j/envisage/detail/ServiceConfigurationPane.form b/tools/envisage/src/main/java/org/qi4j/envisage/detail/ServiceConfigurationPane.form
index 9446d9a..e6e4aae 100644
--- a/tools/envisage/src/main/java/org/qi4j/envisage/detail/ServiceConfigurationPane.form
+++ b/tools/envisage/src/main/java/org/qi4j/envisage/detail/ServiceConfigurationPane.form
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
 <form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="org.qi4j.envisage.detail.ServiceConfigurationPane">
   <grid id="27dc6" binding="contentPane" layout-manager="GridBagLayout">
     <constraints>
diff --git a/tools/envisage/src/main/java/org/qi4j/envisage/detail/ServiceUsagePane.form b/tools/envisage/src/main/java/org/qi4j/envisage/detail/ServiceUsagePane.form
index 1fba606..bcf1ee5 100644
--- a/tools/envisage/src/main/java/org/qi4j/envisage/detail/ServiceUsagePane.form
+++ b/tools/envisage/src/main/java/org/qi4j/envisage/detail/ServiceUsagePane.form
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
 <form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="org.qi4j.envisage.detail.ServiceUsagePane">
   <grid id="27dc6" binding="contentPane" layout-manager="BorderLayout" hgap="0" vgap="0">
     <constraints>
diff --git a/tools/envisage/src/main/java/org/qi4j/envisage/detail/StatePane.form b/tools/envisage/src/main/java/org/qi4j/envisage/detail/StatePane.form
index 8a4bc4f..90fb4e4 100644
--- a/tools/envisage/src/main/java/org/qi4j/envisage/detail/StatePane.form
+++ b/tools/envisage/src/main/java/org/qi4j/envisage/detail/StatePane.form
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
 <form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="org.qi4j.envisage.detail.StatePane">
   <grid id="27dc6" binding="contentPane" layout-manager="BorderLayout" hgap="0" vgap="0">
     <constraints>
diff --git a/tools/envisage/src/main/java/org/qi4j/envisage/detail/package.html b/tools/envisage/src/main/java/org/qi4j/envisage/detail/package.html
index d02c736..7778987 100644
--- a/tools/envisage/src/main/java/org/qi4j/envisage/detail/package.html
+++ b/tools/envisage/src/main/java/org/qi4j/envisage/detail/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Envisage Tool Detail UI.</h2>
diff --git a/tools/envisage/src/main/java/org/qi4j/envisage/event/package.html b/tools/envisage/src/main/java/org/qi4j/envisage/event/package.html
index 8695c02..949d2e1 100644
--- a/tools/envisage/src/main/java/org/qi4j/envisage/event/package.html
+++ b/tools/envisage/src/main/java/org/qi4j/envisage/event/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Envisage Tool UI Events.</h2>
diff --git a/tools/envisage/src/main/java/org/qi4j/envisage/graph/GraphPane.java b/tools/envisage/src/main/java/org/qi4j/envisage/graph/GraphPane.java
index 132985e..a94a814 100644
--- a/tools/envisage/src/main/java/org/qi4j/envisage/graph/GraphPane.java
+++ b/tools/envisage/src/main/java/org/qi4j/envisage/graph/GraphPane.java
@@ -130,8 +130,6 @@
 
     private void graphItemLinkActivated( LinkEvent evt )
     {
-        //System.out.println("this is called");
-        //System.out.println(evt.getSource().getClass());
         if( evt.getSource().equals( treeDisplay ) )
         {
             stackedDisplay.setSelectedValue( evt.getObject() );
diff --git a/tools/envisage/src/main/java/org/qi4j/envisage/graph/StackedLayout.java b/tools/envisage/src/main/java/org/qi4j/envisage/graph/StackedLayout.java
index 5d2795e..959f050 100644
--- a/tools/envisage/src/main/java/org/qi4j/envisage/graph/StackedLayout.java
+++ b/tools/envisage/src/main/java/org/qi4j/envisage/graph/StackedLayout.java
@@ -97,7 +97,6 @@
         int height = fm.getHeight();
         minSize.setSize( width + INSET + INSET, height + INSET + INSET );
 
-        //System.out.println(fm.getAscent());
         return minSize;
     }
 
@@ -110,7 +109,6 @@
 
         if( depth > zoom )
         {
-            //System.out.println("depth: " +  depth + "  zoom: " + zoom);
             node.setBounds( x, y, 0, 0 );
             node.setVisible( false );
         }
diff --git a/tools/envisage/src/main/java/org/qi4j/envisage/graph/package.html b/tools/envisage/src/main/java/org/qi4j/envisage/graph/package.html
index f4a5997..becdd99 100644
--- a/tools/envisage/src/main/java/org/qi4j/envisage/graph/package.html
+++ b/tools/envisage/src/main/java/org/qi4j/envisage/graph/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Envisage Tool Graph Visualization.</h2>
diff --git a/tools/envisage/src/main/java/org/qi4j/envisage/package.html b/tools/envisage/src/main/java/org/qi4j/envisage/package.html
index 3fd940d..be039d1 100644
--- a/tools/envisage/src/main/java/org/qi4j/envisage/package.html
+++ b/tools/envisage/src/main/java/org/qi4j/envisage/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Envisage Tool.</h2>
diff --git a/tools/envisage/src/main/java/org/qi4j/envisage/print/PDFWriter.java b/tools/envisage/src/main/java/org/qi4j/envisage/print/PDFWriter.java
index da95957..59e0d55 100644
--- a/tools/envisage/src/main/java/org/qi4j/envisage/print/PDFWriter.java
+++ b/tools/envisage/src/main/java/org/qi4j/envisage/print/PDFWriter.java
@@ -678,7 +678,6 @@
         // check for page size, if necessary create new page
         if( ( curY - lineSpace ) <= startY )
         {
-            //System.out.println("new line: " + curY + " - " + lineSpace + " = " + (curY-lineSpace) );
             createNewPage();
         }
 
@@ -725,7 +724,6 @@
             curContentStream = new PDPageContentStream( doc, page );
 
             curPageSize = page.getArtBox();
-            //System.out.println("pSize: " + pdRect.getWidth() + "," + pdRect.getHeight());
 
             curContentStream.beginText();
             curY = curPageSize.getHeight() - startY;
diff --git a/tools/envisage/src/main/java/org/qi4j/envisage/print/package.html b/tools/envisage/src/main/java/org/qi4j/envisage/print/package.html
index f2cf971..d281483 100644
--- a/tools/envisage/src/main/java/org/qi4j/envisage/print/package.html
+++ b/tools/envisage/src/main/java/org/qi4j/envisage/print/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Envisage Tool PDF Print Support.</h2>
diff --git a/tools/envisage/src/main/java/org/qi4j/envisage/tree/TreeModelPane.java b/tools/envisage/src/main/java/org/qi4j/envisage/tree/TreeModelPane.java
index 8d60aa8..591041e 100644
--- a/tools/envisage/src/main/java/org/qi4j/envisage/tree/TreeModelPane.java
+++ b/tools/envisage/src/main/java/org/qi4j/envisage/tree/TreeModelPane.java
@@ -176,7 +176,6 @@
             return;
         }
 
-        //System.out.println(obj.toString());
         TreeNode node = findNode( structureTree, obj );
         if( node != null )
         {
diff --git a/tools/envisage/src/main/java/org/qi4j/envisage/tree/package.html b/tools/envisage/src/main/java/org/qi4j/envisage/tree/package.html
index 4198846..67eb29a 100644
--- a/tools/envisage/src/main/java/org/qi4j/envisage/tree/package.html
+++ b/tools/envisage/src/main/java/org/qi4j/envisage/tree/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Envisage Tool Application Tree.</h2>
diff --git a/tools/envisage/src/main/java/org/qi4j/envisage/util/package.html b/tools/envisage/src/main/java/org/qi4j/envisage/util/package.html
index a03ef6b..c6b3955 100644
--- a/tools/envisage/src/main/java/org/qi4j/envisage/util/package.html
+++ b/tools/envisage/src/main/java/org/qi4j/envisage/util/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Envisage Tool Utilities.</h2>
diff --git a/tools/envisage/src/main/resources/org/qi4j/envisage/EnvisageFrame.properties b/tools/envisage/src/main/resources/org/qi4j/envisage/EnvisageFrame.properties
index f78a19c..639258b 100644
--- a/tools/envisage/src/main/resources/org/qi4j/envisage/EnvisageFrame.properties
+++ b/tools/envisage/src/main/resources/org/qi4j/envisage/EnvisageFrame.properties
@@ -1 +1,16 @@
+# 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.
+
 Application.Title=Qi4J Envisage
\ No newline at end of file
diff --git a/tools/envisage/src/main/resources/org/qi4j/envisage/detail/APIPane.properties b/tools/envisage/src/main/resources/org/qi4j/envisage/detail/APIPane.properties
index 54ee7cf..9faf717 100644
--- a/tools/envisage/src/main/resources/org/qi4j/envisage/detail/APIPane.properties
+++ b/tools/envisage/src/main/resources/org/qi4j/envisage/detail/APIPane.properties
@@ -1,3 +1,18 @@
+# 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.
+
 Service.Column=Service
 Module.Column=Module
 Visibility.Column=Visibility
\ No newline at end of file
diff --git a/tools/envisage/src/main/resources/org/qi4j/envisage/detail/DependencyPane.properties b/tools/envisage/src/main/resources/org/qi4j/envisage/detail/DependencyPane.properties
index 5467cc2..7103ac5 100644
--- a/tools/envisage/src/main/resources/org/qi4j/envisage/detail/DependencyPane.properties
+++ b/tools/envisage/src/main/resources/org/qi4j/envisage/detail/DependencyPane.properties
@@ -1,3 +1,18 @@
+# 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.
+
 CTL_ClassName.Text = Class Name:
 CTL_Optional.Text = Optional:
 CTL_Annotation.Text = Annotation:
diff --git a/tools/envisage/src/main/resources/org/qi4j/envisage/detail/DetailModelPane.properties b/tools/envisage/src/main/resources/org/qi4j/envisage/detail/DetailModelPane.properties
index 510f291..e461a4a 100644
--- a/tools/envisage/src/main/resources/org/qi4j/envisage/detail/DetailModelPane.properties
+++ b/tools/envisage/src/main/resources/org/qi4j/envisage/detail/DetailModelPane.properties
@@ -1,3 +1,18 @@
+# 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.
+
 CTL_GeneralTab.Text = General
 CTL_MethodTab.Text = Methods
 CTL_StateTab.Text = States
diff --git a/tools/envisage/src/main/resources/org/qi4j/envisage/detail/GeneralPane.properties b/tools/envisage/src/main/resources/org/qi4j/envisage/detail/GeneralPane.properties
index 68373eb..8104bdf 100644
--- a/tools/envisage/src/main/resources/org/qi4j/envisage/detail/GeneralPane.properties
+++ b/tools/envisage/src/main/resources/org/qi4j/envisage/detail/GeneralPane.properties
@@ -1,2 +1,17 @@
+# 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.
+
 Name.Column=Name
 Value.Column=Value
\ No newline at end of file
diff --git a/tools/envisage/src/main/resources/org/qi4j/envisage/detail/ImportedByPane.properties b/tools/envisage/src/main/resources/org/qi4j/envisage/detail/ImportedByPane.properties
index 74410e9..20edb8c 100644
--- a/tools/envisage/src/main/resources/org/qi4j/envisage/detail/ImportedByPane.properties
+++ b/tools/envisage/src/main/resources/org/qi4j/envisage/detail/ImportedByPane.properties
@@ -1,2 +1,17 @@
+# 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.
+
 CTL_Name.Text=Name:
 CTL_Class.Text=Class:
\ No newline at end of file
diff --git a/tools/envisage/src/main/resources/org/qi4j/envisage/detail/MethodPane.properties b/tools/envisage/src/main/resources/org/qi4j/envisage/detail/MethodPane.properties
index 045933e..c44c39a 100644
--- a/tools/envisage/src/main/resources/org/qi4j/envisage/detail/MethodPane.properties
+++ b/tools/envisage/src/main/resources/org/qi4j/envisage/detail/MethodPane.properties
@@ -1,2 +1,17 @@
+# 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.
+
 ICON_Public=public.png
 ICON_Private=private.png
\ No newline at end of file
diff --git a/tools/envisage/src/main/resources/org/qi4j/envisage/detail/SPIPane.properties b/tools/envisage/src/main/resources/org/qi4j/envisage/detail/SPIPane.properties
index 702a224..8f98011 100644
--- a/tools/envisage/src/main/resources/org/qi4j/envisage/detail/SPIPane.properties
+++ b/tools/envisage/src/main/resources/org/qi4j/envisage/detail/SPIPane.properties
@@ -1,3 +1,18 @@
+# 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.
+
 Dependency.Column=Dependency
 Module.Column=Module
 Layer.Column=Layer
\ No newline at end of file
diff --git a/tools/envisage/src/main/resources/org/qi4j/envisage/detail/ServiceConfigurationPane.properties b/tools/envisage/src/main/resources/org/qi4j/envisage/detail/ServiceConfigurationPane.properties
index 0ecb81a..3229a12 100644
--- a/tools/envisage/src/main/resources/org/qi4j/envisage/detail/ServiceConfigurationPane.properties
+++ b/tools/envisage/src/main/resources/org/qi4j/envisage/detail/ServiceConfigurationPane.properties
@@ -1,3 +1,18 @@
+# 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.
+
 CTL_Name.Text=Name:
 CTL_Class.Text=Class:
 CTL_Type.Text=Type:
diff --git a/tools/envisage/src/main/resources/org/qi4j/envisage/detail/ServiceUsagePane.properties b/tools/envisage/src/main/resources/org/qi4j/envisage/detail/ServiceUsagePane.properties
index f2f59a2..a6adce0 100644
--- a/tools/envisage/src/main/resources/org/qi4j/envisage/detail/ServiceUsagePane.properties
+++ b/tools/envisage/src/main/resources/org/qi4j/envisage/detail/ServiceUsagePane.properties
@@ -1,3 +1,18 @@
+# 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.
+
 Owner.Column=Owner
 Usage.Column=Usage
 Annotation.Column=Annotation
diff --git a/tools/envisage/src/main/resources/org/qi4j/envisage/detail/StatePane.properties b/tools/envisage/src/main/resources/org/qi4j/envisage/detail/StatePane.properties
index 045933e..c44c39a 100644
--- a/tools/envisage/src/main/resources/org/qi4j/envisage/detail/StatePane.properties
+++ b/tools/envisage/src/main/resources/org/qi4j/envisage/detail/StatePane.properties
@@ -1,2 +1,17 @@
+# 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.
+
 ICON_Public=public.png
 ICON_Private=private.png
\ No newline at end of file
diff --git a/tools/envisage/src/main/resources/org/qi4j/envisage/tree/TreeModelCellRenderer.properties b/tools/envisage/src/main/resources/org/qi4j/envisage/tree/TreeModelCellRenderer.properties
index 1f61910..b694372 100644
--- a/tools/envisage/src/main/resources/org/qi4j/envisage/tree/TreeModelCellRenderer.properties
+++ b/tools/envisage/src/main/resources/org/qi4j/envisage/tree/TreeModelCellRenderer.properties
@@ -1,3 +1,18 @@
+# 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.
+
 ICON_Application=application.png
 ICON_Layer=layer.png
 ICON_Module=module.png
diff --git a/tools/envisage/src/main/resources/org/qi4j/envisage/tree/TreeModelPane.properties b/tools/envisage/src/main/resources/org/qi4j/envisage/tree/TreeModelPane.properties
index b4ca5c4..8cedb43 100644
--- a/tools/envisage/src/main/resources/org/qi4j/envisage/tree/TreeModelPane.properties
+++ b/tools/envisage/src/main/resources/org/qi4j/envisage/tree/TreeModelPane.properties
@@ -1 +1,16 @@
+# 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.
+
 CTL_ViewAs.Text = View
\ No newline at end of file
diff --git a/tools/model-detail/build.gradle b/tools/model-detail/build.gradle
index 3d207ff..2879371 100644
--- a/tools/model-detail/build.gradle
+++ b/tools/model-detail/build.gradle
@@ -1,6 +1,25 @@
-description = "Detailled Model of a Qi4j Application Structure."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Model Detail" }}
+description = "Detailled Model of a Apache Zest™ Application Structure."
+
+jar { manifest { name = "Apache Zest™ Model Detail" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
diff --git a/tools/model-detail/dev-status.xml b/tools/model-detail/dev-status.xml
index c847a9f..4458bbb 100644
--- a/tools/model-detail/dev-status.xml
+++ b/tools/model-detail/dev-status.xml
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  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.
+-->
 <module xmlns="http://www.qi4j.org/schemas/2008/dev-status/1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.qi4j.org/schemas/2008/dev-status/1
diff --git a/tools/model-detail/src/main/java/org/qi4j/tools/model/descriptor/package.html b/tools/model-detail/src/main/java/org/qi4j/tools/model/descriptor/package.html
index ce61930..4ece360 100644
--- a/tools/model-detail/src/main/java/org/qi4j/tools/model/descriptor/package.html
+++ b/tools/model-detail/src/main/java/org/qi4j/tools/model/descriptor/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Detailled Application Model Descriptors.</h2>
diff --git a/tools/model-detail/src/main/java/org/qi4j/tools/model/util/package.html b/tools/model-detail/src/main/java/org/qi4j/tools/model/util/package.html
index 500b650..430bb8f 100644
--- a/tools/model-detail/src/main/java/org/qi4j/tools/model/util/package.html
+++ b/tools/model-detail/src/main/java/org/qi4j/tools/model/util/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <html>
     <body>
         <h2>Detailled Application Model Utilities.</h2>
diff --git a/tools/qidea/TODO b/tools/qidea/TODO
index 0807089..39b167e 100644
--- a/tools/qidea/TODO
+++ b/tools/qidea/TODO
@@ -1,5 +1,4 @@
 o Add Diagram
-  o Look at com.intellij.struts.diagram.StrutsGraphEditor
 o File template for
   o Generic Concern
   o Concern
diff --git a/tools/qidea/build.gradle b/tools/qidea/build.gradle
index 26ce5b6..559acdb 100644
--- a/tools/qidea/build.gradle
+++ b/tools/qidea/build.gradle
@@ -1,6 +1,25 @@
-description = "IntelliJ IDEA Plugin for Qi4j development."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j IDEA plugin" }}
+description = "IntelliJ IDEA Plugin for Apache Zest™ development."
+
+jar { manifest { name = "Apache Zest™ IDEA plugin" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
diff --git a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/facet/Qi4jFacetType.java b/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/facet/Qi4jFacetType.java
index db6cc06..a90ecec 100644
--- a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/facet/Qi4jFacetType.java
+++ b/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/facet/Qi4jFacetType.java
@@ -46,7 +46,7 @@
 
     public Qi4jFacetType()
     {
-        super( ID, "Qi4jFacet", "Qi4j Facet" );
+        super( ID, "Qi4jFacet", "Zest Facet" );
     }
 
     public final Qi4jFacetConfiguration createDefaultConfiguration()
diff --git a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/facet/ui/Qi4jFacetEditorTab.java b/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/facet/ui/Qi4jFacetEditorTab.java
index 945f909..de96adf 100644
--- a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/facet/ui/Qi4jFacetEditorTab.java
+++ b/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/facet/ui/Qi4jFacetEditorTab.java
@@ -39,7 +39,7 @@
     @Nls
     public final String getDisplayName()
     {
-        return "Qi4j";
+        return "Zest";
     }
 
     public JComponent createComponent()
diff --git a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/concerns/actions/create/CreateConcernFromMixinTypeOrCompositeAction.java b/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/concerns/actions/create/CreateConcernFromMixinTypeOrCompositeAction.java
index 31a5190..b762e3b 100644
--- a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/concerns/actions/create/CreateConcernFromMixinTypeOrCompositeAction.java
+++ b/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/concerns/actions/create/CreateConcernFromMixinTypeOrCompositeAction.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.ide.plugin.idea.concerns.actions.create;
 
 import com.intellij.psi.PsiDirectory;
diff --git a/tools/qidea/src/main/resources/META-INF/plugin.xml b/tools/qidea/src/main/resources/META-INF/plugin.xml
index 7c5dfb8..5a4a6e6 100644
--- a/tools/qidea/src/main/resources/META-INF/plugin.xml
+++ b/tools/qidea/src/main/resources/META-INF/plugin.xml
@@ -1,8 +1,24 @@
 <!DOCTYPE idea-plugin PUBLIC "Plugin/DTD" "http://plugins.intellij.net/plugin.dtd">
+<!--
+  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.
+-->
 <idea-plugin>
   <id>org.qi4j</id>
   <name>qidea</name>
-  <description>Qi4j idea plugin</description>
+  <description>Apache Zest™ idea plugin</description>
   <version>0.1</version>
   <vendor>codedragons</vendor>
   <idea-version since-build="8000"/>
@@ -18,14 +34,14 @@
   <actions>
     <action id="CreateConcernFromMixinTypeOrCompositeAction"
             class="org.qi4j.ide.plugin.idea.concerns.actions.create.CreateConcernFromMixinTypeOrCompositeAction"
-            text="New Concern" description="Create new Qi4j concern">
+            text="New Concern" description="Create new Zest™ concern">
       <add-to-group group-id="CodeMenu" anchor="last"/>
     </action>
 
-    <group id="Qi4j" class="org.qi4j.ide.plugin.idea.common.actions.Qi4jCreateActionGroup" text="Qi4j">
-      <action id="Qi4j.NewConcernOf"
+    <group id="Zest" class="org.qi4j.ide.plugin.idea.common.actions.Qi4jCreateActionGroup" text="Zest™">
+      <action id="Zest.NewConcernOf"
               class="org.qi4j.ide.plugin.idea.concerns.actions.create.inPackage.CreateConcernOfInPackageAction"
-              text="New Concern" description="Create new Qi4j concern">
+              text="New Concern" description="Create new Zest concern">
       </action>
       <add-to-group group-id="NewGroup" anchor="last"/>
     </group>
diff --git a/tools/qidea/src/main/resources/fileTemplates/j2ee/GenericConcernOf.java.html b/tools/qidea/src/main/resources/fileTemplates/j2ee/GenericConcernOf.java.html
index 3c9fcf5..10ea9e8 100644
--- a/tools/qidea/src/main/resources/fileTemplates/j2ee/GenericConcernOf.java.html
+++ b/tools/qidea/src/main/resources/fileTemplates/j2ee/GenericConcernOf.java.html
@@ -1,6 +1,22 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
         "http://www.w3.org/TR/html4/loose.dtd">
 <html>
+<!--
+  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.
+-->
 <body>
 <table border="0" cellpadding="2" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
     <tr>
diff --git a/tools/qidea/src/main/resources/inspectionDescriptions/ConcernsAnnotationDeclaredCorrectlyInspection.html b/tools/qidea/src/main/resources/inspectionDescriptions/ConcernsAnnotationDeclaredCorrectlyInspection.html
index e7d7e07..5d85e6a 100644
--- a/tools/qidea/src/main/resources/inspectionDescriptions/ConcernsAnnotationDeclaredCorrectlyInspection.html
+++ b/tools/qidea/src/main/resources/inspectionDescriptions/ConcernsAnnotationDeclaredCorrectlyInspection.html
@@ -1,4 +1,20 @@
 <html>
+<!--
+  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.
+-->
 <body>
 <font face="verdana" size="-1">This inspection reports any @Concerns declarations value that does not implement
     [org.qi4j.composite.ConcernOf] class.
diff --git a/tools/qidea/src/main/resources/intentionDescriptions/AddConcernOnType/description.html b/tools/qidea/src/main/resources/intentionDescriptions/AddConcernOnType/description.html
index 4ed92e2..51f48f9 100644
--- a/tools/qidea/src/main/resources/intentionDescriptions/AddConcernOnType/description.html
+++ b/tools/qidea/src/main/resources/intentionDescriptions/AddConcernOnType/description.html
@@ -1,4 +1,20 @@
 <html>
+<!--
+  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.
+-->
 <body>
 <font face="verdana" size="-1">
     This intention add a concern annotation.
diff --git a/tools/qidea/src/main/resources/org/qi4j/ide/plugin/idea/common/resource/Qi4jResourceBundle.properties b/tools/qidea/src/main/resources/org/qi4j/ide/plugin/idea/common/resource/Qi4jResourceBundle.properties
index cf8202a..cd8c07c 100644
--- a/tools/qidea/src/main/resources/org/qi4j/ide/plugin/idea/common/resource/Qi4jResourceBundle.properties
+++ b/tools/qidea/src/main/resources/org/qi4j/ide/plugin/idea/common/resource/Qi4jResourceBundle.properties
@@ -1,3 +1,18 @@
+# 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.
+
 # *****************************************************************************
 # Common
 # *****************************************************************************
diff --git a/tools/shell/build.gradle b/tools/shell/build.gradle
index a3d89ac..19d1ed7 100644
--- a/tools/shell/build.gradle
+++ b/tools/shell/build.gradle
@@ -1,9 +1,28 @@
+/*
+ * 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.
+ */
+
 apply plugin: 'application'
 
-description = "Command line tools for building Qi4j applications."
+description = "Command line tools for building Apache Zest™ applications."
 mainClassName = "org.qi4j.tools.shell.Main"
 
-jar { manifest { name = "Qi4j Command Line" } }
+jar { manifest { name = "Apache Zest™ Command Line" } }
 
 dependencies {
   compile( project( ":org.qi4j.core:org.qi4j.core.bootstrap" ) )
diff --git a/tools/shell/src/bin/qi4j b/tools/shell/src/bin/qi4j
index d678cfd..544595b 100644
--- a/tools/shell/src/bin/qi4j
+++ b/tools/shell/src/bin/qi4j
@@ -1,4 +1,19 @@
 #!/bin/sh
 
+# 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.
+
 java -jar org.qi4j.tools.shell-@@version@@.jar "$@"
 
diff --git a/tools/shell/src/etc/templates/defaultproject/project.properties b/tools/shell/src/etc/templates/defaultproject/project.properties
index e69de29..a779d4f 100644
--- a/tools/shell/src/etc/templates/defaultproject/project.properties
+++ b/tools/shell/src/etc/templates/defaultproject/project.properties
@@ -0,0 +1,15 @@
+# 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.
+
diff --git a/tools/shell/src/main/java/org/qi4j/tools/shell/AbstractCommand.java b/tools/shell/src/main/java/org/qi4j/tools/shell/AbstractCommand.java
index 7de5e4a..9b6441a 100644
--- a/tools/shell/src/main/java/org/qi4j/tools/shell/AbstractCommand.java
+++ b/tools/shell/src/main/java/org/qi4j/tools/shell/AbstractCommand.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tools.shell;
 
 public abstract class AbstractCommand
diff --git a/tools/shell/src/main/java/org/qi4j/tools/shell/Command.java b/tools/shell/src/main/java/org/qi4j/tools/shell/Command.java
index 046de85..a6f0cc5 100644
--- a/tools/shell/src/main/java/org/qi4j/tools/shell/Command.java
+++ b/tools/shell/src/main/java/org/qi4j/tools/shell/Command.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tools.shell;
 
 import java.io.BufferedReader;
diff --git a/tools/shell/src/main/java/org/qi4j/tools/shell/FileUtils.java b/tools/shell/src/main/java/org/qi4j/tools/shell/FileUtils.java
index e0f96ba..ccd21fe 100644
--- a/tools/shell/src/main/java/org/qi4j/tools/shell/FileUtils.java
+++ b/tools/shell/src/main/java/org/qi4j/tools/shell/FileUtils.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tools.shell;
 
 import java.io.File;
diff --git a/tools/shell/src/main/java/org/qi4j/tools/shell/HelpNeededException.java b/tools/shell/src/main/java/org/qi4j/tools/shell/HelpNeededException.java
index 995dc06..7291121 100644
--- a/tools/shell/src/main/java/org/qi4j/tools/shell/HelpNeededException.java
+++ b/tools/shell/src/main/java/org/qi4j/tools/shell/HelpNeededException.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tools.shell;
 
 public class HelpNeededException extends RuntimeException
diff --git a/tools/shell/src/main/java/org/qi4j/tools/shell/Main.java b/tools/shell/src/main/java/org/qi4j/tools/shell/Main.java
index 9a5966d..be15e24 100644
--- a/tools/shell/src/main/java/org/qi4j/tools/shell/Main.java
+++ b/tools/shell/src/main/java/org/qi4j/tools/shell/Main.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tools.shell;
 
 import java.io.BufferedReader;
@@ -26,7 +44,7 @@
     {
         if( !contains( args, "-q" ) )
         {
-            System.out.println( "Qi4j - Classes are Dead. Long Live Interfaces!" );
+            System.out.println( "Zest - Classes are Dead. Long Live Interfaces!" );
             System.out.println( "----------------------------------------------\n" );
         }
         if( args.length == 0 )
diff --git a/tools/shell/src/main/java/org/qi4j/tools/shell/create/CreateProject.java b/tools/shell/src/main/java/org/qi4j/tools/shell/create/CreateProject.java
index 0c864ab..9660c42 100644
--- a/tools/shell/src/main/java/org/qi4j/tools/shell/create/CreateProject.java
+++ b/tools/shell/src/main/java/org/qi4j/tools/shell/create/CreateProject.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tools.shell.create;
 
 import java.io.BufferedReader;
diff --git a/tools/shell/src/main/java/org/qi4j/tools/shell/help/HelpCommand.java b/tools/shell/src/main/java/org/qi4j/tools/shell/help/HelpCommand.java
index 45131d7..e5058fc 100644
--- a/tools/shell/src/main/java/org/qi4j/tools/shell/help/HelpCommand.java
+++ b/tools/shell/src/main/java/org/qi4j/tools/shell/help/HelpCommand.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tools.shell.help;
 
 import java.io.BufferedReader;
diff --git a/tutorials/cargo/build.gradle b/tutorials/cargo/build.gradle
index 87bbef0..9a301bb 100644
--- a/tutorials/cargo/build.gradle
+++ b/tutorials/cargo/build.gradle
@@ -1,6 +1,25 @@
-description = "Tutorial on how to convert existing application into a Qi4j one, step-by-step."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Tutorial - Cargo" }}
+description = "Tutorial on how to convert existing application into a Apache Zest™ one, step-by-step."
+
+jar { manifest { name = "Apache Zest™ Tutorial - Cargo" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
diff --git a/tutorials/cargo/src/main/java/org/qi4j/tutorials/cargo/package.html b/tutorials/cargo/src/main/java/org/qi4j/tutorials/cargo/package.html
index 02efc9f..7dd1df5 100644
--- a/tutorials/cargo/src/main/java/org/qi4j/tutorials/cargo/package.html
+++ b/tutorials/cargo/src/main/java/org/qi4j/tutorials/cargo/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <body>
 <h1>Tutorial - Cargo</h1>
 
@@ -5,13 +21,13 @@
     In Eric Evans' book Domain Driven Design, ISBN 0-321-12521-5, we find a domain oriented discussion
     around cargo making voyages from the starting point to a destination. The discussion in DDD is
     not continuous, so we need to find the many snippets throughout the book. We will try to
-    address each piece found in the book as it appears, and how that is dealt with in Qi4j.
+    address each piece found in the book as it appears, and how that is dealt with in Apache Zest™.
 </p>
 
 <p>
     We have chosen the Cargo example also due to the fact that Mr Evans uses this in presentations
     about Domain Driven Design, and that it represents exactly the type of applications that we think
-    Qi4j is made for.
+    Zest™ is made for.
 </p>
 
 <p>
diff --git a/tutorials/cargo/src/main/java/org/qi4j/tutorials/cargo/step1/package.html b/tutorials/cargo/src/main/java/org/qi4j/tutorials/cargo/step1/package.html
index 907f778..c196e3f 100644
--- a/tutorials/cargo/src/main/java/org/qi4j/tutorials/cargo/step1/package.html
+++ b/tutorials/cargo/src/main/java/org/qi4j/tutorials/cargo/step1/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <body>
 <h1>Step 1 - Evans "Making a booking."</h1>
 
@@ -66,7 +82,7 @@
 <p>
     Now, what we have done so far is to just use plain Java to implement the discussion of Mr Evans' Cargo
     example of domain-driven design. Before we move on to making the model more complex, and changing
-    the model as we understand it better, let's first refactor this into Qi4j and discuss the immediate
+    the model as we understand it better, let's first refactor this into Zest™ and discuss the immediate
     differences.
 </p>
 
@@ -74,9 +90,9 @@
     Steps;
 </p>
 <ol>
-    <li>Cargo has a <i>size</i> property. We change that to use the <i>Property</i> feature in Qi4j.</li>
+    <li>Cargo has a <i>size</i> property. We change that to use the <i>Property</i> feature in Zest™.</li>
     <li>Voyage likewise has the <i>capacity</i> and <i>bookedCargoSize</i> properties.</li>
-    <li>Qi4j doesn't need implementations of the Cargo and Voyage implementations.</li>
+    <li>Zest™ doesn't need implementations of the Cargo and Voyage implementations.</li>
     <li>Cargo and Voyage are entities, so we create CargoEntity and VoyageEntity interfaces.</li>
 </ol>
 </body>
\ No newline at end of file
diff --git a/tutorials/cargo/src/main/java/org/qi4j/tutorials/cargo/step2/package.html b/tutorials/cargo/src/main/java/org/qi4j/tutorials/cargo/step2/package.html
index 03d6340..cab1d68 100644
--- a/tutorials/cargo/src/main/java/org/qi4j/tutorials/cargo/step2/package.html
+++ b/tutorials/cargo/src/main/java/org/qi4j/tutorials/cargo/step2/package.html
@@ -1,5 +1,21 @@
+<!--
+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.
+-->
 <body>
-<h1>Step 2 - Qi4j "Making a booking."</h1>
+<h1>Step 2 - Zest™ "Making a booking."</h1>
 
 <p>
     Location: Page 17, "Knowledge-Rich Design.
@@ -8,7 +24,7 @@
 <h2>Results from Step1</h2>
 <ul>
     <li>For the Cargo and Voyage interfaces, we have introduced the <i>Property&lt;Double&gt;</i>.
-        <i>Property</i> is an explicitly supported type in Qi4j, which makes life a lot easier
+        <i>Property</i> is an explicitly supported type in Zest™, which makes life a lot easier
         for everyone involved.
     </li>
     <li>The SequenceGenerator has changed the name to "HasSequence", since it doesn't handle the
diff --git a/tutorials/composites/build.gradle b/tutorials/composites/build.gradle
index a2106e5..534848a 100644
--- a/tutorials/composites/build.gradle
+++ b/tutorials/composites/build.gradle
@@ -1,12 +1,29 @@
-description = "Basic tutorial on how to covert a simple 'Hello World' application to Qi4j, using more and more features for each step."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Tutorial - Composites" }}
+description = "Basic tutorial on how to covert a simple 'Hello World' application to Apache Zest™, using more and more features for each step."
+
+jar { manifest { name = "Apache Zest™ Tutorial - Composites" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
   compile(project(":org.qi4j.libraries:org.qi4j.library.constraints"))
-  compile(project(":org.qi4j.libraries:org.qi4j.library.rdf"))
-  compile(project(":org.qi4j.libraries:org.qi4j.library.lang-jruby"))
 
   testCompile(project(":org.qi4j.core:org.qi4j.core.testsupport"))
   testRuntime(project(":org.qi4j.core:org.qi4j.core.runtime"))
diff --git a/tutorials/composites/src/docs/step1.txt b/tutorials/composites/src/docs/step1.txt
index 980c26c..df8ce5c 100644
--- a/tutorials/composites/src/docs/step1.txt
+++ b/tutorials/composites/src/docs/step1.txt
@@ -1,9 +1,28 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[tut-composites-step1,Step 1 - Interface Refactoring]]
 = Step 1 - Interface Refactoring =
 
 == Initial Hello World ==
 
-This whole tutorial describes how to step-by-step modify a typical HelloWorld "application" into a full-fledged Qi4j 
+This whole tutorial describes how to step-by-step modify a typical HelloWorld "application" into a full-fledged Zest™
 Composite Oriented application. Here is the initial code of HelloWorld.
 
 [snippet,java]
@@ -17,7 +36,7 @@
 In this step we start with a basic Java class, which when invoked will concatenate the two properties "phrase" 
 and "name". If invoked with the properties set to "Hello" and "World" respectively it will hence return "Hello World".
 
-Qi4j relies heavily on the use of interfaces. This makes it possible for an object to externally implement a number of 
+Zest™ relies heavily on the use of interfaces. This makes it possible for an object to externally implement a number of
 interfaces which internally is backed by a number of Mixins, some of which you may have written yourself, and some of 
 which may have been reused. This also makes it easy to introduce Modifiers (aka "interceptors", aka "advice"), which 
 are Fragments which execute before and/or after the method on the Mixin is invoked.
diff --git a/tutorials/composites/src/docs/step2.txt b/tutorials/composites/src/docs/step2.txt
index 0d14abc..1268ce1 100644
--- a/tutorials/composites/src/docs/step2.txt
+++ b/tutorials/composites/src/docs/step2.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[tut-composites-step2,Step 2 - Creating a Transient Composite]]
 = Step 2 - Creating a Transient Composite =
 
@@ -10,8 +29,8 @@
 framework will inspect the interface to determine what the TransientComposite instance should look like in terms of 
 used Fragments.
 
-In Qi4j all method parameters are considered mandatory unless marked as @Optional. Therefore you can remove the null 
-checks in the Mixin. If a null value is passed in an exception will be thrown by Qi4j.
+In Zest™ all method parameters are considered mandatory unless marked as @Optional. Therefore you can remove the null
+checks in the Mixin. If a null value is passed in an exception will be thrown by Zest™.
 
 Steps for this tutorial:
 
diff --git a/tutorials/composites/src/docs/step3.txt b/tutorials/composites/src/docs/step3.txt
index 4d44c46..3522898 100644
--- a/tutorials/composites/src/docs/step3.txt
+++ b/tutorials/composites/src/docs/step3.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[tut-composites-step3,Step 3 - Mixins]]
 = Step 3 - Mixins =
 
diff --git a/tutorials/composites/src/docs/step4.txt b/tutorials/composites/src/docs/step4.txt
index 450a673..d940443 100644
--- a/tutorials/composites/src/docs/step4.txt
+++ b/tutorials/composites/src/docs/step4.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[tut-composites-step4,Step 4 - Concerns]]
 = Step 4 - Concerns =
 
diff --git a/tutorials/composites/src/docs/step5.txt b/tutorials/composites/src/docs/step5.txt
index eb49b94..054d1ad 100644
--- a/tutorials/composites/src/docs/step5.txt
+++ b/tutorials/composites/src/docs/step5.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[tut-composites-step5,Step 5 - Constraints]]
 = Step 5 - Constraints =
 
@@ -8,7 +27,7 @@
 optional, integer ranges, string regular expressions, and so on, cannot be expressed, and so we have to put this into
 Javadoc, and then manually add these checks in the implementation class.
 
-In Qi4j there is the option to use Constraints, which are further restrictions on the parameters. This is implemented
+In Zest™ there is the option to use Constraints, which are further restrictions on the parameters. This is implemented
 by having an annotation that describes what the Constraint does, and then an implementation class that checks whether a
 specific value fulfills the Constraint or not.
 
@@ -16,8 +35,8 @@
 introduce a new dependency to the <<library-constraints>>, where all the constraint related classes reside. So
 update your classpath settings accordingly.
 
-There are a number of pre-written constraints in Qi4j which you can use. The null check of the original HelloWorld
-version is already handled by default since Qi4j considers method parameters to be mandatory if not explicitly marked
+There are a number of pre-written constraints in Zest™ which you can use. The null check of the original HelloWorld
+version is already handled by default since Zest™ considers method parameters to be mandatory if not explicitly marked
 with the @Optional annotation. So, instead of doing that check we will add other checks that are useful to make, such
 as ensuring that the passed in string is not empty.
 
diff --git a/tutorials/composites/src/docs/step6.txt b/tutorials/composites/src/docs/step6.txt
index e4e354e..4ba88e5 100644
--- a/tutorials/composites/src/docs/step6.txt
+++ b/tutorials/composites/src/docs/step6.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[tut-composites-step6,Step 6 - SideEffects]]
 = Step 6 - SideEffects =
 
diff --git a/tutorials/composites/src/docs/step7.txt b/tutorials/composites/src/docs/step7.txt
index 2007ef4..bdec58a 100644
--- a/tutorials/composites/src/docs/step7.txt
+++ b/tutorials/composites/src/docs/step7.txt
@@ -1,13 +1,32 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[tut-composites-step7,Step 7 - Properties]]
 = Step 7 - Properties =
 
 Previous step was <<tut-composites-step6>>.
 
-One of the goals of Qi4j is to give you domain modeling tools that allow you to more concisely use domain concepts in 
+One of the goals of Zest™ is to give you domain modeling tools that allow you to more concisely use domain concepts in
 code. One of the things we do rather often is model Properties of objects as getters and setters. But this is a very 
 weak model, and does not give you any access to metadata about the property, and also makes common tasks like UI binding
 non-trivial. There is also a lot of repetition of code, which is unnecessary. Using JavaBeans conventions one typically 
-have to have code in five places for one property, whereas in Qi4j the same thing can be achieved with one line of code.
+have to have code in five places for one property, whereas in Zest™ the same thing can be achieved with one line of code.
 
 But lets start out easy. To declare a property you have to make a method in a mixin type that returns a value of the 
 type Property, and which does not take any parameters. Here's a simple example:
@@ -24,14 +43,14 @@
 reducing Properties to one-liners!
 
 In the Mixin implementation of the interface with the Property declaration you should have an injection of the Property, 
-which is created for you by Qi4j. The injection can be done in a field like this:
+which is created for you by Zest™. The injection can be done in a field like this:
 
 [source,java]
 ----
 @State Property<String> name;
 ----
 
-The State dependency injection annotation means that Qi4j will inject the Property for you. The field has the name 
+The State dependency injection annotation means that Zest™ will inject the Property for you. The field has the name
 "name", which matches the name in the interface, and therefore that Property is injected. You can then implement the 
 method trivially by just returning the "name" field.
 
diff --git a/tutorials/composites/src/docs/step8.txt b/tutorials/composites/src/docs/step8.txt
index 31a0307..90225ce 100644
--- a/tutorials/composites/src/docs/step8.txt
+++ b/tutorials/composites/src/docs/step8.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[tut-composites-step8,Step 8 - Generic Mixins]]
 = Step 8 - Generic Mixins =
 
@@ -14,7 +33,7 @@
 TransientComposite in this case), the method, and the arguments. The Fragment is then allowed to implement the method 
 any way it wants.
 
-Since interfaces with only Properties is such a common case Qi4j already has a generic Mixin that implements the 
+Since interfaces with only Properties is such a common case Zest™ already has a generic Mixin that implements the
 Properties management described above, but for the builtin Property type instead of the getter/setter variant. The 
 class is aptly named PropertyMixin.
 
@@ -24,7 +43,7 @@
 
 - Remove the HelloWorldStateMixin
 - Add a GenericPropertyMixin, and have it implement InvocationHandler
-- Inject "@State StateHolder state" in the mixin. The StateHolder interface will give you access to the Properties for the TransientComposite which Qi4j manages for you
+- Inject "@State StateHolder state" in the mixin. The StateHolder interface will give you access to the Properties for the TransientComposite which Zest™ manages for you
 - On call to invoke(), delegate to the StateHolder interface to get the Property for the invoked method
 - Add an @AppliesTo annotation to the Mixin and implement the AppliesToFilter with a rule that matches only methods that return Property values.
 - Add the mixin to the TransientComposite.
diff --git a/tutorials/composites/src/docs/step9.txt b/tutorials/composites/src/docs/step9.txt
index 6c8f8c4..6e6047f 100644
--- a/tutorials/composites/src/docs/step9.txt
+++ b/tutorials/composites/src/docs/step9.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[tut-composites-step9,Step 9 - Private and Abstract Mixins]]
 = Step 9 - Private and Abstract Mixins =
 
@@ -12,7 +31,7 @@
 implement all methods, including those found in the TransientComposite interface. However, since we are only really 
 interested in implementing the say() method we will mark this by declaring that the Mixin "implements" the 
 TransientComposite type, but is also "abstract". This, using pure Java semantics, makes it possible to avoid having to 
-implement all methods. Qi4j will during the initialization phase detect that the Mixin only handles the say() method, 
+implement all methods. Zest™ will during the initialization phase detect that the Mixin only handles the say() method,
 and therefore only map it to that specific method. In order to instantiate the Mixin it will generate a subclass which 
 implements the remaining methods in the TransientComposite type, as no-ops. These will never be called however, and is 
 there purely for the purpose of being able to instantiate the Mixin. The Mixin is considered to be an Abstract Fragment.
@@ -20,7 +39,7 @@
 To hide the state from the client we need to use what is called Private Mixins. A Private Mixin is any mixin that is 
 referenced by another Mixin by using the @This injection, but which is not included in the TransientComposite type. As 
 long as there is a Mixin implementation declared for the interface specified by the @This injection it will work, since 
-Qi4j can know how to implement the interface. But since it is not extended by the TransientComposite type there is no 
+Zest™ can know how to implement the interface. But since it is not extended by the TransientComposite type there is no
 way for a user of the TransientComposite to access it. That Mixin becomes an implementation detail. This can be used 
 either for encapsulation purposes, or for referencing utility mixins that help the rest of the code implement some 
 interface, but which itself should not be exposed.
diff --git a/tutorials/composites/src/docs/tut-composites.txt b/tutorials/composites/src/docs/tut-composites.txt
index 2f4060c..6077467 100644
--- a/tutorials/composites/src/docs/tut-composites.txt
+++ b/tutorials/composites/src/docs/tut-composites.txt
@@ -1,15 +1,34 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[tut-composites,Transient Composites Tutorial]]
 = Transient Composites Tutorial =
 
 TIP: Theses tutorials are based on actual code found in the `tutorials/` directory of the
-http://qi4j.org/downloads.html[Qi4j SDK sources]. You should start your favorite editor and find the code related to
+https://zest.apache.org/download.html[Zest™ SDK sources]. You should start your favorite editor and find the code related to
 this tutorial, run it and play with it.
 
 Throughout this set of tutorials it will be shown how to create and work with Composites, which
-is the basic element in Qi4j. We will refactor one HelloWorld class to take advantage of the various
-features in Qi4j. These refactorings will make it easier to reuse parts of the class,
+is the basic element in Zest™. We will refactor one HelloWorld class to take advantage of the various
+features in Zest™. These refactorings will make it easier to reuse parts of the class,
 and introduce new features without having to change existing code. We will also look
-at some of the existing classes, or Fragments, available in Qi4j that you can reuse
+at some of the existing classes, or Fragments, available in Zest™ that you can reuse
 so that you don't have to write everything yourself.
 
 - <<tut-composites-step1>>
@@ -33,7 +52,7 @@
 
 include::../../../../core/runtime/build/docs/buildinfo/artifact.txt[]
 
-See the <<howto-depend-on-qi4j>> tutorial for details.
+See the <<howto-depend-on-zest>> tutorial for details.
 
 :leveloffset: 3
 
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/package.html b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/package.html
index 7cd430b..eb0be63 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/package.html
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/package.html
@@ -1,4 +1,19 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<!--
+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.
+-->
 <html>
 <head>
 </head>
@@ -8,10 +23,10 @@
 <h2>TransientComposite tutorials</h2>
 <p>
 Throughout this set of tutorials it will be shown how to create and work with TransientComposites, which
-is the basic element in Qi4j. We will refactor one HelloWorld class to take advantage of the various
-features in Qi4j. These refactorings will make it easier to reuse parts of the class,
+is the basic element in Apache Zest™. We will refactor one HelloWorld class to take advantage of the various
+features in Zest™. These refactorings will make it easier to reuse parts of the class,
 and introduce new features without having to change existing code. We will also look
-at some of the existing classes, or Fragments, available in Qi4j that you can reuse
+at some of the existing classes, or Fragments, available in Zest™ that you can reuse
 so that you don't have to write everything yourself.
 </p>
 <p>
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial1/HelloWorld.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial1/HelloWorld.java
index e0c8ecc..9e9aa7f 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial1/HelloWorld.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial1/HelloWorld.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial1;
 
 // START SNIPPET: initial
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial1/package.html b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial1/package.html
index 23d7725..f3465b8 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial1/package.html
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial1/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <body>
 <h1>Tutorial 1 - Interface refactoring</h1>
 <p>
@@ -6,7 +22,7 @@
 and "World" respectively it will hence return "Hello World".
 </p>
 <p>
-Qi4j relies heavily on the use of interfaces. This makes it possible for an object
+Zest™ relies heavily on the use of interfaces. This makes it possible for an object
 to externally implement a number of interfaces which internally is backed by a number
 of Mixins, some of which you may have written yourself, and some of which may have been
 reused. This also makes it easy to introduce Modifiers (aka "interceptors", aka "advice"),
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial10/HelloWorldComposite.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial10/HelloWorldComposite.java
index 35c3fd9..d8e5416 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial10/HelloWorldComposite.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial10/HelloWorldComposite.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial10;
 
 import org.qi4j.api.composite.TransientComposite;
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial10/HelloWorldMixin.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial10/HelloWorldMixin.java
index eb427f1..fc0003c 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial10/HelloWorldMixin.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial10/HelloWorldMixin.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial10;
 
 import org.qi4j.api.injection.scope.This;
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial10/HelloWorldState.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial10/HelloWorldState.java
index e371a10..7d2ba78 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial10/HelloWorldState.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial10/HelloWorldState.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial10;
 
 import org.qi4j.api.property.Property;
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial2/HelloWorld.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial2/HelloWorld.java
index 7dc8d04..4970bf8 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial2/HelloWorld.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial2/HelloWorld.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial2;
 
 // START SNIPPET: solution
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial2/HelloWorldBehaviour.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial2/HelloWorldBehaviour.java
index b67f424..a9db8c4 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial2/HelloWorldBehaviour.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial2/HelloWorldBehaviour.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial2;
 
 // START SNIPPET: solution
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial2/HelloWorldMixin.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial2/HelloWorldMixin.java
index 53f835e..d6f463c 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial2/HelloWorldMixin.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial2/HelloWorldMixin.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial2;
 
 // START SNIPPET: solution
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial2/HelloWorldState.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial2/HelloWorldState.java
index 986d979..32789b8 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial2/HelloWorldState.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial2/HelloWorldState.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial2;
 
 // START SNIPPET: solution
@@ -5,7 +23,7 @@
 /**
  * This interface contains only the state
  * of the HelloWorld object.
- * The exceptions will be thrown by Qi4j automatically if
+ * The exceptions will be thrown by Zest automatically if
  * null is sent in as values. The parameters would have to be declared
  * as @Optional if null is allowed.
  */
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial2/package.html b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial2/package.html
index 1487ad7..cded1fe 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial2/package.html
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial2/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <body>
 <h1>Tutorial 2 - Creating a Composite</h1>
 <p>
@@ -10,8 +26,8 @@
 look like in terms of used Fragments.
 </p>
 <p>
-In Qi4j all method parameters are considered mandatory unless marked as @Optional. Therefore you can
-remove the null checks in the Mixin. If a null value is passed in an exception will be thrown by Qi4j.
+In Zest™ all method parameters are considered mandatory unless marked as @Optional. Therefore you can
+remove the null checks in the Mixin. If a null value is passed in an exception will be thrown by Zest™.
 </p>
 <p>
 Steps for this tutorial:
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial3/HelloWorld.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial3/HelloWorld.java
index 5e9cf48..4c435ae 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial3/HelloWorld.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial3/HelloWorld.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial3;
 
 /**
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial3/HelloWorldBehaviour.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial3/HelloWorldBehaviour.java
index 9e727f5..7c3e58c 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial3/HelloWorldBehaviour.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial3/HelloWorldBehaviour.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial3;
 
 /**
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial3/HelloWorldComposite.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial3/HelloWorldComposite.java
index af32039..813a82a 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial3/HelloWorldComposite.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial3/HelloWorldComposite.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial3;
 
 import org.qi4j.api.composite.TransientComposite;
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial3/HelloWorldMixin.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial3/HelloWorldMixin.java
index d01fc4c..ad01382 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial3/HelloWorldMixin.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial3/HelloWorldMixin.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial3;
 
 // START SNIPPET: solution
@@ -5,7 +23,7 @@
 /**
  * This is the implementation of the HelloWorld
  * interface. The behaviour and state is mixed. Since parameters
- * are mandatory as default in Qi4j there's no need to do null checks.
+ * are mandatory as default in Zest there's no need to do null checks.
  */
 public class HelloWorldMixin
     implements HelloWorld
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial3/HelloWorldState.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial3/HelloWorldState.java
index 02cc7ce..68a7e38 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial3/HelloWorldState.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial3/HelloWorldState.java
@@ -1,9 +1,27 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial3;
 
 /**
  * This interface contains only the state
  * of the HelloWorld Composite.
- * The exceptions will be thrown by Qi4j automatically if
+ * The exceptions will be thrown by Zest automatically if
  * null is sent in as values. The parameters would have to be declared
  * as @Optional if null is allowed.
  */
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial3/package.html b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial3/package.html
index a0d2273..267142b 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial3/package.html
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial3/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <body>
 <h1>Tutorial 3 - Mixins</h1>
 <p>
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/HelloWorld.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/HelloWorld.java
index afcf36c..e9b2a64 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/HelloWorld.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/HelloWorld.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial4;
 
 /**
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/HelloWorldBehaviour.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/HelloWorldBehaviour.java
index 1a096ae..b72c4fc 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/HelloWorldBehaviour.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/HelloWorldBehaviour.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial4;
 
 import org.qi4j.api.mixin.Mixins;
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/HelloWorldBehaviourMixin.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/HelloWorldBehaviourMixin.java
index 3a73e94..abeead2 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/HelloWorldBehaviourMixin.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/HelloWorldBehaviourMixin.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial4;
 
 import org.qi4j.api.injection.scope.This;
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/HelloWorldComposite.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/HelloWorldComposite.java
index e104a96..e377adf 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/HelloWorldComposite.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/HelloWorldComposite.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial4;
 
 import org.qi4j.api.composite.TransientComposite;
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/HelloWorldState.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/HelloWorldState.java
index e7452a5..d013ed1 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/HelloWorldState.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/HelloWorldState.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial4;
 
 import org.qi4j.api.mixin.Mixins;
@@ -7,7 +25,7 @@
 /**
  * This interface contains only the state
  * of the HelloWorld object.
- * The exceptions will be thrown by Qi4j automatically if
+ * The exceptions will be thrown by Zest automatically if
  * null is sent in as values. The parameters would have to be declared
  * as @Optional if null is allowed.
  */
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/HelloWorldStateMixin.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/HelloWorldStateMixin.java
index a2bcafc..da69b31 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/HelloWorldStateMixin.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/HelloWorldStateMixin.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial4;
 
 // START SNIPPET: solution
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/package.html b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/package.html
index dd69d87..7a8f1c8 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/package.html
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <body>
 <h1>Tutorial 4 - Concerns</h1>
 <p>
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/HelloWorld.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/HelloWorld.java
index 0b0975e..2fcaa2c 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/HelloWorld.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/HelloWorld.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial5;
 
 /**
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/HelloWorldBehaviour.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/HelloWorldBehaviour.java
index 0392284..7d88d1c 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/HelloWorldBehaviour.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/HelloWorldBehaviour.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial5;
 
 import org.qi4j.api.mixin.Mixins;
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/HelloWorldBehaviourConcern.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/HelloWorldBehaviourConcern.java
index 806292c..dd98fde 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/HelloWorldBehaviourConcern.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/HelloWorldBehaviourConcern.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial5;
 
 import org.qi4j.api.concern.ConcernOf;
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/HelloWorldBehaviourMixin.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/HelloWorldBehaviourMixin.java
index e632894..60e950d 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/HelloWorldBehaviourMixin.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/HelloWorldBehaviourMixin.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial5;
 
 import org.qi4j.api.concern.Concerns;
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/HelloWorldComposite.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/HelloWorldComposite.java
index 5d52df1..3df90d0 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/HelloWorldComposite.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/HelloWorldComposite.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial5;
 
 import org.qi4j.api.composite.TransientComposite;
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/HelloWorldState.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/HelloWorldState.java
index 8871fab..b7031ff 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/HelloWorldState.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/HelloWorldState.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial5;
 
 import org.qi4j.api.mixin.Mixins;
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/HelloWorldStateMixin.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/HelloWorldStateMixin.java
index e5fcd6f..76787fb 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/HelloWorldStateMixin.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/HelloWorldStateMixin.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial5;
 
 /**
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/package.html b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/package.html
index 11ecec6..c5b40c8 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/package.html
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <body>
 <h1>Tutorial 5 - Constraints</h1>
 <p>
@@ -8,13 +24,13 @@
 then manually add these checks in the implementation class.
 </p>
 <p>
-In Qi4j there is the option to use Constraints, which are further restrictions on the parameters.
+In Zest™ there is the option to use Constraints, which are further restrictions on the parameters.
 This is implemented by having an annotation that describes what the Constraint does, and then
 an implementation class that checks whether a specific value fulfills the Constraint or not.
 </p>
 <p>
-There are a number of pre-written constraints in Qi4j which you can use. The null check of the original
-HelloWorld version is already handled by default since Qi4j considers method parameters to be mandatory if not
+There are a number of pre-written constraints in Zest™ which you can use. The null check of the original
+HelloWorld version is already handled by default since Zest™ considers method parameters to be mandatory if not
 explicitly marked with the @Optional annotation. So, instead of doing that check we will add
 other checks that are useful to make, such as ensuring that the passed in string is not empty.
 </p>
@@ -36,8 +52,8 @@
 </ol>
 <p><em>Note:</em></p>
 <p>
-    The previous steps had a dependency to the <code>qi4j-core-api</code> only. The constraints
-    you've used in this step, introduce a new dependency to the <code>qi4j-lib-constraints</code>
+    The previous steps had a dependency to the <code>org.qi4j.core.api</code> only. The constraints
+    you've used in this step, introduce a new dependency to the <code>org.qi4j.library.constraints</code>
     library, where all the constraint related classes reside. So update your classpath settings
     accordingly.
 </p>
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/HelloWorld.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/HelloWorld.java
index a43490c..a08d071 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/HelloWorld.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/HelloWorld.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial6;
 
 /**
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/HelloWorldBehaviour.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/HelloWorldBehaviour.java
index ba34e73..befdbf7 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/HelloWorldBehaviour.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/HelloWorldBehaviour.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial6;
 
 import org.qi4j.api.concern.Concerns;
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/HelloWorldBehaviourConcern.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/HelloWorldBehaviourConcern.java
index 56a8e57..dffb5c1 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/HelloWorldBehaviourConcern.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/HelloWorldBehaviourConcern.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial6;
 
 import org.qi4j.api.concern.ConcernOf;
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/HelloWorldBehaviourMixin.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/HelloWorldBehaviourMixin.java
index 73ad983..9e154d1 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/HelloWorldBehaviourMixin.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/HelloWorldBehaviourMixin.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial6;
 
 import org.qi4j.api.injection.scope.This;
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/HelloWorldComposite.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/HelloWorldComposite.java
index 18c772d..4fd031f 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/HelloWorldComposite.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/HelloWorldComposite.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial6;
 
 import org.qi4j.api.composite.TransientComposite;
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/HelloWorldState.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/HelloWorldState.java
index 0f80254a..8290ad0 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/HelloWorldState.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/HelloWorldState.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial6;
 
 import org.qi4j.api.mixin.Mixins;
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/HelloWorldStateMixin.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/HelloWorldStateMixin.java
index db977b5..c5ae4cf 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/HelloWorldStateMixin.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/HelloWorldStateMixin.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial6;
 
 /**
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/package.html b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/package.html
index 20e0a01..c2ba7b5 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/package.html
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial6/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <body>
 <h1>Tutorial 6 - SideEffects</h1>
 <p>
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/HelloWorld.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/HelloWorld.java
index 10798cf..75a6b77 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/HelloWorld.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/HelloWorld.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial7;
 
 /**
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/HelloWorldBehaviour.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/HelloWorldBehaviour.java
index 20b1b8c..34bde3e 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/HelloWorldBehaviour.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/HelloWorldBehaviour.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial7;
 
 // START SNIPPET: solution
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/HelloWorldBehaviourMixin.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/HelloWorldBehaviourMixin.java
index 726b3f6..31135f6 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/HelloWorldBehaviourMixin.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/HelloWorldBehaviourMixin.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial7;
 
 import org.qi4j.api.injection.scope.This;
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/HelloWorldBehaviourSideEffect.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/HelloWorldBehaviourSideEffect.java
index ec6a4b2..5b28c1f 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/HelloWorldBehaviourSideEffect.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/HelloWorldBehaviourSideEffect.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial7;
 
 import org.qi4j.api.sideeffect.SideEffectOf;
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/HelloWorldComposite.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/HelloWorldComposite.java
index c73efdb..db3a009 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/HelloWorldComposite.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/HelloWorldComposite.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial7;
 
 import org.qi4j.api.composite.TransientComposite;
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/HelloWorldState.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/HelloWorldState.java
index a3143fb..2e30060 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/HelloWorldState.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/HelloWorldState.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial7;
 
 import org.qi4j.library.constraints.annotation.NotEmpty;
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/HelloWorldStateMixin.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/HelloWorldStateMixin.java
index 1e4cbed..5c9089a 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/HelloWorldStateMixin.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/HelloWorldStateMixin.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial7;
 
 /**
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/package.html b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/package.html
index 57609da..41156c1 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/package.html
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial7/package.html
@@ -1,12 +1,28 @@
+<!--
+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.
+-->
 <body>
 <h1>Tutorial 7 - Properties</h1>
 <p>
-One of the goals of Qi4j is to give you domain modeling tools that allow you to more concisely use
+One of the goals of Apache Zest™ is to give you domain modeling tools that allow you to more concisely use
 domain concepts in code. One of the things we do rather often is model Properties of objects as getters
 and setters. But this is a very weak model, and does not give you any access to metadata about the property,
 and also makes common tasks like UI binding non-trivial. There is also a lot of repetition of code, which
 is unnecessary. Using JavaBeans conventions one typically have to have code in five places for one property,
-whereas in Qi4j the same thing can be achieved with one line of code.
+whereas in Zest™ the same thing can be achieved with one line of code.
 </p>
 <p>
 But lets start out easy. To declare a property you have to make a method in a mixin type that returns a value
@@ -25,13 +41,13 @@
 </p>
 <p>
 In the Mixin implementation of the interface with the Property declaration you should have an injection
-of the Property, which is created for you by Qi4j. The injection can be done in a field like this:
+of the Property, which is created for you by Zest™. The injection can be done in a field like this:
 </p>
 <pre>
     &#64;State Property&lt;String&gt; name;
 </pre>
 <p>
-The State dependency injection annotation means that Qi4j will inject the Property for you. The field
+The State dependency injection annotation means that Zest™ will inject the Property for you. The field
 has the name "name", which matches the name in the interface, and therefore that Property is injected. You can
 then implement the method trivially by just returning the "name" field.
 </p>
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial8/HelloWorldBehaviour.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial8/HelloWorldBehaviour.java
index 32fa269..0c7b1b1 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial8/HelloWorldBehaviour.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial8/HelloWorldBehaviour.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial8;
 
 /**
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial8/HelloWorldBehaviourMixin.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial8/HelloWorldBehaviourMixin.java
index 226dc0a..5585bef 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial8/HelloWorldBehaviourMixin.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial8/HelloWorldBehaviourMixin.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial8;
 
 import org.qi4j.api.injection.scope.This;
@@ -8,7 +26,7 @@
  * This is the implementation of the HelloWorld
  * behaviour interface.
  * <p>
- * This version access the state using Qi4j Properties.
+ * This version access the state using Zest Properties.
  * </p>
  */
 public class HelloWorldBehaviourMixin
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial8/HelloWorldComposite.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial8/HelloWorldComposite.java
index 138e70b..a6b1951 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial8/HelloWorldComposite.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial8/HelloWorldComposite.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial8;
 
 import org.qi4j.api.composite.TransientComposite;
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial8/HelloWorldState.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial8/HelloWorldState.java
index c85d600..0979ecf 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial8/HelloWorldState.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial8/HelloWorldState.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial8;
 
 import org.qi4j.api.property.Property;
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial8/HelloWorldStateMixin.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial8/HelloWorldStateMixin.java
index 14196c0..b40e8fa 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial8/HelloWorldStateMixin.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial8/HelloWorldStateMixin.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial8;
 
 import org.qi4j.api.injection.scope.State;
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial8/package.html b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial8/package.html
index 00a0c5a..c9a5781 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial8/package.html
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial8/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <body>
 <h1>Tutorial 8 - Generic mixins</h1>
 <p>
@@ -16,7 +32,7 @@
 Fragment is then allowed to implement the method any way it wants.
 </p>
 <p>
-Since interfaces with only Properties is such a common case Qi4j already has a generic Mixin
+Since interfaces with only Properties is such a common case Zest™ already has a generic Mixin
 that implements the Properties management described above, but for the builtin Property type instead
 of the getter/setter variant. The class is aptly named PropertyMixin.
 </p>
@@ -30,7 +46,7 @@
     <li>Remove the HelloWorldStateMixin</li>
     <li>Add a GenericPropertyMixin, and have it implement InvocationHandler</li>
     <li>Inject "@State StateHolder state" in the mixin. The StateHolder interface will give
-        you access to the Properties for the TransientComposite which Qi4j manages for you
+        you access to the Properties for the TransientComposite which Zest™ manages for you
     </li>
     <li>On call to invoke(), delegate to the StateHolder interface to get the Property for the invoked method</li>
     <li>Add an @AppliesTo annotation to the Mixin and implement the AppliesToFilter with a rule that
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial9/HelloWorldBehaviour.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial9/HelloWorldBehaviour.java
index 0c38565..bf82ff1 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial9/HelloWorldBehaviour.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial9/HelloWorldBehaviour.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial9;
 
 /**
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial9/HelloWorldBehaviourMixin.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial9/HelloWorldBehaviourMixin.java
index df71fa3..d676bc6 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial9/HelloWorldBehaviourMixin.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial9/HelloWorldBehaviourMixin.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial9;
 
 import org.qi4j.api.injection.scope.This;
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial9/HelloWorldComposite.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial9/HelloWorldComposite.java
index 938d988..73587d2 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial9/HelloWorldComposite.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial9/HelloWorldComposite.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial9;
 
 import org.qi4j.api.composite.TransientComposite;
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial9/HelloWorldState.java b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial9/HelloWorldState.java
index 51aee06..e6fbd69 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial9/HelloWorldState.java
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial9/HelloWorldState.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial9;
 
 import org.qi4j.api.property.Property;
diff --git a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial9/package.html b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial9/package.html
index ea21e57..5ebed41 100644
--- a/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial9/package.html
+++ b/tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial9/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <body>
 <h1>Tutorial 9 - Private and abstract mixins</h1>
 <p>
@@ -12,7 +28,7 @@
 normally mean that it would have to implement all methods, including those found in the TransientComposite
 interface. However, since we are only really interested in implementing the say() method we
 will mark this by declaring that the Mixin "implements" the TransientComposite type, but is also "abstract".
-This, using pure Java semantics, makes it possible to avoid having to implement all methods. Qi4j
+This, using pure Java semantics, makes it possible to avoid having to implement all methods. Zest™
 will during the initialization phase detect that the Mixin only handles the say() method, and therefore
 only map it to that specific method. In order to instantiate the Mixin it will generate a subclass
 which implements the remaining methods in the TransientComposite type, as no-ops. These will never be called however,
@@ -23,7 +39,7 @@
 To hide the state from the client we need to use what is called Private Mixins. A Private Mixin is
 any mixin that is referenced by another Mixin by using the @This injection, but which is not included
 in the TransientComposite type. As long as there is a Mixin implementation declared for the interface specified
-by the @This injection it will work, since Qi4j can know how to implement the interface. But since
+by the @This injection it will work, since Zest™ can know how to implement the interface. But since
 it is not extended by the TransientComposite type there is no way for a user of the TransientComposite to access it.
 That
 Mixin becomes an implementation detail. This can be used either for encapsulation purposes, or for referencing
diff --git a/tutorials/composites/src/main/javadoc/overview.html b/tutorials/composites/src/main/javadoc/overview.html
index cc4b5de..1b98252 100644
--- a/tutorials/composites/src/main/javadoc/overview.html
+++ b/tutorials/composites/src/main/javadoc/overview.html
@@ -1,19 +1,35 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<!--
+  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.
+-->
 <html>
 <head>
 </head>
 <body>
 Description of tutorials.
 
-<h2>Qi4j tutorials</h2>
+<h2>Apache Zest™ tutorials</h2>
 
 <h3>Composite tutorials</h3>
 <p>
 Throughout this set of tutorials it will be shown how to create and work with Composites, which
-is the basic element in Qi4j. We will refactor one HelloWorld class to take advantage of the various
-features in Qi4j. These refactorings will make it easier to reuse parts of the class,
+is the basic element in Zest™. We will refactor one HelloWorld class to take advantage of the various
+features in Zest™. These refactorings will make it easier to reuse parts of the class,
 and introduce new features without having to change existing code. We will also look
-at some of the existing classes, or Fragments, available in Qi4j that you can reuse
+at some of the existing classes, or Fragments, available in Zest™ that you can reuse
 so that you don't have to write everything yourself.
 </p>
 <p>
@@ -22,7 +38,7 @@
 </p>
 <h2>Related Documentation</h2>
 <p>
-For more information on Qi4j see <a target="_blank" href="http://www.qi4j.org">the website</a>.
+For more information on Zest™ see <a target="_blank" href="http://zest.apache.org">the website</a>.
 </p>
 </body>
 </html>
diff --git a/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial1/HelloWorldTest.java b/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial1/HelloWorldTest.java
index 8f942ae..7a3252e 100644
--- a/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial1/HelloWorldTest.java
+++ b/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial1/HelloWorldTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial1;
 
 import org.junit.Before;
diff --git a/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial10/HelloWorldTest.java b/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial10/HelloWorldTest.java
index 9c545f5..100b921 100644
--- a/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial10/HelloWorldTest.java
+++ b/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial10/HelloWorldTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial10;
 
 import org.junit.Before;
diff --git a/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial2/HelloWorldTest.java b/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial2/HelloWorldTest.java
index dbfcfbd..97bd4bf 100644
--- a/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial2/HelloWorldTest.java
+++ b/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial2/HelloWorldTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial2;
 
 import org.junit.Before;
diff --git a/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial3/HelloWorldTest.java b/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial3/HelloWorldTest.java
index aa7adaa..74f9c00 100644
--- a/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial3/HelloWorldTest.java
+++ b/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial3/HelloWorldTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial3;
 
 import org.junit.Before;
diff --git a/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial4/HelloWorldTest.java b/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial4/HelloWorldTest.java
index 297fe54..100228c 100644
--- a/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial4/HelloWorldTest.java
+++ b/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial4/HelloWorldTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial4;
 
 import org.junit.Before;
diff --git a/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial5/HelloWorldTest.java b/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial5/HelloWorldTest.java
index f4ab7de..e9786fc 100644
--- a/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial5/HelloWorldTest.java
+++ b/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial5/HelloWorldTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial5;
 
 import org.junit.Before;
diff --git a/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial6/HelloWorldTest.java b/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial6/HelloWorldTest.java
index 84cc36f..8496a86 100644
--- a/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial6/HelloWorldTest.java
+++ b/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial6/HelloWorldTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial6;
 
 import org.junit.Before;
diff --git a/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial7/HelloWorldTest.java b/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial7/HelloWorldTest.java
index 73c44b1..785bc3e 100644
--- a/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial7/HelloWorldTest.java
+++ b/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial7/HelloWorldTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial7;
 
 import org.junit.Before;
diff --git a/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial8/HelloWorldTest.java b/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial8/HelloWorldTest.java
index 6ebc398..3eeff1a 100644
--- a/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial8/HelloWorldTest.java
+++ b/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial8/HelloWorldTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial8;
 
 import org.junit.Before;
diff --git a/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial9/HelloWorldTest.java b/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial9/HelloWorldTest.java
index 824de0d..a5aaf0f 100644
--- a/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial9/HelloWorldTest.java
+++ b/tutorials/composites/src/test/java/org/qi4j/tutorials/composites/tutorial9/HelloWorldTest.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.composites.tutorial9;
 
 import org.junit.Before;
diff --git a/tutorials/hello/build.gradle b/tutorials/hello/build.gradle
index a6533f2..2547c08 100644
--- a/tutorials/hello/build.gradle
+++ b/tutorials/hello/build.gradle
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-description = "Basic tutorial on how to covert a simple 'Hello World' application to Qi4j, using more and more features for each step."
+description = "Basic tutorial on how to covert a simple 'Hello World' application to Apache Zest™, using more and more features for each step."
 
-jar { manifest { name = "Qi4j Tutorial - Composites" }}
+jar { manifest { name = "Apache Zest™ Tutorial - Composites" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
diff --git a/tutorials/introduction/build.gradle b/tutorials/introduction/build.gradle
index 3c28caf..730b370 100644
--- a/tutorials/introduction/build.gradle
+++ b/tutorials/introduction/build.gradle
@@ -1,6 +1,25 @@
-description = "An Introduction to Qi4j in its simplest form."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Tutorial - Introduction" }}
+description = "An Introduction to Apache Zest™ in its simplest form."
+
+jar { manifest { name = "Apache Zest™ Tutorial - Introduction" }}
 
 dependencies {
     compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
diff --git a/tutorials/introduction/src/docs/background.txt b/tutorials/introduction/src/docs/background.txt
index d275d3a..96fcb5f 100644
--- a/tutorials/introduction/src/docs/background.txt
+++ b/tutorials/introduction/src/docs/background.txt
@@ -1,21 +1,40 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[introduction-background,Background]]
 = Background =
-Qi4j is the first Composite Oriented Programming implementation leveraging the Java 5 platform, so that everything you
-know from Java 5 still applies. You can mix Qi4j with your ordinary Java code as much as you want. All your existing
-Java tools works just like before, and Qi4j does not introduce any new programming language, no special development
+Zest™ is the first Composite Oriented Programming implementation leveraging the Java 5 platform, so that everything you
+know from Java 5 still applies. You can mix Zest™ with your ordinary Java code as much as you want. All your existing
+Java tools works just like before, and Zest™ does not introduce any new programming language, no special development
 tools needed and no XML is required.
 
 == Purpose ==
-Qi4j addresses the programming problems from the top-down, starting with the Domain Model and Business Rules needs,
+Zest™ addresses the programming problems from the top-down, starting with the Domain Model and Business Rules needs,
 and let those requirements flow downwards in the software stack and dictate the requirements for underlying layers
 such as persistence, messaging, querying and more. This means that the business value developer is left to
 concentrate on the domain models and the actual application bringing the value, instead of creating massive amounts
 of glue code to tie underlying technologies together.
 
 == Problem Descriptions ==
-Qi4j didn't appear out of the blue, when the founders of the project had nothing better to do. It is the result of
+Zest™ didn't appear out of the blue, when the founders of the project had nothing better to do. It is the result of
 observation of problems in real applications, and the experience from previous attempts to address or correct these
-problems, that has led to the Qi4j vision.
+problems, that has led to the Zest™ vision.
 
 == Object Oriented Programming (OOP) ==
 How can OOP be a problem? We and others have observed that there is a fundamental flaw in the OOP model. In fact, we
@@ -98,4 +117,4 @@
 Composite Oriented Programming is heavily influenced by the book "Domain Driven Design" by Eric Evans. And we are
 trying to use his analysis of the problem to provide the mechanisms needed to get the job done quicker and more
 reliably. Mr Evans talks about Applications, Layers, Modules, Specifications, SideEffects and so forth, and all of
-these should be present in a Composite Oriented Programming implementation, and to a large extent it is in Qi4j.
+these should be present in a Composite Oriented Programming implementation, and to a large extent it is in Zest™.
diff --git a/tutorials/introduction/src/docs/highlights.txt b/tutorials/introduction/src/docs/highlights.txt
index 6684440..263096b 100644
--- a/tutorials/introduction/src/docs/highlights.txt
+++ b/tutorials/introduction/src/docs/highlights.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[highlights,Highlights]]
 = Highligts =
 
@@ -64,11 +83,11 @@
 
 image:classes-are-dead.gif[]
 
-Qi4j™ is trying to address the flaws of OOP and introduce Composite Oriented Programming to the world, without
+Zest™ is trying to address the flaws of OOP and introduce Composite Oriented Programming to the world, without
 introducing new programming languages, or awkward constructs. Heck, we don't even use any XML.
 
-Qi4j™ is not a framework. It is a new way to write code. Other people might create frameworks using Qi4j™, or create a
-framework optimized for Qi4j™, but here at Qi4j™ we concentrate to make Qi4j™ behave well in existing frameworks,
+Zest™ is not a framework. It is a new way to write code. Other people might create frameworks using Zest™, or create a
+framework optimized for Zest™, but here at Zest™ we concentrate to make Zest™ behave well in existing frameworks,
 application servers, platforms and environments.
 
 You are to embark on a new journey. Enjoy!
diff --git a/tutorials/introduction/src/docs/qi4j-cop.txt b/tutorials/introduction/src/docs/qi4j-cop.txt
index 9a7f36b..0726ab8 100644
--- a/tutorials/introduction/src/docs/qi4j-cop.txt
+++ b/tutorials/introduction/src/docs/qi4j-cop.txt
@@ -1,3 +1,22 @@
-[[qi4j-cop,COP with Java and Qi4j]]
-= COP with Java and Qi4j =
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
+[[qi4j-cop,COP with Java and Zest™]]
+= COP with Java and Zest™ =
 
diff --git a/tutorials/introduction/src/docs/state-modeling.txt b/tutorials/introduction/src/docs/state-modeling.txt
index 341e065..0c5ec82 100644
--- a/tutorials/introduction/src/docs/state-modeling.txt
+++ b/tutorials/introduction/src/docs/state-modeling.txt
@@ -1,9 +1,28 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[state-modeling,State Modeling]]
-= Qi4j and state modeling =
+= Zest™ and state modeling =
 
 (From Rickard Oberg's blog, http://www.jroller.com/rickard/entry/qi4j_and_state_modeling, 2009-02-19)
 
-In the Qi4j project we strive to being able to express our domain as directly as possible, with as little translation
+In the Zest™ project we strive to being able to express our domain as directly as possible, with as little translation
 as possible between how we think about a domain and how it is actually coded.
 This then affects our entire view of how application frameworks should be constructed, and what we consider good and
 bad ways of implementing certain features.
@@ -17,7 +36,7 @@
 
 From a DDD perspective we want to talk about Entities and Values, Properties and Associations.
 If our code does not reflect this, then there is translation going on, and translation inevitably leads to information loss.
-In Qi4j, where Composites and not Objects, are the basic construct, we have created specialized forms to model these
+In Zest™, where Composites and not Objects, are the basic construct, we have created specialized forms to model these
 concepts more explicitly.
 We have EntityComposites and ValueComposites, each with different ways of creating them and managing them.
 Both EntityComposites and ValueComposites can then have Properties, as first-class objects, but Properties in
@@ -74,7 +93,7 @@
 "@UseDefaults Property<List<String>> addresses();" would be initialized to an empty ArrayList, for example.
 
 In addition I have set surName() to be @Optional.
-In Qi4j we have defined all properties to be not-null as the default, and the same goes for all parameters in method
+In Zest™ we have defined all properties to be not-null as the default, and the same goes for all parameters in method
 invocations.
 If you explicitly want to allow properties to be null, so that for example "Madonna" would be an acceptable name,
 then you can mark it as @Optional.
@@ -115,7 +134,7 @@
 around your code, looking all soggy and unappetizing.
 
 What to do about this?
-One of the great inventions of Qi4j, I believe, is the notion of private mixins.
+One of the great inventions of Zest™, I believe, is the notion of private mixins.
 That we can have mixins in an object which are explicitly HIDDEN from usage outside of it.
 How can we use this for state modeling?
 What you'd want to do is to model the state of an Entity as a private mixin, which is hidden from clients, and then
@@ -145,10 +164,10 @@
 
 And so much more...
 
-The above is just a small taste of what you can do with state modeling in Qi4j.
+The above is just a small taste of what you can do with state modeling in Zest™.
 There is also support for associations and many-associations, the notion of aggregates, and a complete pluggable
 system for persistence and indexing/querying of data.
-To end with, here's a sample of how some other state modeling concepts can be expressed in Qi4j:
+To end with, here's a sample of how some other state modeling concepts can be expressed in Zest™:
 
 [snippet,java]
 -----------
@@ -158,5 +177,5 @@
 
 I hope they are self-explanatory.
 
-My hope is that with Composite Oriented Programming and Qi4j we can come one step closer to being able to express our
+My hope is that with Composite Oriented Programming and Zest™ we can come one step closer to being able to express our
 domain as clearly as possible in code.
diff --git a/tutorials/introduction/src/docs/what-is-composite-oriented-programming.txt b/tutorials/introduction/src/docs/what-is-composite-oriented-programming.txt
index 1c4ef23..f1493c3 100644
--- a/tutorials/introduction/src/docs/what-is-composite-oriented-programming.txt
+++ b/tutorials/introduction/src/docs/what-is-composite-oriented-programming.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[what-is-cop,What is COP?]]
 = What is COP? =
 
@@ -5,7 +24,7 @@
 Programming really is.
 
 The article uses C# and a "show by example" approach to explaining COP, and this shows clearly that COP is not
-Java specific, and although Qi4j was (to our knowledge) first to introduce the name, it applies across languages and
+Java specific, and although Zest™ was (to our knowledge) first to introduce the name, it applies across languages and
 potentially deserves one or more languages on its own.
 
 
@@ -22,7 +41,7 @@
 
 I've written a series of post on AOP lately (here, here and here), and in the last part I promised to tackle mixins
 and introductions in a future post. When I was doing my research for just that, I came cross a Java framework (just
-humor me :p) called Qi4j (that's 'chee for jay'), written by Swedish Richard Öberg, pioneering the idea of Composite
+humor me :p) called Zest™ (that's 'chee for jay'), written by Swedish Richard Öberg, pioneering the idea of Composite
 Oriented Programming, which instantly put a spell on me. Essentially, it takes the concepts from Aspect Oriented
 Programming to the extreme, and for the past week I’ve dug into it with a passion. This post is the first fruits of
 my labor.
@@ -30,7 +49,7 @@
 === OOP is Not Object Oriented! ===
 
 One of the things that Richard Öberg argues, is that OOP is not really object oriented at all, but rather class
-oriented. As the Qi4j website proclaims, "class is the first class citizen that objects are derived from. Not objects
+oriented. As the Zest™ website proclaims, "class is the first class citizen that objects are derived from. Not objects
 being the first-class citizen to which one or many classes are assigned". Composite oriented programming (COP) then,
 tries to work around this limitation by building on a set of core principles; that behavior depends on context, that
 decoupling is a virtue, and that business rules matter more. For a short and abstract explanation of COP,
@@ -305,5 +324,5 @@
 posts. I’ve already implemented a prototype framework that supports the above examples, which builds on my
 http://www.iridescence.no/Posts/Implementing-an-AOP-Framework-Part-2.aspx[previously posted AOP framework], and I’ll
 post the source code for that soon. If you want to dig deeper right now (and don’t mind
-a bit of Java), then I suggest you head over to the Qi4j website and poke about there.
+a bit of Java), then I suggest you head over to the Zest™ website and poke about there.
 http://rickardoberg.wordpress.com/[Richard Öbergs blog] also provides great insight.
diff --git a/tutorials/introduction/src/docs/whats-an-object.txt b/tutorials/introduction/src/docs/whats-an-object.txt
index 4b68b15..11bb20d 100644
--- a/tutorials/introduction/src/docs/whats-an-object.txt
+++ b/tutorials/introduction/src/docs/whats-an-object.txt
@@ -1,3 +1,22 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[what-s-an-object-anyway,What's an Object anyway?]]
 = What's an Object anyway? =
 In OOP the main idea is that we should model our reality by creating Objects. Objects have state, and they have methods.
@@ -28,7 +47,7 @@
 
 This is the same in real life. I don't get to decide how I communicate with you. I have to use english, and I have to
 use email, and I have to send it to a specific mailing list. It is the algorithm of the interaction between us, the
-Qi4j dev mailing list, that has set these rules, not *I* as a participant in this interaction. The same should,
+Zest™ dev mailing list, that has set these rules, not *I* as a participant in this interaction. The same should,
 obviously, be the case for objects.
 
 So, with the understanding that algorithms should define roles for collaborating objects, and objects should then
@@ -44,7 +63,7 @@
 causes a number of other problems, such as the "self schizophrenia" problem, whereby there is no way to tell where the
 object really is. There is no "this" pointer that has any relevant meaning.
 
-The Composite pattern, as implemented in COP and Qi4j, gets around this by simply saying that the composite, as a
+The Composite pattern, as implemented in COP and Zest™, gets around this by simply saying that the composite, as a
 whole, is an object. Tada, we now have a "this" pointer, and a coherent way to deal with the object graph as though it
 was a single object. We are now able to get back to the strengths of the procedural approach, which allows the
 implementer of the algorithm to define the roles needed for the algorithm. The roles can either be specific to an
@@ -58,7 +77,7 @@
 more algorithms than composites, therefore it has to be easy to ready algorithms, and only when necessary dive down into
 composite code.
 
-When talking about Composites as Objects in Qi4j it is most relevant to look at Entities, since these represent physical
+When talking about Composites as Objects in Zest™ it is most relevant to look at Entities, since these represent physical
 objects in a model, rather than algorithms or services, or other non-instance-oriented things.
 
 If Entities should implement roles, via mixins, in order to interact with each other through algorithms, then the
@@ -115,7 +134,7 @@
 it easier for us to understand it the next time we see it being used in another algorithm.
 
 To summarize thus far, we have looked at why OOP so far has not worked out, why this is the case, and how COP deals
-with it, and how we can implement a better solution of Entities using Qi4j. All is well!
+with it, and how we can implement a better solution of Entities using Zest™. All is well!
 
 The next step is to start using these Entities in algorithms. Algorithms are usually stateless, or at least they don't
 have any state that survives the execution of the algorithm. There is input, some calculation, and then output. In
@@ -170,15 +189,15 @@
 roles. The implementations are also testable, and if the same mixin is used over and over for the implementation, then
 only one set of tests is needed for each role interface.
 
-To summarize we have in COP/Qi4j a way to get the best from procedural and object-oriented programming. As we have seen
+To summarize we have in COP/Zest™ a way to get the best from procedural and object-oriented programming. As we have seen
 the functionality falls into three categories, the entities implementing objects, the services implementing
 interactions, and the user interface implementing the context. This also maps well to the ideas of ModelViewController,
 which in turn maps well to the new ideas from Mr Reenskaug (inventor of MVC) called DCI: Data-Context-Interaction. As a
-side-effect of this discussion we have therefore also seen how COP/Qi4j can be used to implement DCI, which is an
+side-effect of this discussion we have therefore also seen how COP/Zest™ can be used to implement DCI, which is an
 important next step in understanding objects and their interactions, the fundamentals of which (I believe) are captured
 on this page.
 
 That's it. Well done if you've read this far :-)
 
 Comments and thoughts to qi4j-dev forum at Google Groups on this are highly appreciated. This is very very important topics,
-and crucial to understanding/explaining why COP/Qi4j is so great! :-)
+and crucial to understanding/explaining why COP/Zest™ is so great! :-)
diff --git a/tutorials/introduction/src/main/java/org/qi4j/demo/intro/StateModelingDocs.java b/tutorials/introduction/src/main/java/org/qi4j/demo/intro/StateModelingDocs.java
index eb4e029..3d68918 100644
--- a/tutorials/introduction/src/main/java/org/qi4j/demo/intro/StateModelingDocs.java
+++ b/tutorials/introduction/src/main/java/org/qi4j/demo/intro/StateModelingDocs.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.demo.intro;
 
 import org.qi4j.api.association.Association;
diff --git a/tutorials/introduction/src/main/java/org/qi4j/demo/intro/WhatsAnObjectDocs.java b/tutorials/introduction/src/main/java/org/qi4j/demo/intro/WhatsAnObjectDocs.java
index 986a93b..50be0c4 100644
--- a/tutorials/introduction/src/main/java/org/qi4j/demo/intro/WhatsAnObjectDocs.java
+++ b/tutorials/introduction/src/main/java/org/qi4j/demo/intro/WhatsAnObjectDocs.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.demo.intro;
 
 import org.qi4j.api.entity.EntityBuilder;
diff --git a/tutorials/introduction/tenminutes/LICENSE b/tutorials/introduction/tenminutes/LICENSE
deleted file mode 100644
index f433b1a..0000000
--- a/tutorials/introduction/tenminutes/LICENSE
+++ /dev/null
@@ -1,177 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
diff --git a/tutorials/introduction/tenminutes/NOTICE b/tutorials/introduction/tenminutes/NOTICE
deleted file mode 100644
index 8c3b26e..0000000
--- a/tutorials/introduction/tenminutes/NOTICE
+++ /dev/null
@@ -1,17 +0,0 @@
-Qi4j 10 Minute Tutorial
-Copyright 2007-2008, The Qi4j Development Team of individuals.
-
-See http://www.qi4j.org/contributors.html for list of of individuals.
-Also see each file for additional information of Copyright claims.
-
-Qi4j is a community aggregated works under Copyright law.
-All parts of the original works at Qi4j is licensed under the
-Apache License ver 2.0 http://www.apache.org/licenses
-
-Below follows a list of binary dependencies and their licenses;
-----------------------------------------------------------------
-
-<NONE>
-
-
-END OF NOTICE
\ No newline at end of file
diff --git a/tutorials/introduction/tenminutes/build.gradle b/tutorials/introduction/tenminutes/build.gradle
index d75b788..aa44049 100644
--- a/tutorials/introduction/tenminutes/build.gradle
+++ b/tutorials/introduction/tenminutes/build.gradle
@@ -1,6 +1,25 @@
-description = "A 10-minute Introduction Tutorial to Qi4j in its simplest form."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Tutorial - 10 minute Introduction" }}
+description = "A 10-minute Introduction Tutorial to Apache Zest™ in its simplest form."
+
+jar { manifest { name = "Apache Zest™ Tutorial - 10 minute Introduction" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
diff --git a/tutorials/introduction/tenminutes/src/docs/ten-minutes.txt b/tutorials/introduction/tenminutes/src/docs/ten-minutes.txt
index 28ad0e3..dc86b5f 100644
--- a/tutorials/introduction/tenminutes/src/docs/ten-minutes.txt
+++ b/tutorials/introduction/tenminutes/src/docs/ten-minutes.txt
@@ -1,15 +1,34 @@
-[[ten-minutes-intro,Qi4j in 10 minutes]]
-= Qi4j in 10 minutes =
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
+[[ten-minutes-intro,Zest™ in 10 minutes]]
+= Zest™ in 10 minutes =
 
 TIP: Theses tutorials are based on actual code found in the `tutorials/` directory of the
-http://qi4j.org/downloads.html[Qi4j SDK sources]. You should start your favorite editor and find the code related to
+https://zest.apache.org/download.html[Zest™ SDK sources]. You should start your favorite editor and find the code related to
 this tutorial, run it and play with it.
 
 
-    * Qi4j does not introduce any new programming language, no additional compilers needed and all your existing tools
+    * Zest™ does not introduce any new programming language, no additional compilers needed and all your existing tools
       work just like before. It is pure Java.
-    * Qi4j works with Composites.
-    * The equivalent of an Object instance in OOP, is a Composite instance in Qi4j.
+    * Zest™ works with Composites.
+    * The equivalent of an Object instance in OOP, is a Composite instance in Zest™.
     * Composites are constructed from Fragments.
     * Fragments are Mixins, Concerns, Constraints and SideEffects.
     * Only Mixins carry Composite state. The others are shared between Composite instances.
@@ -22,7 +41,7 @@
 Moreover, you'll need an EntityStore for persistence and an Indexing engine for querying. Choose among the available
 implementations listed in the <<extensions>> section.
 
-See the <<howto-depend-on-qi4j>> tutorial for details.
+See the <<howto-depend-on-zest>> tutorial for details.
 
 Composition is done with Java interfaces and Annotations. Example;
 [snippet,java]
@@ -43,14 +62,14 @@
 
 Extending the ConcernOf is a convenience mechanism, instead of an explicit @ConcernFor annotation on a private field,
 which can be used in rare occasions when you are not able to extend. This base class defines the `next` field, which is
-set up by the Qi4j runtime and points to the next fragment in the call stack.
+set up by the Zest™ runtime and points to the next fragment in the call stack.
 
-We can also see that the InventoryService is provided to the concern, which is done with dependency injection. Qi4j
+We can also see that the InventoryService is provided to the concern, which is done with dependency injection. Zest™
 also supports dependency injection via constructors and methods.
 
-The above example is obviously doing persistence, and we have no code handling this. But Qi4j supports persistence
-directly in its Core, and it is taken care of by Qi4j, since it is declared as an EntityComposite.
-Nothing else is needed, provided that the Qi4j Runtime has been setup with one or more persisted EntityStores. But
+The above example is obviously doing persistence, and we have no code handling this. But Zest™ supports persistence
+directly in its Core, and it is taken care of by Zest™, since it is declared as an EntityComposite.
+Nothing else is needed, provided that the Zest™ Runtime has been setup with one or more persisted EntityStores. But
 we have a naming convention that EntityComposites have "Entity" as the suffix in its name.
 
 There are other built-in Composite subtypes as well, such as ValueComposite and ServiceComposite. This distinction helps
@@ -74,10 +93,10 @@
 -----------
 The MailService is dependency injected, as we have seen before.
 
-@This is telling Qi4j that the SideEffect needs a reference to the Composite instance that it belongs to.
+@This is telling Zest™ that the SideEffect needs a reference to the Composite instance that it belongs to.
 
 By asking for both the HasCustomer and the HasLineItems types, we get type-safety and don't need to bother with casts.
-In fact, Qi4j will ensure that you can't even cast the `hasCustomer` instance to the HasLineItems type.
+In fact, Zest™ will ensure that you can't even cast the `hasCustomer` instance to the HasLineItems type.
 
 By not referencing the aggregated interface OrderEntity, we reduce the coupling of this SideEffect and it can be used
 in any other Composite where the HasCustomer and HasLineItems combination is used, for instance in an InvoiceEntity.
@@ -86,5 +105,5 @@
 
 == Conclusion ==
 
-In this short introduction, we have covered the essence of Qi4j. We have looked at what is a Composite, seen some of the
+In this short introduction, we have covered the essence of Zest™. We have looked at what is a Composite, seen some of the
 Fragments in action, and how simple it is to turn a Composite into a persisted Composite, known as an EntityComposite.
diff --git a/tutorials/introduction/thirtyminutes/LICENSE b/tutorials/introduction/thirtyminutes/LICENSE
deleted file mode 100644
index f433b1a..0000000
--- a/tutorials/introduction/thirtyminutes/LICENSE
+++ /dev/null
@@ -1,177 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
diff --git a/tutorials/introduction/thirtyminutes/NOTICE b/tutorials/introduction/thirtyminutes/NOTICE
deleted file mode 100644
index da9f435..0000000
--- a/tutorials/introduction/thirtyminutes/NOTICE
+++ /dev/null
@@ -1,17 +0,0 @@
-Qi4j 30 Minute Tutorial
-Copyright 2007-2008, The Qi4j Development Team of individuals.
-
-See http://www.qi4j.org/contributors.html for list of of individuals.
-Also see each file for additional information of Copyright claims.
-
-Qi4j is a community aggregated works under Copyright law.
-All parts of the original works at Qi4j is licensed under the
-Apache License ver 2.0 http://www.apache.org/licenses
-
-Below follows a list of binary dependencies and their licenses;
-----------------------------------------------------------------
-
-<NONE>
-
-
-END OF NOTICE
\ No newline at end of file
diff --git a/tutorials/introduction/thirtyminutes/build.gradle b/tutorials/introduction/thirtyminutes/build.gradle
index 528e9b4..83bcbc5 100644
--- a/tutorials/introduction/thirtyminutes/build.gradle
+++ b/tutorials/introduction/thirtyminutes/build.gradle
@@ -1,6 +1,25 @@
-description = "A 30-minute Introduction Tutorial to Qi4j in its simplest form."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Tutorial - 30 minute Introduction" }}
+description = "A 30-minute Introduction Tutorial to Apache Zest™ in its simplest form."
+
+jar { manifest { name = "Apache Zest™ Tutorial - 30 minute Introduction" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
diff --git a/tutorials/introduction/thirtyminutes/src/docs/thirty-minutes.txt b/tutorials/introduction/thirtyminutes/src/docs/thirty-minutes.txt
index 65ea58a..3913a9f 100644
--- a/tutorials/introduction/thirtyminutes/src/docs/thirty-minutes.txt
+++ b/tutorials/introduction/thirtyminutes/src/docs/thirty-minutes.txt
@@ -1,13 +1,32 @@
-[[thirty-minutes-intro,Qi4j in 30 minutes]]
-= Qi4j in 30 minutes =
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
+[[thirty-minutes-intro,Zest™ in 30 minutes]]
+= Zest™ in 30 minutes =
 
 TIP: Theses tutorials are based on actual code found in the `tutorials/` directory of the
-http://qi4j.org/downloads.html[Qi4j SDK sources]. You should start your favorite editor and find the code related to
+https://zest.apache.org/download.html[Zest™ SDK sources]. You should start your favorite editor and find the code related to
 this tutorial, run it and play with it.
 
 
-This introduction will deepen your understanding of Qi4j, as we touches on a couple of the common features of Qi4j. It
-is expected that you have gone through and understood the "Qi4j in 10 minutes" introduction.
+This introduction will deepen your understanding of Zest™, as we touches on a couple of the common features of Zest™. It
+is expected that you have gone through and understood the "Zest™ in 10 minutes" introduction.
 
 If you want to reproduce what's explained in this tutorial, remember to depend on the Core Runtime artifact that depends
 on Core API, Core SPI, Core Bootstrap and Core Functional & I/O APIs:
@@ -17,7 +36,7 @@
 Moreover, you'll need an EntityStore for persistence and an Indexing engine for querying. Choose among the available
 implementations listed in the <<extensions>> section.
 
-See the <<howto-depend-on-qi4j>> tutorial for details.
+See the <<howto-depend-on-zest>> tutorial for details.
 
 We will go back to the OrderEntity example;
 [snippet,java]
@@ -37,8 +56,8 @@
 tag=2
 -----------
 
-Quite a lot of Qi4j features are leveraged above;
-[1] Property is a first class citizen in Qi4j, instead of getters/setters naming convention to declare properties.
+Quite a lot of Zest™ features are leveraged above;
+[1] Property is a first class citizen in Zest™, instead of getters/setters naming convention to declare properties.
 [2] ValueComposite for Action means that it is among other things Immutable.
 [3] The Action extends a Property. We call that Property subtyping and highly recommended.
 [4] The CompositeBuilder creates Immutable Action instances.
@@ -68,7 +87,7 @@
 
 The above construct is called a Generic Concern, since it implements java.lang.reflect.InvocationHandler instead of the
 interface of the domain model. The ConcernOf baseclass will also need to be of InvocationHandler type, and the
-Qi4j Runtime will handle the chaining between domain model style and this generic style of interceptor call chain.
+Zest™ Runtime will handle the chaining between domain model style and this generic style of interceptor call chain.
 
 Finally, we need to declare the Concern in the OrderEntity;
 
@@ -90,7 +109,7 @@
 the persistence concern of storage and retrieval. This enables many performance optimization opportunities as well as a
 more flexible Indexing strategy. The other thing to understand is that the Query API is using the domain model, in Java,
 and not some String based query language. We have made this choice to ensure refactoring safety. In rare cases, the
-Query API is not capable enough, in which case Qi4j still provides the ability to look up and execute native queries.
+Query API is not capable enough, in which case Zest™ still provides the ability to look up and execute native queries.
 
 Let's say that we want to find a particular Order from its SequenceNumber.
 
@@ -133,13 +152,13 @@
 assembled during bootstrap. At the time of this writing, only an RDF indexing subsystem exist, and is added most easily
 by assembly.addAssembler( new RdfNativeSesameStoreAssembler() ).
 
-It can be a bit confusing to see Qi4j use Java itself as a Query language, but since we have practically killed the
+It can be a bit confusing to see Zest™ use Java itself as a Query language, but since we have practically killed the
 classes and only operate with interfaces, it is possible to do a lot of seemingly magic stuff. Just keep in mind that
 it is pure Java, albeit heavy use of dynamic proxies to capture the intent of the query.
 
 == Conclusion ==
 
-We have now explored a couple more intricate features of Qi4j, hopefully without being overwhelmed with details on how
-to create applications from scratch, how to structure applications, and how the entire Qi4j Extension system works.
+We have now explored a couple more intricate features of Zest™, hopefully without being overwhelmed with details on how
+to create applications from scratch, how to structure applications, and how the entire Zest™ Extension system works.
 We have looked at how to add a Concern that uses a private Mixin, we have touched a bit on Generic Concerns, and
 finally a short introduction to the Query API.
diff --git a/tutorials/introduction/thirtyminutes/src/main/java/org/qi4j/demo/thirtyminutes/ThirtyMinutesDocs.java b/tutorials/introduction/thirtyminutes/src/main/java/org/qi4j/demo/thirtyminutes/ThirtyMinutesDocs.java
index e125b6d..d172077 100644
--- a/tutorials/introduction/thirtyminutes/src/main/java/org/qi4j/demo/thirtyminutes/ThirtyMinutesDocs.java
+++ b/tutorials/introduction/thirtyminutes/src/main/java/org/qi4j/demo/thirtyminutes/ThirtyMinutesDocs.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.demo.thirtyminutes;
 
 import java.lang.reflect.InvocationHandler;
diff --git a/tutorials/introduction/twohours/LICENSE b/tutorials/introduction/twohours/LICENSE
deleted file mode 100644
index f433b1a..0000000
--- a/tutorials/introduction/twohours/LICENSE
+++ /dev/null
@@ -1,177 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
diff --git a/tutorials/introduction/twohours/NOTICE b/tutorials/introduction/twohours/NOTICE
deleted file mode 100644
index 771deed..0000000
--- a/tutorials/introduction/twohours/NOTICE
+++ /dev/null
@@ -1,17 +0,0 @@
-Qi4j 2 Hour Tutorial
-Copyright 2007-2008, The Qi4j Development Team of individuals.
-
-See http://www.qi4j.org/contributors.html for list of of individuals.
-Also see each file for additional information of Copyright claims.
-
-Qi4j is a community aggregated works under Copyright law.
-All parts of the original works at Qi4j is licensed under the
-Apache License ver 2.0 http://www.apache.org/licenses
-
-Below follows a list of binary dependencies and their licenses;
-----------------------------------------------------------------
-
-<NONE>
-
-
-END OF NOTICE
\ No newline at end of file
diff --git a/tutorials/introduction/twohours/src/docs/two-hours.txt b/tutorials/introduction/twohours/src/docs/two-hours.txt
index a24bc7f..5a6d066 100644
--- a/tutorials/introduction/twohours/src/docs/two-hours.txt
+++ b/tutorials/introduction/twohours/src/docs/two-hours.txt
@@ -1,9 +1,28 @@
-[[two-hours-intro,Qi4j in 2 hours]]
-= Qi4j in 2 hours =
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
+[[two-hours-intro,Zest™ in 2 hours]]
+= Zest™ in 2 hours =
 
 NOTE: This tutorial is not written yet. Learn how to contribute in <<community-docs>>.
 
-This introduction assumes that the "Qi4j in 10 minutes" and "Qi4j in 30 minutes" introductions has been read and
+This introduction assumes that the "Zest™ in 10 minutes" and "Zest™ in 30 minutes" introductions has been read and
 understood.
 
 In this introduction we will touch on the core concepts of UnitOfWork, Application structure and Bootstrap API.
@@ -15,7 +34,7 @@
 
 - Application Structure -
 
-    * There are one Application per Qi4j instance.
+    * There are one Application per Zest™ instance.
 
     * An Application consists of one or more Layers.
 
diff --git a/tutorials/introduction/twominutes/LICENSE b/tutorials/introduction/twominutes/LICENSE
deleted file mode 100644
index f433b1a..0000000
--- a/tutorials/introduction/twominutes/LICENSE
+++ /dev/null
@@ -1,177 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
diff --git a/tutorials/introduction/twominutes/NOTICE b/tutorials/introduction/twominutes/NOTICE
deleted file mode 100644
index 4aefac4..0000000
--- a/tutorials/introduction/twominutes/NOTICE
+++ /dev/null
@@ -1,17 +0,0 @@
-Qi4j 2 Minute Tutorial
-Copyright 2007-2008, The Qi4j Development Team of individuals.
-
-See http://www.qi4j.org/contributors.html for list of of individuals.
-Also see each file for additional information of Copyright claims.
-
-Qi4j is a community aggregated works under Copyright law.
-All parts of the original works at Qi4j is licensed under the
-Apache License ver 2.0 http://www.apache.org/licenses
-
-Below follows a list of binary dependencies and their licenses;
-----------------------------------------------------------------
-
-<NONE>
-
-
-END OF NOTICE
\ No newline at end of file
diff --git a/tutorials/introduction/twominutes/build.gradle b/tutorials/introduction/twominutes/build.gradle
index f4886d0..25a9ab5 100644
--- a/tutorials/introduction/twominutes/build.gradle
+++ b/tutorials/introduction/twominutes/build.gradle
@@ -1,6 +1,25 @@
-description = "A 2-minute Introduction Tutorial to Qi4j in its simplest form."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Tutorial - 2 minute Introduction" }}
+description = "A 2-minute Introduction Tutorial to Apache Zest™ in its simplest form."
+
+jar { manifest { name = "Apache Zest™ Tutorial - 2 minute Introduction" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
diff --git a/tutorials/introduction/twominutes/src/docs/two-minutes.txt b/tutorials/introduction/twominutes/src/docs/two-minutes.txt
index 362429f..be502d2 100644
--- a/tutorials/introduction/twominutes/src/docs/two-minutes.txt
+++ b/tutorials/introduction/twominutes/src/docs/two-minutes.txt
@@ -1,11 +1,30 @@
-[[two-minutes-intro,Qi4j in 2 minutes]]
-= Qi4j in 2 minutes =
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
+[[two-minutes-intro,Zest™ in 2 minutes]]
+= Zest™ in 2 minutes =
 
 TIP: Theses tutorials are based on actual code found in the `tutorials/` directory of the
-http://qi4j.org/downloads.html[Qi4j SDK sources]. You should start your favorite editor and find the code related to
+https://zest.apache.org/download.html[Zest™ SDK sources]. You should start your favorite editor and find the code related to
 this tutorial, run it and play with it.
 
-To show that Qi4j is not necessarily complex, not hard to get going with and easy to deploy, we are first showing the
+To show that Zest™ is not necessarily complex, not hard to get going with and easy to deploy, we are first showing the
 classic HelloWorld, as small as it can get and still be Composite Oriented Programming and not only standard OOP.
 
 If you want to reproduce what's explained in this tutorial, remember to depend on the Core Runtime artifact that depends
@@ -13,7 +32,7 @@
 
 include::../../../../../core/runtime/build/docs/buildinfo/artifact.txt[]
 
-See the <<howto-depend-on-qi4j>> tutorial for details.
+See the <<howto-depend-on-zest>> tutorial for details.
 
 Ready, Set, Go!
 
@@ -45,7 +64,7 @@
 tag=documentation
 -----------
 
-. The SingletonAssembler is a convenience class that creates a Qi4j Runtime instance and an application with one layer
+. The SingletonAssembler is a convenience class that creates a Zest™ Runtime instance and an application with one layer
   and one module in it.
 
 . We declare a TransientComposite of type `Speaker`.
diff --git a/tutorials/introduction/twominutes/src/main/java/org/qi4j/demo/twominute/Main.java b/tutorials/introduction/twominutes/src/main/java/org/qi4j/demo/twominute/Main.java
index 2eae176..2de363a 100644
--- a/tutorials/introduction/twominutes/src/main/java/org/qi4j/demo/twominute/Main.java
+++ b/tutorials/introduction/twominutes/src/main/java/org/qi4j/demo/twominute/Main.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.demo.twominute;
 
 import org.qi4j.bootstrap.AssemblyException;
diff --git a/tutorials/introduction/twominutes/src/main/java/org/qi4j/demo/twominute/Speaker.java b/tutorials/introduction/twominutes/src/main/java/org/qi4j/demo/twominute/Speaker.java
index 4cb126f..c1ac5c3 100644
--- a/tutorials/introduction/twominutes/src/main/java/org/qi4j/demo/twominute/Speaker.java
+++ b/tutorials/introduction/twominutes/src/main/java/org/qi4j/demo/twominute/Speaker.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.demo.twominute;
 
 import org.qi4j.api.mixin.Mixins;
diff --git a/tutorials/introduction/twominutes/src/main/java/org/qi4j/demo/twominute/SpeakerMixin.java b/tutorials/introduction/twominutes/src/main/java/org/qi4j/demo/twominute/SpeakerMixin.java
index c63ef8d..1459619 100644
--- a/tutorials/introduction/twominutes/src/main/java/org/qi4j/demo/twominute/SpeakerMixin.java
+++ b/tutorials/introduction/twominutes/src/main/java/org/qi4j/demo/twominute/SpeakerMixin.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.demo.twominute;
 
 // START SNIPPET: documentation
diff --git a/tutorials/services/build.gradle b/tutorials/services/build.gradle
index 3b7dccb..5f8e4e6 100644
--- a/tutorials/services/build.gradle
+++ b/tutorials/services/build.gradle
@@ -1,6 +1,25 @@
-description = "Tutorial on how to use Qi4j service concept."
+/*
+ * 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.
+ */
 
-jar { manifest { name = "Qi4j Tutorial - Services" }}
+description = "Tutorial on how to use Apache Zest™ service concept."
+
+jar { manifest { name = "Apache Zest™ Tutorial - Services" }}
 
 dependencies {
   compile(project(":org.qi4j.core:org.qi4j.core.bootstrap"))
diff --git a/tutorials/services/src/docs/step1.txt b/tutorials/services/src/docs/step1.txt
index 656be3c..761d324 100644
--- a/tutorials/services/src/docs/step1.txt
+++ b/tutorials/services/src/docs/step1.txt
@@ -1,16 +1,35 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[tut-services-step1,Step 1 - Creating a ServiceComposite]]
 = Step 1 - Creating a ServiceComposite =
 
 In this tutorial we start with basic Java classes, to simulate a very simple Library where you can borrow
 and return books.
 
-Qi4j relies heavily on the use of interfaces. This makes it possible for an object
+Zest™ relies heavily on the use of interfaces. This makes it possible for an object
 to externally implement a number of interfaces which internally is backed by a number
 of Mixins, some of which you may have written yourself, and some of which may have been
 reused. This is also true for services, which we are to cover in this tutorial.
 
 The first task is therefore to refactor the code so that the methods are implemented from an
-interface instead, and to essentially make the identical "application" into a Qi4j application.
+interface instead, and to essentially make the identical "application" into a Zest™ application.
 We also want the Book to be a ValueComposite.
     
 Steps for this tutorial:
diff --git a/tutorials/services/src/docs/step2.txt b/tutorials/services/src/docs/step2.txt
index 328a438..b3b9079 100644
--- a/tutorials/services/src/docs/step2.txt
+++ b/tutorials/services/src/docs/step2.txt
@@ -1,8 +1,27 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[tut-services-step2,Step 2 - Hooking into the Service Activation]]
 = Step 2 - Hooking into the Service Activation =
 
 Services can be "activated" and "passivated". Applications can be notified of this occurring
-by Qi4j runtime by assembling them with an Activator. 
+by Zest™ runtime by assembling them with an Activator.
 
 Activators methods are called around "activation" and "passivation": beforeActivation,
 afterActivation, beforeActivation, afterPassivation. The
diff --git a/tutorials/services/src/docs/step3.txt b/tutorials/services/src/docs/step3.txt
index dd235fc..f81f3e1 100644
--- a/tutorials/services/src/docs/step3.txt
+++ b/tutorials/services/src/docs/step3.txt
@@ -1,13 +1,32 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[tut-services-step3,Step 3 - Reading the Service Configuration]]
 = Step 3 - Reading the Service Configuration =
 
-Services typically have configuration. Configurations are directly supported in Qi4j. A
+Services typically have configuration. Configurations are directly supported in Zest™. A
 ConfigurationComposite is a subtype of EntityComposite. That is because
 configurations are stored in EntityStores, can be modified in runtime by client code and has
 the same semantics as regular entities.
 
-Qi4j also handles the bootstrapping of configuration for the services. If the ConfigurationComposite is
-not found in the configured entity store, then Qi4j will automatically locate a properties file for each
+Zest™ also handles the bootstrapping of configuration for the services. If the ConfigurationComposite is
+not found in the configured entity store, then Zest™ will automatically locate a properties file for each
 service instance, read those properties into a ConfigurationComposite instance, save that to the
 entity store and provide the values to the service. The properties file must be with the same name as
 the service instance with the extension "properties" in the same package as the service.
diff --git a/tutorials/services/src/docs/tut-services.txt b/tutorials/services/src/docs/tut-services.txt
index 1a65b1f..8c85271 100644
--- a/tutorials/services/src/docs/tut-services.txt
+++ b/tutorials/services/src/docs/tut-services.txt
@@ -1,14 +1,33 @@
+///////////////////////////////////////////////////////////////
+ * 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.
+///////////////////////////////////////////////////////////////
+
 [[tut-services,Services Composites Tutorial]]
 = Services Composites Tutorial =
 
 TIP: Theses tutorials are based on actual code found in the `tutorials/` directory of the
-http://qi4j.org/downloads.html[Qi4j SDK sources]. You should start your favorite editor and find the code related to
+http://zest.apache.org/download.html[Zest™ SDK sources]. You should start your favorite editor and find the code related to
 this tutorial, run it and play with it.
 
 
 In this other set of tutorials it will be shown how to create and work with Service Composites, which are composites
 that extends from the ServiceComposite class. We will refactor one a very simple Library where you can borrow and
-return books to take advantage of the various features in Qi4j. These refactorings will benefit from automatic Service
+return books to take advantage of the various features in Zest™. These refactorings will benefit from automatic Service
 activation and Configuration Entities management.
 
 - <<tut-services-step1>>
@@ -26,7 +45,7 @@
 
 include::../../../../core/runtime/build/docs/buildinfo/artifact.txt[]
 
-See the <<howto-depend-on-qi4j>> tutorial for details.
+See the <<howto-depend-on-zest>> tutorial for details.
 
 :leveloffset: 3
 
diff --git a/tutorials/services/src/main/java/org/qi4j/tutorials/services/step1/package.html b/tutorials/services/src/main/java/org/qi4j/tutorials/services/step1/package.html
index 804290d..a7b7805 100644
--- a/tutorials/services/src/main/java/org/qi4j/tutorials/services/step1/package.html
+++ b/tutorials/services/src/main/java/org/qi4j/tutorials/services/step1/package.html
@@ -1,3 +1,19 @@
+<!--
+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.
+-->
 <body>
     <h1>Step 1 - Creating a ServiceComposite</h1>
 
@@ -6,14 +22,14 @@
         and return books.
     </p>
     <p>
-        Qi4j relies heavily on the use of interfaces. This makes it possible for an object
+        Apache Zest™ relies heavily on the use of interfaces. This makes it possible for an object
         to externally implement a number of interfaces which internally is backed by a number
         of Mixins, some of which you may have written yourself, and some of which may have been
         reused. This is also true for services, which we are to cover in this tutorial.
     </p>
     <p>
         The first task is therefore to refactor the code so that the methods are implemented from an
-        interface instead, and to essentially make the identical "application" into a Qi4j application.
+        interface instead, and to essentially make the identical "application" into a Zest™ application.
         We also want the Book to be a ValueComposite.
     </p>
     
diff --git a/tutorials/services/src/main/java/org/qi4j/tutorials/services/step2/Library.java b/tutorials/services/src/main/java/org/qi4j/tutorials/services/step2/Library.java
index e811b0a..6a13bb4 100644
--- a/tutorials/services/src/main/java/org/qi4j/tutorials/services/step2/Library.java
+++ b/tutorials/services/src/main/java/org/qi4j/tutorials/services/step2/Library.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.services.step2;
 
 public interface Library
diff --git a/tutorials/services/src/main/java/org/qi4j/tutorials/services/step2/LibraryService.java b/tutorials/services/src/main/java/org/qi4j/tutorials/services/step2/LibraryService.java
index 70da5d7..d92c0d8 100644
--- a/tutorials/services/src/main/java/org/qi4j/tutorials/services/step2/LibraryService.java
+++ b/tutorials/services/src/main/java/org/qi4j/tutorials/services/step2/LibraryService.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.services.step2;
 
 import org.qi4j.api.mixin.Mixins;
diff --git a/tutorials/services/src/main/java/org/qi4j/tutorials/services/step2/package.html b/tutorials/services/src/main/java/org/qi4j/tutorials/services/step2/package.html
index 2be4811..860150a 100644
--- a/tutorials/services/src/main/java/org/qi4j/tutorials/services/step2/package.html
+++ b/tutorials/services/src/main/java/org/qi4j/tutorials/services/step2/package.html
@@ -1,9 +1,25 @@
+<!--
+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.
+-->
 <body>
     <h1>Step 2 - Hooking into the Service Activation</h1>
 
     <p>
         Services can be "<i>activated</i>" and "<i>passivated</i>". Applications can be notified of this occurring
-        by Qi4j runtime by assembling them with an <code>Activator</code>. 
+        by Zest™ runtime by assembling them with an <code>Activator</code>.
     </p>
     <p>
         Activators methods are called around "<i>activation</i>" and "<i>passivation</i>": <code>beforeActivation</code>,
diff --git a/tutorials/services/src/main/java/org/qi4j/tutorials/services/step3/Library.java b/tutorials/services/src/main/java/org/qi4j/tutorials/services/step3/Library.java
index a3a9115..b9516db 100644
--- a/tutorials/services/src/main/java/org/qi4j/tutorials/services/step3/Library.java
+++ b/tutorials/services/src/main/java/org/qi4j/tutorials/services/step3/Library.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.services.step3;
 
 public interface Library
diff --git a/tutorials/services/src/main/java/org/qi4j/tutorials/services/step3/LibraryService.java b/tutorials/services/src/main/java/org/qi4j/tutorials/services/step3/LibraryService.java
index cbdd3bc..ba03666 100644
--- a/tutorials/services/src/main/java/org/qi4j/tutorials/services/step3/LibraryService.java
+++ b/tutorials/services/src/main/java/org/qi4j/tutorials/services/step3/LibraryService.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.services.step3;
 
 import org.qi4j.api.activation.Activators;
diff --git a/tutorials/services/src/main/java/org/qi4j/tutorials/services/step3/package.html b/tutorials/services/src/main/java/org/qi4j/tutorials/services/step3/package.html
index 52d5bb9..37436d9 100644
--- a/tutorials/services/src/main/java/org/qi4j/tutorials/services/step3/package.html
+++ b/tutorials/services/src/main/java/org/qi4j/tutorials/services/step3/package.html
@@ -1,15 +1,31 @@
+<!--
+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.
+-->
 <body>
     <h1>Step 3 - Reading the Service Configuration</h1>
 
     <p>
-        Services typically have configuration. Configurations are directly supported in Qi4j. A
+        Services typically have configuration. Configurations are directly supported in Zest™. A
         <code>ConfigurationComposite</code> is a subtype of <code>EntityComposite</code>. That is because
         configurations are stored in EntityStores, can be modified in runtime by client code and has
         the same semantics as regular entities.
     </p>
     <p>
-        Qi4j also handles the bootstrapping of configuration for the services. If the ConfigurationComposite is
-        not found in the configured entity store, then Qi4j will automatically locate a properties file for each
+        Zest™ also handles the bootstrapping of configuration for the services. If the ConfigurationComposite is
+        not found in the configured entity store, then Zest™ will automatically locate a properties file for each
         service instance, read those properties into a ConfigurationComposite instance, save that to the
         entity store and provide the values to the service. The properties file must be with the same name as
         the service instance with the extension <code>"properties"</code> in the same package as the service.
diff --git a/tutorials/services/src/main/java/org/qi4j/tutorials/services/step4/Library.java b/tutorials/services/src/main/java/org/qi4j/tutorials/services/step4/Library.java
index 10c3dcd..e62c4a9 100644
--- a/tutorials/services/src/main/java/org/qi4j/tutorials/services/step4/Library.java
+++ b/tutorials/services/src/main/java/org/qi4j/tutorials/services/step4/Library.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.services.step4;
 
 public interface Library
diff --git a/tutorials/services/src/main/java/org/qi4j/tutorials/services/step4/LibraryService.java b/tutorials/services/src/main/java/org/qi4j/tutorials/services/step4/LibraryService.java
index 45cba93..be696c5 100644
--- a/tutorials/services/src/main/java/org/qi4j/tutorials/services/step4/LibraryService.java
+++ b/tutorials/services/src/main/java/org/qi4j/tutorials/services/step4/LibraryService.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.services.step4;
 
 import org.qi4j.api.mixin.Mixins;
diff --git a/tutorials/services/src/main/java/org/qi4j/tutorials/services/step5/Library.java b/tutorials/services/src/main/java/org/qi4j/tutorials/services/step5/Library.java
index ad4d44c..bd7e534 100644
--- a/tutorials/services/src/main/java/org/qi4j/tutorials/services/step5/Library.java
+++ b/tutorials/services/src/main/java/org/qi4j/tutorials/services/step5/Library.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.services.step5;
 
 public interface Library
diff --git a/tutorials/services/src/main/java/org/qi4j/tutorials/services/step5/LibraryService.java b/tutorials/services/src/main/java/org/qi4j/tutorials/services/step5/LibraryService.java
index e93f510..6f40aba 100644
--- a/tutorials/services/src/main/java/org/qi4j/tutorials/services/step5/LibraryService.java
+++ b/tutorials/services/src/main/java/org/qi4j/tutorials/services/step5/LibraryService.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.services.step5;
 
 import java.util.ArrayList;
diff --git a/tutorials/services/src/main/java/org/qi4j/tutorials/services/step6/Library.java b/tutorials/services/src/main/java/org/qi4j/tutorials/services/step6/Library.java
index 16faaa0..537a0a3 100644
--- a/tutorials/services/src/main/java/org/qi4j/tutorials/services/step6/Library.java
+++ b/tutorials/services/src/main/java/org/qi4j/tutorials/services/step6/Library.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.services.step6;
 
 public interface Library
diff --git a/tutorials/services/src/main/java/org/qi4j/tutorials/services/step6/LibraryService.java b/tutorials/services/src/main/java/org/qi4j/tutorials/services/step6/LibraryService.java
index b5b0ee5..5c6c854 100644
--- a/tutorials/services/src/main/java/org/qi4j/tutorials/services/step6/LibraryService.java
+++ b/tutorials/services/src/main/java/org/qi4j/tutorials/services/step6/LibraryService.java
@@ -1,3 +1,21 @@
+/*
+ * 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.qi4j.tutorials.services.step6;
 
 import java.util.ArrayList;
diff --git a/tutorials/services/src/main/resources/org/qi4j/tutorials/services/step4/LibraryService.properties b/tutorials/services/src/main/resources/org/qi4j/tutorials/services/step4/LibraryService.properties
index 3419989..90f349c 100644
--- a/tutorials/services/src/main/resources/org/qi4j/tutorials/services/step4/LibraryService.properties
+++ b/tutorials/services/src/main/resources/org/qi4j/tutorials/services/step4/LibraryService.properties
@@ -1,3 +1,18 @@
+# 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.
+
 titles=Domain Driven Design, Pragmatic Programmer, Extreme Programming Explained
 authors=Eric Evans, Andy Hunt, Kent Beck
 
diff --git a/tutorials/services/src/main/resources/org/qi4j/tutorials/services/step5/LibraryService.properties b/tutorials/services/src/main/resources/org/qi4j/tutorials/services/step5/LibraryService.properties
index 3419989..90f349c 100644
--- a/tutorials/services/src/main/resources/org/qi4j/tutorials/services/step5/LibraryService.properties
+++ b/tutorials/services/src/main/resources/org/qi4j/tutorials/services/step5/LibraryService.properties
@@ -1,3 +1,18 @@
+# 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.
+
 titles=Domain Driven Design, Pragmatic Programmer, Extreme Programming Explained
 authors=Eric Evans, Andy Hunt, Kent Beck
 
diff --git a/tutorials/services/src/main/resources/org/qi4j/tutorials/services/step6/Library.properties b/tutorials/services/src/main/resources/org/qi4j/tutorials/services/step6/Library.properties
index 3419989..90f349c 100644
--- a/tutorials/services/src/main/resources/org/qi4j/tutorials/services/step6/Library.properties
+++ b/tutorials/services/src/main/resources/org/qi4j/tutorials/services/step6/Library.properties
@@ -1,3 +1,18 @@
+# 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.
+
 titles=Domain Driven Design, Pragmatic Programmer, Extreme Programming Explained
 authors=Eric Evans, Andy Hunt, Kent Beck