diff --git a/adapter/adapter-api/pom.xml b/adapter/adapter-api/pom.xml
index bd06040d7..098ebc9c3 100644
--- a/adapter/adapter-api/pom.xml
+++ b/adapter/adapter-api/pom.xml
@@ -1,78 +1,73 @@
 <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>
 	<name>SHRINE Adapter Client API</name>
 	<artifactId>shrine-adapter-client-api</artifactId>
 	<parent>
 		<groupId>net.shrine</groupId>
 		<artifactId>shrine-base</artifactId>
- 
-		<version>1.23.4.1-SNAPSHOT</version>
- 
-		 
- 
 		<relativePath>../../pom.xml</relativePath>
 	</parent>
 	<build>
 		<sourceDirectory>src/main/scala</sourceDirectory>
 	        <testSourceDirectory>src/test/scala</testSourceDirectory>
 		<plugins>
 			<plugin>
 				<groupId>net.alchim31.maven</groupId>
 				<artifactId>scala-maven-plugin</artifactId>
 			</plugin>
 		</plugins>
 	</build>
 	<dependencies>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-crypto</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-client</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-protocol</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<!-- Test Scoped dependencies -->
         <!-- For Jersey's in-process web server JAX-RS testing framework -->
         <dependency>
             <groupId>com.sun.jersey.jersey-test-framework</groupId>
             <artifactId>jersey-test-framework-http</artifactId>
             <version>${jersey-version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>com.sun.jersey.contribs</groupId>
             <artifactId>jersey-simple-server</artifactId>
             <version>${jersey-version}</version>
             <scope>test</scope>
         </dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-test-commons</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-client</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-config</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 		<!-- End Test Scoped dependencies -->
 	</dependencies>
 </project>
diff --git a/adapter/adapter-service/pom.xml b/adapter/adapter-service/pom.xml
index b3a30eddf..281fc4394 100644
--- a/adapter/adapter-service/pom.xml
+++ b/adapter/adapter-service/pom.xml
@@ -1,184 +1,188 @@
 <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>
 	<name>SHRINE Adapter</name>
 	<artifactId>shrine-adapter-service</artifactId>
 	<packaging>jar</packaging>
 	<parent>
 		<groupId>net.shrine</groupId>
 		<artifactId>shrine-base</artifactId>
  
+ 
 		<version>1.23.4.1-SNAPSHOT</version>
  
 		 
  
+ 
+		 
+ 
 		<relativePath>../../pom.xml</relativePath>
 	</parent>
 	<build>
 		<sourceDirectory>src/main/scala</sourceDirectory>
 		<testSourceDirectory>src/test/scala</testSourceDirectory>
 		<plugins>
 			<plugin>
 				<groupId>net.alchim31.maven</groupId>
 				<artifactId>scala-maven-plugin</artifactId>
 			</plugin>
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-jar-plugin</artifactId>
 				<executions>
 					<execution>
 						<goals>
 							<goal>test-jar</goal>
 						</goals>
 					</execution>
 				</executions>
 			</plugin>
 		</plugins>
 	</build>
 	<dependencies>
 		<dependency>
 			<groupId>org.squeryl</groupId>
 			<artifactId>squeryl_${scala-major-version}</artifactId>
 			<exclusions>
 				<!-- Exclude scalap, because it pulls in an old version of scala-compiler -->
 				<exclusion>
 					<groupId>org.scala-lang</groupId>
 					<artifactId>scalap</artifactId>
 				</exclusion>
 			</exclusions>
 		</dependency>
 		
 		<!-- Replace older transitive dependency pulled in by Squeryl -->
 		<dependency>
 			<groupId>org.scala-lang</groupId>
 			<artifactId>scalap</artifactId>
 			<version>${scala-version}</version>
 		</dependency>
 
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-auth</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-adapter-client-api</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-data-commons</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-crypto</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-crypto</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-client</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-protocol</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-config</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 
 		<dependency>
 			<groupId>com.typesafe.slick</groupId>
 			<artifactId>slick_2.11</artifactId>
 			<version>${slick-version}</version>
 		</dependency>
 		<dependency>
 			<groupId>org.suecarter</groupId>
 			<artifactId>freeslick_2.11</artifactId>
 			<version>${freeslick-version}</version>
 		</dependency>
 		<dependency>
 			<groupId>org.slf4j</groupId>
 			<artifactId>slf4j-log4j12</artifactId>
 			<version>${slf4j-version}</version>
 		</dependency>
 		<dependency>
 			<groupId>mysql</groupId>
 			<artifactId>mysql-connector-java</artifactId>
 		</dependency>
 
 		<!--Test scoped dependencies below this comment -->
 
 		<!-- Test Scoped dependencies -->
 		<!-- For Jersey's in-process web server JAX-RS testing framework -->
 		<dependency>
 			<groupId>com.sun.jersey.jersey-test-framework</groupId>
 			<artifactId>jersey-test-framework-http</artifactId>
 			<version>${jersey-version}</version>
 			<scope>test</scope>
 		</dependency>
 
 		<dependency>
 			<groupId>com.sun.jersey.contribs</groupId>
 			<artifactId>jersey-simple-server</artifactId>
 			<version>${jersey-version}</version>
 			<scope>test</scope>
 		</dependency>
 
 		<dependency>
 			<groupId>com.h2database</groupId>
 			<artifactId>h2</artifactId>
 			<scope>test</scope>
 		</dependency>
 
 		<dependency>
 			<groupId>org.easymock</groupId>
 			<artifactId>easymock</artifactId>
 			<scope>test</scope>
 		</dependency>
 
 		<dependency>
 			<groupId>org.springframework</groupId>
 			<artifactId>spring-jdbc</artifactId>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-util</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-test-commons</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-data-commons</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 	</dependencies>
 </project>
diff --git a/apps/dashboard-app/pom.xml b/apps/dashboard-app/pom.xml
index 5480678fc..8d36f20e1 100644
--- a/apps/dashboard-app/pom.xml
+++ b/apps/dashboard-app/pom.xml
@@ -1,207 +1,207 @@
 <?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">
     <parent>
         <artifactId>shrine-base</artifactId>
         <groupId>net.shrine</groupId>
- 
         <version>1.23.4.1-SNAPSHOT</version>
- 
-         
- 
         <relativePath>../../pom.xml</relativePath>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>dashboard-app</artifactId>
  
+ 
     <version>1.23.4.1-SNAPSHOT</version>
  
      
  
+ 
+     
+ 
     <name>Dashboard App</name>
     <packaging>jar</packaging>
     <build>
         <plugins>
             <plugin>
                 <groupId>net.alchim31.maven</groupId>
                 <artifactId>scala-maven-plugin</artifactId>
             </plugin>
             <plugin>
                 <groupId>com.github.eirslett</groupId>
                 <artifactId>frontend-maven-plugin</artifactId>
                 <!-- NB! Set <version> to the latest released version of frontend-maven-plugin, like in README.md -->
                 <version>1.0</version>
                 <!-- point to front end -->
                 <configuration>
                     <workingDirectory>src/main/js</workingDirectory>
                 </configuration>
                 <executions>
                     <execution>
                         <id>install node and npm</id>
                         <goals>
                             <goal>install-node-and-npm</goal>
                         </goals>
                         <configuration>
                             <nodeVersion>v6.10.3</nodeVersion>
                             <npmVersion>4.1.2</npmVersion>
                         </configuration>
                     </execution>
                     <execution>
                         <id>npm install</id>
                         <goals>
                             <goal>npm</goal>
                         </goals>
 
                         <!-- optional: default phase is "generate-resources" -->
                         <phase>generate-resources</phase>
                         <configuration>
                             <!-- optional: The default argument is actually
                             "install", so unless you need to run some other npm command,
                             you can remove this whole <configuration> section.
                             -->
                             <arguments>install -s</arguments>
                         </configuration>
                     </execution>
 
                     <execution>
                         <id>bower install</id>
                         <goals>
                             <goal>bower</goal>
                         </goals>
                         <configuration>
                             <!-- optional: The default argument is actually
                             "install", so unless you need to run some other npm command,
                             you can remove this whole <configuration> section.
                             -->
                             <arguments>install -s</arguments>
                         </configuration>
                     </execution>
                     <execution>
                         <id>grunt default</id>
                         <goals>
                             <goal>grunt</goal>
                         </goals>
                         <configuration>
                             <arguments>--no-color</arguments>
                         </configuration>
                     </execution>
                 </executions>
             </plugin>
         </plugins>
     </build>
     <dependencies>
         <dependency>
             <groupId>log4j</groupId>
             <artifactId>log4j</artifactId>
         </dependency>
         <dependency>
             <groupId>io.spray</groupId>
             <artifactId>spray-routing_2.11</artifactId>
             <version>${spray-version}</version>
         </dependency>
         <dependency>
             <groupId>io.spray</groupId>
             <artifactId>spray-servlet_2.11</artifactId>
             <version>${spray-version}</version>
         </dependency>
         <dependency>
             <groupId>io.spray</groupId>
             <artifactId>spray-util_2.11</artifactId>
             <version>${spray-version}</version>
         </dependency>
         <dependency>
             <groupId>io.spray</groupId>
             <artifactId>spray-testkit_2.11</artifactId>
             <version>${spray-version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>com.typesafe.akka</groupId>
             <artifactId>akka-actor_2.11</artifactId>
             <version>${akka-version}</version>
         </dependency>
         <dependency>
             <groupId>com.typesafe.akka</groupId>
             <artifactId>akka-slf4j_2.11</artifactId>
             <version>${akka-version}</version>
         </dependency>
         <dependency>
             <groupId>com.typesafe.akka</groupId>
             <artifactId>akka-testkit_2.11</artifactId>
             <version>${akka-testkit-version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.json4s</groupId>
             <artifactId>json4s-native_2.11</artifactId>
             <version>${json4s-version}</version>
         </dependency>
         <dependency>
             <groupId>com.typesafe.slick</groupId>
             <artifactId>slick_2.11</artifactId>
             <version>${slick-version}</version>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-log4j12</artifactId>
             <version>${slf4j-version}</version>
         </dependency>
         <dependency>
             <groupId>com.h2database</groupId>
             <artifactId>h2</artifactId>
             <version>${h2-version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-protocol</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-utility-commons</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-crypto</artifactId>
             <version>${project.version}</version>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-auth</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-data-commons</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
             <version>${mysql-version}</version>
         </dependency>
         <dependency>
             <groupId>io.jsonwebtoken</groupId>
             <artifactId>jjwt</artifactId>
             <version>${jjwt-version}</version>
         </dependency>
         <dependency>
             <groupId>net.sourceforge.jtds</groupId>
             <artifactId>jtds</artifactId>
             <version>${jtds-version}</version>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-adapter-client-api</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>com.typesafe</groupId>
             <artifactId>config</artifactId>
             <version>${typesafe-config-version}</version>
         </dependency>
     </dependencies>
 </project>
diff --git a/apps/dashboard-app/src/main/js/pom.xml b/apps/dashboard-app/src/main/js/pom.xml
index 30b3ee35b..3d242ec64 100644
--- a/apps/dashboard-app/src/main/js/pom.xml
+++ b/apps/dashboard-app/src/main/js/pom.xml
@@ -1,94 +1,90 @@
 <?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">
     <parent>
         <artifactId>shrine-base</artifactId>
         <groupId>net.shrine</groupId>
- 
         <version>1.23.4.1-SNAPSHOT</version>
- 
-         
- 
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>dashboard-app-client</artifactId>
     <packaging>pom</packaging>
     <build>
         <plugins>
             <plugin>
                 <groupId>com.github.eirslett</groupId>
                 <artifactId>frontend-maven-plugin</artifactId>
                 <!-- NB! Set <version> to the latest released version of frontend-maven-plugin, like in README.md -->
                 <version>0.0.23</version>
 
                 <executions>
 
                     <execution>
                         <id>install node and npm</id>
                         <goals>
                             <goal>install-node-and-npm</goal>
                         </goals>
                         <configuration>
                             <nodeVersion>v0.10.33</nodeVersion>
                             <npmVersion>2.7.4</npmVersion>
                         </configuration>
                     </execution>
 
                     <execution>
                         <id>npm install</id>
                         <goals>
                             <goal>npm</goal>
                         </goals>
 
                         <!-- optional: default phase is "generate-resources" -->
                         <phase>generate-resources</phase>
 
                         <configuration>
                             <!-- optional: The default argument is actually
                             "install", so unless you need to run some other npm command,
                             you can remove this whole <configuration> section.
                             -->
                             <arguments>install</arguments>
                         </configuration>
                     </execution>
 
                     <execution>
                         <id>bower install</id>
                         <goals>
                             <goal>bower</goal>
                         </goals>
 
                         <configuration>
                             <!-- optional: The default argument is actually
                             "install", so unless you need to run some other bower command,
                             you can remove this whole <configuration> section.
                             -->
                             <arguments>install</arguments>
                         </configuration>
                     </execution>
 
 
                     <execution>
                         <id>grunt default</id>
                         <goals>
                             <goal>grunt</goal>
                         </goals>
                         <configuration>
                             <arguments>--no-color</arguments>
                         </configuration>
                     </execution>
 
                     <!--execution>
                         <id>javascript tests</id>
                         <goals>
                             <goal>karma</goal>
                         </goals>
                         <configuration>
                             <karmaConfPath>src/test/javascript/karma.conf.ci.js</karmaConfPath>
                         </configuration>
                     </execution-->
 
                 </executions>
             </plugin>
         </plugins>
     </build>
 </project>
diff --git a/apps/dashboard-war/pom.xml b/apps/dashboard-war/pom.xml
index 30e08bc94..572cea3a1 100644
--- a/apps/dashboard-war/pom.xml
+++ b/apps/dashboard-war/pom.xml
@@ -1,41 +1,37 @@
 <?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">
     <parent>
         <artifactId>shrine-base</artifactId>
         <groupId>net.shrine</groupId>
- 
         <version>1.23.4.1-SNAPSHOT</version>
- 
-         
- 
         <relativePath>../../pom.xml</relativePath>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>dashboard-war</artifactId>
     <name>Dashboard War</name>
     <packaging>war</packaging>
     <build>
         <plugins>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-war-plugin</artifactId>
                 <configuration>
                     <warName>shrine-dashboard</warName>
                 </configuration>
             </plugin>
         </plugins>
     </build>
     <dependencies>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>dashboard-app</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-log4j12</artifactId>
             <version>${slf4j-version}</version>
             <scope>runtime</scope>
         </dependency>
     </dependencies>
 </project>
diff --git a/apps/meta-app/pom.xml b/apps/meta-app/pom.xml
index 1c24f3238..a38f07474 100644
--- a/apps/meta-app/pom.xml
+++ b/apps/meta-app/pom.xml
@@ -1,120 +1,118 @@
 <?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">
     <parent>
         <artifactId>shrine-base</artifactId>
         <groupId>net.shrine</groupId>
  
         <version>1.23.4.1-SNAPSHOT</version>
- 
-         
- 
+
         <relativePath>../../pom.xml</relativePath>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>meta-app</artifactId>
     <name>MetaData App</name>
     <packaging>jar</packaging>
 
     <build>
         <plugins>
             <plugin>
                 <groupId>net.alchim31.maven</groupId>
                 <artifactId>scala-maven-plugin</artifactId>
             </plugin>
         </plugins>
     </build>
 
     <dependencies>
         <dependency>
             <groupId>com.propensive</groupId>
             <artifactId>rapture-json_2.11</artifactId>
             <version>${rapture-version}</version>
         </dependency>
         <dependency>
             <groupId>com.propensive</groupId>
             <artifactId>rapture-json-jawn_2.11</artifactId>
         <version>${rapture-version}</version>
     </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-utility-commons</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-config</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-auth</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-qep</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>log4j</groupId>
             <artifactId>log4j</artifactId>
         </dependency>
         <dependency>
             <groupId>io.spray</groupId>
             <artifactId>spray-routing_2.11</artifactId>
             <version>${spray-version}</version>
         </dependency>
         <dependency>
             <groupId>io.spray</groupId>
             <artifactId>spray-servlet_2.11</artifactId>
             <version>${spray-version}</version>
         </dependency>
         <dependency>
             <groupId>io.spray</groupId>
             <artifactId>spray-util_2.11</artifactId>
             <version>${spray-version}</version>
         </dependency>
         <dependency>
             <groupId>io.spray</groupId>
             <artifactId>spray-testkit_2.11</artifactId>
             <version>${spray-version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>com.typesafe.akka</groupId>
             <artifactId>akka-actor_2.11</artifactId>
             <version>${akka-version}</version>
         </dependency>
         <dependency>
             <groupId>com.typesafe.akka</groupId>
             <artifactId>akka-slf4j_2.11</artifactId>
             <version>${akka-version}</version>
         </dependency>
         <dependency>
             <groupId>com.typesafe.akka</groupId>
             <artifactId>akka-testkit_2.11</artifactId>
             <version>${akka-testkit-version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.json4s</groupId>
             <artifactId>json4s-native_2.11</artifactId>
             <version>${json4s-version}</version>
         </dependency>
         <dependency>
             <groupId>com.typesafe</groupId>
             <artifactId>config</artifactId>
             <version>${typesafe-config-version}</version>
         </dependency>
         <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
             <version>${mysql-version}</version>
         </dependency>
         <dependency>
             <groupId>com.h2database</groupId>
             <artifactId>h2</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
 </project>
\ No newline at end of file
diff --git a/apps/meta-war/pom.xml b/apps/meta-war/pom.xml
index ff09a9ded..47e17e0fd 100644
--- a/apps/meta-war/pom.xml
+++ b/apps/meta-war/pom.xml
@@ -1,41 +1,39 @@
 <?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">
     <parent>
         <artifactId>shrine-base</artifactId>
         <groupId>net.shrine</groupId>
  
         <version>1.23.4.1-SNAPSHOT</version>
  
-         
- 
         <relativePath>../../pom.xml</relativePath>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>meta-war</artifactId>
     <name>MetaData War</name>
     <packaging>war</packaging>
     <build>
         <plugins>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-war-plugin</artifactId>
                 <configuration>
                     <warName>shrine-metadata</warName>
                 </configuration>
             </plugin>
         </plugins>
     </build>
     <dependencies>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>meta-app</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-log4j12</artifactId>
             <version>${slf4j-version}</version>
             <scope>runtime</scope>
         </dependency>
     </dependencies>
 </project>
\ No newline at end of file
diff --git a/apps/proxy/pom.xml b/apps/proxy/pom.xml
index 1bd898127..9dbf81578 100644
--- a/apps/proxy/pom.xml
+++ b/apps/proxy/pom.xml
@@ -1,56 +1,54 @@
 <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>
     <name>SHRINE Proxy</name>
     <artifactId>shrine-proxy</artifactId>
     <packaging>war</packaging>
     <parent>
         <groupId>net.shrine</groupId>
         <artifactId>shrine-base</artifactId>
  
         <version>1.23.4.1-SNAPSHOT</version>
  
-         
- 
         <relativePath>../../pom.xml</relativePath>
     </parent>
     <dependencies>
     	<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-test-commons</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
     	<dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-crypto</artifactId>
             <version>${project.version}</version>
         </dependency>
     	<dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-client</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-protocol</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>javax.servlet</groupId>
             <artifactId>javax.servlet-api</artifactId>
             <scope>provided</scope>
         </dependency>
     </dependencies>
     <build>
         <sourceDirectory>src/main/scala</sourceDirectory>
         <testSourceDirectory>src/test/scala</testSourceDirectory>
         <finalName>shrine-proxy</finalName>
         <plugins>
             <plugin>
                 <groupId>net.alchim31.maven</groupId>
                 <artifactId>scala-maven-plugin</artifactId>
             </plugin>
         </plugins>
     </build>
 </project>
diff --git a/apps/shrine-app/pom.xml b/apps/shrine-app/pom.xml
index 8ffd84724..c2436a70c 100644
--- a/apps/shrine-app/pom.xml
+++ b/apps/shrine-app/pom.xml
@@ -1,127 +1,125 @@
 <?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">
     <parent>
         <artifactId>shrine-base</artifactId>
         <groupId>net.shrine</groupId>
  
         <version>1.23.4.1-SNAPSHOT</version>
  
-         
- 
         <relativePath>../../pom.xml</relativePath>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>shrine-app</artifactId>
     <name>SHRINE App</name>
     <packaging>jar</packaging>
     <build>
         <sourceDirectory>src/main/scala</sourceDirectory>
         <testSourceDirectory>src/test/scala</testSourceDirectory>
         <plugins>
             <plugin>
                 <groupId>net.alchim31.maven</groupId>
                 <artifactId>scala-maven-plugin</artifactId>
             </plugin>
         </plugins>
     </build>
     <dependencies>
     	<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-test-commons</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-util</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-config</artifactId>
             <version>${project.version}</version>
         </dependency>
     	<dependency>
     		<groupId>net.shrine</groupId>
     		<artifactId>shrine-hms-core</artifactId>
     		<version>${project.version}</version>
     	</dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-qep</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-broadcaster-aggregator</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-broadcaster-service</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-adapter-service</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-crypto</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-ont-support</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-crypto</artifactId>
             <version>${project.version}</version>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-protocol</artifactId>
             <version>${project.version}</version>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-config</artifactId>
             <version>${project.version}</version>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-broadcaster-aggregator</artifactId>
             <version>${project.version}</version>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-client</artifactId>
             <version>${project.version}</version>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>com.h2database</groupId>
             <artifactId>h2</artifactId>
             <version>${h2-version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.json4s</groupId>
             <artifactId>json4s-native_2.11</artifactId>
             <version>${json4s-version}</version>
         </dependency>
     </dependencies>
 </project>
diff --git a/apps/steward-app/pom.xml b/apps/steward-app/pom.xml
index 10941e8ef..e68d32fed 100644
--- a/apps/steward-app/pom.xml
+++ b/apps/steward-app/pom.xml
@@ -1,195 +1,199 @@
 <?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">
     <parent>
         <artifactId>shrine-base</artifactId>
         <groupId>net.shrine</groupId>
  
+ 
         <version>1.23.4.1-SNAPSHOT</version>
  
          
  
+ 
+         
+ 
         <relativePath>../../pom.xml</relativePath>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>steward-app</artifactId>
     <name>Steward App</name>
     <packaging>jar</packaging>
     <build>
         <sourceDirectory>src/main/scala</sourceDirectory>
         <testSourceDirectory>src/test/scala</testSourceDirectory>
         <plugins>
             <plugin>
                 <groupId>net.alchim31.maven</groupId>
                 <artifactId>scala-maven-plugin</artifactId>
             </plugin>
            <plugin>
                 <!-- https://github.com/eirslett/frontend-maven-plugin -->
                 <groupId>com.github.eirslett</groupId>
                 <artifactId>frontend-maven-plugin</artifactId>
                 <!-- NB! Set <version> to the latest released version of frontend-maven-plugin, like in README.md -->
                 <version>1.0</version>
 
                 <!-- point it to JS -->
                 <configuration>
                     <workingDirectory>src/main/js</workingDirectory>
                 </configuration>
 
                 <executions>
 
                     <execution>
                         <id>install node and npm</id>
                         <goals>
                             <goal>install-node-and-npm</goal>
                         </goals>
                         <configuration>
                             <nodeVersion>v6.10.3</nodeVersion>
                             <npmVersion>4.1.2</npmVersion>
                         </configuration>
                     </execution>
 
                     <execution>
                         <id>npm install</id>
                         <goals>
                             <goal>npm</goal>
                         </goals>
 
                         <!-- optional: default phase is "generate-resources" -->
                         <phase>generate-resources</phase>
                         <configuration>
                             <!-- optional: The default argument is actually
                             "install", so unless you need to run some other npm command,
                             you can remove this whole <configuration> section.
                             -->
                             <arguments>install -s</arguments>
                         </configuration>
                     </execution>
 
                     <execution>
                         <id>bower install</id>
                         <goals>
                             <goal>bower</goal>
                         </goals>
                         <configuration>
                             <!-- optional: The default argument is actually
                             "install", so unless you need to run some other npm command,
                             you can remove this whole <configuration> section.
                             -->
                             <arguments>install -s</arguments>
                         </configuration>
                     </execution>
                     <execution>
                         <id>gulp test and build</id>
                         <goals>
                             <goal>gulp</goal>
                         </goals>
                         <configuration>
                             <arguments>--no-color</arguments>
                         </configuration>
                     </execution>
                 </executions>
             </plugin>
         </plugins>
     </build>
     <dependencies>
         <dependency>
             <groupId>io.spray</groupId>
             <artifactId>spray-routing_2.11</artifactId>
             <version>${spray-version}</version>
         </dependency>
         <dependency>
             <groupId>io.spray</groupId>
             <artifactId>spray-servlet_2.11</artifactId>
             <version>${spray-version}</version>
         </dependency>
         <dependency>
             <groupId>io.spray</groupId>
             <artifactId>spray-util_2.11</artifactId>
             <version>${spray-version}</version>
         </dependency>
         <dependency>
             <groupId>io.spray</groupId>
             <artifactId>spray-testkit_2.11</artifactId>
             <version>${spray-version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>com.typesafe.akka</groupId>
             <artifactId>akka-actor_2.11</artifactId>
             <version>${akka-version}</version>
         </dependency>
         <dependency>
             <groupId>com.typesafe.akka</groupId>
             <artifactId>akka-slf4j_2.11</artifactId>
             <version>${akka-version}</version>
         </dependency>
         <dependency>
             <groupId>com.typesafe.akka</groupId>
             <artifactId>akka-testkit_2.11</artifactId>
             <version>${akka-testkit-version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.json4s</groupId>
             <artifactId>json4s-native_2.11</artifactId>
             <version>${json4s-version}</version>
         </dependency>
         <dependency>
             <groupId>com.typesafe.slick</groupId>
             <artifactId>slick_2.11</artifactId>
             <version>${slick-version}</version>
         </dependency>
         <dependency>
             <groupId>org.suecarter</groupId>
             <artifactId>freeslick_2.11</artifactId>
             <version>${freeslick-version}</version>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-log4j12</artifactId>
             <version>${slf4j-version}</version>
         </dependency>
         <dependency>
             <groupId>com.h2database</groupId>
             <artifactId>h2</artifactId>
             <version>${h2-version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-protocol</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-email</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-data-commons</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-client</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-crypto</artifactId>
             <version>${project.version}</version>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-auth</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
             <version>${mysql-version}</version>
         </dependency>
     </dependencies>
 </project>
diff --git a/apps/steward-war/pom.xml b/apps/steward-war/pom.xml
index 334847b63..d896c401a 100644
--- a/apps/steward-war/pom.xml
+++ b/apps/steward-war/pom.xml
@@ -1,47 +1,51 @@
 <?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">
     <parent>
         <artifactId>shrine-base</artifactId>
         <groupId>net.shrine</groupId>
  
+ 
         <version>1.23.4.1-SNAPSHOT</version>
  
          
  
+ 
+         
+ 
         <relativePath>../../pom.xml</relativePath>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>steward</artifactId>
     <name>Steward War</name>
     <packaging>war</packaging>
     <build>
         <plugins>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-war-plugin</artifactId>
                 <configuration>
                     <warName>steward</warName>
                 </configuration>
             </plugin>
         </plugins>
     </build>
     <dependencies>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>steward-app</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>com.h2database</groupId>
             <artifactId>h2</artifactId>
             <version>${h2-version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-log4j12</artifactId>
             <version>${slf4j-version}</version>
             <scope>runtime</scope>
         </dependency>
     </dependencies>
 </project>
diff --git a/apps/war/pom.xml b/apps/war/pom.xml
index 3da3e5dc5..8237f51b5 100644
--- a/apps/war/pom.xml
+++ b/apps/war/pom.xml
@@ -1,68 +1,66 @@
 <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>
 	<name>SHRINE War</name>
 	<artifactId>shrine-war</artifactId>
 	<packaging>war</packaging>
 	<parent>
 		<groupId>net.shrine</groupId>
 		<artifactId>shrine-base</artifactId>
  
 		<version>1.23.4.1-SNAPSHOT</version>
  
-		 
- 
 		<relativePath>../../pom.xml</relativePath>
 	</parent>
 	<dependencies>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-test-commons</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-app</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-adapter-service</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>javax.servlet</groupId>
 			<artifactId>javax.servlet-api</artifactId>
 			<scope>provided</scope>
 		</dependency>
 		<dependency>
 			<groupId>com.sun.jersey</groupId>
 			<artifactId>jersey-servlet</artifactId>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-adapter-service</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>org.slf4j</groupId>
 			<artifactId>slf4j-log4j12</artifactId>
 			<version>${slf4j-version}</version>
 			<scope>runtime</scope>
 		</dependency>
 	</dependencies>
 	<build>
 		<finalName>shrine-cell</finalName>
 		<sourceDirectory>src/main/scala</sourceDirectory>
 		<testSourceDirectory>src/test/scala</testSourceDirectory>
 		<plugins>
 			<plugin>
 				<groupId>net.alchim31.maven</groupId>
 				<artifactId>scala-maven-plugin</artifactId>
 			</plugin>
 		</plugins>
 	</build>
 </project>
diff --git a/commons/auth/pom.xml b/commons/auth/pom.xml
index bd322b236..025031686 100644
--- a/commons/auth/pom.xml
+++ b/commons/auth/pom.xml
@@ -1,89 +1,93 @@
 <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>
 	<name>SHRINE Auth*</name>
 	<artifactId>shrine-auth</artifactId>
 	<packaging>jar</packaging>
 	<parent>
 		<groupId>net.shrine</groupId>
 		<artifactId>shrine-base</artifactId>
+ 
 		<version>1.23.4.1-SNAPSHOT</version>
+ 
+		 
+ 
 		<relativePath>../../pom.xml</relativePath>
 	</parent>
 	<dependencies>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-protocol</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>com.typesafe.akka</groupId>
 			<artifactId>akka-actor_2.11</artifactId>
 			<version>${akka-version}</version>
 		</dependency>
 		<dependency>
 			<groupId>org.json4s</groupId>
 			<artifactId>json4s-native_2.11</artifactId>
 			<version>${json4s-version}</version>
 		</dependency>
 		<dependency>
 			<groupId>io.spray</groupId>
 			<artifactId>spray-client_2.11</artifactId>
 			<version>${spray-version}</version>
 		</dependency>
 		<dependency>
 			<groupId>io.spray</groupId>
 			<artifactId>spray-routing_2.11</artifactId>
 			<version>${spray-version}</version>
 		</dependency>
 		<dependency>
 			<groupId>io.spray</groupId>
 			<artifactId>spray-servlet_2.11</artifactId>
 			<version>${spray-version}</version>
 		</dependency>
 		<dependency>
 			<groupId>io.spray</groupId>
 			<artifactId>spray-util_2.11</artifactId>
 			<version>${spray-version}</version>
 		</dependency>
 		<dependency>
 			<groupId>io.spray</groupId>
 			<artifactId>spray-testkit_2.11</artifactId>
 			<version>${spray-version}</version>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>com.typesafe.akka</groupId>
 			<artifactId>akka-slf4j_2.11</artifactId>
 			<version>${akka-version}</version>
 		</dependency>
 		<dependency>
 			<groupId>com.typesafe.akka</groupId>
 			<artifactId>akka-testkit_2.11</artifactId>
 			<version>${akka-version}</version>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-client</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-test-commons</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 	</dependencies>
 
 	<build>
 		<sourceDirectory>src/main/scala</sourceDirectory>
 		<testSourceDirectory>src/test/scala</testSourceDirectory>
 		<plugins>
 			<plugin>
 				<groupId>net.alchim31.maven</groupId>
 				<artifactId>scala-maven-plugin</artifactId>
 			</plugin>
 		</plugins>
 	</build>
 </project>
diff --git a/commons/client/pom.xml b/commons/client/pom.xml
index b1068a6a6..86c1614f2 100644
--- a/commons/client/pom.xml
+++ b/commons/client/pom.xml
@@ -1,72 +1,70 @@
 <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>
 	<name>SHRINE Client</name>
 	<artifactId>shrine-client</artifactId>
 	<packaging>jar</packaging>
 	<parent>
 		<groupId>net.shrine</groupId>
 		<artifactId>shrine-base</artifactId>
  
 		<version>1.23.4.1-SNAPSHOT</version>
  
-		 
- 
 		<relativePath>../../pom.xml</relativePath>
 	</parent>
 	<dependencies>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-test-commons</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-protocol</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-crypto</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-crypto</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-config</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>com.sun.jersey</groupId>
 			<artifactId>jersey-client</artifactId>
 		</dependency>
 	</dependencies>
 	<build>
 		<sourceDirectory>src/main/scala</sourceDirectory>
 		<testSourceDirectory>src/test/scala</testSourceDirectory>
 		<plugins>
 			<plugin>
 				<groupId>net.alchim31.maven</groupId>
 				<artifactId>scala-maven-plugin</artifactId>
 			</plugin>
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-jar-plugin</artifactId>
 				<executions>
 					<execution>
 						<goals>
 							<goal>test-jar</goal>
 						</goals>
 					</execution>
 				</executions>
 			</plugin>
 		</plugins>
 	</build>
 </project>
diff --git a/commons/config/pom.xml b/commons/config/pom.xml
index 5a4bb437b..28a8a1a66 100644
--- a/commons/config/pom.xml
+++ b/commons/config/pom.xml
@@ -1,60 +1,58 @@
 <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>
 	<name>SHRINE Config</name>
 	<artifactId>shrine-config</artifactId>
 	<packaging>jar</packaging>
 	<parent>
 		<groupId>net.shrine</groupId>
 		<artifactId>shrine-base</artifactId>
  
 		<version>1.23.4.1-SNAPSHOT</version>
  
-		 
- 
 		<relativePath>../../pom.xml</relativePath>
 	</parent>
 	<dependencies>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-test-commons</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 		<!-- For reading CSV data -->
         	<dependency>
 	        	<groupId>net.sf.opencsv</groupId>
         		<artifactId>opencsv</artifactId>
 	        </dependency>
 		<dependency>
 			<groupId>com.typesafe</groupId>
 			<artifactId>config</artifactId>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-util</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 	</dependencies>
 	<build>
 		<sourceDirectory>src/main/scala</sourceDirectory>
 		<testSourceDirectory>src/test/scala</testSourceDirectory>
 		<plugins>
 			<plugin>
 				<groupId>net.alchim31.maven</groupId>
 				<artifactId>scala-maven-plugin</artifactId>
 			</plugin>
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-jar-plugin</artifactId>
 				<executions>
 					<execution>
 						<goals>
 							<goal>test-jar</goal>
 						</goals>
 					</execution>
 				</executions>
 			</plugin>
 		</plugins>
 	</build>
 </project>
diff --git a/commons/crypto/pom.xml b/commons/crypto/pom.xml
index 6fb01c33b..674bbff98 100644
--- a/commons/crypto/pom.xml
+++ b/commons/crypto/pom.xml
@@ -1,86 +1,84 @@
 <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>
 	<name>SHRINE Crypto</name>
 	<artifactId>shrine-crypto</artifactId>
 	<packaging>jar</packaging>
 	<parent>
 		<groupId>net.shrine</groupId>
 		<artifactId>shrine-base</artifactId>
  
 		<version>1.23.4.1-SNAPSHOT</version>
  
-		 
- 
 		<relativePath>../../pom.xml</relativePath>
 	</parent>
 	<dependencies>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-test-commons</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-protocol</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-config</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcpkix-jdk15on -->
 		<dependency>
 			<groupId>org.bouncycastle</groupId>
 			<artifactId>bcpkix-jdk15on</artifactId>
 			<version>${bouncy-castle-version}</version>
 		</dependency>
 	</dependencies>
     <build>
         <sourceDirectory>src/main/scala</sourceDirectory>
         <testSourceDirectory>src/test/scala</testSourceDirectory>
         <plugins>
             <plugin>
                 <groupId>net.alchim31.maven</groupId>
                 <artifactId>scala-maven-plugin</artifactId>
             </plugin>
             <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-jar-plugin</artifactId>
               <executions>
                 <execution>
                   <goals>
                     <goal>test-jar</goal>
                   </goals>
                 </execution>
               </executions>
             </plugin>
         </plugins>
     </build>
 <!--
 
 	<build>
 		<sourceDirectory>src/main/scala</sourceDirectory>
 		<testSourceDirectory>src/test/scala</testSourceDirectory>
 		<plugins>
 			<plugin>
 				<groupId>net.alchim31.maven</groupId>
 				<artifactId>scala-maven-plugin</artifactId>
 			</plugin>
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-jar-plugin</artifactId>
 				<executions>
 					<execution>
 						<goals>
 							<goal>test-jar</goal>
 						</goals>
 					</execution>
 				</executions>
 			</plugin>
 		</plugins>
 	</build>
     -->
 </project>
diff --git a/commons/data-commons/pom.xml b/commons/data-commons/pom.xml
index cac70f62a..38bb3d4fb 100644
--- a/commons/data-commons/pom.xml
+++ b/commons/data-commons/pom.xml
@@ -1,91 +1,90 @@
 <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>
 	<name>SHRINE Data Access Classes</name>
 	<artifactId>shrine-data-commons</artifactId>
 	<packaging>jar</packaging>
 	<parent>
 		<groupId>net.shrine</groupId>
 		<artifactId>shrine-base</artifactId>
  
-		<version>1.23.4.1-SNAPSHOT</version>
  
-		 
+		<version>1.23.4.1-SNAPSHOT</version>
  
 		<relativePath>../../pom.xml</relativePath>
 	</parent>
 	<build>
 		<sourceDirectory>src/main/scala</sourceDirectory>
 		<testSourceDirectory>src/test/scala</testSourceDirectory>
 		<plugins>
 			<plugin>
 				<groupId>net.alchim31.maven</groupId>
 				<artifactId>scala-maven-plugin</artifactId>
 			</plugin>
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-jar-plugin</artifactId>
 				<executions>
 					<execution>
 						<goals>
 							<goal>test-jar</goal>
 						</goals>
 					</execution>
 				</executions>
 			</plugin>
 		</plugins>
 	</build>
 	<dependencies>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-test-commons</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-config</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-util</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>org.suecarter</groupId>
 			<artifactId>freeslick_2.11</artifactId>
 			<version>${freeslick-version}</version>
 		</dependency>
 		<dependency>
 			<groupId>org.squeryl</groupId>
 			<artifactId>squeryl_${scala-major-version}</artifactId>
 			<exclusions>
 				<!-- Exclude scalap, because it pulls in an old version of scala-compiler -->
 				<exclusion>
 					<groupId>org.scala-lang</groupId>
 					<artifactId>scalap</artifactId>
 				</exclusion>
 			</exclusions>
 		</dependency>
 
 		<!-- Replace older transitive dependency pulled in by Squeryl -->
 		<dependency>
 			<groupId>org.scala-lang</groupId>
 			<artifactId>scalap</artifactId>
 			<version>${scala-version}</version>
 		</dependency>
 
 		<dependency>
 			<groupId>org.springframework</groupId>
 			<artifactId>spring-jdbc</artifactId>
 			<scope>test</scope>
 		</dependency>
 
 		<dependency>
 			<groupId>com.h2database</groupId>
 			<artifactId>h2</artifactId>
 			<scope>test</scope>
 		</dependency>
 	</dependencies>
 </project>
diff --git a/commons/email/pom.xml b/commons/email/pom.xml
index ac910c1cf..28f6ac2f5 100644
--- a/commons/email/pom.xml
+++ b/commons/email/pom.xml
@@ -1,76 +1,75 @@
 <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>
 	<name>SHRINE Email</name>
 	<artifactId>shrine-email</artifactId>
 	<packaging>jar</packaging>
 	<parent>
 		<groupId>net.shrine</groupId>
 		<artifactId>shrine-base</artifactId>
  
-		<version>1.23.4.1-SNAPSHOT</version>
  
-		 
+		<version>1.23.4.1-SNAPSHOT</version>
  
 		<relativePath>../../pom.xml</relativePath>
 	</parent>
 
 	<dependencies>
 		<dependency>
 			<groupId>org.slf4j</groupId>
 			<artifactId>slf4j-simple</artifactId>
 			<version>${slf4j-version}</version>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>org.json4s</groupId>
 			<artifactId>json4s-native_2.11</artifactId>
 			<version>${json4s-version}</version>
 		</dependency>
 		<dependency>
 			<groupId>me.lessis</groupId>
 			<artifactId>courier_2.11</artifactId>
 			<version>${courier-version}</version>
 		</dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-config</artifactId>
             <version>${project.version}</version>
         </dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-test-commons</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
             <groupId>org.jvnet.mock-javamail</groupId>
             <artifactId>mock-javamail</artifactId>
             <version>${mock-javamail-version}</version>
             <scope>test</scope>
         </dependency>
 	</dependencies>
 
 	<build>
 		<sourceDirectory>src/main/scala</sourceDirectory>
 		<testSourceDirectory>src/test/scala</testSourceDirectory>
 		<plugins>
 			<plugin>
 				<groupId>net.alchim31.maven</groupId>
 				<artifactId>scala-maven-plugin</artifactId>
 			</plugin>
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-jar-plugin</artifactId>
 				<version>2.6</version>
 				<executions>
 					<execution>
 						<goals>
 							<goal>test-jar</goal>
 						</goals>
 					</execution>
 				</executions>
 			</plugin>
 		</plugins>
 	</build>
 </project>
diff --git a/commons/json-store/pom.xml b/commons/json-store/pom.xml
index 5d6a4579f..6a31bf131 100644
--- a/commons/json-store/pom.xml
+++ b/commons/json-store/pom.xml
@@ -1,84 +1,86 @@
 <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>
     <name>SHRINE Data Access Classes</name>
     <artifactId>shrine-json-store</artifactId>
     <packaging>jar</packaging>
     <parent>
         <groupId>net.shrine</groupId>
         <artifactId>shrine-base</artifactId>
+ 
         <version>1.23.4.1-SNAPSHOT</version>
+ 
         <relativePath>../../pom.xml</relativePath>
     </parent>
     <build>
         <sourceDirectory>src/main/scala</sourceDirectory>
         <testSourceDirectory>src/test/scala</testSourceDirectory>
         <plugins>
             <plugin>
                 <groupId>net.alchim31.maven</groupId>
                 <artifactId>scala-maven-plugin</artifactId>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-jar-plugin</artifactId>
                 <executions>
                     <execution>
                         <goals>
                             <goal>test-jar</goal>
                         </goals>
                     </execution>
                 </executions>
             </plugin>
         </plugins>
     </build>
     <dependencies>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-test-commons</artifactId>
             <version>${project.version}</version>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-config</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-util</artifactId>
             <version>${project.version}</version>
         </dependency>
 <!-- todo maybe
         <dependency>
             <groupId>org.suecarter</groupId>
             <artifactId>freeslick_2.11</artifactId>
             <version>${freeslick-version}</version>
         </dependency>
         -->
         <dependency>
             <groupId>org.spire-math</groupId>
             <artifactId>jawn-parser_2.11</artifactId>
             <version>${jawn-version}</version>
         </dependency>
         <dependency>
             <groupId>org.spire-math</groupId>
             <artifactId>jawn-ast_2.11</artifactId>
             <version>${jawn-version}</version>
         </dependency>
         <dependency>
             <groupId>com.propensive</groupId>
             <artifactId>rapture-json_2.11</artifactId>
             <version>${rapture-version}</version>
         </dependency>
         <dependency>
             <groupId>com.propensive</groupId>
             <artifactId>rapture-json-jawn_2.11</artifactId>
             <version>${rapture-version}</version>
         </dependency>
         <dependency>
             <groupId>com.h2database</groupId>
             <artifactId>h2</artifactId>
 <!-- todo return to test scope           <scope>test</scope> -->
         </dependency>
     </dependencies>
 </project>
diff --git a/commons/ont-support/pom.xml b/commons/ont-support/pom.xml
index 9e8481a37..88d12b56c 100644
--- a/commons/ont-support/pom.xml
+++ b/commons/ont-support/pom.xml
@@ -1,67 +1,66 @@
 <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>
 	<name>SHRINE Ontology Support</name>
 	<artifactId>shrine-ont-support</artifactId>
 	<packaging>jar</packaging>
 	<parent>
 		<groupId>net.shrine</groupId>
 		<artifactId>shrine-base</artifactId>
  
-		<version>1.23.4.1-SNAPSHOT</version>
  
-		 
+		<version>1.23.4.1-SNAPSHOT</version>
  
 		<relativePath>../../pom.xml</relativePath>
 	</parent>
 	<dependencies>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-test-commons</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-protocol</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-util</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-crypto</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-crypto</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-config</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-client</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 	</dependencies>
 	<build>
 		<sourceDirectory>src/main/scala</sourceDirectory>
 		<testSourceDirectory>src/test/scala</testSourceDirectory>
 		<plugins>
 			<plugin>
 				<groupId>net.alchim31.maven</groupId>
 				<artifactId>scala-maven-plugin</artifactId>
 			</plugin>
 		</plugins>
 	</build>
 </project>
diff --git a/commons/protocol-query/pom.xml b/commons/protocol-query/pom.xml
index 790817349..7d405bc56 100644
--- a/commons/protocol-query/pom.xml
+++ b/commons/protocol-query/pom.xml
@@ -1,61 +1,60 @@
 <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>
 	<name>SHRINE Query Protocol</name>
 	<artifactId>shrine-protocol-query</artifactId>
 	<packaging>jar</packaging>
 	<parent>
 		<groupId>net.shrine</groupId>
 		<artifactId>shrine-base</artifactId>
  
-		<version>1.23.4.1-SNAPSHOT</version>
- 
-		 
  
+		<version>1.23.4.1-SNAPSHOT</version>
+
 		<relativePath>../../pom.xml</relativePath>
 	</parent>
 
 	<dependencies>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-test-commons</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>net.liftweb</groupId>
 			<artifactId>lift-json_${scala-major-version}</artifactId>
 			<exclusions>
 				<!-- Exclude scalap, because it pulls in an old version of scala-compiler -->
 				<exclusion>
 					<groupId>org.scala-lang</groupId>
 					<artifactId>scalap</artifactId>
 				</exclusion>
 			</exclusions>
 		</dependency>
 
 		<!-- Replace older transitive dependency pulled in by Lift-Json -->
 		<dependency>
 			<groupId>org.scala-lang</groupId>
 			<artifactId>scalap</artifactId>
 			<version>${scala-version}</version>
 		</dependency>
 
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-util</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 	</dependencies>
 
 	<build>
 		<sourceDirectory>src/main/scala</sourceDirectory>
 		<testSourceDirectory>src/test/scala</testSourceDirectory>
 		<plugins>
 			<plugin>
 				<groupId>net.alchim31.maven</groupId>
 				<artifactId>scala-maven-plugin</artifactId>
 			</plugin>
 		</plugins>
 	</build>
 </project>
diff --git a/commons/protocol/pom.xml b/commons/protocol/pom.xml
index f3e55cb43..c01779ad4 100644
--- a/commons/protocol/pom.xml
+++ b/commons/protocol/pom.xml
@@ -1,91 +1,90 @@
 <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>
 	<name>SHRINE Protocol</name>
 	<artifactId>shrine-protocol</artifactId>
 	<packaging>jar</packaging>
 	<parent>
 		<groupId>net.shrine</groupId>
 		<artifactId>shrine-base</artifactId>
  
-		<version>1.23.4.1-SNAPSHOT</version>
  
-		 
+		<version>1.23.4.1-SNAPSHOT</version>
  
 		<relativePath>../../pom.xml</relativePath>
 	</parent>
 	<dependencies>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-protocol-query</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-util</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-util</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-config</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-data-commons</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>net.liftweb</groupId>
 			<artifactId>lift-json_${scala-major-version}</artifactId>
 		</dependency>
 		<dependency>
 			<groupId>org.easymock</groupId>
 			<artifactId>easymock</artifactId>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-test-commons</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 	</dependencies>
 	<build>
 		<sourceDirectory>src/main/scala</sourceDirectory>
 		<testSourceDirectory>src/test/scala</testSourceDirectory>
 		<resources>
 			<resource>
 				<directory>src/main/resources</directory>
 				<filtering>true</filtering>
 				<includes>
 					<include>shrine-versions.properties</include>
 				</includes>
 			</resource>
 		</resources>
 		<plugins>
 			<plugin>
 				<groupId>net.alchim31.maven</groupId>
 				<artifactId>scala-maven-plugin</artifactId>
 			</plugin>
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-jar-plugin</artifactId>
 				<executions>
 					<execution>
 						<goals>
 							<goal>test-jar</goal>
 						</goals>
 					</execution>
 				</executions>
 			</plugin>
 		</plugins>
 	</build>
 </project>
diff --git a/commons/test-commons/pom.xml b/commons/test-commons/pom.xml
index 75a623ac3..5352344e2 100644
--- a/commons/test-commons/pom.xml
+++ b/commons/test-commons/pom.xml
@@ -1,52 +1,51 @@
 <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>
     <name>SHRINE Test Commons</name>
     <artifactId>shrine-test-commons</artifactId>
     <packaging>jar</packaging>
     <parent>
         <groupId>net.shrine</groupId>
         <artifactId>shrine-base</artifactId>
  
-        <version>1.23.4.1-SNAPSHOT</version>
  
-         
+        <version>1.23.4.1-SNAPSHOT</version>
  
         <relativePath>../../pom.xml</relativePath>
     </parent>
 
     <dependencies>
         <dependency>
             <groupId>com.sun.jersey</groupId>
             <artifactId>jersey-client</artifactId>
             <scope>test</scope>
         </dependency>
         
         <dependency>
             <groupId>com.sun.jersey.jersey-test-framework</groupId>
             <artifactId>jersey-test-framework-http</artifactId>
             <version>${jersey-version}</version>
             <scope>test</scope>
         </dependency>
     </dependencies>
 
     <build>
         <testSourceDirectory>src/test/scala</testSourceDirectory>
         <plugins>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-jar-plugin</artifactId>
                 <executions>
                     <execution>
                         <goals>
                             <goal>test-jar</goal>
                         </goals>
                     </execution>
                 </executions>
             </plugin>
             <plugin>
                 <groupId>net.alchim31.maven</groupId>
                 <artifactId>scala-maven-plugin</artifactId>
             </plugin>
         </plugins>
     </build>
 </project>
diff --git a/commons/util/pom.xml b/commons/util/pom.xml
index d2eb63860..9e0393c8f 100644
--- a/commons/util/pom.xml
+++ b/commons/util/pom.xml
@@ -1,130 +1,129 @@
 <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>
 	<name>SHRINE Utility Code</name>
 	<artifactId>shrine-util</artifactId>
 	<packaging>jar</packaging>
 	<parent>
 		<groupId>net.shrine</groupId>
 		<artifactId>shrine-base</artifactId>
  
-		<version>1.23.4.1-SNAPSHOT</version>
- 
-		 
  
+		<version>1.23.4.1-SNAPSHOT</version>
+
 		<relativePath>../../pom.xml</relativePath>
 	</parent>
 
 	<dependencies>
 		<dependency>
 			<groupId>com.typesafe.slick</groupId>
 			<artifactId>slick_2.11</artifactId>
 			<version>${slick-version}</version>
 		</dependency>
 		<dependency>
 			<groupId>io.spray</groupId>
 			<artifactId>spray-httpx_2.11</artifactId>
 			<version>${spray-version}</version>
 		</dependency>
 		<dependency>
 			<groupId>org.slf4j</groupId>
 			<artifactId>slf4j-simple</artifactId>
 			<version>${slf4j-version}</version>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>net.liftweb</groupId>
 			<artifactId>lift-json_${scala-major-version}</artifactId>
 			<exclusions>
 				<!-- Exclude scalap, because it pulls in an old version of scala-compiler -->
 				<exclusion>
 					<groupId>org.scala-lang</groupId>
 					<artifactId>scalap</artifactId>
 				</exclusion>
 			</exclusions>
 		</dependency>
 
 		<!-- Replace older transitive dependency pulled in by Lift-Json -->
 		<dependency>
 			<groupId>org.scala-lang</groupId>
 			<artifactId>scalap</artifactId>
 			<version>${scala-version}</version>
 		</dependency>
 
 		<dependency>
 			<groupId>log4j</groupId>
 			<artifactId>log4j</artifactId>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-test-commons</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>org.json4s</groupId>
 			<artifactId>json4s-native_2.11</artifactId>
 			<version>${json4s-version}</version>
 		</dependency>
 		<dependency>
 			<groupId>com.h2database</groupId>
 			<artifactId>h2</artifactId>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>org.xerial</groupId>
 			<artifactId>sqlite-jdbc</artifactId>
 			<version>3.15.1</version>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>org.spire-math</groupId>
 			<artifactId>jawn-parser_2.11</artifactId>
 			<version>${jawn-version}</version>
 		</dependency>
 		<dependency>
 			<groupId>org.spire-math</groupId>
 			<artifactId>jawn-ast_2.11</artifactId>
 			<version>${jawn-version}</version>
 		</dependency>
 		<dependency>
 			<groupId>com.propensive</groupId>
 			<artifactId>rapture-json_2.11</artifactId>
 			<version>${rapture-version}</version>
 		</dependency>
 		<dependency>
 			<groupId>com.propensive</groupId>
 			<artifactId>rapture-json-jawn_2.11</artifactId>
 			<version>${rapture-version}</version>
 		</dependency>
 	</dependencies>
 
 	<build>
 		<sourceDirectory>src/main/scala</sourceDirectory>
 		<testSourceDirectory>src/test/scala</testSourceDirectory>
 		<resources>
 			<resource>
 				<directory>src/main/resources</directory>
 				<filtering>true</filtering>
 			</resource>
 		</resources>
 		<plugins>
 			<plugin>
 				<groupId>net.alchim31.maven</groupId>
 				<artifactId>scala-maven-plugin</artifactId>
 			</plugin>
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-jar-plugin</artifactId>
 				<version>2.6</version>
 				<executions>
 					<execution>
 						<goals>
 							<goal>test-jar</goal>
 						</goals>
 					</execution>
 				</executions>
 			</plugin>
 		</plugins>
 	</build>
 </project>
diff --git a/hms-support/hms-core/pom.xml b/hms-support/hms-core/pom.xml
index 905676420..1bd34197b 100644
--- a/hms-support/hms-core/pom.xml
+++ b/hms-support/hms-core/pom.xml
@@ -1,66 +1,65 @@
 <?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">
 	<parent>
 		<groupId>net.shrine</groupId>
 		<artifactId>shrine-hms-support</artifactId>
  
-		<version>1.23.4.1-SNAPSHOT</version>
  
-		 
+		<version>1.23.4.1-SNAPSHOT</version>
  
 	</parent>
 	<modelVersion>4.0.0</modelVersion>
 	<artifactId>shrine-hms-core</artifactId>
 	<name>SHRINE HMS Support (Core Classes)</name>
 	<dependencies>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-test-commons</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-auth</artifactId>
             <version>${project.version}</version>
         </dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-protocol</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-client</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-crypto</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-crypto</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>org.easymock</groupId>
 			<artifactId>easymock</artifactId>
 			<scope>test</scope>
 		</dependency>
 	</dependencies>
 	<build>
 		<sourceDirectory>src/main/scala</sourceDirectory>
 		<testSourceDirectory>src/test/scala</testSourceDirectory>
 		<plugins>
 			<plugin>
 				<groupId>net.alchim31.maven</groupId>
 				<artifactId>scala-maven-plugin</artifactId>
 			</plugin>
 		</plugins>
 	</build>
 </project>
diff --git a/hms-support/pom.xml b/hms-support/pom.xml
index 9b3ff11d2..433c1524c 100644
--- a/hms-support/pom.xml
+++ b/hms-support/pom.xml
@@ -1,19 +1,17 @@
 <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>
 	<name>SHRINE HMS Support</name>
 	<artifactId>shrine-hms-support</artifactId>
 	<packaging>pom</packaging>
 	<parent>
 		<groupId>net.shrine</groupId>
 		<artifactId>shrine-base</artifactId>
  
-		<version>1.23.4.1-SNAPSHOT</version>
- 
-		 
+		<version>1.23.4.1-SNAPSHOT</version> 
  
 	</parent>
 	<modules>
 		<module>hms-core</module>
 	</modules>
 </project>
 
diff --git a/hub/broadcaster-aggregator/pom.xml b/hub/broadcaster-aggregator/pom.xml
index c09269b83..56a354023 100644
--- a/hub/broadcaster-aggregator/pom.xml
+++ b/hub/broadcaster-aggregator/pom.xml
@@ -1,165 +1,163 @@
 <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>
 	<name>SHRINE Broadcaster Aggregator</name>
 	<artifactId>shrine-broadcaster-aggregator</artifactId>
 	<packaging>jar</packaging>
 	<parent>
 		<groupId>net.shrine</groupId>
 		<artifactId>shrine-base</artifactId>
  
 		<version>1.23.4.1-SNAPSHOT</version>
  
-		 
- 
 		<relativePath>../../pom.xml</relativePath>
 	</parent>
 	<build>
 		<sourceDirectory>src/main/scala</sourceDirectory>
 		<testSourceDirectory>src/test/scala</testSourceDirectory>
 		<plugins>
 			<plugin>
 				<groupId>org.codehaus.mojo</groupId>
 				<artifactId>tomcat-maven-plugin</artifactId>
 				<version>1.0-beta-1</version>
 			</plugin>
 			<plugin>
 				<groupId>net.alchim31.maven</groupId>
 				<artifactId>scala-maven-plugin</artifactId>
 			</plugin>
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-jar-plugin</artifactId>
 				<executions>
 					<execution>
 						<goals>
 							<goal>test-jar</goal>
 						</goals>
 					</execution>
 				</executions>
 			</plugin>
 		</plugins>
 	</build>
 	<dependencies>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-adapter-client-api</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-client</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-protocol</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-data-commons</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>mysql</groupId>
 			<artifactId>mysql-connector-java</artifactId>
 		</dependency>
 
 		<!-- Test Scoped dependencies -->
 
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-util</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-crypto</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-test-commons</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-data-commons</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-config</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 
 		<!-- For Jersey's in-process web server JAX-RS testing framework -->
 		<dependency>
 			<groupId>com.sun.jersey.jersey-test-framework</groupId>
 			<artifactId>jersey-test-framework-http</artifactId>
 			<version>${jersey-version}</version>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>com.sun.jersey.contribs</groupId>
 			<artifactId>jersey-simple-server</artifactId>
 			<version>${jersey-version}</version>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>com.h2database</groupId>
 			<artifactId>h2</artifactId>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>org.easymock</groupId>
 			<artifactId>easymock</artifactId>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>org.springframework</groupId>
 			<artifactId>spring-jdbc</artifactId>
 			<scope>test</scope>
 		</dependency>
 	</dependencies>
 	<reporting>
 		<plugins>
 			<plugin>
 				<groupId>org.codehaus.mojo</groupId>
 				<artifactId>findbugs-maven-plugin</artifactId>
 				<version>2.3.1</version>
 				<configuration>
 					<effort>Max</effort>
 				</configuration>
 			</plugin>
 			<plugin>
 				<groupId>org.codehaus.mojo</groupId>
 				<artifactId>cobertura-maven-plugin</artifactId>
 				<version>2.3</version>
 			</plugin>
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-checkstyle-plugin</artifactId>
 				<version>2.5</version>
 			</plugin>
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-pmd-plugin</artifactId>
 				<version>2.4</version>
 				<configuration>
 					<targetJdk>1.6</targetJdk>
 				</configuration>
 			</plugin>
 		</plugins>
 	</reporting>
 </project>
diff --git a/hub/broadcaster-service/pom.xml b/hub/broadcaster-service/pom.xml
index 90a28d7e5..908344848 100644
--- a/hub/broadcaster-service/pom.xml
+++ b/hub/broadcaster-service/pom.xml
@@ -1,152 +1,151 @@
 <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>
     <name>SHRINE Broadcast Service</name>
     <artifactId>shrine-broadcaster-service</artifactId>
     <packaging>jar</packaging>
     <parent>
         <groupId>net.shrine</groupId>
         <artifactId>shrine-base</artifactId>
  
-        <version>1.23.4.1-SNAPSHOT</version>
  
-         
+        <version>1.23.4.1-SNAPSHOT</version>
  
         <relativePath>../../pom.xml</relativePath>
     </parent>
     <build>
     	<sourceDirectory>src/main/scala</sourceDirectory>
         <testSourceDirectory>src/test/scala</testSourceDirectory>
         <plugins>
             <plugin>
                 <groupId>net.alchim31.maven</groupId>
                 <artifactId>scala-maven-plugin</artifactId>
             </plugin>
         </plugins>
     </build>
     <dependencies>
         <dependency>
             <groupId>com.sun.jersey</groupId>
             <artifactId>jersey-server</artifactId>
         </dependency>
 
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-broadcaster-aggregator</artifactId>
             <version>${project.version}</version>
         </dependency>
         
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-crypto</artifactId>
             <version>${project.version}</version>
         </dependency>
         
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-client</artifactId>
             <version>${project.version}</version>
         </dependency>
 
 	<dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-adapter-client-api</artifactId>
             <version>${project.version}</version>
         </dependency>
         
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-protocol</artifactId>
             <version>${project.version}</version>
         </dependency>
 
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-data-commons</artifactId>
             <version>${project.version}</version>
         </dependency>
         
         <dependency>
             <groupId>log4j</groupId>
             <artifactId>log4j</artifactId>
         </dependency>
 
         <!-- Test Scoped dependencies -->
         <!-- For Jersey's in-process web server JAX-RS testing framework -->
         <dependency>
             <groupId>com.sun.jersey.jersey-test-framework</groupId>
             <artifactId>jersey-test-framework-http</artifactId>
             <version>${jersey-version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>com.sun.jersey.contribs</groupId>
             <artifactId>jersey-simple-server</artifactId>
             <version>${jersey-version}</version>
             <scope>test</scope>
         </dependency>
 
         <dependency>
             <groupId>com.h2database</groupId>
             <artifactId>h2</artifactId>
             <scope>test</scope>
         </dependency>
 
         <dependency>
             <groupId>org.easymock</groupId>
             <artifactId>easymock</artifactId>
             <scope>test</scope>
         </dependency>
 
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-jdbc</artifactId>
             <scope>test</scope>
         </dependency>
         
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-test-commons</artifactId>
             <version>${project.version}</version>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
         
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-data-commons</artifactId>
             <version>${project.version}</version>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
     </dependencies>
     <reporting>
         <plugins>
             <plugin>
                 <groupId>org.codehaus.mojo</groupId>
                 <artifactId>findbugs-maven-plugin</artifactId>
                 <version>2.3.1</version>
                 <configuration>
                     <effort>Max</effort>
                 </configuration>
             </plugin>
             <plugin>
                 <groupId>org.codehaus.mojo</groupId>
                 <artifactId>cobertura-maven-plugin</artifactId>
                 <version>2.3</version>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
                 <version>2.5</version>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-pmd-plugin</artifactId>
                 <version>2.4</version>
                 <configuration>
                     <targetJdk>1.6</targetJdk>
                 </configuration>
             </plugin>
         </plugins>
     </reporting>
 </project>
diff --git a/install/pom.xml b/install/pom.xml
index b2f01bbb1..a3f97b31c 100644
--- a/install/pom.xml
+++ b/install/pom.xml
@@ -1,38 +1,38 @@
 <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>
     <name>SHRINE Install Scripts</name>
     <artifactId>shrine-install-scripts</artifactId>
     <packaging>pom</packaging>
     <parent>
         <groupId>net.shrine</groupId>
         <artifactId>shrine-base</artifactId>
  
-        <version>1.23.4.1-SNAPSHOT</version>
  
-         
+        <version>1.23.4.1-SNAPSHOT</version>
  
+  
     </parent>
     <build>
         <finalName>shrine-install-scripts</finalName>
         <plugins>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-assembly-plugin</artifactId>
                 <configuration>
                     <descriptors>
                         <descriptor>src/main/assembly/assembly.xml</descriptor>
                     </descriptors>
                 </configuration>
                 <executions>
                     <execution>
                         <id>make-assembly</id>
                         <phase>package</phase>
                         <goals>
                             <goal>single</goal>
                         </goals>
                     </execution>
                 </executions>
             </plugin>
         </plugins>
     </build>
 </project>
diff --git a/integration/pom.xml b/integration/pom.xml
index d08aeaaff..d865132d2 100644
--- a/integration/pom.xml
+++ b/integration/pom.xml
@@ -1,149 +1,147 @@
 <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>
     <name>SHRINE Integration Tests</name>
     <artifactId>shrine-integration-tests</artifactId>
     <parent>
         <groupId>net.shrine</groupId>
         <artifactId>shrine-base</artifactId>
  
         <version>1.23.4.1-SNAPSHOT</version>
- 
-         
- 
+
     </parent>
     <build>
         <sourceDirectory>src/main/scala</sourceDirectory>
         <testSourceDirectory>src/test/scala</testSourceDirectory>
         <plugins>
             <plugin>
                 <groupId>net.alchim31.maven</groupId>
                 <artifactId>scala-maven-plugin</artifactId>
             </plugin>
         </plugins>
     </build>
     <dependencies>
     	<dependency>
     		<groupId>net.shrine</groupId>
     		<artifactId>shrine-crypto</artifactId>
     		<version>${project.version}</version>
     	</dependency>
     	<dependency>
     		<groupId>net.shrine</groupId>
     		<artifactId>shrine-crypto</artifactId>
     		<version>${project.version}</version>
     		<type>test-jar</type>
     		<scope>test</scope>
     	</dependency>
     	<dependency>
     		<groupId>net.shrine</groupId>
     		<artifactId>shrine-test-commons</artifactId>
     		<version>${project.version}</version>
     		<type>test-jar</type>
     		<scope>test</scope>
     	</dependency>
     	<dependency>
     		<groupId>net.shrine</groupId>
     		<artifactId>shrine-data-commons</artifactId>
     		<version>${project.version}</version>
     		<type>test-jar</type>
     		<scope>test</scope>
     	</dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-protocol</artifactId>
             <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-adapter-service</artifactId>
             <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-adapter-service</artifactId>
             <version>${project.version}</version>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-adapter-client-api</artifactId>
             <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-broadcaster-aggregator</artifactId>
             <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-qep</artifactId>
             <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-broadcaster-service</artifactId>
             <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>com.h2database</groupId>
             <artifactId>h2</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-log4j12</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-jdbc</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>com.sun.jersey.jersey-test-framework</groupId>
             <artifactId>jersey-test-framework-http</artifactId>
             <version>${jersey-version}</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>com.sun.jersey.contribs</groupId>
             <artifactId>jersey-simple-server</artifactId>
             <version>${jersey-version}</version>
             <scope>test</scope>
         </dependency>
         <!-- https://mvnrepository.com/artifact/com.typesafe.slick/slick-hikaricp_2.11 -->
         <dependency>
             <groupId>com.typesafe.slick</groupId>
             <artifactId>slick-hikaricp_2.11</artifactId>
             <version>${slick-version}</version>
             <scope>test</scope>
         </dependency>
         <!-- https://mvnrepository.com/artifact/org.spire-math/jawn-parser_2.11 -->
         <dependency>
             <groupId>org.spire-math</groupId>
             <artifactId>jawn-parser_2.11</artifactId>
             <version>${jawn-version}</version>
         </dependency>
         <dependency>
             <groupId>org.spire-math</groupId>
             <artifactId>jawn-ast_2.11</artifactId>
             <version>${jawn-version}</version>
         </dependency>
         <dependency>
             <groupId>com.propensive</groupId>
             <artifactId>rapture-json_2.11</artifactId>
             <version>${rapture-version}</version>
         </dependency><dependency>
             <groupId>com.propensive</groupId>
             <artifactId>rapture-json-jawn_2.11</artifactId>
             <version>${rapture-version}</version>
         </dependency>
     </dependencies>
 </project>
diff --git a/pom.xml b/pom.xml
index 6ad9eac21..b9988315b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,399 +1,395 @@
 <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>
 	<name>SHRINE</name>
 	<groupId>net.shrine</groupId>
 	<artifactId>shrine-base</artifactId>
 	<packaging>pom</packaging>
- 
 	<version>1.23.4.1-SNAPSHOT</version>
- 
-	 
- 
 	<!-- -->
         <properties>
 			<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 			<spring.version>4.2.5.RELEASE</spring.version>
 			<lift-version>2.6.2</lift-version> <!-- todo where do we use lift? If it's the json library, shift to json4s . Stuck on 2.6.2 due to commons/util/src/main/scala/net/shrine/serialization/JsonMarshaller.scala:21: type mismatch -->
 			<scala-version>2.11.11</scala-version>
 			<scala-major-version>2.11</scala-major-version>
 			<junit-version>4.12</junit-version>
 			<slf4j-version>1.7.22</slf4j-version>
 			<log4j-version>1.2.17</log4j-version> <!-- todo log4j 1 is EOL. Use something else. -->
 			<jersey-version>1.19</jersey-version> <!-- todo jersey moved into glassfish. Need to update all its dependencies-->
 			<scalatest-version>2.2.6</scalatest-version> <!-- todo can't move to 3.0.1 due to a runtime return type check -->
 			<scala-maven-plugin-version>3.2.2</scala-maven-plugin-version>
 			<squeryl-version>0.9.7</squeryl-version>
 			<typesafe-config-version>1.3.1</typesafe-config-version> <!-- 1.3.0 compiled with JDK 8-->
 			<h2-version>1.4.193</h2-version>
 			<easymock-version>3.4</easymock-version>
 			<mysql-version>5.1.40</mysql-version>
 			<opencsv-version>2.3</opencsv-version>
 			<servlet-api-version>3.0.1</servlet-api-version><!-- for tomcat 8, you can go to 3.1.0 , but need to fix /Users/david/projects/shrine-dev/apps/proxy/src/test/scala/net/shrine/proxy/ShrineProxyServletTest.scala:119: class MockHttpServletRequest needs to be abstract -->
 			<scallop-version>0.9.5</scallop-version><!-- Tried 1.0.0 and got compile errors todo revist next pass -->
 			<spray-version>1.3.4</spray-version>
 			<akka-version>2.4.16</akka-version><!-- 2.4.0 compiled with JDK 8 -->
 			<akka-testkit-version>2.4.16</akka-testkit-version>
 			<json4s-version>3.5.0</json4s-version>
 			<slick-version>3.1.1</slick-version>
 			<freeslick-version>3.1.1.1</freeslick-version>
 			<bouncy-castle-version>1.56</bouncy-castle-version>
 			<courier-version>0.1.3</courier-version>
 			<mock-javamail-version>1.9</mock-javamail-version>
 			<jjwt-version>0.7.0</jjwt-version>
 			<jtds-version>1.3.1</jtds-version>
 			<jawn-version>0.10.4</jawn-version>
 			<rapture-version>2.0.0-M8</rapture-version>
         </properties>
 	<!-- -->
 	<modules>
 		<module>apps/meta-app</module>
 		<module>apps/meta-war</module>
 		<module>apps/dashboard-app</module>
 		<module>apps/dashboard-war</module>
 		<module>apps/steward-app</module>
 		<module>apps/steward-war</module>
 		<module>apps/proxy</module>
 		<module>apps/shrine-app</module>
 		<module>apps/war</module>
 		<module>qep/service</module>
 		<module>hub/broadcaster-aggregator</module>
 		<module>hub/broadcaster-service</module>
 		<module>adapter/adapter-api</module>
 		<module>adapter/adapter-service</module>
 		<module>hms-support</module>
 		<module>tools</module>
 		<module>commons/json-store</module>
 		<module>commons/util</module>
 		<module>commons/email</module>
 		<module>commons/auth</module>
 		<module>commons/protocol-query</module>
 		<module>commons/data-commons</module>
 		<module>commons/protocol</module>
 		<module>commons/crypto</module>
 		<module>commons/client</module>
 		<module>commons/config</module>
 		<module>commons/ont-support</module>
 		<module>commons/test-commons</module>
 		<module>install</module>
 		<module>integration</module>
 		<module>shrine-webclient</module>
 		<module>shrine-setup</module>
 	</modules>
 	<!-- -->
 	<build>
 		<pluginManagement>
 			<plugins>
 				<plugin>
 					<groupId>net.alchim31.maven</groupId>
 					<artifactId>scala-maven-plugin</artifactId>
 					<version>${scala-maven-plugin-version}</version>
                     <executions>
                         <!-- Allows Java and Scala code to be compiled together and call each other -->
                         <execution>
                             <id>compile</id>
                             <goals>
                                 <goal>compile</goal>
                             </goals>
                             <phase>compile</phase>
                         </execution>
                         <execution>
                             <id>test-compile</id>
                             <goals>
                                 <goal>testCompile</goal>
                             </goals>
                             <phase>test-compile</phase>
                         </execution>
                         <execution>
                             <phase>process-resources</phase>
                             <goals>
                                 <goal>compile</goal>
                             </goals>
                         </execution>
                     </executions>
 					<configuration>
 						<!-- NB: recompileMode must be set to 'incremental' to get Zinc support; just 
 						     setting useZincServer to true won't do it :( -->
 						<recompileMode>incremental</recompileMode>
 						<useZincServer>true</useZincServer>
 						<jvmArgs>
 							<jvmArg>-XX:+AggressiveOpts</jvmArg>
 							<jvmArg>-XX:CompileThreshold=500</jvmArg>
 							<jvmArg>-XX:+UseFastAccessorMethods</jvmArg>
 							<jvmArg>-XX:+UseStringCache</jvmArg>
 							<jvmArg>-XX:+OptimizeStringConcat</jvmArg>
 							<jvmArg>-XX:+TieredCompilation</jvmArg>
 							<jvmArg>-XX:+UseConcMarkSweepGC</jvmArg>
 							<jvmArg>-XX:+DoEscapeAnalysis</jvmArg>
 							<jvmArg>-server</jvmArg>
 							<jvmArg>-Xms64m</jvmArg>
 							<jvmArg>-Xmx1024m</jvmArg>
 							<jvmArg>-XX:MaxPermSize=384m</jvmArg>
 						</jvmArgs>
 						<scalaVersion>${scala-version}</scalaVersion>
 						<args>
 							<arg>-Xcheckinit</arg>
 							<arg>-unchecked</arg>
 							<arg>-deprecation</arg>
 							<arg>-Xlint:adapted-args,inaccessible,infer-any,missing-interpolator,private-shadow,type-parameter-shadow,unsound-match</arg>
 							<!--<arg>-Xfatal-warnings</arg>-->
 						</args>
                         <source>7</source>
                         <target>7</target>
 					</configuration>
 				</plugin>
 				<plugin>
 					<artifactId>maven-compiler-plugin</artifactId>
 					<configuration>
 						<source>7</source>
 						<target>7</target>
 					</configuration>
 				</plugin>
 				<plugin>
 					<groupId>org.codehaus.mojo</groupId>
 					<artifactId>buildnumber-maven-plugin</artifactId>
 					<!-- use explicit version because 1.0-beta-4 came with borked checksums -->
 					<version>1.1</version>
 				</plugin>
 				<plugin>
 					<groupId>org.apache.maven.plugins</groupId>
 					<artifactId>maven-jar-plugin</artifactId>
 					<version>2.4</version>
 				</plugin>
 				<plugin>
 					<groupId>org.apache.maven.plugins</groupId>
 					<artifactId>maven-war-plugin</artifactId>
 					<version>2.1.1</version>
 				</plugin>
 			</plugins>
 		</pluginManagement>
 		<plugins>
 			<!-- This creates properties ${timestamp} and ${buildNumber} (the SCM 
 				revision number) -->
 			<plugin>
 				<groupId>org.codehaus.mojo</groupId>
 				<artifactId>buildnumber-maven-plugin</artifactId>
 				<executions>
 					<execution>
 						<phase>validate</phase>
 						<goals>
 							<goal>create</goal>
 						</goals>
 					</execution>
 				</executions>
 				<configuration>
 					<timestampFormat>{0,date,yyyy-MM-dd HH:mm:ss}</timestampFormat>
 					<revisionOnScmFailure>(not available)</revisionOnScmFailure>
 				</configuration>
 			</plugin>
 			<!-- Add versioning information to jars and wars -->
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-jar-plugin</artifactId>
 				<configuration>
 					<archive>
 						<manifest>
 							<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
 						</manifest>
 						<manifestEntries>
 							<SCM-Revision>${buildNumber}</SCM-Revision>
 							<SCM-Branch>${scmBranch}</SCM-Branch>
 							<buildDate>${timestamp}</buildDate>
 						</manifestEntries>
 					</archive>
 				</configuration>
 			</plugin>
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-war-plugin</artifactId>
 				<configuration>
 					<archive>
 						<manifest>
 							<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
 						</manifest>
 						<manifestEntries>
 							<SCM-Revision>${buildNumber}</SCM-Revision>
 							<SCM-Branch>${scmBranch}</SCM-Branch>
 							<buildDate>${timestamp}</buildDate>
 						</manifestEntries>
 					</archive>
 				</configuration>
 			</plugin>
 			<plugin>
 				<groupId>org.apache.tomcat.maven</groupId>
 				<artifactId>tomcat7-maven-plugin</artifactId>
 				<version>2.2</version>
 				<configuration>
 					<useTestClasspath>true</useTestClasspath>
 					<systemProperties>
 						<shrine.steward.gruntWatch>true</shrine.steward.gruntWatch>
 						<shrine.steward.database.createTablesOnStart>true</shrine.steward.database.createTablesOnStart>
 						<shrine.dashboard.gruntWatch>true</shrine.dashboard.gruntWatch>
 						<shrine.dashboard.happyBaseUrl>http://shrine-dev1.catalyst:6060/shrine/rest/happy</shrine.dashboard.happyBaseUrl>
 					</systemProperties>
 				</configuration>
 			</plugin>
 		</plugins>
 	</build>
 	<!-- -->
 	<scm>
         <developerConnection>scm:git:https://open.med.harvard.edu/stash/scm/shrine/shrine.git</developerConnection>
     </scm>
 	<!-- -->
 	<repositories>
 		<!-- <repository> <id>CBMI-Nexus</id> <url>https://repo.open.med.harvard.edu/nexus/content/groups/public/</url> 
 			<snapshots> <enabled>true</enabled> </snapshots> <releases> <enabled>true</enabled> 
 			</releases> </repository> -->
 	</repositories>
 	<!-- -->
 	<pluginRepositories>
 		<pluginRepository>
 			<id>CBMI-Nexus</id>
 			<url>https://repo.open.med.harvard.edu/nexus/content/groups/public/</url>
 		</pluginRepository>
 	</pluginRepositories>
 	<!-- -->
 	<dependencyManagement>
 		<dependencies>
 			<dependency>
 				<groupId>com.typesafe</groupId>
 				<artifactId>config</artifactId>
 				<version>${typesafe-config-version}</version>
 			</dependency>
 			<dependency>
 				<groupId>log4j</groupId>
 				<artifactId>log4j</artifactId>
 				<version>${log4j-version}</version>
 			</dependency>
 			<dependency>
 				<groupId>org.springframework</groupId>
 				<artifactId>spring-jdbc</artifactId>
 				<version>${spring.version}</version>
 				<scope>test</scope>
 			</dependency>
 			<dependency>
 				<groupId>com.h2database</groupId>
 				<artifactId>h2</artifactId>
 				<version>${h2-version}</version>
 				<scope>test</scope>
 			</dependency>
 			<dependency>
 				<groupId>org.easymock</groupId>
 				<artifactId>easymock</artifactId>
 				<version>${easymock-version}</version>
 				<scope>test</scope>
 			</dependency>
 			<dependency>
 				<groupId>org.slf4j</groupId>
 				<artifactId>slf4j-log4j12</artifactId>
 				<version>${slf4j-version}</version>
 				<scope>test</scope>
 			</dependency>
 			<dependency>
 				<groupId>mysql</groupId>
 				<artifactId>mysql-connector-java</artifactId>
 				<version>${mysql-version}</version>
 			</dependency>
 			<dependency>
 				<groupId>net.sf.opencsv</groupId>
 				<artifactId>opencsv</artifactId>
 				<version>${opencsv-version}</version>
 			</dependency>
 			<dependency>
 				<groupId>net.liftweb</groupId>
 				<artifactId>lift-json_${scala-major-version}</artifactId>
 				<version>${lift-version}</version>
 			</dependency>
 			<dependency>
 				<groupId>com.sun.jersey</groupId>
 				<artifactId>jersey-server</artifactId>
 				<version>${jersey-version}</version>
 			</dependency>
 			<dependency>
 				<groupId>com.sun.jersey</groupId>
 				<artifactId>jersey-servlet</artifactId>
 				<version>${jersey-version}</version>
 			</dependency>
 			<dependency>
 				<groupId>com.sun.jersey</groupId>
 				<artifactId>jersey-client</artifactId>
 				<version>${jersey-version}</version>
 			</dependency>
 			<dependency>
 				<groupId>org.squeryl</groupId>
 				<artifactId>squeryl_${scala-major-version}</artifactId>
 				<version>${squeryl-version}</version>
 			</dependency>
 			<dependency>
 				<groupId>javax.servlet</groupId>
 				<artifactId>javax.servlet-api</artifactId>
 				<version>${servlet-api-version}</version>
 				<scope>provided</scope>
 			</dependency>
 			<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on -->
 			<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcpkix-jdk15on -->
 			<dependency>
 				<groupId>org.bouncycastle</groupId>
 				<artifactId>bcpkix-jdk15on</artifactId>
 				<version>${bouncy-castle-version}</version>
 			</dependency>
 		</dependencies>
 	</dependencyManagement>
 	<!-- -->
 	<dependencies>
 		<dependency>
 			<groupId>org.scala-lang</groupId>
 			<artifactId>scala-library</artifactId>
 			<version>${scala-version}</version>
 		</dependency>
 		<dependency>
 			<groupId>junit</groupId>
 			<artifactId>junit</artifactId>
 			<version>${junit-version}</version>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>org.scalatest</groupId>
 			<artifactId>scalatest_${scala-major-version}</artifactId>
 			<version>${scalatest-version}</version>
 			<scope>test</scope>
 			<exclusions>
 				<!-- Exclude old (Scala 2.10.0) transitive dependencies -->
 				<exclusion>
 					<groupId>org.scala-lang</groupId>
 					<artifactId>scala-actors</artifactId>
 				</exclusion>
 				<exclusion>
 					<groupId>org.scala-lang</groupId>
 					<artifactId>scala-reflect</artifactId>
 				</exclusion>
 			</exclusions>
 		</dependency>
 		<!-- Re-add transitive dependencies for ScalaTest with up-to-date Scala 
 			versions -->
 		<dependency>
 			<groupId>org.scala-lang</groupId>
 			<artifactId>scala-actors</artifactId>
 			<version>${scala-version}</version>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>org.scala-lang</groupId>
 			<artifactId>scala-reflect</artifactId>
 			<version>${scala-version}</version>
 		</dependency>
 	</dependencies>
 	<!-- -->
 	<distributionManagement>
 		<snapshotRepository>
 			<id>nexus</id>
 			<name>Nexus Repo</name>
 			<url>https://repo.open.med.harvard.edu/nexus/content/repositories/snapshots</url>
 			<uniqueVersion>false</uniqueVersion>
 		</snapshotRepository>
 		<repository>
 			<id>nexus</id>
 			<name>Nexus Repo</name>
 			<url>https://repo.open.med.harvard.edu/nexus/content/repositories/releases-internal</url>
 		</repository>
 	</distributionManagement>
 </project>
diff --git a/qep/service/pom.xml b/qep/service/pom.xml
index 4b34668d9..8a861e118 100644
--- a/qep/service/pom.xml
+++ b/qep/service/pom.xml
@@ -1,222 +1,226 @@
 <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>
 	<name>SHRINE Service</name>
 	<artifactId>shrine-qep</artifactId>
 	<packaging>jar</packaging>
 	<parent>
 		<groupId>net.shrine</groupId>
 		<artifactId>shrine-base</artifactId>
  
+ 
 		<version>1.23.4.1-SNAPSHOT</version>
  
 		 
  
+ 
+		 
+ 
 		<relativePath>../../pom.xml</relativePath>
 	</parent>
 	<build>
 		<sourceDirectory>src/main/scala</sourceDirectory>
 		<testSourceDirectory>src/test/scala</testSourceDirectory>
 		<plugins>
 			<plugin>
 				<groupId>net.alchim31.maven</groupId>
 				<artifactId>scala-maven-plugin</artifactId>
 				<configuration>
 					<useTestClasspath>false</useTestClasspath>
 				</configuration>
 			</plugin>
 		</plugins>
 	</build>
 	<dependencies>
 		<dependency>
 			<groupId>org.squeryl</groupId>
 			<artifactId>squeryl_${scala-major-version}</artifactId>
 			<exclusions>
 				<!-- Exclude scalap, because it pulls in an old version of scala-compiler -->
 				<exclusion>
 					<groupId>org.scala-lang</groupId>
 					<artifactId>scalap</artifactId>
 				</exclusion>
 			</exclusions>
 		</dependency>
 
 		<!-- Replace older transitive dependency pulled in by Squeryl -->
 		<dependency>
 			<groupId>org.scala-lang</groupId>
 			<artifactId>scalap</artifactId>
 			<version>${scala-version}</version>
 		</dependency>
 
 		<dependency>
 			<groupId>com.sun.jersey</groupId>
 			<artifactId>jersey-server</artifactId>
 		</dependency>
 
 		<dependency>
 			<groupId>com.sun.jersey</groupId>
 			<artifactId>jersey-client</artifactId>
 		</dependency>
 
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-auth</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-broadcaster-aggregator</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-crypto</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-client</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-adapter-client-api</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-protocol</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-data-commons</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-hms-core</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>com.typesafe.slick</groupId>
 			<artifactId>slick_2.11</artifactId>
 			<version>${slick-version}</version>
 		</dependency>
         <dependency>
             <groupId>org.suecarter</groupId>
             <artifactId>freeslick_2.11</artifactId>
             <version>${freeslick-version}</version>
         </dependency>
         <dependency>
 			<groupId>org.slf4j</groupId>
 			<artifactId>slf4j-log4j12</artifactId>
 			<version>${slf4j-version}</version>
 		</dependency>
 		<dependency>
 			<groupId>mysql</groupId>
 			<artifactId>mysql-connector-java</artifactId>
 		</dependency>
 
 		<dependency>
 			<groupId>log4j</groupId>
 			<artifactId>log4j</artifactId>
 		</dependency>
 
 		<!-- Test Scoped dependencies -->
 		<!-- For Jersey's in-process web server JAX-RS testing framework -->
 		<dependency>
 			<groupId>com.sun.jersey.jersey-test-framework</groupId>
 			<artifactId>jersey-test-framework-http</artifactId>
 			<version>${jersey-version}</version>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>com.sun.jersey.contribs</groupId>
 			<artifactId>jersey-simple-server</artifactId>
 			<version>${jersey-version}</version>
 			<scope>test</scope>
 		</dependency>
 
 		<dependency>
 			<groupId>com.h2database</groupId>
 			<artifactId>h2</artifactId>
 			<scope>test</scope>
 		</dependency>
 
 		<dependency>
 			<groupId>org.easymock</groupId>
 			<artifactId>easymock</artifactId>
 			<scope>test</scope>
 		</dependency>
 
 		<dependency>
 			<groupId>org.springframework</groupId>
 			<artifactId>spring-jdbc</artifactId>
 			<scope>test</scope>
 		</dependency>
 
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-test-commons</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-data-commons</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-config</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-util</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 	</dependencies>
 	<reporting>
 		<plugins>
 			<plugin>
 				<groupId>org.codehaus.mojo</groupId>
 				<artifactId>findbugs-maven-plugin</artifactId>
 				<version>2.3.1</version>
 				<configuration>
 					<effort>Max</effort>
 				</configuration>
 			</plugin>
 			<plugin>
 				<groupId>org.codehaus.mojo</groupId>
 				<artifactId>cobertura-maven-plugin</artifactId>
 				<version>2.3</version>
 			</plugin>
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-checkstyle-plugin</artifactId>
 				<version>2.5</version>
 			</plugin>
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-pmd-plugin</artifactId>
 				<version>2.4</version>
 				<configuration>
 					<targetJdk>1.6</targetJdk>
 				</configuration>
 			</plugin>
 		</plugins>
 	</reporting>
 </project>
diff --git a/shrine-setup/pom.xml b/shrine-setup/pom.xml
index 1cd24d64a..f77de2995 100644
--- a/shrine-setup/pom.xml
+++ b/shrine-setup/pom.xml
@@ -1,37 +1,39 @@
 <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>
     <name>SHRINE Web Client</name>
     <artifactId>shrine-setup</artifactId>
     <packaging>pom</packaging>
     <parent>
         <groupId>net.shrine</groupId>
         <artifactId>shrine-base</artifactId>
+ 
         <version>1.23.4.1-SNAPSHOT</version>
+ 
     </parent>
     <properties>
         <gmaven-plugin-version>1.5</gmaven-plugin-version>
         <assembly-plugin-version>2.4</assembly-plugin-version>
     </properties>
     <build>
             <plugins>
                 <plugin>
                     <artifactId>maven-assembly-plugin</artifactId>
                     <version>${assembly-plugin-version}</version>
                     <executions>
                         <execution>
                             <id>assembly</id>
                             <phase>package</phase>
                             <goals>
                                 <goal>single</goal>
                             </goals>
                             <configuration>
                                 <descriptors>
                                     <descriptor>src/main/assembly/assembly.xml</descriptor>
                                 </descriptors>
                             </configuration>
                         </execution>
                     </executions>
                 </plugin>
             </plugins>
     </build>
 </project>
\ No newline at end of file
diff --git a/shrine-webclient/pom.xml b/shrine-webclient/pom.xml
index 307fa500e..9fe5696f9 100644
--- a/shrine-webclient/pom.xml
+++ b/shrine-webclient/pom.xml
@@ -1,44 +1,48 @@
 <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>
     <name>SHRINE Web Client</name>
     <artifactId>shrine-webclient</artifactId>
     <packaging>pom</packaging>
 
     <parent>
         <groupId>net.shrine</groupId>
         <artifactId>shrine-base</artifactId>
  
+ 
         <version>1.23.4.1-SNAPSHOT</version>
  
          
  
+ 
+         
+ 
     </parent>
 
     <properties>
         <gmaven-plugin-version>1.5</gmaven-plugin-version>
         <assembly-plugin-version>2.4</assembly-plugin-version>
     </properties>
 
     <build>
             <plugins>
                 <plugin>
                     <artifactId>maven-assembly-plugin</artifactId>
                     <version>${assembly-plugin-version}</version>
                     <executions>
                         <execution>
                             <id>assembly</id>
                             <phase>package</phase>
                             <goals>
                                 <goal>single</goal>
                             </goals>
                             <configuration>
                                 <descriptors>
                                     <descriptor>src/main/assembly/assembly.xml</descriptor>
                                 </descriptors>
                             </configuration>
                         </execution>
                     </executions>
                 </plugin>
             </plugins>
     </build>
 </project>
\ No newline at end of file
diff --git a/shrine-webclient/src/main/js/client/js-i2b2/cells/SHRINE/shrine.plugin.js b/shrine-webclient/src/main/js/client/js-i2b2/cells/SHRINE/shrine.plugin.js
index edb86b39e..dace8e445 100644
--- a/shrine-webclient/src/main/js/client/js-i2b2/cells/SHRINE/shrine.plugin.js
+++ b/shrine-webclient/src/main/js/client/js-i2b2/cells/SHRINE/shrine.plugin.js
@@ -1,125 +1,125 @@
 /**
  * @todo: This logic could be designed to handle all views.
  */
 
 (function () {
     'use strict';
     var pluginId = 'shrinePlugin';
     //var tabId = 'shrineTab';
     var contentIds = [
         'infoQueryStatusText',
         'infoQueryStatusChart',
         'infoQueryStatusReport',
         'infoDownloadStatusData',
         pluginId
     ];
 
     // -- add plugin to i2b2 namespace -- //
     i2b2.SHRINE.plugin = new i2b2Base_cellViewController(i2b2.SHRINE, pluginId);
     i2b2.SHRINE.plugin.showDisplay = showDisplay;
     i2b2.SHRINE.plugin.hideDisplay = hideDisplay;
     i2b2.SHRINE.plugin.ZoomView = zoomView;
     i2b2.SHRINE.plugin.navigateTo = navigateTo;
     i2b2.SHRINE.plugin.errorDetail = errorDetail;
 
 
     function zoomView() {
         const height = jQuery('#infoQueryStatusText').css('height');
         jQuery('#shrinePlugin').css('height', height);
     }
 
     function showDisplay(route) {
         clearAllTabs();
         setShrineTabActive(route);
         hideContent();
         $(pluginId).show();
     }
 
     function clearAllTabs() {
         $(pluginId).parentNode.parentNode
             .select('DIV.tabBox.active')
             .each(function (el) {
                 el.removeClassName('active');
             });
         /* IE is no fun!  .each(el => el.removeClassName('active'));*/
     }
 
     function setShrineTabActive(route) {
         // set us as active
         $(pluginId)
             .parentNode
             .parentNode
             .select('DIV.tabBox.' + route)[0]
             .addClassName('active');
     }
 
     function hideContent() {
         contentIds
             .each(function (id) {
                 $(id).hide();
             })
         /*@ie no fun! .each(id => $(id).hide());*/
     }
 
     function hideDisplay() {
         $(pluginId).hide(e);
     }
 
     function navigateTo(route) {
         i2b2.CRC.view.status.selectTab('shrine');
         showDisplay(route);
         var pluginLocation = window.frames['shrine-plugin'].window.location;
         pluginLocation.href = pluginLocation.origin + pluginLocation.pathname + '#' + route;
     }
 
 
     function errorDetail(data) {
 
         var j$ = jQuery;
 
         j$('body').append(j$(getDialogHTML(data)))
 
         var pluginErrorDetail = new YAHOO.widget.SimpleDialog("pluginErrorDetail", {
             width: "820px",
             fixedcenter: true,
             constraintoviewport: true,
             modal: true,
             zindex: 700,
             buttons: [{
                 text: "Done",
                 handler: function() {this.cancel();},
                 isDefault: true
             }]
         });
 
         //$ = prototype.js
         $('pluginErrorDetail').show();
         pluginErrorDetail.validate = function () {
             return true;
         };
 
         pluginErrorDetail.render(document.body);
 
         // / display the dialoge
         pluginErrorDetail.center();
         pluginErrorDetail.show();
     }
 
     // ES5 :(
     function getDialogHTML(data) {
         return '<div id="pluginErrorDetail" style="display:none;">' +
-            '<div class="hd" style="background:#6677AA;">Query Error Detail</div>' +
+            '<div class="hd" style="background:#6677AA;">SHRINE Result Status</div>' +
             '<div class="bd">' +
             '<br />' +
             '<div style="border: 1px solid #C0C0C0; max-height: 450px;' +
             'background-color: #FFFFFF; overflow: scroll; word-wrap: break-word; padding: 10px 5px;"' +
             'id="pluginErrorDetail" class="StatusBoxText">' +
             '<div><b>Summary:</b></div>' +
             '<div>' + data.status + '</div><br/>' +
             '<div><b>Description:</b></div>' +
             '<div><p>' + data.statusMessage + '</p></div><br/>' +
             '</div>' +
             '</div>' +
             '</div>';
     }
 })();
diff --git a/shrine-webclient/src/main/js/client/js-shrine/assets/css/styles.css b/shrine-webclient/src/main/js/client/js-shrine/assets/css/styles.css
index 00d134422..3c446d0c0 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/assets/css/styles.css
+++ b/shrine-webclient/src/main/js/client/js-shrine/assets/css/styles.css
@@ -1,258 +1,256 @@
 @import url(http://fonts.googleapis.com/css?family=Roboto:400,500,300,700);
 body {
   overflow: hidden;
   background: rgba(255, 255, 255, 0.9);
   font-family: 'Roboto', sans-serif; }
 
 html,
 body,
 .box-wrapper {
   width: 100%;
   height: 100%;
   margin: 0; }
 
 .box-wrapper {
   display: -webkit-box;
   display: -ms-flexbox;
   display: flex;
   -webkit-box-orient: vertical;
   -webkit-box-direction: normal;
   -ms-flex-direction: column;
   flex-direction: column;
   -ms-flex-wrap: wrap;
   flex-wrap: wrap; }
 
 .box-wrapper > .box {
   margin-top: 1%;
   width: 100%;
   transition: all .2s ease; }
   .box-wrapper > .box .hideextra {
     white-space: nowrap;
     overflow: hidden;
     text-overflow: ellipsis; }
   .box-wrapper > .box section {
     margin: 20 0 6 0; }
     .box-wrapper > .box section .v-full {
       height: 90vh; }
-    .box-wrapper > .box section .v-full > table {
-      padding-bottom: 10%; }
     .box-wrapper > .box section .v-min {
       height: 100px; }
     .box-wrapper > .box section .v-min > table {
       padding-bottom: 1%; }
     .box-wrapper > .box section .tbl-content {
       overflow: auto;
       margin-top: 0px;
       border: 1px solid rgba(98, 108, 146, 0.3); }
   .box-wrapper > .box table {
     width: 100%;
     table-layout: fixed; }
     .box-wrapper > .box table .tbl-header {
       background-color: rgba(98, 108, 146, 0.3); }
       .box-wrapper > .box table .tbl-header div.tbl-header {
         max-width: 5rem; }
     .box-wrapper > .box table tr {
       background: white;
       cursor: pointer; }
       .box-wrapper > .box table tr:hover {
         background: rgba(98, 108, 146, 0.3) !important; }
       .box-wrapper > .box table tr:nth-child(odd) {
         background: rgba(98, 108, 146, 0.1); }
     .box-wrapper > .box table th {
       padding: 2px 4px 4px 2px;
       text-align: left;
       font-weight: 500;
       font-size: .75rem;
       color: #626C92;
       text-transform: uppercase;
       border-bottom: solid 1px rgba(98, 108, 146, 0.1);
       border-left: solid 1px rgba(98, 108, 146, 0.1); }
     .box-wrapper > .box table td {
       transition: all .5s ease;
       padding: 2px;
       text-align: left;
       vertical-align: top;
       font-weight: 300;
       font-size: 12px;
       color: black;
       border-bottom: solid 1px rgba(98, 108, 146, 0.1);
       border-left: solid 1px rgba(98, 108, 146, 0.1); }
 
 .circle-pagination {
   position: absolute;
   z-index: 1000;
   list-style-type: none;
   margin: 0;
   top: -.3rem; }
   .circle-pagination li {
     border-radius: 50%;
     border: 2px solid #626C92;
     width: 12px;
     height: 12px;
     padding: 4px;
     margin: 6px;
     cursor: pointer;
     float: left;
     transition: all .2s ease; }
     .circle-pagination li.active, .circle-pagination li:hover {
       background: #626C92;
       width: 14px;
       height: 14px; }
     .circle-pagination li.active div,
     .circle-pagination li div:hover {
       color: white; }
     .circle-pagination li div {
       font-size: .6rem;
       width: 24px;
       position: relative;
       left: -6px;
       top: 1px;
       color: #626C92;
       font-weight: 600;
       text-transform: capitalize; }
 
 .mailto {
   box-sizing: border-box;
   display: flex;
   justify-content: center;
   align-items: center;
   width: 100%;
   height: 100%;
   padding: 10px;
   color: #333;
   background: #f2f2f2;
   height: 100% p;
     height-font-size: 16px;
     height-line-height: 1.6em; }
   .mailto .button {
     border: 1px solid #6576a8;
     background: #6d85ad;
     border: 0;
     outline: 0;
     font-weight: bold;
     text-transform: uppercase;
     text-decoration: none;
     letter-spacing: 1px;
     color: #fff;
     cursor: pointer; }
     .mailto .button:hover {
       background: #9cb8d9; }
     .mailto .button:active {
       background: #6576a8; }
   .mailto .button--large {
     position: relative;
     padding: 15px 30px;
     border-radius: 5px;
     font-size: 16px; }
     .mailto .button--large:active {
       top: 1px; }
   .mailto .content {
     max-width: 350px;
     text-align: center; }
   .mailto .email {
     position: relative; }
 
 @import url(http://fonts.googleapis.com/css?family=Roboto:400,300&subset=latin,latin-ext);
 ul.context-menu {
   transition: opacity 0.2s linear;
   list-style: none;
   margin: 0;
   padding: 0;
   font: 200 11px "Roboto", sans-serif;
   position: absolute;
   color: #626C92;
   box-shadow: 0 12px 15px 0 rgba(0, 0, 0, 0.2);
   border-radius: 5px;
   border: 1px solid rgba(98, 108, 146, 0.25); }
   ul.context-menu * {
     transition: color 0.2s, background 0.2s; }
   ul.context-menu.hide {
     visibility: hidden;
     opacity: 0; }
   ul.context-menu.show {
     visibility: visible;
     opacity: 1; }
   ul.context-menu li {
     min-width: 100px;
     overflow: hidden;
     white-space: nowrap;
     padding: 6px 8px;
     background-color: #fff;
     border-bottom: 1px solid #ecf0f1; }
     ul.context-menu li a {
       color: #626C92;
       text-decoration: none; }
     ul.context-menu li:hover {
       background-color: #ecf0f1;
       color: #2980b9; }
       ul.context-menu li:hover a {
         color: #2980b9; }
     ul.context-menu li:first-child {
       border-radius: 5px 5px 0 0; }
     ul.context-menu li:last-child {
       border-bottom: 0;
       border-radius: 0 0 5px 5px; }
 
 @import url(http://fonts.googleapis.com/css?family=Roboto:400,300&subset=latin,latin-ext);
 .loader {
   background: #fff;
   margin: 50px 300px;
   /*todo cleanup with mixin*/ }
   .loader h1 {
     color: #626C92;
     font: 300 11px "Roboto", sans-serif; }
   .loader div.slider {
     position: absolute;
     width: 200px;
     height: 2px;
     margin-top: -30px; }
     .loader div.slider div.line {
       position: absolute;
       background: rgba(0, 0, 0, 0.2);
       width: 200px;
       height: 2px; }
     .loader div.slider div.break {
       position: absolute;
       width: 50%;
       height: 2px; }
     .loader div.slider div.break.dot1 {
       animation: loading 2s infinite;
       background: #D9ECF0; }
     .loader div.slider div.break.dot2 {
       animation: loading 2s 0.5s infinite;
       background: #6677AA; }
     .loader div.slider div.break.dot3 {
       animation: loading 2s 1s infinite;
       background: #D9ECF0; }
 
 @-webkit-keyframes "loading" {
   from {
     left: 0;
     opacity: 1; }
   to {
     left: 200px;
     opacity: 1; } }
 
 @-moz-keyframes "loading" {
   from {
     left: 0;
     opacity: 0; }
   to {
     left: 200px;
     opacity: 1; } }
 
 @-o-keyframes "loading" {
   from {
     left: 0;
     opacity: 0; }
   to {
     left: 200px;
     opacity: 1; } }
 
 @keyframes "loading" {
   from {
     left: 0;
     opacity: 0; }
   to {
     left: 200px;
     opacity: 1; } }
diff --git a/shrine-webclient/src/main/js/client/js-shrine/config.js b/shrine-webclient/src/main/js/client/js-shrine/config.js
index 494115738..3d911dd00 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/config.js
+++ b/shrine-webclient/src/main/js/client/js-shrine/config.js
@@ -1,682 +1,695 @@
 System.config({
   defaultJSExtensions: true,
   transpiler: false,
   paths: {
     "*": "dist/*",
     "github:*": "jspm_packages/github/*",
     "npm:*": "jspm_packages/npm/*"
   },
   map: {
     "aurelia-animator-css": "npm:aurelia-animator-css@1.0.1",
     "aurelia-bootstrapper": "npm:aurelia-bootstrapper@1.0.0",
     "aurelia-fetch-client": "npm:aurelia-fetch-client@1.0.1",
     "aurelia-framework": "npm:aurelia-framework@1.0.6",
     "aurelia-history-browser": "npm:aurelia-history-browser@1.0.0",
     "aurelia-loader-default": "npm:aurelia-loader-default@1.0.0",
     "aurelia-logging-console": "npm:aurelia-logging-console@1.0.0",
     "aurelia-pal-browser": "npm:aurelia-pal-browser@1.0.0",
     "aurelia-polyfills": "npm:aurelia-polyfills@1.1.1",
     "aurelia-router": "npm:aurelia-router@1.3.0",
     "aurelia-templating-binding": "npm:aurelia-templating-binding@1.0.0",
     "aurelia-templating-resources": "npm:aurelia-templating-resources@1.1.1",
     "aurelia-templating-router": "npm:aurelia-templating-router@1.0.0",
     "bluebird": "npm:bluebird@3.4.1",
     "bootstrap": "github:twbs/bootstrap@3.3.7",
     "fetch": "github:github/fetch@1.0.0",
     "font-awesome": "npm:font-awesome@4.7.0",
     "jquery": "npm:jquery@2.2.4",
     "ramda": "npm:ramda@0.23.0",
     "text": "github:systemjs/plugin-text@0.0.8",
     "github:jspm/nodelibs-assert@0.1.0": {
       "assert": "npm:assert@1.4.1"
     },
     "github:jspm/nodelibs-buffer@0.1.1": {
       "buffer": "npm:buffer@5.0.6"
     },
     "github:jspm/nodelibs-process@0.1.2": {
       "process": "npm:process@0.11.10"
     },
     "github:jspm/nodelibs-util@0.1.0": {
       "util": "npm:util@0.10.3"
     },
     "github:jspm/nodelibs-vm@0.1.0": {
       "vm-browserify": "npm:vm-browserify@0.0.4"
     },
     "github:twbs/bootstrap@3.3.7": {
       "jquery": "npm:jquery@2.2.4"
     },
     "npm:assert@1.4.1": {
       "assert": "github:jspm/nodelibs-assert@0.1.0",
       "buffer": "github:jspm/nodelibs-buffer@0.1.1",
       "process": "github:jspm/nodelibs-process@0.1.2",
       "util": "npm:util@0.10.3"
     },
     "npm:aurelia-animator-css@1.0.1": {
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0",
       "aurelia-templating": "npm:aurelia-templating@1.1.1"
     },
     "npm:aurelia-binding@1.0.9": {
       "aurelia-logging": "npm:aurelia-logging@1.3.1",
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0",
       "aurelia-task-queue": "npm:aurelia-task-queue@1.1.0"
     },
     "npm:aurelia-bootstrapper@1.0.0": {
       "aurelia-event-aggregator": "npm:aurelia-event-aggregator@1.0.1",
       "aurelia-framework": "npm:aurelia-framework@1.0.6",
       "aurelia-history": "npm:aurelia-history@1.0.0",
       "aurelia-history-browser": "npm:aurelia-history-browser@1.0.0",
       "aurelia-loader-default": "npm:aurelia-loader-default@1.0.0",
       "aurelia-logging-console": "npm:aurelia-logging-console@1.0.0",
       "aurelia-pal": "npm:aurelia-pal@1.3.0",
       "aurelia-pal-browser": "npm:aurelia-pal-browser@1.0.0",
       "aurelia-polyfills": "npm:aurelia-polyfills@1.1.1",
       "aurelia-router": "npm:aurelia-router@1.3.0",
       "aurelia-templating": "npm:aurelia-templating@1.1.1",
       "aurelia-templating-binding": "npm:aurelia-templating-binding@1.0.0",
       "aurelia-templating-resources": "npm:aurelia-templating-resources@1.1.1",
       "aurelia-templating-router": "npm:aurelia-templating-router@1.0.0"
     },
     "npm:aurelia-dependency-injection@1.3.1": {
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0"
     },
     "npm:aurelia-event-aggregator@1.0.1": {
       "aurelia-logging": "npm:aurelia-logging@1.3.1"
     },
     "npm:aurelia-framework@1.0.6": {
       "aurelia-binding": "npm:aurelia-binding@1.0.9",
       "aurelia-dependency-injection": "npm:aurelia-dependency-injection@1.3.1",
       "aurelia-loader": "npm:aurelia-loader@1.0.0",
       "aurelia-logging": "npm:aurelia-logging@1.3.1",
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0",
       "aurelia-path": "npm:aurelia-path@1.1.1",
       "aurelia-task-queue": "npm:aurelia-task-queue@1.1.0",
       "aurelia-templating": "npm:aurelia-templating@1.1.1"
     },
     "npm:aurelia-history-browser@1.0.0": {
       "aurelia-history": "npm:aurelia-history@1.0.0",
       "aurelia-pal": "npm:aurelia-pal@1.3.0"
     },
     "npm:aurelia-loader-default@1.0.0": {
       "aurelia-loader": "npm:aurelia-loader@1.0.0",
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0"
     },
     "npm:aurelia-loader@1.0.0": {
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-path": "npm:aurelia-path@1.1.1"
     },
     "npm:aurelia-logging-console@1.0.0": {
       "aurelia-logging": "npm:aurelia-logging@1.3.1"
     },
     "npm:aurelia-metadata@1.0.3": {
       "aurelia-pal": "npm:aurelia-pal@1.3.0"
     },
     "npm:aurelia-pal-browser@1.0.0": {
       "aurelia-pal": "npm:aurelia-pal@1.3.0"
     },
     "npm:aurelia-polyfills@1.1.1": {
       "aurelia-pal": "npm:aurelia-pal@1.3.0"
     },
     "npm:aurelia-route-recognizer@1.1.0": {
       "aurelia-path": "npm:aurelia-path@1.1.1"
     },
     "npm:aurelia-router@1.3.0": {
       "aurelia-dependency-injection": "npm:aurelia-dependency-injection@1.3.1",
       "aurelia-event-aggregator": "npm:aurelia-event-aggregator@1.0.1",
       "aurelia-history": "npm:aurelia-history@1.0.0",
       "aurelia-logging": "npm:aurelia-logging@1.3.1",
       "aurelia-path": "npm:aurelia-path@1.1.1",
       "aurelia-route-recognizer": "npm:aurelia-route-recognizer@1.1.0"
     },
     "npm:aurelia-task-queue@1.1.0": {
       "aurelia-pal": "npm:aurelia-pal@1.3.0"
     },
     "npm:aurelia-templating-binding@1.0.0": {
       "aurelia-binding": "npm:aurelia-binding@1.0.9",
       "aurelia-logging": "npm:aurelia-logging@1.3.1",
       "aurelia-templating": "npm:aurelia-templating@1.1.1"
     },
     "npm:aurelia-templating-resources@1.1.1": {
       "aurelia-binding": "npm:aurelia-binding@1.0.9",
       "aurelia-dependency-injection": "npm:aurelia-dependency-injection@1.3.1",
       "aurelia-loader": "npm:aurelia-loader@1.0.0",
       "aurelia-logging": "npm:aurelia-logging@1.3.1",
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0",
       "aurelia-path": "npm:aurelia-path@1.1.1",
       "aurelia-task-queue": "npm:aurelia-task-queue@1.1.0",
       "aurelia-templating": "npm:aurelia-templating@1.1.1"
     },
     "npm:aurelia-templating-router@1.0.0": {
       "aurelia-dependency-injection": "npm:aurelia-dependency-injection@1.3.1",
       "aurelia-logging": "npm:aurelia-logging@1.3.1",
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0",
       "aurelia-path": "npm:aurelia-path@1.1.1",
       "aurelia-router": "npm:aurelia-router@1.3.0",
       "aurelia-templating": "npm:aurelia-templating@1.1.1"
     },
     "npm:aurelia-templating@1.1.1": {
       "aurelia-binding": "npm:aurelia-binding@1.0.9",
       "aurelia-dependency-injection": "npm:aurelia-dependency-injection@1.3.1",
       "aurelia-loader": "npm:aurelia-loader@1.0.0",
       "aurelia-logging": "npm:aurelia-logging@1.3.1",
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0",
       "aurelia-path": "npm:aurelia-path@1.1.1",
       "aurelia-task-queue": "npm:aurelia-task-queue@1.1.0"
     },
     "npm:bluebird@3.4.1": {
       "process": "github:jspm/nodelibs-process@0.1.2"
     },
     "npm:buffer@5.0.6": {
       "base64-js": "npm:base64-js@1.2.0",
       "ieee754": "npm:ieee754@1.1.8"
     },
     "npm:font-awesome@4.7.0": {
       "css": "github:systemjs/plugin-css@0.1.33"
     },
     "npm:inherits@2.0.1": {
       "util": "github:jspm/nodelibs-util@0.1.0"
     },
     "npm:process@0.11.10": {
       "assert": "github:jspm/nodelibs-assert@0.1.0",
       "fs": "github:jspm/nodelibs-fs@0.1.2",
       "vm": "github:jspm/nodelibs-vm@0.1.0"
     },
     "npm:ramda@0.23.0": {
       "assert": "github:jspm/nodelibs-assert@0.1.0",
       "process": "github:jspm/nodelibs-process@0.1.2",
       "util": "github:jspm/nodelibs-util@0.1.0",
       "vm": "github:jspm/nodelibs-vm@0.1.0"
     },
     "npm:util@0.10.3": {
       "inherits": "npm:inherits@2.0.1",
       "process": "github:jspm/nodelibs-process@0.1.2"
     },
     "npm:vm-browserify@0.0.4": {
       "indexof": "npm:indexof@0.0.1"
     }
   },
   depCache: {
     "common/container.js": [
       "ramda"
     ],
+    "common/i2b2.pub-sub.js": [
+      "aurelia-framework",
+      "./i2b2.service",
+      "./tabs.model"
+    ],
     "common/i2b2.service.js": [
       "ramda",
       "./container"
     ],
     "repository/qep.repository.js": [
       "aurelia-framework",
       "aurelia-fetch-client",
       "fetch"
     ],
+    "shell.js": [
+      "aurelia-framework",
+      "common/i2b2.pub-sub"
+    ],
     "views/mailto/mailto.js": [
       "aurelia-framework",
       "views/mailto/mailto.service",
       "views/mailto/mailto.config"
     ],
     "views/mailto/mailto.service.js": [
       "aurelia-framework",
       "repository/qep.repository"
     ],
     "views/query-viewer/context-menu/context-menu.js": [
       "aurelia-framework",
       "common/i2b2.service.js"
     ],
     "views/query-viewer/loading-bar/loading-bar.js": [
       "aurelia-framework"
     ],
     "views/query-viewer/query-viewer.js": [
       "aurelia-framework",
       "views/query-viewer/query-viewer.service",
       "common/i2b2.service.js",
+      "common/tabs.model",
       "./query-viewer.model",
       "./scroll.service",
       "./query-viewer.config"
     ],
     "views/query-viewer/query-viewer.service.js": [
       "aurelia-framework",
       "repository/qep.repository",
       "./query-viewer.config"
     ],
     "views/query-viewer/scroll.service.js": [
       "ramda",
       "common/container"
     ]
   },
   bundles: {
     "app-build.js": [
       "common/container.js",
+      "common/i2b2.pub-sub.js",
       "common/i2b2.service.js",
+      "common/tabs.model.js",
       "main.js",
       "repository/qep.repository.js",
       "shell.html!github:systemjs/plugin-text@0.0.8.js",
       "shell.js",
       "views/mailto/mailto.config.js",
       "views/mailto/mailto.html!github:systemjs/plugin-text@0.0.8.js",
       "views/mailto/mailto.js",
       "views/mailto/mailto.service.js",
       "views/query-viewer/box-style.converter.js",
       "views/query-viewer/context-menu/context-menu.html!github:systemjs/plugin-text@0.0.8.js",
       "views/query-viewer/context-menu/context-menu.js",
       "views/query-viewer/loading-bar/loading-bar.html!github:systemjs/plugin-text@0.0.8.js",
       "views/query-viewer/loading-bar/loading-bar.js",
+      "views/query-viewer/loading-bar/row-loader.html!github:systemjs/plugin-text@0.0.8.js",
       "views/query-viewer/query-viewer.config.js",
       "views/query-viewer/query-viewer.html!github:systemjs/plugin-text@0.0.8.js",
       "views/query-viewer/query-viewer.js",
       "views/query-viewer/query-viewer.model.js",
       "views/query-viewer/query-viewer.service.js",
       "views/query-viewer/result-style.converter.js",
       "views/query-viewer/result-value.converter.js",
       "views/query-viewer/scroll.service.js"
     ],
     "aurelia.js": [
       "github:github/fetch@1.0.0.js",
       "github:github/fetch@1.0.0/fetch.js",
       "github:jspm/nodelibs-process@0.1.2.js",
       "github:jspm/nodelibs-process@0.1.2/index.js",
       "npm:aurelia-binding@1.0.9.js",
       "npm:aurelia-binding@1.0.9/aurelia-binding.js",
       "npm:aurelia-bootstrapper@1.0.0.js",
       "npm:aurelia-bootstrapper@1.0.0/aurelia-bootstrapper.js",
       "npm:aurelia-dependency-injection@1.3.1.js",
       "npm:aurelia-dependency-injection@1.3.1/aurelia-dependency-injection.js",
       "npm:aurelia-event-aggregator@1.0.1.js",
       "npm:aurelia-event-aggregator@1.0.1/aurelia-event-aggregator.js",
       "npm:aurelia-fetch-client@1.0.1.js",
       "npm:aurelia-fetch-client@1.0.1/aurelia-fetch-client.js",
       "npm:aurelia-framework@1.0.6.js",
       "npm:aurelia-framework@1.0.6/aurelia-framework.js",
       "npm:aurelia-history-browser@1.0.0.js",
       "npm:aurelia-history-browser@1.0.0/aurelia-history-browser.js",
       "npm:aurelia-history@1.0.0.js",
       "npm:aurelia-history@1.0.0/aurelia-history.js",
       "npm:aurelia-loader-default@1.0.0.js",
       "npm:aurelia-loader-default@1.0.0/aurelia-loader-default.js",
       "npm:aurelia-loader@1.0.0.js",
       "npm:aurelia-loader@1.0.0/aurelia-loader.js",
       "npm:aurelia-logging-console@1.0.0.js",
       "npm:aurelia-logging-console@1.0.0/aurelia-logging-console.js",
       "npm:aurelia-logging@1.3.1.js",
       "npm:aurelia-logging@1.3.1/aurelia-logging.js",
       "npm:aurelia-metadata@1.0.3.js",
       "npm:aurelia-metadata@1.0.3/aurelia-metadata.js",
       "npm:aurelia-pal-browser@1.0.0.js",
       "npm:aurelia-pal-browser@1.0.0/aurelia-pal-browser.js",
       "npm:aurelia-pal@1.3.0.js",
       "npm:aurelia-pal@1.3.0/aurelia-pal.js",
       "npm:aurelia-path@1.1.1.js",
       "npm:aurelia-path@1.1.1/aurelia-path.js",
       "npm:aurelia-polyfills@1.1.1.js",
       "npm:aurelia-polyfills@1.1.1/aurelia-polyfills.js",
       "npm:aurelia-route-recognizer@1.1.0.js",
       "npm:aurelia-route-recognizer@1.1.0/aurelia-route-recognizer.js",
       "npm:aurelia-router@1.3.0.js",
       "npm:aurelia-router@1.3.0/aurelia-router.js",
       "npm:aurelia-task-queue@1.1.0.js",
       "npm:aurelia-task-queue@1.1.0/aurelia-task-queue.js",
       "npm:aurelia-templating-binding@1.0.0.js",
       "npm:aurelia-templating-binding@1.0.0/aurelia-templating-binding.js",
       "npm:aurelia-templating-resources@1.1.1.js",
       "npm:aurelia-templating-resources@1.1.1/abstract-repeater.js",
       "npm:aurelia-templating-resources@1.1.1/analyze-view-factory.js",
       "npm:aurelia-templating-resources@1.1.1/array-repeat-strategy.js",
       "npm:aurelia-templating-resources@1.1.1/attr-binding-behavior.js",
       "npm:aurelia-templating-resources@1.1.1/aurelia-hide-style.js",
       "npm:aurelia-templating-resources@1.1.1/aurelia-templating-resources.js",
       "npm:aurelia-templating-resources@1.1.1/binding-mode-behaviors.js",
       "npm:aurelia-templating-resources@1.1.1/binding-signaler.js",
       "npm:aurelia-templating-resources@1.1.1/compose.js",
       "npm:aurelia-templating-resources@1.1.1/css-resource.js",
       "npm:aurelia-templating-resources@1.1.1/debounce-binding-behavior.js",
       "npm:aurelia-templating-resources@1.1.1/dynamic-element.js",
       "npm:aurelia-templating-resources@1.1.1/focus.js",
       "npm:aurelia-templating-resources@1.1.1/hide.js",
       "npm:aurelia-templating-resources@1.1.1/html-resource-plugin.js",
       "npm:aurelia-templating-resources@1.1.1/html-sanitizer.js",
       "npm:aurelia-templating-resources@1.1.1/if.js",
       "npm:aurelia-templating-resources@1.1.1/map-repeat-strategy.js",
       "npm:aurelia-templating-resources@1.1.1/null-repeat-strategy.js",
       "npm:aurelia-templating-resources@1.1.1/number-repeat-strategy.js",
       "npm:aurelia-templating-resources@1.1.1/repeat-strategy-locator.js",
       "npm:aurelia-templating-resources@1.1.1/repeat-utilities.js",
       "npm:aurelia-templating-resources@1.1.1/repeat.js",
       "npm:aurelia-templating-resources@1.1.1/replaceable.js",
       "npm:aurelia-templating-resources@1.1.1/sanitize-html.js",
       "npm:aurelia-templating-resources@1.1.1/set-repeat-strategy.js",
       "npm:aurelia-templating-resources@1.1.1/show.js",
       "npm:aurelia-templating-resources@1.1.1/signal-binding-behavior.js",
       "npm:aurelia-templating-resources@1.1.1/throttle-binding-behavior.js",
       "npm:aurelia-templating-resources@1.1.1/update-trigger-binding-behavior.js",
       "npm:aurelia-templating-resources@1.1.1/with.js",
       "npm:aurelia-templating-router@1.0.0.js",
       "npm:aurelia-templating-router@1.0.0/aurelia-templating-router.js",
       "npm:aurelia-templating-router@1.0.0/route-href.js",
       "npm:aurelia-templating-router@1.0.0/route-loader.js",
       "npm:aurelia-templating-router@1.0.0/router-view.js",
       "npm:aurelia-templating@1.1.1.js",
       "npm:aurelia-templating@1.1.1/aurelia-templating.js",
       "npm:font-awesome@4.7.0.js",
       "npm:font-awesome@4.7.0/css/font-awesome.css!github:systemjs/plugin-css@0.1.33.js",
       "npm:jquery@2.2.4.js",
       "npm:jquery@2.2.4/dist/jquery.js",
       "npm:process@0.11.10.js",
       "npm:process@0.11.10/browser.js",
       "npm:ramda@0.23.0.js",
       "npm:ramda@0.23.0/index.js",
       "npm:ramda@0.23.0/src/F.js",
       "npm:ramda@0.23.0/src/T.js",
       "npm:ramda@0.23.0/src/__.js",
       "npm:ramda@0.23.0/src/add.js",
       "npm:ramda@0.23.0/src/addIndex.js",
       "npm:ramda@0.23.0/src/adjust.js",
       "npm:ramda@0.23.0/src/all.js",
       "npm:ramda@0.23.0/src/allPass.js",
       "npm:ramda@0.23.0/src/always.js",
       "npm:ramda@0.23.0/src/and.js",
       "npm:ramda@0.23.0/src/any.js",
       "npm:ramda@0.23.0/src/anyPass.js",
       "npm:ramda@0.23.0/src/ap.js",
       "npm:ramda@0.23.0/src/aperture.js",
       "npm:ramda@0.23.0/src/append.js",
       "npm:ramda@0.23.0/src/apply.js",
       "npm:ramda@0.23.0/src/applySpec.js",
       "npm:ramda@0.23.0/src/ascend.js",
       "npm:ramda@0.23.0/src/assoc.js",
       "npm:ramda@0.23.0/src/assocPath.js",
       "npm:ramda@0.23.0/src/binary.js",
       "npm:ramda@0.23.0/src/bind.js",
       "npm:ramda@0.23.0/src/both.js",
       "npm:ramda@0.23.0/src/call.js",
       "npm:ramda@0.23.0/src/chain.js",
       "npm:ramda@0.23.0/src/clamp.js",
       "npm:ramda@0.23.0/src/clone.js",
       "npm:ramda@0.23.0/src/comparator.js",
       "npm:ramda@0.23.0/src/complement.js",
       "npm:ramda@0.23.0/src/compose.js",
       "npm:ramda@0.23.0/src/composeK.js",
       "npm:ramda@0.23.0/src/composeP.js",
       "npm:ramda@0.23.0/src/concat.js",
       "npm:ramda@0.23.0/src/cond.js",
       "npm:ramda@0.23.0/src/construct.js",
       "npm:ramda@0.23.0/src/constructN.js",
       "npm:ramda@0.23.0/src/contains.js",
       "npm:ramda@0.23.0/src/converge.js",
       "npm:ramda@0.23.0/src/countBy.js",
       "npm:ramda@0.23.0/src/curry.js",
       "npm:ramda@0.23.0/src/curryN.js",
       "npm:ramda@0.23.0/src/dec.js",
       "npm:ramda@0.23.0/src/defaultTo.js",
       "npm:ramda@0.23.0/src/descend.js",
       "npm:ramda@0.23.0/src/difference.js",
       "npm:ramda@0.23.0/src/differenceWith.js",
       "npm:ramda@0.23.0/src/dissoc.js",
       "npm:ramda@0.23.0/src/dissocPath.js",
       "npm:ramda@0.23.0/src/divide.js",
       "npm:ramda@0.23.0/src/drop.js",
       "npm:ramda@0.23.0/src/dropLast.js",
       "npm:ramda@0.23.0/src/dropLastWhile.js",
       "npm:ramda@0.23.0/src/dropRepeats.js",
       "npm:ramda@0.23.0/src/dropRepeatsWith.js",
       "npm:ramda@0.23.0/src/dropWhile.js",
       "npm:ramda@0.23.0/src/either.js",
       "npm:ramda@0.23.0/src/empty.js",
       "npm:ramda@0.23.0/src/eqBy.js",
       "npm:ramda@0.23.0/src/eqProps.js",
       "npm:ramda@0.23.0/src/equals.js",
       "npm:ramda@0.23.0/src/evolve.js",
       "npm:ramda@0.23.0/src/filter.js",
       "npm:ramda@0.23.0/src/find.js",
       "npm:ramda@0.23.0/src/findIndex.js",
       "npm:ramda@0.23.0/src/findLast.js",
       "npm:ramda@0.23.0/src/findLastIndex.js",
       "npm:ramda@0.23.0/src/flatten.js",
       "npm:ramda@0.23.0/src/flip.js",
       "npm:ramda@0.23.0/src/forEach.js",
       "npm:ramda@0.23.0/src/forEachObjIndexed.js",
       "npm:ramda@0.23.0/src/fromPairs.js",
       "npm:ramda@0.23.0/src/groupBy.js",
       "npm:ramda@0.23.0/src/groupWith.js",
       "npm:ramda@0.23.0/src/gt.js",
       "npm:ramda@0.23.0/src/gte.js",
       "npm:ramda@0.23.0/src/has.js",
       "npm:ramda@0.23.0/src/hasIn.js",
       "npm:ramda@0.23.0/src/head.js",
       "npm:ramda@0.23.0/src/identical.js",
       "npm:ramda@0.23.0/src/identity.js",
       "npm:ramda@0.23.0/src/ifElse.js",
       "npm:ramda@0.23.0/src/inc.js",
       "npm:ramda@0.23.0/src/indexBy.js",
       "npm:ramda@0.23.0/src/indexOf.js",
       "npm:ramda@0.23.0/src/init.js",
       "npm:ramda@0.23.0/src/insert.js",
       "npm:ramda@0.23.0/src/insertAll.js",
       "npm:ramda@0.23.0/src/internal/_Set.js",
       "npm:ramda@0.23.0/src/internal/_aperture.js",
       "npm:ramda@0.23.0/src/internal/_arity.js",
       "npm:ramda@0.23.0/src/internal/_arrayFromIterator.js",
       "npm:ramda@0.23.0/src/internal/_assign.js",
       "npm:ramda@0.23.0/src/internal/_checkForMethod.js",
       "npm:ramda@0.23.0/src/internal/_clone.js",
       "npm:ramda@0.23.0/src/internal/_cloneRegExp.js",
       "npm:ramda@0.23.0/src/internal/_complement.js",
       "npm:ramda@0.23.0/src/internal/_concat.js",
       "npm:ramda@0.23.0/src/internal/_contains.js",
       "npm:ramda@0.23.0/src/internal/_containsWith.js",
       "npm:ramda@0.23.0/src/internal/_createPartialApplicator.js",
       "npm:ramda@0.23.0/src/internal/_curry1.js",
       "npm:ramda@0.23.0/src/internal/_curry2.js",
       "npm:ramda@0.23.0/src/internal/_curry3.js",
       "npm:ramda@0.23.0/src/internal/_curryN.js",
       "npm:ramda@0.23.0/src/internal/_dispatchable.js",
       "npm:ramda@0.23.0/src/internal/_dropLast.js",
       "npm:ramda@0.23.0/src/internal/_dropLastWhile.js",
       "npm:ramda@0.23.0/src/internal/_equals.js",
       "npm:ramda@0.23.0/src/internal/_filter.js",
       "npm:ramda@0.23.0/src/internal/_flatCat.js",
       "npm:ramda@0.23.0/src/internal/_forceReduced.js",
       "npm:ramda@0.23.0/src/internal/_functionName.js",
       "npm:ramda@0.23.0/src/internal/_has.js",
       "npm:ramda@0.23.0/src/internal/_identity.js",
       "npm:ramda@0.23.0/src/internal/_indexOf.js",
       "npm:ramda@0.23.0/src/internal/_isArguments.js",
       "npm:ramda@0.23.0/src/internal/_isArray.js",
       "npm:ramda@0.23.0/src/internal/_isFunction.js",
       "npm:ramda@0.23.0/src/internal/_isInteger.js",
       "npm:ramda@0.23.0/src/internal/_isNumber.js",
       "npm:ramda@0.23.0/src/internal/_isObject.js",
       "npm:ramda@0.23.0/src/internal/_isPlaceholder.js",
       "npm:ramda@0.23.0/src/internal/_isRegExp.js",
       "npm:ramda@0.23.0/src/internal/_isString.js",
       "npm:ramda@0.23.0/src/internal/_isTransformer.js",
       "npm:ramda@0.23.0/src/internal/_makeFlat.js",
       "npm:ramda@0.23.0/src/internal/_map.js",
       "npm:ramda@0.23.0/src/internal/_objectAssign.js",
       "npm:ramda@0.23.0/src/internal/_of.js",
       "npm:ramda@0.23.0/src/internal/_pipe.js",
       "npm:ramda@0.23.0/src/internal/_pipeP.js",
       "npm:ramda@0.23.0/src/internal/_quote.js",
       "npm:ramda@0.23.0/src/internal/_reduce.js",
       "npm:ramda@0.23.0/src/internal/_reduced.js",
       "npm:ramda@0.23.0/src/internal/_stepCat.js",
       "npm:ramda@0.23.0/src/internal/_toISOString.js",
       "npm:ramda@0.23.0/src/internal/_toString.js",
       "npm:ramda@0.23.0/src/internal/_xall.js",
       "npm:ramda@0.23.0/src/internal/_xany.js",
       "npm:ramda@0.23.0/src/internal/_xaperture.js",
       "npm:ramda@0.23.0/src/internal/_xchain.js",
       "npm:ramda@0.23.0/src/internal/_xdrop.js",
       "npm:ramda@0.23.0/src/internal/_xdropLast.js",
       "npm:ramda@0.23.0/src/internal/_xdropLastWhile.js",
       "npm:ramda@0.23.0/src/internal/_xdropRepeatsWith.js",
       "npm:ramda@0.23.0/src/internal/_xdropWhile.js",
       "npm:ramda@0.23.0/src/internal/_xfBase.js",
       "npm:ramda@0.23.0/src/internal/_xfilter.js",
       "npm:ramda@0.23.0/src/internal/_xfind.js",
       "npm:ramda@0.23.0/src/internal/_xfindIndex.js",
       "npm:ramda@0.23.0/src/internal/_xfindLast.js",
       "npm:ramda@0.23.0/src/internal/_xfindLastIndex.js",
       "npm:ramda@0.23.0/src/internal/_xmap.js",
       "npm:ramda@0.23.0/src/internal/_xreduceBy.js",
       "npm:ramda@0.23.0/src/internal/_xtake.js",
       "npm:ramda@0.23.0/src/internal/_xtakeWhile.js",
       "npm:ramda@0.23.0/src/internal/_xwrap.js",
       "npm:ramda@0.23.0/src/intersection.js",
       "npm:ramda@0.23.0/src/intersectionWith.js",
       "npm:ramda@0.23.0/src/intersperse.js",
       "npm:ramda@0.23.0/src/into.js",
       "npm:ramda@0.23.0/src/invert.js",
       "npm:ramda@0.23.0/src/invertObj.js",
       "npm:ramda@0.23.0/src/invoker.js",
       "npm:ramda@0.23.0/src/is.js",
       "npm:ramda@0.23.0/src/isArrayLike.js",
       "npm:ramda@0.23.0/src/isEmpty.js",
       "npm:ramda@0.23.0/src/isNil.js",
       "npm:ramda@0.23.0/src/join.js",
       "npm:ramda@0.23.0/src/juxt.js",
       "npm:ramda@0.23.0/src/keys.js",
       "npm:ramda@0.23.0/src/keysIn.js",
       "npm:ramda@0.23.0/src/last.js",
       "npm:ramda@0.23.0/src/lastIndexOf.js",
       "npm:ramda@0.23.0/src/length.js",
       "npm:ramda@0.23.0/src/lens.js",
       "npm:ramda@0.23.0/src/lensIndex.js",
       "npm:ramda@0.23.0/src/lensPath.js",
       "npm:ramda@0.23.0/src/lensProp.js",
       "npm:ramda@0.23.0/src/lift.js",
       "npm:ramda@0.23.0/src/liftN.js",
       "npm:ramda@0.23.0/src/lt.js",
       "npm:ramda@0.23.0/src/lte.js",
       "npm:ramda@0.23.0/src/map.js",
       "npm:ramda@0.23.0/src/mapAccum.js",
       "npm:ramda@0.23.0/src/mapAccumRight.js",
       "npm:ramda@0.23.0/src/mapObjIndexed.js",
       "npm:ramda@0.23.0/src/match.js",
       "npm:ramda@0.23.0/src/mathMod.js",
       "npm:ramda@0.23.0/src/max.js",
       "npm:ramda@0.23.0/src/maxBy.js",
       "npm:ramda@0.23.0/src/mean.js",
       "npm:ramda@0.23.0/src/median.js",
       "npm:ramda@0.23.0/src/memoize.js",
       "npm:ramda@0.23.0/src/merge.js",
       "npm:ramda@0.23.0/src/mergeAll.js",
       "npm:ramda@0.23.0/src/mergeWith.js",
       "npm:ramda@0.23.0/src/mergeWithKey.js",
       "npm:ramda@0.23.0/src/min.js",
       "npm:ramda@0.23.0/src/minBy.js",
       "npm:ramda@0.23.0/src/modulo.js",
       "npm:ramda@0.23.0/src/multiply.js",
       "npm:ramda@0.23.0/src/nAry.js",
       "npm:ramda@0.23.0/src/negate.js",
       "npm:ramda@0.23.0/src/none.js",
       "npm:ramda@0.23.0/src/not.js",
       "npm:ramda@0.23.0/src/nth.js",
       "npm:ramda@0.23.0/src/nthArg.js",
       "npm:ramda@0.23.0/src/objOf.js",
       "npm:ramda@0.23.0/src/of.js",
       "npm:ramda@0.23.0/src/omit.js",
       "npm:ramda@0.23.0/src/once.js",
       "npm:ramda@0.23.0/src/or.js",
       "npm:ramda@0.23.0/src/over.js",
       "npm:ramda@0.23.0/src/pair.js",
       "npm:ramda@0.23.0/src/partial.js",
       "npm:ramda@0.23.0/src/partialRight.js",
       "npm:ramda@0.23.0/src/partition.js",
       "npm:ramda@0.23.0/src/path.js",
       "npm:ramda@0.23.0/src/pathEq.js",
       "npm:ramda@0.23.0/src/pathOr.js",
       "npm:ramda@0.23.0/src/pathSatisfies.js",
       "npm:ramda@0.23.0/src/pick.js",
       "npm:ramda@0.23.0/src/pickAll.js",
       "npm:ramda@0.23.0/src/pickBy.js",
       "npm:ramda@0.23.0/src/pipe.js",
       "npm:ramda@0.23.0/src/pipeK.js",
       "npm:ramda@0.23.0/src/pipeP.js",
       "npm:ramda@0.23.0/src/pluck.js",
       "npm:ramda@0.23.0/src/prepend.js",
       "npm:ramda@0.23.0/src/product.js",
       "npm:ramda@0.23.0/src/project.js",
       "npm:ramda@0.23.0/src/prop.js",
       "npm:ramda@0.23.0/src/propEq.js",
       "npm:ramda@0.23.0/src/propIs.js",
       "npm:ramda@0.23.0/src/propOr.js",
       "npm:ramda@0.23.0/src/propSatisfies.js",
       "npm:ramda@0.23.0/src/props.js",
       "npm:ramda@0.23.0/src/range.js",
       "npm:ramda@0.23.0/src/reduce.js",
       "npm:ramda@0.23.0/src/reduceBy.js",
       "npm:ramda@0.23.0/src/reduceRight.js",
       "npm:ramda@0.23.0/src/reduceWhile.js",
       "npm:ramda@0.23.0/src/reduced.js",
       "npm:ramda@0.23.0/src/reject.js",
       "npm:ramda@0.23.0/src/remove.js",
       "npm:ramda@0.23.0/src/repeat.js",
       "npm:ramda@0.23.0/src/replace.js",
       "npm:ramda@0.23.0/src/reverse.js",
       "npm:ramda@0.23.0/src/scan.js",
       "npm:ramda@0.23.0/src/sequence.js",
       "npm:ramda@0.23.0/src/set.js",
       "npm:ramda@0.23.0/src/slice.js",
       "npm:ramda@0.23.0/src/sort.js",
       "npm:ramda@0.23.0/src/sortBy.js",
       "npm:ramda@0.23.0/src/sortWith.js",
       "npm:ramda@0.23.0/src/split.js",
       "npm:ramda@0.23.0/src/splitAt.js",
       "npm:ramda@0.23.0/src/splitEvery.js",
       "npm:ramda@0.23.0/src/splitWhen.js",
       "npm:ramda@0.23.0/src/subtract.js",
       "npm:ramda@0.23.0/src/sum.js",
       "npm:ramda@0.23.0/src/symmetricDifference.js",
       "npm:ramda@0.23.0/src/symmetricDifferenceWith.js",
       "npm:ramda@0.23.0/src/tail.js",
       "npm:ramda@0.23.0/src/take.js",
       "npm:ramda@0.23.0/src/takeLast.js",
       "npm:ramda@0.23.0/src/takeLastWhile.js",
       "npm:ramda@0.23.0/src/takeWhile.js",
       "npm:ramda@0.23.0/src/tap.js",
       "npm:ramda@0.23.0/src/test.js",
       "npm:ramda@0.23.0/src/times.js",
       "npm:ramda@0.23.0/src/toLower.js",
       "npm:ramda@0.23.0/src/toPairs.js",
       "npm:ramda@0.23.0/src/toPairsIn.js",
       "npm:ramda@0.23.0/src/toString.js",
       "npm:ramda@0.23.0/src/toUpper.js",
       "npm:ramda@0.23.0/src/transduce.js",
       "npm:ramda@0.23.0/src/transpose.js",
       "npm:ramda@0.23.0/src/traverse.js",
       "npm:ramda@0.23.0/src/trim.js",
       "npm:ramda@0.23.0/src/tryCatch.js",
       "npm:ramda@0.23.0/src/type.js",
       "npm:ramda@0.23.0/src/unapply.js",
       "npm:ramda@0.23.0/src/unary.js",
       "npm:ramda@0.23.0/src/uncurryN.js",
       "npm:ramda@0.23.0/src/unfold.js",
       "npm:ramda@0.23.0/src/union.js",
       "npm:ramda@0.23.0/src/unionWith.js",
       "npm:ramda@0.23.0/src/uniq.js",
       "npm:ramda@0.23.0/src/uniqBy.js",
       "npm:ramda@0.23.0/src/uniqWith.js",
       "npm:ramda@0.23.0/src/unless.js",
       "npm:ramda@0.23.0/src/unnest.js",
       "npm:ramda@0.23.0/src/until.js",
       "npm:ramda@0.23.0/src/update.js",
       "npm:ramda@0.23.0/src/useWith.js",
       "npm:ramda@0.23.0/src/values.js",
       "npm:ramda@0.23.0/src/valuesIn.js",
       "npm:ramda@0.23.0/src/view.js",
       "npm:ramda@0.23.0/src/when.js",
       "npm:ramda@0.23.0/src/where.js",
       "npm:ramda@0.23.0/src/whereEq.js",
       "npm:ramda@0.23.0/src/without.js",
       "npm:ramda@0.23.0/src/xprod.js",
       "npm:ramda@0.23.0/src/zip.js",
       "npm:ramda@0.23.0/src/zipObj.js",
       "npm:ramda@0.23.0/src/zipWith.js"
     ]
   }
 });
\ No newline at end of file
diff --git a/shrine-webclient/src/main/js/client/js-shrine/dist/app-build.js b/shrine-webclient/src/main/js/client/js-shrine/dist/app-build.js
index 3fccfbbce..07088df2a 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/dist/app-build.js
+++ b/shrine-webclient/src/main/js/client/js-shrine/dist/app-build.js
@@ -1 +1 @@
-"bundle";System.register("main.js",[],function(a,b){"use strict";function c(a){a.use.standardConfiguration().developmentLogging(),a.start().then(function(){return a.setRoot("shell")})}return a("configure",c),{setters:[],execute:function(){}}}),function(){var a=System.amdDefine;a("shell.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return"<template><router-view></router-view></template>"})}(),System.register("shell.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("Shell",d=function(){function a(){c(this,a)}return a.prototype.configureRouter=function(a,b){a.title="SHRINE Webclient Plugin",a.map([{route:"mailto",moduleId:"views/mailto/mailto"},{route:["","query-viewer"],moduleId:"views/query-viewer/query-viewer"}]),this.router=b},a}()),a("Shell",d)}}}),function(){var a=System.amdDefine;a("views/mailto/mailto.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><div class="mailto"><div class="content"><p>If you have questions about your query results or this SHRINE network, contact the Data Steward at your site.</p><div class="email js-email"><button class="button button--large js-button" click.delegate="openEmail()">Email Data Steward</button></div></div></div></template>'})}(),System.register("views/mailto/mailto.service.js",["aurelia-framework","repository/qep.repository"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h;return{setters:[function(a){d=a.inject},function(a){e=a.QEPRepository}],execute:function(){a("MailToService",(f=d(e),h=f(g=function(){function a(b){c(this,a),this.repository=b}return a.prototype.fetchStewardEmail=function(){return this.repository.fetchStewardEmail()},a}())||g)),a("MailToService",h)}}}),System.register("views/mailto/mailto.config.js",[],function(a,b){"use strict";var c;return{setters:[],execute:function(){a("MailConfig",c={mailto:"mailto:",subject:encodeURIComponent("Question from a SHRINE User"),body:encodeURIComponent("Please enter the suggested information and your question. Your data steward will reply to this email.\n        \n\n***Never send patient information, passwords, or other sensitive information by email****\n        \nName:\n        \nTitle:\n        \nUser name (to log into SHRINE):\n        \nTelephone Number (optional):\n        \nPreferred email address (optional):\n        \n\nQuestion or Comment:")}),a("MailConfig",c)}}}),System.register("views/mailto/mailto.js",["aurelia-framework","views/mailto/mailto.service","views/mailto/mailto.config"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i;return{setters:[function(a){d=a.inject},function(a){e=a.MailToService},function(a){f=a.MailConfig}],execute:function(){a("MailTo",(g=d(e,f),i=g(h=function(){function a(b,d){c(this,a),this.service=b,this.config=d}return a.prototype.openEmail=function(){var a=this;this.service.fetchStewardEmail().then(function(b){window.top.location="mailto:"+b+"?subject="+a.config.subject+"&body="+a.config.body})},a}())||h)),a("MailTo",i)}}}),System.register("views/query-viewer/box-style.converter.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("BoxStyleValueConverter",d=function(){function a(){c(this,a)}return a.prototype.toView=function(a){return"transform: translate("+String(-100*a)+"%);"},a}()),a("BoxStyleValueConverter",d)}}}),function(){var a=System.amdDefine;a("views/query-viewer/context-menu/context-menu.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><ul class="context-menu ${context.class || \'hide\'}" mouseleave.trigger="context.class=\'hide\'" css="top: ${context.y - 40}; left: ${context.x - 50};"><li click.delegate="loadQuery(context.id)"><a href="#"><i class="fa fa-files-o"></i> Clone</a></li><li><a click.delegate="loadHistory()" href="#"><i class="fa fa-history"></i> Refresh All</a></li></ul></template>'})}(),System.register("views/query-viewer/context-menu/context-menu.js",["aurelia-framework","common/i2b2.service.js"],function(a,b){"use strict";function c(a,b,c,d){c&&Object.defineProperty(a,b,{enumerable:c.enumerable,configurable:c.configurable,writable:c.writable,value:c.initializer?c.initializer.call(d):void 0})}function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function e(a,b,c,d,e){var f={};return Object.keys(d).forEach(function(a){f[a]=d[a]}),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce(function(c,d){return d(a,b,c)||c},f),e&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(e):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(a,b,f),f=null),f}var f,g,h,i,j,k,l,m;return{setters:[function(a){f=a.inject,g=a.bindable},function(a){h=a.I2B2Service}],execute:function(){a("ContextMenu",(i=f(h),m=i((k=function b(a){var e=this;d(this,b),c(this,"context",l,this),this.loadQuery=function(b){a.loadQuery(b),e.context["class"]="hide"},this.loadHistory=function(){a.loadHistory(),e.context["class"]="hide"}},l=e(k.prototype,"context",[g],{enumerable:!0,initializer:null}),j=k))||j)),a("ContextMenu",m)}}}),function(){var a=System.amdDefine;a("views/query-viewer/loading-bar/loading-bar.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><div class="loader"><h1>${status}</h1><div class="slider"><div class="line"></div><div class="break dot1"></div><div class="break dot2"></div><div class="break dot3"></div></div></div></template>'})}(),System.register("views/query-viewer/loading-bar/loading-bar.js",["aurelia-framework"],function(a,b){"use strict";function c(a,b,c,d){c&&Object.defineProperty(a,b,{enumerable:c.enumerable,configurable:c.configurable,writable:c.writable,value:c.initializer?c.initializer.call(d):void 0})}function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function e(a,b,c,d,e){var f={};return Object.keys(d).forEach(function(a){f[a]=d[a]}),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce(function(c,d){return d(a,b,c)||c},f),e&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(e):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(a,b,f),f=null),f}var f,g,h,i;return{setters:[function(a){f=a.bindable}],execute:function(){a("LoadingBar",(g=function b(){d(this,b),c(this,"status",h,this)},h=e(g.prototype,"status",[f],{enumerable:!0,initializer:null}),i=g)),a("LoadingBar",i)}}}),function(){var a=System.amdDefine;a("views/query-viewer/query-viewer.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><require from="views/query-viewer/result-style.converter"></require><require from="views/query-viewer/result-value.converter"></require><require from="views/query-viewer/box-style.converter"></require><require from="views/query-viewer/context-menu/context-menu"></require><require from="views/query-viewer/loading-bar/loading-bar"></require><loading-bar status.bind="\'Loading...\'" if.bind="showLoader"></loading-bar><div style="width: 100%; text-align: center"><ul class="circle-pagination" if.bind="showCircles"><li repeat.for="screen of screens" class="${screenIndex === $index? \'active\' : \'\'}" click.delegate="screenIndex = $index"><div>${screen.id}</div></li></ul></div><div class="box-wrapper"><div class="box" repeat.for="screen of screens" css.bind="screenIndex | boxStyle"><section><div><table cellpadding="0" cellspacing="0" border="0"><thead><tr><th class="tbl-header"></th><th repeat.for="node of screen.nodes" class="tbl-header"><div class="hideextra">${node}</div></th></tr></thead></table></div><context-menu context.bind="context"></context-menu><div class="tbl-content ${vertStyle}" scroll.trigger="onScroll($event)"><table cellpadding="0" cellspacing="0" border="0"><tbody><tr if.bind="runningQuery"><th><div class="hideextra">${runningQuery}</div></th><td repeat.for="node of screen.nodes" style="color: #00FF00">RUNNING</td></tr><tr repeat.for="result of screen.results" contextmenu.trigger="context = getContext($event, result)"><th><div class="hideextra">${result.name}</div></th><td repeat.for="nodeResult of result.nodeResults" css="${nodeResult | resultStyle}"><a if.bind="nodeResult.status !== \'FINISHED\'" click.delegate="errorDetail(nodeResult)" style="text-decoration: underline">${nodeResult.status} </a>${nodeResult | result}</td></tr></tbody></table></div></section></div></div></template>'})}(),System.register("repository/qep.repository.js",["aurelia-framework","aurelia-fetch-client","fetch"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i;return{setters:[function(a){d=a.inject},function(a){e=a.HttpClient},function(a){}],execute:function(){f=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),a("QEPRepository",(g=d(e),i=g(h=function(){function a(b){var d=this;c(this,a),b.configure(function(a){a.useStandardConfiguration().withBaseUrl(d.url).withDefaults({headers:{Authorization:"Basic "+d.auth}})}),this.http=b}return a.prototype.fetchPreviousQueries=function(a){var b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return this.http.fetch("qep/queryResults?limit="+a+"&skip="+b).then(function(a){return a.json()})["catch"](function(a){return a})},a.prototype.fetchStewardEmail=function(){return this.http.fetch("data?key=stewardEmail").then(function(a){return a.json()}).then(function(a){return a.indexOf('"')>0?a.split('"')[1]:a})["catch"](function(){return""})},f(a,[{key:"url",get:function(){var a=document.URL,b=":6443/shrine-metadata/";return a.substring(0,a.lastIndexOf(":"))+b}},{key:"auth",get:function(){var a=sessionStorage.getItem("shrine.auth");return sessionStorage.removeItem("shrine.auth"),a}}]),a}())||h)),a("QEPRepository",i)}}}),System.register("views/query-viewer/query-viewer.service.js",["aurelia-framework","repository/qep.repository","./query-viewer.config"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i;return{setters:[function(a){d=a.inject},function(a){e=a.QEPRepository},function(a){f=a.QueryViewerConfig}],execute:function(){a("QueryViewerService",(g=d(e,f),i=g(h=function(){function a(b,d,e){c(this,a),this.repository=b,this.config=d}return a.prototype.fetchPreviousQueries=function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.config.maxQueriesPerScroll;return this.repository.fetchPreviousQueries(a)},a.prototype.getScreens=function(a,b){var c=this;return new Promise(function(d,e){for(var f=a.sort().length,g=[],h=0;h<f;h+=c.config.maxNodesPerScreen){var i=c.getNumberOfNodesOnScreen(a,h,c.config.maxNodesPerScreen),j=i-1,k=c.getScreenId(a,h,j),l=a.slice(h,i),m=c.mapQueriesToScreenNodes(l,b,c.findQueriesForNode);g.push({id:k,nodes:l,results:m})}d(g)})},a.prototype.mapQueriesToScreenNodes=function(a,b){var c=[];return b.forEach(function(b,d){var e={name:b.query.queryName,id:b.query.networkId,nodeResults:[]};a.forEach(function(a){e.nodeResults.push(b.adaptersToResults.find(function(b){return b.adapterNode===a}))}),c.push(e)}),c},a.prototype.getNumberOfNodesOnScreen=function(a,b){var c=b+this.config.maxNodesPerScreen;return c<a.length?c:a.length},a.prototype.getScreenId=function(a,b,c){var d=a[b],e=a[c];return String(d).substr(0,1)+"-"+String(e).substr(0,1)},a}())||h)),a("QueryViewerService",i)}}}),System.register("common/i2b2.service.js",["ramda","./container"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f;return{setters:[function(a){d=a},function(a){e=a.Container}],execute:function(){a("I2B2Service",f=function b(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window;c(this,b);var f=e.of(a),g=d.curry(function(a,b){return b.value?e.of(d.prop(a,b.value)):e.of(null)}),h=d.compose(g("i2b2"),g("window"),g("parent")),i=d.compose(g("CRC"),h),j=d.compose(g("events"),h),k=d.compose(g("SHRINE"),h);this.onResize=function(a){return j(f).map(function(b){return b.changedZoomWindows.subscribe(a)})},this.onHistory=function(a){return i(f).map(function(b){return b.ctrlr.history.events.onDataUpdate.subscribe(a)})},this.onQuery=function(a){return j(f).map(function(b){return b.afterQueryInit.subscribe(a)})},this.loadHistory=function(){return i(f).map(function(a){return a.view.history.doRefreshAll()})},this.loadQuery=function(a){return i(f).map(function(b){return b.ctrlr.QT.doQueryLoad(a)})},this.errorDetail=function(a){return k(f).map(function(b){return b.plugin.errorDetail(a)})}}),a("I2B2Service",f)}}}),System.register("views/query-viewer/query-viewer.model.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e;return{setters:[],execute:function(){d=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),a("QueryViewerModel",e=function(){function a(){c(this,a),this.processing=!1,this.loadedCount=0,this.totalQueries=0,this.screens=[]}return d(a,[{key:"moreToLoad",get:function(){return this.loadedCount<this.totalQueries}},{key:"hasData",get:function(){return this.screens.length>0}}]),a}()),a("QueryViewerModel",e)}}}),System.register("common/container.js",["ramda"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f;return{setters:[function(a){d=a}],execute:function(){e=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),a("Container",f=function(){function a(b){c(this,a),this.__value=b}return a.of=function(b){return new a(function(){return b})},a.prototype.map=function(b){return this.hasNothing()?a.of(null):a.of(b(this.value))},a.prototype.join=function(){return this.hasNothing()?a.of(null):this.value},a.prototype.chain=function(a){return this.map(a).join()},a.prototype.hasNothing=function(){return null===this.value||void 0===this.value},e(a,[{key:"value",get:function(){return this.__value()}}]),a}()),a("Container",f)}}}),System.register("views/query-viewer/scroll.service.js",["ramda","common/container"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h;return{setters:[function(a){d=a},function(a){e=a.Container}],execute:function(){a("ScrollService",(g=f=function b(){c(this,b)},f.either=d.curry(function(a,b,c){return e.of(d.prop(a,c)||b)}),f.target=function(a,b){return h.either("target",b,b).chain(function(b){return h.either(a,0,b)})},f.clientHeight=function(a){return h.target("clientHeight",a)},f.scrollHeight=function(a){return h.target("scrollHeight",a)},f.scrollTop=function(a){return h.target("scrollTop",a)},f.userScroll=function(a){return h.clientHeight(a).map(function(b){return b+h.scrollTop(a).value})},f.scrollRatio=function(a){return h.userScroll(a).map(function(b){return b/h.scrollHeight(a).value})},h=g)),a("ScrollService",h)}}}),System.register("views/query-viewer/query-viewer.config.js",[],function(a,b){"use strict";var c;return{setters:[],execute:function(){a("QueryViewerConfig",c={maxNodesPerScreen:10,maxQueriesPerScroll:100}),a("QueryViewerConfig",c)}}}),System.register("views/query-viewer/query-viewer.js",["aurelia-framework","views/query-viewer/query-viewer.service","common/i2b2.service.js","./query-viewer.model","./scroll.service","./query-viewer.config"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i,j,k,l,m;return{setters:[function(a){d=a.inject,e=a.computedFrom},function(a){f=a.QueryViewerService},function(a){g=a.I2B2Service},function(a){h=a.QueryViewerModel},function(a){i=a.ScrollService},function(a){j=a.QueryViewerConfig}],execute:function(){a("QueryViewer",(k=d(f,g,h),m=k(l=function(){function a(b,d,e){var f=this;c(this,a),this.screenIndex=0,this.showCircles=!1,this.showLoader=!0,this.runningQuery=null,this.service=b,this.vertStyle="v-full",this.scrollRatio=0;var g=function(a){return e.totalQueries=a.rowCount,e.loadedCount=a.queryResults.length,f.service.getScreens(a.adapters,a.queryResults)},h=function(a){f.showLoader=!1,f.runningQuery=null,f.screens=a,f.showCircles=f.screens.length>1,e.screens=a,e.processing=!1},k=function(){return f.service.fetchPreviousQueries(e.loadedCount+j.maxQueriesPerScroll).then(g).then(h)["catch"](function(a){return console.log(a)})},l=function(a,b){return f.runningQuery=b[0].name},m=function(){return e.hasData?h(e.screens):k()},n=function(a){return 1===i.scrollRatio(a).value&&e.moreToLoad&&!e.processing};this.onScroll=function(a){n(a)&&(k(),e.processing=!0)};var o=function(a){return"ADD"!==a.action},p=function(a,b){return f.vertStyle=b.find(o)?"v-min":"v-full"};this.errorDetail=d.errorDetail,d.onResize(p),d.onHistory(k),d.onQuery(l),m()}return a.prototype.getContext=function(a,b){return{x:a.pageX,y:a.pageY,id:b.id,"class":"show"}},a}())||l)),a("QueryViewer",m)}}}),System.register("views/query-viewer/result-style.converter.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("ResultStyleValueConverter",d=function(){function a(){c(this,a)}return a.prototype.toView=function(a){var b=this.isUnresolved(a)?"color:"+this.getColorValue(a):"";return b},a.prototype.isUnresolved=function(a){var b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"FINISHED";return!a||a.status!==b},a.prototype.getColorValue=function(a){var b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"ERROR",c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"#FF0000",d=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"#00FF00";return a&&a.status!==b?d:c},a}()),a("ResultStyleValueConverter",d)}}}),System.register("views/query-viewer/result-value.converter.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("ResultValueConverter",d=function(){function a(){c(this,a)}return a.prototype.toView=function(a){return a?"FINISHED"!==a.status?"":a.count<0?"<=10":a.count:"not available"},a}()),a("ResultValueConverter",d)}}});
\ No newline at end of file
+"bundle";System.register("main.js",[],function(a,b){"use strict";function c(a){a.use.standardConfiguration().developmentLogging(),a.start().then(function(){return a.setRoot("shell")})}return a("configure",c),{setters:[],execute:function(){}}}),function(){var a=System.amdDefine;a("shell.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return"<template><router-view></router-view></template>"})}(),System.register("common/i2b2.pub-sub.js",["aurelia-framework","./i2b2.service","./tabs.model"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i;return{setters:[function(a){d=a.inject},function(a){e=a.I2B2Service},function(a){f=a.TabsModel}],execute:function(){a("I2B2PubSub",(g=d(e,f),i=g(h=function b(a,d){c(this,b),this.listen=function(){var b=function(a,b){return b.find(function(a){return"ADD"===a.action})?d.setMax():d.setMin()};a.onResize(b)}})||h)),a("I2B2PubSub",i)}}}),System.register("shell.js",["aurelia-framework","common/i2b2.pub-sub"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h;return{setters:[function(a){d=a.inject},function(a){e=a.I2B2PubSub}],execute:function(){a("Shell",(f=d(e),h=f(g=function(){function a(b){c(this,a),b.listen()}return a.prototype.configureRouter=function(a,b){a.title="SHRINE Webclient Plugin",a.map([{route:"mailto",moduleId:"views/mailto/mailto"},{route:["","query-viewer"],moduleId:"views/query-viewer/query-viewer"}]),this.router=b},a}())||g)),a("Shell",h)}}}),function(){var a=System.amdDefine;a("views/mailto/mailto.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><div class="mailto"><div class="content"><p>If you have questions about your query results or this SHRINE network, contact the Data Steward at your site.</p><div class="email js-email"><button class="button button--large js-button" click.delegate="openEmail()">Email Data Steward</button></div></div></div></template>'})}(),System.register("views/mailto/mailto.service.js",["aurelia-framework","repository/qep.repository"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h;return{setters:[function(a){d=a.inject},function(a){e=a.QEPRepository}],execute:function(){a("MailToService",(f=d(e),h=f(g=function(){function a(b){c(this,a),this.repository=b}return a.prototype.fetchStewardEmail=function(){return this.repository.fetchStewardEmail()},a}())||g)),a("MailToService",h)}}}),System.register("views/mailto/mailto.config.js",[],function(a,b){"use strict";var c;return{setters:[],execute:function(){a("MailConfig",c={mailto:"mailto:",subject:encodeURIComponent("Question from a SHRINE User"),body:encodeURIComponent("Please enter the suggested information and your question. Your data steward will reply to this email.\n        \n\n***Never send patient information, passwords, or other sensitive information by email****\n        \nName:\n        \nTitle:\n        \nUser name (to log into SHRINE):\n        \nTelephone Number (optional):\n        \nPreferred email address (optional):\n        \n\nQuestion or Comment:")}),a("MailConfig",c)}}}),System.register("views/mailto/mailto.js",["aurelia-framework","views/mailto/mailto.service","views/mailto/mailto.config"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i;return{setters:[function(a){d=a.inject},function(a){e=a.MailToService},function(a){f=a.MailConfig}],execute:function(){a("MailTo",(g=d(e,f),i=g(h=function(){function a(b,d){c(this,a),this.service=b,this.config=d}return a.prototype.openEmail=function(){var a=this;this.service.fetchStewardEmail().then(function(b){window.top.location="mailto:"+b+"?subject="+a.config.subject+"&body="+a.config.body})},a}())||h)),a("MailTo",i)}}}),System.register("views/query-viewer/box-style.converter.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("BoxStyleValueConverter",d=function(){function a(){c(this,a)}return a.prototype.toView=function(a){return"transform: translate("+String(-100*a)+"%);"},a}()),a("BoxStyleValueConverter",d)}}}),function(){var a=System.amdDefine;a("views/query-viewer/context-menu/context-menu.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><ul class="context-menu ${context.class || \'hide\'}" mouseleave.trigger="context.class=\'hide\'" css="top: ${context.y - 40}; left: ${context.x - 50};"><li click.delegate="loadQuery(context.id)"><a href="#"><i class="fa fa-files-o"></i> Clone</a></li><li><a click.delegate="loadHistory()" href="#"><i class="fa fa-history"></i> Refresh All</a></li></ul></template>'})}(),System.register("views/query-viewer/context-menu/context-menu.js",["aurelia-framework","common/i2b2.service.js"],function(a,b){"use strict";function c(a,b,c,d){c&&Object.defineProperty(a,b,{enumerable:c.enumerable,configurable:c.configurable,writable:c.writable,value:c.initializer?c.initializer.call(d):void 0})}function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function e(a,b,c,d,e){var f={};return Object.keys(d).forEach(function(a){f[a]=d[a]}),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce(function(c,d){return d(a,b,c)||c},f),e&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(e):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(a,b,f),f=null),f}var f,g,h,i,j,k,l,m;return{setters:[function(a){f=a.inject,g=a.bindable},function(a){h=a.I2B2Service}],execute:function(){a("ContextMenu",(i=f(h),m=i((k=function b(a){var e=this;d(this,b),c(this,"context",l,this),this.loadQuery=function(b){a.loadQuery(b),e.context["class"]="hide"},this.loadHistory=function(){a.loadHistory(),e.context["class"]="hide"}},l=e(k.prototype,"context",[g],{enumerable:!0,initializer:null}),j=k))||j)),a("ContextMenu",m)}}}),function(){var a=System.amdDefine;a("views/query-viewer/loading-bar/loading-bar.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><div class="loader"><h1>${status}</h1><div class="slider"><div class="line"></div><div class="break dot1"></div><div class="break dot2"></div><div class="break dot3"></div></div></div></template>'})}(),System.register("views/query-viewer/loading-bar/loading-bar.js",["aurelia-framework"],function(a,b){"use strict";function c(a,b,c,d){c&&Object.defineProperty(a,b,{enumerable:c.enumerable,configurable:c.configurable,writable:c.writable,value:c.initializer?c.initializer.call(d):void 0})}function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function e(a,b,c,d,e){var f={};return Object.keys(d).forEach(function(a){f[a]=d[a]}),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce(function(c,d){return d(a,b,c)||c},f),e&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(e):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(a,b,f),f=null),f}var f,g,h,i;return{setters:[function(a){f=a.bindable}],execute:function(){a("LoadingBar",(g=function b(){d(this,b),c(this,"status",h,this)},h=e(g.prototype,"status",[f],{enumerable:!0,initializer:null}),i=g)),a("LoadingBar",i)}}}),function(){var a=System.amdDefine;a("views/query-viewer/loading-bar/row-loader.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return""})}(),function(){var a=System.amdDefine;a("views/query-viewer/query-viewer.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><require from="views/query-viewer/result-style.converter"></require><require from="views/query-viewer/result-value.converter"></require><require from="views/query-viewer/box-style.converter"></require><require from="views/query-viewer/context-menu/context-menu"></require><require from="views/query-viewer/loading-bar/loading-bar"></require><loading-bar status.bind="\'Loading...\'" if.bind="showLoader"></loading-bar><div style="width: 100%; text-align: center"><ul class="circle-pagination" if.bind="showCircles"><li repeat.for="screen of screens" class="${screenIndex === $index? \'active\' : \'\'}" click.delegate="screenIndex = $index"><div>${screen.id}</div></li></ul></div><div class="box-wrapper"><div class="box" repeat.for="screen of screens" css.bind="screenIndex | boxStyle"><section><div><table cellpadding="0" cellspacing="0" border="0"><thead><tr><th class="tbl-header"></th><th repeat.for="node of screen.nodes" class="tbl-header"><div class="hideextra">${node}</div></th></tr></thead></table></div><context-menu context.bind="context"></context-menu><div class="tbl-content ${vertStyle}" scroll.trigger="onScroll($event)"><table cellpadding="0" cellspacing="0" border="0"><tbody><tr if.bind="runningQuery"><th><div class="hideextra">${runningQuery}</div></th><td repeat.for="node of screen.nodes" style="color: #00FF00">RUNNING</td></tr><tr repeat.for="result of screen.results" contextmenu.trigger="context = getContext($event, result)"><th><div class="hideextra">${result.name}</div></th><td repeat.for="nodeResult of result.nodeResults" css="${nodeResult | resultStyle}"><a if.bind="nodeResult.status !== \'FINISHED\'" click.delegate="errorDetail(nodeResult)" style="text-decoration: underline">${nodeResult.status} </a>${nodeResult | result}</td></tr><tr if.bind="loadingInfiniteScroll"><td colspan="${screen.nodes.length + 1}" style="background:rgba(217, 236, 240, .05); text-align:center; color: rgba(0, 0, 0, .20)"><div style="font-size: 1.5rem"><i class="fa fa-spinner fa-spin" style="color: inherit"></i> Loading...</div></td></tr></tbody></table></div></section></div></div></template>'})}(),System.register("repository/qep.repository.js",["aurelia-framework","aurelia-fetch-client","fetch"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i;return{setters:[function(a){d=a.inject},function(a){e=a.HttpClient},function(a){}],execute:function(){f=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),a("QEPRepository",(g=d(e),i=g(h=function(){function a(b){var d=this;c(this,a),b.configure(function(a){a.useStandardConfiguration().withBaseUrl(d.url).withDefaults({headers:{Authorization:"Basic "+d.auth}})}),this.http=b}return a.prototype.fetchPreviousQueries=function(a){var b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return this.http.fetch("qep/queryResults?limit="+a+"&skip="+b).then(function(a){return a.json()})["catch"](function(a){return a})},a.prototype.fetchStewardEmail=function(){return this.http.fetch("data?key=stewardEmail").then(function(a){return a.json()}).then(function(a){return a.indexOf('"')>0?a.split('"')[1]:a})["catch"](function(){return""})},f(a,[{key:"url",get:function(){var a=document.URL,b=":6443/shrine-metadata/";return a.substring(0,a.lastIndexOf(":"))+b}},{key:"auth",get:function(){var a=sessionStorage.getItem("shrine.auth");return sessionStorage.removeItem("shrine.auth"),a}}]),a}())||h)),a("QEPRepository",i)}}}),System.register("views/query-viewer/query-viewer.service.js",["aurelia-framework","repository/qep.repository","./query-viewer.config"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i;return{setters:[function(a){d=a.inject},function(a){e=a.QEPRepository},function(a){f=a.QueryViewerConfig}],execute:function(){a("QueryViewerService",(g=d(e,f),i=g(h=function(){function a(b,d,e){c(this,a),this.repository=b,this.config=d}return a.prototype.fetchPreviousQueries=function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.config.maxQueriesPerScroll;return this.repository.fetchPreviousQueries(a)},a.prototype.getScreens=function(a,b){var c=this;return new Promise(function(d,e){for(var f=a.sort().length,g=[],h=0;h<f;h+=c.config.maxNodesPerScreen){var i=c.getNumberOfNodesOnScreen(a,h,c.config.maxNodesPerScreen),j=i-1,k=c.getScreenId(a,h,j),l=a.slice(h,i),m=c.mapQueriesToScreenNodes(l,b,c.findQueriesForNode);g.push({id:k,nodes:l,results:m})}d(g)})},a.prototype.mapQueriesToScreenNodes=function(a,b){var c=[];return b.forEach(function(b,d){var e={name:b.query.queryName,id:b.query.networkId,nodeResults:[]};a.forEach(function(a){e.nodeResults.push(b.adaptersToResults.find(function(b){return b.adapterNode===a}))}),c.push(e)}),c},a.prototype.getNumberOfNodesOnScreen=function(a,b){var c=b+this.config.maxNodesPerScreen;return c<a.length?c:a.length},a.prototype.getScreenId=function(a,b,c){var d=a[b],e=a[c];return String(d).substr(0,1)+"-"+String(e).substr(0,1)},a}())||h)),a("QueryViewerService",i)}}}),System.register("common/i2b2.service.js",["ramda","./container"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f;return{setters:[function(a){d=a},function(a){e=a.Container}],execute:function(){a("I2B2Service",f=function b(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window;c(this,b);var f=e.of(a),g=d.curry(function(a,b){return b.value?e.of(d.prop(a,b.value)):e.of(null)}),h=d.compose(g("i2b2"),g("window"),g("parent")),i=d.compose(g("CRC"),h),j=d.compose(g("events"),h),k=d.compose(g("SHRINE"),h);this.onResize=function(a){return j(f).map(function(b){return b.changedZoomWindows.subscribe(a)})},this.onHistory=function(a){return i(f).map(function(b){return b.ctrlr.history.events.onDataUpdate.subscribe(a)})},this.onQuery=function(a){return j(f).map(function(b){return b.afterQueryInit.subscribe(a)})},this.loadHistory=function(){return i(f).map(function(a){return a.view.history.doRefreshAll()})},this.loadQuery=function(a){return i(f).map(function(b){return b.ctrlr.QT.doQueryLoad(a)})},this.errorDetail=function(a){return k(f).map(function(b){return b.plugin.errorDetail(a)})}}),a("I2B2Service",f)}}}),System.register("common/tabs.model.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e;return{setters:[],execute:function(){d=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),a("TabsModel",e=function(){function a(){c(this,a);var b=a.min;a.prototype.setMax=function(){return b=a.full},a.prototype.setMin=function(){return b=a.min},a.prototype.mode=function(){return b}}return d(a,null,[{key:"full",get:function(){return"v-full"}},{key:"min",get:function(){return"v-min"}}]),a}()),a("TabsModel",e)}}}),System.register("views/query-viewer/query-viewer.model.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e;return{setters:[],execute:function(){d=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),a("QueryViewerModel",e=function(){function a(){c(this,a),this.processing=!1,this.loadedCount=0,this.totalQueries=0,this.screens=[]}return d(a,[{key:"moreToLoad",get:function(){return this.loadedCount<this.totalQueries}},{key:"hasData",get:function(){return this.screens.length>0}}]),a}()),a("QueryViewerModel",e)}}}),System.register("common/container.js",["ramda"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f;return{setters:[function(a){d=a}],execute:function(){e=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),a("Container",f=function(){function a(b){c(this,a),this.__value=b}return a.of=function(b){return new a(function(){return b})},a.prototype.map=function(b){return this.hasNothing()?a.of(null):a.of(b(this.value))},a.prototype.join=function(){return this.hasNothing()?a.of(null):this.value},a.prototype.chain=function(a){return this.map(a).join()},a.prototype.hasNothing=function(){return null===this.value||void 0===this.value},a.prototype.ap=function(a){a.map(this.value)},e(a,[{key:"value",get:function(){return this.__value()}}]),a}()),a("Container",f)}}}),System.register("views/query-viewer/scroll.service.js",["ramda","common/container"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h;return{setters:[function(a){d=a},function(a){e=a.Container}],execute:function(){a("ScrollService",(g=f=function b(){c(this,b)},f.either=d.curry(function(a,b,c){return e.of(d.prop(a,c)||b)}),f.target=function(a,b){return h.either("target",b,b).chain(function(b){return h.either(a,0,b)})},f.clientHeight=function(a){return h.target("clientHeight",a)},f.scrollHeight=function(a){return h.target("scrollHeight",a)},f.scrollTop=function(a){return h.target("scrollTop",a)},f.userScroll=function(a){return h.clientHeight(a).map(function(b){return b+h.scrollTop(a).value})},f.scrollRatio=function(a){return h.userScroll(a).map(function(b){return b/h.scrollHeight(a).value})},h=g)),a("ScrollService",h)}}}),System.register("views/query-viewer/query-viewer.config.js",[],function(a,b){"use strict";var c;return{setters:[],execute:function(){a("QueryViewerConfig",c={maxNodesPerScreen:10,maxQueriesPerScroll:40}),a("QueryViewerConfig",c)}}}),System.register("views/query-viewer/query-viewer.js",["aurelia-framework","views/query-viewer/query-viewer.service","common/i2b2.service.js","common/tabs.model","./query-viewer.model","./scroll.service","./query-viewer.config"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i,j,k,l,m,n;return{setters:[function(a){d=a.inject,e=a.computedFrom},function(a){f=a.QueryViewerService},function(a){g=a.I2B2Service},function(a){h=a.TabsModel},function(a){i=a.QueryViewerModel},function(a){j=a.ScrollService},function(a){k=a.QueryViewerConfig}],execute:function(){a("QueryViewer",(l=d(f,g,i,h),n=l(m=function(){function a(b,d,e,f){var g=this;c(this,a),this.screenIndex=0,this.showCircles=!1,this.showLoader=!0,this.runningQuery=null,this.service=b,this.vertStyle=f.mode(),this.scrollRatio=0,this.queriesToLoad=e.moreToLoad,this.loadingInfiniteScroll=!1;var h=function(a){return e.totalQueries=a.rowCount,e.loadedCount=a.queryResults.length,g.queriesToLoad=e.moreToLoad,g.service.getScreens(a.adapters,a.queryResults)},i=function(a){g.showLoader=!1,g.runningQuery=null,g.screens=a,g.showCircles=g.screens.length>1,e.screens=a,e.processing=!1,g.loadingInfiniteScroll=e.processing},l=function(){return g.service.fetchPreviousQueries(e.loadedCount+k.maxQueriesPerScroll).then(h).then(i)["catch"](function(a){return console.log(a)})},m=function(a,b){g.runningQuery=b[0].name},n=function(){return e.hasData?i(e.screens):l()},o=function(a){return 1===j.scrollRatio(a).value&&e.moreToLoad&&!e.processing};this.onScroll=function(a){o(a)&&(l(),e.processing=!0,g.loadingInfiniteScroll=e.processing)};var p=function(a){return"ADD"!==a.action},q=function(a,b){return g.vertStyle=b.find(p)?"v-min":"v-full"};this.errorDetail=d.errorDetail,d.onResize(q),d.onHistory(l),d.onQuery(m),n()}return a.prototype.getContext=function(a,b){return{x:a.pageX,y:a.pageY,id:b.id,"class":"show"}},a}())||m)),a("QueryViewer",n)}}}),System.register("views/query-viewer/result-style.converter.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("ResultStyleValueConverter",d=function(){function a(){c(this,a)}return a.prototype.toView=function(a){var b=this.isUnresolved(a)?"color:"+this.getColorValue(a):"";return b},a.prototype.isUnresolved=function(a){var b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"FINISHED";return!a||a.status!==b},a.prototype.getColorValue=function(a){var b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"ERROR",c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"#FF0000",d=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"#00FF00";return a&&a.status!==b?d:c},a}()),a("ResultStyleValueConverter",d)}}}),System.register("views/query-viewer/result-value.converter.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("ResultValueConverter",d=function(){function a(){c(this,a)}return a.prototype.toView=function(a){return a?"FINISHED"!==a.status?"":a.count<0?"<=10":a.count:"not available"},a}()),a("ResultValueConverter",d)}}});
\ No newline at end of file
diff --git a/shrine-webclient/src/main/js/client/js-shrine/dist/common/container.js b/shrine-webclient/src/main/js/client/js-shrine/dist/common/container.js
index 0e4dbcb37..3a85c0d24 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/dist/common/container.js
+++ b/shrine-webclient/src/main/js/client/js-shrine/dist/common/container.js
@@ -1,78 +1,82 @@
 System.register(['ramda'], function (_export, _context) {
     "use strict";
 
     var _, _createClass, Container;
 
     function _classCallCheck(instance, Constructor) {
         if (!(instance instanceof Constructor)) {
             throw new TypeError("Cannot call a class as a function");
         }
     }
 
     return {
         setters: [function (_ramda) {
             _ = _ramda;
         }],
         execute: function () {
             _createClass = function () {
                 function defineProperties(target, props) {
                     for (var i = 0; i < props.length; i++) {
                         var descriptor = props[i];
                         descriptor.enumerable = descriptor.enumerable || false;
                         descriptor.configurable = true;
                         if ("value" in descriptor) descriptor.writable = true;
                         Object.defineProperty(target, descriptor.key, descriptor);
                     }
                 }
 
                 return function (Constructor, protoProps, staticProps) {
                     if (protoProps) defineProperties(Constructor.prototype, protoProps);
                     if (staticProps) defineProperties(Constructor, staticProps);
                     return Constructor;
                 };
             }();
 
             _export('Container', Container = function () {
                 function Container(f) {
                     _classCallCheck(this, Container);
 
                     this.__value = f;
                 }
 
                 Container.of = function of(value) {
                     return new Container(function () {
                         return value;
                     });
                 };
 
                 Container.prototype.map = function map(f) {
                     return this.hasNothing() ? Container.of(null) : Container.of(f(this.value));
                 };
 
                 Container.prototype.join = function join() {
                     return this.hasNothing() ? Container.of(null) : this.value;
                 };
 
                 Container.prototype.chain = function chain(f) {
                     return this.map(f).join();
                 };
 
                 Container.prototype.hasNothing = function hasNothing() {
                     return this.value === null || this.value === undefined;
                 };
 
+                Container.prototype.ap = function ap(otherContainer) {
+                    otherContainer.map(this.value);
+                };
+
                 _createClass(Container, [{
                     key: 'value',
                     get: function get() {
                         return this.__value();
                     }
                 }]);
 
                 return Container;
             }());
 
             _export('Container', Container);
         }
     };
 });
 //# sourceMappingURL=container.js.map
diff --git a/shrine-webclient/src/main/js/client/js-shrine/dist/common/container.js.map b/shrine-webclient/src/main/js/client/js-shrine/dist/common/container.js.map
index e4ae3f33f..c9545148d 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/dist/common/container.js.map
+++ b/shrine-webclient/src/main/js/client/js-shrine/dist/common/container.js.map
@@ -1 +1 @@
-{"version":3,"sources":["common/container.js"],"names":["_","Container","f","__value","of","value","map","hasNothing","join","chain","undefined"],"mappings":";;;;;;;;;;;;;AAAYA,a;;;;;;;;;;;;;;;;;;;;;iCACCC,S;AACT,mCAAYC,CAAZ,EAAe;AAAA;;AACX,yBAAKC,OAAL,GAAeD,CAAf;AACH;;0BAEME,E,eAAGC,K,EAAO;AACb,2BAAO,IAAIJ,SAAJ,CAAc,YAAW;AAC5B,+BAAOI,KAAP;AACH,qBAFM,CAAP;AAGH,iB;;oCAMDC,G,gBAAIJ,C,EAAG;AACH,2BAAO,KAAKK,UAAL,KAAoBN,UAAUG,EAAV,CAAa,IAAb,CAApB,GAAyCH,UAAUG,EAAV,CAAaF,EAAE,KAAKG,KAAP,CAAb,CAAhD;AACH,iB;;oCAEDG,I,mBAAO;AACH,2BAAO,KAAKD,UAAL,KAAmBN,UAAUG,EAAV,CAAa,IAAb,CAAnB,GAAwC,KAAKC,KAApD;AACH,iB;;oCAEDI,K,kBAAMP,C,EAAG;AACL,2BAAO,KAAKI,GAAL,CAASJ,CAAT,EAAYM,IAAZ,EAAP;AACH,iB;;oCAEDD,U,yBAAa;AACT,2BAAO,KAAKF,KAAL,KAAe,IAAf,IAAuB,KAAKA,KAAL,KAAeK,SAA7C;AACH,iB;;;;wCAlBW;AACR,+BAAO,KAAKP,OAAL,EAAP;AACH","file":"container.js","sourceRoot":"/src"}
\ No newline at end of file
+{"version":3,"sources":["common/container.js"],"names":["_","Container","f","__value","of","value","map","hasNothing","join","chain","undefined","ap","otherContainer"],"mappings":";;;;;;;;;;;;;AAAYA,a;;;;;;;;;;;;;;;;;;;;;iCACCC,S;AACT,mCAAYC,CAAZ,EAAe;AAAA;;AACX,yBAAKC,OAAL,GAAeD,CAAf;AACH;;0BAEME,E,eAAGC,K,EAAO;AACb,2BAAO,IAAIJ,SAAJ,CAAc,YAAW;AAC5B,+BAAOI,KAAP;AACH,qBAFM,CAAP;AAGH,iB;;oCAMDC,G,gBAAIJ,C,EAAG;AACH,2BAAO,KAAKK,UAAL,KAAoBN,UAAUG,EAAV,CAAa,IAAb,CAApB,GAAyCH,UAAUG,EAAV,CAAaF,EAAE,KAAKG,KAAP,CAAb,CAAhD;AACH,iB;;oCAEDG,I,mBAAO;AACH,2BAAO,KAAKD,UAAL,KAAmBN,UAAUG,EAAV,CAAa,IAAb,CAAnB,GAAwC,KAAKC,KAApD;AACH,iB;;oCAEDI,K,kBAAMP,C,EAAG;AACL,2BAAO,KAAKI,GAAL,CAASJ,CAAT,EAAYM,IAAZ,EAAP;AACH,iB;;oCAEDD,U,yBAAa;AACT,2BAAO,KAAKF,KAAL,KAAe,IAAf,IAAuB,KAAKA,KAAL,KAAeK,SAA7C;AACH,iB;;oCAEDC,E,eAAGC,c,EAAgB;AACfA,mCAAeN,GAAf,CAAmB,KAAKD,KAAxB;AACH,iB;;;;wCAtBW;AACR,+BAAO,KAAKF,OAAL,EAAP;AACH","file":"container.js","sourceRoot":"/src"}
\ No newline at end of file
diff --git a/shrine-webclient/src/main/js/client/js-shrine/dist/common/i2b2.pub-sub.js b/shrine-webclient/src/main/js/client/js-shrine/dist/common/i2b2.pub-sub.js
new file mode 100644
index 000000000..704c35401
--- /dev/null
+++ b/shrine-webclient/src/main/js/client/js-shrine/dist/common/i2b2.pub-sub.js
@@ -0,0 +1,38 @@
+System.register(['aurelia-framework', './i2b2.service', './tabs.model'], function (_export, _context) {
+    "use strict";
+
+    var inject, I2B2Service, TabsModel, _dec, _class, I2B2PubSub;
+
+    function _classCallCheck(instance, Constructor) {
+        if (!(instance instanceof Constructor)) {
+            throw new TypeError("Cannot call a class as a function");
+        }
+    }
+
+    return {
+        setters: [function (_aureliaFramework) {
+            inject = _aureliaFramework.inject;
+        }, function (_i2b2Service) {
+            I2B2Service = _i2b2Service.I2B2Service;
+        }, function (_tabsModel) {
+            TabsModel = _tabsModel.TabsModel;
+        }],
+        execute: function () {
+            _export('I2B2PubSub', I2B2PubSub = (_dec = inject(I2B2Service, TabsModel), _dec(_class = function I2B2PubSub(i2b2Svc, tabs) {
+                _classCallCheck(this, I2B2PubSub);
+
+                this.listen = function () {
+                    var setVertStyle = function setVertStyle(a, b) {
+                        return b.find(function (e) {
+                            return e.action === 'ADD';
+                        }) ? tabs.setMax() : tabs.setMin();
+                    };
+                    i2b2Svc.onResize(setVertStyle);
+                };
+            }) || _class));
+
+            _export('I2B2PubSub', I2B2PubSub);
+        }
+    };
+});
+//# sourceMappingURL=i2b2.pub-sub.js.map
diff --git a/shrine-webclient/src/main/js/client/js-shrine/dist/common/i2b2.pub-sub.js.map b/shrine-webclient/src/main/js/client/js-shrine/dist/common/i2b2.pub-sub.js.map
new file mode 100644
index 000000000..a30f27f3f
--- /dev/null
+++ b/shrine-webclient/src/main/js/client/js-shrine/dist/common/i2b2.pub-sub.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["common/i2b2.pub-sub.js"],"names":["inject","I2B2Service","TabsModel","I2B2PubSub","i2b2Svc","tabs","listen","setVertStyle","a","b","find","e","action","setMax","setMin","onResize"],"mappings":";;;;;;;;;;;;;AAASA,kB,qBAAAA,M;;AACAC,uB,gBAAAA,W;;AACAC,qB,cAAAA,S;;;kCAGIC,U,WADZH,OAAOC,WAAP,EAAoBC,SAApB,C,gBAEG,oBAAYE,OAAZ,EAAqBC,IAArB,EAA2B;AAAA;;AACvB,qBAAKC,MAAL,GAAc,YAAM;AAChB,wBAAMC,eAAe,SAAfA,YAAe,CAACC,CAAD,EAAIC,CAAJ;AAAA,+BAAUA,EAAEC,IAAF,CAAO;AAAA,mCAAKC,EAAEC,MAAF,KAAa,KAAlB;AAAA,yBAAP,IAAkCP,KAAKQ,MAAL,EAAlC,GAAkDR,KAAKS,MAAL,EAA5D;AAAA,qBAArB;AACAV,4BAAQW,QAAR,CAAiBR,YAAjB;AACH,iBAHD;AAIH,a","file":"i2b2.pub-sub.js","sourceRoot":"/src"}
\ No newline at end of file
diff --git a/shrine-webclient/src/main/js/client/js-shrine/dist/common/tabs.model.js b/shrine-webclient/src/main/js/client/js-shrine/dist/common/tabs.model.js
new file mode 100644
index 000000000..319e29213
--- /dev/null
+++ b/shrine-webclient/src/main/js/client/js-shrine/dist/common/tabs.model.js
@@ -0,0 +1,68 @@
+System.register([], function (_export, _context) {
+    "use strict";
+
+    var _createClass, TabsModel;
+
+    function _classCallCheck(instance, Constructor) {
+        if (!(instance instanceof Constructor)) {
+            throw new TypeError("Cannot call a class as a function");
+        }
+    }
+
+    return {
+        setters: [],
+        execute: function () {
+            _createClass = function () {
+                function defineProperties(target, props) {
+                    for (var i = 0; i < props.length; i++) {
+                        var descriptor = props[i];
+                        descriptor.enumerable = descriptor.enumerable || false;
+                        descriptor.configurable = true;
+                        if ("value" in descriptor) descriptor.writable = true;
+                        Object.defineProperty(target, descriptor.key, descriptor);
+                    }
+                }
+
+                return function (Constructor, protoProps, staticProps) {
+                    if (protoProps) defineProperties(Constructor.prototype, protoProps);
+                    if (staticProps) defineProperties(Constructor, staticProps);
+                    return Constructor;
+                };
+            }();
+
+            _export('TabsModel', TabsModel = function () {
+                function TabsModel() {
+                    _classCallCheck(this, TabsModel);
+
+                    var mode = TabsModel.min;
+                    TabsModel.prototype.setMax = function () {
+                        return mode = TabsModel.full;
+                    };
+                    TabsModel.prototype.setMin = function () {
+                        return mode = TabsModel.min;
+                    };
+                    TabsModel.prototype.mode = function () {
+                        return mode;
+                    };
+                }
+
+                _createClass(TabsModel, null, [{
+                    key: 'full',
+                    get: function get() {
+                        return 'v-full';
+                    }
+                }, {
+                    key: 'min',
+                    get: function get() {
+                        return 'v-min';
+                    }
+                }]);
+
+                return TabsModel;
+            }());
+
+            _export('TabsModel', TabsModel);
+        }
+    };
+});
+//# sourceMappingURL=tabs.model.js.map
diff --git a/shrine-webclient/src/main/js/client/js-shrine/dist/common/tabs.model.js.map b/shrine-webclient/src/main/js/client/js-shrine/dist/common/tabs.model.js.map
new file mode 100644
index 000000000..ed4444128
--- /dev/null
+++ b/shrine-webclient/src/main/js/client/js-shrine/dist/common/tabs.model.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["common/tabs.model.js"],"names":["TabsModel","mode","min","prototype","setMax","full","setMin"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCAAaA,S;AAET,qCAAc;AAAA;;AACV,wBAAIC,OAAOD,UAAUE,GAArB;AACAF,8BAAUG,SAAV,CAAoBC,MAApB,GAA6B;AAAA,+BAAMH,OAAOD,UAAUK,IAAvB;AAAA,qBAA7B;AACAL,8BAAUG,SAAV,CAAoBG,MAApB,GAA6B;AAAA,+BAAML,OAAOD,UAAUE,GAAvB;AAAA,qBAA7B;AACAF,8BAAUG,SAAV,CAAoBF,IAApB,GAA2B;AAAA,+BAAMA,IAAN;AAAA,qBAA3B;AACH;;;;wCAEiB;AACd,+BAAO,QAAP;AACH;;;wCAEgB;AACb,+BAAO,OAAP;AACH","file":"tabs.model.js","sourceRoot":"/src"}
\ No newline at end of file
diff --git a/shrine-webclient/src/main/js/client/js-shrine/dist/shell.js b/shrine-webclient/src/main/js/client/js-shrine/dist/shell.js
index 8e3d0b4e9..f3b4b5443 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/dist/shell.js
+++ b/shrine-webclient/src/main/js/client/js-shrine/dist/shell.js
@@ -1,35 +1,41 @@
-System.register([], function (_export, _context) {
+System.register(['aurelia-framework', 'common/i2b2.pub-sub'], function (_export, _context) {
   "use strict";
 
-  var Shell;
+  var inject, I2B2PubSub, _dec, _class, Shell;
 
   function _classCallCheck(instance, Constructor) {
     if (!(instance instanceof Constructor)) {
       throw new TypeError("Cannot call a class as a function");
     }
   }
 
   return {
-    setters: [],
+    setters: [function (_aureliaFramework) {
+      inject = _aureliaFramework.inject;
+    }, function (_commonI2b2PubSub) {
+      I2B2PubSub = _commonI2b2PubSub.I2B2PubSub;
+    }],
     execute: function () {
-      _export('Shell', Shell = function () {
-        function Shell() {
+      _export('Shell', Shell = (_dec = inject(I2B2PubSub), _dec(_class = function () {
+        function Shell(i2b2PubSub) {
           _classCallCheck(this, Shell);
+
+          i2b2PubSub.listen();
         }
 
         Shell.prototype.configureRouter = function configureRouter(config, router) {
 
           config.title = 'SHRINE Webclient Plugin';
           config.map([{ route: 'mailto', moduleId: 'views/mailto/mailto' }, { route: ['', 'query-viewer'], moduleId: 'views/query-viewer/query-viewer' }]);
 
           this.router = router;
         };
 
         return Shell;
-      }());
+      }()) || _class));
 
       _export('Shell', Shell);
     }
   };
 });
 //# sourceMappingURL=shell.js.map
diff --git a/shrine-webclient/src/main/js/client/js-shrine/dist/shell.js.map b/shrine-webclient/src/main/js/client/js-shrine/dist/shell.js.map
index 936f9e4ea..ae487159c 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/dist/shell.js.map
+++ b/shrine-webclient/src/main/js/client/js-shrine/dist/shell.js.map
@@ -1 +1 @@
-{"version":3,"sources":["shell.js"],"names":["Shell","configureRouter","config","router","title","map","route","moduleId"],"mappings":";;;;;;;;;;;;;;uBAAaA,K;;;;;wBACXC,e,4BAAgBC,M,EAAQC,M,EAAQ;;AAE9BD,iBAAOE,KAAP,GAAe,yBAAf;AACAF,iBAAOG,GAAP,CAAW,CACT,EAACC,OAAO,QAAR,EAAkBC,UAAU,qBAA5B,EADS,EAET,EAACD,OAAO,CAAC,EAAD,EAAK,cAAL,CAAR,EAA8BC,UAAU,iCAAxC,EAFS,CAAX;;AAKA,eAAKJ,MAAL,GAAcA,MAAd;AACD,S","file":"shell.js","sourceRoot":"/src"}
\ No newline at end of file
+{"version":3,"sources":["shell.js"],"names":["inject","I2B2PubSub","Shell","i2b2PubSub","listen","configureRouter","config","router","title","map","route","moduleId"],"mappings":";;;;;;;;;;;;;AAAQA,Y,qBAAAA,M;;AACAC,gB,qBAAAA,U;;;uBAEKC,K,WADZF,OAAOC,UAAP,C;AAGC,uBAAYE,UAAZ,EAAwB;AAAA;;AACtBA,qBAAWC,MAAX;AAED;;wBACDC,e,4BAAgBC,M,EAAQC,M,EAAQ;;AAE9BD,iBAAOE,KAAP,GAAe,yBAAf;AACAF,iBAAOG,GAAP,CAAW,CACT,EAACC,OAAO,QAAR,EAAkBC,UAAU,qBAA5B,EADS,EAET,EAACD,OAAO,CAAC,EAAD,EAAK,cAAL,CAAR,EAA8BC,UAAU,iCAAxC,EAFS,CAAX;;AAKA,eAAKJ,MAAL,GAAcA,MAAd;AACD,S","file":"shell.js","sourceRoot":"/src"}
\ No newline at end of file
diff --git a/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/loading-bar/row-loader.html b/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/loading-bar/row-loader.html
new file mode 100644
index 000000000..e69de29bb
diff --git a/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.config.js b/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.config.js
index bb118fef2..3eebce7f8 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.config.js
+++ b/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.config.js
@@ -1,17 +1,17 @@
 System.register([], function (_export, _context) {
     "use strict";
 
     var QueryViewerConfig;
     return {
         setters: [],
         execute: function () {
             _export("QueryViewerConfig", QueryViewerConfig = {
                 maxNodesPerScreen: 10,
-                maxQueriesPerScroll: 100
+                maxQueriesPerScroll: 40
             });
 
             _export("QueryViewerConfig", QueryViewerConfig);
         }
     };
 });
 //# sourceMappingURL=query-viewer.config.js.map
diff --git a/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.html b/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.html
index 21799c3e6..2ba6624da 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.html
+++ b/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.html
@@ -1 +1 @@
-<template><require from="views/query-viewer/result-style.converter"></require><require from="views/query-viewer/result-value.converter"></require><require from="views/query-viewer/box-style.converter"></require><require from="views/query-viewer/context-menu/context-menu"></require><require from="views/query-viewer/loading-bar/loading-bar"></require><loading-bar status.bind="'Loading...'" if.bind="showLoader"></loading-bar><div style="width: 100%; text-align: center"><ul class="circle-pagination" if.bind="showCircles"><li repeat.for="screen of screens" class="${screenIndex === $index? 'active' : ''}" click.delegate="screenIndex = $index"><div>${screen.id}</div></li></ul></div><div class="box-wrapper"><div class="box" repeat.for="screen of screens" css.bind="screenIndex | boxStyle"><section><div><table cellpadding="0" cellspacing="0" border="0"><thead><tr><th class="tbl-header"></th><th repeat.for="node of screen.nodes" class="tbl-header"><div class="hideextra">${node}</div></th></tr></thead></table></div><context-menu context.bind="context"></context-menu><div class="tbl-content ${vertStyle}" scroll.trigger="onScroll($event)"><table cellpadding="0" cellspacing="0" border="0"><tbody><tr if.bind="runningQuery"><th><div class="hideextra">${runningQuery}</div></th><td repeat.for="node of screen.nodes" style="color: #00FF00">RUNNING</td></tr><tr repeat.for="result of screen.results" contextmenu.trigger="context = getContext($event, result)"><th><div class="hideextra">${result.name}</div></th><td repeat.for="nodeResult of result.nodeResults" css="${nodeResult | resultStyle}"><a if.bind="nodeResult.status !== 'FINISHED'" click.delegate="errorDetail(nodeResult)" style="text-decoration: underline">${nodeResult.status} </a>${nodeResult | result}</td></tr></tbody></table></div></section></div></div></template>
\ No newline at end of file
+<template><require from="views/query-viewer/result-style.converter"></require><require from="views/query-viewer/result-value.converter"></require><require from="views/query-viewer/box-style.converter"></require><require from="views/query-viewer/context-menu/context-menu"></require><require from="views/query-viewer/loading-bar/loading-bar"></require><loading-bar status.bind="'Loading...'" if.bind="showLoader"></loading-bar><div style="width: 100%; text-align: center"><ul class="circle-pagination" if.bind="showCircles"><li repeat.for="screen of screens" class="${screenIndex === $index? 'active' : ''}" click.delegate="screenIndex = $index"><div>${screen.id}</div></li></ul></div><div class="box-wrapper"><div class="box" repeat.for="screen of screens" css.bind="screenIndex | boxStyle"><section><div><table cellpadding="0" cellspacing="0" border="0"><thead><tr><th class="tbl-header"></th><th repeat.for="node of screen.nodes" class="tbl-header"><div class="hideextra">${node}</div></th></tr></thead></table></div><context-menu context.bind="context"></context-menu><div class="tbl-content ${vertStyle}" scroll.trigger="onScroll($event)"><table cellpadding="0" cellspacing="0" border="0"><tbody><tr if.bind="runningQuery"><th><div class="hideextra">${runningQuery}</div></th><td repeat.for="node of screen.nodes" style="color: #00FF00">RUNNING</td></tr><tr repeat.for="result of screen.results" contextmenu.trigger="context = getContext($event, result)"><th><div class="hideextra">${result.name}</div></th><td repeat.for="nodeResult of result.nodeResults" css="${nodeResult | resultStyle}"><a if.bind="nodeResult.status !== 'FINISHED'" click.delegate="errorDetail(nodeResult)" style="text-decoration: underline">${nodeResult.status} </a>${nodeResult | result}</td></tr><tr if.bind="loadingInfiniteScroll"><td colspan="${screen.nodes.length + 1}" style="background:rgba(217, 236, 240, .05); text-align:center; color: rgba(0, 0, 0, .20)"><div style="font-size: 1.5rem"><i class="fa fa-spinner fa-spin" style="color: inherit"></i> Loading...</div></td></tr></tbody></table></div></section></div></div></template>
\ No newline at end of file
diff --git a/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.js b/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.js
index 952a8ea0e..ab36b1012 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.js
+++ b/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.js
@@ -1,109 +1,117 @@
-System.register(['aurelia-framework', 'views/query-viewer/query-viewer.service', 'common/i2b2.service.js', './query-viewer.model', './scroll.service', './query-viewer.config'], function (_export, _context) {
+System.register(['aurelia-framework', 'views/query-viewer/query-viewer.service', 'common/i2b2.service.js', 'common/tabs.model', './query-viewer.model', './scroll.service', './query-viewer.config'], function (_export, _context) {
     "use strict";
 
-    var inject, computedFrom, QueryViewerService, I2B2Service, QueryViewerModel, ScrollService, QueryViewerConfig, _dec, _class, QueryViewer;
+    var inject, computedFrom, QueryViewerService, I2B2Service, TabsModel, QueryViewerModel, ScrollService, QueryViewerConfig, _dec, _class, QueryViewer;
 
     function _classCallCheck(instance, Constructor) {
         if (!(instance instanceof Constructor)) {
             throw new TypeError("Cannot call a class as a function");
         }
     }
 
     return {
         setters: [function (_aureliaFramework) {
             inject = _aureliaFramework.inject;
             computedFrom = _aureliaFramework.computedFrom;
         }, function (_viewsQueryViewerQueryViewerService) {
             QueryViewerService = _viewsQueryViewerQueryViewerService.QueryViewerService;
         }, function (_commonI2b2ServiceJs) {
             I2B2Service = _commonI2b2ServiceJs.I2B2Service;
+        }, function (_commonTabsModel) {
+            TabsModel = _commonTabsModel.TabsModel;
         }, function (_queryViewerModel) {
             QueryViewerModel = _queryViewerModel.QueryViewerModel;
         }, function (_scrollService) {
             ScrollService = _scrollService.ScrollService;
         }, function (_queryViewerConfig) {
             QueryViewerConfig = _queryViewerConfig.QueryViewerConfig;
         }],
         execute: function () {
-            _export('QueryViewer', QueryViewer = (_dec = inject(QueryViewerService, I2B2Service, QueryViewerModel), _dec(_class = function () {
-                function QueryViewer(service, i2b2Svc, model) {
+            _export('QueryViewer', QueryViewer = (_dec = inject(QueryViewerService, I2B2Service, QueryViewerModel, TabsModel), _dec(_class = function () {
+                function QueryViewer(service, i2b2Svc, model, tabs) {
                     var _this = this;
 
                     _classCallCheck(this, QueryViewer);
 
                     this.screenIndex = 0;
                     this.showCircles = false;
                     this.showLoader = true;
                     this.runningQuery = null;
                     this.service = service;
-                    this.vertStyle = 'v-full';
+                    this.vertStyle = tabs.mode();
                     this.scrollRatio = 0;
+                    this.queriesToLoad = model.moreToLoad;
+                    this.loadingInfiniteScroll = false;
 
                     var parseResultToScreens = function parseResultToScreens(result) {
                         model.totalQueries = result.rowCount;
                         model.loadedCount = result.queryResults.length;
+                        _this.queriesToLoad = model.moreToLoad;
                         return _this.service.getScreens(result.adapters, result.queryResults);
                     };
                     var setVM = function setVM(screens) {
                         _this.showLoader = false;
                         _this.runningQuery = null;
                         _this.screens = screens;
                         _this.showCircles = _this.screens.length > 1;
                         model.screens = screens;
                         model.processing = false;
+                        _this.loadingInfiniteScroll = model.processing;
                     };
 
                     var refresh = function refresh() {
                         return _this.service.fetchPreviousQueries(model.loadedCount + QueryViewerConfig.maxQueriesPerScroll).then(parseResultToScreens).then(setVM).catch(function (error) {
                             return console.log(error);
                         });
                     };
 
                     var addQuery = function addQuery(event, data) {
-                        return _this.runningQuery = data[0].name;
+                        _this.runningQuery = data[0].name;
                     };
                     var init = function init() {
                         return model.hasData ? setVM(model.screens) : refresh();
                     };
+
                     var loadMoreQueries = function loadMoreQueries(e) {
                         return ScrollService.scrollRatio(e).value === 1 && model.moreToLoad && !model.processing;
                     };
 
                     this.onScroll = function (e) {
                         if (loadMoreQueries(e)) {
                             refresh();
                             model.processing = true;
+                            _this.loadingInfiniteScroll = model.processing;
                         }
                     };
 
                     var isMinimized = function isMinimized(e) {
                         return e.action !== 'ADD';
                     };
                     var setVertStyle = function setVertStyle(a, b) {
                         return _this.vertStyle = b.find(isMinimized) ? 'v-min' : 'v-full';
                     };
                     this.errorDetail = i2b2Svc.errorDetail;
                     i2b2Svc.onResize(setVertStyle);
                     i2b2Svc.onHistory(refresh);
                     i2b2Svc.onQuery(addQuery);
 
                     init();
                 }
 
                 QueryViewer.prototype.getContext = function getContext(event, result) {
                     return {
                         x: event.pageX,
                         y: event.pageY,
                         id: result.id,
                         class: 'show'
                     };
                 };
 
                 return QueryViewer;
             }()) || _class));
 
             _export('QueryViewer', QueryViewer);
         }
     };
 });
 //# sourceMappingURL=query-viewer.js.map
diff --git a/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.js.map b/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.js.map
index 0c17b032d..85ac72f19 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.js.map
+++ b/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.js.map
@@ -1 +1 @@
-{"version":3,"sources":["views/query-viewer/query-viewer.js"],"names":["inject","computedFrom","QueryViewerService","I2B2Service","QueryViewerModel","ScrollService","QueryViewerConfig","QueryViewer","service","i2b2Svc","model","screenIndex","showCircles","showLoader","runningQuery","vertStyle","scrollRatio","parseResultToScreens","totalQueries","result","rowCount","loadedCount","queryResults","length","getScreens","adapters","setVM","screens","processing","refresh","fetchPreviousQueries","maxQueriesPerScroll","then","catch","console","log","error","addQuery","event","data","name","init","hasData","loadMoreQueries","e","value","moreToLoad","onScroll","isMinimized","action","setVertStyle","a","b","find","errorDetail","onResize","onHistory","onQuery","getContext","x","pageX","y","pageY","id","class"],"mappings":";;;;;;;;;;;;;AAASA,kB,qBAAAA,M;AAAQC,wB,qBAAAA,Y;;AACRC,8B,uCAAAA,kB;;AACAC,uB,wBAAAA,W;;AACAC,4B,qBAAAA,gB;;AACDC,yB,kBAAAA,a;;AACAC,6B,sBAAAA,iB;;;mCAGKC,W,WADZP,OAAOE,kBAAP,EAA2BC,WAA3B,EAAwCC,gBAAxC,C;AAEG,qCAAYI,OAAZ,EAAqBC,OAArB,EAA8BC,KAA9B,EAAqC;AAAA;;AAAA;;AAGjC,yBAAKC,WAAL,GAAmB,CAAnB;AACA,yBAAKC,WAAL,GAAmB,KAAnB;AACA,yBAAKC,UAAL,GAAkB,IAAlB;AACA,yBAAKC,YAAL,GAAoB,IAApB;AACA,yBAAKN,OAAL,GAAeA,OAAf;AACA,yBAAKO,SAAL,GAAiB,QAAjB;AACA,yBAAKC,WAAL,GAAmB,CAAnB;;AAGA,wBAAMC,uBAAuB,SAAvBA,oBAAuB,SAAU;AACnCP,8BAAMQ,YAAN,GAAqBC,OAAOC,QAA5B;AACAV,8BAAMW,WAAN,GAAoBF,OAAOG,YAAP,CAAoBC,MAAxC;AACA,+BAAO,MAAKf,OAAL,CAAagB,UAAb,CAAwBL,OAAOM,QAA/B,EAAyCN,OAAOG,YAAhD,CAAP;AACH,qBAJD;AAKA,wBAAMI,QAAQ,SAARA,KAAQ,UAAW;AACrB,8BAAKb,UAAL,GAAkB,KAAlB;AACA,8BAAKC,YAAL,GAAoB,IAApB;AACA,8BAAKa,OAAL,GAAeA,OAAf;AACA,8BAAKf,WAAL,GAAmB,MAAKe,OAAL,CAAaJ,MAAb,GAAsB,CAAzC;AACAb,8BAAMiB,OAAN,GAAgBA,OAAhB;AACAjB,8BAAMkB,UAAN,GAAmB,KAAnB;AACH,qBAPD;;AASA,wBAAMC,UAAU,SAAVA,OAAU;AAAA,+BAAM,MAAKrB,OAAL,CACjBsB,oBADiB,CACIpB,MAAMW,WAAN,GAAoBf,kBAAkByB,mBAD1C,EAEjBC,IAFiB,CAEZf,oBAFY,EAGjBe,IAHiB,CAGZN,KAHY,EAIjBO,KAJiB,CAIX;AAAA,mCAASC,QAAQC,GAAR,CAAYC,KAAZ,CAAT;AAAA,yBAJW,CAAN;AAAA,qBAAhB;;AAMA,wBAAMC,WAAW,SAAXA,QAAW,CAACC,KAAD,EAAQC,IAAR;AAAA,+BAAiB,MAAKzB,YAAL,GAAoByB,KAAK,CAAL,EAAQC,IAA7C;AAAA,qBAAjB;AACA,wBAAMC,OAAO,SAAPA,IAAO;AAAA,+BAAO/B,MAAMgC,OAAP,GAAkBhB,MAAMhB,MAAMiB,OAAZ,CAAlB,GAAyCE,SAA/C;AAAA,qBAAb;AACA,wBAAMc,kBAAkB,SAAlBA,eAAkB;AAAA,+BAAKtC,cAAcW,WAAd,CAA0B4B,CAA1B,EAA6BC,KAA7B,KAAuC,CAAvC,IAA4CnC,MAAMoC,UAAlD,IAAgE,CAACpC,MAAMkB,UAA5E;AAAA,qBAAxB;;AAGD,yBAAKmB,QAAL,GAAgB,aAAK;AAChB,4BAAGJ,gBAAgBC,CAAhB,CAAH,EAAsB;AAClBf;AACAnB,kCAAMkB,UAAN,GAAmB,IAAnB;AACH;AACL,qBALD;;AAQC,wBAAMoB,cAAc,SAAdA,WAAc;AAAA,+BAAKJ,EAAEK,MAAF,KAAa,KAAlB;AAAA,qBAApB;AACA,wBAAMC,eAAe,SAAfA,YAAe,CAACC,CAAD,EAAIC,CAAJ;AAAA,+BAAU,MAAKrC,SAAL,GAAiBqC,EAAEC,IAAF,CAAOL,WAAP,IAAsB,OAAtB,GAAgC,QAA3D;AAAA,qBAArB;AACA,yBAAKM,WAAL,GAAmB7C,QAAQ6C,WAA3B;AACA7C,4BAAQ8C,QAAR,CAAiBL,YAAjB;AACAzC,4BAAQ+C,SAAR,CAAkB3B,OAAlB;AACApB,4BAAQgD,OAAR,CAAgBpB,QAAhB;;AAEAI;AACH;;sCAEDiB,U,uBAAWpB,K,EAAOnB,M,EAAQ;AACtB,2BAAO;AACHwC,2BAAGrB,MAAMsB,KADN;AAEHC,2BAAGvB,MAAMwB,KAFN;AAGHC,4BAAI5C,OAAO4C,EAHR;AAIHC,+BAAO;AAJJ,qBAAP;AAMH,iB","file":"query-viewer.js","sourceRoot":"/src"}
\ No newline at end of file
+{"version":3,"sources":["views/query-viewer/query-viewer.js"],"names":["inject","computedFrom","QueryViewerService","I2B2Service","TabsModel","QueryViewerModel","ScrollService","QueryViewerConfig","QueryViewer","service","i2b2Svc","model","tabs","screenIndex","showCircles","showLoader","runningQuery","vertStyle","mode","scrollRatio","queriesToLoad","moreToLoad","loadingInfiniteScroll","parseResultToScreens","totalQueries","result","rowCount","loadedCount","queryResults","length","getScreens","adapters","setVM","screens","processing","refresh","fetchPreviousQueries","maxQueriesPerScroll","then","catch","console","log","error","addQuery","event","data","name","init","hasData","loadMoreQueries","e","value","onScroll","isMinimized","action","setVertStyle","a","b","find","errorDetail","onResize","onHistory","onQuery","getContext","x","pageX","y","pageY","id","class"],"mappings":";;;;;;;;;;;;;AAASA,kB,qBAAAA,M;AAAQC,wB,qBAAAA,Y;;AACRC,8B,uCAAAA,kB;;AACAC,uB,wBAAAA,W;;AACDC,qB,oBAAAA,S;;AACAC,4B,qBAAAA,gB;;AACAC,yB,kBAAAA,a;;AACAC,6B,sBAAAA,iB;;;mCAGKC,W,WADZR,OAAOE,kBAAP,EAA2BC,WAA3B,EAAwCE,gBAAxC,EAA0DD,SAA1D,C;AAEG,qCAAYK,OAAZ,EAAqBC,OAArB,EAA8BC,KAA9B,EAAqCC,IAArC,EAA2C;AAAA;;AAAA;;AAGvC,yBAAKC,WAAL,GAAmB,CAAnB;AACA,yBAAKC,WAAL,GAAmB,KAAnB;AACA,yBAAKC,UAAL,GAAkB,IAAlB;AACA,yBAAKC,YAAL,GAAoB,IAApB;AACA,yBAAKP,OAAL,GAAeA,OAAf;AACA,yBAAKQ,SAAL,GAAiBL,KAAKM,IAAL,EAAjB;AACA,yBAAKC,WAAL,GAAmB,CAAnB;AACA,yBAAKC,aAAL,GAAqBT,MAAMU,UAA3B;AACA,yBAAKC,qBAAL,GAA6B,KAA7B;;AAGA,wBAAMC,uBAAuB,SAAvBA,oBAAuB,SAAU;AACnCZ,8BAAMa,YAAN,GAAqBC,OAAOC,QAA5B;AACAf,8BAAMgB,WAAN,GAAoBF,OAAOG,YAAP,CAAoBC,MAAxC;AACA,8BAAKT,aAAL,GAAqBT,MAAMU,UAA3B;AACA,+BAAO,MAAKZ,OAAL,CAAaqB,UAAb,CAAwBL,OAAOM,QAA/B,EAAyCN,OAAOG,YAAhD,CAAP;AACH,qBALD;AAMA,wBAAMI,QAAQ,SAARA,KAAQ,UAAW;AACrB,8BAAKjB,UAAL,GAAkB,KAAlB;AACA,8BAAKC,YAAL,GAAoB,IAApB;AACA,8BAAKiB,OAAL,GAAeA,OAAf;AACA,8BAAKnB,WAAL,GAAmB,MAAKmB,OAAL,CAAaJ,MAAb,GAAsB,CAAzC;AACAlB,8BAAMsB,OAAN,GAAgBA,OAAhB;AACAtB,8BAAMuB,UAAN,GAAmB,KAAnB;AACA,8BAAKZ,qBAAL,GAA6BX,MAAMuB,UAAnC;AACH,qBARD;;AAUA,wBAAMC,UAAU,SAAVA,OAAU;AAAA,+BAAM,MAAK1B,OAAL,CACjB2B,oBADiB,CACIzB,MAAMgB,WAAN,GAAoBpB,kBAAkB8B,mBAD1C,EAEjBC,IAFiB,CAEZf,oBAFY,EAGjBe,IAHiB,CAGZN,KAHY,EAIjBO,KAJiB,CAIX;AAAA,mCAASC,QAAQC,GAAR,CAAYC,KAAZ,CAAT;AAAA,yBAJW,CAAN;AAAA,qBAAhB;;AAMA,wBAAMC,WAAW,SAAXA,QAAW,CAACC,KAAD,EAAQC,IAAR,EAAiB;AAC9B,8BAAK7B,YAAL,GAAoB6B,KAAK,CAAL,EAAQC,IAA5B;AACH,qBAFD;AAGA,wBAAMC,OAAO,SAAPA,IAAO;AAAA,+BAAOpC,MAAMqC,OAAP,GAAkBhB,MAAMrB,MAAMsB,OAAZ,CAAlB,GAAyCE,SAA/C;AAAA,qBAAb;;AAGA,wBAAMc,kBAAkB,SAAlBA,eAAkB;AAAA,+BAAK3C,cAAca,WAAd,CAA0B+B,CAA1B,EAA6BC,KAA7B,KAAuC,CAAvC,IAA4CxC,MAAMU,UAAlD,IAAgE,CAACV,MAAMuB,UAA5E;AAAA,qBAAxB;;AAED,yBAAKkB,QAAL,GAAgB,aAAK;AAChB,4BAAGH,gBAAgBC,CAAhB,CAAH,EAAsB;AAClBf;AACAxB,kCAAMuB,UAAN,GAAmB,IAAnB;AACA,kCAAKZ,qBAAL,GAA6BX,MAAMuB,UAAnC;AACH;AACL,qBAND;;AASC,wBAAMmB,cAAc,SAAdA,WAAc;AAAA,+BAAKH,EAAEI,MAAF,KAAa,KAAlB;AAAA,qBAApB;AACA,wBAAMC,eAAe,SAAfA,YAAe,CAACC,CAAD,EAAIC,CAAJ;AAAA,+BAAU,MAAKxC,SAAL,GAAiBwC,EAAEC,IAAF,CAAOL,WAAP,IAAsB,OAAtB,GAAgC,QAA3D;AAAA,qBAArB;AACA,yBAAKM,WAAL,GAAmBjD,QAAQiD,WAA3B;AACAjD,4BAAQkD,QAAR,CAAiBL,YAAjB;AACA7C,4BAAQmD,SAAR,CAAkB1B,OAAlB;AACAzB,4BAAQoD,OAAR,CAAgBnB,QAAhB;;AAEAI;AACH;;sCAEDgB,U,uBAAWnB,K,EAAOnB,M,EAAQ;AACtB,2BAAO;AACHuC,2BAAGpB,MAAMqB,KADN;AAEHC,2BAAGtB,MAAMuB,KAFN;AAGHC,4BAAI3C,OAAO2C,EAHR;AAIHC,+BAAO;AAJJ,qBAAP;AAMH,iB","file":"query-viewer.js","sourceRoot":"/src"}
\ No newline at end of file
diff --git a/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.model.js.map b/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.model.js.map
index 5fb050a5a..223ddfb7f 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.model.js.map
+++ b/shrine-webclient/src/main/js/client/js-shrine/dist/views/query-viewer/query-viewer.model.js.map
@@ -1 +1 @@
-{"version":3,"sources":["views/query-viewer/query-viewer.model.js"],"names":["QueryViewerModel","processing","loadedCount","totalQueries","screens","length"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wCACaA,gB;AACT,4CAAc;AAAA;;AACV,yBAAKC,UAAL,GAAkB,KAAlB;AACA,yBAAKC,WAAL,GAAmB,CAAnB;AACA,yBAAKC,YAAL,GAAoB,CAApB;AACA,yBAAKC,OAAL,GAAe,EAAf;AACH;;;;wCACgB;AACb,+BAAO,KAAKF,WAAL,GAAmB,KAAKC,YAA/B;AACH;;;wCAEa;AACV,+BAAO,KAAKC,OAAL,CAAaC,MAAb,GAAsB,CAA7B;AACH","file":"query-viewer.model.js","sourceRoot":"/src"}
\ No newline at end of file
+{"version":3,"sources":["views/query-viewer/query-viewer.model.js"],"names":["QueryViewerModel","processing","loadedCount","totalQueries","screens","length"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wCAAaA,gB;AACT,4CAAc;AAAA;;AACV,yBAAKC,UAAL,GAAkB,KAAlB;AACA,yBAAKC,WAAL,GAAmB,CAAnB;AACA,yBAAKC,YAAL,GAAoB,CAApB;AACA,yBAAKC,OAAL,GAAe,EAAf;AACH;;;;wCACgB;AACb,+BAAO,KAAKF,WAAL,GAAmB,KAAKC,YAA/B;AACH;;;wCAEa;AACV,+BAAO,KAAKC,OAAL,CAAaC,MAAb,GAAsB,CAA7B;AACH","file":"query-viewer.model.js","sourceRoot":"/src"}
\ No newline at end of file
diff --git a/shrine-webclient/src/main/js/client/js-shrine/export/assets/css/styles.css b/shrine-webclient/src/main/js/client/js-shrine/export/assets/css/styles.css
index 00d134422..3c446d0c0 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/export/assets/css/styles.css
+++ b/shrine-webclient/src/main/js/client/js-shrine/export/assets/css/styles.css
@@ -1,258 +1,256 @@
 @import url(http://fonts.googleapis.com/css?family=Roboto:400,500,300,700);
 body {
   overflow: hidden;
   background: rgba(255, 255, 255, 0.9);
   font-family: 'Roboto', sans-serif; }
 
 html,
 body,
 .box-wrapper {
   width: 100%;
   height: 100%;
   margin: 0; }
 
 .box-wrapper {
   display: -webkit-box;
   display: -ms-flexbox;
   display: flex;
   -webkit-box-orient: vertical;
   -webkit-box-direction: normal;
   -ms-flex-direction: column;
   flex-direction: column;
   -ms-flex-wrap: wrap;
   flex-wrap: wrap; }
 
 .box-wrapper > .box {
   margin-top: 1%;
   width: 100%;
   transition: all .2s ease; }
   .box-wrapper > .box .hideextra {
     white-space: nowrap;
     overflow: hidden;
     text-overflow: ellipsis; }
   .box-wrapper > .box section {
     margin: 20 0 6 0; }
     .box-wrapper > .box section .v-full {
       height: 90vh; }
-    .box-wrapper > .box section .v-full > table {
-      padding-bottom: 10%; }
     .box-wrapper > .box section .v-min {
       height: 100px; }
     .box-wrapper > .box section .v-min > table {
       padding-bottom: 1%; }
     .box-wrapper > .box section .tbl-content {
       overflow: auto;
       margin-top: 0px;
       border: 1px solid rgba(98, 108, 146, 0.3); }
   .box-wrapper > .box table {
     width: 100%;
     table-layout: fixed; }
     .box-wrapper > .box table .tbl-header {
       background-color: rgba(98, 108, 146, 0.3); }
       .box-wrapper > .box table .tbl-header div.tbl-header {
         max-width: 5rem; }
     .box-wrapper > .box table tr {
       background: white;
       cursor: pointer; }
       .box-wrapper > .box table tr:hover {
         background: rgba(98, 108, 146, 0.3) !important; }
       .box-wrapper > .box table tr:nth-child(odd) {
         background: rgba(98, 108, 146, 0.1); }
     .box-wrapper > .box table th {
       padding: 2px 4px 4px 2px;
       text-align: left;
       font-weight: 500;
       font-size: .75rem;
       color: #626C92;
       text-transform: uppercase;
       border-bottom: solid 1px rgba(98, 108, 146, 0.1);
       border-left: solid 1px rgba(98, 108, 146, 0.1); }
     .box-wrapper > .box table td {
       transition: all .5s ease;
       padding: 2px;
       text-align: left;
       vertical-align: top;
       font-weight: 300;
       font-size: 12px;
       color: black;
       border-bottom: solid 1px rgba(98, 108, 146, 0.1);
       border-left: solid 1px rgba(98, 108, 146, 0.1); }
 
 .circle-pagination {
   position: absolute;
   z-index: 1000;
   list-style-type: none;
   margin: 0;
   top: -.3rem; }
   .circle-pagination li {
     border-radius: 50%;
     border: 2px solid #626C92;
     width: 12px;
     height: 12px;
     padding: 4px;
     margin: 6px;
     cursor: pointer;
     float: left;
     transition: all .2s ease; }
     .circle-pagination li.active, .circle-pagination li:hover {
       background: #626C92;
       width: 14px;
       height: 14px; }
     .circle-pagination li.active div,
     .circle-pagination li div:hover {
       color: white; }
     .circle-pagination li div {
       font-size: .6rem;
       width: 24px;
       position: relative;
       left: -6px;
       top: 1px;
       color: #626C92;
       font-weight: 600;
       text-transform: capitalize; }
 
 .mailto {
   box-sizing: border-box;
   display: flex;
   justify-content: center;
   align-items: center;
   width: 100%;
   height: 100%;
   padding: 10px;
   color: #333;
   background: #f2f2f2;
   height: 100% p;
     height-font-size: 16px;
     height-line-height: 1.6em; }
   .mailto .button {
     border: 1px solid #6576a8;
     background: #6d85ad;
     border: 0;
     outline: 0;
     font-weight: bold;
     text-transform: uppercase;
     text-decoration: none;
     letter-spacing: 1px;
     color: #fff;
     cursor: pointer; }
     .mailto .button:hover {
       background: #9cb8d9; }
     .mailto .button:active {
       background: #6576a8; }
   .mailto .button--large {
     position: relative;
     padding: 15px 30px;
     border-radius: 5px;
     font-size: 16px; }
     .mailto .button--large:active {
       top: 1px; }
   .mailto .content {
     max-width: 350px;
     text-align: center; }
   .mailto .email {
     position: relative; }
 
 @import url(http://fonts.googleapis.com/css?family=Roboto:400,300&subset=latin,latin-ext);
 ul.context-menu {
   transition: opacity 0.2s linear;
   list-style: none;
   margin: 0;
   padding: 0;
   font: 200 11px "Roboto", sans-serif;
   position: absolute;
   color: #626C92;
   box-shadow: 0 12px 15px 0 rgba(0, 0, 0, 0.2);
   border-radius: 5px;
   border: 1px solid rgba(98, 108, 146, 0.25); }
   ul.context-menu * {
     transition: color 0.2s, background 0.2s; }
   ul.context-menu.hide {
     visibility: hidden;
     opacity: 0; }
   ul.context-menu.show {
     visibility: visible;
     opacity: 1; }
   ul.context-menu li {
     min-width: 100px;
     overflow: hidden;
     white-space: nowrap;
     padding: 6px 8px;
     background-color: #fff;
     border-bottom: 1px solid #ecf0f1; }
     ul.context-menu li a {
       color: #626C92;
       text-decoration: none; }
     ul.context-menu li:hover {
       background-color: #ecf0f1;
       color: #2980b9; }
       ul.context-menu li:hover a {
         color: #2980b9; }
     ul.context-menu li:first-child {
       border-radius: 5px 5px 0 0; }
     ul.context-menu li:last-child {
       border-bottom: 0;
       border-radius: 0 0 5px 5px; }
 
 @import url(http://fonts.googleapis.com/css?family=Roboto:400,300&subset=latin,latin-ext);
 .loader {
   background: #fff;
   margin: 50px 300px;
   /*todo cleanup with mixin*/ }
   .loader h1 {
     color: #626C92;
     font: 300 11px "Roboto", sans-serif; }
   .loader div.slider {
     position: absolute;
     width: 200px;
     height: 2px;
     margin-top: -30px; }
     .loader div.slider div.line {
       position: absolute;
       background: rgba(0, 0, 0, 0.2);
       width: 200px;
       height: 2px; }
     .loader div.slider div.break {
       position: absolute;
       width: 50%;
       height: 2px; }
     .loader div.slider div.break.dot1 {
       animation: loading 2s infinite;
       background: #D9ECF0; }
     .loader div.slider div.break.dot2 {
       animation: loading 2s 0.5s infinite;
       background: #6677AA; }
     .loader div.slider div.break.dot3 {
       animation: loading 2s 1s infinite;
       background: #D9ECF0; }
 
 @-webkit-keyframes "loading" {
   from {
     left: 0;
     opacity: 1; }
   to {
     left: 200px;
     opacity: 1; } }
 
 @-moz-keyframes "loading" {
   from {
     left: 0;
     opacity: 0; }
   to {
     left: 200px;
     opacity: 1; } }
 
 @-o-keyframes "loading" {
   from {
     left: 0;
     opacity: 0; }
   to {
     left: 200px;
     opacity: 1; } }
 
 @keyframes "loading" {
   from {
     left: 0;
     opacity: 0; }
   to {
     left: 200px;
     opacity: 1; } }
diff --git a/shrine-webclient/src/main/js/client/js-shrine/export/config.js b/shrine-webclient/src/main/js/client/js-shrine/export/config.js
index 494115738..3d911dd00 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/export/config.js
+++ b/shrine-webclient/src/main/js/client/js-shrine/export/config.js
@@ -1,682 +1,695 @@
 System.config({
   defaultJSExtensions: true,
   transpiler: false,
   paths: {
     "*": "dist/*",
     "github:*": "jspm_packages/github/*",
     "npm:*": "jspm_packages/npm/*"
   },
   map: {
     "aurelia-animator-css": "npm:aurelia-animator-css@1.0.1",
     "aurelia-bootstrapper": "npm:aurelia-bootstrapper@1.0.0",
     "aurelia-fetch-client": "npm:aurelia-fetch-client@1.0.1",
     "aurelia-framework": "npm:aurelia-framework@1.0.6",
     "aurelia-history-browser": "npm:aurelia-history-browser@1.0.0",
     "aurelia-loader-default": "npm:aurelia-loader-default@1.0.0",
     "aurelia-logging-console": "npm:aurelia-logging-console@1.0.0",
     "aurelia-pal-browser": "npm:aurelia-pal-browser@1.0.0",
     "aurelia-polyfills": "npm:aurelia-polyfills@1.1.1",
     "aurelia-router": "npm:aurelia-router@1.3.0",
     "aurelia-templating-binding": "npm:aurelia-templating-binding@1.0.0",
     "aurelia-templating-resources": "npm:aurelia-templating-resources@1.1.1",
     "aurelia-templating-router": "npm:aurelia-templating-router@1.0.0",
     "bluebird": "npm:bluebird@3.4.1",
     "bootstrap": "github:twbs/bootstrap@3.3.7",
     "fetch": "github:github/fetch@1.0.0",
     "font-awesome": "npm:font-awesome@4.7.0",
     "jquery": "npm:jquery@2.2.4",
     "ramda": "npm:ramda@0.23.0",
     "text": "github:systemjs/plugin-text@0.0.8",
     "github:jspm/nodelibs-assert@0.1.0": {
       "assert": "npm:assert@1.4.1"
     },
     "github:jspm/nodelibs-buffer@0.1.1": {
       "buffer": "npm:buffer@5.0.6"
     },
     "github:jspm/nodelibs-process@0.1.2": {
       "process": "npm:process@0.11.10"
     },
     "github:jspm/nodelibs-util@0.1.0": {
       "util": "npm:util@0.10.3"
     },
     "github:jspm/nodelibs-vm@0.1.0": {
       "vm-browserify": "npm:vm-browserify@0.0.4"
     },
     "github:twbs/bootstrap@3.3.7": {
       "jquery": "npm:jquery@2.2.4"
     },
     "npm:assert@1.4.1": {
       "assert": "github:jspm/nodelibs-assert@0.1.0",
       "buffer": "github:jspm/nodelibs-buffer@0.1.1",
       "process": "github:jspm/nodelibs-process@0.1.2",
       "util": "npm:util@0.10.3"
     },
     "npm:aurelia-animator-css@1.0.1": {
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0",
       "aurelia-templating": "npm:aurelia-templating@1.1.1"
     },
     "npm:aurelia-binding@1.0.9": {
       "aurelia-logging": "npm:aurelia-logging@1.3.1",
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0",
       "aurelia-task-queue": "npm:aurelia-task-queue@1.1.0"
     },
     "npm:aurelia-bootstrapper@1.0.0": {
       "aurelia-event-aggregator": "npm:aurelia-event-aggregator@1.0.1",
       "aurelia-framework": "npm:aurelia-framework@1.0.6",
       "aurelia-history": "npm:aurelia-history@1.0.0",
       "aurelia-history-browser": "npm:aurelia-history-browser@1.0.0",
       "aurelia-loader-default": "npm:aurelia-loader-default@1.0.0",
       "aurelia-logging-console": "npm:aurelia-logging-console@1.0.0",
       "aurelia-pal": "npm:aurelia-pal@1.3.0",
       "aurelia-pal-browser": "npm:aurelia-pal-browser@1.0.0",
       "aurelia-polyfills": "npm:aurelia-polyfills@1.1.1",
       "aurelia-router": "npm:aurelia-router@1.3.0",
       "aurelia-templating": "npm:aurelia-templating@1.1.1",
       "aurelia-templating-binding": "npm:aurelia-templating-binding@1.0.0",
       "aurelia-templating-resources": "npm:aurelia-templating-resources@1.1.1",
       "aurelia-templating-router": "npm:aurelia-templating-router@1.0.0"
     },
     "npm:aurelia-dependency-injection@1.3.1": {
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0"
     },
     "npm:aurelia-event-aggregator@1.0.1": {
       "aurelia-logging": "npm:aurelia-logging@1.3.1"
     },
     "npm:aurelia-framework@1.0.6": {
       "aurelia-binding": "npm:aurelia-binding@1.0.9",
       "aurelia-dependency-injection": "npm:aurelia-dependency-injection@1.3.1",
       "aurelia-loader": "npm:aurelia-loader@1.0.0",
       "aurelia-logging": "npm:aurelia-logging@1.3.1",
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0",
       "aurelia-path": "npm:aurelia-path@1.1.1",
       "aurelia-task-queue": "npm:aurelia-task-queue@1.1.0",
       "aurelia-templating": "npm:aurelia-templating@1.1.1"
     },
     "npm:aurelia-history-browser@1.0.0": {
       "aurelia-history": "npm:aurelia-history@1.0.0",
       "aurelia-pal": "npm:aurelia-pal@1.3.0"
     },
     "npm:aurelia-loader-default@1.0.0": {
       "aurelia-loader": "npm:aurelia-loader@1.0.0",
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0"
     },
     "npm:aurelia-loader@1.0.0": {
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-path": "npm:aurelia-path@1.1.1"
     },
     "npm:aurelia-logging-console@1.0.0": {
       "aurelia-logging": "npm:aurelia-logging@1.3.1"
     },
     "npm:aurelia-metadata@1.0.3": {
       "aurelia-pal": "npm:aurelia-pal@1.3.0"
     },
     "npm:aurelia-pal-browser@1.0.0": {
       "aurelia-pal": "npm:aurelia-pal@1.3.0"
     },
     "npm:aurelia-polyfills@1.1.1": {
       "aurelia-pal": "npm:aurelia-pal@1.3.0"
     },
     "npm:aurelia-route-recognizer@1.1.0": {
       "aurelia-path": "npm:aurelia-path@1.1.1"
     },
     "npm:aurelia-router@1.3.0": {
       "aurelia-dependency-injection": "npm:aurelia-dependency-injection@1.3.1",
       "aurelia-event-aggregator": "npm:aurelia-event-aggregator@1.0.1",
       "aurelia-history": "npm:aurelia-history@1.0.0",
       "aurelia-logging": "npm:aurelia-logging@1.3.1",
       "aurelia-path": "npm:aurelia-path@1.1.1",
       "aurelia-route-recognizer": "npm:aurelia-route-recognizer@1.1.0"
     },
     "npm:aurelia-task-queue@1.1.0": {
       "aurelia-pal": "npm:aurelia-pal@1.3.0"
     },
     "npm:aurelia-templating-binding@1.0.0": {
       "aurelia-binding": "npm:aurelia-binding@1.0.9",
       "aurelia-logging": "npm:aurelia-logging@1.3.1",
       "aurelia-templating": "npm:aurelia-templating@1.1.1"
     },
     "npm:aurelia-templating-resources@1.1.1": {
       "aurelia-binding": "npm:aurelia-binding@1.0.9",
       "aurelia-dependency-injection": "npm:aurelia-dependency-injection@1.3.1",
       "aurelia-loader": "npm:aurelia-loader@1.0.0",
       "aurelia-logging": "npm:aurelia-logging@1.3.1",
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0",
       "aurelia-path": "npm:aurelia-path@1.1.1",
       "aurelia-task-queue": "npm:aurelia-task-queue@1.1.0",
       "aurelia-templating": "npm:aurelia-templating@1.1.1"
     },
     "npm:aurelia-templating-router@1.0.0": {
       "aurelia-dependency-injection": "npm:aurelia-dependency-injection@1.3.1",
       "aurelia-logging": "npm:aurelia-logging@1.3.1",
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0",
       "aurelia-path": "npm:aurelia-path@1.1.1",
       "aurelia-router": "npm:aurelia-router@1.3.0",
       "aurelia-templating": "npm:aurelia-templating@1.1.1"
     },
     "npm:aurelia-templating@1.1.1": {
       "aurelia-binding": "npm:aurelia-binding@1.0.9",
       "aurelia-dependency-injection": "npm:aurelia-dependency-injection@1.3.1",
       "aurelia-loader": "npm:aurelia-loader@1.0.0",
       "aurelia-logging": "npm:aurelia-logging@1.3.1",
       "aurelia-metadata": "npm:aurelia-metadata@1.0.3",
       "aurelia-pal": "npm:aurelia-pal@1.3.0",
       "aurelia-path": "npm:aurelia-path@1.1.1",
       "aurelia-task-queue": "npm:aurelia-task-queue@1.1.0"
     },
     "npm:bluebird@3.4.1": {
       "process": "github:jspm/nodelibs-process@0.1.2"
     },
     "npm:buffer@5.0.6": {
       "base64-js": "npm:base64-js@1.2.0",
       "ieee754": "npm:ieee754@1.1.8"
     },
     "npm:font-awesome@4.7.0": {
       "css": "github:systemjs/plugin-css@0.1.33"
     },
     "npm:inherits@2.0.1": {
       "util": "github:jspm/nodelibs-util@0.1.0"
     },
     "npm:process@0.11.10": {
       "assert": "github:jspm/nodelibs-assert@0.1.0",
       "fs": "github:jspm/nodelibs-fs@0.1.2",
       "vm": "github:jspm/nodelibs-vm@0.1.0"
     },
     "npm:ramda@0.23.0": {
       "assert": "github:jspm/nodelibs-assert@0.1.0",
       "process": "github:jspm/nodelibs-process@0.1.2",
       "util": "github:jspm/nodelibs-util@0.1.0",
       "vm": "github:jspm/nodelibs-vm@0.1.0"
     },
     "npm:util@0.10.3": {
       "inherits": "npm:inherits@2.0.1",
       "process": "github:jspm/nodelibs-process@0.1.2"
     },
     "npm:vm-browserify@0.0.4": {
       "indexof": "npm:indexof@0.0.1"
     }
   },
   depCache: {
     "common/container.js": [
       "ramda"
     ],
+    "common/i2b2.pub-sub.js": [
+      "aurelia-framework",
+      "./i2b2.service",
+      "./tabs.model"
+    ],
     "common/i2b2.service.js": [
       "ramda",
       "./container"
     ],
     "repository/qep.repository.js": [
       "aurelia-framework",
       "aurelia-fetch-client",
       "fetch"
     ],
+    "shell.js": [
+      "aurelia-framework",
+      "common/i2b2.pub-sub"
+    ],
     "views/mailto/mailto.js": [
       "aurelia-framework",
       "views/mailto/mailto.service",
       "views/mailto/mailto.config"
     ],
     "views/mailto/mailto.service.js": [
       "aurelia-framework",
       "repository/qep.repository"
     ],
     "views/query-viewer/context-menu/context-menu.js": [
       "aurelia-framework",
       "common/i2b2.service.js"
     ],
     "views/query-viewer/loading-bar/loading-bar.js": [
       "aurelia-framework"
     ],
     "views/query-viewer/query-viewer.js": [
       "aurelia-framework",
       "views/query-viewer/query-viewer.service",
       "common/i2b2.service.js",
+      "common/tabs.model",
       "./query-viewer.model",
       "./scroll.service",
       "./query-viewer.config"
     ],
     "views/query-viewer/query-viewer.service.js": [
       "aurelia-framework",
       "repository/qep.repository",
       "./query-viewer.config"
     ],
     "views/query-viewer/scroll.service.js": [
       "ramda",
       "common/container"
     ]
   },
   bundles: {
     "app-build.js": [
       "common/container.js",
+      "common/i2b2.pub-sub.js",
       "common/i2b2.service.js",
+      "common/tabs.model.js",
       "main.js",
       "repository/qep.repository.js",
       "shell.html!github:systemjs/plugin-text@0.0.8.js",
       "shell.js",
       "views/mailto/mailto.config.js",
       "views/mailto/mailto.html!github:systemjs/plugin-text@0.0.8.js",
       "views/mailto/mailto.js",
       "views/mailto/mailto.service.js",
       "views/query-viewer/box-style.converter.js",
       "views/query-viewer/context-menu/context-menu.html!github:systemjs/plugin-text@0.0.8.js",
       "views/query-viewer/context-menu/context-menu.js",
       "views/query-viewer/loading-bar/loading-bar.html!github:systemjs/plugin-text@0.0.8.js",
       "views/query-viewer/loading-bar/loading-bar.js",
+      "views/query-viewer/loading-bar/row-loader.html!github:systemjs/plugin-text@0.0.8.js",
       "views/query-viewer/query-viewer.config.js",
       "views/query-viewer/query-viewer.html!github:systemjs/plugin-text@0.0.8.js",
       "views/query-viewer/query-viewer.js",
       "views/query-viewer/query-viewer.model.js",
       "views/query-viewer/query-viewer.service.js",
       "views/query-viewer/result-style.converter.js",
       "views/query-viewer/result-value.converter.js",
       "views/query-viewer/scroll.service.js"
     ],
     "aurelia.js": [
       "github:github/fetch@1.0.0.js",
       "github:github/fetch@1.0.0/fetch.js",
       "github:jspm/nodelibs-process@0.1.2.js",
       "github:jspm/nodelibs-process@0.1.2/index.js",
       "npm:aurelia-binding@1.0.9.js",
       "npm:aurelia-binding@1.0.9/aurelia-binding.js",
       "npm:aurelia-bootstrapper@1.0.0.js",
       "npm:aurelia-bootstrapper@1.0.0/aurelia-bootstrapper.js",
       "npm:aurelia-dependency-injection@1.3.1.js",
       "npm:aurelia-dependency-injection@1.3.1/aurelia-dependency-injection.js",
       "npm:aurelia-event-aggregator@1.0.1.js",
       "npm:aurelia-event-aggregator@1.0.1/aurelia-event-aggregator.js",
       "npm:aurelia-fetch-client@1.0.1.js",
       "npm:aurelia-fetch-client@1.0.1/aurelia-fetch-client.js",
       "npm:aurelia-framework@1.0.6.js",
       "npm:aurelia-framework@1.0.6/aurelia-framework.js",
       "npm:aurelia-history-browser@1.0.0.js",
       "npm:aurelia-history-browser@1.0.0/aurelia-history-browser.js",
       "npm:aurelia-history@1.0.0.js",
       "npm:aurelia-history@1.0.0/aurelia-history.js",
       "npm:aurelia-loader-default@1.0.0.js",
       "npm:aurelia-loader-default@1.0.0/aurelia-loader-default.js",
       "npm:aurelia-loader@1.0.0.js",
       "npm:aurelia-loader@1.0.0/aurelia-loader.js",
       "npm:aurelia-logging-console@1.0.0.js",
       "npm:aurelia-logging-console@1.0.0/aurelia-logging-console.js",
       "npm:aurelia-logging@1.3.1.js",
       "npm:aurelia-logging@1.3.1/aurelia-logging.js",
       "npm:aurelia-metadata@1.0.3.js",
       "npm:aurelia-metadata@1.0.3/aurelia-metadata.js",
       "npm:aurelia-pal-browser@1.0.0.js",
       "npm:aurelia-pal-browser@1.0.0/aurelia-pal-browser.js",
       "npm:aurelia-pal@1.3.0.js",
       "npm:aurelia-pal@1.3.0/aurelia-pal.js",
       "npm:aurelia-path@1.1.1.js",
       "npm:aurelia-path@1.1.1/aurelia-path.js",
       "npm:aurelia-polyfills@1.1.1.js",
       "npm:aurelia-polyfills@1.1.1/aurelia-polyfills.js",
       "npm:aurelia-route-recognizer@1.1.0.js",
       "npm:aurelia-route-recognizer@1.1.0/aurelia-route-recognizer.js",
       "npm:aurelia-router@1.3.0.js",
       "npm:aurelia-router@1.3.0/aurelia-router.js",
       "npm:aurelia-task-queue@1.1.0.js",
       "npm:aurelia-task-queue@1.1.0/aurelia-task-queue.js",
       "npm:aurelia-templating-binding@1.0.0.js",
       "npm:aurelia-templating-binding@1.0.0/aurelia-templating-binding.js",
       "npm:aurelia-templating-resources@1.1.1.js",
       "npm:aurelia-templating-resources@1.1.1/abstract-repeater.js",
       "npm:aurelia-templating-resources@1.1.1/analyze-view-factory.js",
       "npm:aurelia-templating-resources@1.1.1/array-repeat-strategy.js",
       "npm:aurelia-templating-resources@1.1.1/attr-binding-behavior.js",
       "npm:aurelia-templating-resources@1.1.1/aurelia-hide-style.js",
       "npm:aurelia-templating-resources@1.1.1/aurelia-templating-resources.js",
       "npm:aurelia-templating-resources@1.1.1/binding-mode-behaviors.js",
       "npm:aurelia-templating-resources@1.1.1/binding-signaler.js",
       "npm:aurelia-templating-resources@1.1.1/compose.js",
       "npm:aurelia-templating-resources@1.1.1/css-resource.js",
       "npm:aurelia-templating-resources@1.1.1/debounce-binding-behavior.js",
       "npm:aurelia-templating-resources@1.1.1/dynamic-element.js",
       "npm:aurelia-templating-resources@1.1.1/focus.js",
       "npm:aurelia-templating-resources@1.1.1/hide.js",
       "npm:aurelia-templating-resources@1.1.1/html-resource-plugin.js",
       "npm:aurelia-templating-resources@1.1.1/html-sanitizer.js",
       "npm:aurelia-templating-resources@1.1.1/if.js",
       "npm:aurelia-templating-resources@1.1.1/map-repeat-strategy.js",
       "npm:aurelia-templating-resources@1.1.1/null-repeat-strategy.js",
       "npm:aurelia-templating-resources@1.1.1/number-repeat-strategy.js",
       "npm:aurelia-templating-resources@1.1.1/repeat-strategy-locator.js",
       "npm:aurelia-templating-resources@1.1.1/repeat-utilities.js",
       "npm:aurelia-templating-resources@1.1.1/repeat.js",
       "npm:aurelia-templating-resources@1.1.1/replaceable.js",
       "npm:aurelia-templating-resources@1.1.1/sanitize-html.js",
       "npm:aurelia-templating-resources@1.1.1/set-repeat-strategy.js",
       "npm:aurelia-templating-resources@1.1.1/show.js",
       "npm:aurelia-templating-resources@1.1.1/signal-binding-behavior.js",
       "npm:aurelia-templating-resources@1.1.1/throttle-binding-behavior.js",
       "npm:aurelia-templating-resources@1.1.1/update-trigger-binding-behavior.js",
       "npm:aurelia-templating-resources@1.1.1/with.js",
       "npm:aurelia-templating-router@1.0.0.js",
       "npm:aurelia-templating-router@1.0.0/aurelia-templating-router.js",
       "npm:aurelia-templating-router@1.0.0/route-href.js",
       "npm:aurelia-templating-router@1.0.0/route-loader.js",
       "npm:aurelia-templating-router@1.0.0/router-view.js",
       "npm:aurelia-templating@1.1.1.js",
       "npm:aurelia-templating@1.1.1/aurelia-templating.js",
       "npm:font-awesome@4.7.0.js",
       "npm:font-awesome@4.7.0/css/font-awesome.css!github:systemjs/plugin-css@0.1.33.js",
       "npm:jquery@2.2.4.js",
       "npm:jquery@2.2.4/dist/jquery.js",
       "npm:process@0.11.10.js",
       "npm:process@0.11.10/browser.js",
       "npm:ramda@0.23.0.js",
       "npm:ramda@0.23.0/index.js",
       "npm:ramda@0.23.0/src/F.js",
       "npm:ramda@0.23.0/src/T.js",
       "npm:ramda@0.23.0/src/__.js",
       "npm:ramda@0.23.0/src/add.js",
       "npm:ramda@0.23.0/src/addIndex.js",
       "npm:ramda@0.23.0/src/adjust.js",
       "npm:ramda@0.23.0/src/all.js",
       "npm:ramda@0.23.0/src/allPass.js",
       "npm:ramda@0.23.0/src/always.js",
       "npm:ramda@0.23.0/src/and.js",
       "npm:ramda@0.23.0/src/any.js",
       "npm:ramda@0.23.0/src/anyPass.js",
       "npm:ramda@0.23.0/src/ap.js",
       "npm:ramda@0.23.0/src/aperture.js",
       "npm:ramda@0.23.0/src/append.js",
       "npm:ramda@0.23.0/src/apply.js",
       "npm:ramda@0.23.0/src/applySpec.js",
       "npm:ramda@0.23.0/src/ascend.js",
       "npm:ramda@0.23.0/src/assoc.js",
       "npm:ramda@0.23.0/src/assocPath.js",
       "npm:ramda@0.23.0/src/binary.js",
       "npm:ramda@0.23.0/src/bind.js",
       "npm:ramda@0.23.0/src/both.js",
       "npm:ramda@0.23.0/src/call.js",
       "npm:ramda@0.23.0/src/chain.js",
       "npm:ramda@0.23.0/src/clamp.js",
       "npm:ramda@0.23.0/src/clone.js",
       "npm:ramda@0.23.0/src/comparator.js",
       "npm:ramda@0.23.0/src/complement.js",
       "npm:ramda@0.23.0/src/compose.js",
       "npm:ramda@0.23.0/src/composeK.js",
       "npm:ramda@0.23.0/src/composeP.js",
       "npm:ramda@0.23.0/src/concat.js",
       "npm:ramda@0.23.0/src/cond.js",
       "npm:ramda@0.23.0/src/construct.js",
       "npm:ramda@0.23.0/src/constructN.js",
       "npm:ramda@0.23.0/src/contains.js",
       "npm:ramda@0.23.0/src/converge.js",
       "npm:ramda@0.23.0/src/countBy.js",
       "npm:ramda@0.23.0/src/curry.js",
       "npm:ramda@0.23.0/src/curryN.js",
       "npm:ramda@0.23.0/src/dec.js",
       "npm:ramda@0.23.0/src/defaultTo.js",
       "npm:ramda@0.23.0/src/descend.js",
       "npm:ramda@0.23.0/src/difference.js",
       "npm:ramda@0.23.0/src/differenceWith.js",
       "npm:ramda@0.23.0/src/dissoc.js",
       "npm:ramda@0.23.0/src/dissocPath.js",
       "npm:ramda@0.23.0/src/divide.js",
       "npm:ramda@0.23.0/src/drop.js",
       "npm:ramda@0.23.0/src/dropLast.js",
       "npm:ramda@0.23.0/src/dropLastWhile.js",
       "npm:ramda@0.23.0/src/dropRepeats.js",
       "npm:ramda@0.23.0/src/dropRepeatsWith.js",
       "npm:ramda@0.23.0/src/dropWhile.js",
       "npm:ramda@0.23.0/src/either.js",
       "npm:ramda@0.23.0/src/empty.js",
       "npm:ramda@0.23.0/src/eqBy.js",
       "npm:ramda@0.23.0/src/eqProps.js",
       "npm:ramda@0.23.0/src/equals.js",
       "npm:ramda@0.23.0/src/evolve.js",
       "npm:ramda@0.23.0/src/filter.js",
       "npm:ramda@0.23.0/src/find.js",
       "npm:ramda@0.23.0/src/findIndex.js",
       "npm:ramda@0.23.0/src/findLast.js",
       "npm:ramda@0.23.0/src/findLastIndex.js",
       "npm:ramda@0.23.0/src/flatten.js",
       "npm:ramda@0.23.0/src/flip.js",
       "npm:ramda@0.23.0/src/forEach.js",
       "npm:ramda@0.23.0/src/forEachObjIndexed.js",
       "npm:ramda@0.23.0/src/fromPairs.js",
       "npm:ramda@0.23.0/src/groupBy.js",
       "npm:ramda@0.23.0/src/groupWith.js",
       "npm:ramda@0.23.0/src/gt.js",
       "npm:ramda@0.23.0/src/gte.js",
       "npm:ramda@0.23.0/src/has.js",
       "npm:ramda@0.23.0/src/hasIn.js",
       "npm:ramda@0.23.0/src/head.js",
       "npm:ramda@0.23.0/src/identical.js",
       "npm:ramda@0.23.0/src/identity.js",
       "npm:ramda@0.23.0/src/ifElse.js",
       "npm:ramda@0.23.0/src/inc.js",
       "npm:ramda@0.23.0/src/indexBy.js",
       "npm:ramda@0.23.0/src/indexOf.js",
       "npm:ramda@0.23.0/src/init.js",
       "npm:ramda@0.23.0/src/insert.js",
       "npm:ramda@0.23.0/src/insertAll.js",
       "npm:ramda@0.23.0/src/internal/_Set.js",
       "npm:ramda@0.23.0/src/internal/_aperture.js",
       "npm:ramda@0.23.0/src/internal/_arity.js",
       "npm:ramda@0.23.0/src/internal/_arrayFromIterator.js",
       "npm:ramda@0.23.0/src/internal/_assign.js",
       "npm:ramda@0.23.0/src/internal/_checkForMethod.js",
       "npm:ramda@0.23.0/src/internal/_clone.js",
       "npm:ramda@0.23.0/src/internal/_cloneRegExp.js",
       "npm:ramda@0.23.0/src/internal/_complement.js",
       "npm:ramda@0.23.0/src/internal/_concat.js",
       "npm:ramda@0.23.0/src/internal/_contains.js",
       "npm:ramda@0.23.0/src/internal/_containsWith.js",
       "npm:ramda@0.23.0/src/internal/_createPartialApplicator.js",
       "npm:ramda@0.23.0/src/internal/_curry1.js",
       "npm:ramda@0.23.0/src/internal/_curry2.js",
       "npm:ramda@0.23.0/src/internal/_curry3.js",
       "npm:ramda@0.23.0/src/internal/_curryN.js",
       "npm:ramda@0.23.0/src/internal/_dispatchable.js",
       "npm:ramda@0.23.0/src/internal/_dropLast.js",
       "npm:ramda@0.23.0/src/internal/_dropLastWhile.js",
       "npm:ramda@0.23.0/src/internal/_equals.js",
       "npm:ramda@0.23.0/src/internal/_filter.js",
       "npm:ramda@0.23.0/src/internal/_flatCat.js",
       "npm:ramda@0.23.0/src/internal/_forceReduced.js",
       "npm:ramda@0.23.0/src/internal/_functionName.js",
       "npm:ramda@0.23.0/src/internal/_has.js",
       "npm:ramda@0.23.0/src/internal/_identity.js",
       "npm:ramda@0.23.0/src/internal/_indexOf.js",
       "npm:ramda@0.23.0/src/internal/_isArguments.js",
       "npm:ramda@0.23.0/src/internal/_isArray.js",
       "npm:ramda@0.23.0/src/internal/_isFunction.js",
       "npm:ramda@0.23.0/src/internal/_isInteger.js",
       "npm:ramda@0.23.0/src/internal/_isNumber.js",
       "npm:ramda@0.23.0/src/internal/_isObject.js",
       "npm:ramda@0.23.0/src/internal/_isPlaceholder.js",
       "npm:ramda@0.23.0/src/internal/_isRegExp.js",
       "npm:ramda@0.23.0/src/internal/_isString.js",
       "npm:ramda@0.23.0/src/internal/_isTransformer.js",
       "npm:ramda@0.23.0/src/internal/_makeFlat.js",
       "npm:ramda@0.23.0/src/internal/_map.js",
       "npm:ramda@0.23.0/src/internal/_objectAssign.js",
       "npm:ramda@0.23.0/src/internal/_of.js",
       "npm:ramda@0.23.0/src/internal/_pipe.js",
       "npm:ramda@0.23.0/src/internal/_pipeP.js",
       "npm:ramda@0.23.0/src/internal/_quote.js",
       "npm:ramda@0.23.0/src/internal/_reduce.js",
       "npm:ramda@0.23.0/src/internal/_reduced.js",
       "npm:ramda@0.23.0/src/internal/_stepCat.js",
       "npm:ramda@0.23.0/src/internal/_toISOString.js",
       "npm:ramda@0.23.0/src/internal/_toString.js",
       "npm:ramda@0.23.0/src/internal/_xall.js",
       "npm:ramda@0.23.0/src/internal/_xany.js",
       "npm:ramda@0.23.0/src/internal/_xaperture.js",
       "npm:ramda@0.23.0/src/internal/_xchain.js",
       "npm:ramda@0.23.0/src/internal/_xdrop.js",
       "npm:ramda@0.23.0/src/internal/_xdropLast.js",
       "npm:ramda@0.23.0/src/internal/_xdropLastWhile.js",
       "npm:ramda@0.23.0/src/internal/_xdropRepeatsWith.js",
       "npm:ramda@0.23.0/src/internal/_xdropWhile.js",
       "npm:ramda@0.23.0/src/internal/_xfBase.js",
       "npm:ramda@0.23.0/src/internal/_xfilter.js",
       "npm:ramda@0.23.0/src/internal/_xfind.js",
       "npm:ramda@0.23.0/src/internal/_xfindIndex.js",
       "npm:ramda@0.23.0/src/internal/_xfindLast.js",
       "npm:ramda@0.23.0/src/internal/_xfindLastIndex.js",
       "npm:ramda@0.23.0/src/internal/_xmap.js",
       "npm:ramda@0.23.0/src/internal/_xreduceBy.js",
       "npm:ramda@0.23.0/src/internal/_xtake.js",
       "npm:ramda@0.23.0/src/internal/_xtakeWhile.js",
       "npm:ramda@0.23.0/src/internal/_xwrap.js",
       "npm:ramda@0.23.0/src/intersection.js",
       "npm:ramda@0.23.0/src/intersectionWith.js",
       "npm:ramda@0.23.0/src/intersperse.js",
       "npm:ramda@0.23.0/src/into.js",
       "npm:ramda@0.23.0/src/invert.js",
       "npm:ramda@0.23.0/src/invertObj.js",
       "npm:ramda@0.23.0/src/invoker.js",
       "npm:ramda@0.23.0/src/is.js",
       "npm:ramda@0.23.0/src/isArrayLike.js",
       "npm:ramda@0.23.0/src/isEmpty.js",
       "npm:ramda@0.23.0/src/isNil.js",
       "npm:ramda@0.23.0/src/join.js",
       "npm:ramda@0.23.0/src/juxt.js",
       "npm:ramda@0.23.0/src/keys.js",
       "npm:ramda@0.23.0/src/keysIn.js",
       "npm:ramda@0.23.0/src/last.js",
       "npm:ramda@0.23.0/src/lastIndexOf.js",
       "npm:ramda@0.23.0/src/length.js",
       "npm:ramda@0.23.0/src/lens.js",
       "npm:ramda@0.23.0/src/lensIndex.js",
       "npm:ramda@0.23.0/src/lensPath.js",
       "npm:ramda@0.23.0/src/lensProp.js",
       "npm:ramda@0.23.0/src/lift.js",
       "npm:ramda@0.23.0/src/liftN.js",
       "npm:ramda@0.23.0/src/lt.js",
       "npm:ramda@0.23.0/src/lte.js",
       "npm:ramda@0.23.0/src/map.js",
       "npm:ramda@0.23.0/src/mapAccum.js",
       "npm:ramda@0.23.0/src/mapAccumRight.js",
       "npm:ramda@0.23.0/src/mapObjIndexed.js",
       "npm:ramda@0.23.0/src/match.js",
       "npm:ramda@0.23.0/src/mathMod.js",
       "npm:ramda@0.23.0/src/max.js",
       "npm:ramda@0.23.0/src/maxBy.js",
       "npm:ramda@0.23.0/src/mean.js",
       "npm:ramda@0.23.0/src/median.js",
       "npm:ramda@0.23.0/src/memoize.js",
       "npm:ramda@0.23.0/src/merge.js",
       "npm:ramda@0.23.0/src/mergeAll.js",
       "npm:ramda@0.23.0/src/mergeWith.js",
       "npm:ramda@0.23.0/src/mergeWithKey.js",
       "npm:ramda@0.23.0/src/min.js",
       "npm:ramda@0.23.0/src/minBy.js",
       "npm:ramda@0.23.0/src/modulo.js",
       "npm:ramda@0.23.0/src/multiply.js",
       "npm:ramda@0.23.0/src/nAry.js",
       "npm:ramda@0.23.0/src/negate.js",
       "npm:ramda@0.23.0/src/none.js",
       "npm:ramda@0.23.0/src/not.js",
       "npm:ramda@0.23.0/src/nth.js",
       "npm:ramda@0.23.0/src/nthArg.js",
       "npm:ramda@0.23.0/src/objOf.js",
       "npm:ramda@0.23.0/src/of.js",
       "npm:ramda@0.23.0/src/omit.js",
       "npm:ramda@0.23.0/src/once.js",
       "npm:ramda@0.23.0/src/or.js",
       "npm:ramda@0.23.0/src/over.js",
       "npm:ramda@0.23.0/src/pair.js",
       "npm:ramda@0.23.0/src/partial.js",
       "npm:ramda@0.23.0/src/partialRight.js",
       "npm:ramda@0.23.0/src/partition.js",
       "npm:ramda@0.23.0/src/path.js",
       "npm:ramda@0.23.0/src/pathEq.js",
       "npm:ramda@0.23.0/src/pathOr.js",
       "npm:ramda@0.23.0/src/pathSatisfies.js",
       "npm:ramda@0.23.0/src/pick.js",
       "npm:ramda@0.23.0/src/pickAll.js",
       "npm:ramda@0.23.0/src/pickBy.js",
       "npm:ramda@0.23.0/src/pipe.js",
       "npm:ramda@0.23.0/src/pipeK.js",
       "npm:ramda@0.23.0/src/pipeP.js",
       "npm:ramda@0.23.0/src/pluck.js",
       "npm:ramda@0.23.0/src/prepend.js",
       "npm:ramda@0.23.0/src/product.js",
       "npm:ramda@0.23.0/src/project.js",
       "npm:ramda@0.23.0/src/prop.js",
       "npm:ramda@0.23.0/src/propEq.js",
       "npm:ramda@0.23.0/src/propIs.js",
       "npm:ramda@0.23.0/src/propOr.js",
       "npm:ramda@0.23.0/src/propSatisfies.js",
       "npm:ramda@0.23.0/src/props.js",
       "npm:ramda@0.23.0/src/range.js",
       "npm:ramda@0.23.0/src/reduce.js",
       "npm:ramda@0.23.0/src/reduceBy.js",
       "npm:ramda@0.23.0/src/reduceRight.js",
       "npm:ramda@0.23.0/src/reduceWhile.js",
       "npm:ramda@0.23.0/src/reduced.js",
       "npm:ramda@0.23.0/src/reject.js",
       "npm:ramda@0.23.0/src/remove.js",
       "npm:ramda@0.23.0/src/repeat.js",
       "npm:ramda@0.23.0/src/replace.js",
       "npm:ramda@0.23.0/src/reverse.js",
       "npm:ramda@0.23.0/src/scan.js",
       "npm:ramda@0.23.0/src/sequence.js",
       "npm:ramda@0.23.0/src/set.js",
       "npm:ramda@0.23.0/src/slice.js",
       "npm:ramda@0.23.0/src/sort.js",
       "npm:ramda@0.23.0/src/sortBy.js",
       "npm:ramda@0.23.0/src/sortWith.js",
       "npm:ramda@0.23.0/src/split.js",
       "npm:ramda@0.23.0/src/splitAt.js",
       "npm:ramda@0.23.0/src/splitEvery.js",
       "npm:ramda@0.23.0/src/splitWhen.js",
       "npm:ramda@0.23.0/src/subtract.js",
       "npm:ramda@0.23.0/src/sum.js",
       "npm:ramda@0.23.0/src/symmetricDifference.js",
       "npm:ramda@0.23.0/src/symmetricDifferenceWith.js",
       "npm:ramda@0.23.0/src/tail.js",
       "npm:ramda@0.23.0/src/take.js",
       "npm:ramda@0.23.0/src/takeLast.js",
       "npm:ramda@0.23.0/src/takeLastWhile.js",
       "npm:ramda@0.23.0/src/takeWhile.js",
       "npm:ramda@0.23.0/src/tap.js",
       "npm:ramda@0.23.0/src/test.js",
       "npm:ramda@0.23.0/src/times.js",
       "npm:ramda@0.23.0/src/toLower.js",
       "npm:ramda@0.23.0/src/toPairs.js",
       "npm:ramda@0.23.0/src/toPairsIn.js",
       "npm:ramda@0.23.0/src/toString.js",
       "npm:ramda@0.23.0/src/toUpper.js",
       "npm:ramda@0.23.0/src/transduce.js",
       "npm:ramda@0.23.0/src/transpose.js",
       "npm:ramda@0.23.0/src/traverse.js",
       "npm:ramda@0.23.0/src/trim.js",
       "npm:ramda@0.23.0/src/tryCatch.js",
       "npm:ramda@0.23.0/src/type.js",
       "npm:ramda@0.23.0/src/unapply.js",
       "npm:ramda@0.23.0/src/unary.js",
       "npm:ramda@0.23.0/src/uncurryN.js",
       "npm:ramda@0.23.0/src/unfold.js",
       "npm:ramda@0.23.0/src/union.js",
       "npm:ramda@0.23.0/src/unionWith.js",
       "npm:ramda@0.23.0/src/uniq.js",
       "npm:ramda@0.23.0/src/uniqBy.js",
       "npm:ramda@0.23.0/src/uniqWith.js",
       "npm:ramda@0.23.0/src/unless.js",
       "npm:ramda@0.23.0/src/unnest.js",
       "npm:ramda@0.23.0/src/until.js",
       "npm:ramda@0.23.0/src/update.js",
       "npm:ramda@0.23.0/src/useWith.js",
       "npm:ramda@0.23.0/src/values.js",
       "npm:ramda@0.23.0/src/valuesIn.js",
       "npm:ramda@0.23.0/src/view.js",
       "npm:ramda@0.23.0/src/when.js",
       "npm:ramda@0.23.0/src/where.js",
       "npm:ramda@0.23.0/src/whereEq.js",
       "npm:ramda@0.23.0/src/without.js",
       "npm:ramda@0.23.0/src/xprod.js",
       "npm:ramda@0.23.0/src/zip.js",
       "npm:ramda@0.23.0/src/zipObj.js",
       "npm:ramda@0.23.0/src/zipWith.js"
     ]
   }
 });
\ No newline at end of file
diff --git a/shrine-webclient/src/main/js/client/js-shrine/export/dist/app-build.js b/shrine-webclient/src/main/js/client/js-shrine/export/dist/app-build.js
index 3fccfbbce..07088df2a 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/export/dist/app-build.js
+++ b/shrine-webclient/src/main/js/client/js-shrine/export/dist/app-build.js
@@ -1 +1 @@
-"bundle";System.register("main.js",[],function(a,b){"use strict";function c(a){a.use.standardConfiguration().developmentLogging(),a.start().then(function(){return a.setRoot("shell")})}return a("configure",c),{setters:[],execute:function(){}}}),function(){var a=System.amdDefine;a("shell.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return"<template><router-view></router-view></template>"})}(),System.register("shell.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("Shell",d=function(){function a(){c(this,a)}return a.prototype.configureRouter=function(a,b){a.title="SHRINE Webclient Plugin",a.map([{route:"mailto",moduleId:"views/mailto/mailto"},{route:["","query-viewer"],moduleId:"views/query-viewer/query-viewer"}]),this.router=b},a}()),a("Shell",d)}}}),function(){var a=System.amdDefine;a("views/mailto/mailto.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><div class="mailto"><div class="content"><p>If you have questions about your query results or this SHRINE network, contact the Data Steward at your site.</p><div class="email js-email"><button class="button button--large js-button" click.delegate="openEmail()">Email Data Steward</button></div></div></div></template>'})}(),System.register("views/mailto/mailto.service.js",["aurelia-framework","repository/qep.repository"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h;return{setters:[function(a){d=a.inject},function(a){e=a.QEPRepository}],execute:function(){a("MailToService",(f=d(e),h=f(g=function(){function a(b){c(this,a),this.repository=b}return a.prototype.fetchStewardEmail=function(){return this.repository.fetchStewardEmail()},a}())||g)),a("MailToService",h)}}}),System.register("views/mailto/mailto.config.js",[],function(a,b){"use strict";var c;return{setters:[],execute:function(){a("MailConfig",c={mailto:"mailto:",subject:encodeURIComponent("Question from a SHRINE User"),body:encodeURIComponent("Please enter the suggested information and your question. Your data steward will reply to this email.\n        \n\n***Never send patient information, passwords, or other sensitive information by email****\n        \nName:\n        \nTitle:\n        \nUser name (to log into SHRINE):\n        \nTelephone Number (optional):\n        \nPreferred email address (optional):\n        \n\nQuestion or Comment:")}),a("MailConfig",c)}}}),System.register("views/mailto/mailto.js",["aurelia-framework","views/mailto/mailto.service","views/mailto/mailto.config"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i;return{setters:[function(a){d=a.inject},function(a){e=a.MailToService},function(a){f=a.MailConfig}],execute:function(){a("MailTo",(g=d(e,f),i=g(h=function(){function a(b,d){c(this,a),this.service=b,this.config=d}return a.prototype.openEmail=function(){var a=this;this.service.fetchStewardEmail().then(function(b){window.top.location="mailto:"+b+"?subject="+a.config.subject+"&body="+a.config.body})},a}())||h)),a("MailTo",i)}}}),System.register("views/query-viewer/box-style.converter.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("BoxStyleValueConverter",d=function(){function a(){c(this,a)}return a.prototype.toView=function(a){return"transform: translate("+String(-100*a)+"%);"},a}()),a("BoxStyleValueConverter",d)}}}),function(){var a=System.amdDefine;a("views/query-viewer/context-menu/context-menu.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><ul class="context-menu ${context.class || \'hide\'}" mouseleave.trigger="context.class=\'hide\'" css="top: ${context.y - 40}; left: ${context.x - 50};"><li click.delegate="loadQuery(context.id)"><a href="#"><i class="fa fa-files-o"></i> Clone</a></li><li><a click.delegate="loadHistory()" href="#"><i class="fa fa-history"></i> Refresh All</a></li></ul></template>'})}(),System.register("views/query-viewer/context-menu/context-menu.js",["aurelia-framework","common/i2b2.service.js"],function(a,b){"use strict";function c(a,b,c,d){c&&Object.defineProperty(a,b,{enumerable:c.enumerable,configurable:c.configurable,writable:c.writable,value:c.initializer?c.initializer.call(d):void 0})}function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function e(a,b,c,d,e){var f={};return Object.keys(d).forEach(function(a){f[a]=d[a]}),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce(function(c,d){return d(a,b,c)||c},f),e&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(e):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(a,b,f),f=null),f}var f,g,h,i,j,k,l,m;return{setters:[function(a){f=a.inject,g=a.bindable},function(a){h=a.I2B2Service}],execute:function(){a("ContextMenu",(i=f(h),m=i((k=function b(a){var e=this;d(this,b),c(this,"context",l,this),this.loadQuery=function(b){a.loadQuery(b),e.context["class"]="hide"},this.loadHistory=function(){a.loadHistory(),e.context["class"]="hide"}},l=e(k.prototype,"context",[g],{enumerable:!0,initializer:null}),j=k))||j)),a("ContextMenu",m)}}}),function(){var a=System.amdDefine;a("views/query-viewer/loading-bar/loading-bar.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><div class="loader"><h1>${status}</h1><div class="slider"><div class="line"></div><div class="break dot1"></div><div class="break dot2"></div><div class="break dot3"></div></div></div></template>'})}(),System.register("views/query-viewer/loading-bar/loading-bar.js",["aurelia-framework"],function(a,b){"use strict";function c(a,b,c,d){c&&Object.defineProperty(a,b,{enumerable:c.enumerable,configurable:c.configurable,writable:c.writable,value:c.initializer?c.initializer.call(d):void 0})}function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function e(a,b,c,d,e){var f={};return Object.keys(d).forEach(function(a){f[a]=d[a]}),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce(function(c,d){return d(a,b,c)||c},f),e&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(e):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(a,b,f),f=null),f}var f,g,h,i;return{setters:[function(a){f=a.bindable}],execute:function(){a("LoadingBar",(g=function b(){d(this,b),c(this,"status",h,this)},h=e(g.prototype,"status",[f],{enumerable:!0,initializer:null}),i=g)),a("LoadingBar",i)}}}),function(){var a=System.amdDefine;a("views/query-viewer/query-viewer.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><require from="views/query-viewer/result-style.converter"></require><require from="views/query-viewer/result-value.converter"></require><require from="views/query-viewer/box-style.converter"></require><require from="views/query-viewer/context-menu/context-menu"></require><require from="views/query-viewer/loading-bar/loading-bar"></require><loading-bar status.bind="\'Loading...\'" if.bind="showLoader"></loading-bar><div style="width: 100%; text-align: center"><ul class="circle-pagination" if.bind="showCircles"><li repeat.for="screen of screens" class="${screenIndex === $index? \'active\' : \'\'}" click.delegate="screenIndex = $index"><div>${screen.id}</div></li></ul></div><div class="box-wrapper"><div class="box" repeat.for="screen of screens" css.bind="screenIndex | boxStyle"><section><div><table cellpadding="0" cellspacing="0" border="0"><thead><tr><th class="tbl-header"></th><th repeat.for="node of screen.nodes" class="tbl-header"><div class="hideextra">${node}</div></th></tr></thead></table></div><context-menu context.bind="context"></context-menu><div class="tbl-content ${vertStyle}" scroll.trigger="onScroll($event)"><table cellpadding="0" cellspacing="0" border="0"><tbody><tr if.bind="runningQuery"><th><div class="hideextra">${runningQuery}</div></th><td repeat.for="node of screen.nodes" style="color: #00FF00">RUNNING</td></tr><tr repeat.for="result of screen.results" contextmenu.trigger="context = getContext($event, result)"><th><div class="hideextra">${result.name}</div></th><td repeat.for="nodeResult of result.nodeResults" css="${nodeResult | resultStyle}"><a if.bind="nodeResult.status !== \'FINISHED\'" click.delegate="errorDetail(nodeResult)" style="text-decoration: underline">${nodeResult.status} </a>${nodeResult | result}</td></tr></tbody></table></div></section></div></div></template>'})}(),System.register("repository/qep.repository.js",["aurelia-framework","aurelia-fetch-client","fetch"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i;return{setters:[function(a){d=a.inject},function(a){e=a.HttpClient},function(a){}],execute:function(){f=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),a("QEPRepository",(g=d(e),i=g(h=function(){function a(b){var d=this;c(this,a),b.configure(function(a){a.useStandardConfiguration().withBaseUrl(d.url).withDefaults({headers:{Authorization:"Basic "+d.auth}})}),this.http=b}return a.prototype.fetchPreviousQueries=function(a){var b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return this.http.fetch("qep/queryResults?limit="+a+"&skip="+b).then(function(a){return a.json()})["catch"](function(a){return a})},a.prototype.fetchStewardEmail=function(){return this.http.fetch("data?key=stewardEmail").then(function(a){return a.json()}).then(function(a){return a.indexOf('"')>0?a.split('"')[1]:a})["catch"](function(){return""})},f(a,[{key:"url",get:function(){var a=document.URL,b=":6443/shrine-metadata/";return a.substring(0,a.lastIndexOf(":"))+b}},{key:"auth",get:function(){var a=sessionStorage.getItem("shrine.auth");return sessionStorage.removeItem("shrine.auth"),a}}]),a}())||h)),a("QEPRepository",i)}}}),System.register("views/query-viewer/query-viewer.service.js",["aurelia-framework","repository/qep.repository","./query-viewer.config"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i;return{setters:[function(a){d=a.inject},function(a){e=a.QEPRepository},function(a){f=a.QueryViewerConfig}],execute:function(){a("QueryViewerService",(g=d(e,f),i=g(h=function(){function a(b,d,e){c(this,a),this.repository=b,this.config=d}return a.prototype.fetchPreviousQueries=function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.config.maxQueriesPerScroll;return this.repository.fetchPreviousQueries(a)},a.prototype.getScreens=function(a,b){var c=this;return new Promise(function(d,e){for(var f=a.sort().length,g=[],h=0;h<f;h+=c.config.maxNodesPerScreen){var i=c.getNumberOfNodesOnScreen(a,h,c.config.maxNodesPerScreen),j=i-1,k=c.getScreenId(a,h,j),l=a.slice(h,i),m=c.mapQueriesToScreenNodes(l,b,c.findQueriesForNode);g.push({id:k,nodes:l,results:m})}d(g)})},a.prototype.mapQueriesToScreenNodes=function(a,b){var c=[];return b.forEach(function(b,d){var e={name:b.query.queryName,id:b.query.networkId,nodeResults:[]};a.forEach(function(a){e.nodeResults.push(b.adaptersToResults.find(function(b){return b.adapterNode===a}))}),c.push(e)}),c},a.prototype.getNumberOfNodesOnScreen=function(a,b){var c=b+this.config.maxNodesPerScreen;return c<a.length?c:a.length},a.prototype.getScreenId=function(a,b,c){var d=a[b],e=a[c];return String(d).substr(0,1)+"-"+String(e).substr(0,1)},a}())||h)),a("QueryViewerService",i)}}}),System.register("common/i2b2.service.js",["ramda","./container"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f;return{setters:[function(a){d=a},function(a){e=a.Container}],execute:function(){a("I2B2Service",f=function b(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window;c(this,b);var f=e.of(a),g=d.curry(function(a,b){return b.value?e.of(d.prop(a,b.value)):e.of(null)}),h=d.compose(g("i2b2"),g("window"),g("parent")),i=d.compose(g("CRC"),h),j=d.compose(g("events"),h),k=d.compose(g("SHRINE"),h);this.onResize=function(a){return j(f).map(function(b){return b.changedZoomWindows.subscribe(a)})},this.onHistory=function(a){return i(f).map(function(b){return b.ctrlr.history.events.onDataUpdate.subscribe(a)})},this.onQuery=function(a){return j(f).map(function(b){return b.afterQueryInit.subscribe(a)})},this.loadHistory=function(){return i(f).map(function(a){return a.view.history.doRefreshAll()})},this.loadQuery=function(a){return i(f).map(function(b){return b.ctrlr.QT.doQueryLoad(a)})},this.errorDetail=function(a){return k(f).map(function(b){return b.plugin.errorDetail(a)})}}),a("I2B2Service",f)}}}),System.register("views/query-viewer/query-viewer.model.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e;return{setters:[],execute:function(){d=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),a("QueryViewerModel",e=function(){function a(){c(this,a),this.processing=!1,this.loadedCount=0,this.totalQueries=0,this.screens=[]}return d(a,[{key:"moreToLoad",get:function(){return this.loadedCount<this.totalQueries}},{key:"hasData",get:function(){return this.screens.length>0}}]),a}()),a("QueryViewerModel",e)}}}),System.register("common/container.js",["ramda"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f;return{setters:[function(a){d=a}],execute:function(){e=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),a("Container",f=function(){function a(b){c(this,a),this.__value=b}return a.of=function(b){return new a(function(){return b})},a.prototype.map=function(b){return this.hasNothing()?a.of(null):a.of(b(this.value))},a.prototype.join=function(){return this.hasNothing()?a.of(null):this.value},a.prototype.chain=function(a){return this.map(a).join()},a.prototype.hasNothing=function(){return null===this.value||void 0===this.value},e(a,[{key:"value",get:function(){return this.__value()}}]),a}()),a("Container",f)}}}),System.register("views/query-viewer/scroll.service.js",["ramda","common/container"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h;return{setters:[function(a){d=a},function(a){e=a.Container}],execute:function(){a("ScrollService",(g=f=function b(){c(this,b)},f.either=d.curry(function(a,b,c){return e.of(d.prop(a,c)||b)}),f.target=function(a,b){return h.either("target",b,b).chain(function(b){return h.either(a,0,b)})},f.clientHeight=function(a){return h.target("clientHeight",a)},f.scrollHeight=function(a){return h.target("scrollHeight",a)},f.scrollTop=function(a){return h.target("scrollTop",a)},f.userScroll=function(a){return h.clientHeight(a).map(function(b){return b+h.scrollTop(a).value})},f.scrollRatio=function(a){return h.userScroll(a).map(function(b){return b/h.scrollHeight(a).value})},h=g)),a("ScrollService",h)}}}),System.register("views/query-viewer/query-viewer.config.js",[],function(a,b){"use strict";var c;return{setters:[],execute:function(){a("QueryViewerConfig",c={maxNodesPerScreen:10,maxQueriesPerScroll:100}),a("QueryViewerConfig",c)}}}),System.register("views/query-viewer/query-viewer.js",["aurelia-framework","views/query-viewer/query-viewer.service","common/i2b2.service.js","./query-viewer.model","./scroll.service","./query-viewer.config"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i,j,k,l,m;return{setters:[function(a){d=a.inject,e=a.computedFrom},function(a){f=a.QueryViewerService},function(a){g=a.I2B2Service},function(a){h=a.QueryViewerModel},function(a){i=a.ScrollService},function(a){j=a.QueryViewerConfig}],execute:function(){a("QueryViewer",(k=d(f,g,h),m=k(l=function(){function a(b,d,e){var f=this;c(this,a),this.screenIndex=0,this.showCircles=!1,this.showLoader=!0,this.runningQuery=null,this.service=b,this.vertStyle="v-full",this.scrollRatio=0;var g=function(a){return e.totalQueries=a.rowCount,e.loadedCount=a.queryResults.length,f.service.getScreens(a.adapters,a.queryResults)},h=function(a){f.showLoader=!1,f.runningQuery=null,f.screens=a,f.showCircles=f.screens.length>1,e.screens=a,e.processing=!1},k=function(){return f.service.fetchPreviousQueries(e.loadedCount+j.maxQueriesPerScroll).then(g).then(h)["catch"](function(a){return console.log(a)})},l=function(a,b){return f.runningQuery=b[0].name},m=function(){return e.hasData?h(e.screens):k()},n=function(a){return 1===i.scrollRatio(a).value&&e.moreToLoad&&!e.processing};this.onScroll=function(a){n(a)&&(k(),e.processing=!0)};var o=function(a){return"ADD"!==a.action},p=function(a,b){return f.vertStyle=b.find(o)?"v-min":"v-full"};this.errorDetail=d.errorDetail,d.onResize(p),d.onHistory(k),d.onQuery(l),m()}return a.prototype.getContext=function(a,b){return{x:a.pageX,y:a.pageY,id:b.id,"class":"show"}},a}())||l)),a("QueryViewer",m)}}}),System.register("views/query-viewer/result-style.converter.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("ResultStyleValueConverter",d=function(){function a(){c(this,a)}return a.prototype.toView=function(a){var b=this.isUnresolved(a)?"color:"+this.getColorValue(a):"";return b},a.prototype.isUnresolved=function(a){var b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"FINISHED";return!a||a.status!==b},a.prototype.getColorValue=function(a){var b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"ERROR",c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"#FF0000",d=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"#00FF00";return a&&a.status!==b?d:c},a}()),a("ResultStyleValueConverter",d)}}}),System.register("views/query-viewer/result-value.converter.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("ResultValueConverter",d=function(){function a(){c(this,a)}return a.prototype.toView=function(a){return a?"FINISHED"!==a.status?"":a.count<0?"<=10":a.count:"not available"},a}()),a("ResultValueConverter",d)}}});
\ No newline at end of file
+"bundle";System.register("main.js",[],function(a,b){"use strict";function c(a){a.use.standardConfiguration().developmentLogging(),a.start().then(function(){return a.setRoot("shell")})}return a("configure",c),{setters:[],execute:function(){}}}),function(){var a=System.amdDefine;a("shell.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return"<template><router-view></router-view></template>"})}(),System.register("common/i2b2.pub-sub.js",["aurelia-framework","./i2b2.service","./tabs.model"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i;return{setters:[function(a){d=a.inject},function(a){e=a.I2B2Service},function(a){f=a.TabsModel}],execute:function(){a("I2B2PubSub",(g=d(e,f),i=g(h=function b(a,d){c(this,b),this.listen=function(){var b=function(a,b){return b.find(function(a){return"ADD"===a.action})?d.setMax():d.setMin()};a.onResize(b)}})||h)),a("I2B2PubSub",i)}}}),System.register("shell.js",["aurelia-framework","common/i2b2.pub-sub"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h;return{setters:[function(a){d=a.inject},function(a){e=a.I2B2PubSub}],execute:function(){a("Shell",(f=d(e),h=f(g=function(){function a(b){c(this,a),b.listen()}return a.prototype.configureRouter=function(a,b){a.title="SHRINE Webclient Plugin",a.map([{route:"mailto",moduleId:"views/mailto/mailto"},{route:["","query-viewer"],moduleId:"views/query-viewer/query-viewer"}]),this.router=b},a}())||g)),a("Shell",h)}}}),function(){var a=System.amdDefine;a("views/mailto/mailto.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><div class="mailto"><div class="content"><p>If you have questions about your query results or this SHRINE network, contact the Data Steward at your site.</p><div class="email js-email"><button class="button button--large js-button" click.delegate="openEmail()">Email Data Steward</button></div></div></div></template>'})}(),System.register("views/mailto/mailto.service.js",["aurelia-framework","repository/qep.repository"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h;return{setters:[function(a){d=a.inject},function(a){e=a.QEPRepository}],execute:function(){a("MailToService",(f=d(e),h=f(g=function(){function a(b){c(this,a),this.repository=b}return a.prototype.fetchStewardEmail=function(){return this.repository.fetchStewardEmail()},a}())||g)),a("MailToService",h)}}}),System.register("views/mailto/mailto.config.js",[],function(a,b){"use strict";var c;return{setters:[],execute:function(){a("MailConfig",c={mailto:"mailto:",subject:encodeURIComponent("Question from a SHRINE User"),body:encodeURIComponent("Please enter the suggested information and your question. Your data steward will reply to this email.\n        \n\n***Never send patient information, passwords, or other sensitive information by email****\n        \nName:\n        \nTitle:\n        \nUser name (to log into SHRINE):\n        \nTelephone Number (optional):\n        \nPreferred email address (optional):\n        \n\nQuestion or Comment:")}),a("MailConfig",c)}}}),System.register("views/mailto/mailto.js",["aurelia-framework","views/mailto/mailto.service","views/mailto/mailto.config"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i;return{setters:[function(a){d=a.inject},function(a){e=a.MailToService},function(a){f=a.MailConfig}],execute:function(){a("MailTo",(g=d(e,f),i=g(h=function(){function a(b,d){c(this,a),this.service=b,this.config=d}return a.prototype.openEmail=function(){var a=this;this.service.fetchStewardEmail().then(function(b){window.top.location="mailto:"+b+"?subject="+a.config.subject+"&body="+a.config.body})},a}())||h)),a("MailTo",i)}}}),System.register("views/query-viewer/box-style.converter.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("BoxStyleValueConverter",d=function(){function a(){c(this,a)}return a.prototype.toView=function(a){return"transform: translate("+String(-100*a)+"%);"},a}()),a("BoxStyleValueConverter",d)}}}),function(){var a=System.amdDefine;a("views/query-viewer/context-menu/context-menu.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><ul class="context-menu ${context.class || \'hide\'}" mouseleave.trigger="context.class=\'hide\'" css="top: ${context.y - 40}; left: ${context.x - 50};"><li click.delegate="loadQuery(context.id)"><a href="#"><i class="fa fa-files-o"></i> Clone</a></li><li><a click.delegate="loadHistory()" href="#"><i class="fa fa-history"></i> Refresh All</a></li></ul></template>'})}(),System.register("views/query-viewer/context-menu/context-menu.js",["aurelia-framework","common/i2b2.service.js"],function(a,b){"use strict";function c(a,b,c,d){c&&Object.defineProperty(a,b,{enumerable:c.enumerable,configurable:c.configurable,writable:c.writable,value:c.initializer?c.initializer.call(d):void 0})}function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function e(a,b,c,d,e){var f={};return Object.keys(d).forEach(function(a){f[a]=d[a]}),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce(function(c,d){return d(a,b,c)||c},f),e&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(e):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(a,b,f),f=null),f}var f,g,h,i,j,k,l,m;return{setters:[function(a){f=a.inject,g=a.bindable},function(a){h=a.I2B2Service}],execute:function(){a("ContextMenu",(i=f(h),m=i((k=function b(a){var e=this;d(this,b),c(this,"context",l,this),this.loadQuery=function(b){a.loadQuery(b),e.context["class"]="hide"},this.loadHistory=function(){a.loadHistory(),e.context["class"]="hide"}},l=e(k.prototype,"context",[g],{enumerable:!0,initializer:null}),j=k))||j)),a("ContextMenu",m)}}}),function(){var a=System.amdDefine;a("views/query-viewer/loading-bar/loading-bar.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><div class="loader"><h1>${status}</h1><div class="slider"><div class="line"></div><div class="break dot1"></div><div class="break dot2"></div><div class="break dot3"></div></div></div></template>'})}(),System.register("views/query-viewer/loading-bar/loading-bar.js",["aurelia-framework"],function(a,b){"use strict";function c(a,b,c,d){c&&Object.defineProperty(a,b,{enumerable:c.enumerable,configurable:c.configurable,writable:c.writable,value:c.initializer?c.initializer.call(d):void 0})}function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function e(a,b,c,d,e){var f={};return Object.keys(d).forEach(function(a){f[a]=d[a]}),f.enumerable=!!f.enumerable,f.configurable=!!f.configurable,("value"in f||f.initializer)&&(f.writable=!0),f=c.slice().reverse().reduce(function(c,d){return d(a,b,c)||c},f),e&&void 0!==f.initializer&&(f.value=f.initializer?f.initializer.call(e):void 0,f.initializer=void 0),void 0===f.initializer&&(Object.defineProperty(a,b,f),f=null),f}var f,g,h,i;return{setters:[function(a){f=a.bindable}],execute:function(){a("LoadingBar",(g=function b(){d(this,b),c(this,"status",h,this)},h=e(g.prototype,"status",[f],{enumerable:!0,initializer:null}),i=g)),a("LoadingBar",i)}}}),function(){var a=System.amdDefine;a("views/query-viewer/loading-bar/row-loader.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return""})}(),function(){var a=System.amdDefine;a("views/query-viewer/query-viewer.html!github:systemjs/plugin-text@0.0.8.js",[],function(){return'<template><require from="views/query-viewer/result-style.converter"></require><require from="views/query-viewer/result-value.converter"></require><require from="views/query-viewer/box-style.converter"></require><require from="views/query-viewer/context-menu/context-menu"></require><require from="views/query-viewer/loading-bar/loading-bar"></require><loading-bar status.bind="\'Loading...\'" if.bind="showLoader"></loading-bar><div style="width: 100%; text-align: center"><ul class="circle-pagination" if.bind="showCircles"><li repeat.for="screen of screens" class="${screenIndex === $index? \'active\' : \'\'}" click.delegate="screenIndex = $index"><div>${screen.id}</div></li></ul></div><div class="box-wrapper"><div class="box" repeat.for="screen of screens" css.bind="screenIndex | boxStyle"><section><div><table cellpadding="0" cellspacing="0" border="0"><thead><tr><th class="tbl-header"></th><th repeat.for="node of screen.nodes" class="tbl-header"><div class="hideextra">${node}</div></th></tr></thead></table></div><context-menu context.bind="context"></context-menu><div class="tbl-content ${vertStyle}" scroll.trigger="onScroll($event)"><table cellpadding="0" cellspacing="0" border="0"><tbody><tr if.bind="runningQuery"><th><div class="hideextra">${runningQuery}</div></th><td repeat.for="node of screen.nodes" style="color: #00FF00">RUNNING</td></tr><tr repeat.for="result of screen.results" contextmenu.trigger="context = getContext($event, result)"><th><div class="hideextra">${result.name}</div></th><td repeat.for="nodeResult of result.nodeResults" css="${nodeResult | resultStyle}"><a if.bind="nodeResult.status !== \'FINISHED\'" click.delegate="errorDetail(nodeResult)" style="text-decoration: underline">${nodeResult.status} </a>${nodeResult | result}</td></tr><tr if.bind="loadingInfiniteScroll"><td colspan="${screen.nodes.length + 1}" style="background:rgba(217, 236, 240, .05); text-align:center; color: rgba(0, 0, 0, .20)"><div style="font-size: 1.5rem"><i class="fa fa-spinner fa-spin" style="color: inherit"></i> Loading...</div></td></tr></tbody></table></div></section></div></div></template>'})}(),System.register("repository/qep.repository.js",["aurelia-framework","aurelia-fetch-client","fetch"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i;return{setters:[function(a){d=a.inject},function(a){e=a.HttpClient},function(a){}],execute:function(){f=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),a("QEPRepository",(g=d(e),i=g(h=function(){function a(b){var d=this;c(this,a),b.configure(function(a){a.useStandardConfiguration().withBaseUrl(d.url).withDefaults({headers:{Authorization:"Basic "+d.auth}})}),this.http=b}return a.prototype.fetchPreviousQueries=function(a){var b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return this.http.fetch("qep/queryResults?limit="+a+"&skip="+b).then(function(a){return a.json()})["catch"](function(a){return a})},a.prototype.fetchStewardEmail=function(){return this.http.fetch("data?key=stewardEmail").then(function(a){return a.json()}).then(function(a){return a.indexOf('"')>0?a.split('"')[1]:a})["catch"](function(){return""})},f(a,[{key:"url",get:function(){var a=document.URL,b=":6443/shrine-metadata/";return a.substring(0,a.lastIndexOf(":"))+b}},{key:"auth",get:function(){var a=sessionStorage.getItem("shrine.auth");return sessionStorage.removeItem("shrine.auth"),a}}]),a}())||h)),a("QEPRepository",i)}}}),System.register("views/query-viewer/query-viewer.service.js",["aurelia-framework","repository/qep.repository","./query-viewer.config"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i;return{setters:[function(a){d=a.inject},function(a){e=a.QEPRepository},function(a){f=a.QueryViewerConfig}],execute:function(){a("QueryViewerService",(g=d(e,f),i=g(h=function(){function a(b,d,e){c(this,a),this.repository=b,this.config=d}return a.prototype.fetchPreviousQueries=function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.config.maxQueriesPerScroll;return this.repository.fetchPreviousQueries(a)},a.prototype.getScreens=function(a,b){var c=this;return new Promise(function(d,e){for(var f=a.sort().length,g=[],h=0;h<f;h+=c.config.maxNodesPerScreen){var i=c.getNumberOfNodesOnScreen(a,h,c.config.maxNodesPerScreen),j=i-1,k=c.getScreenId(a,h,j),l=a.slice(h,i),m=c.mapQueriesToScreenNodes(l,b,c.findQueriesForNode);g.push({id:k,nodes:l,results:m})}d(g)})},a.prototype.mapQueriesToScreenNodes=function(a,b){var c=[];return b.forEach(function(b,d){var e={name:b.query.queryName,id:b.query.networkId,nodeResults:[]};a.forEach(function(a){e.nodeResults.push(b.adaptersToResults.find(function(b){return b.adapterNode===a}))}),c.push(e)}),c},a.prototype.getNumberOfNodesOnScreen=function(a,b){var c=b+this.config.maxNodesPerScreen;return c<a.length?c:a.length},a.prototype.getScreenId=function(a,b,c){var d=a[b],e=a[c];return String(d).substr(0,1)+"-"+String(e).substr(0,1)},a}())||h)),a("QueryViewerService",i)}}}),System.register("common/i2b2.service.js",["ramda","./container"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f;return{setters:[function(a){d=a},function(a){e=a.Container}],execute:function(){a("I2B2Service",f=function b(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window;c(this,b);var f=e.of(a),g=d.curry(function(a,b){return b.value?e.of(d.prop(a,b.value)):e.of(null)}),h=d.compose(g("i2b2"),g("window"),g("parent")),i=d.compose(g("CRC"),h),j=d.compose(g("events"),h),k=d.compose(g("SHRINE"),h);this.onResize=function(a){return j(f).map(function(b){return b.changedZoomWindows.subscribe(a)})},this.onHistory=function(a){return i(f).map(function(b){return b.ctrlr.history.events.onDataUpdate.subscribe(a)})},this.onQuery=function(a){return j(f).map(function(b){return b.afterQueryInit.subscribe(a)})},this.loadHistory=function(){return i(f).map(function(a){return a.view.history.doRefreshAll()})},this.loadQuery=function(a){return i(f).map(function(b){return b.ctrlr.QT.doQueryLoad(a)})},this.errorDetail=function(a){return k(f).map(function(b){return b.plugin.errorDetail(a)})}}),a("I2B2Service",f)}}}),System.register("common/tabs.model.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e;return{setters:[],execute:function(){d=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),a("TabsModel",e=function(){function a(){c(this,a);var b=a.min;a.prototype.setMax=function(){return b=a.full},a.prototype.setMin=function(){return b=a.min},a.prototype.mode=function(){return b}}return d(a,null,[{key:"full",get:function(){return"v-full"}},{key:"min",get:function(){return"v-min"}}]),a}()),a("TabsModel",e)}}}),System.register("views/query-viewer/query-viewer.model.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e;return{setters:[],execute:function(){d=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),a("QueryViewerModel",e=function(){function a(){c(this,a),this.processing=!1,this.loadedCount=0,this.totalQueries=0,this.screens=[]}return d(a,[{key:"moreToLoad",get:function(){return this.loadedCount<this.totalQueries}},{key:"hasData",get:function(){return this.screens.length>0}}]),a}()),a("QueryViewerModel",e)}}}),System.register("common/container.js",["ramda"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f;return{setters:[function(a){d=a}],execute:function(){e=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),a("Container",f=function(){function a(b){c(this,a),this.__value=b}return a.of=function(b){return new a(function(){return b})},a.prototype.map=function(b){return this.hasNothing()?a.of(null):a.of(b(this.value))},a.prototype.join=function(){return this.hasNothing()?a.of(null):this.value},a.prototype.chain=function(a){return this.map(a).join()},a.prototype.hasNothing=function(){return null===this.value||void 0===this.value},a.prototype.ap=function(a){a.map(this.value)},e(a,[{key:"value",get:function(){return this.__value()}}]),a}()),a("Container",f)}}}),System.register("views/query-viewer/scroll.service.js",["ramda","common/container"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h;return{setters:[function(a){d=a},function(a){e=a.Container}],execute:function(){a("ScrollService",(g=f=function b(){c(this,b)},f.either=d.curry(function(a,b,c){return e.of(d.prop(a,c)||b)}),f.target=function(a,b){return h.either("target",b,b).chain(function(b){return h.either(a,0,b)})},f.clientHeight=function(a){return h.target("clientHeight",a)},f.scrollHeight=function(a){return h.target("scrollHeight",a)},f.scrollTop=function(a){return h.target("scrollTop",a)},f.userScroll=function(a){return h.clientHeight(a).map(function(b){return b+h.scrollTop(a).value})},f.scrollRatio=function(a){return h.userScroll(a).map(function(b){return b/h.scrollHeight(a).value})},h=g)),a("ScrollService",h)}}}),System.register("views/query-viewer/query-viewer.config.js",[],function(a,b){"use strict";var c;return{setters:[],execute:function(){a("QueryViewerConfig",c={maxNodesPerScreen:10,maxQueriesPerScroll:40}),a("QueryViewerConfig",c)}}}),System.register("views/query-viewer/query-viewer.js",["aurelia-framework","views/query-viewer/query-viewer.service","common/i2b2.service.js","common/tabs.model","./query-viewer.model","./scroll.service","./query-viewer.config"],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d,e,f,g,h,i,j,k,l,m,n;return{setters:[function(a){d=a.inject,e=a.computedFrom},function(a){f=a.QueryViewerService},function(a){g=a.I2B2Service},function(a){h=a.TabsModel},function(a){i=a.QueryViewerModel},function(a){j=a.ScrollService},function(a){k=a.QueryViewerConfig}],execute:function(){a("QueryViewer",(l=d(f,g,i,h),n=l(m=function(){function a(b,d,e,f){var g=this;c(this,a),this.screenIndex=0,this.showCircles=!1,this.showLoader=!0,this.runningQuery=null,this.service=b,this.vertStyle=f.mode(),this.scrollRatio=0,this.queriesToLoad=e.moreToLoad,this.loadingInfiniteScroll=!1;var h=function(a){return e.totalQueries=a.rowCount,e.loadedCount=a.queryResults.length,g.queriesToLoad=e.moreToLoad,g.service.getScreens(a.adapters,a.queryResults)},i=function(a){g.showLoader=!1,g.runningQuery=null,g.screens=a,g.showCircles=g.screens.length>1,e.screens=a,e.processing=!1,g.loadingInfiniteScroll=e.processing},l=function(){return g.service.fetchPreviousQueries(e.loadedCount+k.maxQueriesPerScroll).then(h).then(i)["catch"](function(a){return console.log(a)})},m=function(a,b){g.runningQuery=b[0].name},n=function(){return e.hasData?i(e.screens):l()},o=function(a){return 1===j.scrollRatio(a).value&&e.moreToLoad&&!e.processing};this.onScroll=function(a){o(a)&&(l(),e.processing=!0,g.loadingInfiniteScroll=e.processing)};var p=function(a){return"ADD"!==a.action},q=function(a,b){return g.vertStyle=b.find(p)?"v-min":"v-full"};this.errorDetail=d.errorDetail,d.onResize(q),d.onHistory(l),d.onQuery(m),n()}return a.prototype.getContext=function(a,b){return{x:a.pageX,y:a.pageY,id:b.id,"class":"show"}},a}())||m)),a("QueryViewer",n)}}}),System.register("views/query-viewer/result-style.converter.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("ResultStyleValueConverter",d=function(){function a(){c(this,a)}return a.prototype.toView=function(a){var b=this.isUnresolved(a)?"color:"+this.getColorValue(a):"";return b},a.prototype.isUnresolved=function(a){var b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"FINISHED";return!a||a.status!==b},a.prototype.getColorValue=function(a){var b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"ERROR",c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"#FF0000",d=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"#00FF00";return a&&a.status!==b?d:c},a}()),a("ResultStyleValueConverter",d)}}}),System.register("views/query-viewer/result-value.converter.js",[],function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var d;return{setters:[],execute:function(){a("ResultValueConverter",d=function(){function a(){c(this,a)}return a.prototype.toView=function(a){return a?"FINISHED"!==a.status?"":a.count<0?"<=10":a.count:"not available"},a}()),a("ResultValueConverter",d)}}});
\ No newline at end of file
diff --git a/shrine-webclient/src/main/js/client/js-shrine/src/common/container.js b/shrine-webclient/src/main/js/client/js-shrine/src/common/container.js
index 5ac258036..40824cb1f 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/src/common/container.js
+++ b/shrine-webclient/src/main/js/client/js-shrine/src/common/container.js
@@ -1,32 +1,36 @@
 import * as _ from 'ramda';
 export class Container {
     constructor(f) {
         this.__value = f;
     }
 
     static of(value) {
         return new Container(function() {
             return value;
         });
     }
 
     get value() {
         return this.__value();
     }
 
     map(f) {
         return this.hasNothing() ? Container.of(null) : Container.of(f(this.value));
     }
 
     join() {
         return this.hasNothing()? Container.of(null) : this.value;
     }
 
     chain(f) {
         return this.map(f).join();
     }
 
     hasNothing() {
         return this.value === null || this.value === undefined;
     }
+
+    ap(otherContainer) {
+        otherContainer.map(this.value);
+    }
 }
\ No newline at end of file
diff --git a/shrine-webclient/src/main/js/client/js-shrine/src/common/i2b2.pub-sub.js b/shrine-webclient/src/main/js/client/js-shrine/src/common/i2b2.pub-sub.js
new file mode 100644
index 000000000..3f9847351
--- /dev/null
+++ b/shrine-webclient/src/main/js/client/js-shrine/src/common/i2b2.pub-sub.js
@@ -0,0 +1,15 @@
+import { inject } from 'aurelia-framework';
+import { I2B2Service } from './i2b2.service';
+import { TabsModel } from './tabs.model';
+
+@inject(I2B2Service, TabsModel)
+export class I2B2PubSub {
+    constructor(i2b2Svc, tabs) {
+        this.listen = () => {
+            const setVertStyle = (a, b) => b.find(e => e.action === 'ADD') ? tabs.setMax() : tabs.setMin();
+            i2b2Svc.onResize(setVertStyle);
+        }
+    }
+}
+
+
diff --git a/shrine-webclient/src/main/js/client/js-shrine/src/common/tabs.model.js b/shrine-webclient/src/main/js/client/js-shrine/src/common/tabs.model.js
new file mode 100644
index 000000000..954f4b697
--- /dev/null
+++ b/shrine-webclient/src/main/js/client/js-shrine/src/common/tabs.model.js
@@ -0,0 +1,17 @@
+export class TabsModel{
+
+    constructor() {
+        let mode = TabsModel.min;
+        TabsModel.prototype.setMax = () => mode = TabsModel.full;
+        TabsModel.prototype.setMin = () => mode = TabsModel.min;
+        TabsModel.prototype.mode = () => mode;
+    }
+
+    static get full() {
+        return 'v-full';
+    }
+
+    static get min() {
+        return 'v-min';
+    }
+}
\ No newline at end of file
diff --git a/shrine-webclient/src/main/js/client/js-shrine/src/main.js b/shrine-webclient/src/main/js/client/js-shrine/src/main.js
index 761d574e0..dfcb99739 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/src/main.js
+++ b/shrine-webclient/src/main/js/client/js-shrine/src/main.js
@@ -1,8 +1,9 @@
 export function configure(aurelia) {
     aurelia.use
         .standardConfiguration()
         .developmentLogging();
 
     aurelia.start()
         .then(() => aurelia.setRoot('shell'));
-}
\ No newline at end of file
+}
+
diff --git a/shrine-webclient/src/main/js/client/js-shrine/src/shell.js b/shrine-webclient/src/main/js/client/js-shrine/src/shell.js
index caa10a1aa..806f141d5 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/src/shell.js
+++ b/shrine-webclient/src/main/js/client/js-shrine/src/shell.js
@@ -1,12 +1,20 @@
+import {inject} from 'aurelia-framework';
+import {I2B2PubSub} from 'common/i2b2.pub-sub';
+@inject(I2B2PubSub)
 export class Shell {
+
+  constructor(i2b2PubSub) {
+    i2b2PubSub.listen();
+    //todo: listen for i2b2 get previous queries here.
+  }
   configureRouter(config, router) {
 
     config.title = 'SHRINE Webclient Plugin';
     config.map([
       {route: 'mailto', moduleId: 'views/mailto/mailto'},
       {route: ['', 'query-viewer'], moduleId: 'views/query-viewer/query-viewer'}
     ]);
 
     this.router = router;
   }
 }
diff --git a/shrine-webclient/src/main/js/client/js-shrine/src/views/mailto/mailto.js b/shrine-webclient/src/main/js/client/js-shrine/src/views/mailto/mailto.js
index ea0e58e15..643b1c040 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/src/views/mailto/mailto.js
+++ b/shrine-webclient/src/main/js/client/js-shrine/src/views/mailto/mailto.js
@@ -1,20 +1,21 @@
 import {inject} from 'aurelia-framework';
 import {MailToService} from 'views/mailto/mailto.service';
 import {MailConfig} from 'views/mailto/mailto.config';
 
 @inject(MailToService, MailConfig)
 export class MailTo {
     constructor(service, config) {
         this.service = service;
         this.config = config;
     }
 
     openEmail () {
         this.service.fetchStewardEmail()
             .then(email => {
                 window.top.location = `mailto:${email}?subject=${this.config.subject}&body=${this.config.body}`;
             });
     }
 }
 
 
+
diff --git a/shrine-webclient/src/main/js/client/js-shrine/src/views/query-viewer/loading-bar/row-loader.html b/shrine-webclient/src/main/js/client/js-shrine/src/views/query-viewer/loading-bar/row-loader.html
new file mode 100644
index 000000000..e69de29bb
diff --git a/shrine-webclient/src/main/js/client/js-shrine/src/views/query-viewer/query-viewer.config.js b/shrine-webclient/src/main/js/client/js-shrine/src/views/query-viewer/query-viewer.config.js
index 968aadbe5..27a023f73 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/src/views/query-viewer/query-viewer.config.js
+++ b/shrine-webclient/src/main/js/client/js-shrine/src/views/query-viewer/query-viewer.config.js
@@ -1,4 +1,4 @@
 export const QueryViewerConfig = {
     maxNodesPerScreen : 10,
-    maxQueriesPerScroll: 100
+    maxQueriesPerScroll: 40
 };
\ No newline at end of file
diff --git a/shrine-webclient/src/main/js/client/js-shrine/src/views/query-viewer/query-viewer.html b/shrine-webclient/src/main/js/client/js-shrine/src/views/query-viewer/query-viewer.html
index 01ed34b1b..5517ef0ce 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/src/views/query-viewer/query-viewer.html
+++ b/shrine-webclient/src/main/js/client/js-shrine/src/views/query-viewer/query-viewer.html
@@ -1,63 +1,69 @@
 <template>
     <require from="views/query-viewer/result-style.converter"></require>
     <require from="views/query-viewer/result-value.converter"></require>
     <require from="views/query-viewer/box-style.converter"></require>
     <require from="views/query-viewer/context-menu/context-menu"></require>
     <require from="views/query-viewer/loading-bar/loading-bar"></require>
 
     <loading-bar status.bind="'Loading...'" if.bind="showLoader"></loading-bar>
-    <div style="width: 100%; text-align: center">  
+    <div style="width: 100%; text-align: center">
         <ul class="circle-pagination" if.bind="showCircles">
-            <li repeat.for="screen of screens" class="${screenIndex === $index? 'active' : ''}"
-            click.delegate="screenIndex = $index">
+            <li repeat.for="screen of screens" class="${screenIndex === $index? 'active' : ''}" click.delegate="screenIndex = $index">
                 <div>${screen.id}</div>
             </li>
         </ul>
     </div>
     <div class="box-wrapper">
         <div class="box" repeat.for="screen of screens" css.bind="screenIndex | boxStyle">
             <section>
                 <div>
                     <table cellpadding="0" cellspacing="0" border="0">
                         <thead>
                             <tr>
                                 <th class="tbl-header">
                                 </th>
                                 <th repeat.for="node of screen.nodes" class="tbl-header">
                                     <div class="hideextra">${node}</div>
                                 </th>
                             </tr>
                         </thead>
                     </table>
                 </div>
                 <context-menu context.bind="context"></context-menu>
-                <div class="tbl-content ${vertStyle}" scroll.trigger="onScroll($event)">                    
+                <div class="tbl-content ${vertStyle}" scroll.trigger="onScroll($event)">
                     <table cellpadding="0" cellspacing="0" border="0">
                         <tbody>
                             <tr if.bind="runningQuery">
                                 <th>
                                     <div class="hideextra">${runningQuery}</div>
                                 </th>
                                 <td repeat.for="node of screen.nodes" style="color: #00FF00">
                                     RUNNING
                                 </td>
                             </tr>
                             <tr repeat.for="result of screen.results" contextmenu.trigger="context = getContext($event, result)">
                                 <th>
                                     <div class="hideextra">${result.name}</div>
                                 </th>
-                              <td repeat.for="nodeResult of result.nodeResults" css="${nodeResult | resultStyle}">
-                                  <a if.bind="nodeResult.status !== 'FINISHED'" 
-                                    click.delegate="errorDetail(nodeResult)" style="text-decoration: underline">
+                                <td repeat.for="nodeResult of result.nodeResults" css="${nodeResult | resultStyle}">
+                                    <a if.bind="nodeResult.status !== 'FINISHED'" click.delegate="errorDetail(nodeResult)" style="text-decoration: underline">
                                     ${nodeResult.status}
-                                  </a>
-                                  ${nodeResult | result}
-                             </td>
+                                  </a> ${nodeResult | result}
+                                </td>
+                            </tr>
+                            <tr if.bind="loadingInfiniteScroll">
+                                <td colspan="${screen.nodes.length + 1}" style="background:rgba(217, 236, 240, .05); text-align:center; color: rgba(0, 0, 0, .20);">
+                                    <div style="font-size: 1.5rem">
+                                        <i class="fa fa-spinner fa-spin" style="color: inherit;"></i>
+                                        Loading... 
+                                    </div>
+                                </td>
                             </tr>
                         </tbody>
                     </table>
+                    
                 </div>
             </section>
         </div>
     </div>
 </template>
\ No newline at end of file
diff --git a/shrine-webclient/src/main/js/client/js-shrine/src/views/query-viewer/query-viewer.js b/shrine-webclient/src/main/js/client/js-shrine/src/views/query-viewer/query-viewer.js
index e27053bb2..dc47fe354 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/src/views/query-viewer/query-viewer.js
+++ b/shrine-webclient/src/main/js/client/js-shrine/src/views/query-viewer/query-viewer.js
@@ -1,76 +1,85 @@
 import { inject, computedFrom } from 'aurelia-framework';
 import { QueryViewerService } from 'views/query-viewer/query-viewer.service';
 import { I2B2Service } from 'common/i2b2.service.js';
-import { QueryViewerModel } from './query-viewer.model';
+import {TabsModel} from 'common/tabs.model';
+import {QueryViewerModel } from './query-viewer.model';
 import {ScrollService} from './scroll.service';
 import {QueryViewerConfig} from './query-viewer.config';
 
-@inject(QueryViewerService, I2B2Service, QueryViewerModel)
+@inject(QueryViewerService, I2B2Service, QueryViewerModel, TabsModel)
 export class QueryViewer {
-    constructor(service, i2b2Svc, model) {
+    constructor(service, i2b2Svc, model, tabs) {
 
         // -- init -- //
         this.screenIndex = 0;
         this.showCircles = false;
         this.showLoader = true;
         this.runningQuery = null;
         this.service = service;
-        this.vertStyle = 'v-full';
+        this.vertStyle = tabs.mode();
         this.scrollRatio = 0;
+        this.queriesToLoad = model.moreToLoad;
+        this.loadingInfiniteScroll = false;
 
         // -- fetch queries -- //
         const parseResultToScreens = result => {
             model.totalQueries = result.rowCount;
             model.loadedCount = result.queryResults.length;
+            this.queriesToLoad = model.moreToLoad;
             return this.service.getScreens(result.adapters, result.queryResults);
         }
         const setVM = screens => {
             this.showLoader = false;
             this.runningQuery = null;
             this.screens = screens;
             this.showCircles = this.screens.length > 1;
             model.screens = screens;
             model.processing = false;
+            this.loadingInfiniteScroll = model.processing;
         };
 
         const refresh = () => this.service
             .fetchPreviousQueries(model.loadedCount + QueryViewerConfig.maxQueriesPerScroll)
             .then(parseResultToScreens)
             .then(setVM)
             .catch(error => console.log(error));
 
-        const addQuery = (event, data) => this.runningQuery = data[0].name;
+        const addQuery = (event, data) => {
+            this.runningQuery = data[0].name;
+        }
         const init = () => (model.hasData) ? setVM(model.screens) : refresh();
-        const loadMoreQueries = e => ScrollService.scrollRatio(e).value === 1 && model.moreToLoad && !model.processing;
 
+        
+        const loadMoreQueries = e => ScrollService.scrollRatio(e).value === 1 && model.moreToLoad && !model.processing;
        // -- scroll event -- //
        this.onScroll = e => {
             if(loadMoreQueries(e)){
                 refresh();
                 model.processing = true;
+                this.loadingInfiniteScroll = model.processing;
             }
        }
 
         // -- add i2b2 event listener -- //
         const isMinimized = e => e.action !== 'ADD';
         const setVertStyle = (a, b) => this.vertStyle = b.find(isMinimized) ? 'v-min' : 'v-full';
         this.errorDetail = i2b2Svc.errorDetail;
         i2b2Svc.onResize(setVertStyle);
         i2b2Svc.onHistory(refresh);
         i2b2Svc.onQuery(addQuery);
 
         init();
     }
     
     getContext(event, result) {
         return {
             x: event.pageX,
             y: event.pageY,
             id: result.id,
             class: 'show'
         };
     }
 }
 
 
 
diff --git a/shrine-webclient/src/main/js/client/js-shrine/src/views/query-viewer/query-viewer.model.js b/shrine-webclient/src/main/js/client/js-shrine/src/views/query-viewer/query-viewer.model.js
index 996a1d683..8631df9a8 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/src/views/query-viewer/query-viewer.model.js
+++ b/shrine-webclient/src/main/js/client/js-shrine/src/views/query-viewer/query-viewer.model.js
@@ -1,16 +1,15 @@
-//https://www.w3schools.com/js/js_function_closures.asp
 export class QueryViewerModel{
     constructor() {
         this.processing = false;
         this.loadedCount = 0;
         this.totalQueries = 0;
         this.screens = [];
     }
     get moreToLoad() {
         return this.loadedCount < this.totalQueries;
     }
 
     get hasData() {
         return this.screens.length > 0;
     }
 }
\ No newline at end of file
diff --git a/shrine-webclient/src/main/js/client/js-shrine/src/views/query-viewer/query-viewer.scss b/shrine-webclient/src/main/js/client/js-shrine/src/views/query-viewer/query-viewer.scss
index 84099e2f0..5359e2951 100644
--- a/shrine-webclient/src/main/js/client/js-shrine/src/views/query-viewer/query-viewer.scss
+++ b/shrine-webclient/src/main/js/client/js-shrine/src/views/query-viewer/query-viewer.scss
@@ -1,138 +1,137 @@
 @import url(http://fonts.googleapis.com/css?family=Roboto:400,500,300,700);
 body{
   overflow: hidden;
   background: rgba(255, 255, 255, 0.9);
   font-family: 'Roboto', sans-serif;
 }
+
+
 html,
 body,
 .box-wrapper{
   width: 100%;
   height: 100%;
   margin: 0;
 }
 
 
 .box-wrapper{
   display: -webkit-box;
   display: -ms-flexbox;
   display: flex;
   -webkit-box-orient: vertical;
   -webkit-box-direction: normal;
       -ms-flex-direction: column;
           flex-direction: column;
   -ms-flex-wrap: wrap;
       flex-wrap: wrap;
 }
 
 .box-wrapper > .box {
   margin-top: 1%;
   width: 100%;
   transition: all .2s ease;
   .hideextra { 
     white-space: nowrap; 
     overflow: hidden; 
     text-overflow:ellipsis;
   }
   section{
     margin: 20 0 6 0;
      .v-full {
        height: 90vh;
      }
-     .v-full > table{
-       padding-bottom: 10%;
-     }
      .v-min{
        height: 100px;
      }
      .v-min > table {
        padding-bottom: 1%;
      }
      .tbl-content{
         overflow: auto;
         margin-top: 0px;
         border: 1px solid rgba(98,108,146,0.3);
      }
   }
   table{
     width:100%;
     table-layout: fixed;
     .tbl-header{
       background-color: rgba(98,108,146, .3);
       div.tbl-header{
         max-width: 5rem;
       }
     }
    
     tr{
       background: white;
       cursor: pointer;
       &:hover{
         background: rgba(98,108,146, .3) !important;
       }
       &:nth-child(odd) {background: rgba(98,108,146, .1)}
     }
    
 
     th{
       padding: 2px 4px 4px 2px;
       text-align: left;
       font-weight: 500;
       font-size: .75rem;
       color: #626C92;
       text-transform: uppercase;
       border-bottom: solid 1px rgba(98,108,146,0.1);
       border-left: solid 1px rgba(98,108,146,0.1);
     }
     td{
       transition: all .5s ease;
       padding: 2px;
       text-align: left;
       vertical-align: top;
       font-weight: 300;
       font-size: 12px;
       color: black;
       border-bottom: solid 1px rgba(98,108,146,0.1);
       border-left: solid 1px rgba(98,108,146,0.1);
     }
   }
 }
 
 .circle-pagination {
   position: absolute;
   z-index: 1000;
   list-style-type: none;
   margin: 0;
   top: -.3rem;
   li {
     border-radius: 50%;
     border: 2px solid #626C92;
     width: 12px;
     height: 12px;
     padding: 4px;
     margin: 6px;
     cursor: pointer;
     float: left;
     transition: all .2s ease;
     &.active,
     &:hover{
       background: #626C92;
       width: 14px;
       height:14px;
     }
     &.active div,
     & div:hover{
       color:white;
     }
     div {
       font-size: .6rem;
       width: 24px; 
       position: relative; 
       left: -6px; 
       top: 1px;
       color: #626C92; 
       font-weight: 600;
       text-transform: capitalize; 
     }
   }
 }
\ No newline at end of file
diff --git a/shrine-webclient/src/main/js/server/data/async-queries.js b/shrine-webclient/src/main/js/server/data/async-queries.js
index 34c15891d..dd0306627 100644
--- a/shrine-webclient/src/main/js/server/data/async-queries.js
+++ b/shrine-webclient/src/main/js/server/data/async-queries.js
@@ -1,62 +1,70 @@
 const institutions = require('./institutions').sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase()));
 
 module.exports = {
     getQueryResults: getQueryResults
 };
 
-function getQueryResults(numberOfResults = 100, numberOfInstitutions = 100) {
-    let queryResults = [];
-    const results = getInstutionResults(numberOfInstitutions);
-    for (let i = 0; i < numberOfResults; i++) {
-        let query = {
-            id: i,
-            name: 'Query' + i,
-            results: results
-        }
-        queryResults.push(query);
+function getQueryResults (skip=0, numberOfQueries = 100, numberOfNodes = 100, rowCount = 500){
+    const length = numberOfNodes < institutions.length ? numberOfNodes: institutions.length;
+    const queryResults = [];
+    const adapters = institutions.slice(0, length);
+    for(let i =0;  i < numberOfQueries; i ++) {
+         queryResults.push({
+            "query": {
+                "expression": "Term(\\\\SHRINE\\SHRINE\\Demographics\\Gender\\Female\\)",
+                "queryName": `${i} Female@19:46:33`,
+                "deleted": false,
+                "changeDate": 1490571996396,
+                "userName": "ij22",
+                "networkId": (2226563841174084000 + i),
+                "queryXml": "<runQuery><projectId>SHRINE</projectId><waitTimeMs>180000</waitTimeMs><authenticationInfo><domain>i2b2demo</domain><username>ij22</username><credential isToken=\"true\">SessionKey:Gv6xaK4AQNjQipmypc7p</credential></authenticationInfo><queryId>2226563841174084953</queryId><topicId>3</topicId><topicName>medication only_27th march</topicName><outputTypes><resultType><name>PATIENT_AGE_COUNT_XML</name><isBreakdown>true</isBreakdown><description>Age patient breakdown</description><displayType>CATNUM</displayType></resultType><resultType><id>4</id><name>PATIENT_COUNT_XML</name><isBreakdown>false</isBreakdown><description>Number of patients</description><displayType>CATNUM</displayType></resultType><resultType><name>PATIENT_GENDER_COUNT_XML</name><isBreakdown>true</isBreakdown><description>Gender patient breakdown</description><displayType>CATNUM</displayType></resultType><resultType><name>PATIENT_RACE_COUNT_XML</name><isBreakdown>true</isBreakdown><description>Race patient breakdown</description><displayType>CATNUM</displayType></resultType><resultType><name>PATIENT_VITALSTATUS_COUNT_XML</name><isBreakdown>true</isBreakdown><description>Vital Status patient breakdown</description><displayType>CATNUM</displayType></resultType></outputTypes><queryDefinition><name>Female@19:46:33</name><expr><term>\\\\SHRINE\\SHRINE\\Demographics\\Gender\\Female\\</term></expr></queryDefinition></runQuery>",
+                "dateCreated": 1490571996395,
+                "userDomain": "i2b2demo"
+            },
+            "adaptersToResults": getInstutionResults(adapters)
+        });
     }
 
     return {
-        'queries': queryResults
+        "adapters": adapters,
+        "queryResults": queryResults,
+        "flags": {},
+        "rowCount": rowCount
     };
 }
 
-function getInstutionResults(numberOfInstitutions = 100, resultBase = 10000000) {
-    const length = numberOfInstitutions < institutions.length ? numberOfInstitutions : institutions.length;
-    const resultSet = [];
-    for (let i = 0; i < length; i++) {
-        const institution = institutions[i];
-        const result = resultBase + i;
-
-        resultSet.push(getInstitutionResult(
-            institution, resultBase, i,
-            ind => ind % 9 === 0,
-            ind => ind % 4 === 0));
-    }
 
-    return resultSet;
+const getInstutionResults = (adapters) => {
+    const adaptersToResults = [];
+    const status = i => i % 7 === 0? 'ERROR' : 'FINISHED';
+    adapters.forEach((e, i) => {
+        adaptersToResults.push({
+            "startDate": 1490984964085,
+            "count": i,
+            "networkQueryId": (7768019175359370000 + i),
+            "statusMessage": status(i),
+            "changeDate": 1490984965845,
+            "instanceId": (1000 + i),
+            "resultId": (2000 + i),
+            "status": status(i),
+            "endDate": 1490984964917,
+            "adapterNode": e,
+            "resultType": {
+                "isBreakdown": false,
+                "name": "PATIENT_COUNT_XML",
+                "id": 4,
+                "i2b2Options": {
+                    "description": "Number of patients",
+                    "displayType": "CATNUM"
+                }
+            }
+        });
+
+    });
+
+    return adaptersToResults;
 }
 
 
-function getInstitutionResult(institution, resultBase, index, isErrorFn, isPendingFn) {
-
-    let result = {
-        node: institution,
-        result: resultBase + index
-    };
-
-    if (isErrorFn(index)) {
-        result.result =  'ERROR';
-    }
-
-    else if (isPendingFn(index)) {
-        result.result  = 'PENDING';
-    }
-
-    console.log(result);
-
-    return result;
-}
-
 
 
diff --git a/shrine-webclient/src/main/js/server/data/curl-async-queries.js b/shrine-webclient/src/main/js/server/data/curl-async-queries.js
index 1abec277b..436b8636c 100644
--- a/shrine-webclient/src/main/js/server/data/curl-async-queries.js
+++ b/shrine-webclient/src/main/js/server/data/curl-async-queries.js
@@ -1,415 +1,414 @@
 module.exports = {
   "adapters": [
     "SHRINE QA Hub",
     "SHRINE QA Node 2",
     "SHRINE QA Node 3",
+    "SHRINE QA Node 4",
+    "SHRINE QA Node 5",
+    "SHRINE QA Node 6",
+    "SHRINE QA Node 7",
+    "SHRINE QA Node 8",
+    "SHRINE QA Node 9",
+    "SHRINE QA Node 10",
+    "SHRINE QA Node 11",
     "shrine-qa1",
     "shrine-qa2",
     "shrine-qa3",
     "shrine-qa3",
     "shrine-qa3",
     "shrine-qa3",
     "shrine-qa3",
     "shrine-qa3",
     "shrine-qa3",
     "shrine-qa3",
     "shrine-qa3",
     "shrine-qa3",
     "shrine-qa3",
     "shrine-qa3"
 
   ],
   "queryResults": [
     {
       "adaptersToResults": [
         {
           "startDate": 1490984964085,
           "count": -1,
           "networkQueryId": 7768019175359373000,
           "statusMessage": "ERROR",
           "changeDate": 1490984965845,
           "instanceId": 1899,
           "resultId": 2181,
           "status": "ERROR",
-          "resultType": {
-            "isBreakdown": false,
-            "name": "PATIENT_COUNT_XML",
-            "id": 4,
-            "i2b2Options": {
-              "description": "Number of patients",
-              "displayType": "CATNUM"
-            }
-          },
           "endDate": 1490984964917,
           "adapterNode": "shrine-qa3"
         },
         {
           "startDate": 1490984962460,
           "count": -1,
           "networkQueryId": 7768019175359373000,
           "statusMessage": "ERROR",
           "changeDate": 1490984965908,
           "instanceId": 875,
           "resultId": 1072,
           "status": "ERROR",
           "resultType": {
             "isBreakdown": false,
             "name": "PATIENT_COUNT_XML",
             "id": 4,
             "i2b2Options": {
               "description": "Number of patients",
               "displayType": "CATNUM"
             }
           },
           "endDate": 1490984963403,
           "adapterNode": "shrine-qa2"
         },
         {
           "startDate": 1490984962368,
           "count": -1,
           "networkQueryId": 7768019175359373000,
           "statusMessage": "ERROR",
           "changeDate": 1490984965923,
           "instanceId": 1133,
           "resultId": 1330,
           "status": "ERROR",
           "resultType": {
             "isBreakdown": false,
             "name": "PATIENT_COUNT_XML",
             "id": 4,
             "i2b2Options": {
               "description": "Number of patients",
               "displayType": "CATNUM"
             }
           },
           "endDate": 1490984963324,
           "adapterNode": "shrine-qa1"
         }
       ],
       "query": {
         "expression": "Constrained(Term(\\\\SHRINE\\SHRINE\\Diagnoses\\Certain conditions originating in the perinatal period (760-779.99)\\),Some(Modifiers(Admit Diagnosis,\\SHRINE\\Diagnoses\\Certain conditions originating in the perinatal period (760-779.99)\\%,\\\\SHRINE\\Admit Diagnosis\\)),None)",
         "queryName": "Admit Diagnosis@14:29:22",
         "deleted": false,
         "changeDate": 1490984963326,
         "userName": "ij22",
         "networkId": 7768019175359373000,
         "queryXml": "<runQuery><projectId>SHRINE</projectId><waitTimeMs>180000</waitTimeMs><authenticationInfo><domain>i2b2demo</domain><username>ij22</username><credential isToken=\"true\">SessionKey:U9v3LeZcEkbdTCfWLQi7</credential></authenticationInfo><queryId>7768019175359372886</queryId><topicId>3</topicId><topicName>medication only_27th march</topicName><outputTypes><resultType><id>4</id><name>PATIENT_COUNT_XML</name><isBreakdown>false</isBreakdown><description>Number of patients</description><displayType>CATNUM</displayType></resultType></outputTypes><queryDefinition><name>Admit Diagnosis@14:29:22</name><expr><constrainedTerm><term>\\\\SHRINE\\SHRINE\\Diagnoses\\Certain conditions originating in the perinatal period (760-779.99)\\</term><modifier><name>Admit Diagnosis</name><appliedPath>\\SHRINE\\Diagnoses\\Certain conditions originating in the perinatal period (760-779.99)\\%</appliedPath><key>\\\\SHRINE\\Admit Diagnosis\\</key></modifier></constrainedTerm></expr></queryDefinition></runQuery>",
         "dateCreated": 1490984963326,
         "userDomain": "i2b2demo"
       }
     },
     {
       "adaptersToResults": [
         {
           "startDate": 1490571995243,
           "count": 60,
           "networkQueryId": 2226563841174084900,
           "statusMessage": "ERROR",
           "changeDate": 1490572000244,
           "instanceId": 832,
           "resultId": 1018,
           "status": "FINISHED",
           "resultType": {
             "isBreakdown": false,
             "name": "PATIENT_COUNT_XML",
             "id": 4,
             "i2b2Options": {
               "description": "Number of patients",
               "displayType": "CATNUM"
             }
           },
           "endDate": 1490571996337,
           "adapterNode": "SHRINE QA Node 2"
         },
         {
           "startDate": 1490571995232,
           "count": 50,
           "networkQueryId": 2226563841174084900,
           "statusMessage": "FINISHED",
           "changeDate": 1490572000263,
           "instanceId": 1058,
           "resultId": 1244,
           "status": "FINISHED",
           "resultType": {
             "isBreakdown": false,
             "name": "PATIENT_COUNT_XML",
             "id": 4,
             "i2b2Options": {
               "description": "Number of patients",
               "displayType": "CATNUM"
             }
           },
           "endDate": 1490571996293,
           "adapterNode": "SHRINE QA Hub"
         },
         {
           "startDate": 1490571997183,
           "count": 60,
           "networkQueryId": 2226563841174084900,
           "statusMessage": "FINISHED",
           "changeDate": 1490572000275,
           "instanceId": 1856,
           "resultId": 2127,
           "status": "FINISHED",
           "resultType": {
             "isBreakdown": false,
             "name": "PATIENT_COUNT_XML",
             "id": 4,
             "i2b2Options": {
               "description": "Number of patients",
               "displayType": "CATNUM"
             }
           },
           "endDate": 1490571998202,
           "adapterNode": "SHRINE QA Node 3"
         }
       ],
       "query": {
         "expression": "Term(\\\\SHRINE\\SHRINE\\Demographics\\Gender\\Female\\)",
         "queryName": "Female@19:46:33",
         "deleted": false,
         "changeDate": 1490571996396,
         "userName": "ij22",
         "networkId": 2226563841174084900,
         "queryXml": "<runQuery><projectId>SHRINE</projectId><waitTimeMs>180000</waitTimeMs><authenticationInfo><domain>i2b2demo</domain><username>ij22</username><credential isToken=\"true\">SessionKey:Gv6xaK4AQNjQipmypc7p</credential></authenticationInfo><queryId>2226563841174084953</queryId><topicId>3</topicId><topicName>medication only_27th march</topicName><outputTypes><resultType><name>PATIENT_AGE_COUNT_XML</name><isBreakdown>true</isBreakdown><description>Age patient breakdown</description><displayType>CATNUM</displayType></resultType><resultType><id>4</id><name>PATIENT_COUNT_XML</name><isBreakdown>false</isBreakdown><description>Number of patients</description><displayType>CATNUM</displayType></resultType><resultType><name>PATIENT_GENDER_COUNT_XML</name><isBreakdown>true</isBreakdown><description>Gender patient breakdown</description><displayType>CATNUM</displayType></resultType><resultType><name>PATIENT_RACE_COUNT_XML</name><isBreakdown>true</isBreakdown><description>Race patient breakdown</description><displayType>CATNUM</displayType></resultType><resultType><name>PATIENT_VITALSTATUS_COUNT_XML</name><isBreakdown>true</isBreakdown><description>Vital Status patient breakdown</description><displayType>CATNUM</displayType></resultType></outputTypes><queryDefinition><name>Female@19:46:33</name><expr><term>\\\\SHRINE\\SHRINE\\Demographics\\Gender\\Female\\</term></expr></queryDefinition></runQuery>",
         "dateCreated": 1490571996395,
         "userDomain": "i2b2demo"
       }
     },
     {
       "adaptersToResults": [
         {
           "startDate": 1490571983703,
           "count": -1,
           "networkQueryId": 6386518509045377000,
           "statusMessage": "FINISHED",
           "changeDate": 1490571987946,
           "instanceId": 831,
           "resultId": 1016,
           "status": "FINISHED",
           "resultType": {
             "isBreakdown": false,
             "name": "PATIENT_COUNT_XML",
             "id": 4,
             "i2b2Options": {
               "description": "Number of patients",
               "displayType": "CATNUM"
             }
           },
           "endDate": 1490571985231,
           "adapterNode": "SHRINE QA Node 2"
         },
         {
           "startDate": 1490571983939,
           "count": -1,
           "networkQueryId": 6386518509045377000,
           "statusMessage": "FINISHED",
           "changeDate": 1490571987953,
           "instanceId": 1057,
           "resultId": 1242,
           "status": "FINISHED",
           "resultType": {
             "isBreakdown": false,
             "name": "PATIENT_COUNT_XML",
             "id": 4,
             "i2b2Options": {
               "description": "Number of patients",
               "displayType": "CATNUM"
             }
           },
           "endDate": 1490571985580,
           "adapterNode": "SHRINE QA Hub"
         },
         {
           "startDate": 1490571985806,
           "count": -1,
           "networkQueryId": 6386518509045377000,
           "statusMessage": "FINISHED",
           "changeDate": 1490571987957,
           "instanceId": 1855,
           "resultId": 2125,
           "status": "FINISHED",
           "resultType": {
             "isBreakdown": false,
             "name": "PATIENT_COUNT_XML",
             "id": 4,
             "i2b2Options": {
               "description": "Number of patients",
               "displayType": "CATNUM"
             }
           },
           "endDate": 1490571987400,
           "adapterNode": "SHRINE QA Node 3"
         }
       ],
       "query": {
         "expression": "Term(\\\\SHRINE\\SHRINE\\Demographics\\Age\\0-9 years old\\)",
         "queryName": "0-9 years old@19:46:24",
         "deleted": false,
         "changeDate": 1490571985154,
         "userName": "ij22",
         "networkId": 6386518509045377000,
         "queryXml": "<runQuery><projectId>SHRINE</projectId><waitTimeMs>180000</waitTimeMs><authenticationInfo><domain>i2b2demo</domain><username>ij22</username><credential isToken=\"true\">SessionKey:Gv6xaK4AQNjQipmypc7p</credential></authenticationInfo><queryId>6386518509045377410</queryId><topicId>3</topicId><topicName>medication only_27th march</topicName><outputTypes><resultType><id>4</id><name>PATIENT_COUNT_XML</name><isBreakdown>false</isBreakdown><description>Number of patients</description><displayType>CATNUM</displayType></resultType></outputTypes><queryDefinition><name>0-9 years old@19:46:24</name><expr><term>\\\\SHRINE\\SHRINE\\Demographics\\Age\\0-9 years old\\</term></expr></queryDefinition></runQuery>",
         "dateCreated": 1490571985154,
         "userDomain": "i2b2demo"
       }
     },
     {
       "adaptersToResults": [
         {
           "startDate": 1490571976696,
           "count": 40,
           "networkQueryId": 2400531532595122000,
           "statusMessage": "FINISHED",
           "changeDate": 1490571979929,
           "instanceId": 830,
           "resultId": 1015,
           "status": "FINISHED",
           "resultType": {
             "isBreakdown": false,
             "name": "PATIENT_COUNT_XML",
             "id": 4,
             "i2b2Options": {
               "description": "Number of patients",
               "displayType": "CATNUM"
             }
           },
           "endDate": 1490571977377,
           "adapterNode": "SHRINE QA Node 2"
         },
         {
           "startDate": 1490571976829,
           "count": 55,
           "networkQueryId": 2400531532595122000,
           "statusMessage": "FINISHED",
           "changeDate": 1490571979935,
           "instanceId": 1056,
           "resultId": 1241,
           "status": "FINISHED",
           "resultType": {
             "isBreakdown": false,
             "name": "PATIENT_COUNT_XML",
             "id": 4,
             "i2b2Options": {
               "description": "Number of patients",
               "displayType": "CATNUM"
             }
           },
           "endDate": 1490571977623,
           "adapterNode": "SHRINE QA Hub"
         },
         {
           "startDate": 1490571978660,
           "count": 40,
           "networkQueryId": 2400531532595122000,
           "statusMessage": "ERROR",
           "changeDate": 1490571979942,
           "instanceId": 1854,
           "resultId": 2124,
           "status": "ERROR",
           "resultType": {
             "isBreakdown": false,
             "name": "PATIENT_COUNT_XML",
             "id": 4,
             "i2b2Options": {
               "description": "Number of patients",
               "displayType": "CATNUM"
             }
           },
           "endDate": 1490571979396,
           "adapterNode": "SHRINE QA Node 3"
         }
       ],
       "query": {
         "expression": "Term(\\\\SHRINE\\SHRINE\\Demographics\\Gender\\Female\\)",
         "queryName": "Female@19:46:17",
         "deleted": false,
         "changeDate": 1490571978065,
         "userName": "ij22",
         "networkId": 2400531532595122000,
         "queryXml": "<runQuery><projectId>SHRINE</projectId><waitTimeMs>180000</waitTimeMs><authenticationInfo><domain>i2b2demo</domain><username>ij22</username><credential isToken=\"true\">SessionKey:Gv6xaK4AQNjQipmypc7p</credential></authenticationInfo><queryId>2400531532595122336</queryId><topicId>3</topicId><topicName>medication only_27th march</topicName><outputTypes><resultType><id>4</id><name>PATIENT_COUNT_XML</name><isBreakdown>false</isBreakdown><description>Number of patients</description><displayType>CATNUM</displayType></resultType></outputTypes><queryDefinition><name>Female@19:46:17</name><expr><term>\\\\SHRINE\\SHRINE\\Demographics\\Gender\\Female\\</term></expr></queryDefinition></runQuery>",
         "dateCreated": 1490571978064,
         "userDomain": "i2b2demo"
       }
     },
     {
       "adaptersToResults": [
         {
           "startDate": 1490571965504,
           "count": -1,
           "networkQueryId": 1813286953364395500,
           "statusMessage": "ERROR",
           "changeDate": 1490571967830,
           "instanceId": 1853,
           "resultId": 2123,
           "status": "ERROR",
           "resultType": {
             "isBreakdown": false,
             "name": "PATIENT_COUNT_XML",
             "id": 4,
             "i2b2Options": {
               "description": "Number of patients",
               "displayType": "CATNUM"
             }
           },
           "endDate": 1490571966969,
           "adapterNode": "SHRINE QA Node 3"
         },
         {
           "startDate": 1490571963634,
           "count": -1,
           "networkQueryId": 1813286953364395500,
           "statusMessage": "ERROR",
           "changeDate": 1490571967857,
           "instanceId": 829,
           "resultId": 1014,
           "status": "ERROR",
           "resultType": {
             "isBreakdown": false,
             "name": "PATIENT_COUNT_XML",
             "id": 4,
             "i2b2Options": {
               "description": "Number of patients",
               "displayType": "CATNUM"
             }
           },
           "endDate": 1490571965423,
           "adapterNode": "SHRINE QA Node 2"
         },
         {
           "startDate": 1490571963687,
           "count": -1,
           "networkQueryId": 1813286953364395500,
           "statusMessage": "ERROR",
           "changeDate": 1490571967872,
           "instanceId": 1055,
           "resultId": 1240,
           "status": "ERROR",
           "resultType": {
             "isBreakdown": false,
             "name": "PATIENT_COUNT_XML",
             "id": 4,
             "i2b2Options": {
               "description": "Number of patients",
               "displayType": "CATNUM"
             }
           },
           "endDate": 1490571965339,
           "adapterNode": "SHRINE QA Hub"
         }
       ],
       "query": {
         "expression": "Term(\\\\SHRINE\\SHRINE\\Demographics\\Age\\0-9 years old\\)",
         "queryName": "0-9 years old@19:46:03",
         "deleted": false,
         "changeDate": 1490571964673,
         "userName": "ij22",
         "networkId": 1813286953364395500,
         "queryXml": "<runQuery><projectId>SHRINE</projectId><waitTimeMs>180000</waitTimeMs><authenticationInfo><domain>i2b2demo</domain><username>ij22</username><credential isToken=\"true\">SessionKey:Gv6xaK4AQNjQipmypc7p</credential></authenticationInfo><queryId>1813286953364395437</queryId><topicId>2</topicId><topicName>26th march 2017</topicName><outputTypes><resultType><id>4</id><name>PATIENT_COUNT_XML</name><isBreakdown>false</isBreakdown><description>Number of patients</description><displayType>CATNUM</displayType></resultType></outputTypes><queryDefinition><name>0-9 years old@19:46:03</name><expr><term>\\\\SHRINE\\SHRINE\\Demographics\\Age\\0-9 years old\\</term></expr></queryDefinition></runQuery>",
         "dateCreated": 1490571964672,
         "userDomain": "i2b2demo"
       }
     }
   ],
   "flags": {}
 }
\ No newline at end of file
diff --git a/shrine-webclient/src/main/js/server/pm-mock.js b/shrine-webclient/src/main/js/server/pm-mock.js
index 0d3c4884b..c2ee6160e 100644
--- a/shrine-webclient/src/main/js/server/pm-mock.js
+++ b/shrine-webclient/src/main/js/server/pm-mock.js
@@ -1,93 +1,98 @@
 
 /*
 This is a first stab at a i2b2 pm-mock 
   @todo:  refactor/cleanup this module.
 */
 var express = require('express');
 var cors = require('cors');
 var bodyParser = require('body-parser');
 require('body-parser-xml')(bodyParser);
 var app = express();
 var bodyParser = require('body-parser');
 var port = process.env.PORT || 6443;
 var router = express.Router();
 var fs = require('fs');
 var isAuthorized = false;
 
 
 function start(dir) {
   app.use(bodyParser.urlencoded({ extended: true }));
   app.use(bodyParser.json());
   app.use(bodyParser.xml({
     limit: '1GB',   // Reject payload bigger than 1 MB 
     xmlParseOptions: {
       normalize: true,     // Trim whitespace inside text nodes 
       normalizeTags: true, // Transform tags to lowercase 
       explicitArray: false // Only put nodes in array if >1 
     }
   }));
 
   app.use(cors());
   app.use('/', router);
   app.listen(port);
   console.log('I2B2SERVER Mock Server started on port: ' + port);
 
   // -- routes --//
 
   router.post('/shrine-proxy/request', function (req, res) {
     var requestType = parseRequest(req);
     var fileName = getFilename(requestType);
     var xml = fs.readFileSync('./' + dir+ '/i2b2-xml/' + fileName);
     res.header('Content-Type', 'text/xml').send(xml);
   });
 
   router.get('/shrine-metadata/data', function(req, res) {
     res.json('steward@steward.com');
   });
 
   router.get('/shrine-metadata/qep/queryResults', (req, res) => {
-    const result = require('./data/curl-async-queries');
+    //todo: cleanup.
+    const service = require('./data/async-queries');
+    const url = require('url');
+    const query = url.parse(req.url, true).query;
+    console.log(query);
+    const result = service.getQueryResults(query.skip, query.limit);
     res.json(result);
   })
 }
 
 /*
  Any request with an XML payload will be parsed and a JavaScript requestect produced on req.body 
  corresponding to the request payload. 
  This is messy refactor.
 */
 function parseRequest(request) {
   request = request.body;
   var requestTypes = ['i2b2:request', 'ns2:request', 'ns3:request', 'ns6:request'];
   var requestType = requestTypes.find(t => request[t] !== undefined);
   request = (request[requestType] && request[requestType].message_body) ?
     request[requestType].message_body : null;
 
   return parseBodyRequest(request);
 }
 
 function parseBodyRequest(request) {
   var bodyTypes = ['pm:get_user_configuration', 'ns4:get_categories', 'ns4:get_schemes', 'ns7:sheriff_header', 'ns4:psmheader'];
   var bodyType = bodyTypes.find(t => request[t] !== undefined);
 
   if (bodyType == 'ns4:psmheader') {
     bodyType = request['ns4:psmheader'].request_type;
   }
 
   return bodyType;
 }
 
 function getFilename(value) {
   let fileMap = {
     'pm:get_user_configuration': 'getUserAuth.xml',
     'ns4:get_categories': 'GetCategories.xml',
     'ns4:get_schemes': 'GetSchemes.xml',
     'ns7:sheriff_header': 'getUserAuth.xml',
     'CRC_QRY_getResultType': 'getQRY_getResultType.xml',
     'CRC_QRY_getQueryMasterList_fromUserId': 'getQueryMasterList_fromUserId.xml'
   };
 
   return fileMap[value];
 }
 
 module.exports = {start: start};
\ No newline at end of file
diff --git a/tools/adapter-queries-to-qep/pom.xml b/tools/adapter-queries-to-qep/pom.xml
index c12898756..30a9c5ea4 100644
--- a/tools/adapter-queries-to-qep/pom.xml
+++ b/tools/adapter-queries-to-qep/pom.xml
@@ -1,61 +1,60 @@
 <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>
     <name>SHRINE Copy Adapter Queries to QEP</name>
     <artifactId>adapter-queries-to-qep</artifactId>
     <packaging>jar</packaging>
 
     <parent>
         <groupId>net.shrine</groupId>
         <artifactId>shrine-tools</artifactId>
  
-        <version>1.23.4.1-SNAPSHOT</version>
- 
-         
  
+        <version>1.23.4.1-SNAPSHOT</version>
+
     </parent>
 
     <dependencies>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-data-commons</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>com.typesafe</groupId>
             <artifactId>config</artifactId>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-adapter-service</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-qep</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-log4j12</artifactId>
             <version>${slf4j-version}</version>
             <scope>runtime</scope>
         </dependency>
     </dependencies>
     <build>
         <sourceDirectory>src/main/scala</sourceDirectory>
         <testSourceDirectory>src/test/scala</testSourceDirectory>
         <plugins>
             <plugin>
                 <groupId>net.alchim31.maven</groupId>
                 <artifactId>scala-maven-plugin</artifactId>
             </plugin>
             <plugin>
                 <artifactId>maven-assembly-plugin</artifactId>
                 <configuration>
                     <finalName>adapter-queries-to-qep-${project.version}</finalName>
                     <appendAssemblyId>false</appendAssemblyId>
                 </configuration>
             </plugin>
         </plugins>
     </build>
 </project>
diff --git a/tools/batch-querier/pom.xml b/tools/batch-querier/pom.xml
index d29fd7a3d..911bdaf17 100644
--- a/tools/batch-querier/pom.xml
+++ b/tools/batch-querier/pom.xml
@@ -1,90 +1,89 @@
 <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>
     <name>SHRINE Query Automation Utility</name>
     <artifactId>shrine-batch-querier-utility</artifactId>
     <packaging>jar</packaging>
 
     <parent>
         <groupId>net.shrine</groupId>
         <artifactId>shrine-tools</artifactId>
  
-        <version>1.23.4.1-SNAPSHOT</version>
  
-         
+        <version>1.23.4.1-SNAPSHOT</version>
  
     </parent>
 
     <dependencies>
     	<dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-crypto</artifactId>
             <version>${project.version}</version>
         </dependency>
     
     	<dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-client</artifactId>
             <version>${project.version}</version>
         </dependency>
         
     	<dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-utility-commons</artifactId>
             <version>${project.version}</version>
         </dependency>
         
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-utility-commons</artifactId>
             <version>${project.version}</version>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
         
         <dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-test-commons</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
     
         <!--  For command-line argument parsing -->
         <dependency>
             <groupId>org.rogach</groupId>
             <artifactId>scallop_${scala-major-version}</artifactId>
             <version>${scallop-version}</version>
         </dependency>
     
         <!-- For writing CSV data -->
         <dependency>
             <groupId>net.sf.opencsv</groupId>
             <artifactId>opencsv</artifactId>
         </dependency>
 
         <!-- For config file loading -->
         <dependency>
             <groupId>com.typesafe</groupId>
             <artifactId>config</artifactId>
         </dependency>
 
     </dependencies>
 
     <build>
         <sourceDirectory>src/main/scala</sourceDirectory>
         <testSourceDirectory>src/test/scala</testSourceDirectory>
         <plugins>
             <plugin>
                 <groupId>net.alchim31.maven</groupId>
                 <artifactId>scala-maven-plugin</artifactId>
             </plugin>
             <plugin>
                 <artifactId>maven-assembly-plugin</artifactId>
                 <configuration>
                     <finalName>shrine-batch-querier-${project.version}</finalName>
                     <appendAssemblyId>false</appendAssemblyId>
                 </configuration>
             </plugin>
         </plugins>
     </build>
 </project>
diff --git a/tools/many-qep-queries/pom.xml b/tools/many-qep-queries/pom.xml
index 57d071be8..cde5fbf85 100644
--- a/tools/many-qep-queries/pom.xml
+++ b/tools/many-qep-queries/pom.xml
@@ -1,52 +1,54 @@
 <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>
     <name>SHRINE Create Many Queries in the QEP database</name>
     <artifactId>many-qep-queries</artifactId>
     <packaging>jar</packaging>
 
     <parent>
         <groupId>net.shrine</groupId>
         <artifactId>shrine-tools</artifactId>
+ 
         <version>1.23.4.1-SNAPSHOT</version>
+ 
     </parent>
 
     <dependencies>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-data-commons</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>com.typesafe</groupId>
             <artifactId>config</artifactId>
         </dependency>
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-qep</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-log4j12</artifactId>
             <version>${slf4j-version}</version>
             <scope>runtime</scope>
         </dependency>
     </dependencies>
     <build>
         <sourceDirectory>src/main/scala</sourceDirectory>
         <testSourceDirectory>src/test/scala</testSourceDirectory>
         <plugins>
             <plugin>
                 <groupId>net.alchim31.maven</groupId>
                 <artifactId>scala-maven-plugin</artifactId>
             </plugin>
             <plugin>
                 <artifactId>maven-assembly-plugin</artifactId>
                 <configuration>
                     <finalName>many-qep-queries-${project.version}</finalName>
                     <appendAssemblyId>false</appendAssemblyId>
                 </configuration>
             </plugin>
         </plugins>
     </build>
 </project>
diff --git a/tools/mapping-automation/pom.xml b/tools/mapping-automation/pom.xml
index 582bfbd71..62016eafc 100644
--- a/tools/mapping-automation/pom.xml
+++ b/tools/mapping-automation/pom.xml
@@ -1,89 +1,93 @@
 <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>
 	<name>SHRINE Term Mapping Automation Utilities</name>
 	<artifactId>shrine-mapping-automation</artifactId>
 	<packaging>jar</packaging>
 
 	<parent>
 		<groupId>net.shrine</groupId>
 		<artifactId>shrine-tools</artifactId>
  
+ 
 		<version>1.23.4.1-SNAPSHOT</version>
  
 		 
  
+ 
+		 
+ 
 	</parent>
 
 	<dependencies>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-test-commons</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-config</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-ont-support</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-utility-commons</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-utility-commons</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 
 		<!-- For command-line argument parsing -->
 		<dependency>
 			<groupId>org.rogach</groupId>
 			<artifactId>scallop_${scala-major-version}</artifactId>
 			<version>${scallop-version}</version>
 		</dependency>
 
 		<!-- For writing CSV data -->
 		<dependency>
 			<groupId>net.sf.opencsv</groupId>
 			<artifactId>opencsv</artifactId>
 		</dependency>
 
 		<!-- For config file loading -->
 		<dependency>
 			<groupId>com.typesafe</groupId>
 			<artifactId>config</artifactId>
 		</dependency>
 	</dependencies>
 
 	<build>
 		<sourceDirectory>src/main/scala</sourceDirectory>
 		<testSourceDirectory>src/test/scala</testSourceDirectory>
 		<plugins>
 			<plugin>
 				<groupId>net.alchim31.maven</groupId>
 				<artifactId>scala-maven-plugin</artifactId>
 			</plugin>
 			<plugin>
                 <artifactId>maven-assembly-plugin</artifactId>
                 <configuration>
                     <finalName>shrine-mapping-tools-${project.version}</finalName>
                     <appendAssemblyId>false</appendAssemblyId>
                 </configuration>
             </plugin>
 		</plugins>
 	</build>
 </project>
diff --git a/tools/monitor/pom.xml b/tools/monitor/pom.xml
index 9121d5a1f..5ff3ae749 100644
--- a/tools/monitor/pom.xml
+++ b/tools/monitor/pom.xml
@@ -1,94 +1,90 @@
 <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>
     <name>SHRINE Monitor Utilities</name>
     <artifactId>shrine-monitor-utilities</artifactId>
     <packaging>jar</packaging>
 
     <parent>
         <groupId>net.shrine</groupId>
         <artifactId>shrine-tools</artifactId>
- 
         <version>1.23.4.1-SNAPSHOT</version>
- 
-         
- 
     </parent>
 
     <dependencies>
 
         <dependency>
             <groupId>ant</groupId>
             <artifactId>ant-javamail</artifactId>
             <version>1.6.5</version>
         </dependency>
 
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-broadcaster-aggregator</artifactId>
             <version>${project.version}</version>
         </dependency>
         
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-config</artifactId>
             <version>${project.version}</version>
         </dependency>
 
         <dependency>
             <groupId>org.codehaus.groovy.modules.http-builder</groupId>
             <artifactId>http-builder</artifactId>
             <version>0.5.1</version>
             <exclusions>
                 <exclusion>
                     <groupId>org.codehaus.groovy</groupId>
                     <artifactId>groovy</artifactId>
                 </exclusion>
             </exclusions>
         </dependency>
 
         <dependency>
             <groupId>org.codehaus.gmaven.runtime</groupId>
             <artifactId>gmaven-runtime-1.7</artifactId>
             <version>1.3</version>
         </dependency>
 
         <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
         </dependency>
 
         <dependency>
             <groupId>com.h2database</groupId>
             <artifactId>h2</artifactId>
             <scope>test</scope>
         </dependency>
 
         <dependency>
             <groupId>net.sf.opencsv</groupId>
             <artifactId>opencsv</artifactId>
         </dependency>
 
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-email</artifactId>
             <version>1.2</version>
         </dependency>
 
     </dependencies>
 
     <build>
         <plugins>
             <plugin>
                 <groupId>org.codehaus.gmaven</groupId>
                 <artifactId>gmaven-plugin</artifactId>
             </plugin>
             <plugin>
                 <artifactId>maven-assembly-plugin</artifactId>
                 <configuration>
                     <finalName>shrine-monitor-${project.version}.zip</finalName>
                     <appendAssemblyId>false</appendAssemblyId>
                 </configuration>
             </plugin>
         </plugins>
     </build>
 </project>
diff --git a/tools/pom.xml b/tools/pom.xml
index 0238fbed0..b1ef71293 100644
--- a/tools/pom.xml
+++ b/tools/pom.xml
@@ -1,85 +1,83 @@
 <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>
     <name>SHRINE Tools</name>
     <artifactId>shrine-tools</artifactId>
     <packaging>pom</packaging>
 
     <parent>
         <groupId>net.shrine</groupId>
         <artifactId>shrine-base</artifactId>
  
         <version>1.23.4.1-SNAPSHOT</version>
  
-         
- 
     </parent>
 
     <properties>
         <gmaven-plugin-version>1.5</gmaven-plugin-version>
         <assembly-plugin-version>2.4</assembly-plugin-version>
     </properties>
 
     <modules>
         <module>monitor</module>
         <module>utility-commons</module>
         <module>scanner</module>
         <module>batch-querier</module>
         <module>adapter-queries-to-qep</module>
         <module>many-qep-queries</module>
 	<module>mapping-automation</module>
     </modules>
 
     <dependencies>
 
         <dependency>
             <groupId>net.shrine</groupId>
             <artifactId>shrine-protocol</artifactId>
             <version>${project.version}</version>
         </dependency>
 
     </dependencies>
 
     <build>
         <pluginManagement>
             <plugins>
                 <plugin>
                     <groupId>org.codehaus.gmaven</groupId>
                     <artifactId>gmaven-plugin</artifactId>
                     <version>${gmaven-plugin-version}</version>
                     <executions>
                         <execution>
                             <goals>
                                 <goal>compile</goal>
                                 <goal>testCompile</goal>
                             </goals>
                         </execution>
                     </executions>
                     <configuration>
                         <debug>true</debug>
                         <verbose>true</verbose>
                         <stacktrace>true</stacktrace>
                     </configuration>
                 </plugin>
                 <plugin>
                     <artifactId>maven-assembly-plugin</artifactId>
                     <version>${assembly-plugin-version}</version>
                     <executions>
                         <execution>
                             <id>assembly</id>
                             <phase>package</phase>
                             <goals>
                                 <goal>single</goal>
                             </goals>
                             <configuration>
                                 <descriptors>
                                     <descriptor>src/main/assembly/assembly.xml</descriptor>
                                 </descriptors>
                             </configuration>
                         </execution>
                     </executions>
                 </plugin>
             </plugins>
         </pluginManagement>
     </build>
 </project>
 
diff --git a/tools/scanner/pom.xml b/tools/scanner/pom.xml
index 88a9ff2ce..88177cf66 100644
--- a/tools/scanner/pom.xml
+++ b/tools/scanner/pom.xml
@@ -1,107 +1,105 @@
 <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>
 	<name>SHRINE Scanner Utility</name>
 	<artifactId>shrine-scanner-utility</artifactId>
 	<packaging>jar</packaging>
 
 	<parent>
 		<groupId>net.shrine</groupId>
 		<artifactId>shrine-tools</artifactId>
  
 		<version>1.23.4.1-SNAPSHOT</version>
  
-		 
- 
 	</parent>
 
 	<dependencies>
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-test-commons</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 	
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-ont-support</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 		
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-hms-core</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 	
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-config</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-crypto</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-utility-commons</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-utility-commons</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 
 		<!-- For command-line argument parsing -->
 		<dependency>
 			<groupId>org.rogach</groupId>
 			<artifactId>scallop_${scala-major-version}</artifactId>
 			<version>${scallop-version}</version>
 		</dependency>
 
 		<!-- For writing CSV data -->
 		<dependency>
 			<groupId>net.sf.opencsv</groupId>
 			<artifactId>opencsv</artifactId>
 		</dependency>
 
 		<!-- For config file loading -->
 		<dependency>
 			<groupId>com.typesafe</groupId>
 			<artifactId>config</artifactId>
 		</dependency>
 
 		<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-broadcaster-aggregator</artifactId>
 			<version>${project.version}</version>
 		</dependency>
 	</dependencies>
 
 	<build>
 		<sourceDirectory>src/main/scala</sourceDirectory>
 		<testSourceDirectory>src/test/scala</testSourceDirectory>
 		<plugins>
 			<plugin>
 				<groupId>net.alchim31.maven</groupId>
 				<artifactId>scala-maven-plugin</artifactId>
 			</plugin>
 			<plugin>
 				<artifactId>maven-assembly-plugin</artifactId>
 				<configuration>
 					<finalName>shrine-scanner-${project.version}</finalName>
 					<appendAssemblyId>false</appendAssemblyId>
 				</configuration>
 			</plugin>
 		</plugins>
 	</build>
 </project>
diff --git a/tools/utility-commons/pom.xml b/tools/utility-commons/pom.xml
index f7d835e0f..5085a9269 100644
--- a/tools/utility-commons/pom.xml
+++ b/tools/utility-commons/pom.xml
@@ -1,68 +1,66 @@
 <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>
     <name>SHRINE Common Classes for Utilities</name>
     <artifactId>shrine-utility-commons</artifactId>
     <packaging>jar</packaging>
 
     <parent>
         <groupId>net.shrine</groupId>
         <artifactId>shrine-tools</artifactId>
  
         <version>1.23.4.1-SNAPSHOT</version>
- 
-         
- 
+
     </parent>
 
     <dependencies>
     	<dependency>
 			<groupId>net.shrine</groupId>
 			<artifactId>shrine-test-commons</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
     
         <!--  For command-line argument parsing -->
         <dependency>
             <groupId>org.rogach</groupId>
             <artifactId>scallop_${scala-major-version}</artifactId>
             <version>${scallop-version}</version>
         </dependency>
     
         <!-- For writing CSV data -->
         <dependency>
             <groupId>net.sf.opencsv</groupId>
             <artifactId>opencsv</artifactId>
         </dependency>
 
         <!-- For config file loading -->
         <dependency>
             <groupId>com.typesafe</groupId>
             <artifactId>config</artifactId>
         </dependency>
 
     </dependencies>
 
     <build>
         <sourceDirectory>src/main/scala</sourceDirectory>
         <testSourceDirectory>src/test/scala</testSourceDirectory>
         <plugins>
             <plugin>
                 <groupId>net.alchim31.maven</groupId>
                 <artifactId>scala-maven-plugin</artifactId>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-jar-plugin</artifactId>
                 <executions>
                     <execution>
                         <goals>
                             <goal>test-jar</goal>
                         </goals>
                     </execution>
                 </executions>
             </plugin>
         </plugins>
     </build>
 </project>