New Upstream Snapshot - uncommons-watchmaker

Ready changes

Summary

Merged new upstream version: 0.7.1+git20171206.1.33d9423+ds (was: 0.7.1).

Resulting package

Built on 2023-01-20T11:56 (took 7m4s)

The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:

apt install -t fresh-snapshots libuncommons-watchmaker-framework-javaapt install -t fresh-snapshots libuncommons-watchmaker-swing-java

Diff

diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..59ccb45
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+watchmaker
\ No newline at end of file
diff --git a/.idea/ant.xml b/.idea/ant.xml
new file mode 100644
index 0000000..313b0c0
--- /dev/null
+++ b/.idea/ant.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="AntConfiguration">
+    <buildFile url="file://$PROJECT_DIR$/build.xml" />
+  </component>
+</project>
+
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..c04517b
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CompilerConfiguration">
+    <option name="DEFAULT_COMPILER" value="Javac" />
+    <resourceExtensions />
+    <wildcardResourcePatterns>
+      <entry name="?*.properties" />
+      <entry name="?*.xml" />
+      <entry name="?*.gif" />
+      <entry name="?*.png" />
+      <entry name="?*.jpeg" />
+      <entry name="?*.jpg" />
+      <entry name="?*.html" />
+      <entry name="?*.dtd" />
+      <entry name="?*.tld" />
+      <entry name="?*.ftl" />
+    </wildcardResourcePatterns>
+    <annotationProcessing>
+      <profile default="true" name="Default" enabled="false">
+        <processorPath useClasspath="true" />
+      </profile>
+      <profile default="false" name="Maven default annotation processors profile" enabled="true">
+        <sourceOutputDir name="target/generated-sources/annotations" />
+        <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
+        <outputRelativeToContentRoot value="true" />
+        <processorPath useClasspath="true" />
+        <module name="watchmaker-examples" />
+        <module name="watchmaker-framework" />
+        <module name="watchmaker-swing" />
+      </profile>
+    </annotationProcessing>
+    <bytecodeTargetLevel>
+      <module name="watchmaker" target="1.6" />
+      <module name="watchmaker-examples" target="1.6" />
+      <module name="watchmaker-framework" target="1.6" />
+      <module name="watchmaker-swing" target="1.6" />
+    </bytecodeTargetLevel>
+  </component>
+</project>
+
diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml
new file mode 100644
index 0000000..3572571
--- /dev/null
+++ b/.idea/copyright/profiles_settings.xml
@@ -0,0 +1,5 @@
+<component name="CopyrightManager">
+  <settings default="">
+    <module2copyright />
+  </settings>
+</component>
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..2a99e95
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false">
+    <file url="file://$PROJECT_DIR$" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/examples" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/framework" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/swing" charset="UTF-8" />
+  </component>
+</project>
+
diff --git a/.idea/libraries/Maven__com_beust_jcommander_1_12.xml b/.idea/libraries/Maven__com_beust_jcommander_1_12.xml
new file mode 100644
index 0000000..2b9ea17
--- /dev/null
+++ b/.idea/libraries/Maven__com_beust_jcommander_1_12.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: com.beust:jcommander:1.12">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/com/beust/jcommander/1.12/jcommander-1.12.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/com/beust/jcommander/1.12/jcommander-1.12-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/com/beust/jcommander/1.12/jcommander-1.12-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_google_collections_google_collections_1_0.xml b/.idea/libraries/Maven__com_google_collections_google_collections_1_0.xml
new file mode 100644
index 0000000..7ed5d20
--- /dev/null
+++ b/.idea/libraries/Maven__com_google_collections_google_collections_1_0.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: com.google.collections:google-collections:1.0">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/com/google/collections/google-collections/1.0/google-collections-1.0.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/com/google/collections/google-collections/1.0/google-collections-1.0-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/com/google/collections/google-collections/1.0/google-collections-1.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__jfree_jcommon_1_0_12.xml b/.idea/libraries/Maven__jfree_jcommon_1_0_12.xml
new file mode 100644
index 0000000..80156ee
--- /dev/null
+++ b/.idea/libraries/Maven__jfree_jcommon_1_0_12.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: jfree:jcommon:1.0.12">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/jfree/jcommon/1.0.12/jcommon-1.0.12.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/jfree/jcommon/1.0.12/jcommon-1.0.12-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/jfree/jcommon/1.0.12/jcommon-1.0.12-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__jfree_jfreechart_1_0_13.xml b/.idea/libraries/Maven__jfree_jfreechart_1_0_13.xml
new file mode 100644
index 0000000..c91b3c0
--- /dev/null
+++ b/.idea/libraries/Maven__jfree_jfreechart_1_0_13.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: jfree:jfreechart:1.0.13">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/jfree/jfreechart/1.0.13/jfreechart-1.0.13.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/jfree/jfreechart/1.0.13/jfreechart-1.0.13-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/jfree/jfreechart/1.0.13/jfreechart-1.0.13-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__jfree_jfreechart_1_0_8.xml b/.idea/libraries/Maven__jfree_jfreechart_1_0_8.xml
new file mode 100644
index 0000000..4e53d16
--- /dev/null
+++ b/.idea/libraries/Maven__jfree_jfreechart_1_0_8.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: jfree:jfreechart:1.0.8">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/jfree/jfreechart/1.0.8/jfreechart-1.0.8.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/jfree/jfreechart/1.0.8/jfreechart-1.0.8-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/jfree/jfreechart/1.0.8/jfreechart-1.0.8-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__junit_junit_3_8_1.xml b/.idea/libraries/Maven__junit_junit_3_8_1.xml
new file mode 100644
index 0000000..71b2993
--- /dev/null
+++ b/.idea/libraries/Maven__junit_junit_3_8_1.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: junit:junit:3.8.1">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/junit/junit/3.8.1/junit-3.8.1.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/junit/junit/3.8.1/junit-3.8.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/junit/junit/3.8.1/junit-3.8.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_jcip_jcip_annotations_1_0.xml b/.idea/libraries/Maven__net_jcip_jcip_annotations_1_0.xml
new file mode 100644
index 0000000..d29c82f
--- /dev/null
+++ b/.idea/libraries/Maven__net_jcip_jcip_annotations_1_0.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: net.jcip:jcip-annotations:1.0">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/net/jcip/jcip-annotations/1.0/jcip-annotations-1.0.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/net/jcip/jcip-annotations/1.0/jcip-annotations-1.0-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/net/jcip/jcip-annotations/1.0/jcip-annotations-1.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_beanshell_bsh_2_0b4.xml b/.idea/libraries/Maven__org_beanshell_bsh_2_0b4.xml
new file mode 100644
index 0000000..d6f17aa
--- /dev/null
+++ b/.idea/libraries/Maven__org_beanshell_bsh_2_0b4.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.beanshell:bsh:2.0b4">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/beanshell/bsh/2.0b4/bsh-2.0b4.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/beanshell/bsh/2.0b4/bsh-2.0b4-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/beanshell/bsh/2.0b4/bsh-2.0b4-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_easytesting_fest_assert_1_2.xml b/.idea/libraries/Maven__org_easytesting_fest_assert_1_2.xml
new file mode 100644
index 0000000..e0eb7e5
--- /dev/null
+++ b/.idea/libraries/Maven__org_easytesting_fest_assert_1_2.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.easytesting:fest-assert:1.2">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/easytesting/fest-assert/1.2/fest-assert-1.2.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/easytesting/fest-assert/1.2/fest-assert-1.2-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/easytesting/fest-assert/1.2/fest-assert-1.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_easytesting_fest_reflect_1_2.xml b/.idea/libraries/Maven__org_easytesting_fest_reflect_1_2.xml
new file mode 100644
index 0000000..2d5ea79
--- /dev/null
+++ b/.idea/libraries/Maven__org_easytesting_fest_reflect_1_2.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.easytesting:fest-reflect:1.2">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/easytesting/fest-reflect/1.2/fest-reflect-1.2.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/easytesting/fest-reflect/1.2/fest-reflect-1.2-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/easytesting/fest-reflect/1.2/fest-reflect-1.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_easytesting_fest_swing_1_2_1.xml b/.idea/libraries/Maven__org_easytesting_fest_swing_1_2_1.xml
new file mode 100644
index 0000000..8651372
--- /dev/null
+++ b/.idea/libraries/Maven__org_easytesting_fest_swing_1_2_1.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.easytesting:fest-swing:1.2.1">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/easytesting/fest-swing/1.2.1/fest-swing-1.2.1.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/easytesting/fest-swing/1.2.1/fest-swing-1.2.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/easytesting/fest-swing/1.2.1/fest-swing-1.2.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_easytesting_fest_util_1_1_3.xml b/.idea/libraries/Maven__org_easytesting_fest_util_1_1_3.xml
new file mode 100644
index 0000000..f54cc10
--- /dev/null
+++ b/.idea/libraries/Maven__org_easytesting_fest_util_1_1_3.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.easytesting:fest-util:1.1.3">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/easytesting/fest-util/1.1.3/fest-util-1.1.3.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/easytesting/fest-util/1.1.3/fest-util-1.1.3-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/easytesting/fest-util/1.1.3/fest-util-1.1.3-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_testng_testng_6_2_1.xml b/.idea/libraries/Maven__org_testng_testng_6_2_1.xml
new file mode 100644
index 0000000..16c6f53
--- /dev/null
+++ b/.idea/libraries/Maven__org_testng_testng_6_2_1.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.testng:testng:6.2.1">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/testng/testng/6.2.1/testng-6.2.1.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/testng/testng/6.2.1/testng-6.2.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/testng/testng/6.2.1/testng-6.2.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_uncommons_maths_uncommons_maths_1_2_2.xml b/.idea/libraries/Maven__org_uncommons_maths_uncommons_maths_1_2_2.xml
new file mode 100644
index 0000000..38581b9
--- /dev/null
+++ b/.idea/libraries/Maven__org_uncommons_maths_uncommons_maths_1_2_2.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.uncommons.maths:uncommons-maths:1.2.2">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/uncommons/maths/uncommons-maths/1.2.2/uncommons-maths-1.2.2.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/uncommons/maths/uncommons-maths/1.2.2/uncommons-maths-1.2.2-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/uncommons/maths/uncommons-maths/1.2.2/uncommons-maths-1.2.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_yaml_snakeyaml_1_6.xml b/.idea/libraries/Maven__org_yaml_snakeyaml_1_6.xml
new file mode 100644
index 0000000..0f8bd19
--- /dev/null
+++ b/.idea/libraries/Maven__org_yaml_snakeyaml_1_6.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.yaml:snakeyaml:1.6">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.6/snakeyaml-1.6.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.6/snakeyaml-1.6-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.6/snakeyaml-1.6-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..75e1580
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="EntryPointsManager">
+    <entry_points version="2.0" />
+  </component>
+  <component name="MavenProjectsManager">
+    <option name="originalFiles">
+      <list>
+        <option value="$PROJECT_DIR$/pom.xml" />
+      </list>
+    </option>
+    <option name="ignoredFiles">
+      <set>
+        <option value="$PROJECT_DIR$/pom.xml" />
+      </set>
+    </option>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" assert-keyword="true" jdk-15="true" project-jdk-name="1.6" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/classes" />
+  </component>
+</project>
+
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..f314de0
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/book/book.iml" filepath="$PROJECT_DIR$/book/book.iml" />
+      <module fileurl="file://$PROJECT_DIR$/examples/examples.iml" filepath="$PROJECT_DIR$/examples/examples.iml" />
+      <module fileurl="file://$PROJECT_DIR$/framework/framework.iml" filepath="$PROJECT_DIR$/framework/framework.iml" />
+      <module fileurl="file://$PROJECT_DIR$/swing/swing.iml" filepath="$PROJECT_DIR$/swing/swing.iml" />
+    </modules>
+  </component>
+</project>
+
diff --git a/.idea/scopes/scope_settings.xml b/.idea/scopes/scope_settings.xml
new file mode 100644
index 0000000..922003b
--- /dev/null
+++ b/.idea/scopes/scope_settings.xml
@@ -0,0 +1,5 @@
+<component name="DependencyValidationManager">
+  <state>
+    <option name="SKIP_IMPORT_STATEMENTS" value="false" />
+  </state>
+</component>
\ No newline at end of file
diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 0000000..3b00020
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Palette2">
+    <group name="Swing">
+      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+      </item>
+      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
+        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+        <initial-values>
+          <property name="text" value="Button" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="RadioButton" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="CheckBox" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="Label" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
+          <preferred-size width="-1" height="20" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
+      </item>
+    </group>
+  </component>
+</project>
+
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..c80f219
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>
+
diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index 2fe05ce..e83d970 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -1,3 +1,15 @@
+Changes in version 0.7.2
+------------------------
+
+* Fix for StatusBar timer being reset at each epoch in island evolution
+  (ISSUE#19).
+
+* Added RandomMigration as an alternative strategy for island evolution.
+
+* Added generic type parameter to Migration interface to make it easier to
+  implement type-specific migration strategies.
+
+
 Changes in version 0.7.1
 ------------------------
 
diff --git a/README.txt b/README.txt
index 2de80c5..3ddaeb2 100644
--- a/README.txt
+++ b/README.txt
@@ -1,8 +1,8 @@
 _______________________________________________________________________________
 
-  The Watchmaker Framework for Evolutionary Computation - Version 0.7.0
+  The Watchmaker Framework for Evolutionary Computation - Version 0.7.1
    (http://watchmaker.uncommons.org)
-  Copyright 2006-2009 Daniel W. Dyer (http://www.dandyer.co.uk)
+  Copyright 2006-2010 Daniel W. Dyer (http://www.dandyer.co.uk)
 _______________________________________________________________________________
 
 
@@ -18,7 +18,7 @@ Source code for several example programs is included in the distribution.
 
 The examples can be run with the following command:
 
-    java -jar watchmaker-examples-0.7.0.jar
+    java -jar watchmaker-examples-0.7.1.jar
 
 This will list the names of available example applications.  Then just run the
 command again with one of those names as an argument.
@@ -30,17 +30,17 @@ command again with one of those names as an argument.
 The following bundled JAR files are required by all programs that use the
 Watchmaker Framework:
 
-  watchmaker-framework-0.7.0.jar        (Apache Licence 2.0)
+  watchmaker-framework-0.7.1.jar        (Apache Licence 2.0)
   uncommons-maths-1.2.1.jar             (Apache Licence 2.0)
   google-collect-1.0.jar                (Apache Licence 2.0)
 
 These additional JAR files are required to use the Watchmaker Framework Swing
 components:
 
-  watchmaker-swing-0.7.0.jar            (Apache Licence 2.0)
+  watchmaker-swing-0.7.1.jar            (Apache Licence 2.0)
   jfreechart-1.0.13.jar                 (GNU LGPL 2.1)
   jcommon-1.0.16.jar                    (GNU LGPL 2.1)
 
-Example applications are included in the watchmaker-examples-0.7.0.jar file.
+Example applications are included in the watchmaker-examples-0.7.1.jar file.
 This file is not required by other applications that use the Watchmaker
 Framework.
diff --git a/etc/intellij/book.iml b/book/book.iml
similarity index 60%
rename from etc/intellij/book.iml
rename to book/book.iml
index 42b42b8..d5c0743 100644
--- a/etc/intellij/book.iml
+++ b/book/book.iml
@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<module relativePaths="true" type="JAVA_MODULE" version="4">
+<module type="JAVA_MODULE" version="4">
   <component name="NewModuleRootManager" inherit-compiler-output="true">
     <exclude-output />
-    <content url="file://$MODULE_DIR$/../../book" />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
   </component>
diff --git a/book/src/resources/docbook.css b/book/src/resources/docbook.css
index a38ae04..018291b 100644
--- a/book/src/resources/docbook.css
+++ b/book/src/resources/docbook.css
@@ -32,4 +32,4 @@ h3.author {font-variant: normal; margin-top: 2em; margin-bottom: 0;}
 .mediaobject {display: inline-block;}
 .caption p {margin: 0; text-align: right; font-size: small;}
 
-.navfooter table tr td {width: 33.33%}
\ No newline at end of file
+.navfooter table tr td {width: 33.33%;}
\ No newline at end of file
diff --git a/book/src/xml/classifiers.xml b/book/src/xml/classifiers.xml
index be852be..79a433a 100644
--- a/book/src/xml/classifiers.xml
+++ b/book/src/xml/classifiers.xml
@@ -1,5 +1,4 @@
 <chapter xmlns="http://docbook.org/ns/docbook"
-         xmlns:xi="http://www.w3.org/2001/XInclude"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd">
   <title>Learning Classifier Systems</title>
diff --git a/book/src/xml/distributed.xml b/book/src/xml/distributed.xml
index 553c82e..08c54c0 100644
--- a/book/src/xml/distributed.xml
+++ b/book/src/xml/distributed.xml
@@ -1,5 +1,4 @@
 <appendix xmlns="http://docbook.org/ns/docbook"
-          xmlns:xi="http://www.w3.org/2001/XInclude"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd">
   <title>Distributed Evolutionary Algorithms</title>
diff --git a/book/src/xml/evolution.xml b/book/src/xml/evolution.xml
index 4f2cc3f..0c134aa 100644
--- a/book/src/xml/evolution.xml
+++ b/book/src/xml/evolution.xml
@@ -1,5 +1,4 @@
 <chapter xmlns="http://docbook.org/ns/docbook"
-         xmlns:xi="http://www.w3.org/2001/XInclude"
          xmlns:xlink="http://www.w3.org/1999/xlink"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd">
diff --git a/book/src/xml/furtherreading.xml b/book/src/xml/furtherreading.xml
index 4e12fc8..c0ab4c3 100644
--- a/book/src/xml/furtherreading.xml
+++ b/book/src/xml/furtherreading.xml
@@ -1,5 +1,4 @@
 <appendix xmlns="http://docbook.org/ns/docbook"
-          xmlns:xi="http://www.w3.org/2001/XInclude"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd">
   <title>Further Reading</title>
diff --git a/book/src/xml/geneticprogramming.xml b/book/src/xml/geneticprogramming.xml
index 334589b..cb37ed6 100644
--- a/book/src/xml/geneticprogramming.xml
+++ b/book/src/xml/geneticprogramming.xml
@@ -1,5 +1,4 @@
 <chapter xmlns="http://docbook.org/ns/docbook"
-         xmlns:xi="http://www.w3.org/2001/XInclude"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd">
   <title>Genetic Programming</title>
diff --git a/book/src/xml/gui.xml b/book/src/xml/gui.xml
index f3b5e28..f339f77 100644
--- a/book/src/xml/gui.xml
+++ b/book/src/xml/gui.xml
@@ -1,5 +1,4 @@
 <appendix xmlns="http://docbook.org/ns/docbook"
-          xmlns:xi="http://www.w3.org/2001/XInclude"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd">
   <title>Building Graphical User Interfaces for Evolutionary Programs</title>
diff --git a/book/src/xml/interactive.xml b/book/src/xml/interactive.xml
index a9f5053..fa7369a 100644
--- a/book/src/xml/interactive.xml
+++ b/book/src/xml/interactive.xml
@@ -1,5 +1,4 @@
 <chapter xmlns="http://docbook.org/ns/docbook"
-         xmlns:xi="http://www.w3.org/2001/XInclude"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd">
   <title>Interactive Evolutionary Algorithms</title>
diff --git a/book/src/xml/islands.xml b/book/src/xml/islands.xml
index c0c4aec..e7943f8 100644
--- a/book/src/xml/islands.xml
+++ b/book/src/xml/islands.xml
@@ -1,7 +1,175 @@
 <chapter xmlns="http://docbook.org/ns/docbook"
-         xmlns:xi="http://www.w3.org/2001/XInclude"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd">
   <title>Island Models</title>
-  <para>TODO</para>
+  <indexterm><primary>island models</primary></indexterm>
+  <indexterm><primary>Australia</primary></indexterm>
+  <para>
+    In the natural world, populations of organisms might be separated by geography.  Left to evolve in isolation
+    over millions of years, vastly different species will occur in different locations.  Consider Australia,
+    an island continent protected by its seas.  With little opportunity for outside organisms to
+    interfere, and few opportunities for its land-based organisms to migrate to other land masses, Australian
+    wildlife evolved to be distinctly different from that of other continents and countries.  The majority of
+    Australia's plant and animal species, including 84% of its mammals, are endemic.  They occur nowhere else
+    in the world.
+  </para>
+  <indexterm><primary>Darwin, Charles</primary></indexterm>
+  <indexterm><primary>Galápagos Islands</primary></indexterm>
+  <para>
+    Australia is not the only island to exhibit such levels of endemism.  It was a visit to the Galápagos
+    Islands in 1835 that started Charles Darwin on the path to formulating his theory of evolution.  Darwin
+    noticed the pronounced differences between the species of mocking birds and tortoises present on the
+    different islands of the archipelago and began to speculate on how such variations might have occurred.
+  </para>
+  <para>
+    In the world of evolutionary computation we can mimic this idea of having multiple isolated populations
+    evolving in parallel.  Having additional populations would increase the likelihood of finding a solution that
+    is close to the global optimum.  However, it is not just a question of having a larger global population.
+    A system of 10 islands each with a population of 50 individuals is not equivalent to a single island with a
+    population of 500.  The reason for this is that the island system partitions the search.  If one island
+    prematurely converges on a sub-optimal solution it does not affect the evolution happening on the other
+    islands; they are following their own paths.  A single large population does not have this in-built
+    resilience.
+  </para>
+  <section>
+    <title>Migration</title>
+    <indexterm><primary>migration</primary></indexterm>
+    <indexterm><primary>island models</primary><secondary>migration</secondary></indexterm>
+    <para>
+      There is of course no real difference between evolving 10 completely separate islands in parallel and running
+      the same single-population evolution 10 times in a row, other than how the computing resources are utilised.
+      In practice the populations are not kept permanently isolated from each other and there are occasional
+      opportunities for individuals to migrate between islands.
+    </para>
+    <para>
+      In nature external species have been introduced to foreign ecosystems in several ways. In an ice age the waters
+      that previously separated two land masses might freeze providing a route for land animals to migrate to
+      previously unreachable places. Microorganisms and insects have often strayed beyond their usual environment by
+      hitching a ride with larger species.
+    </para>
+    <indexterm><primary>rabbits</primary></indexterm>
+    <indexterm><primary>Austin, Thomas</primary></indexterm>
+    <para>
+      The effect of introducing a foreign species to a new environment can vary.  The new species might be
+      ill-adapted to its new surroundings and quickly perish.  Alternatively, a lack of natural predators
+      may cause it to flourish, often to the detriment of indigenous species.  One such example is the
+      introduction of rabbits to Australia.  Australia was a land without rabbits until the arrival of European
+      settlers.  An Englishman named Thomas Austin released 24 rabbits into the wild of Victoria in October 1859
+      with the intention of hunting them.  If rabbits are famous for one thing it is for reproducing prodigiously.
+      The mild winters allowed year-round breeding and the absence of any natural rabbit predators, such as foxes,
+      allowed the Australian rabbit population to explode unchecked.  Within 10 years an annual cull of two million
+      rabbits was having no noticeable effect on rabbit numbers and the habitats of some native animals were being
+      destroyed by the floppy-eared pests.  Today there are hundreds of millions of rabbits in Australia, despite
+      efforts to reduce the population, and the name of Thomas Austin is widely cursed for his catastrophic lack
+      of foresight.
+    </para>
+    <para>
+      While such invasions of separate species provide a useful analogy for what can happen when we introduce migration
+      into island model evolutionary algorithms, we are specifically interested in the effects of migration involving
+      genetically different members of the same species.  This is because, in our simplified model of evolution,
+      all individuals are compatible and can reproduce.  The island model of evolution provides the isolation necessary
+      for diversity to thrive while still providing opportunities for diverse individuals to be combined to produce
+      potentially fitter offspring.
+    </para>
+    <para>
+      In an island model, the isolation of the separate populations often leads to different traits originating on
+      different islands.  Migration brings these diverse individuals together occasionally to see what happens when
+      they are combined.  Remember that, even if the immigrants are weak, cross-over can result in offspring that are
+      fitter than either of their parents.  In this way, the introduction to the population of new genetic building
+      blocks may result in evolutionary progress even if the immigrants themselves are not viable in the new
+      population.
+    </para>
+  </section>
+  <section>
+    <title>Islands in the Watchmaker Framework</title>
+    <indexterm><primary><classname>IslandEvolution</classname></primary></indexterm>
+    <para>
+      The Watchmaker Framework for Evolutionary Computation supports islands models via the
+      <classname>IslandEvolution</classname> class.  Each island is a self-contained
+      <classname>EvolutionEngine</classname> just like those we have been using previously for single-population
+      evolutionary algorithms.  The evolution is divided into <emphasis>epochs</emphasis>.  Each epoch consists
+      of a fixed number of generations that each island completes in isolation.  At the end of an epoch migration
+      occurs.  Then, if the termination conditions are not yet satisfied, a new epoch begins.
+    </para>
+    <para>
+      The <classname>IslandEvolution</classname> supports pluggable migration strategies via different implementations
+      of the <interfacename>Migration</interfacename> interface.  An island version of the string evolution example
+      from <xref linkend="watchmaker_chapter" /> might look something like this:
+    </para>
+    <indexterm><primary><interfacename>Migration</interfacename></primary></indexterm>
+    <indexterm><primary><classname>RingMigration</classname></primary></indexterm>
+    <informalexample>
+      <programlisting language="java">
+<![CDATA[IslandEvolution<String> engine
+    = new IslandEvolution<String>(5, // Number of islands.
+                                  new RingMigration(),
+                                  candidateFactory,
+                                  evolutionaryOperator,
+                                  fitnessEvaluator,
+                                  selectionStrategy,
+                                  rng);
+
+engine.evolve(100, // Population size per island.
+              5, // Elitism for each island.
+              50, // Epoch length (no. generations).
+              3, // Migrations from each island at each epoch.
+              new TargetFitness(0, false));]]>
+      </programlisting>
+    </informalexample>
+    <indexterm><primary><interfacename>IslandEvolutionObserver</interfacename></primary></indexterm>
+    <indexterm><primary><methodname>populationUpdate</methodname></primary></indexterm>
+    <indexterm><primary><methodname>islandPopulationUpdate</methodname></primary></indexterm>
+    <para>
+      We can add listeners to an <classname>IslandEvolution</classname> object, just as we can with individual
+      <interfacename>EvolutionEngine</interfacename>s.  We use a different interface for this though,
+      <interfacename>IslandEvolutionObserver</interfacename>, which provides two call-backs.
+      The <methodname>populationUpdate</methodname> method reports the global state of the combined population
+      of all islands at the end of each epoch.  The <methodname>islandPopulationUpdate</methodname> method reports
+      the state of individual island populations at the end of each generation.
+    </para>
+    <section>
+      <title>Advanced Usage</title>
+      <indexterm><primary><classname>GenerationalEvolutionEngine</classname></primary><secondary>island evolution</secondary></indexterm>
+      <para>
+        In the example code above we specified how many islands we wanted to use and the
+        <classname>IslandEvolution</classname> class created one <classname>GenerationalEvolutionEngine</classname>
+        for each island.  Using this approach all of the islands have the same configuration; they use the same
+        candidate factory, evolutionary operator(s) and selection strategy.  This is the easiest way to create an
+        island system but it is also possible to construct each island individually for ultimate flexibility.
+      </para>
+      <informalexample>
+        <programlisting language="java">
+<![CDATA[List<EvolutionEngine<String>> islands
+    = new ArrayList<EvolutionEngine<String>>();
+
+// Create individual islands here and add them to the list.
+// ...
+
+IslandEvolution<String> engine
+    = new IslandEvolution<String>(islands,
+                                  new RingMigration(),
+                                  false, // Natural fitness?
+                                  rng);]]>
+        </programlisting>
+      </informalexample>
+      <para>
+        One reason you might choose to construct the islands explicitly is that it makes it possible to configure
+        individual islands differently.  You may choose to have different islands use different parameters
+        for evolutionary operators, or even to use different evolutionary operators all together.  Alternatively,
+        you could use the same evolutionary operators and parameters but have different selection strategies so that
+        some islands have stronger selection pressure than others.  You should generally use the same fitness function
+        for all islands though, otherwise you might get some strange results.
+      </para>
+      <indexterm><primary><classname>SteadyStateEvolutionEngine</classname></primary><secondary>island evolution</secondary></indexterm>
+      <indexterm><primary><classname>EvolutionStrategyEngine</classname></primary><secondary>island evolution</secondary></indexterm>
+      <para>
+        Another possible reason for creating the islands explicitly is so you don't have to use the standard
+        <classname>GenerationalEvolutionEngine</classname> for the islands.  You can choose to use any implementation
+        of the <interfacename>EvolutionEngine</interfacename> interface, such as the
+        <classname>SteadyStateEvolutionEngine</classname> class or the <classname>EvolutionStrategyEngine</classname>
+        class.  You can even use a mixture of different island types with the same
+        <classname>IslandEvolution</classname> object.
+      </para>
+    </section>
+  </section>
 </chapter>
diff --git a/book/src/xml/multiobjective.xml b/book/src/xml/multiobjective.xml
index e79c323..d453c0f 100644
--- a/book/src/xml/multiobjective.xml
+++ b/book/src/xml/multiobjective.xml
@@ -1,5 +1,4 @@
 <chapter xmlns="http://docbook.org/ns/docbook"
-         xmlns:xi="http://www.w3.org/2001/XInclude"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd">
   <title>Multi-Objective Optimisations</title>
diff --git a/book/src/xml/performance.xml b/book/src/xml/performance.xml
index 828f4b9..6f050bb 100644
--- a/book/src/xml/performance.xml
+++ b/book/src/xml/performance.xml
@@ -1,5 +1,4 @@
 <appendix xmlns="http://docbook.org/ns/docbook"
-          xmlns:xi="http://www.w3.org/2001/XInclude"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd">
   <title>Optimising for Performance</title>
diff --git a/book/src/xml/preface.xml b/book/src/xml/preface.xml
index e2d3e3b..9d2e1ec 100644
--- a/book/src/xml/preface.xml
+++ b/book/src/xml/preface.xml
@@ -1,5 +1,4 @@
 <preface xmlns="http://docbook.org/ns/docbook"
-         xmlns:xi="http://www.w3.org/2001/XInclude"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd">
   <title>Preface</title>
diff --git a/book/src/xml/salesman.xml b/book/src/xml/salesman.xml
index c41f4d9..9eac594 100644
--- a/book/src/xml/salesman.xml
+++ b/book/src/xml/salesman.xml
@@ -1,5 +1,4 @@
 <chapter xmlns="http://docbook.org/ns/docbook"
-         xmlns:xi="http://www.w3.org/2001/XInclude"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd">
   <title>The Travelling Salesman</title>
diff --git a/book/src/xml/selection.xml b/book/src/xml/selection.xml
index 4ab5f2a..95525b1 100644
--- a/book/src/xml/selection.xml
+++ b/book/src/xml/selection.xml
@@ -1,5 +1,4 @@
 <chapter xmlns="http://docbook.org/ns/docbook"
-         xmlns:xi="http://www.w3.org/2001/XInclude"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd"
          id="selection_chapter">
diff --git a/book/src/xml/steadystate.xml b/book/src/xml/steadystate.xml
index c6e8094..2e032c8 100644
--- a/book/src/xml/steadystate.xml
+++ b/book/src/xml/steadystate.xml
@@ -1,5 +1,4 @@
 <chapter xmlns="http://docbook.org/ns/docbook"
-         xmlns:xi="http://www.w3.org/2001/XInclude"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd">
   <title>Steady-State Evolutionary Algorithms</title>
diff --git a/book/src/xml/sudoku.xml b/book/src/xml/sudoku.xml
index 204c18e..9c86740 100644
--- a/book/src/xml/sudoku.xml
+++ b/book/src/xml/sudoku.xml
@@ -1,5 +1,4 @@
 <chapter xmlns="http://docbook.org/ns/docbook"
-         xmlns:xi="http://www.w3.org/2001/XInclude"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd">
   <title>An Evolutionary Sudoku Solver</title>
diff --git a/book/src/xml/watchmaker.xml b/book/src/xml/watchmaker.xml
index 99be924..b18cb39 100644
--- a/book/src/xml/watchmaker.xml
+++ b/book/src/xml/watchmaker.xml
@@ -1,8 +1,8 @@
 <chapter xmlns="http://docbook.org/ns/docbook"
-         xmlns:xi="http://www.w3.org/2001/XInclude"
          xmlns:xlink="http://www.w3.org/1999/xlink"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd">
+         xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd"
+         id="watchmaker_chapter">
   <title>The Watchmaker Framework</title>
   <indexterm significance="preferred"><primary>Watchmaker Framework</primary></indexterm>
   <para>
@@ -19,8 +19,8 @@
   </para>
   <section>
     <title>The Evolution Engine</title>
-    <indexterm><primary>GenerationalEvolutionEngine</primary></indexterm>
-    <indexterm><primary>EvolutionEngine</primary></indexterm>
+    <indexterm><primary><classname>GenerationalEvolutionEngine</classname></primary></indexterm>
+    <indexterm><primary><interfacename>EvolutionEngine</interfacename></primary></indexterm>
     <para>
       The central object of an evolutionary program built with the Watchmaker Framework is
       the evolution engine.
@@ -67,7 +67,7 @@
   </section>
   <section>
     <title>The Candidate Factory</title>
-    <indexterm><primary>CandidateFactory</primary></indexterm>
+    <indexterm significance="preferred"><primary><interfacename>CandidateFactory</interfacename></primary></indexterm>
     <para>
       The first object that needs to be plugged into the evolution engine is a candidate
       factory.  Every evolutionary simulation must start with an initial population of
@@ -83,7 +83,7 @@
       arrays, you may be able to use a ready-made factory from the
       <package>org.uncommons.watchmaker.framework.factories</package> package.
     </para>
-    <indexterm><primary>StringFactory</primary></indexterm>
+    <indexterm><primary><classname>StringFactory</classname></primary></indexterm>
     <para>
       For our "Hello World" program, we can use the provided
       <classname>StringFactory</classname>:
@@ -103,7 +103,7 @@ CandidateFactory<String> factory = new StringFactory(chars, 11);]]>
       </programlisting>
     </informalexample>
     <tip>
-      <indexterm><primary>AbstractCandidateFactory</primary></indexterm>
+      <indexterm significance="preferred"><primary><classname>AbstractCandidateFactory</classname></primary></indexterm>
       <para>
         When writing your own <interfacename>CandidateFactory</interfacename> implementations,
         it is easiest to extend the provided <classname>AbstractCandidateFactory</classname>
@@ -113,7 +113,7 @@ CandidateFactory<String> factory = new StringFactory(chars, 11);]]>
   </section>
   <section>
     <title>Evolutionary Operators</title>
-    <indexterm><primary>EvolutionaryOperator</primary></indexterm>
+    <indexterm significance="preferred"><primary><interfacename>EvolutionaryOperator</interfacename></primary></indexterm>
     <para>
       Evolutionary operators are the components that perform the actual evolution of a
       population.  Cross-over is an evolutionary operator, as is mutation.
@@ -126,8 +126,8 @@ CandidateFactory<String> factory = new StringFactory(chars, 11);]]>
       individual at a time, whereas others will process individuals in groups
       (cross-over processes two individuals at a time).
     </para>
-    <indexterm><primary>StringCrossover</primary></indexterm>
-    <indexterm><primary>StringMutation</primary></indexterm>
+    <indexterm><primary><classname>StringCrossover</classname></primary></indexterm>
+    <indexterm><primary><classname>StringMutation</classname></primary></indexterm>
     <para>
       As with candidate factories, evolutionary operators have associated types that
       must be compatible with the type of the evolution engine that they are used with.
@@ -140,7 +140,7 @@ CandidateFactory<String> factory = new StringFactory(chars, 11);]]>
     </para>
     <section>
       <title>The Evolution Pipeline</title>
-      <indexterm><primary>EvolutionPipeline</primary></indexterm>
+      <indexterm significance="preferred"><primary><classname>EvolutionPipeline</classname></primary></indexterm>
       <para>
         Alert readers will have noticed that the evolution engine constructor only accepts
         a single evolutionary operator.  So how can we use both cross-over and mutation?
@@ -173,7 +173,7 @@ EvolutionaryOperator<String> pipeline
   </section>
   <section>
     <title>The Fitness Evaluator</title>
-    <indexterm><primary>FitnessEvaluator</primary></indexterm>
+    <indexterm significance="preferred"><primary><interfacename>FitnessEvaluator</interfacename></primary></indexterm>
     <para>
       So far we've been able to build our evolutionary program by simply combining instances
       of classes provided by the framework.  There is one part of the program that we will
@@ -315,8 +315,8 @@ CandidateFactory<String> factory = new StringFactory(chars, 11);
 // Create a pipeline that applies cross-over then mutation.
 List<EvolutionaryOperator<String>> operators
     = new LinkedList<EvolutionaryOperator<String>>();
-operators.add(new StringMutation(chars, new Probability(0.02)));
 operators.add(new StringCrossover())
+operators.add(new StringMutation(chars, new Probability(0.02)));
 EvolutionaryOperator<String> pipeline
     = new EvolutionPipeline<String>(operators);
 
@@ -365,7 +365,7 @@ EvolutionEngine<String> engine
       </para>
       <informalexample>
         <programlisting language="java">
-<![CDATA[String result = engine.evolve(10, 0, new TargetFitness(11));
+<![CDATA[String result = engine.evolve(10, 0, new TargetFitness(11, true));
 System.out.println(result);]]>
         </programlisting>
       </informalexample>
diff --git a/book/src/xml/website.xml b/book/src/xml/website.xml
index f6caf8c..724e586 100644
--- a/book/src/xml/website.xml
+++ b/book/src/xml/website.xml
@@ -36,6 +36,7 @@
   <xi:include href="evolution.xml" />
   <xi:include href="watchmaker.xml" />
   <xi:include href="selection.xml" />
+  <xi:include href="islands.xml" />
 
   <!-- Appendices -->
   <xi:include href="performance.xml" />
diff --git a/build.xml b/build.xml
index 23f61ed..6292b47 100755
--- a/build.xml
+++ b/build.xml
@@ -54,7 +54,7 @@
            classpathref="tool.path"/>
 
 
-  <property name="version" value="0.7.1"/>
+  <property name="version" value="0.7.2"/>
   <property name="artifact.identifier" value="watchmaker-framework-${version}"/>
 
   <!-- This is the minimum coverage percentage (for both lines and
@@ -112,7 +112,7 @@
     <uncommons:compile module="examples" />
     <uncommons:jar module="examples"
                    jarfile="watchmaker-examples-${version}.jar"
-                   classpath="${artifact.identifier}.jar lib/uncommons-maths-1.2.1.jar lib/google-collect-1.0.jar watchmaker-swing-${version}.jar lib/jfreechart-1.0.13.jar lib/jcommon-1.0.16.jar"
+                   classpath="${artifact.identifier}.jar lib/uncommons-maths-1.2.2.jar lib/google-collect-1.0.jar watchmaker-swing-${version}.jar lib/jfreechart-1.0.13.jar lib/jcommon-1.0.16.jar"
                    mainclass="org.uncommons.watchmaker.examples.Launcher" />
   </target>
 
@@ -220,7 +220,7 @@
       <additionalconfig>
         <group title="Watchmaker Evolution Framework" packages="org.uncommons.watchmaker.framework:org.uncommons.watchmaker.framework.*"/>
         <group title="Watchmaker Swing Classes" packages="org.uncommons.swing:org.uncommons.swing.*:org.uncommons.watchmaker.swing:org.uncommons.watchmaker.swing.*"/>
-        <link href="https://uncommons-maths.dev.java.net/nonav/api/"/>
+        <link href="http://maths.uncommons.org/api/"/>
       </additionalconfig>
     </uncommons:javadoc>
   </target>
@@ -262,7 +262,7 @@
       <additionalconfig>
         <group title="Watchmaker Evolution Framework" packages="org.uncommons.watchmaker.framework:org.uncommons.watchmaker.framework.*"/>
         <group title="Watchmaker Swing Classes" packages="org.uncommons.swing:org.uncommons.swing.*:org.uncommons.watchmaker.swing:org.uncommons.watchmaker.swing.*"/>
-        <link href="https://uncommons-maths.dev.java.net/nonav/api/"/>
+        <link href="http://maths.uncommons.org/api/"/>
       </additionalconfig>
     </uncommons:javadoc>
 
diff --git a/debian/changelog b/debian/changelog
index 75bf1a4..e6f3d75 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+uncommons-watchmaker (0.7.1+git20171206.1.33d9423+ds-1) UNRELEASED; urgency=low
+
+  * New upstream snapshot.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Fri, 20 Jan 2023 11:53:14 -0000
+
 uncommons-watchmaker (0.7.1-3) unstable; urgency=medium
 
   * Team upload.
diff --git a/etc/intellij/examples.iml b/etc/intellij/examples.iml
deleted file mode 100644
index ebf7e67..0000000
--- a/etc/intellij/examples.iml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module relativePaths="true" type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager" inherit-compiler-output="false">
-    <output url="file://$MODULE_DIR$/../../examples/build/classes/main" />
-    <output-test url="file://$MODULE_DIR$/../../examples/build/classes/test" />
-    <exclude-output />
-    <content url="file://$MODULE_DIR$/../../examples">
-      <sourceFolder url="file://$MODULE_DIR$/../../examples/src/java/main" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/../../examples/src/java/resources" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/../../examples/src/java/test" isTestSource="true" />
-      <excludeFolder url="file://$MODULE_DIR$/../../examples/build" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module" module-name="framework" />
-    <orderEntry type="module" module-name="swing" />
-    <orderEntry type="library" name="testng-5.10-jdk15" level="project" />
-    <orderEntry type="library" name="fest-swing-1.1" level="project" />
-  </component>
-</module>
-
diff --git a/etc/intellij/framework.iml b/etc/intellij/framework.iml
deleted file mode 100644
index ac8cf22..0000000
--- a/etc/intellij/framework.iml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module relativePaths="true" type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager" inherit-compiler-output="false">
-    <output url="file://$MODULE_DIR$/../../framework/build/classes/main" />
-    <output-test url="file://$MODULE_DIR$/../../framework/build/classes/test" />
-    <exclude-output />
-    <content url="file://$MODULE_DIR$/../../framework">
-      <sourceFolder url="file://$MODULE_DIR$/../../framework/src/java/main" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/../../framework/src/java/test" isTestSource="true" />
-      <excludeFolder url="file://$MODULE_DIR$/../../framework/build" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="library" exported="" name="uncommons-maths-1.2.1" level="project" />
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../../framework/lib/runtime/google-collect-1.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="library" name="testng-5.10-jdk15" level="project" />
-  </component>
-</module>
-
diff --git a/etc/intellij/global.iml b/etc/intellij/global.iml
deleted file mode 100644
index 9e20af6..0000000
--- a/etc/intellij/global.iml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module relativePaths="true" type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager" inherit-compiler-output="true">
-    <exclude-output />
-    <content url="file://$MODULE_DIR$/../..">
-      <excludeFolder url="file://$MODULE_DIR$/../../dist" />
-      <excludeFolder url="file://$MODULE_DIR$/../../docs" />
-      <excludeFolder url="file://$MODULE_DIR$/../../examples" />
-      <excludeFolder url="file://$MODULE_DIR$/../../framework" />
-      <excludeFolder url="file://$MODULE_DIR$/../../swing" />
-      <excludeFolder url="file://$MODULE_DIR$/../../temp" />
-      <excludeFolder url="file://$MODULE_DIR$/../../website" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-  </component>
-</module>
-
diff --git a/etc/intellij/swing.iml b/etc/intellij/swing.iml
deleted file mode 100644
index 4178876..0000000
--- a/etc/intellij/swing.iml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module relativePaths="true" type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager" inherit-compiler-output="false">
-    <output url="file://$MODULE_DIR$/../../swing/build/classes/main" />
-    <output-test url="file://$MODULE_DIR$/../../swing/build/classes/test" />
-    <exclude-output />
-    <content url="file://$MODULE_DIR$/../../swing">
-      <sourceFolder url="file://$MODULE_DIR$/../../swing/src/java/main" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/../../swing/src/java/test" isTestSource="true" />
-      <excludeFolder url="file://$MODULE_DIR$/../../swing/build" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module" module-name="framework" />
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../../swing/lib/runtime/jfreechart-1.0.13.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../../swing/lib/runtime/jcommon-1.0.16.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="library" name="testng-5.10-jdk15" level="project" />
-    <orderEntry type="library" name="fest-swing-1.1" level="project" />
-  </component>
-</module>
-
diff --git a/etc/intellij/watchmaker.ipr b/etc/intellij/watchmaker.ipr
deleted file mode 100644
index 9a1af2e..0000000
--- a/etc/intellij/watchmaker.ipr
+++ /dev/null
@@ -1,1054 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project relativePaths="true" version="4">
-  <component name="AntConfiguration">
-    <defaultAnt bundledAnt="true" />
-    <buildFile url="file://$PROJECT_DIR$/../../build.xml">
-      <additionalClassPath />
-      <antReference projectDefault="true" />
-      <customJdkName value="" />
-      <maximumHeapSize value="128" />
-      <maximumStackSize value="32" />
-      <properties />
-      <executeOn event="beforeRun" target="dist" />
-      <executeOn event="beforeRun" target="dist" runConfigurationType="Applet" runConfigurationName="Mona Lisa Applet" />
-    </buildFile>
-  </component>
-  <component name="BuildJarProjectSettings">
-    <option name="BUILD_JARS_ON_MAKE" value="false" />
-  </component>
-  <component name="CodeStyleProjectProfileManger">
-    <option name="PROJECT_PROFILE" />
-    <option name="USE_PROJECT_LEVEL_SETTINGS" value="false" />
-  </component>
-  <component name="CodeStyleSettingsManager">
-    <option name="PER_PROJECT_SETTINGS">
-      <value>
-        <ADDITIONAL_INDENT_OPTIONS fileType="java">
-          <option name="INDENT_SIZE" value="4" />
-          <option name="CONTINUATION_INDENT_SIZE" value="8" />
-          <option name="TAB_SIZE" value="4" />
-          <option name="USE_TAB_CHARACTER" value="false" />
-          <option name="SMART_TABS" value="false" />
-          <option name="LABEL_INDENT_SIZE" value="0" />
-          <option name="LABEL_INDENT_ABSOLUTE" value="false" />
-        </ADDITIONAL_INDENT_OPTIONS>
-        <ADDITIONAL_INDENT_OPTIONS fileType="js">
-          <option name="INDENT_SIZE" value="4" />
-          <option name="CONTINUATION_INDENT_SIZE" value="8" />
-          <option name="TAB_SIZE" value="4" />
-          <option name="USE_TAB_CHARACTER" value="false" />
-          <option name="SMART_TABS" value="false" />
-          <option name="LABEL_INDENT_SIZE" value="0" />
-          <option name="LABEL_INDENT_ABSOLUTE" value="false" />
-        </ADDITIONAL_INDENT_OPTIONS>
-        <ADDITIONAL_INDENT_OPTIONS fileType="jsp">
-          <option name="INDENT_SIZE" value="4" />
-          <option name="CONTINUATION_INDENT_SIZE" value="8" />
-          <option name="TAB_SIZE" value="4" />
-          <option name="USE_TAB_CHARACTER" value="false" />
-          <option name="SMART_TABS" value="false" />
-          <option name="LABEL_INDENT_SIZE" value="0" />
-          <option name="LABEL_INDENT_ABSOLUTE" value="false" />
-        </ADDITIONAL_INDENT_OPTIONS>
-        <ADDITIONAL_INDENT_OPTIONS fileType="sql">
-          <option name="INDENT_SIZE" value="2" />
-          <option name="CONTINUATION_INDENT_SIZE" value="8" />
-          <option name="TAB_SIZE" value="4" />
-          <option name="USE_TAB_CHARACTER" value="false" />
-          <option name="SMART_TABS" value="false" />
-          <option name="LABEL_INDENT_SIZE" value="0" />
-          <option name="LABEL_INDENT_ABSOLUTE" value="false" />
-        </ADDITIONAL_INDENT_OPTIONS>
-        <ADDITIONAL_INDENT_OPTIONS fileType="xml">
-          <option name="INDENT_SIZE" value="4" />
-          <option name="CONTINUATION_INDENT_SIZE" value="8" />
-          <option name="TAB_SIZE" value="4" />
-          <option name="USE_TAB_CHARACTER" value="false" />
-          <option name="SMART_TABS" value="false" />
-          <option name="LABEL_INDENT_SIZE" value="0" />
-          <option name="LABEL_INDENT_ABSOLUTE" value="false" />
-        </ADDITIONAL_INDENT_OPTIONS>
-      </value>
-    </option>
-    <option name="USE_PER_PROJECT_SETTINGS" value="false" />
-  </component>
-  <component name="CompilerConfiguration">
-    <option name="DEFAULT_COMPILER" value="Javac" />
-    <option name="DEPLOY_AFTER_MAKE" value="0" />
-    <resourceExtensions>
-      <entry name=".+\.(properties|xml|html|dtd|tld)" />
-      <entry name=".+\.(gif|png|jpeg|jpg)" />
-    </resourceExtensions>
-    <wildcardResourcePatterns>
-      <entry name="?*.properties" />
-      <entry name="?*.xml" />
-      <entry name="?*.gif" />
-      <entry name="?*.png" />
-      <entry name="?*.jpeg" />
-      <entry name="?*.jpg" />
-      <entry name="?*.html" />
-      <entry name="?*.dtd" />
-      <entry name="?*.tld" />
-    </wildcardResourcePatterns>
-  </component>
-  <component name="CopyrightManager" default="Apache Licence">
-    <copyright>
-      <option name="notice" value="Copyright 2006-2010 Daniel W. Dyer&#10;&#10;Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);&#10;you may not use this file except in compliance with the License.&#10;You may obtain a copy of the License at&#10;&#10;    http://www.apache.org/licenses/LICENSE-2.0&#10;&#10;Unless required by applicable law or agreed to in writing, software&#10;distributed under the License is distributed on an &quot;AS IS&quot; BASIS,&#10;WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&#10;See the License for the specific language governing permissions and&#10;limitations under the License." />
-      <option name="keyword" value="Copyright" />
-      <option name="myName" value="Apache Licence" />
-      <option name="myLocal" value="true" />
-    </copyright>
-    <module2copyright />
-    <LanguageOptions name="JAVA">
-      <option name="fileTypeOverride" value="3" />
-      <option name="relativeBefore" value="true" />
-      <option name="addBlankAfter" value="false" />
-      <option name="fileLocation" value="1" />
-      <option name="block" value="false" />
-      <option name="separateBefore" value="true" />
-      <option name="separateAfter" value="true" />
-      <option name="prefixLines" value="false" />
-      <option name="lenBefore" value="79" />
-      <option name="lenAfter" value="79" />
-      <option name="box" value="false" />
-      <option name="filler" value="=" />
-    </LanguageOptions>
-    <LanguageOptions name="XML">
-      <option name="fileTypeOverride" value="3" />
-      <option name="relativeBefore" value="true" />
-      <option name="addBlankAfter" value="true" />
-      <option name="fileLocation" value="1" />
-      <option name="block" value="true" />
-      <option name="separateBefore" value="true" />
-      <option name="separateAfter" value="true" />
-      <option name="prefixLines" value="false" />
-      <option name="lenBefore" value="79" />
-      <option name="lenAfter" value="79" />
-      <option name="box" value="false" />
-      <option name="filler" value="=" />
-    </LanguageOptions>
-  </component>
-  <component name="CppTools.Loader" reportImplicitCastToBool="false" warnedAboutFileOutOfSourceRoot="true" version="2" currentProject="$PROJECT_DIR$/../docbook/Makefile" compilerSelect="AUTO" />
-  <component name="DependenciesAnalyzeManager">
-    <option name="myForwardDirection" value="false" />
-  </component>
-  <component name="DependencyValidationManager">
-    <scope name="Inspections" pattern="!file[global]:*//*&amp;&amp;!file[swing]:src/java/test//*&amp;&amp;!file[framework]:src/java/test//*&amp;&amp;!file[examples]:src/java/test//*" />
-    <option name="SKIP_IMPORT_STATEMENTS" value="false" />
-  </component>
-  <component name="EclipseCompilerSettings">
-    <option name="DEBUGGING_INFO" value="true" />
-    <option name="GENERATE_NO_WARNINGS" value="true" />
-    <option name="DEPRECATION" value="false" />
-    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
-    <option name="MAXIMUM_HEAP_SIZE" value="128" />
-  </component>
-  <component name="EclipseEmbeddedCompilerSettings">
-    <option name="DEBUGGING_INFO" value="true" />
-    <option name="GENERATE_NO_WARNINGS" value="true" />
-    <option name="DEPRECATION" value="false" />
-    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
-    <option name="MAXIMUM_HEAP_SIZE" value="128" />
-  </component>
-  <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
-  <component name="EntryPointsManager">
-    <entry_points version="2.0" />
-  </component>
-  <component name="ExportToHTMLSettings">
-    <option name="PRINT_LINE_NUMBERS" value="false" />
-    <option name="OPEN_IN_BROWSER" value="false" />
-    <option name="OUTPUT_DIRECTORY" />
-  </component>
-  <component name="IdProvider" IDEtalkID="0D0AA9419EF81876CD8BD46BC2DFC45D" />
-  <component name="InspectionProjectProfileManager">
-    <option name="PROJECT_PROFILE" value="Project Default" />
-    <option name="USE_PROJECT_LEVEL_SETTINGS" value="false" />
-    <scopes />
-    <profiles>
-      <profile version="1.0" is_locked="false">
-        <option name="myName" value="Project Default" />
-        <option name="myLocal" value="false" />
-        <inspection_tool class="InstanceofChain" level="WARNING" enabled="true" />
-        <inspection_tool class="ClassReferencesSubclass" level="WARNING" enabled="true" />
-        <inspection_tool class="DeclareCollectionAsInterface" level="WARNING" enabled="true">
-          <option name="ignoreLocalVariables" value="false" />
-          <option name="ignorePrivateMethodsAndFields" value="false" />
-        </inspection_tool>
-        <inspection_tool class="InstanceofThis" level="WARNING" enabled="true" />
-        <inspection_tool class="OverlyStrongTypeCast" level="WARNING" enabled="true">
-          <option name="ignoreInMatchingInstanceof" value="false" />
-        </inspection_tool>
-        <inspection_tool class="MethodOnlyUsedFromInnerClass" level="WARNING" enabled="true">
-          <option name="ignoreMethodsAccessedFromAnonymousClass" value="true" />
-        </inspection_tool>
-        <inspection_tool class="ReplaceAssignmentWithOperatorAssignment" level="WARNING" enabled="true">
-          <option name="ignoreLazyOperators" value="true" />
-          <option name="ignoreObscureOperators" value="false" />
-        </inspection_tool>
-        <inspection_tool class="AssignmentToForLoopParameter" level="WARNING" enabled="true">
-          <option name="m_checkForeachParameters" value="false" />
-        </inspection_tool>
-        <inspection_tool class="AssignmentToCatchBlockParameter" level="WARNING" enabled="true" />
-        <inspection_tool class="AssignmentToMethodParameter" level="WARNING" enabled="true">
-          <option name="ignoreTransformationOfOriginalParameter" value="false" />
-        </inspection_tool>
-        <inspection_tool class="AssignmentToStaticFieldFromInstanceMethod" level="WARNING" enabled="true" />
-        <inspection_tool class="AssignmentUsedAsCondition" level="WARNING" enabled="true" />
-        <inspection_tool class="NestedAssignment" level="WARNING" enabled="true" />
-        <inspection_tool class="ClassNameDiffersFromFileName" level="WARNING" enabled="true" />
-        <inspection_tool class="ClassInTopLevelPackage" level="WARNING" enabled="true" />
-        <inspection_tool class="EmptyClass" level="WARNING" enabled="true" />
-        <inspection_tool class="MarkerInterface" level="WARNING" enabled="true" />
-        <inspection_tool class="MultipleTopLevelClassesInFile" level="WARNING" enabled="true" />
-        <inspection_tool class="MissingOverrideAnnotation" level="WARNING" enabled="true" />
-        <inspection_tool class="MissingDeprecatedAnnotation" level="WARNING" enabled="true" />
-        <inspection_tool class="ProtectedMemberInFinalClass" level="WARNING" enabled="true" />
-        <inspection_tool class="PublicConstructorInNonPublicClass" level="WARNING" enabled="true" />
-        <inspection_tool class="StaticNonFinalField" level="WARNING" enabled="true" />
-        <inspection_tool class="CloneCallsConstructors" level="WARNING" enabled="true" />
-        <inspection_tool class="CloneInNonCloneableClass" level="WARNING" enabled="true" />
-        <inspection_tool class="CloneableImplementsClone" level="WARNING" enabled="true">
-          <option name="m_ignoreCloneableDueToInheritance" value="false" />
-        </inspection_tool>
-        <inspection_tool class="ObsoleteCollection" level="WARNING" enabled="true">
-          <option name="ignoreLibraryArguments" value="true" />
-        </inspection_tool>
-        <inspection_tool class="CallToStringConcatCanBeReplacedByOperator" level="WARNING" enabled="true" />
-        <inspection_tool class="CStyleArrayDeclaration" level="WARNING" enabled="true" />
-        <inspection_tool class="ChainedEquality" level="WARNING" enabled="true" />
-        <inspection_tool class="ConfusingOctalEscape" level="WARNING" enabled="true" />
-        <inspection_tool class="UnnecessaryConstantArrayCreationExpression" level="WARNING" enabled="true" />
-        <inspection_tool class="ControlFlowStatementWithoutBraces" level="WARNING" enabled="true" />
-        <inspection_tool class="ListIndexOfReplaceableByContains" level="WARNING" enabled="true" />
-        <inspection_tool class="MissortedModifiers" level="WARNING" enabled="true">
-          <option name="m_requireAnnotationsFirst" value="true" />
-        </inspection_tool>
-        <inspection_tool class="MultipleDeclaration" level="WARNING" enabled="true" />
-        <inspection_tool class="UnnecessaryCallToStringValueOf" level="WARNING" enabled="true" />
-        <inspection_tool class="UnnecessarilyQualifiedStaticUsage" level="WARNING" enabled="true">
-          <option name="m_ignoreStaticFieldAccesses" value="false" />
-          <option name="m_ignoreStaticMethodCalls" value="false" />
-          <option name="m_ignoreStaticAccessFromStaticContext" value="false" />
-        </inspection_tool>
-        <inspection_tool class="UnnecessarySuperQualifier" level="WARNING" enabled="true" />
-        <inspection_tool class="UnnecessaryInterfaceModifier" level="WARNING" enabled="true" />
-        <inspection_tool class="UnnecessaryFullyQualifiedName" level="WARNING" enabled="true">
-          <option name="m_ignoreJavadoc" value="true" />
-        </inspection_tool>
-        <inspection_tool class="UnnecessarySuperConstructor" level="WARNING" enabled="true" />
-        <inspection_tool class="ClassMayBeInterface" level="WARNING" enabled="true" />
-        <inspection_tool class="ConstantDeclaredInInterface" level="WARNING" enabled="true" />
-        <inspection_tool class="Singleton" level="WARNING" enabled="true" />
-        <inspection_tool class="UtilityClassWithPublicConstructor" level="WARNING" enabled="true" />
-        <inspection_tool class="UtilityClassWithoutPrivateConstructor" level="WARNING" enabled="true">
-          <option name="ignoreClassesWithOnlyMain" value="false" />
-        </inspection_tool>
-        <inspection_tool class="ThreadDumpStack" level="WARNING" enabled="true" />
-        <inspection_tool class="FieldMayBeFinal" level="WARNING" enabled="true" />
-        <inspection_tool class="RedundantImplements" level="WARNING" enabled="true" />
-        <inspection_tool class="UnnecessaryConstructor" level="WARNING" enabled="true" />
-        <inspection_tool class="ReturnThis" level="WARNING" enabled="true" />
-        <inspection_tool class="UnnecessaryBlockStatement" level="WARNING" enabled="true" />
-        <inspection_tool class="UnnecessaryEnumModifier" level="WARNING" enabled="true" />
-        <inspection_tool class="MultipleTypedDeclaration" level="WARNING" enabled="true" />
-        <inspection_tool class="BreakStatementWithLabel" level="WARNING" enabled="true" />
-        <inspection_tool class="ConditionalExpressionWithIdenticalBranches" level="WARNING" enabled="true" />
-        <inspection_tool class="NegatedConditional" level="WARNING" enabled="true">
-          <option name="m_ignoreNegatedNullComparison" value="true" />
-        </inspection_tool>
-        <inspection_tool class="ContinueStatement" level="WARNING" enabled="true" />
-        <inspection_tool class="ContinueStatementWithLabel" level="WARNING" enabled="true" />
-        <inspection_tool class="DefaultNotLastCaseInSwitch" level="WARNING" enabled="true" />
-        <inspection_tool class="DoubleNegation" level="WARNING" enabled="true" />
-        <inspection_tool class="DuplicateCondition" level="WARNING" enabled="true">
-          <option name="ignoreMethodCalls" value="false" />
-        </inspection_tool>
-        <inspection_tool class="DuplicateBooleanBranch" level="WARNING" enabled="true" />
-        <inspection_tool class="EnumSwitchStatementWhichMissesCases" level="WARNING" enabled="true">
-          <option name="ignoreSwitchStatementsWithDefault" value="true" />
-        </inspection_tool>
-        <inspection_tool class="ForLoopReplaceableByWhile" level="WARNING" enabled="true">
-          <option name="m_ignoreLoopsWithoutConditions" value="false" />
-        </inspection_tool>
-        <inspection_tool class="ForLoopWithMissingComponent" level="WARNING" enabled="true">
-          <option name="ignoreCollectionLoops" value="false" />
-        </inspection_tool>
-        <inspection_tool class="IfStatementWithIdenticalBranches" level="WARNING" enabled="true" />
-        <inspection_tool class="NegatedIfElse" level="WARNING" enabled="true">
-          <option name="m_ignoreNegatedNullComparison" value="true" />
-        </inspection_tool>
-        <inspection_tool class="IfStatementWithTooManyBranches" level="WARNING" enabled="true">
-          <option name="m_limit" value="3" />
-        </inspection_tool>
-        <inspection_tool class="LabeledStatement" level="WARNING" enabled="true" />
-        <inspection_tool class="SwitchStatementWithConfusingDeclaration" level="WARNING" enabled="true" />
-        <inspection_tool class="LoopConditionNotUpdatedInsideLoop" level="WARNING" enabled="true">
-          <option name="ignoreIterators" value="false" />
-        </inspection_tool>
-        <inspection_tool class="LoopWithImplicitTerminationCondition" level="WARNING" enabled="true" />
-        <inspection_tool class="NestedSwitchStatement" level="WARNING" enabled="true" />
-        <inspection_tool class="PointlessIndexOfComparison" level="WARNING" enabled="true" />
-        <inspection_tool class="SwitchStatementsWithoutDefault" level="WARNING" enabled="true">
-          <option name="m_ignoreFullyCoveredEnums" value="true" />
-        </inspection_tool>
-        <inspection_tool class="TooBroadScope" level="WARNING" enabled="true">
-          <option name="m_allowConstructorAsInitializer" value="false" />
-          <option name="m_onlyLookAtBlocks" value="false" />
-        </inspection_tool>
-        <inspection_tool class="ConstantValueVariableUse" level="WARNING" enabled="true" />
-        <inspection_tool class="ReuseOfLocalVariable" level="WARNING" enabled="true" />
-        <inspection_tool class="ReuseOfLocalVariableJS" level="WARNING" enabled="true" />
-        <inspection_tool class="RedundantSuppression" level="WARNING" enabled="true" />
-        <inspection_tool class="RedundantThrowsDeclaration" level="WARNING" enabled="true" />
-        <inspection_tool class="UnusedLibrary" level="WARNING" enabled="true" />
-        <inspection_tool class="PackageVisibleField" level="WARNING" enabled="true" />
-        <inspection_tool class="PublicField" level="WARNING" enabled="true">
-          <option name="ignoreEnums" value="false" />
-        </inspection_tool>
-        <inspection_tool class="ReturnOfCollectionField" level="WARNING" enabled="true">
-          <option name="ignorePrivateMethods" value="true" />
-        </inspection_tool>
-        <inspection_tool class="ReturnOfDateField" level="WARNING" enabled="true" />
-        <inspection_tool class="CatchGenericClass" level="WARNING" enabled="true" />
-        <inspection_tool class="ErrorRethrown" level="WARNING" enabled="true" />
-        <inspection_tool class="ThreadDeathRethrown" level="WARNING" enabled="true" />
-        <inspection_tool class="NonFinalFieldOfException" level="WARNING" enabled="true" />
-        <inspection_tool class="TooBroadCatch" level="WARNING" enabled="true">
-          <option name="onlyWarnOnRootExceptions" value="false" />
-        </inspection_tool>
-        <inspection_tool class="BadExceptionCaught" level="WARNING" enabled="true">
-          <option name="exceptionsString" value="java.lang.NullPointerException,java.lang.IllegalMonitorStateException,java.lang.ArrayIndexOutOfBoundsException" />
-        </inspection_tool>
-        <inspection_tool class="ThrowCaughtLocally" level="WARNING" enabled="true">
-          <option name="ignoreRethrownExceptions" value="false" />
-        </inspection_tool>
-        <inspection_tool class="ExceptionFromCatchWhichDoesntWrap" level="WARNING" enabled="true">
-          <option name="ignoreGetMessage" value="true" />
-        </inspection_tool>
-        <inspection_tool class="EmptyCatchBlockJS" level="WARNING" enabled="true" />
-        <inspection_tool class="EmptyTryBlockJS" level="WARNING" enabled="true" />
-        <inspection_tool class="EmptyFinallyBlockJS" level="WARNING" enabled="true" />
-        <inspection_tool class="FinalizeNotProtected" level="WARNING" enabled="true" />
-        <inspection_tool class="EqualsAndHashcode" level="WARNING" enabled="true" />
-        <inspection_tool class="NonJREEmulationClassesInClientCode" level="ERROR" enabled="false" />
-        <inspection_tool class="GwtDeprecatedPropertyKeyJavadocTag" level="WARNING" enabled="false" />
-        <inspection_tool class="GwtObsoleteTypeArgsJavadocTag" level="WARNING" enabled="false" />
-        <inspection_tool class="GwtServiceNotRegistered" level="ERROR" enabled="false" />
-        <inspection_tool class="GwtInconsistentI18nInterface" level="ERROR" enabled="false" />
-        <inspection_tool class="GWTRemoteServiceAsyncCheck" level="ERROR" enabled="false" />
-        <inspection_tool class="GwtInconsistentSerializableClass" level="ERROR" enabled="false" />
-        <inspection_tool class="GwtMethodWithParametersInConstantsInterface" level="ERROR" enabled="false" />
-        <inspection_tool class="NonSerializableServiceParameters" level="ERROR" enabled="false" />
-        <inspection_tool class="gwtRawAsyncCallback" level="WARNING" enabled="false" />
-        <inspection_tool class="GwtJavaScriptReferences" level="ERROR" enabled="false" />
-        <inspection_tool class="GWTStyleCheck" level="ERROR" enabled="false" />
-        <inspection_tool class="GwtToHtmlReferences" level="ERROR" enabled="false" />
-        <inspection_tool class="HibernateMappingDatasourceDomInspection" level="ERROR" enabled="false" />
-        <inspection_tool class="HibernateConfigDomInspection" level="ERROR" enabled="false" />
-        <inspection_tool class="HibernateMappingDomInspection" level="ERROR" enabled="false" />
-        <inspection_tool class="OnDemandImport" level="WARNING" enabled="true" />
-        <inspection_tool class="SamePackageImport" level="WARNING" enabled="true" />
-        <inspection_tool class="JavaLangImport" level="WARNING" enabled="true" />
-        <inspection_tool class="RedundantImport" level="WARNING" enabled="true" />
-        <inspection_tool class="AbstractMethodOverridesConcreteMethod" level="WARNING" enabled="true" />
-        <inspection_tool class="AbstractMethodOverridesAbstractMethod" level="WARNING" enabled="true" />
-        <inspection_tool class="RedundantMethodOverride" level="WARNING" enabled="true" />
-        <inspection_tool class="NonProtectedConstructorInAbstractClass" level="WARNING" enabled="true">
-          <option name="m_ignoreNonPublicClasses" value="false" />
-        </inspection_tool>
-        <inspection_tool class="StaticInheritance" level="WARNING" enabled="true" />
-        <inspection_tool class="AbstractMethodCallInConstructor" level="WARNING" enabled="true" />
-        <inspection_tool class="InstanceVariableUninitializedUse" level="WARNING" enabled="true">
-          <option name="m_ignorePrimitives" value="false" />
-        </inspection_tool>
-        <inspection_tool class="NonFinalStaticVariableUsedInClassInitialization" level="WARNING" enabled="true" />
-        <inspection_tool class="OverridableMethodCallDuringObjectConstruction" level="WARNING" enabled="true" />
-        <inspection_tool class="OverriddenMethodCallDuringObjectConstruction" level="WARNING" enabled="true" />
-        <inspection_tool class="StaticVariableInitialization" level="WARNING" enabled="true">
-          <option name="m_ignorePrimitives" value="false" />
-        </inspection_tool>
-        <inspection_tool class="StaticVariableUninitializedUse" level="WARNING" enabled="true">
-          <option name="m_ignorePrimitives" value="false" />
-        </inspection_tool>
-        <inspection_tool class="ThisEscapedInConstructor" level="WARNING" enabled="true" />
-        <inspection_tool class="NonThreadSafeLazyInitialization" level="WARNING" enabled="true" />
-        <inspection_tool class="DateToString" level="WARNING" enabled="true" />
-        <inspection_tool class="TimeToString" level="WARNING" enabled="true" />
-        <inspection_tool class="SimplifiableIfStatement" level="WARNING" enabled="false" />
-        <inspection_tool class="CollectionsFieldAccessReplaceableByMethodCall" level="WARNING" enabled="true" />
-        <inspection_tool class="IndexOfReplaceableByContains" level="WARNING" enabled="true" />
-        <inspection_tool class="RawUseOfParameterizedType" level="WARNING" enabled="true">
-          <option name="ignoreObjectConstruction" value="true" />
-          <option name="ignoreTypeCasts" value="false" />
-        </inspection_tool>
-        <inspection_tool class="EnumerationCanBeIteration" level="WARNING" enabled="true" />
-        <inspection_tool class="ELValidationInJSP" level="WARNING" enabled="false" />
-        <inspection_tool class="JspDirectiveInspection" level="ERROR" enabled="false" />
-        <inspection_tool class="ELSpecValidationInJSP" level="WARNING" enabled="false" />
-        <inspection_tool class="JspPropertiesInspection" level="ERROR" enabled="false" />
-        <inspection_tool class="ReferencesToClassesFromDefaultPackagesInJSPFile" level="ERROR" enabled="false" />
-        <inspection_tool class="SelfIncludingJspFiles" level="ERROR" enabled="false" />
-        <inspection_tool class="ClassWithMultipleLoggers" level="WARNING" enabled="true">
-          <option name="loggerClassName" value="java.util.logging.Logger" />
-        </inspection_tool>
-        <inspection_tool class="NonStaticFinalLogger" level="WARNING" enabled="true">
-          <option name="loggerClassName" value="java.util.logging.Logger" />
-        </inspection_tool>
-        <inspection_tool class="ZeroLengthArrayInitialization" level="WARNING" enabled="true" />
-        <inspection_tool class="AnnotationNamingConvention" level="WARNING" enabled="true">
-          <option name="m_regex" value="[A-Z][A-Za-z\d]*" />
-          <option name="m_minLength" value="8" />
-          <option name="m_maxLength" value="64" />
-        </inspection_tool>
-        <inspection_tool class="BooleanMethodNameMustStartWithQuestion" level="WARNING" enabled="true">
-          <option name="questionString" value="is,can,has,should,could,will,shall,check,contains,equals,add,put,remove,startsWith,endsWith" />
-        </inspection_tool>
-        <inspection_tool class="ClassNameSameAsAncestorName" level="WARNING" enabled="true" />
-        <inspection_tool class="ClassNamingConvention" level="WARNING" enabled="true">
-          <option name="m_regex" value="[A-Z][A-Za-z\d]*" />
-          <option name="m_minLength" value="3" />
-          <option name="m_maxLength" value="64" />
-        </inspection_tool>
-        <inspection_tool class="ConfusingMainMethod" level="WARNING" enabled="true" />
-        <inspection_tool class="ConstantNamingConvention" level="WARNING" enabled="true">
-          <option name="m_regex" value="[A-Z_\d]*" />
-          <option name="m_minLength" value="3" />
-          <option name="m_maxLength" value="32" />
-        </inspection_tool>
-        <inspection_tool class="EnumeratedClassNamingConvention" level="WARNING" enabled="true">
-          <option name="m_regex" value="[A-Z][A-Za-z\d]*" />
-          <option name="m_minLength" value="3" />
-          <option name="m_maxLength" value="64" />
-        </inspection_tool>
-        <inspection_tool class="EnumeratedConstantNamingConvention" level="WARNING" enabled="true">
-          <option name="m_regex" value="[A-Z][A-Z\d]*" />
-          <option name="m_minLength" value="3" />
-          <option name="m_maxLength" value="32" />
-        </inspection_tool>
-        <inspection_tool class="ExceptionNameDoesntEndWithException" level="WARNING" enabled="true" />
-        <inspection_tool class="InstanceMethodNamingConvention" level="WARNING" enabled="true">
-          <option name="m_regex" value="[a-z][A-Za-z\d]*" />
-          <option name="m_minLength" value="3" />
-          <option name="m_maxLength" value="64" />
-        </inspection_tool>
-        <inspection_tool class="InstanceVariableNamingConvention" level="WARNING" enabled="true">
-          <option name="m_regex" value="[a-z][A-Za-z\d]*" />
-          <option name="m_minLength" value="2" />
-          <option name="m_maxLength" value="32" />
-        </inspection_tool>
-        <inspection_tool class="InterfaceNamingConvention" level="WARNING" enabled="true">
-          <option name="m_regex" value="[A-Z][A-Za-z\d]*" />
-          <option name="m_minLength" value="3" />
-          <option name="m_maxLength" value="64" />
-        </inspection_tool>
-        <inspection_tool class="LocalVariableNamingConvention" level="WARNING" enabled="true">
-          <option name="m_ignoreForLoopParameters" value="false" />
-          <option name="m_ignoreCatchParameters" value="false" />
-          <option name="m_regex" value="[a-z][A-Za-z\d]*" />
-          <option name="m_minLength" value="1" />
-          <option name="m_maxLength" value="64" />
-        </inspection_tool>
-        <inspection_tool class="MethodNameSameAsParentName" level="WARNING" enabled="true" />
-        <inspection_tool class="MethodNamesDifferOnlyByCase" level="WARNING" enabled="true" />
-        <inspection_tool class="ParameterNamingConvention" level="WARNING" enabled="true">
-          <option name="m_regex" value="[a-z][A-Za-z\d]*" />
-          <option name="m_minLength" value="1" />
-          <option name="m_maxLength" value="64" />
-        </inspection_tool>
-        <inspection_tool class="NonBooleanMethodNameMayNotStartWithQuestion" level="WARNING" enabled="true">
-          <option name="questionString" value="is,can,has,should,could,will,shall,contains,equals,startsWith,endsWith" />
-        </inspection_tool>
-        <inspection_tool class="UpperCaseFieldNameNotConstant" level="WARNING" enabled="true" />
-        <inspection_tool class="NonExceptionNameEndsWithException" level="WARNING" enabled="true" />
-        <inspection_tool class="ParameterNameDiffersFromOverriddenParameter" level="WARNING" enabled="false">
-          <option name="m_ignoreSingleCharacterNames" value="false" />
-          <option name="m_ignoreOverridesOfLibraryMethods" value="true" />
-        </inspection_tool>
-        <inspection_tool class="StaticMethodNamingConvention" level="WARNING" enabled="true">
-          <option name="m_regex" value="[a-z][A-Za-z\d]*" />
-          <option name="m_minLength" value="3" />
-          <option name="m_maxLength" value="32" />
-        </inspection_tool>
-        <inspection_tool class="StaticVariableNamingConvention" level="WARNING" enabled="true">
-          <option name="m_regex" value="[a-z][A-Za-z\d]*" />
-          <option name="m_minLength" value="3" />
-          <option name="m_maxLength" value="32" />
-        </inspection_tool>
-        <inspection_tool class="TypeParameterNamingConvention" level="WARNING" enabled="true">
-          <option name="m_regex" value="[A-Z\d]" />
-          <option name="m_minLength" value="1" />
-          <option name="m_maxLength" value="1" />
-        </inspection_tool>
-        <inspection_tool class="DollarSignInName" level="WARNING" enabled="true" />
-        <inspection_tool class="FunctionNamingConventionJS" level="WARNING" enabled="false">
-          <option name="m_regex" value="[a-z][A-Za-z]*" />
-          <option name="m_minLength" value="3" />
-          <option name="m_maxLength" value="32" />
-        </inspection_tool>
-        <inspection_tool class="ComparisonOfShortAndChar" level="WARNING" enabled="true" />
-        <inspection_tool class="ComparisonToNaN" level="WARNING" enabled="true" />
-        <inspection_tool class="ConfusingFloatingPointLiteral" level="WARNING" enabled="true" />
-        <inspection_tool class="ConstantMathCall" level="WARNING" enabled="true" />
-        <inspection_tool class="DivideByZero" level="WARNING" enabled="true" />
-        <inspection_tool class="BigDecimalEquals" level="WARNING" enabled="true" />
-        <inspection_tool class="ImplicitNumericConversion" level="WARNING" enabled="false">
-          <option name="ignoreWideningConversions" value="true" />
-          <option name="ignoreCharConversions" value="false" />
-        </inspection_tool>
-        <inspection_tool class="IntegerDivisionInFloatingPointContext" level="WARNING" enabled="true" />
-        <inspection_tool class="LongLiteralsEndingWithLowercaseL" level="WARNING" enabled="true" />
-        <inspection_tool class="CachedNumberConstructorCall" level="WARNING" enabled="true" />
-        <inspection_tool class="BadOddness" level="WARNING" enabled="true" />
-        <inspection_tool class="UnaryPlus" level="WARNING" enabled="true" />
-        <inspection_tool class="UnnecessaryUnaryMinus" level="WARNING" enabled="true" />
-        <inspection_tool class="UnpredictableBigDecimalConstructorCall" level="WARNING" enabled="true" />
-        <inspection_tool class="PackageInMultipleModules" level="WARNING" enabled="true" />
-        <inspection_tool class="TrivialStringConcatenation" level="WARNING" enabled="true" />
-        <inspection_tool class="StringBufferReplaceableByString" level="WARNING" enabled="true" />
-        <inspection_tool class="EqualsHashCodeCalledOnUrl" level="WARNING" enabled="true" />
-        <inspection_tool class="FieldMayBeStatic" level="WARNING" enabled="true" />
-        <inspection_tool class="InnerClassMayBeStatic" level="WARNING" enabled="true" />
-        <inspection_tool class="KeySetIterationMayUseEntrySet" level="WARNING" enabled="true" />
-        <inspection_tool class="CollectionContainsUrl" level="WARNING" enabled="true" />
-        <inspection_tool class="MapReplaceableByEnumMap" level="WARNING" enabled="true" />
-        <inspection_tool class="StringReplaceableByStringBuffer" level="WARNING" enabled="true">
-          <option name="onlyWarnOnLoop" value="true" />
-        </inspection_tool>
-        <inspection_tool class="SubstringZero" level="WARNING" enabled="true" />
-        <inspection_tool class="SetReplaceableByEnumSet" level="WARNING" enabled="true" />
-        <inspection_tool class="LengthOneStringsInConcatenation" level="WARNING" enabled="true" />
-        <inspection_tool class="LengthOneStringInIndexOf" level="WARNING" enabled="true" />
-        <inspection_tool class="SizeReplaceableByIsEmpty" level="WARNING" enabled="true">
-          <option name="ignoreNegations" value="false" />
-        </inspection_tool>
-        <inspection_tool class="StringConcatenationInLoops" level="WARNING" enabled="true">
-          <option name="m_ignoreUnlessAssigned" value="false" />
-        </inspection_tool>
-        <inspection_tool class="StringEqualsEmptyString" level="WARNING" enabled="true" />
-        <inspection_tool class="StringBufferReplaceableByStringBuilder" level="WARNING" enabled="true" />
-        <inspection_tool class="StringBufferToStringInConcatenation" level="WARNING" enabled="true" />
-        <inspection_tool class="TailRecursion" level="WARNING" enabled="true" />
-        <inspection_tool class="RandomDoubleForRandomInteger" level="WARNING" enabled="true" />
-        <inspection_tool class="HardcodedLineSeparators" level="WARNING" enabled="true" />
-        <inspection_tool class="UseOfSunClasses" level="WARNING" enabled="true" />
-        <inspection_tool class="OctalIntegerJS" level="WARNING" enabled="true" />
-        <inspection_tool class="BlockStatementJS" level="WARNING" enabled="true" />
-        <inspection_tool class="CallerJS" level="WARNING" enabled="true" />
-        <inspection_tool class="VoidExpressionJS" level="WARNING" enabled="true" />
-        <inspection_tool class="WithStatementJS" level="WARNING" enabled="true" />
-        <inspection_tool class="ObjectToString" level="WARNING" enabled="true" />
-        <inspection_tool class="CastConflictsWithInstanceof" level="WARNING" enabled="true" />
-        <inspection_tool class="CastToIncompatibleInterface" level="WARNING" enabled="true" />
-        <inspection_tool class="CollectionAddedToSelf" level="WARNING" enabled="true" />
-        <inspection_tool class="ComparableImplementedButEqualsNotOverridden" level="WARNING" enabled="true" />
-        <inspection_tool class="CovariantCompareTo" level="WARNING" enabled="true" />
-        <inspection_tool class="CovariantEquals" level="WARNING" enabled="true" />
-        <inspection_tool class="EmptyInitializer" level="WARNING" enabled="true" />
-        <inspection_tool class="ForLoopThatDoesntUseLoopVariable" level="WARNING" enabled="true" />
-        <inspection_tool class="InstanceofIncompatibleInterface" level="WARNING" enabled="true" />
-        <inspection_tool class="CompareToUsesNonFinalVariable" level="WARNING" enabled="true" />
-        <inspection_tool class="HashCodeUsesNonFinalVariable" level="WARNING" enabled="true" />
-        <inspection_tool class="EqualsUsesNonFinalVariable" level="WARNING" enabled="true" />
-        <inspection_tool class="NonShortCircuitBoolean" level="WARNING" enabled="true" />
-        <inspection_tool class="SubtractionInCompareTo" level="WARNING" enabled="true" />
-        <inspection_tool class="StaticCallOnSubclass" level="WARNING" enabled="true" />
-        <inspection_tool class="SuspiciousIndentAfterControlStatement" level="WARNING" enabled="true" />
-        <inspection_tool class="TextLabelInSwitchStatement" level="WARNING" enabled="true" />
-        <inspection_tool class="ArchaicSystemPropertyAccess" level="WARNING" enabled="true" />
-        <inspection_tool class="UseOfPropertiesAsHashtable" level="WARNING" enabled="true" />
-        <inspection_tool class="SocketResource" level="WARNING" enabled="true" />
-        <inspection_tool class="IOResource" level="WARNING" enabled="true" />
-        <inspection_tool class="LoadLibraryWithNonConstantString" level="WARNING" enabled="true" />
-        <inspection_tool class="PublicStaticCollectionField" level="WARNING" enabled="true" />
-        <inspection_tool class="PublicStaticArrayField" level="WARNING" enabled="true" />
-        <inspection_tool class="ComparatorNotSerializable" level="WARNING" enabled="true" />
-        <inspection_tool class="SerializableWithUnconstructableAncestor" level="WARNING" enabled="true" />
-        <inspection_tool class="SerializableInnerClassWithNonSerializableOuterClass" level="WARNING" enabled="true">
-          <option name="superClassString" value="java.awt.Component" />
-        </inspection_tool>
-        <inspection_tool class="SerializableInnerClassHasSerialVersionUIDField" level="WARNING" enabled="true">
-          <option name="superClassString" value="java.awt.Component" />
-        </inspection_tool>
-        <inspection_tool class="SerialVersionUIDNotStaticFinal" level="WARNING" enabled="true" />
-        <inspection_tool class="TransientFieldInNonSerializableClass" level="WARNING" enabled="true" />
-        <inspection_tool class="NonSerializableObjectPassedToObjectStream" level="WARNING" enabled="true" />
-        <inspection_tool class="NonSerializableObjectBoundToHttpSession" level="WARNING" enabled="true" />
-        <inspection_tool class="NonSerializableFieldInSerializableClass" level="WARNING" enabled="true">
-          <option name="superClassString" value="java.awt.Component" />
-        </inspection_tool>
-        <inspection_tool class="NonSerializableWithSerialVersionUIDField" level="WARNING" enabled="true" />
-        <inspection_tool class="NonSerializableWithSerializationMethods" level="WARNING" enabled="true" />
-        <inspection_tool class="ConvertOldAnnotations" level="WARNING" enabled="true" />
-        <inspection_tool class="AccessToNonThreadSafeStaticFieldFromInstance" level="WARNING" enabled="true">
-          <option name="nonThreadSafeTypes" value="java.text.DateFormat,java.util.Calendar" />
-        </inspection_tool>
-        <inspection_tool class="AccessToStaticFieldLockedOnInstance" level="WARNING" enabled="true" />
-        <inspection_tool class="ArithmeticOnVolatileField" level="WARNING" enabled="true" />
-        <inspection_tool class="AwaitNotInLoop" level="WARNING" enabled="true" />
-        <inspection_tool class="AwaitWithoutCorrespondingSignal" level="WARNING" enabled="true" />
-        <inspection_tool class="BusyWait" level="WARNING" enabled="true" />
-        <inspection_tool class="ObjectNotify" level="WARNING" enabled="true" />
-        <inspection_tool class="ConditionSignal" level="WARNING" enabled="true" />
-        <inspection_tool class="SystemRunFinalizersOnExit" level="WARNING" enabled="true" />
-        <inspection_tool class="ThreadRun" level="WARNING" enabled="true" />
-        <inspection_tool class="SleepWhileHoldingLock" level="WARNING" enabled="true" />
-        <inspection_tool class="ThreadStartInConstruction" level="WARNING" enabled="true" />
-        <inspection_tool class="ThreadStopSuspendResume" level="WARNING" enabled="true" />
-        <inspection_tool class="ThreadYield" level="WARNING" enabled="true" />
-        <inspection_tool class="CallToNativeMethodWhileLocked" level="WARNING" enabled="true" />
-        <inspection_tool class="ExtendsThread" level="WARNING" enabled="true" />
-        <inspection_tool class="DoubleCheckedLocking" level="WARNING" enabled="true">
-          <option name="ignoreOnVolatileVariables" value="false" />
-        </inspection_tool>
-        <inspection_tool class="EmptySynchronizedStatement" level="WARNING" enabled="true" />
-        <inspection_tool class="FieldAccessedSynchronizedAndUnsynchronized" level="WARNING" enabled="true">
-          <option name="countGettersAndSetters" value="false" />
-        </inspection_tool>
-        <inspection_tool class="ThreadWithDefaultRunMethod" level="WARNING" enabled="true" />
-        <inspection_tool class="SafeLock" level="WARNING" enabled="true" />
-        <inspection_tool class="PublicFieldAccessedInSynchronizedContext" level="WARNING" enabled="true" />
-        <inspection_tool class="NestedSynchronizedStatement" level="WARNING" enabled="true" />
-        <inspection_tool class="NonSynchronizedMethodOverridesSynchronizedMethod" level="WARNING" enabled="true" />
-        <inspection_tool class="NotifyCalledOnCondition" level="WARNING" enabled="true" />
-        <inspection_tool class="NotifyNotInSynchronizedContext" level="WARNING" enabled="true" />
-        <inspection_tool class="NotifyWithoutCorrespondingWait" level="WARNING" enabled="true" />
-        <inspection_tool class="NakedNotify" level="WARNING" enabled="true" />
-        <inspection_tool class="SignalWithoutCorrespondingAwait" level="WARNING" enabled="true" />
-        <inspection_tool class="SynchronizeOnThis" level="WARNING" enabled="true" />
-        <inspection_tool class="SynchronizeOnLock" level="WARNING" enabled="true" />
-        <inspection_tool class="SynchronizedOnLiteralObject" level="WARNING" enabled="true" />
-        <inspection_tool class="SynchronizedMethod" level="WARNING" enabled="true">
-          <option name="m_includeNativeMethods" value="true" />
-        </inspection_tool>
-        <inspection_tool class="UnconditionalWait" level="WARNING" enabled="true" />
-        <inspection_tool class="VolatileArrayField" level="WARNING" enabled="true" />
-        <inspection_tool class="VolatileLongOrDoubleField" level="WARNING" enabled="true" />
-        <inspection_tool class="WaitCalledOnCondition" level="WARNING" enabled="true" />
-        <inspection_tool class="WaitNotInLoop" level="WARNING" enabled="true" />
-        <inspection_tool class="WaitOrAwaitWithoutTimeout" level="WARNING" enabled="true" />
-        <inspection_tool class="WaitWhileHoldingTwoLocks" level="WARNING" enabled="true" />
-        <inspection_tool class="WaitNotInSynchronizedContext" level="WARNING" enabled="true" />
-        <inspection_tool class="WaitWithoutCorrespondingNotify" level="WARNING" enabled="true" />
-        <inspection_tool class="WhileLoopSpinsOnField" level="WARNING" enabled="true">
-          <option name="ignoreNonEmtpyLoops" value="false" />
-        </inspection_tool>
-        <inspection_tool class="BoundFieldAssignment" level="WARNING" enabled="false" />
-        <inspection_tool class="OneButtonGroup" level="WARNING" enabled="false" />
-        <inspection_tool class="DuplicateMnemonic" level="WARNING" enabled="false" />
-        <inspection_tool class="MissingMnemonic" level="WARNING" enabled="false" />
-        <inspection_tool class="NoLabelFor" level="WARNING" enabled="false" />
-        <inspection_tool class="NoButtonGroup" level="WARNING" enabled="false" />
-        <inspection_tool class="NoScrollPane" level="WARNING" enabled="false" />
-        <inspection_tool class="JSUntypedDeclaration" level="WARNING" enabled="false" />
-        <inspection_tool class="JSDeprecatedSymbols" level="INFO" enabled="false" />
-        <inspection_tool class="JSDuplicatedDeclaration" level="WARNING" enabled="false" />
-        <inspection_tool class="JSUndeclaredVariable" level="INFO" enabled="false" />
-        <inspection_tool class="JSUnresolvedFunction" level="INFO" enabled="false" />
-        <inspection_tool class="JSUnresolvedVariable" level="INFO" enabled="false" />
-        <inspection_tool class="JSUnusedLocalSymbols" level="WARNING" enabled="false" />
-        <inspection_tool class="DuplicateCaseLabelJS" level="WARNING" enabled="false" />
-        <inspection_tool class="DuplicatePropertyOnObjectJS" level="WARNING" enabled="false" />
-        <inspection_tool class="BadExpressionStatementJS" level="WARNING" enabled="false" />
-        <inspection_tool class="FunctionWithInconsistentReturnsJS" level="WARNING" enabled="false" />
-        <inspection_tool class="ReservedWordUsedAsNameJS" level="WARNING" enabled="false" />
-        <inspection_tool class="ThisExpressionReferencesGlobalObjectJS" level="WARNING" enabled="false" />
-        <inspection_tool class="UnreachableCodeJS" level="WARNING" enabled="false" />
-        <inspection_tool class="InfiniteLoopJS" level="WARNING" enabled="false" />
-        <inspection_tool class="InfiniteRecursionJS" level="WARNING" enabled="false" />
-        <inspection_tool class="VtlFileReferencesInspection" level="WARNING" enabled="false" />
-        <inspection_tool class="VtlReferencesInspection" level="WARNING" enabled="false" />
-        <inspection_tool class="VtlTypesInspection" level="WARNING" enabled="false" />
-        <inspection_tool class="VtlInterpolationsInspection" level="ERROR" enabled="false" />
-        <inspection_tool class="XsltDeclarations" level="ERROR" enabled="false" />
-        <inspection_tool class="XsltTemplateInvocation" level="ERROR" enabled="false" />
-        <inspection_tool class="XsltUnusedDeclaration" level="WARNING" enabled="false" />
-        <inspection_tool class="CheckNodeTest" level="WARNING" enabled="false" />
-        <inspection_tool class="HardwiredNamespacePrefix" level="WARNING" enabled="false" />
-        <inspection_tool class="ImplicitTypeConversion" level="WARNING" enabled="false">
-          <option name="BITS" value="1720" />
-          <option name="FLAG_EXPLICIT_CONVERSION" value="true" />
-          <option name="IGNORE_NODESET_TO_BOOLEAN_VIA_STRING" value="true" />
-        </inspection_tool>
-        <inspection_tool class="RedundantTypeConversion" level="WARNING" enabled="false">
-          <option name="CHECK_ANY" value="true" />
-        </inspection_tool>
-        <inspection_tool class="IndexZeroUsage" level="WARNING" enabled="false" />
-        <inspection_tool class="NoResourceMethodsFound" level="WARNING" enabled="false" />
-        <inspection_tool class="AnnotationHasWrongMIMEType" level="WARNING" enabled="false" />
-        <inspection_tool class="EmptyWebServiceClass" level="WARNING" enabled="false" />
-        <inspection_tool class="VoidMethodAnnotatedWithGET" level="WARNING" enabled="false" />
-        <inspection_tool class="OneWayWebMethod" level="ERROR" enabled="false" />
-        <inspection_tool class="ResourceMethodInNonResourceClass" level="WARNING" enabled="false" />
-        <inspection_tool class="ImplicitlyExposedWebServiceMethods" level="INFO" enabled="false" />
-        <inspection_tool class="NonJaxWsWebServices" level="WARNING" enabled="false" />
-        <inspection_tool class="AmbiguousPathAnnotation" level="WARNING" enabled="false" />
-        <inspection_tool class="ValidExternallyBoundObject" level="ERROR" enabled="false" />
-        <inspection_tool class="JpaDataSourceORMInspection" level="ERROR" enabled="false" />
-        <inspection_tool class="JpaDataSourceORMDomInspection" level="ERROR" enabled="false" />
-        <inspection_tool class="EjbErrorInspection" level="ERROR" enabled="false" />
-        <inspection_tool class="EjbWarningInspection" level="WARNING" enabled="false" />
-        <inspection_tool class="EjbDomInspection" level="ERROR" enabled="false" />
-        <inspection_tool class="EjbQlInspection" level="ERROR" enabled="false" />
-        <inspection_tool class="JavaeeApplicationDomInspection" level="ERROR" enabled="false" />
-        <inspection_tool class="MimeType" level="ERROR" enabled="false" />
-        <inspection_tool class="JpaORMDomInspection" level="ERROR" enabled="false" />
-        <inspection_tool class="JpaModelErrorInspection" level="ERROR" enabled="false" />
-        <inspection_tool class="JpaModelWarningInspection" level="WARNING" enabled="false" />
-        <inspection_tool class="JpaQlInspection" level="ERROR" enabled="false" />
-        <inspection_tool class="JpaQueryApiInspection" level="ERROR" enabled="false" />
-        <inspection_tool class="JpaDomInspection" level="ERROR" enabled="false" />
-        <inspection_tool class="WebProperties" level="ERROR" enabled="false" />
-        <inspection_tool class="WebWarnings" level="WARNING" enabled="false" />
-        <inspection_tool class="ConstantConditionalExpressionJS" level="WARNING" enabled="false" />
-        <inspection_tool class="ConstantIfStatementJS" level="WARNING" enabled="false" />
-        <inspection_tool class="FallthroughInSwitchStatementJS" level="WARNING" enabled="false" />
-        <inspection_tool class="LoopStatementThatDoesntLoopJS" level="WARNING" enabled="false" />
-        <inspection_tool class="PointlessBooleanExpressionJS" level="WARNING" enabled="false" />
-        <inspection_tool class="TrivialIfJS" level="WARNING" enabled="false" />
-        <inspection_tool class="TrivialConditionalJS" level="WARNING" enabled="false" />
-        <inspection_tool class="UnnecessaryContinueJS" level="WARNING" enabled="false" />
-        <inspection_tool class="UnnecessaryReturnJS" level="WARNING" enabled="false" />
-        <inspection_tool class="UnnecessaryLabelJS" level="WARNING" enabled="false" />
-        <inspection_tool class="UnnecessaryLabelOnBreakStatementJS" level="WARNING" enabled="false" />
-        <inspection_tool class="UnnecessaryLabelOnContinueStatementJS" level="WARNING" enabled="false" />
-        <inspection_tool class="UnterminatedStatementJS" level="WARNING" enabled="false" />
-        <inspection_tool class="IncompatibleMaskJS" level="WARNING" enabled="false" />
-        <inspection_tool class="PointlessBitwiseExpressionJS" level="WARNING" enabled="false">
-          <option name="m_ignoreExpressionsContainingConstants" value="false" />
-        </inspection_tool>
-        <inspection_tool class="ShiftOutOfRangeJS" level="WARNING" enabled="false" />
-        <inspection_tool class="SillyAssignmentJS" level="WARNING" enabled="false" />
-        <inspection_tool class="HtmlDeprecatedTag" level="WARNING" enabled="false" />
-        <inspection_tool class="CheckEmptyScriptTag" level="WARNING" enabled="false" />
-        <inspection_tool class="HtmlExtraClosingTag" level="ERROR" enabled="false" />
-        <inspection_tool class="CheckImageSize" level="WARNING" enabled="false" />
-        <inspection_tool class="CheckValidXmlInScriptTagBody" level="ERROR" enabled="false" />
-        <inspection_tool class="RequiredAttributes" level="WARNING" enabled="false">
-          <option name="myAdditionalRequiredHtmlAttributes" value="" />
-        </inspection_tool>
-        <inspection_tool class="HtmlUnknownTag" level="WARNING" enabled="false">
-          <option name="myValues">
-            <value>
-              <list size="5">
-                <item index="0" class="java.lang.String" itemvalue="embed" />
-                <item index="1" class="java.lang.String" itemvalue="nobr" />
-                <item index="2" class="java.lang.String" itemvalue="noembed" />
-                <item index="3" class="java.lang.String" itemvalue="comment" />
-                <item index="4" class="java.lang.String" itemvalue="script" />
-              </list>
-            </value>
-          </option>
-          <option name="myCustomValuesEnabled" value="true" />
-        </inspection_tool>
-        <inspection_tool class="HtmlUnknownAttribute" level="WARNING" enabled="false">
-          <option name="myValues">
-            <value>
-              <list size="5">
-                <item index="0" class="java.lang.String" itemvalue="type" />
-                <item index="1" class="java.lang.String" itemvalue="wmode" />
-                <item index="2" class="java.lang.String" itemvalue="src" />
-                <item index="3" class="java.lang.String" itemvalue="width" />
-                <item index="4" class="java.lang.String" itemvalue="height" />
-              </list>
-            </value>
-          </option>
-          <option name="myCustomValuesEnabled" value="true" />
-        </inspection_tool>
-        <inspection_tool class="SameParameterValue" level="WARNING" enabled="false" />
-        <inspection_tool class="WeakerAccess" level="WARNING" enabled="true">
-          <option name="SUGGEST_PACKAGE_LOCAL_FOR_MEMBERS" value="false" />
-          <option name="SUGGEST_PACKAGE_LOCAL_FOR_TOP_CLASSES" value="true" />
-          <option name="SUGGEST_PRIVATE_FOR_INNERS" value="false" />
-        </inspection_tool>
-        <inspection_tool class="FloatingPointEquality" level="WARNING" enabled="true" />
-      </profile>
-    </profiles>
-    <list size="4">
-      <item index="0" class="java.lang.String" itemvalue="SERVER PROBLEM" />
-      <item index="1" class="java.lang.String" itemvalue="INFO" />
-      <item index="2" class="java.lang.String" itemvalue="WARNING" />
-      <item index="3" class="java.lang.String" itemvalue="ERROR" />
-    </list>
-  </component>
-  <component name="JavacSettings">
-    <option name="DEBUGGING_INFO" value="true" />
-    <option name="GENERATE_NO_WARNINGS" value="false" />
-    <option name="DEPRECATION" value="true" />
-    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
-    <option name="MAXIMUM_HEAP_SIZE" value="128" />
-  </component>
-  <component name="JavadocGenerationManager">
-    <option name="OUTPUT_DIRECTORY" />
-    <option name="OPTION_SCOPE" value="protected" />
-    <option name="OPTION_HIERARCHY" value="true" />
-    <option name="OPTION_NAVIGATOR" value="true" />
-    <option name="OPTION_INDEX" value="true" />
-    <option name="OPTION_SEPARATE_INDEX" value="true" />
-    <option name="OPTION_DOCUMENT_TAG_USE" value="false" />
-    <option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false" />
-    <option name="OPTION_DOCUMENT_TAG_VERSION" value="false" />
-    <option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="true" />
-    <option name="OPTION_DEPRECATED_LIST" value="true" />
-    <option name="OTHER_OPTIONS" value="" />
-    <option name="HEAP_SIZE" />
-    <option name="LOCALE" />
-    <option name="OPEN_IN_BROWSER" value="true" />
-  </component>
-  <component name="JikesSettings">
-    <option name="JIKES_PATH" value="" />
-    <option name="DEBUGGING_INFO" value="true" />
-    <option name="DEPRECATION" value="true" />
-    <option name="GENERATE_NO_WARNINGS" value="false" />
-    <option name="IS_EMACS_ERRORS_MODE" value="true" />
-    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
-  </component>
-  <component name="LogConsolePreferences">
-    <option name="FILTER_ERRORS" value="false" />
-    <option name="FILTER_WARNINGS" value="false" />
-    <option name="FILTER_INFO" value="true" />
-    <option name="CUSTOM_FILTER" />
-  </component>
-  <component name="MavenBuildProjectComponent">
-    <option name="mavenExecutable" value="" />
-    <option name="Settings File" value="" />
-    <option name="mavenCommandLineParams" value="" />
-    <option name="vmOptions" value="" />
-    <option name="useMavenEmbedder" value="false" />
-    <option name="useFilter" value="false" />
-    <option name="Batch Mode" value="false" />
-    <option name="Check Plugin Updates" value="false" />
-    <option name="Debug" value="false" />
-    <option name="Errors" value="false" />
-    <option name="Fail At End" value="false" />
-    <option name="Fail Fast" value="false" />
-    <option name="Fail Never" value="false" />
-    <option name="Lax Checksums" value="false" />
-    <option name="No Plugin Registry" value="false" />
-    <option name="No Plugin Updates" value="false" />
-    <option name="Non Recursive" value="false" />
-    <option name="Offline" value="false" />
-    <option name="Reactor" value="false" />
-    <option name="Strict Checksums" value="false" />
-    <option name="Update Plugins" value="false" />
-    <option name="Update Snapshots" value="false" />
-    <option name="Skip Tests" value="false" />
-    <pom-list />
-  </component>
-  <component name="Palette2">
-    <group name="Swing">
-      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
-        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
-      </item>
-      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
-        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
-      </item>
-      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
-        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
-      </item>
-      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
-        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
-      </item>
-      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
-        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
-        <initial-values>
-          <property name="text" value="Button" />
-        </initial-values>
-      </item>
-      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
-        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
-        <initial-values>
-          <property name="text" value="RadioButton" />
-        </initial-values>
-      </item>
-      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
-        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
-        <initial-values>
-          <property name="text" value="CheckBox" />
-        </initial-values>
-      </item>
-      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
-        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
-        <initial-values>
-          <property name="text" value="Label" />
-        </initial-values>
-      </item>
-      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
-        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
-          <preferred-size width="150" height="-1" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
-        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
-          <preferred-size width="150" height="-1" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
-        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
-          <preferred-size width="150" height="-1" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
-        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
-          <preferred-size width="150" height="50" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
-        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
-          <preferred-size width="150" height="50" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
-        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
-          <preferred-size width="150" height="50" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
-        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
-      </item>
-      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
-        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
-          <preferred-size width="150" height="50" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
-        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
-          <preferred-size width="150" height="50" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
-        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
-          <preferred-size width="150" height="50" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
-        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
-          <preferred-size width="200" height="200" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
-        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
-          <preferred-size width="200" height="200" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
-        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
-      </item>
-      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
-        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
-      </item>
-      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
-        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
-      </item>
-      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
-        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
-      </item>
-      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
-        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
-          <preferred-size width="-1" height="20" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
-        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
-      </item>
-      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
-        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
-      </item>
-    </group>
-  </component>
-  <component name="ProjectDetails">
-    <option name="projectName" value="watchmaker" />
-  </component>
-  <component name="ProjectFileVersion" converted="true" />
-  <component name="ProjectKey">
-    <option name="state" value="https://watchmaker.dev.java.net/svn/watchmaker/trunk/etc/intellij/watchmaker.ipr" />
-  </component>
-  <component name="ProjectModuleManager">
-    <modules>
-      <module fileurl="file://$PROJECT_DIR$/book.iml" filepath="$PROJECT_DIR$/book.iml" group="modules" />
-      <module fileurl="file://$PROJECT_DIR$/examples.iml" filepath="$PROJECT_DIR$/examples.iml" group="modules" />
-      <module fileurl="file://$PROJECT_DIR$/framework.iml" filepath="$PROJECT_DIR$/framework.iml" group="modules" />
-      <module fileurl="file://$PROJECT_DIR$/global.iml" filepath="$PROJECT_DIR$/global.iml" />
-      <module fileurl="file://$PROJECT_DIR$/swing.iml" filepath="$PROJECT_DIR$/swing.iml" group="modules" />
-      <module fileurl="file://$PROJECT_DIR$/website.iml" filepath="$PROJECT_DIR$/website.iml" group="modules" />
-    </modules>
-  </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_5" assert-keyword="true" jdk-15="true" project-jdk-name="1.5" project-jdk-type="JavaSDK">
-    <output url="file://$PROJECT_DIR$/../../framework/build/classes/main" />
-  </component>
-  <component name="RmicSettings">
-    <option name="IS_EANABLED" value="false" />
-    <option name="DEBUGGING_INFO" value="true" />
-    <option name="GENERATE_NO_WARNINGS" value="false" />
-    <option name="GENERATE_IIOP_STUBS" value="false" />
-    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
-  </component>
-  <component name="SvnBranchConfigurationManager">
-    <option name="myConfigurationMap">
-      <map>
-        <entry key="$PROJECT_DIR$/../..">
-          <value>
-            <SvnBranchConfiguration>
-              <option name="branchUrls">
-                <list>
-                  <option value="https://watchmaker.dev.java.net/svn/watchmaker/branches" />
-                  <option value="https://watchmaker.dev.java.net/svn/watchmaker/tags" />
-                </list>
-              </option>
-              <option name="trunkUrl" value="https://watchmaker.dev.java.net/svn/watchmaker/trunk" />
-            </SvnBranchConfiguration>
-          </value>
-        </entry>
-      </map>
-    </option>
-    <option name="myVersion" value="124" />
-    <option name="mySupportsUserInfoFilter" value="true" />
-  </component>
-  <component name="VcsDirectoryMappings">
-    <mapping directory="" vcs="svn" />
-    <mapping directory="$PROJECT_DIR$/../../website" vcs="Git" />
-  </component>
-  <component name="WebServicesPlugin" addRequiredLibraries="true" />
-  <component name="com.intellij.jsf.UserDefinedFacesConfigs">
-    <option name="USER_DEFINED_CONFIGS">
-      <value>
-        <list size="0" />
-      </value>
-    </option>
-  </component>
-  <component name="com.sixrr.metrics.MetricsReloaded">
-    <option name="selectedProfile" value="Lines of code metrics" />
-    <option name="autoscroll" value="false" />
-    <option name="calculateMetrics" value="true" />
-    <option name="includeTestClasses" value="false" />
-    <option name="flattenInnerClasses" value="true" />
-    <option name="cycleTableSpecificationString" value="" />
-    <option name="shortCycleTableSpecificationString" value="" />
-  </component>
-  <component name="libraryTable">
-    <library name="uncommons-maths-1.2.1">
-      <CLASSES>
-        <root url="jar://$PROJECT_DIR$/../../lib/runtime/uncommons-maths-1.2.1.jar!/" />
-      </CLASSES>
-      <JAVADOC />
-      <SOURCES />
-    </library>
-    <library name="testng-5.10-jdk15">
-      <CLASSES>
-        <root url="jar://$PROJECT_DIR$/../../lib/compiletime/testng/testng-5.10-jdk15.jar!/" />
-      </CLASSES>
-      <JAVADOC />
-      <SOURCES />
-    </library>
-    <library name="fest-swing-1.1">
-      <CLASSES>
-        <root url="jar://$PROJECT_DIR$/../../lib/compiletime/fest/fest-swing-1.1.jar!/" />
-        <root url="jar://$PROJECT_DIR$/../../lib/compiletime/fest/fest-util-1.0.jar!/" />
-        <root url="jar://$PROJECT_DIR$/../../lib/compiletime/fest/fest-reflect-1.1.jar!/" />
-        <root url="jar://$PROJECT_DIR$/../../lib/compiletime/fest/fest-assert-1.0.jar!/" />
-      </CLASSES>
-      <JAVADOC />
-      <SOURCES />
-    </library>
-  </component>
-</project>
-
diff --git a/etc/intellij/website.iml b/etc/intellij/website.iml
deleted file mode 100644
index cca03f7..0000000
--- a/etc/intellij/website.iml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module relativePaths="true" type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager" inherit-compiler-output="true">
-    <exclude-output />
-    <content url="file://$MODULE_DIR$/../../website" />
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-  </component>
-</module>
-
diff --git a/etc/nbproject/project.xml b/etc/nbproject/project.xml
deleted file mode 100644
index c9cd91a..0000000
--- a/etc/nbproject/project.xml
+++ /dev/null
@@ -1,263 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://www.netbeans.org/ns/project/1">
-    <type>org.netbeans.modules.ant.freeform</type>
-    <configuration>
-        <general-data xmlns="http://www.netbeans.org/ns/freeform-project/1">
-            <name>watchmaker</name>
-        </general-data>
-        <general-data xmlns="http://www.netbeans.org/ns/freeform-project/2">
-            <!-- Do not use Project Properties customizer when editing this file manually. -->
-            <name>watchmaker</name>
-            <properties>
-                <property name="project.dir">..</property>
-                <property name="ant.script">${project.dir}/build.xml</property>
-            </properties>
-            <folders>
-                <source-folder>
-                    <label>watchmaker</label>
-                    <location>${project.dir}</location>
-                </source-folder>
-                <source-folder>
-                    <label>swing/src/java/test</label>
-                    <location>${project.dir}/swing/src/java/test</location>
-                </source-folder>
-                <source-folder>
-                    <label>swing/src/java/main</label>
-                    <location>${project.dir}/swing/src/java/main</location>
-                </source-folder>
-                <source-folder>
-                    <label>util/src/java/test</label>
-                    <location>${project.dir}/util/src/java/test</location>
-                </source-folder>
-                <source-folder>
-                    <label>util/src/java/main</label>
-                    <location>${project.dir}/util/src/java/main</location>
-                </source-folder>
-                <source-folder>
-                    <label>watchmaker</label>
-                    <location>.</location>
-                    <encoding>UTF-8</encoding>
-                </source-folder>
-                <source-folder>
-                    <label>framework/src/java/main</label>
-                    <type>java</type>
-                    <location>${project.dir}/framework/src/java/main</location>
-                    <encoding>UTF-8</encoding>
-                </source-folder>
-                <source-folder>
-                    <label>framework/src/java/test</label>
-                    <type>java</type>
-                    <location>${project.dir}/framework/src/java/test</location>
-                    <encoding>UTF-8</encoding>
-                </source-folder>
-                <source-folder>
-                    <label>util/src/java/main</label>
-                    <type>java</type>
-                    <location>${project.dir}/util/src/java/main</location>
-                    <encoding>UTF-8</encoding>
-                </source-folder>
-                <source-folder>
-                    <label>swing/src/java/main</label>
-                    <type>java</type>
-                    <location>${project.dir}/swing/src/java/main</location>
-                    <encoding>UTF-8</encoding>
-                </source-folder>
-                <source-folder>
-                    <label>examples/src/java/main</label>
-                    <type>java</type>
-                    <location>${project.dir}/examples/src/java/main</location>
-                    <encoding>UTF-8</encoding>
-                </source-folder>
-                <source-folder>
-                    <label>util/src/java/test</label>
-                    <type>java</type>
-                    <location>${project.dir}/util/src/java/test</location>
-                    <encoding>UTF-8</encoding>
-                </source-folder>
-                <source-folder>
-                    <label>swing/src/java/test</label>
-                    <type>java</type>
-                    <location>${project.dir}/swing/src/java/test</location>
-                    <encoding>UTF-8</encoding>
-                </source-folder>
-                <source-folder>
-                    <label>examples/src/java/test</label>
-                    <type>java</type>
-                    <location>${project.dir}/examples/src/java/test</location>
-                    <encoding>UTF-8</encoding>
-                </source-folder>
-            </folders>
-            <ide-actions>
-                <action name="build">
-                    <script>${ant.script}</script>
-                    <target>dist</target>
-                </action>
-                <action name="clean">
-                    <script>${ant.script}</script>
-                    <target>clean</target>
-                </action>
-                <action name="javadoc">
-                    <script>${ant.script}</script>
-                    <target>docs</target>
-                </action>
-                <action name="test">
-                    <script>${ant.script}</script>
-                    <target>test</target>
-                </action>
-                <action name="rebuild">
-                    <script>${ant.script}</script>
-                    <target>clean</target>
-                    <target>dist</target>
-                </action>
-            </ide-actions>
-            <export>
-                <type>folder</type>
-                <location>${project.dir}/framework/build/classes/main</location>
-                <script>${ant.script}</script>
-                <build-target>dist</build-target>
-            </export>
-            <export>
-                <type>folder</type>
-                <location>${project.dir}/examples/build/classes/main</location>
-                <script>${ant.script}</script>
-                <build-target>dist</build-target>
-            </export>
-            <export>
-                <type>folder</type>
-                <location>${project.dir}/framework/build/classes/test</location>
-                <script>${ant.script}</script>
-                <build-target>dist</build-target>
-            </export>
-            <export>
-                <type>folder</type>
-                <location>${project.dir}/examples/build/classes/test</location>
-                <script>${ant.script}</script>
-                <build-target>dist</build-target>
-            </export>
-            <export>
-                <type>folder</type>
-                <location>${project.dir}/util/build/classes/main</location>
-                <script>${ant.script}</script>
-                <build-target>dist</build-target>
-            </export>
-            <export>
-                <type>folder</type>
-                <location>${project.dir}/swing/build/classes/main</location>
-                <script>${ant.script}</script>
-                <build-target>dist</build-target>
-            </export>
-            <export>
-                <type>folder</type>
-                <location>${project.dir}/util/build/classes/test</location>
-                <script>${ant.script}</script>
-                <build-target>dist</build-target>
-            </export>
-            <export>
-                <type>folder</type>
-                <location>${project.dir}/swing/build/classes/test</location>
-                <script>${ant.script}</script>
-                <build-target>dist</build-target>
-            </export>
-            <view>
-                <items>
-                    <source-folder style="packages">
-                        <label>framework/src/java/main</label>
-                        <location>${project.dir}/framework/src/java/main</location>
-                    </source-folder>
-                    <source-folder style="packages">
-                        <label>framework/src/java/test</label>
-                        <location>${project.dir}/framework/src/java/test</location>
-                    </source-folder>
-                    <source-folder style="packages">
-                        <label>util/src/java/main</label>
-                        <location>${project.dir}/util/src/java/main</location>
-                    </source-folder>
-                    <source-folder style="packages">
-                        <label>swing/src/java/main</label>
-                        <location>${project.dir}/swing/src/java/main</location>
-                    </source-folder>
-                    <source-folder style="packages">
-                        <label>examples/src/java/main</label>
-                        <location>${project.dir}/examples/src/java/main</location>
-                    </source-folder>
-                    <source-folder style="packages">
-                        <label>util/src/java/test</label>
-                        <location>${project.dir}/util/src/java/test</location>
-                    </source-folder>
-                    <source-folder style="packages">
-                        <label>swing/src/java/test</label>
-                        <location>${project.dir}/swing/src/java/test</location>
-                    </source-folder>
-                    <source-folder style="packages">
-                        <label>examples/src/java/test</label>
-                        <location>${project.dir}/examples/src/java/test</location>
-                    </source-folder>
-                    <source-file>
-                        <location>${ant.script}</location>
-                    </source-file>
-                </items>
-                <context-menu>
-                    <ide-action name="build"/>
-                    <ide-action name="clean"/>
-                    <ide-action name="javadoc"/>
-                    <ide-action name="test"/>
-                    <ide-action name="rebuild"/>
-                </context-menu>
-            </view>
-            <subprojects/>
-        </general-data>
-        <java-data xmlns="http://www.netbeans.org/ns/freeform-project-java/2">
-            <compilation-unit>
-                <package-root>${project.dir}/framework/src/java/main</package-root>
-                <classpath mode="compile">${project.dir}/util/build/classes/main:${project.dir}/lib/runtime/uncommons-maths-1.1.jar</classpath>
-                <built-to>${project.dir}/framework/build/classes/main</built-to>
-                <source-level>1.5</source-level>
-            </compilation-unit>
-            <compilation-unit>
-                <package-root>${project.dir}/examples/src/java/main</package-root>
-                <classpath mode="compile">${project.dir}/framework/build/classes/main:${project.dir}/util/build/classes/main:${project.dir}/swing/build/classes/main:${project.dir}/lib/runtime/uncommons-maths-1.1.jar</classpath>
-                <built-to>${project.dir}/examples/build/classes/main</built-to>
-                <source-level>1.5</source-level>
-            </compilation-unit>
-            <compilation-unit>
-                <package-root>${project.dir}/framework/src/java/test</package-root>
-                <unit-tests/>
-                <classpath mode="compile">${project.dir}/framework/build/classes/main:${project.dir}/lib/runtime/uncommons-maths-1.1.jar:${project.dir}/lib/compiletime/testng/testng-5.7-jdk15.jar</classpath>
-                <built-to>${project.dir}/framework/build/classes/test</built-to>
-                <source-level>1.5</source-level>
-            </compilation-unit>
-            <compilation-unit>
-                <package-root>${project.dir}/examples/src/java/test</package-root>
-                <unit-tests/>
-                <classpath mode="compile">${project.dir}/examples/build/classes/main:${project.dir}/framework/build/classes/main:${project.dir}/lib/runtime/uncommons-maths-1.1.jar:${project.dir}/lib/compiletime/testng/testng-5.7-jdk15.jar:${project.dir}/lib/compiletime/fest/fest-swing-1.0b1.jar</classpath>
-                <built-to>${project.dir}/examples/build/classes/test</built-to>
-                <source-level>1.5</source-level>
-            </compilation-unit>
-            <compilation-unit>
-                <package-root>${project.dir}/util/src/java/main</package-root>
-                <built-to>${project.dir}/util/build/classes/main</built-to>
-                <source-level>1.5</source-level>
-            </compilation-unit>
-            <compilation-unit>
-                <package-root>${project.dir}/swing/src/java/main</package-root>
-                <classpath mode="compile">${project.dir}/framework/build/classes/main:${project.dir}/lib/runtime/jfreechart-1.0.6.jar:${project.dir}/lib/runtime/jcommon-1.0.10.jar:${project.dir}/lib/runtime/uncommons-maths-1.1.jar</classpath>
-                <built-to>${project.dir}/swing/build/classes/main</built-to>
-                <source-level>1.5</source-level>
-            </compilation-unit>
-            <compilation-unit>
-                <package-root>${project.dir}/util/src/java/test</package-root>
-                <unit-tests/>
-                <classpath mode="compile">${project.dir}/util/build/classes/main:${project.dir}/lib/compiletime/testng/testng-5.7-jdk15.jar</classpath>
-                <built-to>${project.dir}/util/build/classes/test</built-to>
-                <source-level>1.5</source-level>
-            </compilation-unit>
-            <compilation-unit>
-                <package-root>${project.dir}/swing/src/java/test</package-root>
-                <unit-tests/>
-                <classpath mode="compile">${project.dir}/swing/build/classes/main:${project.dir}/framework/build/classes/main:${project.dir}/lib/runtime/uncommons-maths-1.1.jar:${project.dir}/lib/compiletime/testng/testng-5.7-jdk15.jar:${project.dir}/lib/compiletime/fest/fest-swing-1.0b1.jar</classpath>
-                <built-to>${project.dir}/swing/build/classes/test</built-to>
-                <source-level>1.5</source-level>
-            </compilation-unit>
-        </java-data>
-    </configuration>
-</project>
diff --git a/examples/examples.iml b/examples/examples.iml
new file mode 100644
index 0000000..6f94484
--- /dev/null
+++ b/examples/examples.iml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_6" inherit-compiler-output="false">
+    <output url="file://$MODULE_DIR$/target/classes" />
+    <output-test url="file://$MODULE_DIR$/target/test-classes" />
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src/java/main" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/java/resources" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/java/test" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/target" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="swing" />
+    <orderEntry type="module" module-name="framework" />
+    <orderEntry type="library" name="Maven: org.uncommons.maths:uncommons-maths:1.2.2" level="project" />
+    <orderEntry type="library" name="Maven: jfree:jcommon:1.0.12" level="project" />
+    <orderEntry type="library" name="Maven: jfree:jfreechart:1.0.13" level="project" />
+    <orderEntry type="library" name="Maven: com.google.collections:google-collections:1.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.testng:testng:6.2.1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: junit:junit:3.8.1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.beanshell:bsh:2.0b4" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: com.beust:jcommander:1.12" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.yaml:snakeyaml:1.6" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.easytesting:fest-swing:1.2.1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.easytesting:fest-assert:1.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.easytesting:fest-util:1.1.3" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.easytesting:fest-reflect:1.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.jcip:jcip-annotations:1.0" level="project" />
+  </component>
+</module>
+
diff --git a/examples/nb-configuration.xml b/examples/nb-configuration.xml
new file mode 100644
index 0000000..ae35717
--- /dev/null
+++ b/examples/nb-configuration.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-shared-configuration>
+    <!--
+This file contains additional configuration written by modules in the NetBeans IDE.
+The configuration is intended to be shared among all the users of project and
+therefore it is assumed to be part of version control checkout.
+Without this configuration present, some functionality in the IDE may be limited or fail altogether.
+-->
+    <properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
+        <!--
+Properties that influence various parts of the IDE, especially code formatting and the like. 
+You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
+That way multiple projects can share the same settings (useful for formatting rules for example).
+Any value defined here will override the pom.xml file value but is only applicable to the current project.
+-->
+        <org-netbeans-modules-editor-indent.CodeStyle.usedProfile>project</org-netbeans-modules-editor-indent.CodeStyle.usedProfile>
+        <org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab>2</org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab>
+        <org-netbeans-modules-editor-indent.CodeStyle.project.tab-size>2</org-netbeans-modules-editor-indent.CodeStyle.project.tab-size>
+        <org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width>2</org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width>
+        <org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs>false</org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs>
+        <org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width>100</org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width>
+        <org-netbeans-modules-editor-indent.CodeStyle.project.text-line-wrap>words</org-netbeans-modules-editor-indent.CodeStyle.project.text-line-wrap>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.blankLinesAfterClassHeader>0</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.blankLinesAfterClassHeader>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsKeyword>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsKeyword>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantIfBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantIfBraces>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantForBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantForBraces>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceBeforeColon>false</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceBeforeColon>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTryResources>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTryResources>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodParams>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodParams>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTernaryOps>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTernaryOps>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsKeyword>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsKeyword>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaces-per-tab>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaces-per-tab>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssignOps>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssignOps>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeElseOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeElseOnNewLine>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapEnumConstants>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapEnumConstants>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeFinallyOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeFinallyOnNewLine>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeCatchOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeCatchOnNewLine>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.classDeclBracePlacement>NEW_LINE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.classDeclBracePlacement>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodCallArgs>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodCallArgs>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapDisjunctiveCatchTypes>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapDisjunctiveCatchTypes>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapChainedMethodCalls>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapChainedMethodCalls>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapFor>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapFor>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapArrayInit>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapArrayInit>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssert>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssert>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapBinaryOps>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapBinaryOps>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAnnotationArgs>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAnnotationArgs>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.indent-shift-width>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.indent-shift-width>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeWhileOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeWhileOnNewLine>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.text-limit-width>100</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.text-limit-width>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsList>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsList>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.generateParagraphTagOnBlankLines>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.generateParagraphTagOnBlankLines>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantWhileBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantWhileBraces>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.tab-size>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.tab-size>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.continuationIndentSize>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.continuationIndentSize>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.expand-tabs>false</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.expand-tabs>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.otherBracePlacement>NEW_LINE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.otherBracePlacement>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.methodDeclBracePlacement>NEW_LINE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.methodDeclBracePlacement>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantDoWhileBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantDoWhileBraces>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsList>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsList>
+    </properties>
+</project-shared-configuration>
diff --git a/examples/pom.xml b/examples/pom.xml
new file mode 100644
index 0000000..773b7d2
--- /dev/null
+++ b/examples/pom.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--===========================================================================
+  Copyright 2006-2010 Daniel W. Dyer
+
+  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.
+  ==========================================================================-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.uncommons.watchmaker</groupId>
+		<artifactId>watchmaker</artifactId>
+		<version>0.7.2</version>
+	</parent>
+	<artifactId>watchmaker-examples</artifactId>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>watchmaker-swing</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.testng</groupId>
+			<artifactId>testng</artifactId>
+			<version>6.2.1</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.easytesting</groupId>
+			<artifactId>fest-swing</artifactId>
+			<version>1.2.1</version>
+			<scope>test</scope>
+		</dependency>
+	</dependencies>  
+	
+	<build>
+		<sourceDirectory>src/java/main</sourceDirectory>
+		<testSourceDirectory>src/java/test</testSourceDirectory>
+		<resources>
+			<resource>
+				<directory>src/java/resources</directory>
+			</resource>
+		</resources>
+	</build>
+</project>
diff --git a/examples/src/java/main/org/uncommons/watchmaker/examples/EvolutionLogger.java b/examples/src/java/main/org/uncommons/watchmaker/examples/EvolutionLogger.java
index 4b7c443..5c47146 100644
--- a/examples/src/java/main/org/uncommons/watchmaker/examples/EvolutionLogger.java
+++ b/examples/src/java/main/org/uncommons/watchmaker/examples/EvolutionLogger.java
@@ -15,8 +15,8 @@
 //=============================================================================
 package org.uncommons.watchmaker.examples;
 
-import org.uncommons.watchmaker.framework.EvolutionObserver;
 import org.uncommons.watchmaker.framework.PopulationData;
+import org.uncommons.watchmaker.framework.islands.IslandEvolutionObserver;
 
 /**
  * Trivial evolution observer for displaying information at the end
@@ -24,10 +24,16 @@ import org.uncommons.watchmaker.framework.PopulationData;
  * @param <T> The type of entity being evolved.
  * @author Daniel Dyer
  */
-public class EvolutionLogger<T> implements EvolutionObserver<T>
+public class EvolutionLogger<T> implements IslandEvolutionObserver<T>
 {
     public void populationUpdate(PopulationData<? extends T> data)
     {
         System.out.println("Generation " + data.getGenerationNumber() + ": " + data.getBestCandidateFitness());
     }
+
+
+    public void islandPopulationUpdate(int islandIndex, PopulationData<? extends T> populationData)
+    {
+        // Do nothing.
+    }
 }
diff --git a/examples/src/java/main/org/uncommons/watchmaker/examples/biomorphs/BiomorphApplet.java b/examples/src/java/main/org/uncommons/watchmaker/examples/biomorphs/BiomorphApplet.java
index b2af7db..0766422 100644
--- a/examples/src/java/main/org/uncommons/watchmaker/examples/biomorphs/BiomorphApplet.java
+++ b/examples/src/java/main/org/uncommons/watchmaker/examples/biomorphs/BiomorphApplet.java
@@ -51,7 +51,7 @@ import org.uncommons.watchmaker.framework.termination.GenerationCount;
 import org.uncommons.watchmaker.swing.SwingConsole;
 
 /**
- * Watchmaker Framework implementation of Dawkin's biomorph program. 
+ * Watchmaker Framework implementation of Dawkin's biomorph program.
  * @author Daniel Dyer
  */
 public class BiomorphApplet extends AbstractExampleApplet
diff --git a/examples/src/java/main/org/uncommons/watchmaker/examples/geneticprogramming/GeneticProgrammingExample.java b/examples/src/java/main/org/uncommons/watchmaker/examples/geneticprogramming/GeneticProgrammingExample.java
index 5a6fa17..c060d49 100644
--- a/examples/src/java/main/org/uncommons/watchmaker/examples/geneticprogramming/GeneticProgrammingExample.java
+++ b/examples/src/java/main/org/uncommons/watchmaker/examples/geneticprogramming/GeneticProgrammingExample.java
@@ -31,7 +31,7 @@ import org.uncommons.watchmaker.framework.termination.TargetFitness;
 
 /**
  * Simple tree-based genetic programming application based on the first example
- * in Chapter 11 of Toby Segaran's Progamming Collective Intelligence.
+ * in Chapter 11 of Toby Segaran's Programming Collective Intelligence.
  * @author Daniel Dyer
  */
 public class GeneticProgrammingExample
diff --git a/examples/src/java/main/org/uncommons/watchmaker/examples/geneticprogramming/Multiplication.java b/examples/src/java/main/org/uncommons/watchmaker/examples/geneticprogramming/Multiplication.java
index 1731366..bd5dd60 100644
--- a/examples/src/java/main/org/uncommons/watchmaker/examples/geneticprogramming/Multiplication.java
+++ b/examples/src/java/main/org/uncommons/watchmaker/examples/geneticprogramming/Multiplication.java
@@ -22,7 +22,7 @@ package org.uncommons.watchmaker.examples.geneticprogramming;
 public class Multiplication extends BinaryNode
 {
     /**
-     * Creates a node that evaluates to the sum of the values of its two
+     * Creates a node that evaluates to the product of the values of its two
      * child nodes ({@literal left} and {@literal right}).
      * @param left The first operand.
      * @param right The second operand.
diff --git a/examples/src/java/main/org/uncommons/watchmaker/examples/sudoku/SudokuApplet.java b/examples/src/java/main/org/uncommons/watchmaker/examples/sudoku/SudokuApplet.java
index d301b81..2a856e9 100644
--- a/examples/src/java/main/org/uncommons/watchmaker/examples/sudoku/SudokuApplet.java
+++ b/examples/src/java/main/org/uncommons/watchmaker/examples/sudoku/SudokuApplet.java
@@ -25,6 +25,7 @@ import java.awt.event.ItemListener;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Random;
+import java.util.concurrent.TimeUnit;
 import javax.swing.BorderFactory;
 import javax.swing.JButton;
 import javax.swing.JComboBox;
@@ -53,6 +54,7 @@ import org.uncommons.watchmaker.framework.selection.TournamentSelection;
 import org.uncommons.watchmaker.framework.termination.TargetFitness;
 import org.uncommons.watchmaker.swing.AbortControl;
 import org.uncommons.watchmaker.swing.ProbabilityParameterControl;
+import org.uncommons.watchmaker.swing.SwingEvolutionObserver;
 import org.uncommons.watchmaker.swing.evolutionmonitor.StatusBar;
 
 /**
@@ -158,7 +160,7 @@ public class SudokuApplet extends AbstractExampleApplet
         selectionStrategy = new TournamentSelection(selectionPressure.getNumberGenerator());
         innerPanel.add(selectionPressure.getControl());
         innerPanel.add(new JLabel("Population Size: "));
-        populationSizeSpinner = new JSpinner(new SpinnerNumberModel(500, 10, 50000, 1));        
+        populationSizeSpinner = new JSpinner(new SpinnerNumberModel(500, 10, 50000, 1));
         innerPanel.add(populationSizeSpinner);
         SpringUtilities.makeCompactGrid(innerPanel, 3, 2, 0, 6, 6, 6);
         innerPanel.setBorder(BorderFactory.createTitledBorder("Configuration"));
@@ -175,7 +177,7 @@ public class SudokuApplet extends AbstractExampleApplet
         solveButton.addActionListener(new ActionListener()
         {
             public void actionPerformed(ActionEvent ev)
-            {                
+            {
                 int populationSize = (Integer) populationSizeSpinner.getValue();
                 puzzleCombo.setEnabled(false);
                 populationSizeSpinner.setEnabled(false);
@@ -226,7 +228,9 @@ public class SudokuApplet extends AbstractExampleApplet
                                                                                          new SudokuEvaluator(),
                                                                                          selectionStrategy,
                                                                                          rng);
-                engine.addEvolutionObserver(new GridViewUpdater());
+                engine.addEvolutionObserver(new SwingEvolutionObserver<Sudoku>(new GridViewUpdater(),
+                                                                               100,
+                                                                               TimeUnit.MILLISECONDS));
                 engine.addEvolutionObserver(statusBar);
                 return engine.evolve(populationSize,
                                      eliteCount,
@@ -234,7 +238,7 @@ public class SudokuApplet extends AbstractExampleApplet
                                      abortControl.getTerminationCondition()); // ...or the user aborts.
             }
 
-            
+
             @Override
             protected void postProcessing(Sudoku result)
             {
diff --git a/examples/src/java/main/org/uncommons/watchmaker/examples/travellingsalesman/EvolutionaryTravellingSalesman.java b/examples/src/java/main/org/uncommons/watchmaker/examples/travellingsalesman/EvolutionaryTravellingSalesman.java
index a1785a5..6814101 100644
--- a/examples/src/java/main/org/uncommons/watchmaker/examples/travellingsalesman/EvolutionaryTravellingSalesman.java
+++ b/examples/src/java/main/org/uncommons/watchmaker/examples/travellingsalesman/EvolutionaryTravellingSalesman.java
@@ -91,7 +91,7 @@ public class EvolutionaryTravellingSalesman implements TravellingSalesmanStrateg
      */
     public String getDescription()
     {
-        String selectionName = selectionStrategy.getClass().getSimpleName();
+        String selectionName = selectionStrategy.toString();
         return "Evolution (pop: " + populationSize + ", gen: " + generationCount
                 + ", elite: " + eliteCount + ", " + selectionName + ")";
     }
@@ -135,16 +135,16 @@ public class EvolutionaryTravellingSalesman implements TravellingSalesmanStrateg
                                                             new RouteEvaluator(distances),
                                                             selectionStrategy,
                                                             rng);
-        engine.addEvolutionObserver(new EvolutionObserver<List<String>>()
+        if (progressListener != null)
         {
-            public void populationUpdate(PopulationData<? extends List<String>> data)
+            engine.addEvolutionObserver(new EvolutionObserver<List<String>>()
             {
-                if (progressListener != null)
+                public void populationUpdate(PopulationData<? extends List<String>> data)
                 {
                     progressListener.updateProgress(((double) data.getGenerationNumber() + 1) / generationCount * 100);
                 }
-            }
-        });
+            });
+        }
         return engine.evolve(populationSize,
                              eliteCount,
                              new GenerationCount(generationCount));
diff --git a/framework/framework.iml b/framework/framework.iml
new file mode 100644
index 0000000..82c64ca
--- /dev/null
+++ b/framework/framework.iml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_6" inherit-compiler-output="false">
+    <output url="file://$MODULE_DIR$/target/classes" />
+    <output-test url="file://$MODULE_DIR$/target/test-classes" />
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src/java/main" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/java/test" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/target" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Maven: org.uncommons.maths:uncommons-maths:1.2.2" level="project" />
+    <orderEntry type="library" name="Maven: jfree:jcommon:1.0.12" level="project" />
+    <orderEntry type="library" name="Maven: jfree:jfreechart:1.0.8" level="project" />
+    <orderEntry type="library" name="Maven: com.google.collections:google-collections:1.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.testng:testng:6.2.1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: junit:junit:3.8.1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.beanshell:bsh:2.0b4" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: com.beust:jcommander:1.12" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.yaml:snakeyaml:1.6" level="project" />
+  </component>
+</module>
+
diff --git a/framework/nb-configuration.xml b/framework/nb-configuration.xml
new file mode 100644
index 0000000..ae35717
--- /dev/null
+++ b/framework/nb-configuration.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-shared-configuration>
+    <!--
+This file contains additional configuration written by modules in the NetBeans IDE.
+The configuration is intended to be shared among all the users of project and
+therefore it is assumed to be part of version control checkout.
+Without this configuration present, some functionality in the IDE may be limited or fail altogether.
+-->
+    <properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
+        <!--
+Properties that influence various parts of the IDE, especially code formatting and the like. 
+You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
+That way multiple projects can share the same settings (useful for formatting rules for example).
+Any value defined here will override the pom.xml file value but is only applicable to the current project.
+-->
+        <org-netbeans-modules-editor-indent.CodeStyle.usedProfile>project</org-netbeans-modules-editor-indent.CodeStyle.usedProfile>
+        <org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab>2</org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab>
+        <org-netbeans-modules-editor-indent.CodeStyle.project.tab-size>2</org-netbeans-modules-editor-indent.CodeStyle.project.tab-size>
+        <org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width>2</org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width>
+        <org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs>false</org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs>
+        <org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width>100</org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width>
+        <org-netbeans-modules-editor-indent.CodeStyle.project.text-line-wrap>words</org-netbeans-modules-editor-indent.CodeStyle.project.text-line-wrap>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.blankLinesAfterClassHeader>0</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.blankLinesAfterClassHeader>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsKeyword>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsKeyword>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantIfBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantIfBraces>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantForBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantForBraces>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceBeforeColon>false</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceBeforeColon>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTryResources>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTryResources>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodParams>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodParams>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTernaryOps>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTernaryOps>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsKeyword>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsKeyword>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaces-per-tab>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaces-per-tab>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssignOps>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssignOps>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeElseOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeElseOnNewLine>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapEnumConstants>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapEnumConstants>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeFinallyOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeFinallyOnNewLine>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeCatchOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeCatchOnNewLine>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.classDeclBracePlacement>NEW_LINE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.classDeclBracePlacement>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodCallArgs>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodCallArgs>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapDisjunctiveCatchTypes>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapDisjunctiveCatchTypes>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapChainedMethodCalls>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapChainedMethodCalls>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapFor>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapFor>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapArrayInit>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapArrayInit>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssert>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssert>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapBinaryOps>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapBinaryOps>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAnnotationArgs>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAnnotationArgs>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.indent-shift-width>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.indent-shift-width>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeWhileOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeWhileOnNewLine>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.text-limit-width>100</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.text-limit-width>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsList>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsList>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.generateParagraphTagOnBlankLines>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.generateParagraphTagOnBlankLines>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantWhileBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantWhileBraces>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.tab-size>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.tab-size>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.continuationIndentSize>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.continuationIndentSize>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.expand-tabs>false</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.expand-tabs>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.otherBracePlacement>NEW_LINE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.otherBracePlacement>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.methodDeclBracePlacement>NEW_LINE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.methodDeclBracePlacement>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantDoWhileBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantDoWhileBraces>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsList>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsList>
+    </properties>
+</project-shared-configuration>
diff --git a/framework/pom.xml b/framework/pom.xml
index 842a11e..51ecd7b 100644
--- a/framework/pom.xml
+++ b/framework/pom.xml
@@ -18,34 +18,35 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 
-  <modelVersion>4.0.0</modelVersion>
-  <name>Watchmaker Framework</name>
-  <groupId>org.uncommons.watchmaker</groupId>
-  <artifactId>watchmaker-framework</artifactId>
-  <version>@VERSION@</version>
-  <packaging>jar</packaging>
-  <url>http://watchmaker.uncommons.org</url>
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.uncommons.watchmaker</groupId>
+		<artifactId>watchmaker</artifactId>
+		<version>0.7.2</version>
+	</parent>
+	<artifactId>watchmaker-framework</artifactId>
 
-  <licenses>
-    <license>
-      <name>Apache License, Version 2.0</name>
-      <url>http://www.apache.org/licenses/LICENSE-2.0.html</url>
-      <distribution>repo</distribution>
-    </license>
-  </licenses>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.uncommons.maths</groupId>
-      <artifactId>uncommons-maths</artifactId>
-      <version>1.2.1</version>
-    </dependency>
-    
-    <dependency>
-      <groupId>com.google.collections</groupId>
-      <artifactId>google-collections</artifactId>
-      <version>1.0</version>
-    </dependency>    
-  </dependencies>
-  
+	<dependencies>
+		<dependency>
+			<groupId>org.uncommons.maths</groupId>
+			<artifactId>uncommons-maths</artifactId>
+			<version>1.2.2</version>
+		</dependency>
+		<dependency>
+			<groupId>com.google.collections</groupId>
+			<artifactId>google-collections</artifactId>
+			<version>1.0</version>
+		</dependency>
+		<dependency>
+			<groupId>org.testng</groupId>
+			<artifactId>testng</artifactId>
+			<version>6.2.1</version>
+			<scope>test</scope>
+		</dependency>
+	</dependencies>  
+	
+	<build>
+		<sourceDirectory>src/java/main</sourceDirectory>
+		<testSourceDirectory>src/java/test</testSourceDirectory>
+	</build>
 </project>
diff --git a/framework/src/java/main/org/uncommons/watchmaker/framework/EvolutionaryOperator.java b/framework/src/java/main/org/uncommons/watchmaker/framework/EvolutionaryOperator.java
index a0bdc8e..e733f06 100644
--- a/framework/src/java/main/org/uncommons/watchmaker/framework/EvolutionaryOperator.java
+++ b/framework/src/java/main/org/uncommons/watchmaker/framework/EvolutionaryOperator.java
@@ -19,9 +19,15 @@ import java.util.List;
 import java.util.Random;
 
 /**
- * An evolutionary operator is a function that takes a population of
+ * <p>An evolutionary operator is a function that takes a population of
  * candidates as an argument and returns a new population that is the
- * result of applying a transformation to the original population.
+ * result of applying a transformation to the original population.</p>
+ * <p><strong>An implementation of this class must not modify any of
+ * the selected candidate objects passed in.</strong>  Doing so will
+ * affect the correct operation of the {@link EvolutionEngine}.  Instead
+ * the operator should create and return new candidate objects.  The
+ * operator is not required to create copies of unmodified individuals
+ * (for efficiency these may be returned directly).</p>
  * @param <T> The type of evolvable entity that this operator accepts.
  * @author Daniel Dyer
  */
@@ -44,7 +50,7 @@ public interface EvolutionaryOperator<T>
      * operators that process each candidate in isolation, such as mutation.
      * It should only be an issue for operators, such as cross-over, that
      * deal with multiple candidates in a single operation.</p>
-     * <p><strong>The operator should not modify any of the candidates passed
+     * <p><strong>The operator must not modify any of the candidates passed
      * in</strong>.  Instead it should return a list that contains evolved
      * copies of those candidates (umodified candidates can be included in
      * the results without having to be copied).</p>
diff --git a/framework/src/java/main/org/uncommons/watchmaker/framework/FitnessEvaluationWorker.java b/framework/src/java/main/org/uncommons/watchmaker/framework/FitnessEvaluationWorker.java
index 9c6b410..1a99efb 100644
--- a/framework/src/java/main/org/uncommons/watchmaker/framework/FitnessEvaluationWorker.java
+++ b/framework/src/java/main/org/uncommons/watchmaker/framework/FitnessEvaluationWorker.java
@@ -99,7 +99,7 @@ public class FitnessEvaluationWorker
 
     /**
      * A FitnessWorker cannot be garbage-collected if its thread pool has not been shutdown.
-     * This method, invoked on garabage collection (or maybe not at all), shuts down the thread
+     * This method, invoked on garbage collection (or maybe not at all), shuts down the thread
      * pool so that the threads can be released. 
      * @throws Throwable Any exception or error that occurs during finalisation.
      */
diff --git a/framework/src/java/main/org/uncommons/watchmaker/framework/SelectionStrategy.java b/framework/src/java/main/org/uncommons/watchmaker/framework/SelectionStrategy.java
index a91f0fa..929284b 100755
--- a/framework/src/java/main/org/uncommons/watchmaker/framework/SelectionStrategy.java
+++ b/framework/src/java/main/org/uncommons/watchmaker/framework/SelectionStrategy.java
@@ -39,7 +39,7 @@ public interface SelectionStrategy<T>
      * the number of distinct candidates to select, since the same individual may
      * potentially be selected more than once).
      * @param rng Source of randomness for stochastic selection strategies.
-     * @return A list containing the selected candidates.  Some individual canidates may
+     * @return A list containing the selected candidates.  Some individual candidates may
      * potentially have been selected multiple times.
      */
     <S extends T> List<S> select(List<EvaluatedCandidate<S>> population,
diff --git a/framework/src/java/main/org/uncommons/watchmaker/framework/islands/IslandEvolution.java b/framework/src/java/main/org/uncommons/watchmaker/framework/islands/IslandEvolution.java
index 300dce9..5f15e50 100644
--- a/framework/src/java/main/org/uncommons/watchmaker/framework/islands/IslandEvolution.java
+++ b/framework/src/java/main/org/uncommons/watchmaker/framework/islands/IslandEvolution.java
@@ -48,7 +48,7 @@ import org.uncommons.watchmaker.framework.termination.GenerationCount;
 public class IslandEvolution<T>
 {
     private final List<EvolutionEngine<T>> islands;
-    private final Migration migration;
+    private final Migration<? super T> migration;
     private final boolean naturalFitness;
     private final Random rng;
 
@@ -75,7 +75,7 @@ public class IslandEvolution<T>
      * @see #IslandEvolution(List, Migration, boolean, Random) 
      */
     public IslandEvolution(int islandCount,
-                           Migration migration,
+                           Migration<? super T> migration,
                            CandidateFactory<T> candidateFactory,
                            EvolutionaryOperator<T> evolutionScheme,
                            FitnessEvaluator<? super T> fitnessEvaluator,
@@ -109,7 +109,7 @@ public class IslandEvolution<T>
      * SelectionStrategy, Random)
      */
     public IslandEvolution(List<EvolutionEngine<T>> islands,
-                           Migration migration,
+                           Migration<? super T> migration,
                            boolean naturalFitness,
                            Random rng)
     {
diff --git a/framework/src/java/main/org/uncommons/watchmaker/framework/islands/Migration.java b/framework/src/java/main/org/uncommons/watchmaker/framework/islands/Migration.java
index e9b985f..30fb0e6 100644
--- a/framework/src/java/main/org/uncommons/watchmaker/framework/islands/Migration.java
+++ b/framework/src/java/main/org/uncommons/watchmaker/framework/islands/Migration.java
@@ -22,15 +22,15 @@ import org.uncommons.watchmaker.framework.EvaluatedCandidate;
 /**
  * Strategy interface for different ways of migrating individuals between islands
  * in {@link IslandEvolution}.
+ * @param <T> The type of the individual members of the island populations.
  * @author Daniel Dyer
  */
-public interface Migration
+public interface Migration<T>
 {
     /**
      * @param islandPopulations The populations of each island in the system.
      * @param migrantCount The number of individuals to move from each island.
      * @param rng A source of randomness.
-     * @param <T> The type of the individual members of the island populations.
      */
-    <T> void migrate(List<List<EvaluatedCandidate<T>>> islandPopulations, int migrantCount, Random rng);
+    <S extends T> void migrate(List<List<EvaluatedCandidate<S>>> islandPopulations, int migrantCount, Random rng);
 }
diff --git a/framework/src/java/main/org/uncommons/watchmaker/framework/islands/RandomMigration.java b/framework/src/java/main/org/uncommons/watchmaker/framework/islands/RandomMigration.java
new file mode 100644
index 0000000..06c4e4c
--- /dev/null
+++ b/framework/src/java/main/org/uncommons/watchmaker/framework/islands/RandomMigration.java
@@ -0,0 +1,67 @@
+//=============================================================================
+// Copyright 2006-2010 Daniel W. Dyer
+//
+// 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.uncommons.watchmaker.framework.islands;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Random;
+import org.uncommons.watchmaker.framework.EvaluatedCandidate;
+
+/**
+ * Migrates a fixed number of candidates away from each island.  Which individuals are migrated is determined
+ * randomly and which islands they move to is also random.  This contrasts with the more ordered migration offered
+ * by {@link RingMigration}.  If the migration count is greater than one, it is possible (probable) that migrants
+ * from the same island will be moved to different islands.  It is also possible that when a migrant's destination is
+ * randomly chosen, it gets sent back to the island that it came from.
+ * @author Daniel Dyer
+ */
+public class RandomMigration implements Migration<Object>
+{
+    /**
+     * Migrates a fixed number of candidates away from each island.  Which individuals are migrated is determined
+     * randomly and which islands they move to is also random.  If the migration count is greater than one, it is
+     * possible (probable) that migrants from the same island will be moved to different islands.  It is also possible
+     * that when a migrant's destination is randomly chosen, it gets sent back to the island that it came from.
+     * @param islandPopulations A list of the populations of each island.
+     * @param migrantCount The number of (randomly selected) individuals to be moved on from
+     * each island.
+     * @param rng A source of randomness.
+     * @param <S> The type of entity being evolved.
+     */
+    public <S extends Object> void migrate(List<List<EvaluatedCandidate<S>>> islandPopulations, int migrantCount, Random rng)
+    {
+        List<EvaluatedCandidate<S>> migrants = new ArrayList<EvaluatedCandidate<S>>(migrantCount * islandPopulations.size());
+        for (List<EvaluatedCandidate<S>> island : islandPopulations)
+        {
+            Collections.shuffle(island, rng);
+            for (int i = 0; i < migrantCount; i++)
+            {
+                migrants.add(island.remove(island.size() - 1));
+            }
+        }
+        Collections.shuffle(migrants);
+        Iterator<EvaluatedCandidate<S>> iterator = migrants.iterator();
+        for (List<EvaluatedCandidate<S>> island : islandPopulations)
+        {
+            for (int i = 0; i < migrantCount; i++)
+            {
+                island.add(iterator.next());
+            }
+        }
+    }
+}
diff --git a/framework/src/java/main/org/uncommons/watchmaker/framework/islands/RingMigration.java b/framework/src/java/main/org/uncommons/watchmaker/framework/islands/RingMigration.java
index ca31cf9..0db3996 100644
--- a/framework/src/java/main/org/uncommons/watchmaker/framework/islands/RingMigration.java
+++ b/framework/src/java/main/org/uncommons/watchmaker/framework/islands/RingMigration.java
@@ -27,7 +27,7 @@ import org.uncommons.watchmaker.framework.EvaluatedCandidate;
  * clockwise direction.  The individuals to be migrated are chosen completely at random.
  * @author Daniel Dyer
  */
-public class RingMigration implements Migration
+public class RingMigration implements Migration<Object>
 {
     /**
      * Migrates a fixed number of individuals from each island to the adjacent island.
@@ -37,25 +37,25 @@ public class RingMigration implements Migration
      * @param migrantCount The number of (randomly selected) individuals to be moved on from
      * each island.
      * @param rng A source of randomness.
-     * @param <T> The type of entity being evolved.
+     * @param <S> The type of entity being evolved.
      */
-    public <T> void migrate(List<List<EvaluatedCandidate<T>>> islandPopulations, int migrantCount, Random rng)
+    public <S extends Object> void migrate(List<List<EvaluatedCandidate<S>>> islandPopulations, int migrantCount, Random rng)
     {
         // The first batch of immigrants is from the last island to the first.
-        List<EvaluatedCandidate<T>> lastIsland = islandPopulations.get(islandPopulations.size() - 1);
+        List<EvaluatedCandidate<S>> lastIsland = islandPopulations.get(islandPopulations.size() - 1);
         Collections.shuffle(lastIsland, rng);
-        List<EvaluatedCandidate<T>> migrants = lastIsland.subList(lastIsland.size() - migrantCount, lastIsland.size());
+        List<EvaluatedCandidate<S>> migrants = lastIsland.subList(lastIsland.size() - migrantCount, lastIsland.size());
 
-        for (List<EvaluatedCandidate<T>> island : islandPopulations)
+        for (List<EvaluatedCandidate<S>> island : islandPopulations)
         {
             // Migrants from the last island are immigrants for this island.
-            List<EvaluatedCandidate<T>> immigrants = migrants;
+            List<EvaluatedCandidate<S>> immigrants = migrants;
             if (island != lastIsland) // We've already migrated individuals from the last island.
             {
                 // Select the migrants that will move to the next island to make room for the immigrants here.
                 // Randomise the population so that there is no bias concerning which individuals are migrated.
                 Collections.shuffle(island, rng);
-                migrants = new ArrayList<EvaluatedCandidate<T>>(island.subList(island.size() - migrantCount, island.size()));
+                migrants = new ArrayList<EvaluatedCandidate<S>>(island.subList(island.size() - migrantCount, island.size()));
             }
             // Copy the immigrants over the last members of the population (those that are themselves
             // migrating to the next island).
diff --git a/framework/src/java/main/org/uncommons/watchmaker/framework/termination/TargetFitness.java b/framework/src/java/main/org/uncommons/watchmaker/framework/termination/TargetFitness.java
index b3ffc81..26c3298 100644
--- a/framework/src/java/main/org/uncommons/watchmaker/framework/termination/TargetFitness.java
+++ b/framework/src/java/main/org/uncommons/watchmaker/framework/termination/TargetFitness.java
@@ -34,7 +34,7 @@ public class TargetFitness implements TerminationCondition
      * @param natural Whether fitness scores are natural or non-natural.  If fitness
      * is natural, the condition will be satisfied if any individual has a fitness
      * that is greater than or equal to the target fitness.  If fitness is non-natural,
-     * the condition will be satisified in any individual has a fitness that is less
+     * the condition will be satisfied in any individual has a fitness that is less
      * than or equal to the target fitness.
      * @see org.uncommons.watchmaker.framework.FitnessEvaluator
      */
diff --git a/framework/src/java/test/org/uncommons/watchmaker/framework/EvolutionStrategyEngineTest.java b/framework/src/java/test/org/uncommons/watchmaker/framework/EvolutionStrategyEngineTest.java
index 6901155..f07c354 100644
--- a/framework/src/java/test/org/uncommons/watchmaker/framework/EvolutionStrategyEngineTest.java
+++ b/framework/src/java/test/org/uncommons/watchmaker/framework/EvolutionStrategyEngineTest.java
@@ -36,7 +36,9 @@ public class EvolutionStrategyEngineTest
                                                                                        true,
                                                                                        1,
                                                                                        FrameworkTestUtils.getRNG());
+        @SuppressWarnings("unchecked")
         List<EvaluatedCandidate<Integer>> population = Arrays.asList(new EvaluatedCandidate<Integer>(1, 1));
+
         List<EvaluatedCandidate<Integer>> evolvedPopulation
             = engine.nextEvolutionStep(population, 0, FrameworkTestUtils.getRNG());
         assert evolvedPopulation.size() == 1 : "Population size should be 1, is " + evolvedPopulation.size();
@@ -54,7 +56,9 @@ public class EvolutionStrategyEngineTest
                                                                                        false,
                                                                                        1,
                                                                                        FrameworkTestUtils.getRNG());
+        @SuppressWarnings("unchecked")
         List<EvaluatedCandidate<Integer>> population = Arrays.asList(new EvaluatedCandidate<Integer>(1, 1));
+        
         List<EvaluatedCandidate<Integer>> evolvedPopulation
             = engine.nextEvolutionStep(population, 0, FrameworkTestUtils.getRNG());
         assert evolvedPopulation.size() == 1 : "Population size should be 1, is " + evolvedPopulation.size();
diff --git a/framework/src/java/test/org/uncommons/watchmaker/framework/GenerationalEvolutionEngineTest.java b/framework/src/java/test/org/uncommons/watchmaker/framework/GenerationalEvolutionEngineTest.java
index 1da7e9e..6622229 100644
--- a/framework/src/java/test/org/uncommons/watchmaker/framework/GenerationalEvolutionEngineTest.java
+++ b/framework/src/java/test/org/uncommons/watchmaker/framework/GenerationalEvolutionEngineTest.java
@@ -146,7 +146,7 @@ public class GenerationalEvolutionEngineTest
     @Test(expectedExceptions = IllegalStateException.class)
     public void testGetSatisfiedTerminationConditionsBeforeStart()
     {
-        // Should throw an IllegalStateException because evolution has started, let alone terminated.
+        // Should throw an IllegalStateException because evolution hasn't started, let alone terminated.
         engine.getSatisfiedTerminationConditions();
     }
 
diff --git a/framework/src/java/test/org/uncommons/watchmaker/framework/islands/IslandEvolutionTest.java b/framework/src/java/test/org/uncommons/watchmaker/framework/islands/IslandEvolutionTest.java
index 98fc00d..db8c792 100644
--- a/framework/src/java/test/org/uncommons/watchmaker/framework/islands/IslandEvolutionTest.java
+++ b/framework/src/java/test/org/uncommons/watchmaker/framework/islands/IslandEvolutionTest.java
@@ -123,7 +123,7 @@ public class IslandEvolutionTest
                                                                                 new DummyFitnessEvaluator(),
                                                                                 new RouletteWheelSelection(),
                                                                                 FrameworkTestUtils.getRNG());
-        // Should throw an IllegalStateException because evolution has started, let alone terminated.
+        // Should throw an IllegalStateException because evolution hasn't started, let alone terminated.
         islandEvolution.getSatisfiedTerminationConditions();
     }
 
diff --git a/framework/src/java/test/org/uncommons/watchmaker/framework/islands/MigrationTestUtils.java b/framework/src/java/test/org/uncommons/watchmaker/framework/islands/MigrationTestUtils.java
new file mode 100644
index 0000000..3564a31
--- /dev/null
+++ b/framework/src/java/test/org/uncommons/watchmaker/framework/islands/MigrationTestUtils.java
@@ -0,0 +1,55 @@
+//=============================================================================
+// Copyright 2006-2010 Daniel W. Dyer
+//
+// 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.uncommons.watchmaker.framework.islands;
+
+import org.uncommons.watchmaker.framework.EvaluatedCandidate;
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * Utility methods used by unit tests for migration strategies.
+ * @author Daniel Dyer
+ */
+class MigrationTestUtils
+{
+    private MigrationTestUtils()
+    {
+        // Prevents instantiation.
+    }
+
+
+    public static <T> List<EvaluatedCandidate<T>> createTestPopulation(T... members)
+    {
+        List<EvaluatedCandidate<T>> population = new ArrayList<EvaluatedCandidate<T>>(members.length);
+        for (T member : members)
+        {
+            population.add(new EvaluatedCandidate<T>(member, 0));
+        }
+        return population;
+    }
+
+
+    public static void testPopulationContents(List<EvaluatedCandidate<String>> actualPopulation,
+                                              String... expectedPopulation)
+    {
+        assert actualPopulation.size() == expectedPopulation.length : "Wrong population size after migration.";
+        for (int i = 0; i < actualPopulation.size(); i++)
+        {
+            assert actualPopulation.get(i).getCandidate().equals(expectedPopulation[i]) : "Wrong value at index " + i;
+        }
+    }
+
+}
diff --git a/framework/src/java/test/org/uncommons/watchmaker/framework/islands/RandomMigrationTest.java b/framework/src/java/test/org/uncommons/watchmaker/framework/islands/RandomMigrationTest.java
new file mode 100644
index 0000000..bbbbad5
--- /dev/null
+++ b/framework/src/java/test/org/uncommons/watchmaker/framework/islands/RandomMigrationTest.java
@@ -0,0 +1,67 @@
+//=============================================================================
+// Copyright 2006-2010 Daniel W. Dyer
+//
+// 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.uncommons.watchmaker.framework.islands;
+
+import java.util.Arrays;
+import java.util.List;
+import org.testng.annotations.Test;
+import org.uncommons.watchmaker.framework.EvaluatedCandidate;
+import org.uncommons.watchmaker.framework.FrameworkTestUtils;
+
+/**
+ * Unit test for the {@link RingMigration} class.
+ * @author Daniel Dyer
+ */
+public class RandomMigrationTest
+{
+    /**
+     * Make sure that nothing strange happens when there is no migration.
+     */
+    @Test
+    public void testZeroMigration()
+    {
+        Migration<Object> migration = new RandomMigration();
+        @SuppressWarnings("unchecked")
+        List<List<EvaluatedCandidate<String>>> islandPopulations = Arrays.asList(MigrationTestUtils.createTestPopulation("A", "A", "A"),
+                                                                                 MigrationTestUtils.createTestPopulation("B", "B", "B"),
+                                                                                 MigrationTestUtils.createTestPopulation("C", "C", "C"));
+        migration.migrate(islandPopulations, 0, FrameworkTestUtils.getRNG());
+        assert islandPopulations.size() == 3 : "Wrong number of populations after migration.";
+        MigrationTestUtils.testPopulationContents(islandPopulations.get(0), "A", "A", "A");
+        MigrationTestUtils.testPopulationContents(islandPopulations.get(1), "B", "B", "B");
+        MigrationTestUtils.testPopulationContents(islandPopulations.get(2), "C", "C", "C");
+    }
+
+
+    /**
+     * Make sure that nothing strange happens when the entire island is migrated.
+     */
+    @Test
+    public void testNonZeroMigration()
+    {
+        Migration<Object> migration = new RingMigration();
+        @SuppressWarnings("unchecked")
+        List<List<EvaluatedCandidate<String>>> islandPopulations = Arrays.asList(MigrationTestUtils.createTestPopulation("A", "A", "A"),
+                                                                                 MigrationTestUtils.createTestPopulation("B", "B", "B"),
+                                                                                 MigrationTestUtils.createTestPopulation("C", "C", "C"));
+        migration.migrate(islandPopulations, 3, FrameworkTestUtils.getRNG());
+        assert islandPopulations.size() == 3: "Wrong number of populations after migration.";
+        // Each population should still have 3 members (but it's not sure which members).
+        assert islandPopulations.get(0).size() == 3 : "Wrong population size.";
+        assert islandPopulations.get(1).size() == 3 : "Wrong population size.";
+        assert islandPopulations.get(2).size() == 3 : "Wrong population size.";
+    }
+}
diff --git a/framework/src/java/test/org/uncommons/watchmaker/framework/islands/RingMigrationTest.java b/framework/src/java/test/org/uncommons/watchmaker/framework/islands/RingMigrationTest.java
index 84c2abd..b1ab6a3 100644
--- a/framework/src/java/test/org/uncommons/watchmaker/framework/islands/RingMigrationTest.java
+++ b/framework/src/java/test/org/uncommons/watchmaker/framework/islands/RingMigrationTest.java
@@ -15,7 +15,6 @@
 //=============================================================================
 package org.uncommons.watchmaker.framework.islands;
 
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import org.testng.Reporter;
@@ -24,7 +23,7 @@ import org.uncommons.watchmaker.framework.EvaluatedCandidate;
 import org.uncommons.watchmaker.framework.FrameworkTestUtils;
 
 /**
- * Unit test for the custom operator used by island model evolution.
+ * Unit test for the {@link RingMigration} class.
  * @author Daniel Dyer
  */
 public class RingMigrationTest
@@ -35,16 +34,16 @@ public class RingMigrationTest
     @Test
     public void testZeroMigration()
     {
-        Migration migration = new RingMigration();
+        Migration<Object> migration = new RingMigration();
         @SuppressWarnings("unchecked")
-        List<List<EvaluatedCandidate<String>>> islandPopulations = Arrays.asList(createTestPopulation("A", "A", "A"),
-                                                                                 createTestPopulation("B", "B", "B"),
-                                                                                 createTestPopulation("C", "C", "C"));
+        List<List<EvaluatedCandidate<String>>> islandPopulations = Arrays.asList(MigrationTestUtils.createTestPopulation("A", "A", "A"),
+                                                                                 MigrationTestUtils.createTestPopulation("B", "B", "B"),
+                                                                                 MigrationTestUtils.createTestPopulation("C", "C", "C"));
         migration.migrate(islandPopulations, 0, FrameworkTestUtils.getRNG());
         assert islandPopulations.size() == 3 : "Wrong number of populations after migration.";
-        testPopulationContents(islandPopulations.get(0), "A", "A", "A");
-        testPopulationContents(islandPopulations.get(1), "B", "B", "B");
-        testPopulationContents(islandPopulations.get(2), "C", "C", "C");
+        MigrationTestUtils.testPopulationContents(islandPopulations.get(0), "A", "A", "A");
+        MigrationTestUtils.testPopulationContents(islandPopulations.get(1), "B", "B", "B");
+        MigrationTestUtils.testPopulationContents(islandPopulations.get(2), "C", "C", "C");
     }
 
 
@@ -54,38 +53,15 @@ public class RingMigrationTest
     @Test
     public void testFullMigration()
     {
-        Migration migration = new RingMigration();
+        Migration<Object> migration = new RingMigration();
         @SuppressWarnings("unchecked")
-        List<List<EvaluatedCandidate<String>>> islandPopulations = Arrays.asList(createTestPopulation("A", "A", "A"),
-                                                                                 createTestPopulation("B", "B", "B"),
-                                                                                 createTestPopulation("C", "C", "C"));
+        List<List<EvaluatedCandidate<String>>> islandPopulations = Arrays.asList(MigrationTestUtils.createTestPopulation("A", "A", "A"),
+                                                                                 MigrationTestUtils.createTestPopulation("B", "B", "B"),
+                                                                                 MigrationTestUtils.createTestPopulation("C", "C", "C"));
         migration.migrate(islandPopulations, 3, FrameworkTestUtils.getRNG());
         assert islandPopulations.size() == 3: "Wrong number of populations after migration.";
-        Reporter.log(islandPopulations.toString());
-        testPopulationContents(islandPopulations.get(0), "C", "C", "C");
-        testPopulationContents(islandPopulations.get(1), "A", "A", "A");
-        testPopulationContents(islandPopulations.get(2), "B", "B", "B");
-    }
-
-
-    private <T> List<EvaluatedCandidate<T>> createTestPopulation(T... members)
-    {
-        List<EvaluatedCandidate<T>> population = new ArrayList<EvaluatedCandidate<T>>(members.length);
-        for (T member : members)
-        {
-            population.add(new EvaluatedCandidate<T>(member, 0));
-        }
-        return population;
-    }
-
-
-    private void testPopulationContents(List<EvaluatedCandidate<String>> actualPopulation,
-                                        String... expectedPopulation)
-    {
-        assert actualPopulation.size() == expectedPopulation.length : "Wrong population size after migration.";
-        for (int i = 0; i < actualPopulation.size(); i++)
-        {
-            assert actualPopulation.get(i).getCandidate().equals(expectedPopulation[i]) : "Wrong value at index " + i;
-        }
+        MigrationTestUtils.testPopulationContents(islandPopulations.get(0), "C", "C", "C");
+        MigrationTestUtils.testPopulationContents(islandPopulations.get(1), "A", "A", "A");
+        MigrationTestUtils.testPopulationContents(islandPopulations.get(2), "B", "B", "B");
     }
 }
diff --git a/nb-configuration.xml b/nb-configuration.xml
new file mode 100644
index 0000000..e958b93
--- /dev/null
+++ b/nb-configuration.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-shared-configuration>
+    <!--
+This file contains additional configuration written by modules in the NetBeans IDE.
+The configuration is intended to be shared among all the users of project and
+therefore it is assumed to be part of version control checkout.
+Without this configuration present, some functionality in the IDE may be limited or fail altogether.
+-->
+    <properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
+        <!--
+Properties that influence various parts of the IDE, especially code formatting and the like. 
+You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
+That way multiple projects can share the same settings (useful for formatting rules for example).
+Any value defined here will override the pom.xml file value but is only applicable to the current project.
+-->
+        <org-netbeans-modules-editor-indent.CodeStyle.usedProfile>project</org-netbeans-modules-editor-indent.CodeStyle.usedProfile>
+        <org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab>2</org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab>
+        <org-netbeans-modules-editor-indent.CodeStyle.project.tab-size>2</org-netbeans-modules-editor-indent.CodeStyle.project.tab-size>
+        <org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width>2</org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width>
+        <org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs>false</org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs>
+        <org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width>100</org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width>
+        <org-netbeans-modules-editor-indent.CodeStyle.project.text-line-wrap>words</org-netbeans-modules-editor-indent.CodeStyle.project.text-line-wrap>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.blankLinesAfterClassHeader>0</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.blankLinesAfterClassHeader>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsKeyword>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsKeyword>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantIfBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantIfBraces>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantForBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantForBraces>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceBeforeColon>false</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceBeforeColon>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTryResources>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTryResources>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodParams>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodParams>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTernaryOps>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTernaryOps>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsKeyword>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsKeyword>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaces-per-tab>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaces-per-tab>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeElseOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeElseOnNewLine>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssignOps>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssignOps>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapEnumConstants>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapEnumConstants>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeCatchOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeCatchOnNewLine>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeFinallyOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeFinallyOnNewLine>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.classDeclBracePlacement>NEW_LINE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.classDeclBracePlacement>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapDisjunctiveCatchTypes>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapDisjunctiveCatchTypes>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodCallArgs>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodCallArgs>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapChainedMethodCalls>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapChainedMethodCalls>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapFor>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapFor>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapArrayInit>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapArrayInit>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssert>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssert>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapBinaryOps>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapBinaryOps>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAnnotationArgs>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAnnotationArgs>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeWhileOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeWhileOnNewLine>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.indent-shift-width>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.indent-shift-width>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.text-limit-width>100</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.text-limit-width>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsList>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsList>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.generateParagraphTagOnBlankLines>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.generateParagraphTagOnBlankLines>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantWhileBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantWhileBraces>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.tab-size>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.tab-size>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.continuationIndentSize>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.continuationIndentSize>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.otherBracePlacement>NEW_LINE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.otherBracePlacement>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.expand-tabs>false</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.expand-tabs>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.methodDeclBracePlacement>NEW_LINE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.methodDeclBracePlacement>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantDoWhileBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantDoWhileBraces>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsList>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsList>
+    </properties>
+</project-shared-configuration>
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..6698f38
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.sonatype.oss</groupId>
+		<artifactId>oss-parent</artifactId>
+		<version>7</version>
+	</parent>
+	<groupId>org.uncommons.watchmaker</groupId>
+	<artifactId>watchmaker</artifactId>
+	<version>0.7.2</version>
+	<packaging>pom</packaging>
+	<name>watchmaker</name>
+	<description>Watchmaker Framework - Root Project</description>
+	<url>http://watchmaker.uncommons.org</url>
+  
+	<licenses>
+		<license>
+			<name>Apache License, Version 2.0</name>
+			<url>http://www.apache.org/licenses/LICENSE-2.0.html</url>
+			<distribution>repo</distribution>
+		</license>
+	</licenses>
+	
+	<scm>
+		<url>https://github.com/dwdyer/watchmaker</url>
+		<connection>scm:git://github.com/dwdyer/watchmaker.git</connection>
+		<developerConnection>scm:git:ssh://git@github.com:dwdyer/watchmaker.git</developerConnection>
+	</scm>
+	
+	<developers>
+		<developer>
+			<id>dwdyer</id>
+			<name>Dan Dyer</name>
+			<roles>
+				<role>committer</role>
+			</roles>
+		</developer>
+		<developer>
+			<id>cowwoc</id>
+			<name>Gili Tzabari</name>
+			<roles>
+				<role>contributor</role>
+			</roles>
+		</developer>
+	</developers>
+
+	<modules>
+		<module>framework</module>
+		<module>swing</module>
+		<module>examples</module>
+	</modules>
+
+	<build>
+		<plugins>
+			<plugin>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>2.3.2</version>
+				<configuration>
+					<source>1.6</source>
+					<target>1.6</target>
+					<encoding>${project.build.sourceEncoding}</encoding>
+				</configuration>
+			</plugin>
+			<plugin>
+				<artifactId>maven-resources-plugin</artifactId>
+				<version>2.4.3</version>
+				<configuration>
+					<encoding>${project.build.sourceEncoding}</encoding>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+	</properties>
+</project>
\ No newline at end of file
diff --git a/swing/nb-configuration.xml b/swing/nb-configuration.xml
new file mode 100644
index 0000000..ae35717
--- /dev/null
+++ b/swing/nb-configuration.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-shared-configuration>
+    <!--
+This file contains additional configuration written by modules in the NetBeans IDE.
+The configuration is intended to be shared among all the users of project and
+therefore it is assumed to be part of version control checkout.
+Without this configuration present, some functionality in the IDE may be limited or fail altogether.
+-->
+    <properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
+        <!--
+Properties that influence various parts of the IDE, especially code formatting and the like. 
+You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
+That way multiple projects can share the same settings (useful for formatting rules for example).
+Any value defined here will override the pom.xml file value but is only applicable to the current project.
+-->
+        <org-netbeans-modules-editor-indent.CodeStyle.usedProfile>project</org-netbeans-modules-editor-indent.CodeStyle.usedProfile>
+        <org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab>2</org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab>
+        <org-netbeans-modules-editor-indent.CodeStyle.project.tab-size>2</org-netbeans-modules-editor-indent.CodeStyle.project.tab-size>
+        <org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width>2</org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width>
+        <org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs>false</org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs>
+        <org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width>100</org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width>
+        <org-netbeans-modules-editor-indent.CodeStyle.project.text-line-wrap>words</org-netbeans-modules-editor-indent.CodeStyle.project.text-line-wrap>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.blankLinesAfterClassHeader>0</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.blankLinesAfterClassHeader>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsKeyword>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsKeyword>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantIfBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantIfBraces>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantForBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantForBraces>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceBeforeColon>false</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaceBeforeColon>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTryResources>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTryResources>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodParams>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodParams>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTernaryOps>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapTernaryOps>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsKeyword>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsKeyword>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaces-per-tab>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaces-per-tab>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssignOps>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssignOps>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeElseOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeElseOnNewLine>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapEnumConstants>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapEnumConstants>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeFinallyOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeFinallyOnNewLine>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeCatchOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeCatchOnNewLine>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.classDeclBracePlacement>NEW_LINE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.classDeclBracePlacement>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodCallArgs>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapMethodCallArgs>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapDisjunctiveCatchTypes>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapDisjunctiveCatchTypes>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapChainedMethodCalls>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapChainedMethodCalls>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapFor>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapFor>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapArrayInit>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapArrayInit>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssert>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAssert>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapBinaryOps>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapBinaryOps>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAnnotationArgs>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapAnnotationArgs>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.indent-shift-width>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.indent-shift-width>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeWhileOnNewLine>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeWhileOnNewLine>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.text-limit-width>100</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.text-limit-width>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsList>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsList>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.generateParagraphTagOnBlankLines>true</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.generateParagraphTagOnBlankLines>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantWhileBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantWhileBraces>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.tab-size>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.tab-size>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.continuationIndentSize>2</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.continuationIndentSize>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.expand-tabs>false</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.expand-tabs>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.otherBracePlacement>NEW_LINE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.otherBracePlacement>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.methodDeclBracePlacement>NEW_LINE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.methodDeclBracePlacement>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantDoWhileBraces>LEAVE_ALONE</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.redundantDoWhileBraces>
+        <org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsList>WRAP_IF_LONG</org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsList>
+    </properties>
+</project-shared-configuration>
diff --git a/swing/pom.xml b/swing/pom.xml
index 0c35025..690f0db 100644
--- a/swing/pom.xml
+++ b/swing/pom.xml
@@ -18,40 +18,46 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 
-  <modelVersion>4.0.0</modelVersion>
-  <name>Watchmaker Framework</name>
-  <groupId>org.uncommons.watchmaker</groupId>
-  <artifactId>watchmaker-swing</artifactId>
-  <version>@VERSION@</version>
-  <packaging>jar</packaging>
-  <url>http://watchmaker.uncommons.org</url>
-
-  <licenses>
-    <license>
-      <name>Apache License, Version 2.0</name>
-      <url>http://www.apache.org/licenses/LICENSE-2.0.html</url>
-      <distribution>repo</distribution>
-    </license>
-  </licenses>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.uncommons.watchmaker</groupId>
-      <artifactId>watchmaker-framework</artifactId>
-      <version>@VERSION@</version>
-    </dependency>
-
-    <dependency>
-      <groupId>org.uncommons.maths</groupId>
-      <artifactId>uncommons-maths</artifactId>
-      <version>1.2</version>
-    </dependency>
-
-    <dependency>
-      <groupId>jfree</groupId>
-      <artifactId>jfreechart</artifactId>
-      <version>1.0.13</version>
-    </dependency>
-  </dependencies>
-
-</project>
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.uncommons.watchmaker</groupId>
+		<artifactId>watchmaker</artifactId>
+		<version>0.7.2</version>
+	</parent>
+	<artifactId>watchmaker-swing</artifactId>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>watchmaker-framework</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.uncommons.maths</groupId>
+			<artifactId>uncommons-maths</artifactId>
+			<version>1.2.2</version>
+		</dependency>
+		<dependency>
+			<groupId>jfree</groupId>
+			<artifactId>jfreechart</artifactId>
+			<version>1.0.13</version>
+		</dependency>
+		<dependency>
+			<groupId>org.testng</groupId>
+			<artifactId>testng</artifactId>
+			<version>6.2.1</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.easytesting</groupId>
+			<artifactId>fest-swing</artifactId>
+			<version>1.2.1</version>
+			<scope>test</scope>
+		</dependency>
+	</dependencies>
+    
+	<build>
+		<sourceDirectory>src/java/main</sourceDirectory>
+		<testSourceDirectory>src/java/test</testSourceDirectory>
+	</build>
+</project>
\ No newline at end of file
diff --git a/swing/src/java/main/org/uncommons/watchmaker/swing/SelectionStrategyControl.java b/swing/src/java/main/org/uncommons/watchmaker/swing/SelectionStrategyControl.java
index c8f9a5b..d9b60b5 100644
--- a/swing/src/java/main/org/uncommons/watchmaker/swing/SelectionStrategyControl.java
+++ b/swing/src/java/main/org/uncommons/watchmaker/swing/SelectionStrategyControl.java
@@ -159,5 +159,12 @@ public class SelectionStrategyControl<T> implements EvolutionControl
         {
             return delegate.select(population, naturalFitnessScores, selectionSize, rng);
         }
+
+
+        @Override
+        public String toString()
+        {
+            return delegate.toString();
+        }
     }
 }
diff --git a/swing/src/java/main/org/uncommons/watchmaker/swing/SwingEvolutionObserver.java b/swing/src/java/main/org/uncommons/watchmaker/swing/SwingEvolutionObserver.java
new file mode 100644
index 0000000..6e76daa
--- /dev/null
+++ b/swing/src/java/main/org/uncommons/watchmaker/swing/SwingEvolutionObserver.java
@@ -0,0 +1,78 @@
+package org.uncommons.watchmaker.swing;
+
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
+import org.uncommons.util.concurrent.ConfigurableThreadFactory;
+import org.uncommons.watchmaker.framework.EvolutionObserver;
+import org.uncommons.watchmaker.framework.PopulationData;
+
+/**
+ * Limits the update rate of a Swing-based {@link EvolutionObserver}.
+ * 
+ * @param <T> The population type.
+ * @author Gili Tzabari
+ */
+public class SwingEvolutionObserver<T> implements EvolutionObserver<T>
+{
+    private final EvolutionObserver<T> delegate;
+    private final long delay;
+    private final TimeUnit unit;
+    private final ConfigurableThreadFactory threadFactory = new ConfigurableThreadFactory("SwingEvolutionObserver",
+                                                                                          Thread.NORM_PRIORITY,
+                                                                                          true);
+    private final ScheduledExecutorService timer =  Executors.newScheduledThreadPool(1, threadFactory);
+
+    private final AtomicReference<PopulationData<? extends T>> latestPopulation
+        = new AtomicReference<PopulationData<? extends T>>();
+
+
+    /**
+     * Creates a new SwingEvolutionObserver.
+     * 
+     * @param delegate The underlying EvolutionObserver to update.
+     * @param delay The amount of time to wait before updating the underlying {@link EvolutionObserver}.
+     * @param unit The time unit of delay.
+     * @throws NullPointerException If delegate or unit are null.
+     * @throws IllegalArgumentException If delay is negative.
+     */
+    public SwingEvolutionObserver(EvolutionObserver<T> delegate, long delay, TimeUnit unit)
+    {
+        if (delegate == null)
+        {
+            throw new NullPointerException("delegate may not be null");
+        }
+        if (unit == null)
+        {
+            throw new NullPointerException("unit may not be null");
+        }
+        if (delay < 0)
+        {
+            throw new IllegalArgumentException("delay may not be negative: " + delay);
+        }
+        
+        this.delegate = delegate;
+        this.delay = delay;
+        this.unit = unit;
+    }
+
+
+    public void populationUpdate(PopulationData<? extends T> populationData)
+    {
+        if (latestPopulation.getAndSet(populationData) != null)
+        {
+            // An update is already scheduled.
+            return;
+        }
+        
+        // Schedule an update in 300ms.
+        timer.schedule(new Runnable()
+        {
+            public void run()
+            {
+                delegate.populationUpdate(latestPopulation.getAndSet(null));
+            }
+        }, delay, unit);
+    }
+}
diff --git a/swing/src/java/main/org/uncommons/watchmaker/swing/SwingIslandEvolutionObserver.java b/swing/src/java/main/org/uncommons/watchmaker/swing/SwingIslandEvolutionObserver.java
new file mode 100644
index 0000000..f840f82
--- /dev/null
+++ b/swing/src/java/main/org/uncommons/watchmaker/swing/SwingIslandEvolutionObserver.java
@@ -0,0 +1,98 @@
+package org.uncommons.watchmaker.swing;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
+import org.uncommons.util.concurrent.ConfigurableThreadFactory;
+import org.uncommons.watchmaker.framework.PopulationData;
+import org.uncommons.watchmaker.framework.islands.IslandEvolutionObserver;
+
+/**
+ * Limits the update rate of a Swing-based {@link IslandEvolutionObserver}.
+ * 
+ * @param <T> The population type.
+ * @author Gili Tzabari
+ */
+public class SwingIslandEvolutionObserver<T> implements IslandEvolutionObserver<T>
+{
+    private final IslandEvolutionObserver<T> delegate;
+    private final long delay;
+    private final TimeUnit unit;
+    private final ConfigurableThreadFactory threadFactory = new ConfigurableThreadFactory("SwingIslandEvolutionObserver",
+                                                                                          Thread.NORM_PRIORITY,
+                                                                                          true);
+    private final ScheduledExecutorService timer = Executors.newScheduledThreadPool(1, threadFactory);
+    private final AtomicReference<PopulationData<? extends T>> latestPopulation
+        = new AtomicReference<PopulationData<? extends T>>();
+    private final ConcurrentHashMap<Integer, PopulationData<? extends T>> latestIslandPopulation
+        = new ConcurrentHashMap<Integer, PopulationData<? extends T>>();
+
+    /**
+     * Creates a new SwingIslandEvolutionObserver.
+     * 
+     * @param delegate The underlying {@link IslandEvolutionObserver} to update.
+     * @param delay The amount of time to wait before updating the underlying {@link IslandEvolutionObserver}.
+     * @param unit The time unit of delay.
+     * @throws NullPointerException If delegate or unit are null.
+     * @throws IllegalArgumentException If delay is negative.
+     */
+    public SwingIslandEvolutionObserver(IslandEvolutionObserver<T> delegate, long delay, TimeUnit unit)
+    {
+        if (delegate == null)
+        {
+            throw new NullPointerException("delegate may not be null");
+        }
+        if (unit == null)
+        {
+            throw new NullPointerException("unit may not be null");
+        }
+        if (delay < 0)
+        {
+            throw new IllegalArgumentException("delay may not be negative: " + delay);
+        }
+        
+        this.delegate = delegate;
+        this.delay = delay;
+        this.unit = unit;
+    }
+
+
+    public void populationUpdate(PopulationData<? extends T> populationData)
+    {
+        if (latestPopulation.getAndSet(populationData) != null)
+        {
+            // An update is already scheduled.
+            return;
+        }
+        
+        // Schedule an update.
+        timer.schedule(new Runnable()
+        {
+            public void run()
+            {
+                delegate.populationUpdate(latestPopulation.getAndSet(null));
+            }
+        }, delay, unit);
+    }
+
+
+    public void islandPopulationUpdate(final int islandIndex, PopulationData<? extends T> populationData)
+    {
+        if (latestIslandPopulation.put(islandIndex, populationData) != null)
+        {
+            // An update is already scheduled.
+            return;
+        }
+        
+        // Schedule an update.
+        timer.schedule(new Runnable()
+        {
+            public void run()
+            {
+                delegate.islandPopulationUpdate(islandIndex, latestIslandPopulation.remove(islandIndex));
+            }
+        }, delay, unit);
+    }
+}
diff --git a/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/EvolutionMonitor.java b/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/EvolutionMonitor.java
index 936624f..d2c1930 100644
--- a/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/EvolutionMonitor.java
+++ b/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/EvolutionMonitor.java
@@ -20,6 +20,7 @@ import java.awt.Window;
 import java.lang.reflect.InvocationTargetException;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 import javax.swing.JComponent;
 import javax.swing.JDialog;
 import javax.swing.JFrame;
@@ -32,6 +33,7 @@ import org.uncommons.watchmaker.framework.PopulationData;
 import org.uncommons.watchmaker.framework.interactive.Renderer;
 import org.uncommons.watchmaker.framework.islands.IslandEvolutionObserver;
 import org.uncommons.watchmaker.swing.ObjectSwingRenderer;
+import org.uncommons.watchmaker.swing.SwingIslandEvolutionObserver;
 
 /**
  * The Evolution Monitor is a component that can be attached to an
@@ -128,7 +130,7 @@ public class EvolutionMonitor<T> implements IslandEvolutionObserver<T>
 
         FittestCandidateView<T> candidateView = new FittestCandidateView<T>(renderer);
         tabs.add("Fittest Individual", candidateView);
-        views.add(candidateView);
+        views.add(new SwingIslandEvolutionObserver<T>(candidateView, 300, TimeUnit.MILLISECONDS));
 
         PopulationFitnessView fitnessView = new PopulationFitnessView(islands);
         tabs.add(islands ? "Global Population" : "Population Fitness", fitnessView);
@@ -138,7 +140,7 @@ public class EvolutionMonitor<T> implements IslandEvolutionObserver<T>
         {
             IslandsView islandsView = new IslandsView();
             tabs.add("Island Populations", islandsView);
-            views.add(islandsView);
+            views.add(new SwingIslandEvolutionObserver<Object>(islandsView, 300, TimeUnit.MILLISECONDS));
         }
 
         JVMView jvmView = new JVMView();
@@ -146,7 +148,7 @@ public class EvolutionMonitor<T> implements IslandEvolutionObserver<T>
 
         StatusBar statusBar = new StatusBar(islands);
         monitorComponent.add(statusBar, BorderLayout.SOUTH);
-        views.add(statusBar);
+        views.add(new SwingIslandEvolutionObserver<Object>(statusBar, 300, TimeUnit.MILLISECONDS));
     }
 
 
diff --git a/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/FittestCandidateView.java b/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/FittestCandidateView.java
index a1fb16c..48e14eb 100644
--- a/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/FittestCandidateView.java
+++ b/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/FittestCandidateView.java
@@ -42,7 +42,6 @@ class FittestCandidateView<T> extends JPanel implements IslandEvolutionObserver<
     private final JScrollPane scroller = new JScrollPane();
 
     private T fittestCandidate = null;
-    private JComponent renderedCandidate = null;
 
     /**
      * Creates a Swing view that uses the specified renderer to display
@@ -67,11 +66,11 @@ class FittestCandidateView<T> extends JPanel implements IslandEvolutionObserver<
         scroller.setBorder(null);
         add(scroller, BorderLayout.CENTER);
 
-        // Set names for easier indentification in unit tests.
+        // Set names for easier identification in unit tests.
         fitnessLabel.setName("FitnessLabel");
     }
 
-    
+
     public void populationUpdate(final PopulationData<? extends T> populationData)
     {
         SwingUtilities.invokeLater(new Runnable()
@@ -87,7 +86,7 @@ class FittestCandidateView<T> extends JPanel implements IslandEvolutionObserver<
                 if (populationData.getBestCandidate() != fittestCandidate)
                 {
                     fittestCandidate = populationData.getBestCandidate();
-                    renderedCandidate = renderer.render(fittestCandidate);
+                    JComponent renderedCandidate = renderer.render(fittestCandidate);
                     scroller.setViewportView(renderedCandidate);
                 }
             }
@@ -97,6 +96,6 @@ class FittestCandidateView<T> extends JPanel implements IslandEvolutionObserver<
 
     public void islandPopulationUpdate(int islandIndex, final PopulationData<? extends T> populationData)
     {
-        // Do nothing.        
+        // Do nothing.
     }
 }
diff --git a/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/IslandsView.java b/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/IslandsView.java
index 07b27f3..acc45b9 100644
--- a/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/IslandsView.java
+++ b/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/IslandsView.java
@@ -32,6 +32,7 @@ import org.jfree.chart.axis.ValueAxis;
 import org.jfree.chart.plot.CategoryPlot;
 import org.jfree.chart.plot.DatasetRenderingOrder;
 import org.jfree.chart.plot.PlotOrientation;
+import org.jfree.chart.renderer.category.BarRenderer;
 import org.jfree.chart.renderer.category.StatisticalLineAndShapeRenderer;
 import org.jfree.data.category.DefaultCategoryDataset;
 import org.jfree.data.statistics.DefaultStatisticalCategoryDataset;
@@ -50,12 +51,13 @@ class IslandsView extends JPanel implements IslandEvolutionObserver<Object>
 
     private final DefaultCategoryDataset bestDataSet = new DefaultCategoryDataset();
     private final DefaultStatisticalCategoryDataset meanDataSet = new DefaultStatisticalCategoryDataset();
-
+    private final StatisticalLineAndShapeRenderer meanRenderer = new StatisticalLineAndShapeRenderer();
     private final JFreeChart chart;
 
     private final AtomicInteger islandCount = new AtomicInteger(0);
+    private final Object maxLock = new Object();
     private double max = 0;
-    private final StatisticalLineAndShapeRenderer meanRenderer = new StatisticalLineAndShapeRenderer();
+
 
 
     IslandsView()
@@ -70,6 +72,9 @@ class IslandsView extends JPanel implements IslandEvolutionObserver<Object>
                                             false, // Tooltips
                                             false); // URLs
         CategoryPlot plot = (CategoryPlot) chart.getPlot();
+        plot.getDomainAxis().setLowerMargin(0.02);
+        plot.getDomainAxis().setUpperMargin(0.02);
+        ((BarRenderer) plot.getRenderer()).setShadowVisible(false);
         plot.getRangeAxis().setAutoRange(false);
         plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);
 
@@ -173,11 +178,19 @@ class IslandsView extends JPanel implements IslandEvolutionObserver<Object>
                                 (Integer) islandIndex);
                 ValueAxis rangeAxis = ((CategoryPlot) chart.getPlot()).getRangeAxis();
                 // If the range is not sufficient to display all values, enlarge it.
-                max = Math.max(max, populationData.getBestCandidateFitness());
-                max = Math.max(max, populationData.getMeanFitness() + populationData.getFitnessStandardDeviation());
-                while (max > rangeAxis.getUpperBound())
+                synchronized (maxLock)
                 {
-                    rangeAxis.setUpperBound(rangeAxis.getUpperBound() * 2);
+                    max = Math.max(max, populationData.getBestCandidateFitness());
+                    max = Math.max(max, populationData.getMeanFitness() + populationData.getFitnessStandardDeviation());
+                    while (max > rangeAxis.getUpperBound())
+                    {
+                        rangeAxis.setUpperBound(rangeAxis.getUpperBound() * 2);
+                    }
+                    // If the range is much bigger than it needs to be, reduce it.
+                    while (max < rangeAxis.getUpperBound() / 4)
+                    {
+                        rangeAxis.setUpperBound(rangeAxis.getUpperBound() / 4);
+                    }
                 }
                 chart.setNotify(true);
             }
@@ -187,6 +200,9 @@ class IslandsView extends JPanel implements IslandEvolutionObserver<Object>
 
     public void populationUpdate(PopulationData<? extends Object> populationData)
     {
-        // Do nothing.
+        synchronized (maxLock)
+        {
+            max = 0;
+        }
     }
 }
diff --git a/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/StatusBar.java b/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/StatusBar.java
index 09b2f6f..51c6651 100644
--- a/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/StatusBar.java
+++ b/swing/src/java/main/org/uncommons/watchmaker/swing/evolutionmonitor/StatusBar.java
@@ -26,7 +26,7 @@ import org.uncommons.watchmaker.framework.islands.IslandEvolutionObserver;
 
 /**
  * Status bar component for the evolution monitor.  Can also be used separately to
- * provide basic status information without having to use the full evolution monitor.  
+ * provide basic status information without having to use the full evolution monitor.
  * @author Daniel Dyer
  */
 public class StatusBar extends Box implements IslandEvolutionObserver<Object>
@@ -37,6 +37,8 @@ public class StatusBar extends Box implements IslandEvolutionObserver<Object>
     private final JLabel elitismLabel = new JLabel("N/A", JLabel.RIGHT);
 
     private final AtomicInteger islandPopulationSize = new AtomicInteger(-1);
+    private long elapsedTime;
+    private long epochTime;
 
 
     /**
@@ -102,7 +104,9 @@ public class StatusBar extends Box implements IslandEvolutionObserver<Object>
                     }
                 }
                 generationsLabel.setText(String.valueOf(populationData.getGenerationNumber() + 1));
-                timeLabel.setText(formatTime(populationData.getElapsedTime()));
+                elapsedTime = populationData.getElapsedTime();
+                epochTime = 0;
+                timeLabel.setText(formatTime(elapsedTime));
             }
         });
     }
@@ -119,7 +123,13 @@ public class StatusBar extends Box implements IslandEvolutionObserver<Object>
         {
             public void run()
             {
-                timeLabel.setText(formatTime(populationData.getElapsedTime()));
+                // Only update the label if the time has advanced.  Sometimes, due to threading
+                // variations, later updates have shorter elapsed times.
+                if (populationData.getElapsedTime() > epochTime)
+                {
+                    epochTime = populationData.getElapsedTime();
+                    timeLabel.setText(formatTime(elapsedTime + epochTime));
+                }
             }
         });
     }
diff --git a/swing/swing.iml b/swing/swing.iml
new file mode 100644
index 0000000..09d2997
--- /dev/null
+++ b/swing/swing.iml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_6" inherit-compiler-output="false">
+    <output url="file://$MODULE_DIR$/target/classes" />
+    <output-test url="file://$MODULE_DIR$/target/test-classes" />
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src/java/main" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/java/test" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/target" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="framework" />
+    <orderEntry type="library" name="Maven: org.uncommons.maths:uncommons-maths:1.2.2" level="project" />
+    <orderEntry type="library" name="Maven: jfree:jcommon:1.0.12" level="project" />
+    <orderEntry type="library" name="Maven: jfree:jfreechart:1.0.13" level="project" />
+    <orderEntry type="library" name="Maven: com.google.collections:google-collections:1.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.testng:testng:6.2.1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: junit:junit:3.8.1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.beanshell:bsh:2.0b4" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: com.beust:jcommander:1.12" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.yaml:snakeyaml:1.6" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.easytesting:fest-swing:1.2.1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.easytesting:fest-assert:1.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.easytesting:fest-util:1.1.3" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.easytesting:fest-reflect:1.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.jcip:jcip-annotations:1.0" level="project" />
+  </component>
+</module>
+

Debdiff

[The following lists of changes regard files as different if they have different names, permissions or owners.]

Files in second set of .debs but not in first

-rw-r--r--  root/root   /usr/share/java/uncommons-watchmaker-framework-0.7.1+git20171206.1.33d9423+ds.jar
-rw-r--r--  root/root   /usr/share/java/uncommons-watchmaker-swing-0.7.1+git20171206.1.33d9423+ds.jar
-rw-r--r--  root/root   /usr/share/maven-repo/org/uncommons/watchmaker/watchmaker-framework/0.7.1+git20171206.1.33d9423+ds/watchmaker-framework-0.7.1+git20171206.1.33d9423+ds.pom
-rw-r--r--  root/root   /usr/share/maven-repo/org/uncommons/watchmaker/watchmaker-swing/0.7.1+git20171206.1.33d9423+ds/watchmaker-swing-0.7.1+git20171206.1.33d9423+ds.pom
lrwxrwxrwx  root/root   /usr/share/java/uncommons-watchmaker-framework.jar -> uncommons-watchmaker-framework-0.7.1+git20171206.1.33d9423+ds.jar
lrwxrwxrwx  root/root   /usr/share/java/uncommons-watchmaker-swing.jar -> uncommons-watchmaker-swing-0.7.1+git20171206.1.33d9423+ds.jar
lrwxrwxrwx  root/root   /usr/share/maven-repo/org/uncommons/watchmaker/watchmaker-framework/0.7.1+git20171206.1.33d9423+ds/watchmaker-framework-0.7.1+git20171206.1.33d9423+ds.jar -> ../../../../../../java/uncommons-watchmaker-framework-0.7.1+git20171206.1.33d9423+ds.jar
lrwxrwxrwx  root/root   /usr/share/maven-repo/org/uncommons/watchmaker/watchmaker-framework/debian/watchmaker-framework-debian.jar -> ../../../../../../java/uncommons-watchmaker-framework-0.7.1+git20171206.1.33d9423+ds.jar
lrwxrwxrwx  root/root   /usr/share/maven-repo/org/uncommons/watchmaker/watchmaker-swing/0.7.1+git20171206.1.33d9423+ds/watchmaker-swing-0.7.1+git20171206.1.33d9423+ds.jar -> ../../../../../../java/uncommons-watchmaker-swing-0.7.1+git20171206.1.33d9423+ds.jar
lrwxrwxrwx  root/root   /usr/share/maven-repo/org/uncommons/watchmaker/watchmaker-swing/debian/watchmaker-swing-debian.jar -> ../../../../../../java/uncommons-watchmaker-swing-0.7.1+git20171206.1.33d9423+ds.jar

Files in first set of .debs but not in second

-rw-r--r--  root/root   /usr/share/java/uncommons-watchmaker-framework-0.7.1.jar
-rw-r--r--  root/root   /usr/share/java/uncommons-watchmaker-swing-0.7.1.jar
-rw-r--r--  root/root   /usr/share/maven-repo/org/uncommons/watchmaker/watchmaker-framework/0.7.1/watchmaker-framework-0.7.1.pom
-rw-r--r--  root/root   /usr/share/maven-repo/org/uncommons/watchmaker/watchmaker-swing/0.7.1/watchmaker-swing-0.7.1.pom
lrwxrwxrwx  root/root   /usr/share/java/uncommons-watchmaker-framework.jar -> uncommons-watchmaker-framework-0.7.1.jar
lrwxrwxrwx  root/root   /usr/share/java/uncommons-watchmaker-swing.jar -> uncommons-watchmaker-swing-0.7.1.jar
lrwxrwxrwx  root/root   /usr/share/maven-repo/org/uncommons/watchmaker/watchmaker-framework/0.7.1/watchmaker-framework-0.7.1.jar -> ../../../../../../java/uncommons-watchmaker-framework-0.7.1.jar
lrwxrwxrwx  root/root   /usr/share/maven-repo/org/uncommons/watchmaker/watchmaker-framework/debian/watchmaker-framework-debian.jar -> ../../../../../../java/uncommons-watchmaker-framework-0.7.1.jar
lrwxrwxrwx  root/root   /usr/share/maven-repo/org/uncommons/watchmaker/watchmaker-swing/0.7.1/watchmaker-swing-0.7.1.jar -> ../../../../../../java/uncommons-watchmaker-swing-0.7.1.jar
lrwxrwxrwx  root/root   /usr/share/maven-repo/org/uncommons/watchmaker/watchmaker-swing/debian/watchmaker-swing-debian.jar -> ../../../../../../java/uncommons-watchmaker-swing-0.7.1.jar

No differences were encountered between the control files of package libuncommons-watchmaker-framework-java

No differences were encountered between the control files of package libuncommons-watchmaker-swing-java

More details

Full run details