diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index f58f6bddfc8d3fd3cf37a5748f4c0140d45c7ee2..95f12213d1b2456c71feded53e202c2e5868af73 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -35,6 +35,7 @@ You do this by adding the `-s` flag when you make the commit(s), e.g.
 
 ## Making your changes
 
+If you are not a committer on this project, please follow these steps to submit your changes:
 * Fork the repository on GitHub.
 * Create a new branch for your changes.
 * Make your changes.
@@ -44,7 +45,19 @@ You do this by adding the `-s` flag when you make the commit(s), e.g.
 * Use descriptive and meaningful commit messages.
 * If you have a lot of commits, squash them into a single commit.
 * Make sure you use the `-s` flag when committing as explained above.
-* Push your changes to your branch in your forked repository.
+* Push your changes to your branch in your forked repository and create a Pull Request.
+
+## Code quality requirements
+
+All submissions are reviewed for technical merit. In addition to a technical review, pull requests are reviewed for code quality to maintain a standard across the code base. This includes:
+* Reviewing tests to understand the client-facing API of the submission and its general functionality.
+* Insuring sufficient test coverage such that at least 80% (preferrably more) of the submission is executed by the tests.
+* Insuring that the code satisfies basic quality metrics in a code quality tool (linter).
+* Reviewing the general look and feel, including the format, of the submission.
+
+Generated classes, including those from annotation processors, Lombok, and other tools, may not need to have unit tests.
+
+The project committers reserve the right to ask for more tests and other improvements to quality for any submission.
 
 ## Submitting the changes
 
diff --git a/org.eclipse.ice.commands/README.md b/org.eclipse.ice.commands/README.md
index 25c5d5838fd2429e041af1c8553b697b82153049..2115c94139587fb70bd6825d6d0ccec04ed9b458 100644
--- a/org.eclipse.ice.commands/README.md
+++ b/org.eclipse.ice.commands/README.md
@@ -2,7 +2,7 @@
 
 This README serves as an overview of the commands package, which is a standalone maven package that can be used within or outside of ICE. The package provides the necessary API to set up and run jobs on either one's local computer or a remote host. Additionally, the API includes file transfer and file system browsing capabilities, with the option to move or copy files on the local host or remote host. It is suggested that users encode their file processing logic into a bash/python/powershell script to be run locally/remotely. For example, a remote job on a remote host B could be run from commands on local host A which executes a remote job on remote host C, assuming the script contains the necessary logic to connect remote host B to remote host C.
 
-Examples can be found in either the `src/test/java/org/eclipse/ice/tests/commands` directory or in the standalone package within ICE `org/eclipse/ice/demo/commands/`. 
+Examples can be found directly underneath this directory in`src/test/java/org/eclipse/ice/tests/commands` or in the standalone demo package within ICE `org.eclipse.ice.demo/src/org/eclipse/ice/demo/commands`. Other tests, that can serve as examples of remote command usage, can be found in `org.eclipse.ice.tests.integration/org.eclipse.ice.tests.commands`.
 
 
 ## Build Instructions
@@ -24,62 +24,12 @@ In both cases one can skip the tests by including `-DskipTests` in your build.
 All dependencies are noted in the `pom` file, and all but one are within maven central. The only non-centralized dependency is the ICE package `org.eclipse.ice.tests.data`. To install it, perform the following commands (after cloning the ICE repositiory) so that the Commands package can build successfully:
 
 ```shell
-$ cd org.eclipse.ice.tests
+$ cd org.eclipse.ice.data
 $ mvn clean install
 ```
 
-### Notes about tests
-The automated testing is performed with a dummy remote host, which has private credentials. Thus, if the tests are built with the package, a significant portion of the tests will fail due to the fact that the dummy remote host credentials are not distributed publicly. To solve this, one may enter any generic remote host credentials into the file `$TEST_DATA_PATH/commands/ice-remote-creds.txt` in the following order
-
-```
-username 
-password
-hostname
-```
-
-See the README in `org.eclipse.ice.tests/org.eclipse.ice.tests.data` for information regarding the `$TEST_DATA_PATH` environment variable; [this link](https://github.com/dbluhm/ice/blob/next/org.eclipse.ice.tests/org.eclipse.ice.tests.data/README.md) takes you to the README on the `next` branch.
-
-The automated tests will then grab the necessary credentials from this file to run. Any valid ssh connection will work. If you still find that the tests fail, ensure that the ssh connection you are using has been logged into before from your host computer such that there is a key fingerprint associated to that host in your `~/.ssh/known_hosts` file. The Commands package requires that this key exists in order for authentication to proceed, no matter what form of authentication you use. In the event that tests fail on a host that already exists in `known_hosts` (e.g. with the error message `server key did not validate`, try deleting your `known_hosts` file (or the entries in your `known_hosts` that correspond to the host you are trying to run the tests on), logging in again to re-establish a fingerprint, and running the tests again. 
-
-Alternatively, you can set `StrictHostKeyChecking` to false in the `ConnectionManager`, which is in general not advised as it is inherently unsecure. To do this for the static `ConnectionManager`, just write:
-
-```java
-ConnectionManagerFactory.getConnectionManager().setRequireStrictHostKeyChecking(false);
-
-```
-
-Note that this is also a way through which ssh validation can be performed in the package for running actual remote commands/file transfers.
-
-#### EmailHandler test
-To test the `EmailUpdateHandler` class, a similar file to the ssh credential file must be created. Instead, a file in the location `$TEST_DATA_PATH/commands/ice-email-creds.txt` must exist which contains the following information:
-
-```
-email@address
-password
-SmtpHost
-```
-
-The EmailHandler will send an email from your own address to the same address with updates on when the job finishes. In order for this to happen, the email address must be authenticated. In the case of the tests, and for CI purposes, these authentications are placed in the above text file. For developer use, one could simply enter this information as it is entered in EmailHandlerTest, or you could implement another method (e.g. through use of the text file).
-
-#### KeyGen Tests and Connections
-
-Connections may be established via a public/private key pair that is generated between the local and remote host. Commands can function with ECDSA or RSA type keys. To generate an RSA key, for example, use:
-
-```bash
-$ ssh-keygen -t rsa -m PEM
-$ ssh-copy-id -i ~/.ssh/keyname.pub username@hostname
-```
-
-Then you should be able to remotely login via `ssh -i /path/to/key username@hostname` without a password requirement.
-
-For the keygen connection tests to pass, you should also create a key to a remote host that the tests expect to find. This can be done with any arbitrary remote server that you have credential access to; however, the key must be named dummyhostkey and must exist in your home `.ssh` directory. In other words, the key must be here:
-
-```
-$HOME/.ssh/dummyhostkey
-```
-
-where `$HOME` is the result returned from `System.getProperty("user.home")`.
-
+### Test packages
+The tests are split into two separate directories to enable simplified compilation. Tests pertaining to local commands are available within this package, while the tests pertaining to remote commands are available in `org.eclipse.ice.tests.integration/org.eclipse.ice.tests.commands`. The remote tests require additional testing setup, which is why they are available in the integration testing suite. Please see [this link](https://github.com/eclipse/ice/tree/next/org.eclipse.ice.tests.integration/org.eclipse.ice.tests.commands) for further details.
 
 
 ## Commands API
diff --git a/org.eclipse.ice.data/pom.xml b/org.eclipse.ice.data/pom.xml
index e3730ffd752086fe398ba84212c1c2945655238c..e7e6ad63fafce31641fd74a5170942fb74bdd42e 100644
--- a/org.eclipse.ice.data/pom.xml
+++ b/org.eclipse.ice.data/pom.xml
@@ -29,6 +29,15 @@
 				<artifactId>maven-failsafe-plugin</artifactId>
 				<version>2.22.2</version>
 			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>3.8.0</version>
+				<configuration>
+					<source>11</source>
+					<target>11</target>
+				</configuration>
+			</plugin>
 		</plugins>
 	</build>
 
diff --git a/org.eclipse.ice.dev/org.eclipse.ice.dev.annotations.proxytest/src/test/java/org/eclipse/ice/dev/annotations/proxytest/JavascriptValidatorTest.java b/org.eclipse.ice.data/src/test/java/org/eclipse/ice/tests/data/JavascriptValidatorTest.java
similarity index 97%
rename from org.eclipse.ice.dev/org.eclipse.ice.dev.annotations.proxytest/src/test/java/org/eclipse/ice/dev/annotations/proxytest/JavascriptValidatorTest.java
rename to org.eclipse.ice.data/src/test/java/org/eclipse/ice/tests/data/JavascriptValidatorTest.java
index b9c20237b90aa06fb6cc7ca584a851670a1ff1d3..7f1958c38615039084dee470a9c940bc97f4b07d 100644
--- a/org.eclipse.ice.dev/org.eclipse.ice.dev.annotations.proxytest/src/test/java/org/eclipse/ice/dev/annotations/proxytest/JavascriptValidatorTest.java
+++ b/org.eclipse.ice.data/src/test/java/org/eclipse/ice/tests/data/JavascriptValidatorTest.java
@@ -1,4 +1,4 @@
-package org.eclipse.ice.dev.annotations.proxytest;
+package org.eclipse.ice.tests.data;
 
 import static org.junit.jupiter.api.Assertions.*;
 
diff --git a/org.eclipse.ice.dev/org.eclipse.ice.dev.annotations.proxytest/pom.xml b/org.eclipse.ice.dev/org.eclipse.ice.dev.annotations.proxytest/pom.xml
index ad337726c32b019f505278b3e4113273ec65994e..f420eb91658ab53484320d163950701db9b0441d 100644
--- a/org.eclipse.ice.dev/org.eclipse.ice.dev.annotations.proxytest/pom.xml
+++ b/org.eclipse.ice.dev/org.eclipse.ice.dev.annotations.proxytest/pom.xml
@@ -8,6 +8,11 @@
 		<version>3.0.0-SNAPSHOT</version>
 	</parent>
 	<artifactId>org.eclipse.ice.dev.annotations.proxytest</artifactId>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+	</properties>
+
 	<build>
 		<plugins>
 			<plugin>
@@ -15,13 +20,6 @@
 				<version>3.8.1</version>
 				<configuration>
 					<release>11</release>
-					<annotationProcessorPaths>
-						<path>
-							<groupId>org.eclipse.ice</groupId>
-							<artifactId>org.eclipse.ice.dev.annotations</artifactId>
-							<version>3.0.0-SNAPSHOT</version>
-						</path>
-					</annotationProcessorPaths>
 				</configuration>
 			</plugin>
 			<plugin>
diff --git a/org.eclipse.ice.renderer/pom.xml b/org.eclipse.ice.renderer/pom.xml
index 8d9dbef49d77b55ddd6d13dcc113212ede51815a..668bafb917efabd5d98c35b411a857b37068da0f 100644
--- a/org.eclipse.ice.renderer/pom.xml
+++ b/org.eclipse.ice.renderer/pom.xml
@@ -19,18 +19,6 @@
 				<version>3.8.1</version>
 				<configuration>
 					<release>11</release>
-					<annotationProcessorPaths>
-						<path>
-							<groupId>org.eclipse.ice</groupId>
-							<artifactId>org.eclipse.ice.dev.annotations</artifactId>
-							<version>3.0.0-SNAPSHOT</version>
-						</path>
-						<path>
-							<groupId>com.google.dagger</groupId>
-							<artifactId>dagger-compiler</artifactId>
-							<version>2.16</version>
-						</path>
-					</annotationProcessorPaths>
 				</configuration>
 			</plugin>
 			<plugin>
diff --git a/org.eclipse.ice.renderer/src/test/java/org/eclipse/ice/tests/renderer/DataElementTest.java b/org.eclipse.ice.renderer/src/test/java/org/eclipse/ice/tests/renderer/DataElementTest.java
index ae780c169e96926fb6d8545197880a305ac5515e..228e48e343950e9267a719d59c4272599383dcc4 100644
--- a/org.eclipse.ice.renderer/src/test/java/org/eclipse/ice/tests/renderer/DataElementTest.java
+++ b/org.eclipse.ice.renderer/src/test/java/org/eclipse/ice/tests/renderer/DataElementTest.java
@@ -322,6 +322,7 @@ class DataElementTest {
 		assertFalse(element.matches(null));
 
 		// Now check equality with a clone - therefore also confirming clone works
+		@SuppressWarnings("unchecked")
 		DataElement<String> elementClone = (DataElement<String>) element.clone();
 		// Check reflexivity first
 		assertEquals(element, element);
diff --git a/org.eclipse.ice.tests.integration/README.md b/org.eclipse.ice.tests.integration/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..8389d66894d72f8d43990e05ac680b733f31fbd6
--- /dev/null
+++ b/org.eclipse.ice.tests.integration/README.md
@@ -0,0 +1,3 @@
+# Integration Tests
+
+Tests associated to several packages in ICE can be found in the available subdirectories. These integration tests require additional setup. Please see the READMEs in the various subdirectories for more information.
\ No newline at end of file
diff --git a/org.eclipse.ice.tests.integration/org.eclipse.ice.tests.commands/.classpath b/org.eclipse.ice.tests.integration/org.eclipse.ice.tests.commands/.classpath
deleted file mode 100644
index 15f02af3341e5e258c5be41d422f18cbe1649c03..0000000000000000000000000000000000000000
--- a/org.eclipse.ice.tests.integration/org.eclipse.ice.tests.commands/.classpath
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" output="target/classes" path="src/main/java">
-		<attributes>
-			<attribute name="optional" value="true"/>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
-		<attributes>
-			<attribute name="optional" value="true"/>
-			<attribute name="maven.pomderived" value="true"/>
-			<attribute name="test" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
-		<attributes>
-			<attribute name="maven.pomderived" value="true"/>
-			<attribute name="test" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
-		<attributes>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
-		<attributes>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="src" path="target/generated-sources/annotations">
-		<attributes>
-			<attribute name="optional" value="true"/>
-			<attribute name="maven.pomderived" value="true"/>
-			<attribute name="ignore_optional_problems" value="true"/>
-			<attribute name="m2e-apt" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
-		<attributes>
-			<attribute name="optional" value="true"/>
-			<attribute name="maven.pomderived" value="true"/>
-			<attribute name="ignore_optional_problems" value="true"/>
-			<attribute name="m2e-apt" value="true"/>
-			<attribute name="test" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="output" path="target/classes"/>
-</classpath>
diff --git a/org.eclipse.ice.tests.integration/org.eclipse.ice.tests.commands/README.md b/org.eclipse.ice.tests.integration/org.eclipse.ice.tests.commands/README.md
index 497b05ec904afecfa8f79641f7cf16a580e7711e..c14b2cb6921a21dff6a23ebdfd5d14f0d872f7a5 100644
--- a/org.eclipse.ice.tests.integration/org.eclipse.ice.tests.commands/README.md
+++ b/org.eclipse.ice.tests.integration/org.eclipse.ice.tests.commands/README.md
@@ -1,3 +1,7 @@
+# Commands Integration Tests
+
+This README serves as additional information for setting up the more complicated tests for the Commands package. Additional information about Commands can be found in the ICE package `org.eclipse.ice.commands`. These tests can also serve as examples for how to use the Commands API.
+
 
 ### Dependencies
 All dependencies are noted in the `pom` file, and all but one are within maven central. The only non-centralized dependency is the ICE package `org.eclipse.ice.tests.data`. To install it, perform the following commands (after cloning the ICE repositiory) so that the Commands package can build successfully:
diff --git a/rse-renderer-client-test/frontend/src/Person.ts b/rse-renderer-client-test/frontend/src/Person.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ca5fea06326864595d509deb5779dcd43735a547
--- /dev/null
+++ b/rse-renderer-client-test/frontend/src/Person.ts
@@ -0,0 +1,20 @@
+/**
+ * Person DataElement.
+ * In the future, we hope to be able to generate data structures like this
+ * directly from DataElement Spec classes.
+ */
+
+import { DataElement } from "./data-element";
+
+export class Person extends DataElement {
+	age: number;
+	firstName: string;
+	lastName: string;
+
+	constructor() {
+		super();
+		this.age = -1;
+		this.firstName = "";
+		this.lastName = "";
+	}
+}
\ No newline at end of file
diff --git a/rse-renderer-client-test/frontend/src/data-element.ts b/rse-renderer-client-test/frontend/src/data-element.ts
index bc4ec7795fc1c1a0ec2194b6cf173c727ed9ba6a..61e5372ff8cb6ce7a8422514e545e42f57270a5a 100644
--- a/rse-renderer-client-test/frontend/src/data-element.ts
+++ b/rse-renderer-client-test/frontend/src/data-element.ts
@@ -4,14 +4,26 @@
  * *Move DataElement<T> to its ts file. It would be really nice to put this in the data structures project since it shadows a class there.
  * *Add a unit test?
  */
+import {v4 as uuidv4} from 'uuid';
 
-export class DataElement<T> {
+export class DataElement {
+    privateId: string;
+    id: number;
     name: string;
     description: string;
-    data!: T;
+    comment: string;
+    context: string;
+    required: boolean;
+    secret: boolean;
 
     constructor() {
+        this.privateId = uuidv4();
+        this.id = 0;
         this.name = 'name';
         this.description = 'description';
-    }    
+        this.comment = 'comment';
+        this.context = 'context';
+        this.required = false;
+        this.secret = true;
+    }
 }
\ No newline at end of file
diff --git a/rse-renderer-client-test/frontend/src/renderer.ts b/rse-renderer-client-test/frontend/src/renderer.ts
index 91a60e0bcf83af97c50b3279436d1f53b650ddbe..09470a8d1ad6223d8dbb1fc4f84e76449e5ae523 100644
--- a/rse-renderer-client-test/frontend/src/renderer.ts
+++ b/rse-renderer-client-test/frontend/src/renderer.ts
@@ -1,86 +1,123 @@
-import {css, customElement, html, LitElement, property} from 'lit-element';
+import {css, customElement, html, LitElement, property, TemplateResult} from 'lit-element';
 import '@vaadin/vaadin-text-field';
-import { DataElement } from './data-element'
+import '@vaadin/vaadin-checkbox';
+import { Person } from './Person';
+import { DataElement } from './data-element';
 
 /**
- * Tasks: 
- * *This class should be templated or take a function call back in place of updateDataElement and loadData.
+ * Tasks:
+ * *This class should be templated or take a function call back in place of
+ * updateDataElement and loadData.
  * *Add documentation as required.
  * *Remove console debug statements
- * *This is just an example so the rest doesn't matter much, (the rest being changing the render() function, etc.).
+ * *This is just an example so the rest doesn't matter much, (the rest being
+ * changing the render() function, etc.).
  */
 @customElement("renderer-template")
 class Renderer extends LitElement {
-  
-  /**
-   * This is the default data value. It is the empty string and indicates that the JSON has not yet been received from the server.
-   */
-  dataElement = new DataElement<string>();
+
+  person: Person = new Person();
 
   @property({type: String})
   dataElementJSON = '';
 
   static styles = css`
     h1 {
-      color: hotpink;
+      color: blue;
       text-transform: uppercase;
     }
   `;
 
   constructor() {
     super();
-    console.log("Constructed");
+  }
+
+  loadData() {
+    this.person = <Person> JSON.parse(this.dataElementJSON);
   }
 
   /**
-   * This operation updates the content of the template from the contents of the data element.
+   * Create an updater method for updating the objects field on form events.
+   * @param obj holding object of field
+   * @param field field for which an updater is generated
+   * @returns updater method
    */
-  updateDataElement(e: {target: HTMLInputElement}) {
-
-    console.log("dataElementJSON on update call = " + this.dataElementJSON);
-    console.log("dataElement on update call = " + this.dataElement);
-  
-    // First, the event data needs to be read into the local structure
-    this.dataElement.data = e.target.value;
-    // Second, dump into the JSON property
-    this.dataElementJSON = JSON.stringify(this.dataElement);
-    console.log("dataElementJSON = " + this.dataElementJSON);
-
-    // Notify the listeners of the change.
-    this.dispatchEvent(new CustomEvent('data-changed', {bubbles: true, composed: true, detail: e.target.value}))
+  fieldUpdater(obj: object, field: string):
+      (e: {target: HTMLInputElement}) => void
+  {
+    let that = this;
+    return function(e: {target: HTMLInputElement}) {
+      if (typeof Reflect.get(obj, field) === 'number') {
+        Reflect.set(obj, field, Number(e.target.value))
+      } else if (typeof Reflect.get(obj, field) === 'string') {
+        Reflect.set(obj, field, e.target.value);
+      } else if (typeof Reflect.get(obj, field) === 'boolean') {
+        Reflect.set(obj, field, e.target.checked);
+      }
+      that.dataElementJSON = JSON.stringify(that.person);
+      that.dispatchEvent(new CustomEvent(
+        'data-changed',
+        {bubbles: true, composed: true, detail: e.target.value}
+      ));
+    };
+  }
 
-    return;
+  /**
+   * Create input form element for the given field.
+   * @param obj holding object of field
+   * @param field field for which input is generated
+   * @returns html template result
+   */
+  fieldInput(obj: object, field: string): TemplateResult {
+    if (typeof Reflect.get(obj, field) === 'boolean') {
+      return html`
+        <vaadin-checkbox
+          value="${field}"
+          ?checked=${Reflect.get(obj, field)}
+          @change=${this.fieldUpdater(obj, field)}
+        >${field}</vaadin-checkbox>
+      `;
+    } else {
+      return html`
+        <vaadin-text-field
+          label="${field}"
+          .value=${Reflect.get(obj, field)}
+          @input=${this.fieldUpdater(obj, field)}
+        ></vaadin-text-field>
+      `;
+    }
   }
 
-  loadData() {
-    this.dataElement = <DataElement<string>> JSON.parse(this.dataElementJSON);
-    console.log("dEJ-ld = ");
-    console.log(this.dataElementJSON);
-    console.log("dataElement-ld = ")
-    console.log(this.dataElement);
-    console.log(this.dataElement.data);
+  /**
+   * Create a form for the passed DataElement.
+   *
+   * In this experiment, forms are generated by inspecting the data element.
+   * In the future, we hope to generate these forms directly from the DataElement
+   * Spec classes during Annotation Processing.
+   * @param element element for which a form will be generated
+   * @returns form html
+   */
+  dataElementForm(element: DataElement): TemplateResult {
+    let form = html``;
+    for (let field in element) {
+      form = html`${form}${this.fieldInput(element, field)}`;
+    }
+   return form;
   }
 
+  /**
+   * Render this LitElement.
+   */
   render() {
-    // Might clean this up a bit - remove some of the <h2> statements.
-
     return html`
       <script>${this.loadData()}</script>
-      <h1>Greetings ${this.dataElement.name}!</h1>
-      
+      <h1>Greetings ${this.person.age} year old ${this.person.firstName}!</h1>
+
       <div>
-        <vaadin-text-field 
-          label="Name" 
-          .value=${this.dataElement.data}
-          @input=${this.updateDataElement}
-          ></vaadin-text-field>
+        ${this.dataElementForm(this.person)}
       </div>
 
-      <h2>${this.dataElementJSON}</h2>
-      
-      <h2>${this.dataElement.description}</h2>
-      <h2>${this.dataElement.name}</h2>
+      <pre>${JSON.stringify(this.person, null, 2)}</pre>
     `;
   }
-
 }
\ No newline at end of file
diff --git a/rse-renderer-client-test/package-lock.json b/rse-renderer-client-test/package-lock.json
index bf97324c8d3691e3131cd23312df209815ef5ee5..780e7c340c5c78d6929108f611390b980c0e696e 100644
--- a/rse-renderer-client-test/package-lock.json
+++ b/rse-renderer-client-test/package-lock.json
@@ -1163,6 +1163,11 @@
       "integrity": "sha512-oVeL12C6gQS/GAExndigSaLxTrKpQPxewx9bOcwfvJiJge4rr7wNaph4J+ns5hrmIV2as5qxqN8YKthn9qh0jw==",
       "dev": true
     },
+    "@types/uuid": {
+      "version": "8.0.1",
+      "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.0.1.tgz",
+      "integrity": "sha512-2kE8rEFgJpbBAPw5JghccEevQb0XVU0tewF/8h7wPQTeCtoJ6h8qmBIwuzUVm2MutmzC/cpCkwxudixoNYDp1A=="
+    },
     "@vaadin/flow-deps": {
       "version": "file:target/frontend",
       "requires": {
@@ -9256,6 +9261,14 @@
       "requires": {
         "faye-websocket": "^0.10.0",
         "uuid": "^3.0.1"
+      },
+      "dependencies": {
+        "uuid": {
+          "version": "3.4.0",
+          "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+          "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+          "dev": true
+        }
       }
     },
     "sockjs-client": {
@@ -10098,10 +10111,9 @@
       "dev": true
     },
     "uuid": {
-      "version": "3.4.0",
-      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
-      "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
-      "dev": true
+      "version": "8.3.0",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.0.tgz",
+      "integrity": "sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ=="
     },
     "v8-compile-cache": {
       "version": "2.0.3",
@@ -10661,6 +10673,14 @@
       "requires": {
         "ansi-colors": "^3.0.0",
         "uuid": "^3.3.2"
+      },
+      "dependencies": {
+        "uuid": {
+          "version": "3.4.0",
+          "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+          "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+          "dev": true
+        }
       }
     },
     "webpack-merge": {
diff --git a/rse-renderer-client-test/package.json b/rse-renderer-client-test/package.json
index b5bd682c5343926281c0a0496d107ec59460b583..74e28261801d264bccbfe7bfac7257cb11877328 100644
--- a/rse-renderer-client-test/package.json
+++ b/rse-renderer-client-test/package.json
@@ -3,9 +3,11 @@
   "license": "UNLICENSED",
   "dependencies": {
     "@polymer/polymer": "3.2.0",
-    "@webcomponents/webcomponentsjs": "^2.2.10",
+    "@types/uuid": "^8.0.1",
     "@vaadin/flow-deps": "./target/frontend",
-    "lit-element": "^2.2.0"
+    "@webcomponents/webcomponentsjs": "^2.2.10",
+    "lit-element": "^2.2.0",
+    "uuid": "^8.3.0"
   },
   "devDependencies": {
     "copy-webpack-plugin": "5.1.0",
diff --git a/rse-renderer-client-test/pom.xml b/rse-renderer-client-test/pom.xml
index ae01c2976f79fe9c113040c085b2ff724465829b..91ff71433a303c3595fc580526721fe184a31510 100644
--- a/rse-renderer-client-test/pom.xml
+++ b/rse-renderer-client-test/pom.xml
@@ -159,6 +159,10 @@
 			<artifactId>javax.inject</artifactId>
 			<version>1</version>
 		</dependency>
+		<dependency>
+			<groupId>javax.annotation</groupId>
+			<artifactId>javax.annotation-api</artifactId>
+		</dependency>
 	</dependencies>
 
 	<build>
diff --git a/rse-renderer-client-test/src/main/java/gov/ornl/rse/renderer/client/test/DataFile.java b/rse-renderer-client-test/src/main/java/gov/ornl/rse/renderer/client/test/DataFile.java
deleted file mode 100644
index 3276a074aaa187726f8a5de8f5442b28e6c09e25..0000000000000000000000000000000000000000
--- a/rse-renderer-client-test/src/main/java/gov/ornl/rse/renderer/client/test/DataFile.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2020- UT-Battelle, LLC.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   Initial API and implementation and/or initial documentation - 
- *   Jay Jay Billings
- *******************************************************************************/
-package gov.ornl.rse.renderer.client.test;
-
-import org.eclipse.ice.renderer.DataElement;
-
-/**
- * @author Jay Jay Billings
- *
- */
-public class DataFile extends DataElement<String> {
-
-}
diff --git a/rse-renderer-client-test/src/main/java/gov/ornl/rse/renderer/client/test/GreetService.java b/rse-renderer-client-test/src/main/java/gov/ornl/rse/renderer/client/test/GreetService.java
deleted file mode 100644
index da2763ad4ac08a28bc82d0e4babbd94271ed3e7f..0000000000000000000000000000000000000000
--- a/rse-renderer-client-test/src/main/java/gov/ornl/rse/renderer/client/test/GreetService.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2020- UT-Battelle, LLC.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   Initial API and implementation and/or initial documentation - 
- *   Jay Jay Billings
- *******************************************************************************/
-package gov.ornl.rse.renderer.client.test;
-
-import java.io.Serializable;
-
-import org.springframework.stereotype.Service;
-
-@Service
-public class GreetService implements Serializable {
-
-    public String greet(String name) {
-        if (name == null || name.isEmpty()) {
-            return "Hello anonymous user";
-        } else {
-            return "Hello " + name;
-        }
-    }
-
-}
diff --git a/rse-renderer-client-test/src/main/java/gov/ornl/rse/renderer/client/test/IRendererClient.java b/rse-renderer-client-test/src/main/java/gov/ornl/rse/renderer/client/test/IRendererClient.java
index 28aaa1fb21baf51529db6c50f120eb8866290320..2226cc69ae2299a49a4e8a630da41d924eb9e467 100644
--- a/rse-renderer-client-test/src/main/java/gov/ornl/rse/renderer/client/test/IRendererClient.java
+++ b/rse-renderer-client-test/src/main/java/gov/ornl/rse/renderer/client/test/IRendererClient.java
@@ -11,12 +11,9 @@
  *******************************************************************************/
 package gov.ornl.rse.renderer.client.test;
 
-import java.io.Serializable;
-
 import org.eclipse.ice.data.IDataElement;
-import org.eclipse.ice.renderer.DataElement;
 
-public interface IRendererClient<T extends IDataElement> {
+public interface IRendererClient<T extends IDataElement<T>> {
 
 	/**
 	 * This operation sets the data that should be rendered.
diff --git a/rse-renderer-client-test/src/main/java/gov/ornl/rse/renderer/client/test/MainView.java b/rse-renderer-client-test/src/main/java/gov/ornl/rse/renderer/client/test/MainView.java
index d9bae7483a702a2a082169dc07504d8040c5cfec..6afdc56feb71149a936d4c68c1988f0feb4f339e 100644
--- a/rse-renderer-client-test/src/main/java/gov/ornl/rse/renderer/client/test/MainView.java
+++ b/rse-renderer-client-test/src/main/java/gov/ornl/rse/renderer/client/test/MainView.java
@@ -14,16 +14,10 @@ package gov.ornl.rse.renderer.client.test;
 import java.util.function.BiConsumer;
 
 import javax.annotation.PostConstruct;
-import javax.inject.Inject;
 
-import org.eclipse.ice.data.IDataElement;
-import org.eclipse.ice.renderer.DataElement;
-import org.eclipse.ice.renderer.JavascriptValidator;
 import org.eclipse.ice.renderer.Renderer;
 import org.eclipse.ice.renderer.Person;
 import org.eclipse.ice.renderer.PersonImplementation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
 
 import com.vaadin.flow.component.orderedlayout.VerticalLayout;
 import com.vaadin.flow.router.Route;
@@ -49,7 +43,8 @@ public class MainView extends VerticalLayout {
 		// Nothing to do here - just sample setup
 		Person ross = new PersonImplementation();
 		try {
-			ross.setName("Ross Whitfield");
+			ross.setFirstName("Ross");
+			ross.setLastName("Whitfield");
 			ross.setDescription("Ross' name described by a generated IDataElement");
 		} catch (Exception e) {
 			// TODO Auto-generated catch block
diff --git a/rse-renderer-client-test/src/main/java/gov/ornl/rse/renderer/client/test/VaadinRendererClient.java b/rse-renderer-client-test/src/main/java/gov/ornl/rse/renderer/client/test/VaadinRendererClient.java
index 0dce1f448bb3c65d0d86480ee44d36f746bf8862..88df838fd1271c311b2ef8b45de6b819da53d657 100644
--- a/rse-renderer-client-test/src/main/java/gov/ornl/rse/renderer/client/test/VaadinRendererClient.java
+++ b/rse-renderer-client-test/src/main/java/gov/ornl/rse/renderer/client/test/VaadinRendererClient.java
@@ -14,20 +14,13 @@
  *******************************************************************************/
 package gov.ornl.rse.renderer.client.test;
 
-import java.io.Serializable;
 
 import org.eclipse.ice.data.IDataElement;
-import org.eclipse.ice.renderer.DataElement;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.mongodb.util.JSON;
 import com.vaadin.flow.component.Component;
 import com.vaadin.flow.component.Tag;
 import com.vaadin.flow.component.dependency.JsModule;
 
-import elemental.json.JsonObject;
-
 /**
  * This is a base class for renderer clients tailored to Vaadin. It provides
  * the basic accessors for the data member.
@@ -36,7 +29,9 @@ import elemental.json.JsonObject;
  */
 @Tag("renderer-template")
 @JsModule("./src/renderer.ts")
-public class VaadinRendererClient<T extends IDataElement> extends Component implements IRendererClient<T> {
+public class VaadinRendererClient<T extends IDataElement<T>> extends Component implements IRendererClient<T> {
+
+	public static final String DATA_ELEMENT_JSON = "dataElementJSON";
 
 	/**
 	 * version UID
@@ -53,8 +48,8 @@ public class VaadinRendererClient<T extends IDataElement> extends Component impl
 	 */
 	public VaadinRendererClient() {
 		// This function updates the data every time the client posts and update.
-		getElement().addPropertyChangeListener("dataElementJSON", "data-changed", e -> {
-			String value = getElement().getProperty("dataElementJSON");
+		getElement().addPropertyChangeListener(DATA_ELEMENT_JSON, "data-changed", e -> {
+			String value = getElement().getProperty(DATA_ELEMENT_JSON);
 			data.fromJson(value);
 		});
 	}
@@ -68,7 +63,7 @@ public class VaadinRendererClient<T extends IDataElement> extends Component impl
 	@Override
 	public void setData(T otherData) {
 		data = otherData;
-		getElement().setProperty("dataElementJSON", data.toJson());
+		getElement().setProperty(DATA_ELEMENT_JSON, data.toJson());
 	}
 
 	/**