diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 00000000..6ff012f8
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,34 @@
+on:
+  release:
+    types: [published]
+
+name: Release
+
+jobs:
+  build:
+    name: Java SDK Release
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v2
+      - name: Set up JDK 1.8
+        uses: actions/setup-java@v1
+        with:
+          java-version: 1.8
+          server-username: MAVEN_USERNAME
+          server-password: MAVEN_PASSWORD
+          server-id: splunk-artifactory
+      - name: build
+        run: mvn package --file pom.xml -DskipTests=true
+      - name: Create GitHub Release
+        uses: softprops/action-gh-release@v1
+        with:
+#          body_path: ${{ github.workflow }}-CHANGELOG.txt
+          files: ./target/*.jar
+          draft: true
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+      - name: Deploy to Artifactory
+        run: mvn --batch-mode deploy -DskipTests=true
+        env:
+          MAVEN_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }}
+          MAVEN_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }}
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
new file mode 100644
index 00000000..14caac84
--- /dev/null
+++ b/.github/workflows/test.yml
@@ -0,0 +1,65 @@
+name: Java SDK Test
+
+on:
+  [push, pull_request]
+
+jobs:
+  test:
+    strategy:
+      fail-fast: false
+      matrix:
+        os:
+          - ubuntu-latest
+        java-version:
+          - 1.8
+        splunk-version:
+          - "8.0"
+          - "8.2.0"
+    runs-on: ${{ matrix.os }}
+
+    services:
+      splunk:
+        image: splunk/splunk:${{matrix.splunk-version}}
+        env:
+          SPLUNK_START_ARGS: --accept-license
+          SPLUNK_PASSWORD: changed!
+          TEST_TCP_PORT: 10667
+          TEST_UDP_PORT: 10668
+          SPLUNK_HOME: "/opt/splunk"
+        ports:
+          - 8000:8000
+          - 8089:8089
+          - 8088:8088
+          - 10667:10667
+          - 10668:10668/udp
+
+    steps:
+      - uses: actions/checkout@v2
+      - name: Set up JDK
+        uses: actions/setup-java@v1
+        with:
+          java-version: 1.8
+
+      - name: Cache local Maven repository
+        uses: actions/cache@v2
+        with:
+          path: ~/.m2/repository
+          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+          restore-keys: ${{ runner.os }}-maven-
+
+      - name: Create .splunkrc file
+        run: |
+          cd ~
+          echo host=localhost >> .splunkrc
+          echo port=8089 >> .splunkrc
+          echo username=admin >> .splunkrc
+          echo password=changed! >> .splunkrc
+          echo scheme=https >> .splunkrc
+          echo version=${{ matrix.splunk }} >> .splunkrc
+
+      - name: Test using maven
+        run: make test
+        env:
+          SPLUNK_HOME: "/opt/splunk"
+          TEST_TCP_PORT: 10667
+          TEST_UDP_PORT: 10668
diff --git a/.gitignore b/.gitignore
index 905246fe..0f808f1f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,6 +8,7 @@
 build
 dist
 out
+target/
 
 # Test & Coverage
 TEST-com.splunk.*.xml
@@ -15,6 +16,7 @@ TEST-com.splunk.*.xml
 # IntelliJ
 .idea/workspace.xml
 .idea/misc.xml
+.idea/
 
 # Unknown
 *.swp
diff --git a/.idea/ant.xml b/.idea/ant.xml
deleted file mode 100644
index 313b0c0c..00000000
--- a/.idea/ant.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="AntConfiguration">
-    <buildFile url="file://$PROJECT_DIR$/build.xml" />
-  </component>
-</project>
-
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index c819cc0d..00000000
--- a/.travis.yml
+++ /dev/null
@@ -1,48 +0,0 @@
-notifications:
-    email: false
-
-sudo: required
-
-services:
-    - docker
-
-before_install:
-    # Create .splunkrc file with default credentials
-    - echo host=localhost >> $HOME/.splunkrc
-    - echo username=admin >> $HOME/.splunkrc
-    - echo password=changeme >> $HOME/.splunkrc
-    # Set env vars for TCP/UDP tests (we've punched these through Docker)
-    - export TEST_TCP_PORT=10667
-    - export TEST_UDP_PORT=10668
-    # Set SPLUNK_HOME
-    - export SPLUNK_HOME="/opt/splunk"
-    # Pull docker image
-    - docker pull splunk/splunk-sdk-travis-ci:$SPLUNK_VERSION
-    # Add DOCKER to iptables, 1/10 times this is needed, force 0 exit status
-    - sudo iptables -N DOCKER || true
-    # Start Docker container
-    - docker run -p 127.0.0.1:8089:8089 -p 127.0.0.1:$TEST_TCP_PORT:$TEST_TCP_PORT -p 127.0.0.1:$TEST_UDP_PORT:$TEST_UDP_PORT/udp -d splunk/splunk-sdk-travis-ci:$SPLUNK_VERSION
-    # curl Splunk until it returns valid data indicating it has been setup, try 20 times maximum
-    - for i in `seq 0 20`; do if curl --fail -k https://localhost:8089/services/server/info &> /dev/null; then break; fi; echo $i; sleep 1; done
-    # Additional sleep to make sure splunkd is
-    - sleep 30
-
-env:
-    - SPLUNK_VERSION=6.6-sdk
-    - SPLUNK_VERSION=7.0-sdk
-
-language: java
-
-addons:
-  apt:
-    packages:
-      - ant-optional
-
-jdk:
-  - oraclejdk8
-  - openjdk7
-
-before_script:
-    - ant
-
-script: ant travis
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 93816143..155b64e6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,20 @@
 # Splunk Enterprise SDK for Java Changelog
 
+## Version 1.7.0
+
+### New Features and APIs
+* Added Credits.md file along with licences. (Github PR [#162](https://github.com/splunk/splunk-sdk-java/pull/162)).
+* Improved TLS implementation as default behavior and turned on hostname verification for all hosts. (Github PR [#158](https://github.com/splunk/splunk-sdk-java/pull/158)).
+
+### Minor changes
+* Replaced Travis CI with Github actions (Github PR [#161](https://github.com/splunk/splunk-sdk-java/pull/161)).
+* Fixed Javadoc generation while project packaging. (Github PR [#159](https://github.com/splunk/splunk-sdk-java/pull/159)).
+* Fixed breaking change of **Index.getMaxHotBuckets()** method behavior to return as String instead of int.
+* SDK build is migrated from ant build tool to maven build tool (Github PR [#157](https://github.com/splunk/splunk-sdk-java/pull/157)).
+  * Dependencies directory for ant build is removed and maven dependencies are added using pom.xml.
+  * Dependencies are upgraded to its LTS version.
+  * Project structure is re-organized with respect to Maven.
+
 ## Version 1.6.5
 
 ### Bug Fixes
diff --git a/CREDITS.md b/CREDITS.md
new file mode 100644
index 00000000..9afabf92
--- /dev/null
+++ b/CREDITS.md
@@ -0,0 +1,12 @@
+# Third-party software credits
+
+Some of the components included in the Splunk Enterprise SDK for Java are licensed under free or open source licenses. We wish to thank the contributors to those projects.
+
+| Contributor | Description | License |
+|:----------- |:----------- |:------- |
+| [opencsv](https://sourceforge.net/p/opencsv/source/ci/master/tree/) | For reading and writing CSV in Java | [Apache](https://github.com/splunk/splunk-sdk-java/blob/master/licenses/LICENSE-OPENCSV) |
+| [commons-cli](https://github.com/apache/commons-cli) | A package of Java utility classes for the classes that are in java.lang's hierarchy | [Apache](https://github.com/splunk/splunk-sdk-java/blob/master/licenses/LICENSE-COMMONS) |
+| [gson](https://github.com/google/gson) | Convert Java Objects into their JSON representation | [Apache](https://github.com/splunk/splunk-sdk-java/blob/master/licenses/LICENSE-GSON) |
+| [junit](https://github.com/junit-team/junit4) | Unit testing framework for Java | [Eclipse](https://github.com/splunk/splunk-sdk-java/blob/master/licenses/LICENSE-JUNIT) |
+| [jacoco](https://github.com/jacoco/jacoco) | JaCoCo runtime agent to your tests and allows basic report creation. | [Eclipse](https://github.com/splunk/splunk-sdk-java/blob/master/licenses/LICENSE-JACOCO) |
+| [netbeans-api](https://github.com/apache/netbeans) | OpenIDE Utilities | [Apache](https://github.com/splunk/splunk-sdk-java/blob/master/licenses/LICENSE-NETBEANS) |
\ No newline at end of file
diff --git a/Makefile b/Makefile
new file mode 100644
index 00000000..123c4cb1
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,48 @@
+# text reset
+NO_COLOR=\033[0m
+# green
+OK_COLOR=\033[32;01m
+# red
+ERROR_COLOR=\033[31;01m
+# cyan
+WARN_COLOR=\033[36;01m
+# yellow
+ATTN_COLOR=\033[33;01m
+
+ROOT_DIR := $(shell git rev-parse --show-toplevel)
+
+VERSION := `git describe --tags --dirty 2>/dev/null`
+COMMITHASH := `git rev-parse --short HEAD 2>/dev/null`
+DATE := `date "+%FT%T%z"`
+
+.PHONY: all
+all: init test
+
+init:
+	@echo "$(ATTN_COLOR)==> init $(NO_COLOR)"
+
+.PHONY: test
+test:
+	@echo "$(ATTN_COLOR)==> test $(NO_COLOR)"
+#	@ant test
+	@mvn test
+
+.PHONY: test_specific
+test_specific:
+	@echo "$(ATTN_COLOR)==> test_specific $(NO_COLOR)"
+	@sh ./scripts/test_specific.sh
+
+.PHONY: up
+up:
+	@echo "$(ATTN_COLOR)==> up $(NO_COLOR)"
+	@docker-compose up -d
+
+.PHONY: wait_up
+wait_up:
+	@echo "$(ATTN_COLOR)==> wait_up $(NO_COLOR)"
+	@for i in `seq 0 180`; do if docker exec -it splunk /sbin/checkstate.sh &> /dev/null; then break; fi; printf "\rWaiting for Splunk for %s seconds..." $$i; sleep 1; done
+
+.PHONY: down
+down:
+	@echo "$(ATTN_COLOR)==> down $(NO_COLOR)"
+	@docker-compose stop
diff --git a/README.md b/README.md
index 3d0fc8d2..cac765a6 100644
--- a/README.md
+++ b/README.md
@@ -1,137 +1,146 @@
-[![Build Status](https://travis-ci.org/splunk/splunk-sdk-java.svg?branch=master)](https://travis-ci.org/splunk/splunk-sdk-java)
-# The Splunk Enterprise Software Development Kit for Java
+![Build Status](https://github.com/splunk/splunk-sdk-java/actions/workflows/release.yml/badge.svg?branch=master)
+# The Splunk Software Development Kit for Java
 
-#### Version 1.6.5
+#### Version 1.7.0
 
-The Splunk Enterprise Software Development Kit (SDK) for Java contains library code and examples designed to enable developers to build applications using the Splunk platform.
+The Splunk Software Development Kit (SDK) for Java contains library code and
+examples designed to enable developers to build applications using Splunk.
 
-The Splunk platform is a search engine and analytic environment that uses a distributed map-reduce architecture to efficiently index, search, and process large time-varying data sets.
+Splunk is a search engine and analytic environment that uses a distributed
+map-reduce architecture to efficiently index, search and process large
+time-varying data sets.
 
-The Splunk platform is popular with system administrators for aggregation and monitoring of IT machine data, security, compliance, and a wide variety of other scenarios that share a requirement to efficiently index, search, analyze, and generate real-time notifications from large volumes of time-series data.
+The Splunk product is popular with system administrators for aggregation and
+monitoring of IT machine data, security, compliance and a wide variety of
+other scenarios that share a requirement to efficiently index, search, analyze
+and generate real-time notifications from large volumes of time series data.
 
-The Splunk developer platform enables developers to take advantage of the same technology used by the Splunk platform to build exciting new applications.
+The Splunk developer platform enables developers to take advantage of the
+same technology used by the Splunk product to build exciting new applications
+that are enabled by Splunk's unique capabilities.
 
-For more information, see [Splunk Enterprise SDK for Java](https://dev.splunk.com/enterprise/docs/devtools/java/sdk-java/) on the Splunk Developer Portal.
 
-## Getting started with the Splunk Enterprise SDK for Java
+## Getting started with the Splunk SDK for Java
 
-The Splunk Enterprise SDK for Java contains library code and examples that show how to programmatically interact with the Splunk platform for a variety of scenarios including searching, saved searches, data inputs, and many more, along with building complete applications.
+The Splunk SDK for Java contains library code and examples that show how to
+programmatically interact with Splunk for a variety of scenarios including
+searching, saved searches, data inputs, and many more, along with building
+complete applications.
+
+The information in this Readme provides steps to get going quickly, but for more
+in-depth information be sure to visit the
+[Splunk Developer Portal](http://dev.splunk.com/view/java-sdk/SP-CAAAECN).
 
 ### Requirements
 
-Here's what you need to get going with the Splunk Enterprise SDK for Java.
-
-*  Splunk Enterprise
-  
-   If you haven't already installed Splunk Enterprise, download it [here](http://www.splunk.com/download). 
-   For more information, see the Splunk Enterprise [_Installation Manual_](https://docs.splunk.com/Documentation/Splunk/latest/Installation).
-   
-   The Splunk Enterprise SDK for Java was tested with Splunk Enterprise 6.6 and 7.0.
-        
-*  Splunk Enterprise SDK for Java
-  
-   Get the JAR from the [Splunk Developer Portal](https://dev.splunk.com/enterprise/downloads/) or clone the repository from [GitHub](https://github.com/splunk/splunk-sdk-java) if you want to contribute to the SDK. To use Maven, see "Use Maven to build projects" below.
-
-   The Splunk Enterprise SDK for Java was tested with OpenJDK 7 and Oracle JDK 8.
-   
-*  Java version 6 or higher, from [OpenJDK](https://openjdk.java.net) or [Oracle](https://www.oracle.com/technetwork/java). For instructions, see [Java Platform Installation](http://www.oracle.com/technetwork/java/javase/index-137561.html) on the Oracle website.
-
-   The Splunk Enterprise SDK for Java is compatible with Java 8. Be aware that **Java 8 disables Secure Sockets Layer version 3 (SSLv3) by default**, so you will need to use Transport Layer Security (TLS) instead. To see an example of how to do this, see the [ssl_protocols](https://github.com/splunk/splunk-sdk-java/blob/master/examples/com/splunk/examples/ssl_protocols/Pro...) example. Alternatively, you can re-enable SSLv3 in Java settings, although this is not recommended.
-
-*  Ant, from the [Apache website](http://ant.apache.org/bindownload.cgi). For instructions, see [Installing Apache Ant](http://ant.apache.org/manual/install.html). 
-
-### Set system variables (Windows)
-
-If you are using Windows, make sure the following system variables are created and set:
-*   **ANT_HOME** should be set to the location where Ant is installed.
-*   **JAVA_HOME** should be set to the directory where the JDK is installed.
-*   **PATH** should include the path to the **%ANT_HOME%\bin** directory.
-
-### Use Maven to build projects
-   
-   You can use [Apache Maven](http://maven.apache.org/) to build your Splunk Enterprise SDK for Java projects with a few updates to your project's **pom.xml** file. You can retrieve all necessary dependencies and build your project.
-   
-   To add the Splunk Enterprise SDK for Java JAR file as a dependency:
-   
-   1. Add the repository to your project's **pom.xml** file:
-
-      ```
-      <repositories>
-        ...
-        <repository>
-          <id>splunk-artifactory</id>
-          <name>Splunk Releases</name>
-          <url>http://splunk.jfrog.io/splunk/ext-releases-local</url>
-        </repository>
-      </repositories>
-      ```
-
-   2. Add the dependency to the **pom.xml** file and update the version number to match the version of the Splunk Enterprise SDK for Java that you are using:
-
-      ```
-      <dependencies>
-        ...
-        <dependency>
-          <groupId>com.splunk</groupId>
-          <artifactId>splunk</artifactId>
-          <version>1.6.5.0</version>
-        </dependency>
-      </dependencies>
-      ```
-
-      >**Note**: You can make similar changes to use [Ivy](http://ant.apache.org/ivy/history/latest-milestone/tutorial/start.html) or [Gradle](http://www.gradle.org/) as well.
-
-### Use ant to build the SDK and documentation
-
-To build the SDK (all of the CLASS and JAR files), open a command prompt in the **/splunk-sdk-java** directory and enter either of these commands: 
-  
-    ant
+Here's what you need to get going with the Splunk SDK for Java.
+
+#### Splunk
+
+If you haven't already installed Splunk, download it
+[here](http://www.splunk.com/download). For more about installing and running
+Splunk and system requirements, see
+[Installing & Running Splunk](http://dev.splunk.com/view/SP-CAAADRV). The Splunk SDK for Java has been tested with Splunk Enterprise 8.0 and 8.2.0.
+
+#### Splunk SDK for Java
+
+[Get the Splunk SDK for Java](http://dev.splunk.com/view/SP-CAAAECN)&mdash;download the SDK as a ZIP, then extract the files and build the SDK. Or, download the JAR and add it to your project.
+
+If you want to contribute to the SDK, clone the repository from [GitHub](https://github.com/splunk/splunk-sdk-java).
+
+#### Java using Maven
+
+You can use [Apache Maven](http://maven.apache.org/) to build your Splunk SDK for Java projects. With a few updates to your project's `pom.xml` file, it will retrieve all necessary dependencies and seamlessly build your project.
+
+To add the Splunk SDK for Java `.JAR` file as a dependency:
+
+1. Add the repository to your project's `pom.xml` file:
+
+```xml
+<repositories>
+  ...
+  <repository>
+    <id>splunk-artifactory</id>
+    <name>Splunk Releases</name>
+    <url>http://splunk.jfrog.io/splunk/ext-releases-local</url>
+  </repository>
+</repositories>
+```
+
+2. Add the dependency to the `pom.xml` file:
+
+```xml
+<dependencies>
+  ...
+  <dependency>
+    <groupId>com.splunk</groupId>
+    <artifactId>splunk</artifactId>
+    <version>1.7.0</version>
+  </dependency>
+</dependencies>
+```
+
+Be sure to update the version number to match the version of the Splunk SDK for Java that you are using.
+
+> Note: You can make similar changes to use [Gradle](http://www.gradle.org/) as well.
+
+### Building the SDK and documentation
+
+To build the SDK, open a command prompt in the **/splunk-sdk-java**
+directory and enter:
+
+    mvn
 
 or
-    
-    ant dist
 
-If you want to build only the CLASS files, enter:
-  
-    ant build
+    mvn package
+
+This command builds all of the .class and .jar files. If you just want to build
+the .class files, enter:
+
+    mvn compile
 
 To remove all build artifacts from the repository, enter:
-  
-    ant clean
 
-To build the documentation for the SDK, enter:
-    
-    ant javadoc
+    mvn clean
 
+To build the documentation for the SDK, it is being automatically generated with <b>mvn package</b>, otherwise enter:
 
-### Examples and unit tests
+    cd splunk
+    mvn javadoc:javadoc
 
-The Splunk Enterprise SDK for Java includes several examples and unit tests to run at the command line.
+### Unit tests
 
-#### Create a .splunkrc convenience file
+The Splunk SDK for Java includes several unit tests that are run at
+the command line.
 
-To connect to Splunk Enterprise, many of the SDK examples and unit tests take command-line arguments that specify values for the host, port, and login credentials for Splunk Enterprise. For convenience during development, you can store these arguments as key-value pairs in a text file named **.splunkrc**. Then, the SDK examples and unit tests use the values from the **.splunkrc** file when you don't specify them.
+#### Set up the .splunkrc file
 
->**Note**: Storing login credentials in the **.splunkrc** file is only for convenience during development. This file isn't part of the Splunk platform and shouldn't be used for storing user credentials for production. And, if you're at all concerned about the security of your credentials, enter them at the command line rather than saving them in this file.
+To connect to Splunk, many of the SDK examples and unit tests take command-line
+arguments that specify values for the host, port, and login credentials for
+Splunk. For convenience during development, you can store these arguments as
+key-value pairs in a text file named **.splunkrc**. Then, the SDK examples and
+unit tests use the values from the **.splunkrc** file when you don't specify
+them.
 
 To use this convenience file, create a text file with the following format:
 
-    # Splunk Enterprise host (default: localhost)
+    # Splunk host (default: localhost)
     host=localhost
-    # Splunk Enterprise admin port (default: 8089)
+    # Splunk admin port (default: 8089)
     port=8089
-    # Splunk Enterprise username
+    # Splunk username
     username=admin
-    # Splunk Enterprise password
+    # Splunk password
     password=changeme
     # Access scheme (default: https)
     scheme=https
-    # Your version of Splunk Enterprise
-    version=7.0
+    # Your version of Splunk (default: 5.0)
+    version=5.0
 
 Save the file as **.splunkrc** in the current user's home directory.
 
-*   For example on OS X, save the file as:
+*   For example, on Mac OS X, save the file as:
 
         ~/.splunkrc
 
@@ -139,136 +148,186 @@ Save the file as **.splunkrc** in the current user's home directory.
 
         C:\Users\currentusername\.splunkrc
 
-    You might get errors in Windows when you try to name the file because ".splunkrc" appears to be a nameless file with an extension. You can use the command line to create this file by going to the **C:\Users\\&lt;currentusername&gt;** directory and entering the following command:
+    You might get errors in Windows when you try to name the file because
+    ".splunkrc" looks like a nameless file with an extension. You can use
+    the command line to create this file&mdash;go to the
+    **C:\Users\currentusername** directory and enter the following command:
 
         Notepad.exe .splunkrc
 
     Click **Yes**, then continue creating the file.
 
+**Note**: Storing login credentials in the **.splunkrc** file is only for
+convenience during development. This file isn't part of the Splunk platform and
+shouldn't be used for storing user credentials for production. And, if you're
+at all concerned about the security of your credentials, just enter them at
+the command line rather than saving them in this file.
 
-#### Run examples
+#### Run unit tests
 
-After you build the SDK, examples are put in the **/splunk-sdk-java/dist/examples** directory. To run the examples, run the Java interpreter at the command line using the `-jar` flag to specify the target example JAR file, and include any arguments that are required by the example. To get help for an example, use the `--help` argument with an example.
+To run the SDK unit tests, open a command prompt in the **/splunk-sdk-java**
+directory and enter:
 
-To see the command-line arguments for the Search example, open a command prompt in the **/splunk-sdk-java** directory and enter:
+    mvn test
 
-    java -jar dist/examples/search.jar --help
+You can also run specific test classes by passing the class to the -Dtest=
+option, e.g.,
 
-To run the Search example, open a command prompt in the **/splunk-sdk-java** directory and enter:
+    mvn test -Dtest=AtomFeedTest
 
-    java -jar dist/examples/search.jar "search * | head 10" --output_mode=csv
+The maven configuration can also produce an HTML report of all the tests automatically when **mvn package / mvn test** are executed.
+Alternate way to generate report is using below command under splunk directory:
 
-A `run` helper script in the root of the repository simplifies running the SDK examples. For example on Mac OS X, enter:
+    mvn jacoco:report
 
-    ./run search "search * | head 10" --output_mode=csv
+The report will be written in **/splunk-sdk-java/splunk/target/site/surefire-report.html**.
 
-All the the example JARs are completely self-contained and you can use them independently of the SDK's repository.
+It's also possible to run the units within Java IDEs such as IntelliJ and
+Eclipse. For example, to open the Splunk SDK for Java project in Eclipse:
 
-#### Run unit tests
+1. Click **File**, **Import**.
+2. Click **General**, **Existing Projects into Workspace**, then click
+   **Next**.
+3. In **Select root directory**, type the path to the Splunk SDK for Java root
+   directory (or click **Browse** to locate it), then click **Finish**.
 
-To run the SDK unit tests, open a command prompt in the **/splunk-sdk-java** directory and enter:
+#### Measure code coverage
 
-    ant test
+Measurement of code coverage is generated along with <b>mvn package / mvn test</b>:
 
-To run the units from anywhere in the repository, enter:
+    mvn jacoco:report
 
-    ant test -find
+To view the coverage report, open
+**/splunk-sdk-java/splunk/target/test-report/index.html** in your web browser.
 
-You can run specific test classes by passing the class to the `-Dtestcase=` option: 
+## Repository
 
-    ant test -Dtestcase=AtomFeedTest
+<table>
+<tr>
+<td><b>/argsGenerator</b></td>
+<td>This directory is created by the build and contains intermediate build
+ouputs</td>
+</tr>
 
-The ant configuration can produce a single HTML report of all the tests run using the target testreport (which also takes the `-Dtestcase=` option): 
+<tr>
+<td><b>/splunk/target</b></td>
+<td>This directory is created by the build and contains intermediate build
+ouputs</td>
+</tr>
 
-    ant testreport
+<tr>
+<td><b>/splunk/src/main</b></td>
+<td>Source for <code>com.splunk</code></td>
+</tr>
 
-The report is written in **build/reports/tests/index.html**.
+<tr>
+<td><b>/splunk/src/test</b></td>
+<td>Source for unit tests</td>
+</tr>
 
-You can also run the units within Java IDEs such as IntelliJ and Eclipse. For example, to open the Splunk Enterprise SDK for Java project in Eclipse:
+</table>
 
-  1. Click **File**, then click **Import**.
-  2. Click **General**, click **Existing Projects into Workspace**, then click **Next**.
-  3. In **Select root directory**, type the path to the Splunk Enterprise SDK for Java root directory (or click **Browse** to locate it), then click **Finish**.
+### Changelog
 
-#### Measure code coverage
+The **CHANGELOG.md** file in the root of the repository contains a description
+of changes for each version of the SDK. You can also find it online at
+[https://github.com/splunk/splunk-sdk-java/blob/master/CHANGELOG.md](https://github.com/splunk/splunk-sdk-java/blob/master/CHANGELOG.md).
 
-To measure the code coverage of the test suite, open a
-command prompt in the **/splunk-sdk-java** directory and enter:
+### Branches
 
-    ant coverage
+The **master** branch always represents a stable and released version of the SDK.
+You can read more about our branching model on our Wiki at
+[https://github.com/splunk/splunk-sdk-java/wiki/Branching-Model](https://github.com/splunk/splunk-sdk-java/wiki/Branching-Model).
 
-To run code coverage from anywhere in the repository, enter:
+## Documentation and resources
 
-    ant coverage -find
+If you need to know more:
 
-To view the coverage report, open
-**/splunk-sdk-java/build/reports/coverage/index.html** in your web browser.
+* For all things developer with Splunk, your main resource is the [Splunk Developer Portal](http://dev.splunk.com).
 
-## Repository
+* For conceptual and how-to documentation, see the [Overview of the Splunk SDK for Java](http://dev.splunk.com/view/SP-CAAAECN).
 
-| Directory      | Description                                               |
-|:-------------- |:----------------------------------------------------------|
-| /argsGenerator | Created by the build. Contains intermediate build ouputs. |
-|/build          | Created by the build. Contains intermediate build ouputs. |
-|/dist           | Created by the build. Contains final build outputs.       |
-|/examples       | Examples demonstrating various SDK features.              |
-|/lib            | Third-party libraries used by examples and unit tests .   |
-|/splunk         | Source for `com.splunk`.                                  |
-|/tests          | Source for unit tests.                                    |
-|/util           | Utilities shared by examples and units.                   |
+* For API reference documentation, see the [Splunk SDK for Java Reference](http://docs.splunk.com/Documentation/JavaSDK).
 
-### Changelog
+* For more about the Splunk REST API, see the [REST API Reference](http://docs.splunk.com/Documentation/Splunk/latest/RESTAPI).
 
-The [CHANGELOG](CHANGELOG.md) contains a description of changes for each version of the SDK. For the latest version, see the [CHANGELOG.md](https://github.com/splunk/splunk-sdk-java/blob/master/CHANGELOG.md) on GitHub.
+* For more about about Splunk in general, see [Splunk>Docs](http://docs.splunk.com/Documentation/Splunk).
 
-### Branches
+* For more about this SDK's repository, see our [GitHub Wiki](https://github.com/splunk/splunk-sdk-java/wiki/).
 
-The **master** branch represents a stable and released version of the SDK.
-To learn about our branching model, see [Branching Model](https://github.com/splunk/splunk-sdk-java/wiki/Branching-Model) on GitHub.
+## Community
 
-## Documentation and resources
+Stay connected with other developers building on Splunk.
 
-| Resource                | Description |
-|:----------------------- |:----------- |
-| [Splunk Developer Portal](http://dev.splunk.com) | General developer documentation, tools, and examples |
-| [Integrate the Splunk platform using development tools for Java](https://dev.splunk.com/enterprise/docs/devtools/java)| Documentation for Java development |
-| [Splunk Enterprise SDK for Java Reference](http://docs.splunk.com/Documentation/JavaSDK) | SDK API reference documentation |
-| [REST API Reference Manual](https://docs.splunk.com/Documentation/Splunk/latest/RESTREF/RESTprolog) | Splunk REST API reference documentation |
-| [Splunk>Docs](https://docs.splunk.com/Documentation) | General documentation for the Splunk platform |
-| [GitHub Wiki](https://github.com/splunk/splunk-sdk-java/wiki/) | Documentation for this SDK's repository on GitHub |
+<table>
 
-## Community
+<tr>
+<td><b>Email</b></td>
+<td>devinfo@splunk.com</td>
+</tr>
+
+<tr>
+<td><b>Issues</b>
+<td><span>https://github.com/splunk/splunk-sdk-java/issues/</span></td>
+</tr>
+
+<tr>
+<td><b>Answers</b>
+<td><span>http://splunk-base.splunk.com/tags/java/</span></td>
+</tr>
+
+<tr>
+<td><b>Blog</b>
+<td><span>http://blogs.splunk.com/dev/</span></td>
+</tr>
 
-Stay connected with other developers building on the Splunk platform.
+<tr>
+<td><b>Twitter</b>
+<td>@splunkdev</td>
+</tr>
 
-* [Email](mailto:devinfo@splunk.com)
-* [Issues and pull requests](https://github.com/splunk/splunk-sdk-java/issues/)
-* [Community Slack](https://splunk-usergroups.slack.com/app_redirect?channel=appdev)
-* [Splunk Answers](https://community.splunk.com/t5/Splunk-Development/ct-p/developer-tools)
-* [Splunk Blogs](https://www.splunk.com/blog)
-* [Twitter](https://twitter.com/splunkdev)
+</table>
 
 
-### Contributions
+### How to contribute
 
-If you would like to contribute to the SDK, see [Contributing to Splunk](https://www.splunk.com/en_us/form/contributions.html). For additional guidelines, see [CONTRIBUTING](CONTRIBUTING.md). 
+If you would like to contribute to the SDK, go here for more information:
+
+* [Splunk and open source](http://dev.splunk.com/view/opensource/SP-CAAAEDM)
+
+* [Individual contributions](http://dev.splunk.com/goto/individualcontributions)
+
+* [Company contributions](http://dev.splunk.com/view/companycontributions/SP-CAAAEDR)
 
 ### Support
 
-*  You will be granted support if you or your company are already covered under an existing maintenance/support agreement. Submit a new case in the [Support Portal](https://www.splunk.com/en_us/support-and-services.html) and include "Splunk Enterprise SDK for Java" in the subject line.
-   
-   If you are not covered under an existing maintenance/support agreement, you can find help through the broader community at [Splunk Answers](https://community.splunk.com/t5/Splunk-Development/ct-p/developer-tools).
+1. You will be granted support if you or your company are already covered
+   under an existing maintenance/support agreement. Send an email to
+   _support@splunk.com_ and include "Splunk SDK for Java" in the subject line.
+
+2. If you are not covered under an existing maintenance/support agreement, you
+   can find help through the broader community at:
+
+   <ul>
+   <li><a href='http://splunk-base.splunk.com/answers/'>Splunk Answers</a> (use
+    the <b>sdk</b>, <b>java</b>, <b>python</b>, and <b>javascript</b> tags to
+    identify your questions)</li>
+   <li><a href='http://groups.google.com/group/splunkdev'>Splunkdev Google
+    Group</a></li>
+   </ul>
+3. Splunk will NOT provide support for SDKs if the core library (the
+   code in the <b>splunk</b> directory) has been modified. If you modify an SDK
+   and want support, you can find help through the broader community and Splunk
+   answers (see above). We would also like to know why you modified the core
+   library&mdash;please send feedback to _devinfo@splunk.com_.
+4. File any issues on [GitHub](https://github.com/splunk/splunk-sdk-java/issues).
 
-*  Splunk will NOT provide support for SDKs if the core library (the code in the <b>/splunk</b> directory) has been modified. If you modify an SDK and want support, you can find help through the broader community and [Splunk Answers](https://community.splunk.com/t5/Splunk-Development/ct-p/developer-tools). 
-   
-   We would also like to know why you modified the core library, so please send feedback to _devinfo@splunk.com_.
-   
-*  File any issues on [GitHub](https://github.com/splunk/splunk-sdk-java/issues).
 
 ### Contact Us
 
-You can reach the Splunk Developer Platform team at _devinfo@splunk.com_.
+You can reach the Developer Platform team at _devinfo@splunk.com_.
 
 ## License
 
-The Splunk Enterprise Software Development Kit for Java is licensed under the Apache License 2.0. See [LICENSE](LICENSE) for details.
+The Splunk Java Software Development Kit is licensed under the Apache
+License 2.0. Details can be found in the LICENSE file.
diff --git a/build.xml b/build.xml
deleted file mode 100644
index 5a96829d..00000000
--- a/build.xml
+++ /dev/null
@@ -1,451 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-  Copyright 2011 Splunk, Inc.
-
-  Licensed under the Apache License, Version 2.0 (the "License"): you may
-  not use this file except in compliance with the License. You may obtain
-  a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-  License for the specific language governing permissions and limitations
-  under the License.
--->
-
-<project name="splunk-sdk-java" basedir="." default="dist" xmlns:jacoco="antlib:org.jacoco.ant"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="antlib:org.jacoco.ant ">
-    <property name="version.number" value="1.6.5"/>
-
-    <!-- Paths within the repository that are referenced
-         multiple times. -->
-    <property name="build.apps" location="build"/>
-    <property name="build.splunk" location="build/splunk"/>
-    <property name="build.tests" location="build/tests"/>
-    <property name="build.examples" location="build/examples"/>
-    <property name="build.util" location="build/util"/>
-    <property name="dist" location="dist"/>
-    <property name="coverage.dir" location="build/reports/coverage"/>
-    <property name="testreport.dir" location="build/reports/tests" />
-
-    <!-- Test case to run -->
-    <!-- This is separated into a property so it can be overridden by command line arguments,
-         making it easy to run specific test cases. -->
-    <property name="testcase" value="*Test" />
-
-    <!-- Short names for all the external libraries that get
-         referenced multiple times. -->
-    <property name="junit" location="lib/junit-4.11.jar"/>
-    <property name="gson" location="lib/gson-2.2.4.jar"/>
-    <property name="opencsv" location="lib/opencsv-2.3.jar"/>
-
-    <target name="clean">
-        <delete dir="build"/>
-        <delete dir="dist"/>
-        <delete dir="out" /> <!-- IntelliJ's output directory -->
-    </target>
-
-    <target name="build">
-        <!-- Compile the SDK -->
-        <mkdir dir="${build.splunk}"/>
-        <javac includeantruntime="false"
-               srcdir="splunk"
-               destdir="${build.splunk}"
-               target="1.6"
-               source="1.6"
-               debug="true"
-               debuglevel="lines,vars,source">
-            <classpath>
-                <pathelement location="${gson}"/>
-                <pathelement location="${opencsv}"/>
-            </classpath>
-
-        </javac>
-
-        <!-- Compile utils -->
-        <mkdir dir="${build.util}"/>
-        <javac includeantruntime="false"
-               target="1.6"
-               source="1.6"
-               srcdir="util"
-               destdir="${build.util}">
-            <classpath>
-                <pathelement location="${build.splunk}"/>
-                <pathelement location="lib/commons-cli-1.2.jar"/>
-                <pathelement location="${junit}"/>
-            </classpath>
-        </javac>
-
-        <!-- Compile the unit tests -->
-        <mkdir dir="${build.tests}"/>
-        <javac includeantruntime="false"
-               target="1.6"
-               source="1.6"
-               srcdir="tests"
-               destdir="${build.tests}">
-            <classpath>
-                <pathelement location="${build.splunk}"/>
-                <pathelement location="${build.util}"/>
-                <pathelement location="${junit}"/>
-                <pathelement location="${gson}"/>
-            </classpath>
-        </javac>
-        <mkdir dir="${build.tests}/test_data"/>
-        <copy todir="${build.tests}/com/splunk">
-            <fileset dir="tests/com/splunk">
-                <exclude name="**/*.java"/>
-            </fileset>
-        </copy>
-
-        <!-- Compile the examples -->
-        <mkdir dir="${build.examples}/"/>
-        <javac includeantruntime="false"
-               target="1.6"
-               source="1.6"
-               srcdir="examples"
-               destdir="${build.examples}">
-            <classpath>
-                <pathelement location="${build.splunk}"/>
-                <pathelement location="${build.util}"/>
-                <pathelement location="lib/org-openide-explorer.jar"/>
-                <pathelement location="lib/org-openide-nodes.jar"/>
-                <pathelement location="lib/org-openide-util.jar"/>
-                <pathelement location="lib/org-openide-util-lookup.jar"/>
-                <pathelement location="${gson}"/>
-                <pathelement location="${opencsv}"/>
-            </classpath>
-        </javac>
-    </target>
-
-    <!-- Macro to build standalone, executable jars for the examples. Specify the
-         example's name and any extra dependencies it requires besides the base SDK,
-         utils, and commons-cli-1.2.jar.
-
-         Example:
-
-         <standalone-example-jar name="explorer">
-             <dependencies>
-                 <fileset dir="${build.util}"
-                          includes="**/*.class" />
-                 <zipgroupfileset dir="lib" includes="gson-2.2.4.jar" />
-                 <zipgroupfileset dir="lib" includes="opencsv-2.3.jar" />
-                 <zipgroupfileset dir="lib" includes="org-openide-*.jar" />
-             </dependencies>
-         </standalone-example-jar>
-    -->
-    <macrodef name="standalone-example-jar">
-        <attribute name="name"/>
-        <element name="dependencies" optional="yes"/>
-        <sequential>
-            <mkdir dir="${dist}/examples"/>
-            <jar destfile="${dist}/examples/@{name}.jar">
-                <!-- The example's code -->
-                <fileset dir="${build.examples}"
-                         includes="com/splunk/examples/@{name}/**/*.class"/>
-
-                <!-- Dependencies shared by all examples -->
-                <fileset dir="${build.util}" includes="**/*.class"/>
-                <fileset dir="${build.splunk}" includes="**/*.class"/>
-                <zipgroupfileset dir="lib" includes="commons-cli-1.2.jar"/>
-
-                <!-- Extra dependencies for this example -->
-                <dependencies/>
-
-                <manifest>
-                    <attribute name="Main-Class"
-                               value="com.splunk.examples.@{name}.Program"/>
-                    <attribute name="Implementation-Title"
-                               value="com.splunk.examples.@{name}"/>
-                    <attribute name="Implementation-Vendor"
-                               value="Splunk, Inc."/>
-                    <attribute name="Implementation-Version"
-                               value="${version.number}"/>
-                </manifest>
-            </jar>
-        </sequential>
-    </macrodef>
-
-    <!-- Make jar files for general distribution of the SDK. The primary one
-         is splunk.jar, and we create a jar for each example, including its
-         dependencies, to make it easily redistributable.
-    -->
-    <target name="dist" depends="build, javadoc, sources">
-        <mkdir dir="${dist}"/>
-
-        <!-- Splunk SDK jar -->
-        <jar destfile="${dist}/splunk-${version.number}.jar">
-            <fileset dir="${build.splunk}"
-                     includes="**/*.class"/>
-            <fileset dir="${build.util}"
-                     includes="**/Command.class"/>
-            <fileset dir="splunk" includes="**/*"/>
-
-            <manifest>
-                <attribute name="Implementation-Title"
-                           value="com.splunk"/>
-                <attribute name="Implementation-Vendor"
-                           value="Splunk, Inc."/>
-                <attribute name="Implementation-Version"
-                           value="${version.number}"/>
-            </manifest>
-        </jar>
-
-        <copy file="${gson}" todir="${dist}"/>
-        <copy file="${opencsv}" todir="${dist}"/>
-
-        <!-- Now, the examples -->
-        <standalone-example-jar name="endpoint_instantiation"/>
-        <standalone-example-jar name="explorer">
-            <dependencies>
-                <zipgroupfileset dir="lib" includes="gson-2.2.4.jar"/>
-                <zipgroupfileset dir="lib" includes="opencsv-2.3.jar"/>
-                <zipgroupfileset dir="lib" includes="org-openide-*.jar"/>
-            </dependencies>
-        </standalone-example-jar>
-
-        <standalone-example-jar name="export"/>
-        <standalone-example-jar name="genevents"/>
-        <standalone-example-jar name="get_job"/>
-        <standalone-example-jar name="index"/>
-        <standalone-example-jar name="info"/>
-        <standalone-example-jar name="input"/>
-        <standalone-example-jar name="random_numbers"/>
-
-        <standalone-example-jar name="search">
-            <dependencies>
-                <zipgroupfileset dir="lib" includes="gson-2.2.4.jar"/>
-                <zipgroupfileset dir="lib" includes="opencsv-2.3.jar"/>
-            </dependencies>
-        </standalone-example-jar>
-
-        <standalone-example-jar name="search_blocking"/>
-        <standalone-example-jar name="search_oneshot"/>
-        <standalone-example-jar name="search_realtime"/>
-        <standalone-example-jar name="search_saved"/>
-        <standalone-example-jar name="search_simple"/>
-        <standalone-example-jar name="spurl"/>
-        <standalone-example-jar name="ssl_protocols"/>
-        <standalone-example-jar name="tail"/>
-        <standalone-example-jar name="pivot">
-            <dependencies>
-                <zipgroupfileset dir="lib" includes="gson-2.2.4.jar"/>
-            </dependencies>
-        </standalone-example-jar>
-
-        <standalone-example-jar name="fluent_pivot">
-            <dependencies>
-                <zipgroupfileset dir="lib" includes="gson-2.2.4.jar"/>
-            </dependencies>
-        </standalone-example-jar>
-
-	<!-- Create the random_numbers example modular input app -->
-	<echo message="Assembling example app"/>
-	<copy todir="${build.apps}/random_numbers">
-	  <fileset dir="examples/com/splunk/examples/random_numbers/random_numbers"/>
-	</copy>
-
-	<mkdir dir="${build.apps}/random_numbers/jars"/>
-	<copy file="${dist}/examples/random_numbers.jar" todir="${build.apps}/random_numbers/jars"/>
-
-	<mkdir dir="${build.apps}/random_numbers/windows_x86_64/bin"/>
-	<copy file="launchers/shim-windows_x86_64.exe" tofile="${build.apps}/random_numbers/windows_x86_64/bin/random_numbers.exe"/>
-
-	<mkdir dir="${build.apps}/random_numbers/windows_x86/bin"/>
-	<copy file="launchers/shim-windows_x86.exe" tofile="${build.apps}/random_numbers/windows_x86/bin/random_numbers.exe"/>
-
-	<mkdir dir="${build.apps}/random_numbers/darwin_x86_64/bin"/>
- 	<copy file="launchers/shim-darwin.sh" tofile="${build.apps}/random_numbers/darwin_x86_64/bin/random_numbers.sh"/>
-
-	<mkdir dir="${build.apps}/random_numbers/linux_x86/bin"/>
- 	<copy file="launchers/shim-linux.sh" tofile="${build.apps}/random_numbers/linux_x86/bin/random_numbers.sh"/>
-
-	<mkdir dir="${build.apps}/random_numbers/linux_x86_64/bin"/>
- 	<copy file="launchers/shim-linux.sh" tofile="${build.apps}/random_numbers/linux_x86_64/bin/random_numbers.sh"/>
-
-	<echo message="Packaging example app"/>
-	<tar longfile="gnu" destfile="${dist}/random_numbers.spl">
-	  <tarfileset dir="${build.apps}" filemode="755">
-	    <include name="random_numbers/*/bin/random_numbers.*"/>
-	  </tarfileset>
-
-	  <tarfileset dir="${build.apps}">
-	    <include name="random_numbers/**"/>
-	    <exclude name="random_numbers/*/bin/*"/>
-	  </tarfileset>
-	</tar>
-	<echo message="Done packaging."/>
-
-    </target>
-
-    <!-- Create JavaDoc site in dist/docs/ with JavaDoc jar in dist/splunk-${version.number}-javadoc.jar -->
-    <!-- Javadoc is not backwards compatible with Java version 1.6.  Must have Java version 1.6 to build correctly -->
-    <!-- http://docs.oracle.com/javase/7/docs/technotes/guides/javadoc/whatsnew-7.html -->
-    <target name="javadoc">
-        <property name="dist.docs" location="${dist}/docs"/>
-        <mkdir dir="${dist.docs}"/>
-        <javadoc destdir="${dist.docs}"
-                 sourcepath="splunk"
-                 stylesheetfile="splunk/staticdocs.css">
-            <classpath>
-                <pathelement location="${gson}"/>
-                <pathelement location="${opencsv}"/>
-            </classpath>
-        </javadoc>
-        <jar basedir="${dist.docs}" destfile="${dist}/splunk-${version.number}-javadoc.jar">
-            <manifest>
-                <attribute name="Implementation-Title"
-                           value="com.splunk"/>
-                <attribute name="Implementation-Vendor"
-                           value="Splunk, Inc."/>
-                <attribute name="Implementation-Version"
-                           value="${version.number}"/>
-            </manifest>
-        </jar>
-    </target>
-
-    <!-- Create sources jar, dist/splunk-${version.number}-sources.jar -->
-    <target name="sources">
-        <property name="sources" location="splunk"/>
-        <jar basedir="${sources}" destfile="${dist}/splunk-${version.number}-sources.jar" excludes=".classpath, .project, splunk.iml, staticdocs.css">
-            <manifest>
-                <attribute name="Implementation-Title"
-                           value="com.splunk"/>
-                <attribute name="Implementation-Vendor"
-                           value="Splunk, Inc."/>
-                <attribute name="Implementation-Version"
-                           value="${version.number}"/>
-            </manifest>
-        </jar>
-    </target>
-
-    <!-- Run the test suite -->
-    <target name="test" depends="build">
-        <junit fork="yes" haltonfailure="no" failureproperty="test.failed" printsummary="on">
-            <classpath>
-                <pathelement location="${build.tests}"/>
-                <pathelement location="${build.util}"/>
-                <pathelement location="lib/commons-cli-1.2.jar"/>
-                <pathelement location="${build.splunk}"/>
-                <pathelement location="${junit}"/>
-                <pathelement location="${gson}"/>
-                <pathelement location="${opencsv}"/>
-            </classpath>
-
-            <batchtest>
-                <fileset dir="${build.tests}">
-                    <include name="**/${testcase}.class"/>
-                </fileset>
-                <formatter type="xml" />
-            </batchtest>
-
-            <formatter type="xml" />
-            <formatter type="plain" usefile="false"/>
-            <jvmarg value="-Dhttps.protocols=TLSv1.1,TLSv1.2"/>
-        </junit>
-        <fail message="Test failure detected, check test results." if="test.failed" />
-    </target>
-
-<target name="print-version"> 
-   <echo>Java/JVM version: ${ant.java.version}</echo> 
-   <echo>Java/JVM detail version: ${java.version}</echo> 
-</target>
-
-    <!-- Run the test suite -->
-    <target name="travis" depends="build">
-        <junit fork="yes" haltonfailure="no" failureproperty="test.failed" printsummary="yes" showoutput="yes">
-            <classpath>
-                <pathelement location="${build.tests}"/>
-                <pathelement location="${build.util}"/>
-                <pathelement location="lib/commons-cli-1.2.jar"/>
-                <pathelement location="${build.splunk}"/>
-                <pathelement location="${junit}"/>
-                <pathelement location="${gson}"/>
-                <pathelement location="${opencsv}"/>
-            </classpath>
-
-            <batchtest>
-                <fileset dir="${build.tests}">
-                    <include name="**/${testcase}.class"/>
-                </fileset>
-                <formatter type="xml" />
-            </batchtest>
-
-            <formatter type="xml" />
-            <formatter type="plain" usefile="false"/>
-            <jvmarg value="-Dhttps.protocols=TLSv1.1,TLSv1.2"/>
-        </junit>
-        <fail message="Test failure detected, check test results." if="test.failed" />
-    </target>
-
-    <target name="testreport" depends="test">
-        <mkdir dir="${testreport.dir}"/>
-        <junitreport todir="${testreport.dir}">
-            <fileset dir=".">
-                <include name="TEST-*.xml" />
-            </fileset>
-            <report todir="${testreport.dir}" />
-        </junitreport>
-    </target>
-
-    <!-- Run the test suite with code coverage. -->
-    <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
-        <classpath path="lib/jacocoant.jar"/>
-    </taskdef>
-
-    <target name="coverage" depends="build">
-        <delete file="${coverage.dir}/coverage_report.exec" />
-        <jacoco:coverage append="true" destfile="${coverage.dir}/coverage_report.exec">
-            <junit fork="yes" haltonfailure="no">
-                <classpath>
-                    <pathelement location="${build.tests}"/>
-                    <pathelement location="${build.util}"/>
-                    <pathelement location="lib/commons-cli-1.2.jar"/>
-                    <pathelement location="${build.splunk}"/>
-                    <pathelement location="${junit}"/>
-                    <pathelement location="${gson}"/>
-                    <pathelement location="${opencsv}"/>
-                </classpath>
-
-                <batchtest>
-                    <fileset dir="${build.tests}">
-                        <include name="**/*Test.class"/>
-                    </fileset>
-		    <formatter type="xml" />
-                </batchtest>
-
-                <formatter type="xml" />
-                <formatter type="plain" usefile="false"/>
-            </junit>
-        </jacoco:coverage>
-
-        <jacoco:report>
-            <executiondata>
-                <file file="${coverage.dir}/coverage_report.exec" />
-            </executiondata>
-
-            <structure name="Splunk SDK for Java">
-                <classfiles>
-                    <fileset dir="${build.splunk}" />
-                </classfiles>
-                <sourcefiles encoding="UTF-8">
-                    <fileset dir="splunk" />
-                </sourcefiles>
-            </structure>
-
-            <html destdir="${coverage.dir}"/>
-	    <xml destfile="test_coverage.xml"/>
-        </jacoco:report>
-
-        <mkdir dir="${testreport.dir}"/>
-        <junitreport todir="${testreport.dir}">
-            <fileset dir="${testreport.dir}">
-                <include name="TEST-*.xml" />
-            </fileset>
-            <report todir="${testreport.dir}" />
-        </junitreport>
-    </target>
-
-</project>
diff --git a/deploy b/deploy
index bf56c132..37f5c49a 100755
--- a/deploy
+++ b/deploy
@@ -2,7 +2,7 @@
 
 declare -r scriptDirectory="$(dirname $(readlink -e $0))"
 declare -r scriptName="$(basename $0)"
-declare -r version="1.6.5"
+declare -r version="1.7.0"
 
 if [[ $# -ne 1 ]]; then
     echo 1>&2 "Usage: ${scriptName} {local|staging||production}"
diff --git a/deploy.md b/deploy.md
index 253bf780..23e4332f 100644
--- a/deploy.md
+++ b/deploy.md
@@ -1,6 +1,6 @@
 ##NAME
 
-deploy - Transmit splunk-sdk-java artifacts to the local, staging or production 
+deploy - Transmit splunk-sdk-java artifacts to the local, staging or production
 maven artifact repository
 
 ##SYNOPSIS
@@ -9,8 +9,8 @@ deploy \<repository-name>
 
 ##DESCRIPTION
 
-Deploy transmits **dist/splunk-1.6.5.jar**, **dist/splunk-1.6.5-javadoc.jar**, and 
-**dist/splunk-1.6.5-sources.jar** to the **local**, **staging**, or **production**
+Deploy transmits **target/splunk-1.7.0.jar**, **target/splunk-1.7.0-javadoc.jar**, and
+**target/splunk-1.7.0-sources.jar** to the **local**, **staging**, or **production**
 maven repository. Repository names are mapped to locations as follows.
 
 | repository-name | location                                                       |
@@ -21,18 +21,18 @@ maven repository. Repository names are mapped to locations as follows.
 
 After deployment you should find this tree structure at the location of your repository
 
-    com/splunk/splunk/1.6.5/
-    ├── splunk-1.6.5-javadoc.jar
-    ├── splunk-1.6.5-javadoc.jar.md5
-    ├── splunk-1.6.5-javadoc.jar.sha1
-    ├── splunk-1.6.5-sources.jar
-    ├── splunk-1.6.5-sources.jar.md5
-    ├── splunk-1.6.5-sources.jar.sha1
-    ├── splunk-1.6.5.jar
-    ├── splunk-1.6.5.jar.md5
-    ├── splunk-1.6.5.jar.sha1
-    ├── splunk-1.6.5.pom
-    ├── splunk-1.6.5.pom.md5
-    └── splunk-1.6.5.pom.sha1
+    com/splunk/splunk/1.7.0/
+    ├── splunk-1.7.0-javadoc.jar
+    ├── splunk-1.7.0-javadoc.jar.md5
+    ├── splunk-1.7.0-javadoc.jar.sha1
+    ├── splunk-1.7.0-sources.jar
+    ├── splunk-1.7.0-sources.jar.md5
+    ├── splunk-1.7.0-sources.jar.sha1
+    ├── splunk-1.7.0.jar
+    ├── splunk-1.7.0.jar.md5
+    ├── splunk-1.7.0.jar.sha1
+    ├── splunk-1.7.0.pom
+    ├── splunk-1.7.0.pom.md5
+    └── splunk-1.7.0.pom.sha1
 
 Verify this structure prior to release.
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 00000000..bfee5176
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,22 @@
+version: '3.6'
+
+services:
+    splunk:
+        image: "splunk/splunk:8.0"
+        container_name: splunk
+        environment:
+            - SPLUNK_START_ARGS=--accept-license
+            - SPLUNK_HEC_TOKEN=11111111-1111-1111-1111-1111111111113
+            - SPLUNK_PASSWORD=changed!
+            - SPLUNK_APPS_URL=https://github.com/splunk/sdk-app-collection/releases/download/v1.0.0/sdk-app-collection.tgz
+        ports:
+            - 8000:8000
+            - 8088:8088
+            - 8089:8089
+            - 10667:10667
+            - 10668:10668/udp
+        healthcheck:
+            test: ['CMD', 'curl', '-f', 'http://localhost:8000']
+            interval: 5s
+            timeout: 5s
+            retries: 20
diff --git a/examples/pom.xml b/examples/pom.xml
new file mode 100644
index 00000000..6fef3651
--- /dev/null
+++ b/examples/pom.xml
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>examples</artifactId>
+    <parent>
+        <artifactId>splunk-sdk-java</artifactId>
+        <groupId>com.splunk</groupId>
+        <version>1.0.0</version>
+    </parent>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>3.0.0-M5</version>
+                <configuration>
+                    <skipTests>true</skipTests>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-deploy-plugin</artifactId>
+                <version>3.0.0-M1</version>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.splunk</groupId>
+            <artifactId>splunk</artifactId>
+            <version>${version.number}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.netbeans.api</groupId>
+            <artifactId>org-openide-util-lookup</artifactId>
+            <version>RELEASE124</version>
+        </dependency>
+        <dependency>
+            <groupId>org.netbeans.api</groupId>
+            <artifactId>org-openide-util</artifactId>
+            <version>RELEASE124</version>
+        </dependency>
+        <dependency>
+            <groupId>org.netbeans.api</groupId>
+            <artifactId>org-openide-filesystems</artifactId>
+            <version>RELEASE124</version>
+        </dependency>
+        <dependency>
+            <groupId>org.netbeans.api</groupId>
+            <artifactId>org-openide-awt</artifactId>
+            <version>RELEASE124</version>
+        </dependency>
+        <dependency>
+            <groupId>org.netbeans.api</groupId>
+            <artifactId>org-openide-dialogs</artifactId>
+            <version>RELEASE124</version>
+        </dependency>
+        <dependency>
+            <groupId>org.netbeans.api</groupId>
+            <artifactId>org-openide-nodes</artifactId>
+            <version>RELEASE124</version>
+        </dependency>
+        <dependency>
+            <groupId>org.netbeans.api</groupId>
+            <artifactId>org-openide-explorer</artifactId>
+            <version>RELEASE124</version>
+        </dependency>
+        <dependency>
+            <groupId>org.netbeans.api</groupId>
+            <artifactId>org-openide-execution</artifactId>
+            <version>RELEASE124</version>
+        </dependency>
+        <dependency>
+            <groupId>org.netbeans.api</groupId>
+            <artifactId>org-openide-modules</artifactId>
+            <version>RELEASE124</version>
+        </dependency>
+        <dependency>
+            <groupId>org.netbeans.api</groupId>
+            <artifactId>org-openide-windows</artifactId>
+            <version>RELEASE124</version>
+        </dependency>
+        <dependency>
+            <groupId>org.netbeans.api</groupId>
+            <artifactId>org-openide-text</artifactId>
+            <version>RELEASE124</version>
+        </dependency>
+        <dependency>
+            <groupId>org.netbeans.api</groupId>
+            <artifactId>org-openide-options</artifactId>
+            <version>RELEASE124</version>
+        </dependency>
+        <dependency>
+            <groupId>org.netbeans.api</groupId>
+            <artifactId>org-openide-loaders</artifactId>
+            <version>RELEASE124</version>
+        </dependency>
+        <dependency>
+            <groupId>org.netbeans.api</groupId>
+            <artifactId>org-openide-io</artifactId>
+            <version>RELEASE124</version>
+        </dependency>
+        <dependency>
+            <groupId>org.netbeans.api</groupId>
+            <artifactId>org-openide-actions</artifactId>
+            <version>RELEASE124</version>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git a/examples/com/splunk/examples/endpoint_instantiation/Program.java b/examples/src/main/java/com/splunk/examples/endpoint_instantiation/Program.java
similarity index 100%
rename from examples/com/splunk/examples/endpoint_instantiation/Program.java
rename to examples/src/main/java/com/splunk/examples/endpoint_instantiation/Program.java
diff --git a/examples/com/splunk/examples/explorer/AppNode.java b/examples/src/main/java/com/splunk/examples/explorer/AppNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/AppNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/AppNode.java
diff --git a/examples/com/splunk/examples/explorer/ConfCollectionKids.java b/examples/src/main/java/com/splunk/examples/explorer/ConfCollectionKids.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/ConfCollectionKids.java
rename to examples/src/main/java/com/splunk/examples/explorer/ConfCollectionKids.java
diff --git a/examples/com/splunk/examples/explorer/ConfCollectionNode.java b/examples/src/main/java/com/splunk/examples/explorer/ConfCollectionNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/ConfCollectionNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/ConfCollectionNode.java
diff --git a/examples/com/splunk/examples/explorer/DatePropertyEditor.java b/examples/src/main/java/com/splunk/examples/explorer/DatePropertyEditor.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/DatePropertyEditor.java
rename to examples/src/main/java/com/splunk/examples/explorer/DatePropertyEditor.java
diff --git a/examples/com/splunk/examples/explorer/DeploymentClientNode.java b/examples/src/main/java/com/splunk/examples/explorer/DeploymentClientNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/DeploymentClientNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/DeploymentClientNode.java
diff --git a/examples/com/splunk/examples/explorer/DeploymentServerClassNode.java b/examples/src/main/java/com/splunk/examples/explorer/DeploymentServerClassNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/DeploymentServerClassNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/DeploymentServerClassNode.java
diff --git a/examples/com/splunk/examples/explorer/DeploymentServerNode.java b/examples/src/main/java/com/splunk/examples/explorer/DeploymentServerNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/DeploymentServerNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/DeploymentServerNode.java
diff --git a/examples/com/splunk/examples/explorer/DeploymentTenantNode.java b/examples/src/main/java/com/splunk/examples/explorer/DeploymentTenantNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/DeploymentTenantNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/DeploymentTenantNode.java
diff --git a/examples/com/splunk/examples/explorer/DistributedConfigurationNode.java b/examples/src/main/java/com/splunk/examples/explorer/DistributedConfigurationNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/DistributedConfigurationNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/DistributedConfigurationNode.java
diff --git a/examples/com/splunk/examples/explorer/DistributedPeerNode.java b/examples/src/main/java/com/splunk/examples/explorer/DistributedPeerNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/DistributedPeerNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/DistributedPeerNode.java
diff --git a/examples/com/splunk/examples/explorer/EntityCollectionNode.java b/examples/src/main/java/com/splunk/examples/explorer/EntityCollectionNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/EntityCollectionNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/EntityCollectionNode.java
diff --git a/examples/com/splunk/examples/explorer/EntityComparator.java b/examples/src/main/java/com/splunk/examples/explorer/EntityComparator.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/EntityComparator.java
rename to examples/src/main/java/com/splunk/examples/explorer/EntityComparator.java
diff --git a/examples/com/splunk/examples/explorer/EntityKids.java b/examples/src/main/java/com/splunk/examples/explorer/EntityKids.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/EntityKids.java
rename to examples/src/main/java/com/splunk/examples/explorer/EntityKids.java
diff --git a/examples/com/splunk/examples/explorer/EntityMetadataNode.java b/examples/src/main/java/com/splunk/examples/explorer/EntityMetadataNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/EntityMetadataNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/EntityMetadataNode.java
diff --git a/examples/com/splunk/examples/explorer/EntityNode.java b/examples/src/main/java/com/splunk/examples/explorer/EntityNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/EntityNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/EntityNode.java
diff --git a/examples/com/splunk/examples/explorer/EventTypeNode.java b/examples/src/main/java/com/splunk/examples/explorer/EventTypeNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/EventTypeNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/EventTypeNode.java
diff --git a/examples/com/splunk/examples/explorer/Explorer.java b/examples/src/main/java/com/splunk/examples/explorer/Explorer.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/Explorer.java
rename to examples/src/main/java/com/splunk/examples/explorer/Explorer.java
diff --git a/examples/com/splunk/examples/explorer/ExplorerNode.java b/examples/src/main/java/com/splunk/examples/explorer/ExplorerNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/ExplorerNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/ExplorerNode.java
diff --git a/examples/com/splunk/examples/explorer/GroupNode.java b/examples/src/main/java/com/splunk/examples/explorer/GroupNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/GroupNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/GroupNode.java
diff --git a/examples/com/splunk/examples/explorer/IndexNode.java b/examples/src/main/java/com/splunk/examples/explorer/IndexNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/IndexNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/IndexNode.java
diff --git a/examples/com/splunk/examples/explorer/InputKindPropertyEditor.java b/examples/src/main/java/com/splunk/examples/explorer/InputKindPropertyEditor.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/InputKindPropertyEditor.java
rename to examples/src/main/java/com/splunk/examples/explorer/InputKindPropertyEditor.java
diff --git a/examples/com/splunk/examples/explorer/InputNode.java b/examples/src/main/java/com/splunk/examples/explorer/InputNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/InputNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/InputNode.java
diff --git a/examples/com/splunk/examples/explorer/JobNode.java b/examples/src/main/java/com/splunk/examples/explorer/JobNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/JobNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/JobNode.java
diff --git a/examples/com/splunk/examples/explorer/LicenseGroupNode.java b/examples/src/main/java/com/splunk/examples/explorer/LicenseGroupNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/LicenseGroupNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/LicenseGroupNode.java
diff --git a/examples/com/splunk/examples/explorer/LicenseNode.java b/examples/src/main/java/com/splunk/examples/explorer/LicenseNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/LicenseNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/LicenseNode.java
diff --git a/examples/com/splunk/examples/explorer/LicensePoolNode.java b/examples/src/main/java/com/splunk/examples/explorer/LicensePoolNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/LicensePoolNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/LicensePoolNode.java
diff --git a/examples/com/splunk/examples/explorer/LicenseSlaveNode.java b/examples/src/main/java/com/splunk/examples/explorer/LicenseSlaveNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/LicenseSlaveNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/LicenseSlaveNode.java
diff --git a/examples/com/splunk/examples/explorer/LicenseStackNode.java b/examples/src/main/java/com/splunk/examples/explorer/LicenseStackNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/LicenseStackNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/LicenseStackNode.java
diff --git a/examples/com/splunk/examples/explorer/LoggerNode.java b/examples/src/main/java/com/splunk/examples/explorer/LoggerNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/LoggerNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/LoggerNode.java
diff --git a/examples/com/splunk/examples/explorer/MapPropertyEditor.java b/examples/src/main/java/com/splunk/examples/explorer/MapPropertyEditor.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/MapPropertyEditor.java
rename to examples/src/main/java/com/splunk/examples/explorer/MapPropertyEditor.java
diff --git a/examples/com/splunk/examples/explorer/MessageNode.java b/examples/src/main/java/com/splunk/examples/explorer/MessageNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/MessageNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/MessageNode.java
diff --git a/examples/com/splunk/examples/explorer/NamespaceKids.java b/examples/src/main/java/com/splunk/examples/explorer/NamespaceKids.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/NamespaceKids.java
rename to examples/src/main/java/com/splunk/examples/explorer/NamespaceKids.java
diff --git a/examples/com/splunk/examples/explorer/NamespacesKids.java b/examples/src/main/java/com/splunk/examples/explorer/NamespacesKids.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/NamespacesKids.java
rename to examples/src/main/java/com/splunk/examples/explorer/NamespacesKids.java
diff --git a/examples/com/splunk/examples/explorer/NamespacesNode.java b/examples/src/main/java/com/splunk/examples/explorer/NamespacesNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/NamespacesNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/NamespacesNode.java
diff --git a/examples/com/splunk/examples/explorer/OutputDefaultNode.java b/examples/src/main/java/com/splunk/examples/explorer/OutputDefaultNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/OutputDefaultNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/OutputDefaultNode.java
diff --git a/examples/com/splunk/examples/explorer/OutputGroupNode.java b/examples/src/main/java/com/splunk/examples/explorer/OutputGroupNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/OutputGroupNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/OutputGroupNode.java
diff --git a/examples/com/splunk/examples/explorer/OutputServerNode.java b/examples/src/main/java/com/splunk/examples/explorer/OutputServerNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/OutputServerNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/OutputServerNode.java
diff --git a/examples/com/splunk/examples/explorer/OutputSyslogNode.java b/examples/src/main/java/com/splunk/examples/explorer/OutputSyslogNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/OutputSyslogNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/OutputSyslogNode.java
diff --git a/examples/com/splunk/examples/explorer/PasswordNode.java b/examples/src/main/java/com/splunk/examples/explorer/PasswordNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/PasswordNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/PasswordNode.java
diff --git a/examples/com/splunk/examples/explorer/Program.java b/examples/src/main/java/com/splunk/examples/explorer/Program.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/Program.java
rename to examples/src/main/java/com/splunk/examples/explorer/Program.java
diff --git a/examples/com/splunk/examples/explorer/PropertyInfo.java b/examples/src/main/java/com/splunk/examples/explorer/PropertyInfo.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/PropertyInfo.java
rename to examples/src/main/java/com/splunk/examples/explorer/PropertyInfo.java
diff --git a/examples/com/splunk/examples/explorer/PropertyList.java b/examples/src/main/java/com/splunk/examples/explorer/PropertyList.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/PropertyList.java
rename to examples/src/main/java/com/splunk/examples/explorer/PropertyList.java
diff --git a/examples/com/splunk/examples/explorer/ResourceNode.java b/examples/src/main/java/com/splunk/examples/explorer/ResourceNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/ResourceNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/ResourceNode.java
diff --git a/examples/com/splunk/examples/explorer/RoleNode.java b/examples/src/main/java/com/splunk/examples/explorer/RoleNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/RoleNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/RoleNode.java
diff --git a/examples/com/splunk/examples/explorer/SavedSearchNode.java b/examples/src/main/java/com/splunk/examples/explorer/SavedSearchNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/SavedSearchNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/SavedSearchNode.java
diff --git a/examples/com/splunk/examples/explorer/ServiceKids.java b/examples/src/main/java/com/splunk/examples/explorer/ServiceKids.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/ServiceKids.java
rename to examples/src/main/java/com/splunk/examples/explorer/ServiceKids.java
diff --git a/examples/com/splunk/examples/explorer/ServiceNode.java b/examples/src/main/java/com/splunk/examples/explorer/ServiceNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/ServiceNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/ServiceNode.java
diff --git a/examples/com/splunk/examples/explorer/SettingsNode.java b/examples/src/main/java/com/splunk/examples/explorer/SettingsNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/SettingsNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/SettingsNode.java
diff --git a/examples/com/splunk/examples/explorer/StanzaNode.java b/examples/src/main/java/com/splunk/examples/explorer/StanzaNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/StanzaNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/StanzaNode.java
diff --git a/examples/com/splunk/examples/explorer/StringArrayPropertyEditor.java b/examples/src/main/java/com/splunk/examples/explorer/StringArrayPropertyEditor.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/StringArrayPropertyEditor.java
rename to examples/src/main/java/com/splunk/examples/explorer/StringArrayPropertyEditor.java
diff --git a/examples/com/splunk/examples/explorer/UserNode.java b/examples/src/main/java/com/splunk/examples/explorer/UserNode.java
similarity index 100%
rename from examples/com/splunk/examples/explorer/UserNode.java
rename to examples/src/main/java/com/splunk/examples/explorer/UserNode.java
diff --git a/examples/com/splunk/examples/export/Program.java b/examples/src/main/java/com/splunk/examples/export/Program.java
similarity index 100%
rename from examples/com/splunk/examples/export/Program.java
rename to examples/src/main/java/com/splunk/examples/export/Program.java
diff --git a/examples/com/splunk/examples/fluent_pivot/Program.java b/examples/src/main/java/com/splunk/examples/fluent_pivot/Program.java
similarity index 100%
rename from examples/com/splunk/examples/fluent_pivot/Program.java
rename to examples/src/main/java/com/splunk/examples/fluent_pivot/Program.java
diff --git a/examples/com/splunk/examples/genevents/Program.java b/examples/src/main/java/com/splunk/examples/genevents/Program.java
similarity index 100%
rename from examples/com/splunk/examples/genevents/Program.java
rename to examples/src/main/java/com/splunk/examples/genevents/Program.java
diff --git a/examples/com/splunk/examples/get_job/Program.java b/examples/src/main/java/com/splunk/examples/get_job/Program.java
similarity index 100%
rename from examples/com/splunk/examples/get_job/Program.java
rename to examples/src/main/java/com/splunk/examples/get_job/Program.java
diff --git a/examples/com/splunk/examples/index/Program.java b/examples/src/main/java/com/splunk/examples/index/Program.java
similarity index 100%
rename from examples/com/splunk/examples/index/Program.java
rename to examples/src/main/java/com/splunk/examples/index/Program.java
diff --git a/examples/com/splunk/examples/info/Program.java b/examples/src/main/java/com/splunk/examples/info/Program.java
similarity index 100%
rename from examples/com/splunk/examples/info/Program.java
rename to examples/src/main/java/com/splunk/examples/info/Program.java
diff --git a/examples/com/splunk/examples/input/Program.java b/examples/src/main/java/com/splunk/examples/input/Program.java
similarity index 100%
rename from examples/com/splunk/examples/input/Program.java
rename to examples/src/main/java/com/splunk/examples/input/Program.java
diff --git a/examples/com/splunk/examples/pivot/Program.java b/examples/src/main/java/com/splunk/examples/pivot/Program.java
similarity index 100%
rename from examples/com/splunk/examples/pivot/Program.java
rename to examples/src/main/java/com/splunk/examples/pivot/Program.java
diff --git a/examples/com/splunk/examples/random_numbers/Program.java b/examples/src/main/java/com/splunk/examples/random_numbers/Program.java
similarity index 100%
rename from examples/com/splunk/examples/random_numbers/Program.java
rename to examples/src/main/java/com/splunk/examples/random_numbers/Program.java
diff --git a/examples/com/splunk/examples/random_numbers/random_numbers/README/inputs.conf.spec b/examples/src/main/java/com/splunk/examples/random_numbers/random_numbers/README/inputs.conf.spec
similarity index 100%
rename from examples/com/splunk/examples/random_numbers/random_numbers/README/inputs.conf.spec
rename to examples/src/main/java/com/splunk/examples/random_numbers/random_numbers/README/inputs.conf.spec
diff --git a/examples/com/splunk/examples/random_numbers/random_numbers/default/app.conf b/examples/src/main/java/com/splunk/examples/random_numbers/random_numbers/default/app.conf
similarity index 100%
rename from examples/com/splunk/examples/random_numbers/random_numbers/default/app.conf
rename to examples/src/main/java/com/splunk/examples/random_numbers/random_numbers/default/app.conf
diff --git a/examples/com/splunk/examples/search/Program.java b/examples/src/main/java/com/splunk/examples/search/Program.java
similarity index 100%
rename from examples/com/splunk/examples/search/Program.java
rename to examples/src/main/java/com/splunk/examples/search/Program.java
diff --git a/examples/com/splunk/examples/search_blocking/Program.java b/examples/src/main/java/com/splunk/examples/search_blocking/Program.java
similarity index 100%
rename from examples/com/splunk/examples/search_blocking/Program.java
rename to examples/src/main/java/com/splunk/examples/search_blocking/Program.java
diff --git a/examples/com/splunk/examples/search_oneshot/Program.java b/examples/src/main/java/com/splunk/examples/search_oneshot/Program.java
similarity index 100%
rename from examples/com/splunk/examples/search_oneshot/Program.java
rename to examples/src/main/java/com/splunk/examples/search_oneshot/Program.java
diff --git a/examples/com/splunk/examples/search_realtime/Program.java b/examples/src/main/java/com/splunk/examples/search_realtime/Program.java
similarity index 100%
rename from examples/com/splunk/examples/search_realtime/Program.java
rename to examples/src/main/java/com/splunk/examples/search_realtime/Program.java
diff --git a/examples/com/splunk/examples/search_saved/Program.java b/examples/src/main/java/com/splunk/examples/search_saved/Program.java
similarity index 100%
rename from examples/com/splunk/examples/search_saved/Program.java
rename to examples/src/main/java/com/splunk/examples/search_saved/Program.java
diff --git a/examples/com/splunk/examples/search_simple/Program.java b/examples/src/main/java/com/splunk/examples/search_simple/Program.java
similarity index 100%
rename from examples/com/splunk/examples/search_simple/Program.java
rename to examples/src/main/java/com/splunk/examples/search_simple/Program.java
diff --git a/examples/com/splunk/examples/spurl/Program.java b/examples/src/main/java/com/splunk/examples/spurl/Program.java
similarity index 100%
rename from examples/com/splunk/examples/spurl/Program.java
rename to examples/src/main/java/com/splunk/examples/spurl/Program.java
diff --git a/examples/com/splunk/examples/ssl_protocols/Program.java b/examples/src/main/java/com/splunk/examples/ssl_protocols/Program.java
similarity index 100%
rename from examples/com/splunk/examples/ssl_protocols/Program.java
rename to examples/src/main/java/com/splunk/examples/ssl_protocols/Program.java
diff --git a/examples/com/splunk/examples/tail/Program.java b/examples/src/main/java/com/splunk/examples/tail/Program.java
similarity index 100%
rename from examples/com/splunk/examples/tail/Program.java
rename to examples/src/main/java/com/splunk/examples/tail/Program.java
diff --git a/examples/com/splunk/examples/testupdate/Program.java b/examples/src/main/java/com/splunk/examples/testupdate/Program.java
similarity index 100%
rename from examples/com/splunk/examples/testupdate/Program.java
rename to examples/src/main/java/com/splunk/examples/testupdate/Program.java
diff --git a/lib/commons-cli-1.2.jar b/lib/commons-cli-1.2.jar
deleted file mode 100644
index ce4b9fff..00000000
Binary files a/lib/commons-cli-1.2.jar and /dev/null differ
diff --git a/lib/gson-2.2.4.jar b/lib/gson-2.2.4.jar
deleted file mode 100644
index 9478253e..00000000
Binary files a/lib/gson-2.2.4.jar and /dev/null differ
diff --git a/lib/jacocoant.jar b/lib/jacocoant.jar
deleted file mode 100755
index 73baf677..00000000
Binary files a/lib/jacocoant.jar and /dev/null differ
diff --git a/lib/junit-4.11.jar b/lib/junit-4.11.jar
deleted file mode 100644
index 4d552a6f..00000000
Binary files a/lib/junit-4.11.jar and /dev/null differ
diff --git a/lib/opencsv-2.3.jar b/lib/opencsv-2.3.jar
deleted file mode 100644
index f6c88b86..00000000
Binary files a/lib/opencsv-2.3.jar and /dev/null differ
diff --git a/lib/org-openide-actions.jar b/lib/org-openide-actions.jar
deleted file mode 100644
index ca83aa26..00000000
Binary files a/lib/org-openide-actions.jar and /dev/null differ
diff --git a/lib/org-openide-awt.jar b/lib/org-openide-awt.jar
deleted file mode 100644
index 22972b7c..00000000
Binary files a/lib/org-openide-awt.jar and /dev/null differ
diff --git a/lib/org-openide-compat.jar b/lib/org-openide-compat.jar
deleted file mode 100644
index af1b2740..00000000
Binary files a/lib/org-openide-compat.jar and /dev/null differ
diff --git a/lib/org-openide-dialogs.jar b/lib/org-openide-dialogs.jar
deleted file mode 100644
index 06dcceb9..00000000
Binary files a/lib/org-openide-dialogs.jar and /dev/null differ
diff --git a/lib/org-openide-execution.jar b/lib/org-openide-execution.jar
deleted file mode 100644
index 47e7cf92..00000000
Binary files a/lib/org-openide-execution.jar and /dev/null differ
diff --git a/lib/org-openide-explorer.jar b/lib/org-openide-explorer.jar
deleted file mode 100644
index e15ac8af..00000000
Binary files a/lib/org-openide-explorer.jar and /dev/null differ
diff --git a/lib/org-openide-filesystems.jar b/lib/org-openide-filesystems.jar
deleted file mode 100644
index 1b1c581e..00000000
Binary files a/lib/org-openide-filesystems.jar and /dev/null differ
diff --git a/lib/org-openide-io.jar b/lib/org-openide-io.jar
deleted file mode 100644
index 49522467..00000000
Binary files a/lib/org-openide-io.jar and /dev/null differ
diff --git a/lib/org-openide-loaders.jar b/lib/org-openide-loaders.jar
deleted file mode 100644
index 0b36eb66..00000000
Binary files a/lib/org-openide-loaders.jar and /dev/null differ
diff --git a/lib/org-openide-modules.jar b/lib/org-openide-modules.jar
deleted file mode 100644
index 6008a329..00000000
Binary files a/lib/org-openide-modules.jar and /dev/null differ
diff --git a/lib/org-openide-nodes.jar b/lib/org-openide-nodes.jar
deleted file mode 100644
index ec1c9722..00000000
Binary files a/lib/org-openide-nodes.jar and /dev/null differ
diff --git a/lib/org-openide-options.jar b/lib/org-openide-options.jar
deleted file mode 100644
index 88b2fb30..00000000
Binary files a/lib/org-openide-options.jar and /dev/null differ
diff --git a/lib/org-openide-text.jar b/lib/org-openide-text.jar
deleted file mode 100644
index 819a9e20..00000000
Binary files a/lib/org-openide-text.jar and /dev/null differ
diff --git a/lib/org-openide-util-enumerations.jar b/lib/org-openide-util-enumerations.jar
deleted file mode 100644
index 1bd943a3..00000000
Binary files a/lib/org-openide-util-enumerations.jar and /dev/null differ
diff --git a/lib/org-openide-util-lookup.jar b/lib/org-openide-util-lookup.jar
deleted file mode 100644
index c9a082b2..00000000
Binary files a/lib/org-openide-util-lookup.jar and /dev/null differ
diff --git a/lib/org-openide-util.jar b/lib/org-openide-util.jar
deleted file mode 100644
index feb7c432..00000000
Binary files a/lib/org-openide-util.jar and /dev/null differ
diff --git a/lib/org-openide-windows.jar b/lib/org-openide-windows.jar
deleted file mode 100644
index 57c7cf76..00000000
Binary files a/lib/org-openide-windows.jar and /dev/null differ
diff --git a/licenses/LICENSE-COMMONS b/licenses/LICENSE-COMMONS
new file mode 100644
index 00000000..7a4a3ea2
--- /dev/null
+++ b/licenses/LICENSE-COMMONS
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
\ No newline at end of file
diff --git a/licenses/LICENSE-GSON b/licenses/LICENSE-GSON
new file mode 100644
index 00000000..7a4a3ea2
--- /dev/null
+++ b/licenses/LICENSE-GSON
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
\ No newline at end of file
diff --git a/licenses/LICENSE-JACOCO b/licenses/LICENSE-JACOCO
new file mode 100644
index 00000000..e19f0de1
--- /dev/null
+++ b/licenses/LICENSE-JACOCO
@@ -0,0 +1,74 @@
+Eclipse Public License - v 2.0
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+“Contribution” means:
+
+a) in the case of the initial Contributor, the initial content Distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+i) changes to the Program, and
+ii) additions to the Program;
+where such changes and/or additions to the Program originate from and are Distributed by that particular Contributor. A Contribution “originates” from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include changes or additions to the Program that are not Modified Works.
+“Contributor” means any person or entity that Distributes the Program.
+
+“Licensed Patents” mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
+
+“Program” means the Contributions Distributed in accordance with this Agreement.
+
+“Recipient” means anyone who receives the Program under this Agreement or any Secondary License (as applicable), including Contributors.
+
+“Derivative Works” shall mean any work, whether in Source Code or other form, that is based on (or derived from) the Program and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship.
+
+“Modified Works” shall mean any work in Source Code or other form that results from an addition to, deletion from, or modification of the contents of the Program, including, for purposes of clarity any new file in Source Code form that contains any contents of the Program. Modified Works shall not include works that contain only declarations, interfaces, types, classes, structures, or files of the Program solely in each case in order to link to, bind by name, or subclass the Program or Modified Works thereof.
+
+“Distribute” means the acts of a) distributing or b) making available in any manner that enables the transfer of a copy.
+
+“Source Code” means the form of a Program preferred for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+“Secondary License” means either the GNU General Public License, Version 2.0, or any later versions of that license, including any exceptions or additional permissions as identified by the initial Contributor.
+
+2. GRANT OF RIGHTS
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, Distribute and sublicense the Contribution of such Contributor, if any, and such Derivative Works.
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in Source Code or other form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to Distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
+e) Notwithstanding the terms of any Secondary License, no Contributor makes additional grants to any Recipient (other than those set forth in this Agreement) as a result of such Recipient's receipt of the Program under the terms of a Secondary License (if permitted under the terms of Section 3).
+3. REQUIREMENTS
+3.1 If a Contributor Distributes the Program in any form, then:
+
+a) the Program must also be made available as Source Code, in accordance with section 3.2, and the Contributor must accompany the Program with a statement that the Source Code for the Program is available under this Agreement, and informs Recipients how to obtain it in a reasonable manner on or through a medium customarily used for software exchange; and
+b) the Contributor may Distribute the Program under a license different than this Agreement, provided that such license:
+i) effectively disclaims on behalf of all other Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
+ii) effectively excludes on behalf of all other Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
+iii) does not attempt to limit or alter the recipients' rights in the Source Code under section 3.2; and
+iv) requires any subsequent distribution of the Program by any party to be under a license that satisfies the requirements of this section 3.
+3.2 When the Program is Distributed as Source Code:
+
+a) it must be made available under this Agreement, or if the Program (i) is combined with other material in a separate file or files made available under a Secondary License, and (ii) the initial Contributor attached to the Source Code the notice described in Exhibit A of this Agreement, then the Program may be made available under the terms of such Secondary Licenses, and
+b) a copy of this Agreement must be included with each copy of the Program.
+3.3 Contributors may not remove or alter any copyright, patent, trademark, attribution notices, disclaimers of warranty, or limitations of liability (‘notices’) contained within the Program from any copy of the Program which they Distribute, provided that Contributors may add their own appropriate notices.
+
+4. COMMERCIAL DISTRIBUTION
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor (“Commercial Contributor”) hereby agrees to defend and indemnify every other Contributor (“Indemnified Contributor”) against any losses, damages and costs (collectively “Losses”) arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be Distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to Distribute the Program (including its Contributions) under the new version.
+
+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. Nothing in this Agreement is intended to be enforceable by any entity that is not a Contributor or Recipient. No third-party beneficiary rights are created under this Agreement.
+
+Exhibit A – Form of Secondary Licenses Notice
+“This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), version(s), and exceptions or additional permissions here}.”
\ No newline at end of file
diff --git a/licenses/LICENSE-JUNIT b/licenses/LICENSE-JUNIT
new file mode 100644
index 00000000..3fa00836
--- /dev/null
+++ b/licenses/LICENSE-JUNIT
@@ -0,0 +1,86 @@
+Eclipse Public License - v 1.0
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+
+b) in the case of each subsequent Contributor:
+
+i) changes to the Program, and
+
+ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
+
+iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and
+
+iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.
\ No newline at end of file
diff --git a/licenses/LICENSE-NETBEANS b/licenses/LICENSE-NETBEANS
new file mode 100644
index 00000000..4c9ad980
--- /dev/null
+++ b/licenses/LICENSE-NETBEANS
@@ -0,0 +1,201 @@
+                                Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/licenses/LICENSE-OPENCSV b/licenses/LICENSE-OPENCSV
new file mode 100644
index 00000000..8ca90d00
--- /dev/null
+++ b/licenses/LICENSE-OPENCSV
@@ -0,0 +1,201 @@
+                              Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 00000000..5d79fda9
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+         http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <properties>
+        <version.number>1.7.0</version.number>
+        <maven.resources.overwrite>true</maven.resources.overwrite>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+    </properties>
+
+    <groupId>com.splunk</groupId>
+    <artifactId>splunk-sdk-java</artifactId>
+    <version>1.0.0</version>
+    <packaging>pom</packaging>
+    <name>Splunk SDK for Java</name>
+    <url>https://dev.splunk.com/enterprise/docs/devtools/java/sdk-java</url>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.8.6</version>
+        </dependency>
+        <dependency>
+            <groupId>net.sf.opencsv</groupId>
+            <artifactId>opencsv</artifactId>
+            <version>2.3</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-deploy-plugin</artifactId>
+            <version>3.0.0-M1</version>
+            <type>maven-plugin</type>
+        </dependency>
+    </dependencies>
+    <modules>
+        <module>splunk</module>
+        <module>examples</module>
+    </modules>
+
+    <build>
+        <defaultGoal>package</defaultGoal>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.8.1</version>
+                <configuration>
+                    <source>${maven.compiler.source}</source>
+                    <target>${maven.compiler.target}</target>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-deploy-plugin</artifactId>
+                <version>3.0.0-M1</version>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+    <repositories>
+        <repository>
+            <id>splunk-artifactory</id>
+            <name>Splunk Releases</name>
+            <url>https://splunk.jfrog.io/splunk/ext-releases-local</url>
+        </repository>
+    </repositories>
+
+    <distributionManagement>
+        <repository>
+            <id>splunk-artifactory</id>
+            <name>Splunk Releases</name>
+            <url>https://splunk.jfrog.io/splunk/ext-releases-local</url>
+        </repository>
+    </distributionManagement>
+
+    <licenses>
+        <license>
+            <name>The Apache Software License, Version 2.0</name>
+            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+            <distribution>repo</distribution>
+        </license>
+    </licenses>
+
+    <organization>
+        <name>Splunk, Inc.</name>
+        <url>http://dev.splunk.com</url>
+    </organization>
+</project>
diff --git a/scripts/test_specific.sh b/scripts/test_specific.sh
new file mode 100644
index 00000000..34aac979
--- /dev/null
+++ b/scripts/test_specific.sh
@@ -0,0 +1,2 @@
+echo "To run a specific test:"
+echo "  mvn test -Dtest=[testclass]"
diff --git a/splunk/pom.xml b/splunk/pom.xml
new file mode 100644
index 00000000..0b697c6b
--- /dev/null
+++ b/splunk/pom.xml
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>splunk</artifactId>
+    <version>${version.number}</version>
+    <parent>
+        <artifactId>splunk-sdk-java</artifactId>
+        <groupId>com.splunk</groupId>
+        <version>1.0.0</version>
+    </parent>
+    <properties>
+        <https.protocols>TLSv1.2</https.protocols>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.13.1</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>commons-cli</groupId>
+            <artifactId>commons-cli</artifactId>
+            <version>1.2</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-source-plugin</artifactId>
+                <version>3.2.0</version>
+                <executions>
+                    <execution>
+                        <id>attach-sources</id>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-javadoc-plugin</artifactId>
+                <version>3.3.0</version>
+                <executions>
+                    <execution>
+                        <id>attach-javadocs</id>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>3.0.0-M5</version>
+                <configuration>
+                    <skipTests>${skipTests}</skipTests>
+                    <runOrder>alphabetical</runOrder>
+                    <systemProperties>
+                        <https.protocols>${https.protocols}</https.protocols>
+                    </systemProperties>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.jacoco</groupId>
+                <artifactId>jacoco-maven-plugin</artifactId>
+                <version>0.8.7</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>prepare-agent</goal>
+                        </goals>
+                    </execution>
+                    <!-- attached to Maven test phase -->
+                    <execution>
+                        <id>report</id>
+                        <phase>test</phase>
+                        <goals>
+                            <goal>report</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>target/test-report</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-deploy-plugin</artifactId>
+                <version>3.0.0-M1</version>
+                <configuration>
+                    <skip>false</skip>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/splunk/com/splunk/Application.java b/splunk/src/main/java/com/splunk/Application.java
similarity index 100%
rename from splunk/com/splunk/Application.java
rename to splunk/src/main/java/com/splunk/Application.java
diff --git a/splunk/com/splunk/ApplicationArchive.java b/splunk/src/main/java/com/splunk/ApplicationArchive.java
similarity index 100%
rename from splunk/com/splunk/ApplicationArchive.java
rename to splunk/src/main/java/com/splunk/ApplicationArchive.java
diff --git a/splunk/com/splunk/ApplicationSetup.java b/splunk/src/main/java/com/splunk/ApplicationSetup.java
similarity index 100%
rename from splunk/com/splunk/ApplicationSetup.java
rename to splunk/src/main/java/com/splunk/ApplicationSetup.java
diff --git a/splunk/com/splunk/ApplicationUpdate.java b/splunk/src/main/java/com/splunk/ApplicationUpdate.java
similarity index 100%
rename from splunk/com/splunk/ApplicationUpdate.java
rename to splunk/src/main/java/com/splunk/ApplicationUpdate.java
diff --git a/splunk/com/splunk/Args.java b/splunk/src/main/java/com/splunk/Args.java
similarity index 98%
rename from splunk/com/splunk/Args.java
rename to splunk/src/main/java/com/splunk/Args.java
index d682a685..4e93f36a 100644
--- a/splunk/com/splunk/Args.java
+++ b/splunk/src/main/java/com/splunk/Args.java
@@ -28,7 +28,7 @@
  *
  * This extension is used mainly for encoding arguments for UTF8 transmission
  * to a Splunk instance in a key=value pairing for a string, or
- * key=value1&key=value2 (and so on) for an array of strings.
+ * {@code key=value1&key=value2 } (and so on) for an array of strings.
  */
 public class Args extends LinkedHashMap<String, Object> {
 
diff --git a/splunk/com/splunk/AtomEntry.java b/splunk/src/main/java/com/splunk/AtomEntry.java
similarity index 100%
rename from splunk/com/splunk/AtomEntry.java
rename to splunk/src/main/java/com/splunk/AtomEntry.java
diff --git a/splunk/com/splunk/AtomFeed.java b/splunk/src/main/java/com/splunk/AtomFeed.java
similarity index 100%
rename from splunk/com/splunk/AtomFeed.java
rename to splunk/src/main/java/com/splunk/AtomFeed.java
diff --git a/splunk/com/splunk/AtomObject.java b/splunk/src/main/java/com/splunk/AtomObject.java
similarity index 100%
rename from splunk/com/splunk/AtomObject.java
rename to splunk/src/main/java/com/splunk/AtomObject.java
diff --git a/splunk/com/splunk/BaseService.java b/splunk/src/main/java/com/splunk/BaseService.java
similarity index 100%
rename from splunk/com/splunk/BaseService.java
rename to splunk/src/main/java/com/splunk/BaseService.java
diff --git a/splunk/com/splunk/BooleanComparison.java b/splunk/src/main/java/com/splunk/BooleanComparison.java
similarity index 100%
rename from splunk/com/splunk/BooleanComparison.java
rename to splunk/src/main/java/com/splunk/BooleanComparison.java
diff --git a/splunk/com/splunk/BooleanPivotColumnSplit.java b/splunk/src/main/java/com/splunk/BooleanPivotColumnSplit.java
similarity index 100%
rename from splunk/com/splunk/BooleanPivotColumnSplit.java
rename to splunk/src/main/java/com/splunk/BooleanPivotColumnSplit.java
diff --git a/splunk/com/splunk/BooleanPivotFilter.java b/splunk/src/main/java/com/splunk/BooleanPivotFilter.java
similarity index 100%
rename from splunk/com/splunk/BooleanPivotFilter.java
rename to splunk/src/main/java/com/splunk/BooleanPivotFilter.java
diff --git a/splunk/com/splunk/BooleanPivotRowSplit.java b/splunk/src/main/java/com/splunk/BooleanPivotRowSplit.java
similarity index 100%
rename from splunk/com/splunk/BooleanPivotRowSplit.java
rename to splunk/src/main/java/com/splunk/BooleanPivotRowSplit.java
diff --git a/splunk/com/splunk/CollectionArgs.java b/splunk/src/main/java/com/splunk/CollectionArgs.java
similarity index 100%
rename from splunk/com/splunk/CollectionArgs.java
rename to splunk/src/main/java/com/splunk/CollectionArgs.java
diff --git a/util/com/splunk/Command.java b/splunk/src/main/java/com/splunk/Command.java
similarity index 100%
rename from util/com/splunk/Command.java
rename to splunk/src/main/java/com/splunk/Command.java
diff --git a/splunk/com/splunk/ConfCollection.java b/splunk/src/main/java/com/splunk/ConfCollection.java
similarity index 100%
rename from splunk/com/splunk/ConfCollection.java
rename to splunk/src/main/java/com/splunk/ConfCollection.java
diff --git a/splunk/com/splunk/DataModel.java b/splunk/src/main/java/com/splunk/DataModel.java
similarity index 100%
rename from splunk/com/splunk/DataModel.java
rename to splunk/src/main/java/com/splunk/DataModel.java
diff --git a/splunk/com/splunk/DataModelArgs.java b/splunk/src/main/java/com/splunk/DataModelArgs.java
similarity index 100%
rename from splunk/com/splunk/DataModelArgs.java
rename to splunk/src/main/java/com/splunk/DataModelArgs.java
diff --git a/splunk/com/splunk/DataModelCalculation.java b/splunk/src/main/java/com/splunk/DataModelCalculation.java
similarity index 100%
rename from splunk/com/splunk/DataModelCalculation.java
rename to splunk/src/main/java/com/splunk/DataModelCalculation.java
diff --git a/splunk/com/splunk/DataModelCollection.java b/splunk/src/main/java/com/splunk/DataModelCollection.java
similarity index 100%
rename from splunk/com/splunk/DataModelCollection.java
rename to splunk/src/main/java/com/splunk/DataModelCollection.java
diff --git a/splunk/com/splunk/DataModelConstraint.java b/splunk/src/main/java/com/splunk/DataModelConstraint.java
similarity index 100%
rename from splunk/com/splunk/DataModelConstraint.java
rename to splunk/src/main/java/com/splunk/DataModelConstraint.java
diff --git a/splunk/com/splunk/DataModelField.java b/splunk/src/main/java/com/splunk/DataModelField.java
similarity index 100%
rename from splunk/com/splunk/DataModelField.java
rename to splunk/src/main/java/com/splunk/DataModelField.java
diff --git a/splunk/com/splunk/DataModelObject.java b/splunk/src/main/java/com/splunk/DataModelObject.java
similarity index 100%
rename from splunk/com/splunk/DataModelObject.java
rename to splunk/src/main/java/com/splunk/DataModelObject.java
diff --git a/splunk/com/splunk/DataModelSearch.java b/splunk/src/main/java/com/splunk/DataModelSearch.java
similarity index 100%
rename from splunk/com/splunk/DataModelSearch.java
rename to splunk/src/main/java/com/splunk/DataModelSearch.java
diff --git a/splunk/com/splunk/DataModelTransaction.java b/splunk/src/main/java/com/splunk/DataModelTransaction.java
similarity index 100%
rename from splunk/com/splunk/DataModelTransaction.java
rename to splunk/src/main/java/com/splunk/DataModelTransaction.java
diff --git a/splunk/com/splunk/DeploymentClient.java b/splunk/src/main/java/com/splunk/DeploymentClient.java
similarity index 100%
rename from splunk/com/splunk/DeploymentClient.java
rename to splunk/src/main/java/com/splunk/DeploymentClient.java
diff --git a/splunk/com/splunk/DeploymentServer.java b/splunk/src/main/java/com/splunk/DeploymentServer.java
similarity index 100%
rename from splunk/com/splunk/DeploymentServer.java
rename to splunk/src/main/java/com/splunk/DeploymentServer.java
diff --git a/splunk/com/splunk/DeploymentServerClass.java b/splunk/src/main/java/com/splunk/DeploymentServerClass.java
similarity index 100%
rename from splunk/com/splunk/DeploymentServerClass.java
rename to splunk/src/main/java/com/splunk/DeploymentServerClass.java
diff --git a/splunk/com/splunk/DeploymentTenant.java b/splunk/src/main/java/com/splunk/DeploymentTenant.java
similarity index 100%
rename from splunk/com/splunk/DeploymentTenant.java
rename to splunk/src/main/java/com/splunk/DeploymentTenant.java
diff --git a/splunk/com/splunk/DistributedConfiguration.java b/splunk/src/main/java/com/splunk/DistributedConfiguration.java
similarity index 100%
rename from splunk/com/splunk/DistributedConfiguration.java
rename to splunk/src/main/java/com/splunk/DistributedConfiguration.java
diff --git a/splunk/com/splunk/DistributedPeer.java b/splunk/src/main/java/com/splunk/DistributedPeer.java
similarity index 100%
rename from splunk/com/splunk/DistributedPeer.java
rename to splunk/src/main/java/com/splunk/DistributedPeer.java
diff --git a/splunk/com/splunk/Entity.java b/splunk/src/main/java/com/splunk/Entity.java
similarity index 100%
rename from splunk/com/splunk/Entity.java
rename to splunk/src/main/java/com/splunk/Entity.java
diff --git a/splunk/com/splunk/EntityCollection.java b/splunk/src/main/java/com/splunk/EntityCollection.java
similarity index 100%
rename from splunk/com/splunk/EntityCollection.java
rename to splunk/src/main/java/com/splunk/EntityCollection.java
diff --git a/splunk/com/splunk/EntityMetadata.java b/splunk/src/main/java/com/splunk/EntityMetadata.java
similarity index 100%
rename from splunk/com/splunk/EntityMetadata.java
rename to splunk/src/main/java/com/splunk/EntityMetadata.java
diff --git a/splunk/com/splunk/EvalDataModelCalculation.java b/splunk/src/main/java/com/splunk/EvalDataModelCalculation.java
similarity index 100%
rename from splunk/com/splunk/EvalDataModelCalculation.java
rename to splunk/src/main/java/com/splunk/EvalDataModelCalculation.java
diff --git a/splunk/com/splunk/Event.java b/splunk/src/main/java/com/splunk/Event.java
similarity index 100%
rename from splunk/com/splunk/Event.java
rename to splunk/src/main/java/com/splunk/Event.java
diff --git a/splunk/com/splunk/EventType.java b/splunk/src/main/java/com/splunk/EventType.java
similarity index 98%
rename from splunk/com/splunk/EventType.java
rename to splunk/src/main/java/com/splunk/EventType.java
index 293ba4ae..4766f256 100644
--- a/splunk/com/splunk/EventType.java
+++ b/splunk/src/main/java/com/splunk/EventType.java
@@ -91,6 +91,7 @@ public void setDescription(String description) {
      * take effect immediately. 
      * @see Entity#disable
      * @see Entity#enable
+     * @param disabled The boolean flag
      */
     public void setDisabled(boolean disabled) {
         setCacheValue("disabled", disabled);
diff --git a/splunk/com/splunk/EventTypeCollection.java b/splunk/src/main/java/com/splunk/EventTypeCollection.java
similarity index 100%
rename from splunk/com/splunk/EventTypeCollection.java
rename to splunk/src/main/java/com/splunk/EventTypeCollection.java
diff --git a/splunk/com/splunk/ExportResultsStream.java b/splunk/src/main/java/com/splunk/ExportResultsStream.java
similarity index 100%
rename from splunk/com/splunk/ExportResultsStream.java
rename to splunk/src/main/java/com/splunk/ExportResultsStream.java
diff --git a/splunk/com/splunk/FieldType.java b/splunk/src/main/java/com/splunk/FieldType.java
similarity index 100%
rename from splunk/com/splunk/FieldType.java
rename to splunk/src/main/java/com/splunk/FieldType.java
diff --git a/splunk/com/splunk/FiredAlert.java b/splunk/src/main/java/com/splunk/FiredAlert.java
similarity index 100%
rename from splunk/com/splunk/FiredAlert.java
rename to splunk/src/main/java/com/splunk/FiredAlert.java
diff --git a/splunk/com/splunk/FiredAlertGroup.java b/splunk/src/main/java/com/splunk/FiredAlertGroup.java
similarity index 100%
rename from splunk/com/splunk/FiredAlertGroup.java
rename to splunk/src/main/java/com/splunk/FiredAlertGroup.java
diff --git a/splunk/com/splunk/FiredAlertGroupCollection.java b/splunk/src/main/java/com/splunk/FiredAlertGroupCollection.java
similarity index 100%
rename from splunk/com/splunk/FiredAlertGroupCollection.java
rename to splunk/src/main/java/com/splunk/FiredAlertGroupCollection.java
diff --git a/splunk/com/splunk/GeoIPDataModelCalculation.java b/splunk/src/main/java/com/splunk/GeoIPDataModelCalculation.java
similarity index 100%
rename from splunk/com/splunk/GeoIPDataModelCalculation.java
rename to splunk/src/main/java/com/splunk/GeoIPDataModelCalculation.java
diff --git a/splunk/com/splunk/HttpException.java b/splunk/src/main/java/com/splunk/HttpException.java
similarity index 100%
rename from splunk/com/splunk/HttpException.java
rename to splunk/src/main/java/com/splunk/HttpException.java
diff --git a/splunk/com/splunk/HttpService.java b/splunk/src/main/java/com/splunk/HttpService.java
similarity index 89%
rename from splunk/com/splunk/HttpService.java
rename to splunk/src/main/java/com/splunk/HttpService.java
index a66cb5f2..77138334 100644
--- a/splunk/com/splunk/HttpService.java
+++ b/splunk/src/main/java/com/splunk/HttpService.java
@@ -36,14 +36,21 @@
 public class HttpService {
     // For debugging purposes
     private static final boolean VERBOSE_REQUESTS = false;
-    protected static SSLSecurityProtocol sslSecurityProtocol = SSLSecurityProtocol.SSLv3;
+    public static boolean useTLS=false;
+    protected static SSLSecurityProtocol sslSecurityProtocol = null;
     private static SSLSocketFactory sslSocketFactory = createSSLFactory();
     private static String HTTPS_SCHEME = "https";
     private static String HTTP_SCHEME = "http";
+    private static String HOSTNAME = "localhost";
 
     private static final HostnameVerifier HOSTNAME_VERIFIER = new HostnameVerifier() {
         public boolean verify(String s, SSLSession sslSession) {
-            return true;
+            if (s.equals(HOSTNAME)) {
+                return true;
+            } else {
+                HostnameVerifier hv = HttpsURLConnection.getDefaultHostnameVerifier();
+                return hv.verify(s, sslSession);
+            }
         }
     };
 
@@ -73,7 +80,7 @@ public boolean verify(String s, SSLSession sslSession) {
     private String prefix = null;
 
     static Map<String, String> defaultHeader = new HashMap<String, String>() {{
-        put("User-Agent", "splunk-sdk-java/1.6.5");
+        put("User-Agent", "splunk-sdk-java/1.7.0");
         put("Accept", "*/*");
     }};
 
@@ -198,12 +205,13 @@ public static SSLSecurityProtocol getSslSecurityProtocol() {
 
     /**
      * Sets the SSL security protocol of this service.
+     * @param securityProtocol The SSLSecurityProtocal instance
      */
     public static void setSslSecurityProtocol(SSLSecurityProtocol securityProtocol) {
         // Only update the SSL_SOCKET_FACTORY if changing protocols
         if (sslSecurityProtocol != securityProtocol) {
             sslSecurityProtocol = securityProtocol;
-            sslSocketFactory = new SplunkHttpsSocketFactory(createSSLFactory(), securityProtocol);
+            sslSocketFactory = new SplunkHttpsSocketFactory(createSSLFactory());
         }
     }
 
@@ -527,19 +535,18 @@ public void checkServerTrusted(X509Certificate[] certs, String authType) {
                 }
         };
         try {
-            SSLContext context;
-            switch (HttpService.sslSecurityProtocol) {
-                case TLSv1_2:
-                case TLSv1_1:
-                case TLSv1:
-                    context = SSLContext.getInstance("TLS");
-                    break;
-                default:
-                    context = SSLContext.getInstance("SSL");
+            String contextStr = "";
+            if (sslSecurityProtocol != null) {
+                contextStr = sslSecurityProtocol.toString().contains("SSL") ? "SSL" : "TLS";
+            } else if (useTLS || System.getProperty("java.version").compareTo("1.8") >= 0) {
+                contextStr = "TLS";
+            } else {
+                contextStr = "SSL";
             }
+            SSLContext context = SSLContext.getInstance(contextStr);
 
             context.init(null, trustAll, new java.security.SecureRandom());
-            return new SplunkHttpsSocketFactory(context.getSocketFactory(), HttpService.sslSecurityProtocol);
+            return new SplunkHttpsSocketFactory(context.getSocketFactory());
         } catch (Exception e) {
             throw new RuntimeException("Error setting up SSL socket factory: " + e, e);
         }
@@ -547,21 +554,24 @@ public void checkServerTrusted(X509Certificate[] certs, String authType) {
 
     private static final class SplunkHttpsSocketFactory extends SSLSocketFactory {
         private final SSLSocketFactory delegate;
-        private SSLSecurityProtocol sslSecurityProtocol;
 
-        private SplunkHttpsSocketFactory(SSLSocketFactory delegate) {
-            this.delegate = delegate;
-            this.sslSecurityProtocol = HttpService.sslSecurityProtocol;
-        }
+        public static String[] PROTOCOLS = {"SSLv3"};
+        public static String[] PROTOCOLS_TLS = {"TLSv1.3", "TLSv1.2", "TLSv1.1", "TLSv1"};
 
-        private SplunkHttpsSocketFactory(SSLSocketFactory delegate, SSLSecurityProtocol securityProtocol) {
+        private SplunkHttpsSocketFactory(SSLSocketFactory delegate) {
             this.delegate = delegate;
-            this.sslSecurityProtocol = securityProtocol;
         }
 
         private Socket configure(Socket socket) {
             if (socket instanceof SSLSocket) {
-                ((SSLSocket) socket).setEnabledProtocols(new String[]{sslSecurityProtocol.toString()});
+                if (sslSecurityProtocol != null) {
+                    String[] protocols = {sslSecurityProtocol.toString()};
+                    ((SSLSocket) socket).setEnabledProtocols(protocols);
+                } else if (useTLS || System.getProperty("java.version").compareTo("1.8") >= 0) {
+                    ((SSLSocket) socket).setEnabledProtocols(PROTOCOLS_TLS);
+                } else {
+                    ((SSLSocket) socket).setEnabledProtocols(PROTOCOLS);
+                }
             }
             return socket;
         }
diff --git a/splunk/com/splunk/IPv4Comparison.java b/splunk/src/main/java/com/splunk/IPv4Comparison.java
similarity index 100%
rename from splunk/com/splunk/IPv4Comparison.java
rename to splunk/src/main/java/com/splunk/IPv4Comparison.java
diff --git a/splunk/com/splunk/IPv4PivotFilter.java b/splunk/src/main/java/com/splunk/IPv4PivotFilter.java
similarity index 100%
rename from splunk/com/splunk/IPv4PivotFilter.java
rename to splunk/src/main/java/com/splunk/IPv4PivotFilter.java
diff --git a/splunk/com/splunk/Index.java b/splunk/src/main/java/com/splunk/Index.java
similarity index 97%
rename from splunk/com/splunk/Index.java
rename to splunk/src/main/java/com/splunk/Index.java
index 4a1239ab..f39dd2e7 100644
--- a/splunk/com/splunk/Index.java
+++ b/splunk/src/main/java/com/splunk/Index.java
@@ -40,7 +40,7 @@ public class Index extends Entity {
      * Creates a writable socket to this index.
      *
      * @return The writable socket.
-     * @throws IOException
+     * @throws IOException Throws exception if fails to write socket.
      */
     public Socket attach() throws IOException {
         Receiver receiver = service.getReceiver();
@@ -48,19 +48,20 @@ public Socket attach() throws IOException {
     }
 
     /**
-     * Writes events to this index, reusing the connection. 
-     * This method passes an output stream connected to the index to the 
-     * {@code run} method of the {@code ReceiverBehavior} object, then handles 
+     * Writes events to this index, reusing the connection.
+     * This method passes an output stream connected to the index to the
+     * {@code run} method of the {@code ReceiverBehavior} object, then handles
      * setting up and tearing down the socket.
      * <p>
-     * For an example of how to use this method, see 
-     * <a href="http://dev.splunk.com/view/SP-CAAAEJ2" target="_blank">How to 
-     * get data into Splunk</a> on 
-     * <a href="http://dev.splunk.com/view/SP-CAAAEJ2" 
+     * For an example of how to use this method, see
+     * <a href="http://dev.splunk.com/view/SP-CAAAEJ2" target="_blank">How to
+     * get data into Splunk</a> on
+     * <a href="http://dev.splunk.com/view/SP-CAAAEJ2"
      * target="_blank">dev.splunk.com</a>.
-     * 
-     * @param behavior The body of a {@code try} block as an anonymous 
+     *
+     * @param behavior The body of a {@code try} block as an anonymous
      * implementation of the {@code ReceiverBehavior} interface.
+     * @throws IOException The IOException class
      */
     public void attachWith(ReceiverBehavior behavior) throws IOException {
         Socket socket = null;
@@ -82,7 +83,7 @@ public void attachWith(ReceiverBehavior behavior) throws IOException {
      * @param args Optional arguments for this stream. Valid parameters are: 
      * "host", "host_regex", "source", and "sourcetype".
      * @return The socket.
-     * @throws IOException
+     * @throws IOException The IOException class
      */
     public Socket attach(Args args) throws IOException {
         Receiver receiver = service.getReceiver();
@@ -327,6 +328,7 @@ public String getLastInitTime() {
      * is older than this, Splunk does not create or rebuild its bloomfilter.  
      * The valid format is <i>number</i> followed by a time unit ("s", "m", "h",
      * or "d"). For example, "30d" for 30 days.
+     * @return String value
      */
     public String getMaxBloomBackfillBucketAge() {
         return getString("maxBloomBackfillBucketAge", null);
@@ -358,10 +360,10 @@ public String getMaxDataSize() {
     /**
      * Returns the maximum number of hot buckets that can exist for this index.
      *
-     * @return The maximum number of hot buckets.
+     * @return The maximum number of hot buckets or "auto" (which means 3).
      */
-    public int getMaxHotBuckets() {
-        return getInteger("maxHotBuckets");
+    public String getMaxHotBuckets() {
+        return getString("maxHotBuckets");
     }
 
     /**
@@ -441,6 +443,7 @@ public int getMaxTotalDataSizeMB() {
      * If there are any acknowledged events sharing this raw slice, the 
      * {@code MaxTimeUnreplicatedWithAcksparamater} applies instead.
      * @see #getMaxTimeUnreplicatedWithAcks
+     * @return int value
      */
     public int getMaxTimeUnreplicatedNoAcks() {
         return getInteger("maxTimeUnreplicatedNoAcks");
@@ -451,6 +454,7 @@ public int getMaxTimeUnreplicatedNoAcks() {
      * unacknowledged in a raw slice. This value only applies when indexer 
      * acknowledgement is enabled on forwarders and replication is enabled with 
      * clustering.
+     * @return int value
      */
     public int getMaxTimeUnreplicatedWithAcks() {
         return getInteger("maxTimeUnreplicatedWithAcks");
@@ -720,8 +724,7 @@ public void setBucketRebuildMemoryHint(String value) {
     /**
      * Sets the destination path for the frozen archive, where Splunk
      * automatically puts frozen buckets. The bucket freezing policy is as
-     *follows:
-     * <p>
+     * follows:
      * <ul><li><b>New-style buckets (4.2 and later):</b> All files are removed
      * except the raw data. To thaw frozen buckets, run {@code Splunk rebuild
      * <bucket dir>} on the bucket, then move the buckets to the thawed
@@ -828,9 +831,9 @@ public void setMaxDataSize(String size) {
      * @see #setMaxHotIdleSecs
      * @see #getMaxHotIdleSecs
      *
-     * @param size The maximum number of hot buckets per index.
+     * @param size The maximum number of hot buckets per index, or an 'auto' string.
      */
-    public void setMaxHotBuckets(int size) {
+    public void setMaxHotBuckets(String size) {
         setCacheValue("maxHotBuckets", size);
     }
 
diff --git a/splunk/com/splunk/IndexCollection.java b/splunk/src/main/java/com/splunk/IndexCollection.java
similarity index 100%
rename from splunk/com/splunk/IndexCollection.java
rename to splunk/src/main/java/com/splunk/IndexCollection.java
diff --git a/splunk/com/splunk/IndexCollectionArgs.java b/splunk/src/main/java/com/splunk/IndexCollectionArgs.java
similarity index 100%
rename from splunk/com/splunk/IndexCollectionArgs.java
rename to splunk/src/main/java/com/splunk/IndexCollectionArgs.java
diff --git a/splunk/com/splunk/Input.java b/splunk/src/main/java/com/splunk/Input.java
similarity index 97%
rename from splunk/com/splunk/Input.java
rename to splunk/src/main/java/com/splunk/Input.java
index 09ac441b..95ca6c8d 100644
--- a/splunk/com/splunk/Input.java
+++ b/splunk/src/main/java/com/splunk/Input.java
@@ -39,6 +39,7 @@ public class Input extends Entity {
      * Returns an {@code InputKind} representing this input's type.
      *
      * The input kind is inferred from the input's path.
+     * @return InputKind instance
      */
     public InputKind getKind() {
         String[] pathComponents = 
diff --git a/splunk/com/splunk/InputCollection.java b/splunk/src/main/java/com/splunk/InputCollection.java
similarity index 98%
rename from splunk/com/splunk/InputCollection.java
rename to splunk/src/main/java/com/splunk/InputCollection.java
index 9714e66d..0fcefa02 100644
--- a/splunk/com/splunk/InputCollection.java
+++ b/splunk/src/main/java/com/splunk/InputCollection.java
@@ -64,7 +64,7 @@ public class InputCollection extends EntityCollection<Input> {
      * <li> The stanza (for Windows Registry inputs)</li>
      * <li> The name of the configuration (for Windows AD inputs)</li></ul>
      * @return No return value.
-     * @throws UnsupportedOperationException
+     * @throws UnsupportedOperationException The UnsupportedOperationException instance
      */
     @Override public Input create(String name) {
         throw new UnsupportedOperationException();
@@ -88,7 +88,7 @@ public class InputCollection extends EntityCollection<Input> {
      * <a href="http://dev.splunk.com/view/SP-CAAAEJ2" 
      * target="_blank">dev.splunk.com</a>.
      * @return No return value.
-     * @throws UnsupportedOperationException
+     * @throws UnsupportedOperationException The UnsupportedOperationException instance
      */
     @Override public Input create(String name, Map args) {
         throw new UnsupportedOperationException();
diff --git a/splunk/com/splunk/InputKind.java b/splunk/src/main/java/com/splunk/InputKind.java
similarity index 100%
rename from splunk/com/splunk/InputKind.java
rename to splunk/src/main/java/com/splunk/InputKind.java
diff --git a/splunk/com/splunk/InsertRootElementFilterInputStream.java b/splunk/src/main/java/com/splunk/InsertRootElementFilterInputStream.java
similarity index 100%
rename from splunk/com/splunk/InsertRootElementFilterInputStream.java
rename to splunk/src/main/java/com/splunk/InsertRootElementFilterInputStream.java
diff --git a/splunk/com/splunk/Job.java b/splunk/src/main/java/com/splunk/Job.java
similarity index 100%
rename from splunk/com/splunk/Job.java
rename to splunk/src/main/java/com/splunk/Job.java
diff --git a/splunk/com/splunk/JobArgs.java b/splunk/src/main/java/com/splunk/JobArgs.java
similarity index 100%
rename from splunk/com/splunk/JobArgs.java
rename to splunk/src/main/java/com/splunk/JobArgs.java
diff --git a/splunk/com/splunk/JobCollection.java b/splunk/src/main/java/com/splunk/JobCollection.java
similarity index 100%
rename from splunk/com/splunk/JobCollection.java
rename to splunk/src/main/java/com/splunk/JobCollection.java
diff --git a/splunk/com/splunk/JobEventsArgs.java b/splunk/src/main/java/com/splunk/JobEventsArgs.java
similarity index 100%
rename from splunk/com/splunk/JobEventsArgs.java
rename to splunk/src/main/java/com/splunk/JobEventsArgs.java
diff --git a/splunk/com/splunk/JobExportArgs.java b/splunk/src/main/java/com/splunk/JobExportArgs.java
similarity index 100%
rename from splunk/com/splunk/JobExportArgs.java
rename to splunk/src/main/java/com/splunk/JobExportArgs.java
diff --git a/splunk/com/splunk/JobResultsArgs.java b/splunk/src/main/java/com/splunk/JobResultsArgs.java
similarity index 100%
rename from splunk/com/splunk/JobResultsArgs.java
rename to splunk/src/main/java/com/splunk/JobResultsArgs.java
diff --git a/splunk/com/splunk/JobResultsPreviewArgs.java b/splunk/src/main/java/com/splunk/JobResultsPreviewArgs.java
similarity index 100%
rename from splunk/com/splunk/JobResultsPreviewArgs.java
rename to splunk/src/main/java/com/splunk/JobResultsPreviewArgs.java
diff --git a/splunk/com/splunk/JobSummaryArgs.java b/splunk/src/main/java/com/splunk/JobSummaryArgs.java
similarity index 100%
rename from splunk/com/splunk/JobSummaryArgs.java
rename to splunk/src/main/java/com/splunk/JobSummaryArgs.java
diff --git a/splunk/com/splunk/License.java b/splunk/src/main/java/com/splunk/License.java
similarity index 100%
rename from splunk/com/splunk/License.java
rename to splunk/src/main/java/com/splunk/License.java
diff --git a/splunk/com/splunk/LicenseGroup.java b/splunk/src/main/java/com/splunk/LicenseGroup.java
similarity index 100%
rename from splunk/com/splunk/LicenseGroup.java
rename to splunk/src/main/java/com/splunk/LicenseGroup.java
diff --git a/splunk/com/splunk/LicenseMessage.java b/splunk/src/main/java/com/splunk/LicenseMessage.java
similarity index 100%
rename from splunk/com/splunk/LicenseMessage.java
rename to splunk/src/main/java/com/splunk/LicenseMessage.java
diff --git a/splunk/com/splunk/LicensePool.java b/splunk/src/main/java/com/splunk/LicensePool.java
similarity index 99%
rename from splunk/com/splunk/LicensePool.java
rename to splunk/src/main/java/com/splunk/LicensePool.java
index a878adf9..613fcaac 100644
--- a/splunk/com/splunk/LicensePool.java
+++ b/splunk/src/main/java/com/splunk/LicensePool.java
@@ -98,7 +98,7 @@ public Map<String, Long> getSlavesUsageBytes() {
 
     /**
      * Returns the stack ID for this license pool. Valid values are:
-     * <p><ul>
+     * <ul>
      * <li>"download-trial"</li>
      * <li>"enterprise"</li>
      * <li>"forwarder"</li>
diff --git a/splunk/com/splunk/LicensePoolCollection.java b/splunk/src/main/java/com/splunk/LicensePoolCollection.java
similarity index 100%
rename from splunk/com/splunk/LicensePoolCollection.java
rename to splunk/src/main/java/com/splunk/LicensePoolCollection.java
diff --git a/splunk/com/splunk/LicenseSlave.java b/splunk/src/main/java/com/splunk/LicenseSlave.java
similarity index 100%
rename from splunk/com/splunk/LicenseSlave.java
rename to splunk/src/main/java/com/splunk/LicenseSlave.java
diff --git a/splunk/com/splunk/LicenseStack.java b/splunk/src/main/java/com/splunk/LicenseStack.java
similarity index 100%
rename from splunk/com/splunk/LicenseStack.java
rename to splunk/src/main/java/com/splunk/LicenseStack.java
diff --git a/splunk/com/splunk/LimitPivotFilter.java b/splunk/src/main/java/com/splunk/LimitPivotFilter.java
similarity index 99%
rename from splunk/com/splunk/LimitPivotFilter.java
rename to splunk/src/main/java/com/splunk/LimitPivotFilter.java
index ed29d4fa..dd4b89a0 100644
--- a/splunk/com/splunk/LimitPivotFilter.java
+++ b/splunk/src/main/java/com/splunk/LimitPivotFilter.java
@@ -54,6 +54,7 @@ public class LimitPivotFilter extends PivotFilter {
 
     /**
      * Return the name of the field to use for sorting.
+     * @return String value
      */
     public String getAttributeName() {
         return this.sortAttribute;
diff --git a/splunk/com/splunk/Logger.java b/splunk/src/main/java/com/splunk/Logger.java
similarity index 100%
rename from splunk/com/splunk/Logger.java
rename to splunk/src/main/java/com/splunk/Logger.java
diff --git a/splunk/com/splunk/LookupDataModelCalculation.java b/splunk/src/main/java/com/splunk/LookupDataModelCalculation.java
similarity index 100%
rename from splunk/com/splunk/LookupDataModelCalculation.java
rename to splunk/src/main/java/com/splunk/LookupDataModelCalculation.java
diff --git a/splunk/com/splunk/Message.java b/splunk/src/main/java/com/splunk/Message.java
similarity index 100%
rename from splunk/com/splunk/Message.java
rename to splunk/src/main/java/com/splunk/Message.java
diff --git a/splunk/com/splunk/MessageCollection.java b/splunk/src/main/java/com/splunk/MessageCollection.java
similarity index 100%
rename from splunk/com/splunk/MessageCollection.java
rename to splunk/src/main/java/com/splunk/MessageCollection.java
diff --git a/splunk/com/splunk/ModularInputKind.java b/splunk/src/main/java/com/splunk/ModularInputKind.java
similarity index 100%
rename from splunk/com/splunk/ModularInputKind.java
rename to splunk/src/main/java/com/splunk/ModularInputKind.java
diff --git a/splunk/com/splunk/ModularInputKindArgument.java b/splunk/src/main/java/com/splunk/ModularInputKindArgument.java
similarity index 100%
rename from splunk/com/splunk/ModularInputKindArgument.java
rename to splunk/src/main/java/com/splunk/ModularInputKindArgument.java
diff --git a/splunk/com/splunk/MonitorInput.java b/splunk/src/main/java/com/splunk/MonitorInput.java
similarity index 100%
rename from splunk/com/splunk/MonitorInput.java
rename to splunk/src/main/java/com/splunk/MonitorInput.java
diff --git a/splunk/com/splunk/MultiResultsReader.java b/splunk/src/main/java/com/splunk/MultiResultsReader.java
similarity index 94%
rename from splunk/com/splunk/MultiResultsReader.java
rename to splunk/src/main/java/com/splunk/MultiResultsReader.java
index c9707fa5..cc57b97f 100644
--- a/splunk/com/splunk/MultiResultsReader.java
+++ b/splunk/src/main/java/com/splunk/MultiResultsReader.java
@@ -44,7 +44,7 @@ public final Iterator<SearchResults> iterator() {
 
     /**
      * Closes the reader and releases resources.
-     * @throws IOException
+     * @throws IOException If reader is not closed.
      */
     public final void close() throws IOException {
         resultsReader.close();
diff --git a/splunk/com/splunk/MultiResultsReaderJson.java b/splunk/src/main/java/com/splunk/MultiResultsReaderJson.java
similarity index 94%
rename from splunk/com/splunk/MultiResultsReaderJson.java
rename to splunk/src/main/java/com/splunk/MultiResultsReaderJson.java
index 183c194e..77a2c9f6 100644
--- a/splunk/com/splunk/MultiResultsReaderJson.java
+++ b/splunk/src/main/java/com/splunk/MultiResultsReaderJson.java
@@ -34,7 +34,7 @@ public class MultiResultsReaderJson
      * may occur if you try to parse a stream with a different format.
      *
      * @param inputStream The JSON stream to parse.
-     * @throws IOException
+     * @throws IOException The IOException instance
      */
     public MultiResultsReaderJson(InputStream inputStream) throws IOException {
         super(new ResultsReaderJson(inputStream, true));
diff --git a/splunk/com/splunk/MultiResultsReaderXml.java b/splunk/src/main/java/com/splunk/MultiResultsReaderXml.java
similarity index 94%
rename from splunk/com/splunk/MultiResultsReaderXml.java
rename to splunk/src/main/java/com/splunk/MultiResultsReaderXml.java
index d2377529..53088389 100644
--- a/splunk/com/splunk/MultiResultsReaderXml.java
+++ b/splunk/src/main/java/com/splunk/MultiResultsReaderXml.java
@@ -34,7 +34,7 @@ public class MultiResultsReaderXml
      * may occur if you try to parse a stream with a different format.
      *
      * @param inputStream The XML stream to parse.
-     * @throws IOException
+     * @throws IOException The IOException instance
      */
     public MultiResultsReaderXml(InputStream inputStream) throws IOException {
         super(new ResultsReaderXml(inputStream, true));
diff --git a/splunk/com/splunk/NumberComparison.java b/splunk/src/main/java/com/splunk/NumberComparison.java
similarity index 100%
rename from splunk/com/splunk/NumberComparison.java
rename to splunk/src/main/java/com/splunk/NumberComparison.java
diff --git a/splunk/com/splunk/NumberPivotFilter.java b/splunk/src/main/java/com/splunk/NumberPivotFilter.java
similarity index 100%
rename from splunk/com/splunk/NumberPivotFilter.java
rename to splunk/src/main/java/com/splunk/NumberPivotFilter.java
diff --git a/splunk/com/splunk/NumberPivotRowSplit.java b/splunk/src/main/java/com/splunk/NumberPivotRowSplit.java
similarity index 100%
rename from splunk/com/splunk/NumberPivotRowSplit.java
rename to splunk/src/main/java/com/splunk/NumberPivotRowSplit.java
diff --git a/splunk/com/splunk/NumericPivotColumnSplit.java b/splunk/src/main/java/com/splunk/NumericPivotColumnSplit.java
similarity index 100%
rename from splunk/com/splunk/NumericPivotColumnSplit.java
rename to splunk/src/main/java/com/splunk/NumericPivotColumnSplit.java
diff --git a/splunk/com/splunk/OutputDefault.java b/splunk/src/main/java/com/splunk/OutputDefault.java
similarity index 99%
rename from splunk/com/splunk/OutputDefault.java
rename to splunk/src/main/java/com/splunk/OutputDefault.java
index c8f10145..abd9733f 100644
--- a/splunk/com/splunk/OutputDefault.java
+++ b/splunk/src/main/java/com/splunk/OutputDefault.java
@@ -193,18 +193,18 @@ public boolean isForwardedIndexFilterDisable() {
     /**
      * Sets how long to wait before throwing out all new events until the output
      * queue has space. The default value is -1, which means to not drop events.
-     * <p><blockquote>
+     * <blockquote>
      * <b>Caution:</b> Do not set this value to a positive integer if you are
      * monitoring files.
      * </blockquote><p>
      * Setting this to -1 or 0 causes the output queue to block when it gets
      * full, which causes further blocking up the processing chain. If any
      * target group's queue is blocked, no more data reaches any other target
-     * group.
+     * group.</p>
      * <p>
      * Using auto load-balancing is the best way to minimize this condition,
      * because, in that case, multiple receivers must be down or jammed before 
-     * queue blocking can occur.
+     * queue blocking can occur.</p>
      * @see #getAutoLB
      *
      * @param dropEventsOnQueueFull The time to wait before throwing out events,
diff --git a/splunk/com/splunk/OutputGroup.java b/splunk/src/main/java/com/splunk/OutputGroup.java
similarity index 99%
rename from splunk/com/splunk/OutputGroup.java
rename to splunk/src/main/java/com/splunk/OutputGroup.java
index ca619343..66f8653c 100644
--- a/splunk/com/splunk/OutputGroup.java
+++ b/splunk/src/main/java/com/splunk/OutputGroup.java
@@ -112,18 +112,18 @@ public void setCompressed(boolean compressed) {
     /**
      * Sets how long to wait before throwing out all new events until the output
      * queue has space. The default value is -1, which means to not drop events.
-     * <p><blockquote>
+     * <blockquote>
      * <b>Caution:</b> Do not set this value to a positive integer if you are
      * monitoring files.
      * </blockquote><p>
      * Setting this to -1 or 0 causes the output queue to block when it gets
      * full, which causes further blocking up the processing chain. If any
      * target group's queue is blocked, no more data reaches any other target
-     * group.
+     * group.</p>
      * <p>
      * Using auto load-balancing is the best way to minimize this condition,
      * because, in that case, multiple receivers must be down or jammed before 
-     * queue blocking can occur.
+     * queue blocking can occur.</p>
      * @see #getAutoLB
      *
      * @param dropEventsOnQueueFull The time to wait before throwing out events,
diff --git a/splunk/com/splunk/OutputServer.java b/splunk/src/main/java/com/splunk/OutputServer.java
similarity index 100%
rename from splunk/com/splunk/OutputServer.java
rename to splunk/src/main/java/com/splunk/OutputServer.java
diff --git a/splunk/com/splunk/OutputServerAllConnections.java b/splunk/src/main/java/com/splunk/OutputServerAllConnections.java
similarity index 100%
rename from splunk/com/splunk/OutputServerAllConnections.java
rename to splunk/src/main/java/com/splunk/OutputServerAllConnections.java
diff --git a/splunk/com/splunk/OutputSyslog.java b/splunk/src/main/java/com/splunk/OutputSyslog.java
similarity index 100%
rename from splunk/com/splunk/OutputSyslog.java
rename to splunk/src/main/java/com/splunk/OutputSyslog.java
diff --git a/splunk/com/splunk/Password.java b/splunk/src/main/java/com/splunk/Password.java
similarity index 100%
rename from splunk/com/splunk/Password.java
rename to splunk/src/main/java/com/splunk/Password.java
diff --git a/splunk/com/splunk/PasswordCollection.java b/splunk/src/main/java/com/splunk/PasswordCollection.java
similarity index 100%
rename from splunk/com/splunk/PasswordCollection.java
rename to splunk/src/main/java/com/splunk/PasswordCollection.java
diff --git a/splunk/com/splunk/Pivot.java b/splunk/src/main/java/com/splunk/Pivot.java
similarity index 100%
rename from splunk/com/splunk/Pivot.java
rename to splunk/src/main/java/com/splunk/Pivot.java
diff --git a/splunk/com/splunk/PivotCellValue.java b/splunk/src/main/java/com/splunk/PivotCellValue.java
similarity index 100%
rename from splunk/com/splunk/PivotCellValue.java
rename to splunk/src/main/java/com/splunk/PivotCellValue.java
diff --git a/splunk/com/splunk/PivotColumnSplit.java b/splunk/src/main/java/com/splunk/PivotColumnSplit.java
similarity index 100%
rename from splunk/com/splunk/PivotColumnSplit.java
rename to splunk/src/main/java/com/splunk/PivotColumnSplit.java
diff --git a/splunk/com/splunk/PivotFilter.java b/splunk/src/main/java/com/splunk/PivotFilter.java
similarity index 100%
rename from splunk/com/splunk/PivotFilter.java
rename to splunk/src/main/java/com/splunk/PivotFilter.java
diff --git a/splunk/com/splunk/PivotRowSplit.java b/splunk/src/main/java/com/splunk/PivotRowSplit.java
similarity index 100%
rename from splunk/com/splunk/PivotRowSplit.java
rename to splunk/src/main/java/com/splunk/PivotRowSplit.java
diff --git a/splunk/com/splunk/PivotSpecification.java b/splunk/src/main/java/com/splunk/PivotSpecification.java
similarity index 98%
rename from splunk/com/splunk/PivotSpecification.java
rename to splunk/src/main/java/com/splunk/PivotSpecification.java
index 0ddd0e03..1aa154a9 100644
--- a/splunk/com/splunk/PivotSpecification.java
+++ b/splunk/src/main/java/com/splunk/PivotSpecification.java
@@ -49,6 +49,7 @@ public class PivotSpecification {
      * namespace for acceleration.
      *
      * @param namespace a string specifying a namespace.
+     * @return PivotSpecification instance
      */
     public PivotSpecification setAccelerationNamespace(String namespace) {
         this.accelerationNamespace = namespace;
@@ -60,6 +61,7 @@ public PivotSpecification setAccelerationNamespace(String namespace) {
      * DataModelObject instance, as the acceleration cache for this pivot.
      *
      * @param sid the SID of a job.
+     * @return PivotSpecification instance
      */
     public PivotSpecification setAccelerationJob(String sid) {
         if (sid == null) {
@@ -75,6 +77,7 @@ public PivotSpecification setAccelerationJob(String sid) {
      * DataModelObject instance, as the acceleration cache for this pivot.
      *
      * @param job a Job object.
+     * @return PivotSpecification instance
      */
     public PivotSpecification setAccelerationJob(Job job) {
         setAccelerationJob(job.getSid());
@@ -282,6 +285,8 @@ public PivotSpecification addRowSplit(String field, String label, Integer start,
     /**
      * Add a row split on a boolean valued field.
      *
+     * @param field String value
+     * @param label String value
      * @param trueDisplayValue the string to display in the true valued row label.
      * @param falseDisplayValue the string to display in the false valued row label;
      * @return The PivotSpecification you are modifying.
diff --git a/splunk/com/splunk/PortInput.java b/splunk/src/main/java/com/splunk/PortInput.java
similarity index 98%
rename from splunk/com/splunk/PortInput.java
rename to splunk/src/main/java/com/splunk/PortInput.java
index af9aa9a3..f0f2be1f 100644
--- a/splunk/com/splunk/PortInput.java
+++ b/splunk/src/main/java/com/splunk/PortInput.java
@@ -39,6 +39,7 @@ abstract class PortInput extends Input {
     
     /**
      * Returns the port that this input is listening on.
+     * @return int value
      */
     public int getPort() {
         String[] nameComponents = this.getName().split(":");
diff --git a/splunk/com/splunk/RangePivotColumnSplit.java b/splunk/src/main/java/com/splunk/RangePivotColumnSplit.java
similarity index 100%
rename from splunk/com/splunk/RangePivotColumnSplit.java
rename to splunk/src/main/java/com/splunk/RangePivotColumnSplit.java
diff --git a/splunk/com/splunk/RangePivotRowSplit.java b/splunk/src/main/java/com/splunk/RangePivotRowSplit.java
similarity index 100%
rename from splunk/com/splunk/RangePivotRowSplit.java
rename to splunk/src/main/java/com/splunk/RangePivotRowSplit.java
diff --git a/splunk/com/splunk/Receiver.java b/splunk/src/main/java/com/splunk/Receiver.java
similarity index 97%
rename from splunk/com/splunk/Receiver.java
rename to splunk/src/main/java/com/splunk/Receiver.java
index ae553ac0..e2369da8 100644
--- a/splunk/com/splunk/Receiver.java
+++ b/splunk/src/main/java/com/splunk/Receiver.java
@@ -43,7 +43,7 @@ public class Receiver {
      * Creates a writable socket to this index.
      *
      * @return The socket.
-     * @throws IOException
+     * @throws IOException The IOException instance
      */
     public Socket attach() throws IOException {
         return attach(null, null);
@@ -54,7 +54,7 @@ public Socket attach() throws IOException {
      *
      * @param indexName The index to write to.
      * @return The socket.
-     * @throws IOException
+     * @throws IOException The IOException instance
      */
     public Socket attach(String indexName) throws IOException {
         return attach(indexName, null);
@@ -66,7 +66,7 @@ public Socket attach(String indexName) throws IOException {
      * @param args Optional arguments for this stream. Valid parameters are:
      * "host", "host_regex", "source", and "sourcetype".
      * @return The socket.
-     * @throws IOException
+     * @throws IOException The IOException instance
      */
     public Socket attach(Args args) throws IOException {
         return attach(null, args);
@@ -79,7 +79,7 @@ public Socket attach(Args args) throws IOException {
      * @param args Optional arguments for this stream. Valid parameters are:
      * "host", "host_regex", "source", and "sourcetype".
      * @return The socket.
-     * @throws IOException
+     * @throws IOException The IOException instance
      */
     public Socket attach(String indexName, Args args) throws IOException {
         Socket socket = service.open();
diff --git a/splunk/com/splunk/ReceiverBehavior.java b/splunk/src/main/java/com/splunk/ReceiverBehavior.java
similarity index 100%
rename from splunk/com/splunk/ReceiverBehavior.java
rename to splunk/src/main/java/com/splunk/ReceiverBehavior.java
diff --git a/splunk/com/splunk/Record.java b/splunk/src/main/java/com/splunk/Record.java
similarity index 100%
rename from splunk/com/splunk/Record.java
rename to splunk/src/main/java/com/splunk/Record.java
diff --git a/splunk/com/splunk/RegexpDataModelCalculation.java b/splunk/src/main/java/com/splunk/RegexpDataModelCalculation.java
similarity index 100%
rename from splunk/com/splunk/RegexpDataModelCalculation.java
rename to splunk/src/main/java/com/splunk/RegexpDataModelCalculation.java
diff --git a/splunk/com/splunk/RequestMessage.java b/splunk/src/main/java/com/splunk/RequestMessage.java
similarity index 95%
rename from splunk/com/splunk/RequestMessage.java
rename to splunk/src/main/java/com/splunk/RequestMessage.java
index 5e258ed2..816e1fe2 100644
--- a/splunk/com/splunk/RequestMessage.java
+++ b/splunk/src/main/java/com/splunk/RequestMessage.java
@@ -32,7 +32,11 @@ public class RequestMessage {
     /** Creates a new {@code RequestMessage} instance. */
     public RequestMessage() {}
 
-    /** Creates a new {@code RequestMessage} instance with a given method */
+    /**
+     * Creates a new {@code RequestMessage} instance with a given method
+     *
+     * @param method String value
+     */
     public RequestMessage(String method) {
         this.method = method;
     }
diff --git a/splunk/com/splunk/Resource.java b/splunk/src/main/java/com/splunk/Resource.java
similarity index 100%
rename from splunk/com/splunk/Resource.java
rename to splunk/src/main/java/com/splunk/Resource.java
diff --git a/splunk/com/splunk/ResourceCollection.java b/splunk/src/main/java/com/splunk/ResourceCollection.java
similarity index 100%
rename from splunk/com/splunk/ResourceCollection.java
rename to splunk/src/main/java/com/splunk/ResourceCollection.java
diff --git a/splunk/com/splunk/ResponseMessage.java b/splunk/src/main/java/com/splunk/ResponseMessage.java
similarity index 100%
rename from splunk/com/splunk/ResponseMessage.java
rename to splunk/src/main/java/com/splunk/ResponseMessage.java
diff --git a/splunk/com/splunk/ResultsReader.java b/splunk/src/main/java/com/splunk/ResultsReader.java
similarity index 100%
rename from splunk/com/splunk/ResultsReader.java
rename to splunk/src/main/java/com/splunk/ResultsReader.java
diff --git a/splunk/com/splunk/ResultsReaderCsv.java b/splunk/src/main/java/com/splunk/ResultsReaderCsv.java
similarity index 95%
rename from splunk/com/splunk/ResultsReaderCsv.java
rename to splunk/src/main/java/com/splunk/ResultsReaderCsv.java
index 6cfb4e13..64b3dec8 100644
--- a/splunk/com/splunk/ResultsReaderCsv.java
+++ b/splunk/src/main/java/com/splunk/ResultsReaderCsv.java
@@ -43,7 +43,7 @@ public class ResultsReaderCsv extends ResultsReader {
      * a different type of stream, unpredictable results may occur. 
      *
      * @param inputStream The CSV stream to parse.
-     * @throws IOException
+     * @throws IOException The IOException instance
      */
     public ResultsReaderCsv(InputStream inputStream) throws IOException {
         super(inputStream, false);
diff --git a/splunk/com/splunk/ResultsReaderJson.java b/splunk/src/main/java/com/splunk/ResultsReaderJson.java
similarity index 97%
rename from splunk/com/splunk/ResultsReaderJson.java
rename to splunk/src/main/java/com/splunk/ResultsReaderJson.java
index fdf3bcd8..6544f614 100644
--- a/splunk/com/splunk/ResultsReaderJson.java
+++ b/splunk/src/main/java/com/splunk/ResultsReaderJson.java
@@ -49,7 +49,7 @@ public class ResultsReaderJson extends ResultsReader {
      * a different type of stream, unpredictable results may occur. 
      *
      * @param inputStream The JSON stream to parse.
-     * @throws IOException
+     * @throws IOException The IOException instance
      */
     public ResultsReaderJson(InputStream inputStream) throws IOException {
         this(inputStream, false);
diff --git a/splunk/com/splunk/ResultsReaderXml.java b/splunk/src/main/java/com/splunk/ResultsReaderXml.java
similarity index 96%
rename from splunk/com/splunk/ResultsReaderXml.java
rename to splunk/src/main/java/com/splunk/ResultsReaderXml.java
index 76cb45c0..e242ff8e 100644
--- a/splunk/com/splunk/ResultsReaderXml.java
+++ b/splunk/src/main/java/com/splunk/ResultsReaderXml.java
@@ -53,7 +53,7 @@ public class ResultsReaderXml
      * data, and only extracts finalized data.
      *
      * @param inputStream The XML stream to parse.
-     * @throws IOException
+     * @throws IOException The IOException instance
      */
     public ResultsReaderXml(InputStream inputStream) throws IOException {
         this(inputStream, false);
diff --git a/splunk/com/splunk/Role.java b/splunk/src/main/java/com/splunk/Role.java
similarity index 98%
rename from splunk/com/splunk/Role.java
rename to splunk/src/main/java/com/splunk/Role.java
index 5be53397..5de4dc9a 100644
--- a/splunk/com/splunk/Role.java
+++ b/splunk/src/main/java/com/splunk/Role.java
@@ -290,14 +290,14 @@ public void setDefaultApp(String defaultApp) {
      * allowed indexes to search. In combining multiple roles, the effective 
      * value for each attribute is the value with the broadest permissions. 
      * <p>
-     * Default Splunk roles are:
-     * <p><ul>
+     * Default Splunk roles are:</p>
+     * <ul>
      * <li>admin</li>
      * <li>can_delete</li>
      * <li>power</li>
      * <li>user</li>
      * </ul><p>
-     * You also can specify additional roles that have been created. 
+     * You also can specify additional roles that have been created.</p>
      *
      * @param importedRoles An array of roles from which to import attributes.
      */
@@ -309,16 +309,16 @@ public void setImportedRoles(String[] importedRoles) {
      * Sets a role to import attributes from, such as capabilities and allowed 
      * indexes to search. Use this method to set a single role.
      * <p>Importing other roles imports all aspects of that role, such as 
-     * capabilities and allowed indexes to search. 
+     * capabilities and allowed indexes to search. </p>
      * <p>
-     * Default Splunk roles are:
-     * <p><ul>
+     * Default Splunk roles are:</p>
+     * <ul>
      * <li>admin</li>
      * <li>can_delete</li>
      * <li>power</li>
      * <li>user</li>
      * </ul><p>
-     * You also can specify additional roles that have been created. 
+     * You also can specify additional roles that have been created.</p>
      *
      * @param importedRole A role from which to import attributes.
      */
diff --git a/splunk/com/splunk/SSLSecurityProtocol.java b/splunk/src/main/java/com/splunk/SSLSecurityProtocol.java
similarity index 100%
rename from splunk/com/splunk/SSLSecurityProtocol.java
rename to splunk/src/main/java/com/splunk/SSLSecurityProtocol.java
diff --git a/splunk/com/splunk/SavedSearch.java b/splunk/src/main/java/com/splunk/SavedSearch.java
similarity index 99%
rename from splunk/com/splunk/SavedSearch.java
rename to splunk/src/main/java/com/splunk/SavedSearch.java
index c0c49efc..96979316 100644
--- a/splunk/com/splunk/SavedSearch.java
+++ b/splunk/src/main/java/com/splunk/SavedSearch.java
@@ -58,6 +58,7 @@ public void acknowledge() {
      * Runs the saved search.
      *
      * @return The search job.
+     * @throws InterruptedException The InterruptedException instance
      */
     public Job dispatch() throws InterruptedException {
         return dispatch(null);
@@ -76,6 +77,7 @@ public Job dispatch() throws InterruptedException {
      * <li>"force_dispatch": A Boolean that indicates whether to start a new 
      * search if another instance of this search is already running.</li></ul>
      * @return The search job.
+     * @throws InterruptedException The InterruptedException instance
      */
     public Job dispatch(Map args) throws InterruptedException {
         ResponseMessage response = service.post(actionPath("dispatch"), args);
@@ -97,6 +99,7 @@ public Job dispatch(Map args) throws InterruptedException {
      *
      * @param args Dispatch arguments (see {@link SavedSearchDispatchArgs}).
      * @return The search job.
+     * @throws InterruptedException The InterruptedException instance
      */
     // NOTE: This overload exists primarily to provide better documentation
     //       for the "args" parameter.
diff --git a/splunk/com/splunk/SavedSearchCollection.java b/splunk/src/main/java/com/splunk/SavedSearchCollection.java
similarity index 100%
rename from splunk/com/splunk/SavedSearchCollection.java
rename to splunk/src/main/java/com/splunk/SavedSearchCollection.java
diff --git a/splunk/com/splunk/SavedSearchCollectionArgs.java b/splunk/src/main/java/com/splunk/SavedSearchCollectionArgs.java
similarity index 100%
rename from splunk/com/splunk/SavedSearchCollectionArgs.java
rename to splunk/src/main/java/com/splunk/SavedSearchCollectionArgs.java
diff --git a/splunk/com/splunk/SavedSearchDispatchArgs.java b/splunk/src/main/java/com/splunk/SavedSearchDispatchArgs.java
similarity index 100%
rename from splunk/com/splunk/SavedSearchDispatchArgs.java
rename to splunk/src/main/java/com/splunk/SavedSearchDispatchArgs.java
diff --git a/splunk/com/splunk/ScriptInput.java b/splunk/src/main/java/com/splunk/ScriptInput.java
similarity index 100%
rename from splunk/com/splunk/ScriptInput.java
rename to splunk/src/main/java/com/splunk/ScriptInput.java
diff --git a/splunk/com/splunk/SearchResults.java b/splunk/src/main/java/com/splunk/SearchResults.java
similarity index 100%
rename from splunk/com/splunk/SearchResults.java
rename to splunk/src/main/java/com/splunk/SearchResults.java
diff --git a/splunk/com/splunk/Service.java b/splunk/src/main/java/com/splunk/Service.java
similarity index 96%
rename from splunk/com/splunk/Service.java
rename to splunk/src/main/java/com/splunk/Service.java
index 8617a0c4..8856c1e2 100644
--- a/splunk/com/splunk/Service.java
+++ b/splunk/src/main/java/com/splunk/Service.java
@@ -115,6 +115,7 @@ public Service(String host, int port, String scheme) {
      * @param port The port number of the service.
      * @param scheme Scheme for accessing the service ({@code http} or
      * {@code https}).
+     * @param httpsHandler The URLStreamHandler instance
      */
     public Service(String host, int port, String scheme,
         URLStreamHandler httpsHandler) {
@@ -373,6 +374,7 @@ public String[] getCapabilities() {
 
     /**
      * Returns the collection of data models.
+     * @return DataModelCollection instance
      */
     public DataModelCollection getDataModels() {
         return new DataModelCollection(this);
@@ -1211,7 +1213,7 @@ public InputStream oneshotSearch(String query, Args args) {
      * @param port The port to open. This port must already have been
      * created as an allowable TCP input to the service.
      * @return The socket.
-     * @throws java.io.IOException
+     * @throws java.io.IOException The IOException instance
      */
     public Socket open(int port) throws IOException {
         return new Socket(this.host, port);
diff --git a/splunk/com/splunk/ServiceArgs.java b/splunk/src/main/java/com/splunk/ServiceArgs.java
similarity index 100%
rename from splunk/com/splunk/ServiceArgs.java
rename to splunk/src/main/java/com/splunk/ServiceArgs.java
diff --git a/splunk/com/splunk/ServiceInfo.java b/splunk/src/main/java/com/splunk/ServiceInfo.java
similarity index 100%
rename from splunk/com/splunk/ServiceInfo.java
rename to splunk/src/main/java/com/splunk/ServiceInfo.java
diff --git a/splunk/com/splunk/Settings.java b/splunk/src/main/java/com/splunk/Settings.java
similarity index 100%
rename from splunk/com/splunk/Settings.java
rename to splunk/src/main/java/com/splunk/Settings.java
diff --git a/splunk/com/splunk/SimpleCookieStore.java b/splunk/src/main/java/com/splunk/SimpleCookieStore.java
similarity index 100%
rename from splunk/com/splunk/SimpleCookieStore.java
rename to splunk/src/main/java/com/splunk/SimpleCookieStore.java
diff --git a/splunk/com/splunk/SortDirection.java b/splunk/src/main/java/com/splunk/SortDirection.java
similarity index 100%
rename from splunk/com/splunk/SortDirection.java
rename to splunk/src/main/java/com/splunk/SortDirection.java
diff --git a/splunk/com/splunk/SplunkException.java b/splunk/src/main/java/com/splunk/SplunkException.java
similarity index 100%
rename from splunk/com/splunk/SplunkException.java
rename to splunk/src/main/java/com/splunk/SplunkException.java
diff --git a/splunk/com/splunk/StatsFunction.java b/splunk/src/main/java/com/splunk/StatsFunction.java
similarity index 100%
rename from splunk/com/splunk/StatsFunction.java
rename to splunk/src/main/java/com/splunk/StatsFunction.java
diff --git a/splunk/com/splunk/StreamIterableBase.java b/splunk/src/main/java/com/splunk/StreamIterableBase.java
similarity index 95%
rename from splunk/com/splunk/StreamIterableBase.java
rename to splunk/src/main/java/com/splunk/StreamIterableBase.java
index 8f69e8f1..8c423d3d 100644
--- a/splunk/com/splunk/StreamIterableBase.java
+++ b/splunk/src/main/java/com/splunk/StreamIterableBase.java
@@ -61,7 +61,7 @@ public void remove() {
     /**
      * Get the next element.
      * @return null if the end is reached.
-     * @throws IOException
+     * @throws IOException The IOException instance
      */
     abstract T getNextElement() throws IOException;
 
diff --git a/splunk/com/splunk/StringComparison.java b/splunk/src/main/java/com/splunk/StringComparison.java
similarity index 100%
rename from splunk/com/splunk/StringComparison.java
rename to splunk/src/main/java/com/splunk/StringComparison.java
diff --git a/splunk/com/splunk/StringPivotColumnSplit.java b/splunk/src/main/java/com/splunk/StringPivotColumnSplit.java
similarity index 100%
rename from splunk/com/splunk/StringPivotColumnSplit.java
rename to splunk/src/main/java/com/splunk/StringPivotColumnSplit.java
diff --git a/splunk/com/splunk/StringPivotFilter.java b/splunk/src/main/java/com/splunk/StringPivotFilter.java
similarity index 100%
rename from splunk/com/splunk/StringPivotFilter.java
rename to splunk/src/main/java/com/splunk/StringPivotFilter.java
diff --git a/splunk/com/splunk/StringPivotRowSplit.java b/splunk/src/main/java/com/splunk/StringPivotRowSplit.java
similarity index 100%
rename from splunk/com/splunk/StringPivotRowSplit.java
rename to splunk/src/main/java/com/splunk/StringPivotRowSplit.java
diff --git a/splunk/com/splunk/TcpConnections.java b/splunk/src/main/java/com/splunk/TcpConnections.java
similarity index 100%
rename from splunk/com/splunk/TcpConnections.java
rename to splunk/src/main/java/com/splunk/TcpConnections.java
diff --git a/splunk/com/splunk/TcpInput.java b/splunk/src/main/java/com/splunk/TcpInput.java
similarity index 97%
rename from splunk/com/splunk/TcpInput.java
rename to splunk/src/main/java/com/splunk/TcpInput.java
index 57e434e4..29faa6b5 100644
--- a/splunk/com/splunk/TcpInput.java
+++ b/splunk/src/main/java/com/splunk/TcpInput.java
@@ -39,6 +39,8 @@ public class TcpInput extends PortInput {
 
     /**
      * Returns a socket attached to this raw TCP input.
+     * @return Socket instance
+     * @throws IOException The IOException instance
      */
     public Socket attach() throws IOException {
         return new Socket(this.service.getHost(), this.getPort());
@@ -54,7 +56,9 @@ public Socket attach() throws IOException {
      * <a href="http://dev.splunk.com/view/SP-CAAAEJ2" target="_blank">How to 
      * get data into Splunk</a> on 
      * <a href="http://dev.splunk.com/view/SP-CAAAEJ2" 
-     * target="_blank">dev.splunk.com</a>. 
+     * target="_blank">dev.splunk.com</a>.
+     * @param behavior The ReceiverBehavior instance
+     * @throws IOException The IOException instance
      */
     public void attachWith(ReceiverBehavior behavior) throws IOException {
         Socket socket = null;
@@ -249,6 +253,7 @@ public void setIndex(String index) {
      * @see #attachWith
      *
      * @param eventBody A string that contains the event.
+     * @throws IOException The IOException instance
      */
     public void submit(String eventBody) throws IOException {
         Socket socket = null;
diff --git a/splunk/com/splunk/TcpSplunkInput.java b/splunk/src/main/java/com/splunk/TcpSplunkInput.java
similarity index 100%
rename from splunk/com/splunk/TcpSplunkInput.java
rename to splunk/src/main/java/com/splunk/TcpSplunkInput.java
diff --git a/splunk/com/splunk/TimestampBinning.java b/splunk/src/main/java/com/splunk/TimestampBinning.java
similarity index 100%
rename from splunk/com/splunk/TimestampBinning.java
rename to splunk/src/main/java/com/splunk/TimestampBinning.java
diff --git a/splunk/com/splunk/TimestampPivotColumnSplit.java b/splunk/src/main/java/com/splunk/TimestampPivotColumnSplit.java
similarity index 100%
rename from splunk/com/splunk/TimestampPivotColumnSplit.java
rename to splunk/src/main/java/com/splunk/TimestampPivotColumnSplit.java
diff --git a/splunk/com/splunk/TimestampPivotRowSplit.java b/splunk/src/main/java/com/splunk/TimestampPivotRowSplit.java
similarity index 100%
rename from splunk/com/splunk/TimestampPivotRowSplit.java
rename to splunk/src/main/java/com/splunk/TimestampPivotRowSplit.java
diff --git a/splunk/com/splunk/UdpConnections.java b/splunk/src/main/java/com/splunk/UdpConnections.java
similarity index 100%
rename from splunk/com/splunk/UdpConnections.java
rename to splunk/src/main/java/com/splunk/UdpConnections.java
diff --git a/splunk/com/splunk/UdpInput.java b/splunk/src/main/java/com/splunk/UdpInput.java
similarity index 99%
rename from splunk/com/splunk/UdpInput.java
rename to splunk/src/main/java/com/splunk/UdpInput.java
index a68bf5a8..baa6ff7d 100644
--- a/splunk/com/splunk/UdpInput.java
+++ b/splunk/src/main/java/com/splunk/UdpInput.java
@@ -257,6 +257,7 @@ public void setSourceType(String sourcetype) {
      * Send a string to this UDP input.
      *
      * @param eventBody The text to send.
+     * @throws IOException The IOException instance
      */
     public void submit(String eventBody) throws IOException {
         DatagramSocket socket = new DatagramSocket();
diff --git a/splunk/com/splunk/Upload.java b/splunk/src/main/java/com/splunk/Upload.java
similarity index 100%
rename from splunk/com/splunk/Upload.java
rename to splunk/src/main/java/com/splunk/Upload.java
diff --git a/splunk/com/splunk/User.java b/splunk/src/main/java/com/splunk/User.java
similarity index 100%
rename from splunk/com/splunk/User.java
rename to splunk/src/main/java/com/splunk/User.java
diff --git a/splunk/com/splunk/UserCollection.java b/splunk/src/main/java/com/splunk/UserCollection.java
similarity index 100%
rename from splunk/com/splunk/UserCollection.java
rename to splunk/src/main/java/com/splunk/UserCollection.java
diff --git a/splunk/com/splunk/Util.java b/splunk/src/main/java/com/splunk/Util.java
similarity index 100%
rename from splunk/com/splunk/Util.java
rename to splunk/src/main/java/com/splunk/Util.java
diff --git a/splunk/com/splunk/Value.java b/splunk/src/main/java/com/splunk/Value.java
similarity index 100%
rename from splunk/com/splunk/Value.java
rename to splunk/src/main/java/com/splunk/Value.java
diff --git a/splunk/com/splunk/WindowsActiveDirectoryInput.java b/splunk/src/main/java/com/splunk/WindowsActiveDirectoryInput.java
similarity index 100%
rename from splunk/com/splunk/WindowsActiveDirectoryInput.java
rename to splunk/src/main/java/com/splunk/WindowsActiveDirectoryInput.java
diff --git a/splunk/com/splunk/WindowsEventLogInput.java b/splunk/src/main/java/com/splunk/WindowsEventLogInput.java
similarity index 100%
rename from splunk/com/splunk/WindowsEventLogInput.java
rename to splunk/src/main/java/com/splunk/WindowsEventLogInput.java
diff --git a/splunk/com/splunk/WindowsPerfmonInput.java b/splunk/src/main/java/com/splunk/WindowsPerfmonInput.java
similarity index 100%
rename from splunk/com/splunk/WindowsPerfmonInput.java
rename to splunk/src/main/java/com/splunk/WindowsPerfmonInput.java
diff --git a/splunk/com/splunk/WindowsRegistryInput.java b/splunk/src/main/java/com/splunk/WindowsRegistryInput.java
similarity index 100%
rename from splunk/com/splunk/WindowsRegistryInput.java
rename to splunk/src/main/java/com/splunk/WindowsRegistryInput.java
diff --git a/splunk/com/splunk/WindowsWmiInput.java b/splunk/src/main/java/com/splunk/WindowsWmiInput.java
similarity index 100%
rename from splunk/com/splunk/WindowsWmiInput.java
rename to splunk/src/main/java/com/splunk/WindowsWmiInput.java
diff --git a/splunk/com/splunk/Xml.java b/splunk/src/main/java/com/splunk/Xml.java
similarity index 100%
rename from splunk/com/splunk/Xml.java
rename to splunk/src/main/java/com/splunk/Xml.java
diff --git a/splunk/com/splunk/modularinput/Argument.java b/splunk/src/main/java/com/splunk/modularinput/Argument.java
similarity index 100%
rename from splunk/com/splunk/modularinput/Argument.java
rename to splunk/src/main/java/com/splunk/modularinput/Argument.java
diff --git a/splunk/com/splunk/modularinput/Event.java b/splunk/src/main/java/com/splunk/modularinput/Event.java
similarity index 100%
rename from splunk/com/splunk/modularinput/Event.java
rename to splunk/src/main/java/com/splunk/modularinput/Event.java
diff --git a/splunk/com/splunk/modularinput/EventWriter.java b/splunk/src/main/java/com/splunk/modularinput/EventWriter.java
similarity index 96%
rename from splunk/com/splunk/modularinput/EventWriter.java
rename to splunk/src/main/java/com/splunk/modularinput/EventWriter.java
index 8bb6858c..c6ce3425 100755
--- a/splunk/com/splunk/modularinput/EventWriter.java
+++ b/splunk/src/main/java/com/splunk/modularinput/EventWriter.java
@@ -102,6 +102,7 @@ protected void setError() {
      * {@code EventWriter} does not throw {@code IOException} errors, but does not ignore them entirely either. Instead it operates
      * the same way as {@code PrintStream} in the standard library. You can always check if an {@code IOException} has been thrown
      * by calling {@code checkError}.
+     * @return boolean value
      */
     public boolean checkError() {
         return hadIOException;
@@ -110,6 +111,8 @@ public boolean checkError() {
     /**
      * Thread safe version of {@code writeEvent}.
      * @see #writeEvent
+     * @param event The Event instance
+     * @throws MalformedDataException The MalformedDataException instance
      */
     public synchronized void synchronizedWriteEvent(Event event) throws MalformedDataException {
         writeEvent(event);
@@ -123,7 +126,7 @@ public synchronized void synchronizedWriteEvent(Event event) throws MalformedDat
      *
      * @see #synchronizedWriteEvent
      * @param event The {@code Event} object to write.
-     * @throws MalformedDataException
+     * @throws MalformedDataException The MalformedDataException instance
      */
     public void writeEvent(Event event) throws MalformedDataException {
         try {
@@ -144,6 +147,8 @@ public void writeEvent(Event event) throws MalformedDataException {
     /**
      * Thread safe version of {@code log}.
      * @see #log
+     * @param severity String value
+     * @param errorMessage String value
      */
     public synchronized void synchronizedLog(String severity, String errorMessage) {
         log(severity, errorMessage);
diff --git a/splunk/com/splunk/modularinput/InputDefinition.java b/splunk/src/main/java/com/splunk/modularinput/InputDefinition.java
similarity index 99%
rename from splunk/com/splunk/modularinput/InputDefinition.java
rename to splunk/src/main/java/com/splunk/modularinput/InputDefinition.java
index 36ad8d4c..deb6ffbc 100755
--- a/splunk/com/splunk/modularinput/InputDefinition.java
+++ b/splunk/src/main/java/com/splunk/modularinput/InputDefinition.java
@@ -68,6 +68,7 @@ public String getField(String fieldName) {
 
     /**
      * Sets the name of the server on which this modular input is being run.
+     * @param serverHost String value
      */
     public void setServerHost(String serverHost) {
         this.metadata.put(serverHostField, serverHost);
diff --git a/splunk/com/splunk/modularinput/MalformedDataException.java b/splunk/src/main/java/com/splunk/modularinput/MalformedDataException.java
similarity index 100%
rename from splunk/com/splunk/modularinput/MalformedDataException.java
rename to splunk/src/main/java/com/splunk/modularinput/MalformedDataException.java
diff --git a/splunk/com/splunk/modularinput/MultiValueParameter.java b/splunk/src/main/java/com/splunk/modularinput/MultiValueParameter.java
similarity index 100%
rename from splunk/com/splunk/modularinput/MultiValueParameter.java
rename to splunk/src/main/java/com/splunk/modularinput/MultiValueParameter.java
diff --git a/splunk/com/splunk/modularinput/NonblockingInputStream.java b/splunk/src/main/java/com/splunk/modularinput/NonblockingInputStream.java
similarity index 100%
rename from splunk/com/splunk/modularinput/NonblockingInputStream.java
rename to splunk/src/main/java/com/splunk/modularinput/NonblockingInputStream.java
diff --git a/splunk/com/splunk/modularinput/Parameter.java b/splunk/src/main/java/com/splunk/modularinput/Parameter.java
similarity index 100%
rename from splunk/com/splunk/modularinput/Parameter.java
rename to splunk/src/main/java/com/splunk/modularinput/Parameter.java
diff --git a/splunk/com/splunk/modularinput/Scheme.java b/splunk/src/main/java/com/splunk/modularinput/Scheme.java
similarity index 100%
rename from splunk/com/splunk/modularinput/Scheme.java
rename to splunk/src/main/java/com/splunk/modularinput/Scheme.java
diff --git a/splunk/com/splunk/modularinput/Script.java b/splunk/src/main/java/com/splunk/modularinput/Script.java
similarity index 95%
rename from splunk/com/splunk/modularinput/Script.java
rename to splunk/src/main/java/com/splunk/modularinput/Script.java
index 249b61ed..96447c73 100755
--- a/splunk/com/splunk/modularinput/Script.java
+++ b/splunk/src/main/java/com/splunk/modularinput/Script.java
@@ -149,6 +149,7 @@ protected String stackTraceToLogEntry(Exception e) {
      * The default implementation always passes.
      *
      * @param definition The parameters for the proposed input passed by splunkd.
+     * @throws Exception The exception instance
      */
     public void validateInput(ValidationDefinition definition) throws Exception {}
 
@@ -156,7 +157,11 @@ public void validateInput(ValidationDefinition definition) throws Exception {}
      * Streams events into Splunk. It should do all of its output via
      * {@code EventWriter} rather than assuming that there is a console attached.
      *
+     * @param inputs InputDefinition instance
      * @param ew An object with methods to write events and log messages to Splunk.
+     * @throws MalformedDataException The MalformedDataException instance
+     * @throws XMLStreamException The XMLStreamException instance
+     * @throws IOException The IOException instance
      */
     public abstract void streamEvents(InputDefinition inputs, EventWriter ew)
             throws MalformedDataException, XMLStreamException, IOException;
diff --git a/splunk/com/splunk/modularinput/SingleValueParameter.java b/splunk/src/main/java/com/splunk/modularinput/SingleValueParameter.java
similarity index 100%
rename from splunk/com/splunk/modularinput/SingleValueParameter.java
rename to splunk/src/main/java/com/splunk/modularinput/SingleValueParameter.java
diff --git a/splunk/com/splunk/modularinput/ValidationDefinition.java b/splunk/src/main/java/com/splunk/modularinput/ValidationDefinition.java
similarity index 100%
rename from splunk/com/splunk/modularinput/ValidationDefinition.java
rename to splunk/src/main/java/com/splunk/modularinput/ValidationDefinition.java
diff --git a/splunk/com/splunk/modularinput/XmlUtil.java b/splunk/src/main/java/com/splunk/modularinput/XmlUtil.java
similarity index 100%
rename from splunk/com/splunk/modularinput/XmlUtil.java
rename to splunk/src/main/java/com/splunk/modularinput/XmlUtil.java
diff --git a/tests/com/splunk/ApplicationTest.java b/splunk/src/test/java/com/splunk/ApplicationTest.java
similarity index 96%
rename from tests/com/splunk/ApplicationTest.java
rename to splunk/src/test/java/com/splunk/ApplicationTest.java
index 356b5d5e..7637c0b2 100644
--- a/tests/com/splunk/ApplicationTest.java
+++ b/splunk/src/test/java/com/splunk/ApplicationTest.java
@@ -16,10 +16,7 @@
 
 package com.splunk;
 
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.*;
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
@@ -79,6 +76,7 @@ public void testForEmptySetup() {
         Assert.assertTrue(setupXml.contains("stub"));
     }
 
+    @Ignore("apps/appinstall endpoint is removed in version 8.1.0")
     @Test
     public void testForSetupPresent() throws Exception {
         if (!hasTestData()) {
@@ -88,18 +86,18 @@ public void testForSetupPresent() throws Exception {
         installApplicationFromTestData("has_setup_xml");
         Assert.assertTrue(service.getApplications().containsKey("has_setup_xml"));
         Application applicationWithSetupXml = service.getApplications().get("has_setup_xml");
-        
+
         ApplicationSetup applicationSetup = applicationWithSetupXml.setup();
         Assert.assertEquals("has_setup_xml", applicationSetup.getName());
         Assert.assertFalse(applicationSetup.getRefresh());
-        
+
         String setupXml = applicationSetup.getSetupXml();
         Document parsedSetupXml = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(
             new ByteArrayInputStream(setupXml.getBytes("UTF-8")));
         parsedSetupXml.getDocumentElement().normalize();
-        
+
         Assert.assertEquals(parsedSetupXml.getDocumentElement().getNodeName(), "SetupInfo");
-        
+
         NodeList blocks = parsedSetupXml.getDocumentElement().getElementsByTagName("block");
         Assert.assertEquals(1, blocks.getLength());
         Node block = blocks.item(0);
diff --git a/tests/com/splunk/ArgsTest.java b/splunk/src/test/java/com/splunk/ArgsTest.java
similarity index 100%
rename from tests/com/splunk/ArgsTest.java
rename to splunk/src/test/java/com/splunk/ArgsTest.java
diff --git a/tests/com/splunk/AtomFeedTest.java b/splunk/src/test/java/com/splunk/AtomFeedTest.java
similarity index 96%
rename from tests/com/splunk/AtomFeedTest.java
rename to splunk/src/test/java/com/splunk/AtomFeedTest.java
index 2142d082..e534e21a 100644
--- a/tests/com/splunk/AtomFeedTest.java
+++ b/splunk/src/test/java/com/splunk/AtomFeedTest.java
@@ -38,7 +38,7 @@ public class AtomFeedTest {
     private static Map<String, Object> expectedData = reader.fromJson(
             SDKTestCase.streamToString(
                 SDKTestCase.openResource(
-                    "data/atom_test_data.json")),
+                    "/data/atom_test_data.json")),
             Map.class);
 
     private Map<String, Object> expectedFeed;
@@ -48,7 +48,7 @@ public class AtomFeedTest {
     public AtomFeedTest(String testName) {
         this.testName = testName;
         this.expectedFeed = (Map<String, Object>)expectedData.get(testName);
-        this.xmlStream = SDKTestCase.openResource("data/atom/" + testName + ".xml");
+        this.xmlStream = SDKTestCase.openResource("/data/atom/" + testName + ".xml");
     }
 
     @Test
diff --git a/tests/com/splunk/ConfigurationTest.java b/splunk/src/test/java/com/splunk/ConfigurationTest.java
similarity index 100%
rename from tests/com/splunk/ConfigurationTest.java
rename to splunk/src/test/java/com/splunk/ConfigurationTest.java
diff --git a/tests/com/splunk/CookieTest.java b/splunk/src/test/java/com/splunk/CookieTest.java
similarity index 100%
rename from tests/com/splunk/CookieTest.java
rename to splunk/src/test/java/com/splunk/CookieTest.java
diff --git a/tests/com/splunk/DataModelTest.java b/splunk/src/test/java/com/splunk/DataModelTest.java
similarity index 92%
rename from tests/com/splunk/DataModelTest.java
rename to splunk/src/test/java/com/splunk/DataModelTest.java
index 5d1a8bc6..2a8585e8 100644
--- a/tests/com/splunk/DataModelTest.java
+++ b/splunk/src/test/java/com/splunk/DataModelTest.java
@@ -39,7 +39,7 @@ public void testDataModelCollectionCreateAndDelete() {
         EntityCollection<DataModel> dataModels = service.getDataModels();
 
         DataModelArgs args = new DataModelArgs();
-        args.setRawJsonDescription(streamToString(openResource("data/datamodels/empty_data_model.json")));
+        args.setRawJsonDescription(streamToString(openResource("/data/datamodels/empty_data_model.json")));
 
         int initialN = dataModels.size();
 
@@ -65,7 +65,7 @@ public void testDataModelWithZeroObjects() {
         EntityCollection<DataModel> dataModels = service.getDataModels();
 
         DataModelArgs args = new DataModelArgs();
-        args.setRawJsonDescription(streamToString(openResource("data/datamodels/empty_data_model.json")));
+        args.setRawJsonDescription(streamToString(openResource("/data/datamodels/empty_data_model.json")));
         DataModel model = dataModels.create(createTemporaryName(), args);
 
         Assert.assertEquals(0, model.getObjects().size());
@@ -80,7 +80,7 @@ public void testDataModelWithOneObject() {
         EntityCollection<DataModel> dataModels = service.getDataModels();
 
         DataModelArgs args = new DataModelArgs();
-        args.setRawJsonDescription(streamToString(openResource("data/datamodels/object_with_one_search.json")));
+        args.setRawJsonDescription(streamToString(openResource("/data/datamodels/object_with_one_search.json")));
         DataModel model = dataModels.create(createTemporaryName(), args);
 
         Assert.assertEquals(1, model.getObjects().size());
@@ -95,7 +95,7 @@ public void testDataModelWithTwoObjects() {
         EntityCollection<DataModel> dataModels = service.getDataModels();
 
         DataModelArgs args = new DataModelArgs();
-        args.setRawJsonDescription(streamToString(openResource("data/datamodels/object_with_two_searches.json")));
+        args.setRawJsonDescription(streamToString(openResource("/data/datamodels/object_with_two_searches.json")));
         DataModel model = dataModels.create(createTemporaryName(), args);
 
         Assert.assertEquals(2, model.getObjects().size());
@@ -110,7 +110,7 @@ public void testGetAndContainsObjectWork() {
         EntityCollection<DataModel> dataModels = service.getDataModels();
 
         DataModelArgs args = new DataModelArgs();
-        args.setRawJsonDescription(streamToString(openResource("data/datamodels/object_with_two_searches.json")));
+        args.setRawJsonDescription(streamToString(openResource("/data/datamodels/object_with_two_searches.json")));
         DataModel model = dataModels.create(createTemporaryName(), args);
 
         Assert.assertTrue(model.containsObject("search1"));
@@ -132,7 +132,7 @@ public void testDataModelWithUnicodeAttributes() {
         String modelName = createTemporaryName();
 
         DataModelArgs args = new DataModelArgs();
-        args.setRawJsonDescription(streamToString(openResource("data/datamodels/model_with_unicode_headers.json")));
+        args.setRawJsonDescription(streamToString(openResource("/data/datamodels/model_with_unicode_headers.json")));
         DataModel model = dataModels.create(modelName, args);
 
         Assert.assertEquals(modelName, model.getName());
@@ -147,7 +147,7 @@ public void testDataModelWithEmptyAttributes() {
         String modelName = createTemporaryName();
 
         DataModelArgs args = new DataModelArgs();
-        args.setRawJsonDescription(streamToString(openResource("data/datamodels/model_with_empty_headers.json")));
+        args.setRawJsonDescription(streamToString(openResource("/data/datamodels/model_with_empty_headers.json")));
         DataModel model = dataModels.create(modelName, args);
 
         Assert.assertEquals(modelName, model.getName());
@@ -170,17 +170,20 @@ public void testAccelerationSettings() {
         EntityCollection<DataModel> dataModels = nonprivateService.getDataModels();
 
         DataModelArgs args = new DataModelArgs();
-        args.setRawJsonDescription(streamToString(openResource("data/datamodels/data_model_with_test_objects.json")));
+        args.setRawJsonDescription(streamToString(openResource("/data/datamodels/data_model_with_test_objects.json")));
         DataModel model = dataModels.create(createTemporaryName(), args);
 
+        final String crontabA = "*/5 * * * *";
+        final String crontabB = "* * * * *";
+
         model.setAcceleration(true);
         model.setEarliestAcceleratedTime("-2mon");
-        model.setAccelerationCronSchedule("5/* * * * *");
+        model.setAccelerationCronSchedule(crontabA);
         model.update();
 
         Assert.assertTrue(model.isAccelerated());
         Assert.assertEquals("-2mon", model.getEarliestAcceleratedTime());
-        Assert.assertEquals("5/* * * * *", model.getAccelerationCronSchedule());
+        Assert.assertEquals(crontabA, model.getAccelerationCronSchedule());
         Assert.assertFalse(model.isManualRebuilds());
 
         model.update(); // An empty update should also work
@@ -188,25 +191,27 @@ public void testAccelerationSettings() {
 
         Assert.assertTrue(model.isAccelerated());
         Assert.assertEquals("-2mon", model.getEarliestAcceleratedTime());
-        Assert.assertEquals("5/* * * * *", model.getAccelerationCronSchedule());
+        Assert.assertEquals(crontabA, model.getAccelerationCronSchedule());
         Assert.assertFalse(model.isManualRebuilds());
 
         model.setAcceleration(false);
         model.setEarliestAcceleratedTime("-1mon");
-        model.setAccelerationCronSchedule("* * * * *");
+        model.setAccelerationCronSchedule(crontabB);
         model.update();
 
         Assert.assertFalse(model.isAccelerated());
         Assert.assertEquals("-1mon", model.getEarliestAcceleratedTime());
-        Assert.assertEquals("* * * * *", model.getAccelerationCronSchedule());
+        Assert.assertEquals(crontabB, model.getAccelerationCronSchedule());
         Assert.assertFalse(model.isManualRebuilds());
 
         model.setManualRebuilds(true);
+        // Acceleration must be set, or splunkd will crash
+        model.setAcceleration(false);
         model.update();
 
         Assert.assertFalse(model.isAccelerated());
         Assert.assertEquals("-1mon", model.getEarliestAcceleratedTime());
-        Assert.assertEquals("* * * * *", model.getAccelerationCronSchedule());
+        Assert.assertEquals(crontabB, model.getAccelerationCronSchedule());
         Assert.assertTrue(model.isManualRebuilds());
     }
 
@@ -215,7 +220,7 @@ public void testObjectMetadata() {
         DataModelCollection models = service.getDataModels();
 
         DataModelArgs args = new DataModelArgs();
-        args.setRawJsonDescription(streamToString(openResource("data/datamodels/data_model_with_test_objects.json")));
+        args.setRawJsonDescription(streamToString(openResource("/data/datamodels/data_model_with_test_objects.json")));
         DataModel model = models.create(createTemporaryName(), args);
 
         DataModelObject object = model.getObject("event1");
@@ -231,7 +236,7 @@ public void testParentOnChild() {
         DataModelCollection models = service.getDataModels();
 
         DataModelArgs args = new DataModelArgs();
-        args.setRawJsonDescription(streamToString(openResource("data/datamodels/data_model_with_test_objects.json")));
+        args.setRawJsonDescription(streamToString(openResource("/data/datamodels/data_model_with_test_objects.json")));
         DataModel model = models.create(createTemporaryName(), args);
 
         DataModelObject object = model.getObject("event1");
@@ -245,7 +250,7 @@ public void testLineage() {
         DataModelCollection models = service.getDataModels();
 
         DataModelArgs args = new DataModelArgs();
-        args.setRawJsonDescription(streamToString(openResource("data/datamodels/inheritance_test_data.json")));
+        args.setRawJsonDescription(streamToString(openResource("/data/datamodels/inheritance_test_data.json")));
         DataModel model = models.create(createTemporaryName(), args);
 
         Collection<DataModelObject> children;
@@ -271,7 +276,7 @@ public void testObjectFields() {
         DataModelCollection models = service.getDataModels();
 
         DataModelArgs args = new DataModelArgs();
-        args.setRawJsonDescription(streamToString(openResource("data/datamodels/inheritance_test_data.json")));
+        args.setRawJsonDescription(streamToString(openResource("/data/datamodels/inheritance_test_data.json")));
         DataModel model = models.create(createTemporaryName(), args);
 
         DataModelObject object = model.getObject("level_2");
@@ -308,7 +313,7 @@ public void testOutputObjectFields() {
         DataModelCollection models = service.getDataModels();
 
         DataModelArgs args = new DataModelArgs();
-        args.setRawJsonDescription(streamToString(openResource("data/datamodels/data_model_for_pivot.json")));
+        args.setRawJsonDescription(streamToString(openResource("/data/datamodels/data_model_for_pivot.json")));
         DataModel model = models.create(createTemporaryName(), args);
 
         DataModelObject object = model.getObject("test_data");
@@ -325,7 +330,7 @@ public void testCreateLocalAccelerationJob() {
 
         String dataModelName = createTemporaryName();
         DataModelArgs args = new DataModelArgs();
-        args.setRawJsonDescription(streamToString(openResource("data/datamodels/inheritance_test_data.json")));
+        args.setRawJsonDescription(streamToString(openResource("/data/datamodels/inheritance_test_data.json")));
         DataModel model = models.create(dataModelName, args);
 
         DataModelObject object = model.getObject("level_2");
@@ -356,7 +361,7 @@ public void testCreateLocalAccelerationJobWithEarliestTime() {
 
         String dataModelName = createTemporaryName();
         DataModelArgs args = new DataModelArgs();
-        args.setRawJsonDescription(streamToString(openResource("data/datamodels/inheritance_test_data.json")));
+        args.setRawJsonDescription(streamToString(openResource("/data/datamodels/inheritance_test_data.json")));
         DataModel model = models.create(dataModelName, args);
 
         DataModelObject object = model.getObject("level_2");
@@ -387,7 +392,7 @@ public void testConstraints() {
         EntityCollection<DataModel> dataModels = service.getDataModels();
 
         DataModelArgs args = new DataModelArgs();
-        args.setRawJsonDescription(streamToString(openResource("data/datamodels/data_model_with_test_objects.json")));
+        args.setRawJsonDescription(streamToString(openResource("/data/datamodels/data_model_with_test_objects.json")));
         DataModel model = dataModels.create(createTemporaryName(), args);
 
         DataModelObject object = model.getObject("event1");
@@ -409,7 +414,7 @@ public void testCalculations() {
         EntityCollection<DataModel> dataModels = service.getDataModels();
 
         DataModelArgs args = new DataModelArgs();
-        args.setRawJsonDescription(streamToString(openResource("data/datamodels/data_model_with_test_objects.json")));
+        args.setRawJsonDescription(streamToString(openResource("/data/datamodels/data_model_with_test_objects.json")));
         DataModel model = dataModels.create(createTemporaryName(), args);
 
         DataModelObject object = model.getObject("event1");
@@ -505,7 +510,7 @@ public void testBaseSearchProperlyParsed() {
         EntityCollection<DataModel> dataModels = service.getDataModels();
 
         DataModelArgs args = new DataModelArgs();
-        args.setRawJsonDescription(streamToString(openResource("data/datamodels/model_with_multiple_types.json")));
+        args.setRawJsonDescription(streamToString(openResource("/data/datamodels/model_with_multiple_types.json")));
         DataModel model = dataModels.create(createTemporaryName(), args);
 
         DataModelObject object = model.getObject("search1");
@@ -522,7 +527,7 @@ public void testBaseTransactionProperlyParsed() {
         EntityCollection<DataModel> dataModels = service.getDataModels();
 
         DataModelArgs args = new DataModelArgs();
-        args.setRawJsonDescription(streamToString(openResource("data/datamodels/model_with_multiple_types.json")));
+        args.setRawJsonDescription(streamToString(openResource("/data/datamodels/model_with_multiple_types.json")));
         DataModel model = dataModels.create(createTemporaryName(), args);
 
         DataModelObject object = model.getObject("transaction1");
diff --git a/tests/com/splunk/DeploymentClientTest.java b/splunk/src/test/java/com/splunk/DeploymentClientTest.java
similarity index 100%
rename from tests/com/splunk/DeploymentClientTest.java
rename to splunk/src/test/java/com/splunk/DeploymentClientTest.java
diff --git a/tests/com/splunk/DeploymentServerClassTest.java b/splunk/src/test/java/com/splunk/DeploymentServerClassTest.java
similarity index 99%
rename from tests/com/splunk/DeploymentServerClassTest.java
rename to splunk/src/test/java/com/splunk/DeploymentServerClassTest.java
index 13c5532f..94dc00e8 100644
--- a/tests/com/splunk/DeploymentServerClassTest.java
+++ b/splunk/src/test/java/com/splunk/DeploymentServerClassTest.java
@@ -17,7 +17,6 @@
 package com.splunk;
 
 import org.junit.Assert;
-import org.junit.Assume;
 import org.junit.Before;
 import org.junit.Test;
 
diff --git a/tests/com/splunk/DeploymentServerTest.java b/splunk/src/test/java/com/splunk/DeploymentServerTest.java
similarity index 98%
rename from tests/com/splunk/DeploymentServerTest.java
rename to splunk/src/test/java/com/splunk/DeploymentServerTest.java
index 15c5f51b..ba75489f 100644
--- a/tests/com/splunk/DeploymentServerTest.java
+++ b/splunk/src/test/java/com/splunk/DeploymentServerTest.java
@@ -17,7 +17,6 @@
 package com.splunk;
 
 import org.junit.Assert;
-import org.junit.Assume;
 import org.junit.Test;
 
 public class DeploymentServerTest extends SDKTestCase {
diff --git a/tests/com/splunk/DeploymentTenantTest.java b/splunk/src/test/java/com/splunk/DeploymentTenantTest.java
similarity index 98%
rename from tests/com/splunk/DeploymentTenantTest.java
rename to splunk/src/test/java/com/splunk/DeploymentTenantTest.java
index 95129079..153b1064 100644
--- a/tests/com/splunk/DeploymentTenantTest.java
+++ b/splunk/src/test/java/com/splunk/DeploymentTenantTest.java
@@ -17,7 +17,6 @@
 package com.splunk;
 
 import org.junit.Assert;
-import org.junit.Assume;
 import org.junit.Test;
 
 public class DeploymentTenantTest extends SDKTestCase {
diff --git a/tests/com/splunk/DistributedConfTest.java b/splunk/src/test/java/com/splunk/DistributedConfTest.java
similarity index 100%
rename from tests/com/splunk/DistributedConfTest.java
rename to splunk/src/test/java/com/splunk/DistributedConfTest.java
diff --git a/tests/com/splunk/DistributedPeerTest.java b/splunk/src/test/java/com/splunk/DistributedPeerTest.java
similarity index 100%
rename from tests/com/splunk/DistributedPeerTest.java
rename to splunk/src/test/java/com/splunk/DistributedPeerTest.java
diff --git a/tests/com/splunk/EntityTest.java b/splunk/src/test/java/com/splunk/EntityTest.java
similarity index 100%
rename from tests/com/splunk/EntityTest.java
rename to splunk/src/test/java/com/splunk/EntityTest.java
diff --git a/tests/com/splunk/EventTypesTest.java b/splunk/src/test/java/com/splunk/EventTypesTest.java
similarity index 100%
rename from tests/com/splunk/EventTypesTest.java
rename to splunk/src/test/java/com/splunk/EventTypesTest.java
diff --git a/tests/com/splunk/ExportResultsReaderTest.java b/splunk/src/test/java/com/splunk/ExportResultsReaderTest.java
similarity index 93%
rename from tests/com/splunk/ExportResultsReaderTest.java
rename to splunk/src/test/java/com/splunk/ExportResultsReaderTest.java
index a6128b4d..0c460372 100644
--- a/tests/com/splunk/ExportResultsReaderTest.java
+++ b/splunk/src/test/java/com/splunk/ExportResultsReaderTest.java
@@ -40,7 +40,7 @@ public class ExportResultsReaderTest {
     private static Map<String, Object> expectedData = reader.fromJson(
             SDKTestCase.streamToString(
                 SDKTestCase.openResource(
-                    "data/export_test_data.json")),
+                    "/data/export_test_data.json")),
             Map.class
     );
 
@@ -70,7 +70,7 @@ public void testExportWithoutPreview() throws IOException, XMLStreamException {
 
         InputStream xmlStream = new ExportResultsStream(
                 SDKTestCase.openResource(
-                        "data/export/" + this.version + "/export_results.xml"));
+                        "/data/export/" + this.version + "/export_results.xml"));
         ResultsReaderXml resultsReader = new ResultsReaderXml(xmlStream);
 
         ResultsReaderTestFromExpectedFile.verifyResultsReader(resultsReader, expectedEvents);
@@ -85,7 +85,7 @@ public void testExportWithPreview() throws IOException {
         List<Map<String, Object>> expectedResultsSets = (List<Map<String, Object>>)thisVersion.get("with_preview");
 
         InputStream xmlStream = SDKTestCase.openResource(
-                "data/export/" + this.version + "/export_results.xml");
+                "/data/export/" + this.version + "/export_results.xml");
         // Some kind of results reader here...
 
         for (Map<String, Object> expectedResultsSet : expectedResultsSets) {
@@ -105,7 +105,7 @@ public void testExportNonreporting() throws IOException, XMLStreamException {
         List<Map<String, Object>> expectedEvents = (List<Map<String, Object>>)expectedResultsSet.get("results");
 
         InputStream xmlStream = SDKTestCase.openResource(
-                "data/export/" + this.version + "/nonreporting.xml");
+                "/data/export/" + this.version + "/nonreporting.xml");
         ResultsReaderXml resultsReader = new ResultsReaderXml(xmlStream);
 
         ResultsReaderTestFromExpectedFile.verifyResultsReader(resultsReader, expectedEvents);
diff --git a/tests/com/splunk/FiredAlertsTest.java b/splunk/src/test/java/com/splunk/FiredAlertsTest.java
similarity index 100%
rename from tests/com/splunk/FiredAlertsTest.java
rename to splunk/src/test/java/com/splunk/FiredAlertsTest.java
diff --git a/tests/com/splunk/HttpExceptionTest.java b/splunk/src/test/java/com/splunk/HttpExceptionTest.java
similarity index 100%
rename from tests/com/splunk/HttpExceptionTest.java
rename to splunk/src/test/java/com/splunk/HttpExceptionTest.java
diff --git a/tests/com/splunk/HttpServiceTest.java b/splunk/src/test/java/com/splunk/HttpServiceTest.java
similarity index 100%
rename from tests/com/splunk/HttpServiceTest.java
rename to splunk/src/test/java/com/splunk/HttpServiceTest.java
diff --git a/tests/com/splunk/IndexTest.java b/splunk/src/test/java/com/splunk/IndexTest.java
similarity index 95%
rename from tests/com/splunk/IndexTest.java
rename to splunk/src/test/java/com/splunk/IndexTest.java
index 5655a44b..01baac66 100644
--- a/tests/com/splunk/IndexTest.java
+++ b/splunk/src/test/java/com/splunk/IndexTest.java
@@ -18,11 +18,7 @@
 
 import junit.framework.AssertionFailedError;
 
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.Assume;
+import org.junit.*;
 
 import java.io.*;
 import java.net.Socket;
@@ -53,12 +49,24 @@ public boolean predicate() {
     public void tearDown() throws Exception {
         if (service.versionIsAtLeast("5.0.0")) {
             if (service.getIndexes().containsKey(indexName) && System.getenv("TRAVIS") == null) {
-                index.remove();
+                try {
+                    index.remove();
+                } catch(HttpException he) {
+                    if (he.getStatus() == 400) {
+                        uncheckedSplunkRestart();
+                        index.remove();
+                    } else {
+                        throw he;
+                    }
+                }
             }
         } else {
             // Can't delete indexes via the REST API. Just let them build up.
         }
 
+        // At least in CI the test exists with a required restart
+        uncheckedSplunkRestart();
+
         super.tearDown();
     }
 
@@ -132,7 +140,16 @@ public void testDeletion() {
 
         Assert.assertTrue(service.getIndexes().containsKey(indexName));
 
-        index.remove();
+        try {
+            index.remove();
+        } catch(HttpException he) {
+            if (he.getStatus() == 400) {
+                uncheckedSplunkRestart();
+                index.remove();
+            } else {
+                throw he;
+            }
+        }
         assertEventuallyTrue(new EventuallyTrueBehavior() {
             @Override
             public boolean predicate() {
@@ -149,7 +166,17 @@ public void testDeletionFromCollection() {
         }
 
         Assert.assertTrue(service.getIndexes().containsKey(indexName));
-        service.getIndexes().remove(indexName);
+
+        try {
+            service.getIndexes().remove(indexName);
+        } catch(HttpException he) {
+            if (he.getStatus() == 400) {
+                uncheckedSplunkRestart();
+                service.getIndexes().remove(indexName);
+            } else {
+                throw he;
+            }
+        }
 
         assertEventuallyTrue(new EventuallyTrueBehavior() {
             @Override
@@ -249,7 +276,13 @@ public void testSetters() {
         index.setMaxConcurrentOptimizes(newMaxConcurrentOptimizes);
         String newMaxDataSize = "auto";
         index.setMaxDataSize(newMaxDataSize);
-        int newMaxHotBuckets = index.getMaxHotBuckets()+1;
+        String newMaxHotBuckets = null;
+        if (service.versionIsEarlierThan("8.1.0")) {
+            int newMaxHotBucketsInt = Integer.parseInt(index.getMaxHotBuckets())+1;
+            newMaxHotBuckets = String.valueOf(newMaxHotBucketsInt);
+        } else {
+            newMaxHotBuckets = "auto";
+        }
         index.setMaxHotBuckets(newMaxHotBuckets);
         int newMaxHotIdleSecs = index.getMaxHotIdleSecs()+1;
         index.setMaxHotIdleSecs(newMaxHotIdleSecs);
@@ -655,6 +688,7 @@ public boolean predicate() {
         });
     }
 
+    @Ignore("apps/appinstall endpoint is removed in version 8.1.0")
     @Test
     public void testUploadArgs() throws Exception {
         if (!hasTestData()) {
@@ -698,6 +732,7 @@ public boolean predicate() {
         });
     }
 
+    @Ignore("apps/appinstall endpoint is removed in version 8.1.0")
     @Test
     public void testUploadArgsFailure() throws Exception{
         if (!hasTestData()) {
@@ -729,7 +764,7 @@ public void testUploadArgsFailure() throws Exception{
 
     }
 
-
+    @Ignore("apps/appinstall endpoint is removed in version 8.1.0")
     @Test
     public void testUpload() throws Exception {
         if (!hasTestData()) {
diff --git a/tests/com/splunk/InputCrudTest.java b/splunk/src/test/java/com/splunk/InputCrudTest.java
similarity index 98%
rename from tests/com/splunk/InputCrudTest.java
rename to splunk/src/test/java/com/splunk/InputCrudTest.java
index 985d04c1..656e2fcb 100644
--- a/tests/com/splunk/InputCrudTest.java
+++ b/splunk/src/test/java/com/splunk/InputCrudTest.java
@@ -18,6 +18,7 @@
 
 
 import org.junit.Assert;
+import org.junit.Ignore;
 import org.junit.Test;
 
 import java.util.HashMap;
@@ -165,8 +166,13 @@ private void testSpecializedGetters(Input input) {
     
     @Test
     public void testMonitorInputCrud() {
-        final String filename = locateSystemLog();
-        
+        final String filename;
+        if (System.getenv("SPLUNK_HOME") != null) {
+            filename = System.getenv("SPLUNK_HOME") + "/copyright.txt";
+        } else {
+            filename = locateSystemLog();
+        }
+
         // Create variants
         try {
             inputs.create(filename);
@@ -241,7 +247,8 @@ public boolean predicate() {
             }
         });
     }
-    
+
+    @Ignore("apps/appinstall endpoint is removed in version 8.1.0")
     @Test
     public void testScriptInputCrud() {
         if (!hasTestData()) {
diff --git a/tests/com/splunk/InputTest.java b/splunk/src/test/java/com/splunk/InputTest.java
similarity index 100%
rename from tests/com/splunk/InputTest.java
rename to splunk/src/test/java/com/splunk/InputTest.java
diff --git a/tests/com/splunk/InsertRootElementFilterInputStreamTest.java b/splunk/src/test/java/com/splunk/InsertRootElementFilterInputStreamTest.java
similarity index 99%
rename from tests/com/splunk/InsertRootElementFilterInputStreamTest.java
rename to splunk/src/test/java/com/splunk/InsertRootElementFilterInputStreamTest.java
index b6bc37ab..3ad608d9 100644
--- a/tests/com/splunk/InsertRootElementFilterInputStreamTest.java
+++ b/splunk/src/test/java/com/splunk/InsertRootElementFilterInputStreamTest.java
@@ -21,8 +21,6 @@
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.StringReader;
-import java.nio.CharBuffer;
 
 public class InsertRootElementFilterInputStreamTest {
     @Test
diff --git a/tests/com/splunk/LicenseGroupTest.java b/splunk/src/test/java/com/splunk/LicenseGroupTest.java
similarity index 100%
rename from tests/com/splunk/LicenseGroupTest.java
rename to splunk/src/test/java/com/splunk/LicenseGroupTest.java
diff --git a/tests/com/splunk/LicenseMessageTest.java b/splunk/src/test/java/com/splunk/LicenseMessageTest.java
similarity index 100%
rename from tests/com/splunk/LicenseMessageTest.java
rename to splunk/src/test/java/com/splunk/LicenseMessageTest.java
diff --git a/tests/com/splunk/LicensePoolTest.java b/splunk/src/test/java/com/splunk/LicensePoolTest.java
similarity index 99%
rename from tests/com/splunk/LicensePoolTest.java
rename to splunk/src/test/java/com/splunk/LicensePoolTest.java
index a4af1d6c..e5625d5f 100644
--- a/tests/com/splunk/LicensePoolTest.java
+++ b/splunk/src/test/java/com/splunk/LicensePoolTest.java
@@ -16,8 +16,6 @@
 
 package com.splunk;
 
-import java.util.Arrays;
-
 import org.junit.Assert;
 import org.junit.Test;
 
diff --git a/tests/com/splunk/LicenseSlaveTest.java b/splunk/src/test/java/com/splunk/LicenseSlaveTest.java
similarity index 100%
rename from tests/com/splunk/LicenseSlaveTest.java
rename to splunk/src/test/java/com/splunk/LicenseSlaveTest.java
diff --git a/tests/com/splunk/LicenseTest.java b/splunk/src/test/java/com/splunk/LicenseTest.java
similarity index 99%
rename from tests/com/splunk/LicenseTest.java
rename to splunk/src/test/java/com/splunk/LicenseTest.java
index b0eaff0a..7c7334ca 100644
--- a/tests/com/splunk/LicenseTest.java
+++ b/splunk/src/test/java/com/splunk/LicenseTest.java
@@ -16,7 +16,6 @@
 
 package com.splunk;
 
-import java.io.InputStream;
 import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
diff --git a/tests/com/splunk/LoggerTest.java b/splunk/src/test/java/com/splunk/LoggerTest.java
similarity index 100%
rename from tests/com/splunk/LoggerTest.java
rename to splunk/src/test/java/com/splunk/LoggerTest.java
diff --git a/tests/com/splunk/MessageTest.java b/splunk/src/test/java/com/splunk/MessageTest.java
similarity index 100%
rename from tests/com/splunk/MessageTest.java
rename to splunk/src/test/java/com/splunk/MessageTest.java
diff --git a/tests/com/splunk/MetadataTest.java b/splunk/src/test/java/com/splunk/MetadataTest.java
similarity index 100%
rename from tests/com/splunk/MetadataTest.java
rename to splunk/src/test/java/com/splunk/MetadataTest.java
diff --git a/tests/com/splunk/ModularInputKindsTest.java b/splunk/src/test/java/com/splunk/ModularInputKindsTest.java
similarity index 93%
rename from tests/com/splunk/ModularInputKindsTest.java
rename to splunk/src/test/java/com/splunk/ModularInputKindsTest.java
index 05b23ecd..8b07de0a 100644
--- a/tests/com/splunk/ModularInputKindsTest.java
+++ b/splunk/src/test/java/com/splunk/ModularInputKindsTest.java
@@ -17,7 +17,6 @@
 
 
 import org.junit.Assert;
-import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Test;
 
@@ -44,6 +43,7 @@ public void checkModularInputKind(ModularInputKind m) {
 
     }
 
+    @Ignore("apps/appinstall endpoint is removed in version 8.1.0")
     @Test
     public void testListInputKinds() {
         if (service.versionIsEarlierThan("5.0") || !hasTestData()) {
@@ -58,6 +58,7 @@ public void testListInputKinds() {
         }
     }
 
+    @Ignore("apps/appinstall endpoint is removed in version 8.1.0")
     @Test
     public void testInputByName() {
         if (service.versionIsEarlierThan("5.0") || !hasTestData()) {
@@ -73,6 +74,7 @@ public void testInputByName() {
         checkModularInputKind(m);
     }
 
+    @Ignore("apps/appinstall endpoint is removed in version 8.1.0")
     @Test
     public void testNonexistantArg() {
         if (service.versionIsEarlierThan("5.0") || !hasTestData()) {
@@ -86,6 +88,7 @@ public void testNonexistantArg() {
         Assert.assertNull(test1.getArgument("nonexistant_argument"));
     }
 
+    @Ignore("apps/appinstall endpoint is removed in version 8.1.0")
     @Test
     public void testInputKindDescriptionAndTitle() {
         if (service.versionIsEarlierThan("5.0") || !hasTestData()) {
@@ -104,6 +107,7 @@ public void testInputKindDescriptionAndTitle() {
         Assert.assertEquals("test2", test2.getTitle());
     }
 
+    @Ignore("apps/appinstall endpoint is removed in version 8.1.0")
     @Test
     public void testArgDescription() {
         if (service.versionIsEarlierThan("5.0") || !hasTestData()) {
@@ -131,6 +135,7 @@ public void testArgDescription() {
         }
     }
 
+    @Ignore("apps/appinstall endpoint is removed in version 8.1.0")
     @Test
     public void testArgDataType() {
         if (service.versionIsEarlierThan("5.0") || !hasTestData()) {
@@ -157,6 +162,7 @@ public void testArgDataType() {
         }
     }
 
+    @Ignore("apps/appinstall endpoint is removed in version 8.1.0")
     @Test
     public void testRequiredOnCreate() {
         if (service.versionIsEarlierThan("5.0") || !hasTestData()) {
@@ -181,6 +187,7 @@ public void testRequiredOnCreate() {
         }
     }
 
+    @Ignore("apps/appinstall endpoint is removed in version 8.1.0")
     @Test
     public void testRequiredOnEdit() {
         if (service.versionIsEarlierThan("5.0") || !hasTestData()) {
@@ -205,6 +212,7 @@ public void testRequiredOnEdit() {
         }
     }
 
+    @Ignore("apps/appinstall endpoint is removed in version 8.1.0")
     @Test
     public void testGetArguments() {
         if (service.versionIsEarlierThan("5.0") || !hasTestData()) {
diff --git a/tests/com/splunk/ModularInputTest.java b/splunk/src/test/java/com/splunk/ModularInputTest.java
similarity index 93%
rename from tests/com/splunk/ModularInputTest.java
rename to splunk/src/test/java/com/splunk/ModularInputTest.java
index d0e98a33..17dd8b4d 100644
--- a/tests/com/splunk/ModularInputTest.java
+++ b/splunk/src/test/java/com/splunk/ModularInputTest.java
@@ -17,9 +17,11 @@
 package com.splunk;
 
 import org.junit.Assert;
+import org.junit.Ignore;
 import org.junit.Test;
 
 public class ModularInputTest extends InputTest {
+    @Ignore("apps/appinstall endpoint is removed in version 8.1.0")
     @Test
     public void testModularInputKinds() {
         if (service.versionCompare("5.0") < 0 || !hasTestData()) {
@@ -40,7 +42,8 @@ public void testModularInputKinds() {
         }
         Assert.assertTrue(hasTest2);
     }
-    
+
+    @Ignore("apps/appinstall endpoint is removed in version 8.1.0")
     @Test
     public void testListModularInputs() {
         if (service.versionCompare("5.0") < 0 || !hasTestData()) {
diff --git a/tests/com/splunk/NamespaceTest.java b/splunk/src/test/java/com/splunk/NamespaceTest.java
similarity index 99%
rename from tests/com/splunk/NamespaceTest.java
rename to splunk/src/test/java/com/splunk/NamespaceTest.java
index a00e188e..16a332ad 100644
--- a/tests/com/splunk/NamespaceTest.java
+++ b/splunk/src/test/java/com/splunk/NamespaceTest.java
@@ -19,8 +19,6 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import java.net.URLEncoder;
-
 public class NamespaceTest extends SDKTestCase {
     @Test
     public void testStaticNamespace() {
diff --git a/tests/com/splunk/OutputDefaultTest.java b/splunk/src/test/java/com/splunk/OutputDefaultTest.java
similarity index 100%
rename from tests/com/splunk/OutputDefaultTest.java
rename to splunk/src/test/java/com/splunk/OutputDefaultTest.java
diff --git a/tests/com/splunk/OutputGroupTest.java b/splunk/src/test/java/com/splunk/OutputGroupTest.java
similarity index 100%
rename from tests/com/splunk/OutputGroupTest.java
rename to splunk/src/test/java/com/splunk/OutputGroupTest.java
diff --git a/tests/com/splunk/OutputServerTest.java b/splunk/src/test/java/com/splunk/OutputServerTest.java
similarity index 100%
rename from tests/com/splunk/OutputServerTest.java
rename to splunk/src/test/java/com/splunk/OutputServerTest.java
diff --git a/tests/com/splunk/OutputSyslogTest.java b/splunk/src/test/java/com/splunk/OutputSyslogTest.java
similarity index 100%
rename from tests/com/splunk/OutputSyslogTest.java
rename to splunk/src/test/java/com/splunk/OutputSyslogTest.java
diff --git a/tests/com/splunk/PasswordTest.java b/splunk/src/test/java/com/splunk/PasswordTest.java
similarity index 100%
rename from tests/com/splunk/PasswordTest.java
rename to splunk/src/test/java/com/splunk/PasswordTest.java
diff --git a/tests/com/splunk/PivotTest.java b/splunk/src/test/java/com/splunk/PivotTest.java
similarity index 99%
rename from tests/com/splunk/PivotTest.java
rename to splunk/src/test/java/com/splunk/PivotTest.java
index 54056581..6961a8a3 100644
--- a/tests/com/splunk/PivotTest.java
+++ b/splunk/src/test/java/com/splunk/PivotTest.java
@@ -23,13 +23,6 @@
 import org.junit.Before;
 import org.junit.Test;
 
-import java.io.*;
-import java.net.Socket;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Collection;
-import java.util.Date;
-
 
 public class PivotTest extends SDKTestCase {
     DataModelObject dataModelObject;
@@ -41,7 +34,7 @@ public void setUp() throws Exception {
         EntityCollection<DataModel> dataModels = service.getDataModels();
 
         DataModelArgs args = new DataModelArgs();
-        args.setRawJsonDescription(streamToString(openResource("data/datamodels/data_model_for_pivot.json")));
+        args.setRawJsonDescription(streamToString(openResource("/data/datamodels/data_model_for_pivot.json")));
         DataModel model = dataModels.create(createTemporaryName(), args);
 
         this.dataModelObject = model.getObject("test_data");
@@ -88,7 +81,7 @@ public void testAccelerationWorks() {
         EntityCollection<DataModel> dataModels = nonprivateService.getDataModels();
 
         DataModelArgs args = new DataModelArgs();
-        args.setRawJsonDescription(streamToString(openResource("data/datamodels/data_model_for_pivot.json")));
+        args.setRawJsonDescription(streamToString(openResource("/data/datamodels/data_model_for_pivot.json")));
         DataModel model = dataModels.create(createTemporaryName(), args);
 
         dataModelObject = model.getObject("test_data");
diff --git a/tests/com/splunk/PortInputTest.java b/splunk/src/test/java/com/splunk/PortInputTest.java
similarity index 98%
rename from tests/com/splunk/PortInputTest.java
rename to splunk/src/test/java/com/splunk/PortInputTest.java
index 195f0dfa..1db21e68 100644
--- a/tests/com/splunk/PortInputTest.java
+++ b/splunk/src/test/java/com/splunk/PortInputTest.java
@@ -16,8 +16,6 @@
 
 package com.splunk;
 
-import java.lang.reflect.Method;
-
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
diff --git a/tests/com/splunk/ReceiverTest.java b/splunk/src/test/java/com/splunk/ReceiverTest.java
similarity index 100%
rename from tests/com/splunk/ReceiverTest.java
rename to splunk/src/test/java/com/splunk/ReceiverTest.java
diff --git a/tests/com/splunk/ResourceRoot.java b/splunk/src/test/java/com/splunk/ResourceRoot.java
similarity index 100%
rename from tests/com/splunk/ResourceRoot.java
rename to splunk/src/test/java/com/splunk/ResourceRoot.java
diff --git a/tests/com/splunk/ResultsReaderTest.java b/splunk/src/test/java/com/splunk/ResultsReaderTest.java
similarity index 93%
rename from tests/com/splunk/ResultsReaderTest.java
rename to splunk/src/test/java/com/splunk/ResultsReaderTest.java
index 0e2aaf38..71ebe42d 100644
--- a/tests/com/splunk/ResultsReaderTest.java
+++ b/splunk/src/test/java/com/splunk/ResultsReaderTest.java
@@ -22,8 +22,6 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.*;
-import java.util.Collection;
-import java.util.regex.Pattern;
 
 /**
  * Test aspects of results readers not covered by the atom, results, and export test data.
@@ -34,7 +32,7 @@
 public class ResultsReaderTest extends SDKTestCase {
     @Test
     public void testReadCsv() throws Exception {
-        InputStream input = openResource("results.csv");
+        InputStream input = openResource("/results.csv");
         ResultsReaderCsv reader = new ResultsReaderCsv(input);
 
         String[] fields = new String[0];
@@ -124,7 +122,7 @@ private MultiResultsReader getExportStreamXml() throws IOException {
 
     @Test
     public void testReadJsonOnSplunk4() throws Exception {
-        InputStream input = openResource("results4.json");
+        InputStream input = openResource("/results4.json");
         ResultsReaderJson reader = new ResultsReaderJson(input);
         Map<String, String> expected = new HashMap<String, String>();
 
@@ -148,7 +146,7 @@ public void testReadJsonOnSplunk4() throws Exception {
     public void testReadJsonOnSplunk5() throws Exception {
         // Splunk 5.0 uses a different format for JSON results
         // from Splunk 4.3.
-        InputStream input = openResource("results5.json");
+        InputStream input = openResource("/results5.json");
         ResultsReaderJson reader = new ResultsReaderJson(input);
         Map<String, String> expected = new HashMap<String, String>();
 
@@ -174,26 +172,26 @@ public void testReadMultivalueCsvJson() throws IOException {
         String search = "search index=_internal | head 1";
         
         testReadMultivalue(
-                ResultsReaderXml.class, "resultsMV.xml");
+                ResultsReaderXml.class, "/resultsMV.xml");
         testReadMultivalue(
-                ResultsReaderCsv.class, "resultsMV.csv");
+                ResultsReaderCsv.class, "/resultsMV.csv");
         testReadMultivalue(
-                ResultsReaderJson.class, "resultsMV4.json");
+                ResultsReaderJson.class, "/resultsMV4.json");
         testReadMultivalue(
-                ResultsReaderJson.class, "resultsMV5.json");
+                ResultsReaderJson.class, "/resultsMV5.json");
         testReadMultivalue(
-                ResultsReaderJson.class, "resultsMVFuture.json", ",");
+                ResultsReaderJson.class, "/resultsMVFuture.json", ",");
         
         testReadMultivalue(
-                ResultsReaderXml.class, "resultsMVOneshot.xml");
+                ResultsReaderXml.class, "/resultsMVOneshot.xml");
         testReadMultivalue(
-                ResultsReaderCsv.class, "resultsMVOneshot.csv");
+                ResultsReaderCsv.class, "/resultsMVOneshot.csv");
         testReadMultivalue(
-                ResultsReaderJson.class, "resultsMVOneshot4.json");
+                ResultsReaderJson.class, "/resultsMVOneshot4.json");
         testReadMultivalue(
-                ResultsReaderJson.class, "resultsMVOneshot5.json");
+                ResultsReaderJson.class, "/resultsMVOneshot5.json");
         testReadMultivalue(
-                ResultsReaderJson.class, "resultsMVOneshotFuture.json", ",");
+                ResultsReaderJson.class, "/resultsMVOneshotFuture.json", ",");
         
         testReadMultivalue(
                 ResultsReaderXml.class, "splunk_search:blocking/xml/" + search);
@@ -336,7 +334,7 @@ public void testPreviewSingleReaderXmlGetNext() throws Exception {
 
     private void testPreviewSingleReaderXml(boolean useIter) throws Exception {
         ResultsReaderXml reader = new ResultsReaderXml(
-            openResource("resultsPreview.xml"));
+            openResource("/resultsPreview.xml"));
 
         Assert.assertTrue(reader.isPreview());
 
@@ -365,7 +363,7 @@ private void testPreviewSingleReaderXml(boolean useIter) throws Exception {
         reader.close();
     }
 
-    final String resultsExportXml = "resultsExport.xml";
+    final String resultsExportXml = "/resultsExport.xml";
 
     @Test
     public void testExportSingleReaderXml() throws Exception {
@@ -382,7 +380,7 @@ public void testExportMultiReaderXml() throws Exception {
             18);
     }
 
-    final String resultsExportJson = "resultsExport.json";
+    final String resultsExportJson = "/resultsExport.json";
 
     @Test
     public void testExportSingleReaderJson() throws Exception {
diff --git a/tests/com/splunk/ResultsReaderTestFromExpectedFile.java b/splunk/src/test/java/com/splunk/ResultsReaderTestFromExpectedFile.java
similarity index 98%
rename from tests/com/splunk/ResultsReaderTestFromExpectedFile.java
rename to splunk/src/test/java/com/splunk/ResultsReaderTestFromExpectedFile.java
index 4de8bbf0..ecfa0d14 100644
--- a/tests/com/splunk/ResultsReaderTestFromExpectedFile.java
+++ b/splunk/src/test/java/com/splunk/ResultsReaderTestFromExpectedFile.java
@@ -54,7 +54,7 @@ public class ResultsReaderTestFromExpectedFile {
         reader.fromJson(
             SDKTestCase.streamToString(
                 SDKTestCase.openResource(
-                    "data/resultsreader_test_data.json")),
+                    "/data/resultsreader_test_data.json")),
                 Map.class);
 
     private Map<String, Object> expectedResultsSet;
@@ -66,7 +66,7 @@ public ResultsReaderTestFromExpectedFile(String version, String testName) {
         this.version = version;
         this.testName = testName;
         this.xmlStream = SDKTestCase.openResource(
-                "data/results/" + version + "/" + testName + ".xml");
+                "/data/results/" + version + "/" + testName + ".xml");
         Map<String, Object> versionData =
                 (Map<String, Object>)expectedData.get(version);
         this.expectedResultsSet =
diff --git a/tests/com/splunk/RoleTest.java b/splunk/src/test/java/com/splunk/RoleTest.java
similarity index 100%
rename from tests/com/splunk/RoleTest.java
rename to splunk/src/test/java/com/splunk/RoleTest.java
diff --git a/tests/com/splunk/SDKTestCase.java b/splunk/src/test/java/com/splunk/SDKTestCase.java
similarity index 97%
rename from tests/com/splunk/SDKTestCase.java
rename to splunk/src/test/java/com/splunk/SDKTestCase.java
index ccf2b9d8..100899af 100644
--- a/tests/com/splunk/SDKTestCase.java
+++ b/splunk/src/test/java/com/splunk/SDKTestCase.java
@@ -16,7 +16,6 @@
 
 package com.splunk;
 
-import junit.framework.TestCase;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
@@ -79,8 +78,16 @@ public void connect() {
     }
 
     public static Integer getJavaVersion() {
-        String ver = System.getProperty("java.version");
-        return Integer.parseInt(ver.substring(2, 3));
+        String version = System.getProperty("java.version");
+        if (version.startsWith("1.")) {
+            version = version.substring(2, 3);
+        } else {
+            int dot = version.indexOf(".");
+            if (dot != -1) {
+                version = version.substring(0, dot);
+            }
+        }
+        return Integer.parseInt(version);
     }
 
     @Before
@@ -368,7 +375,7 @@ protected static String locateSystemLog() {
         if (osName.equals("Windows"))
             filename = "C:\\Windows\\WindowsUpdate.log";
         else if (osName.equals("Linux")) {
-            filename = "/etc/fstab";
+            filename = "/etc/hosts";
         }
         else if (osName.equals("Darwin")) {
             filename = "/var/log/system.log";
diff --git a/tests/com/splunk/SavedSearchTest.java b/splunk/src/test/java/com/splunk/SavedSearchTest.java
similarity index 100%
rename from tests/com/splunk/SavedSearchTest.java
rename to splunk/src/test/java/com/splunk/SavedSearchTest.java
diff --git a/tests/com/splunk/ScriptedInputTest.java b/splunk/src/test/java/com/splunk/ScriptedInputTest.java
similarity index 100%
rename from tests/com/splunk/ScriptedInputTest.java
rename to splunk/src/test/java/com/splunk/ScriptedInputTest.java
diff --git a/tests/com/splunk/SearchJobTest.java b/splunk/src/test/java/com/splunk/SearchJobTest.java
similarity index 98%
rename from tests/com/splunk/SearchJobTest.java
rename to splunk/src/test/java/com/splunk/SearchJobTest.java
index eacbdd10..6afc6c70 100644
--- a/tests/com/splunk/SearchJobTest.java
+++ b/splunk/src/test/java/com/splunk/SearchJobTest.java
@@ -18,13 +18,13 @@
 
 import org.junit.Assert;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
-import java.util.Collection;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
@@ -656,6 +656,7 @@ public void testAttributes() {
         job.cancel();
     }
 
+    @Ignore("apps/appinstall endpoint is removed in version 8.1.0")
     @Test
     public void testEnablePreview() throws InterruptedException {
         if (!hasTestData()) {
@@ -708,6 +709,7 @@ public boolean predicate() {
         waitForSleepingJobToDie(job);
     }
 
+    @Ignore("apps/appinstall endpoint is removed in version 8.1.0")
     @Test
     public void testDisablePreview() throws InterruptedException {
         if (!hasTestData()) {
@@ -779,7 +781,8 @@ public boolean predicate() {
             Thread.sleep(500);
         } catch (InterruptedException e) {}
     }
-    
+
+    @Ignore("apps/appinstall endpoint is removed in version 8.1.0")
     @Test
     public void testSetPriority() throws InterruptedException {
         if (!hasTestData()) {
@@ -830,6 +833,7 @@ public boolean predicate() {
         job.cancel();
     }
 
+    @Ignore("apps/appinstall endpoint is removed in version 8.1.0")
     @Test
     public void testPause() throws InterruptedException {
         if (!hasTestData()) {
@@ -863,6 +867,7 @@ public boolean predicate() {
         job.cancel();
     }
 
+    @Ignore("apps/appinstall endpoint is removed in version 8.1.0")
     @Test
     public void testUnpause() throws InterruptedException {
         if (!hasTestData()) {
@@ -896,6 +901,7 @@ public boolean predicate() {
         job.cancel();
     }
 
+    @Ignore("apps/appinstall endpoint is removed in version 8.1.0")
     @Test
     public void testFinalize() throws InterruptedException {
         if (!hasTestData()) {
@@ -926,6 +932,7 @@ public boolean predicate() {
         job.cancel();
     }
 
+    @Ignore("apps/appinstall endpoint is removed in version 8.1.0")
     @Test
     public void testDone() throws InterruptedException {
         if (!hasTestData()) {
diff --git a/tests/com/splunk/ServiceTest.java b/splunk/src/test/java/com/splunk/ServiceTest.java
similarity index 99%
rename from tests/com/splunk/ServiceTest.java
rename to splunk/src/test/java/com/splunk/ServiceTest.java
index 6726617d..b1681afe 100644
--- a/tests/com/splunk/ServiceTest.java
+++ b/splunk/src/test/java/com/splunk/ServiceTest.java
@@ -21,8 +21,6 @@
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.Socket;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
diff --git a/tests/com/splunk/SettingsTest.java b/splunk/src/test/java/com/splunk/SettingsTest.java
similarity index 100%
rename from tests/com/splunk/SettingsTest.java
rename to splunk/src/test/java/com/splunk/SettingsTest.java
diff --git a/tests/com/splunk/TcpInputTest.java b/splunk/src/test/java/com/splunk/TcpInputTest.java
similarity index 91%
rename from tests/com/splunk/TcpInputTest.java
rename to splunk/src/test/java/com/splunk/TcpInputTest.java
index 713b76d5..543501e6 100644
--- a/tests/com/splunk/TcpInputTest.java
+++ b/splunk/src/test/java/com/splunk/TcpInputTest.java
@@ -181,22 +181,22 @@ public boolean predicate() {
     // TODO: Move to InputTest once it has been ported over to the new suite.
     @Test
     public void testGetInputKindOfScript() {
-        Input scriptInput = new Input(service, "data/inputs/script/$SPLUNK_HOME/etc/apps/myapp/bin/myscript.py");
+        Input scriptInput = new Input(service, "/data/inputs/script/$SPLUNK_HOME/etc/apps/myapp/bin/myscript.py");
         Assert.assertEquals(InputKind.Script, scriptInput.getKind());
         
-        Input scriptInputWin = new Input(service, "data/inputs/script/$SPLUNK_HOME\\etc\\apps\\myapp\\bin\\myscript.py");
+        Input scriptInputWin = new Input(service, "/data/inputs/script/$SPLUNK_HOME\\etc\\apps\\myapp\\bin\\myscript.py");
         Assert.assertEquals(InputKind.Script, scriptInputWin.getKind());
         
-        Input tcpRawInput = new Input(service, "data/inputs/tcp/raw/6666");
+        Input tcpRawInput = new Input(service, "/data/inputs/tcp/raw/6666");
         Assert.assertEquals(InputKind.Tcp, tcpRawInput.getKind());
         
-        Input tcpCookedInput = new Input(service, "data/inputs/tcp/cooked/6666");
+        Input tcpCookedInput = new Input(service, "/data/inputs/tcp/cooked/6666");
         Assert.assertEquals(InputKind.TcpSplunk, tcpCookedInput.getKind());
         
-        Input udpInput = new Input(service, "data/inputs/udp/6666");
+        Input udpInput = new Input(service, "/data/inputs/udp/6666");
         Assert.assertEquals(InputKind.Udp, udpInput.getKind());
         
-        Input modularInput = new Input(service, "data/inputs/my_modular_input/input_name");
+        Input modularInput = new Input(service, "/data/inputs/my_modular_input/input_name");
         Assert.assertEquals(InputKind.create("my_modular_input"), modularInput.getKind());
     }
 }
diff --git a/tests/com/splunk/TestDataNotInstalledException.java b/splunk/src/test/java/com/splunk/TestDataNotInstalledException.java
similarity index 100%
rename from tests/com/splunk/TestDataNotInstalledException.java
rename to splunk/src/test/java/com/splunk/TestDataNotInstalledException.java
diff --git a/tests/com/splunk/UdpInputTest.java b/splunk/src/test/java/com/splunk/UdpInputTest.java
similarity index 100%
rename from tests/com/splunk/UdpInputTest.java
rename to splunk/src/test/java/com/splunk/UdpInputTest.java
diff --git a/tests/com/splunk/UploadTest.java b/splunk/src/test/java/com/splunk/UploadTest.java
similarity index 87%
rename from tests/com/splunk/UploadTest.java
rename to splunk/src/test/java/com/splunk/UploadTest.java
index 2f728722..f1549bcd 100644
--- a/tests/com/splunk/UploadTest.java
+++ b/splunk/src/test/java/com/splunk/UploadTest.java
@@ -18,12 +18,17 @@
 
 import org.junit.Test;
 
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.Date;
+
 public class UploadTest extends SDKTestCase {
     @Test
     public void testOneshot() {
         String filename = locateSystemLog();
         if (System.getenv("SPLUNK_HOME") != null) {
-            filename = System.getenv("SPLUNK_HOME") + "/var/log/splunk/splunkd.log";
+            filename = System.getenv("SPLUNK_HOME") + "/copyright.txt";
         }
 
         service.getUploads().create(filename);
diff --git a/tests/com/splunk/UtilTest.java b/splunk/src/test/java/com/splunk/UtilTest.java
similarity index 99%
rename from tests/com/splunk/UtilTest.java
rename to splunk/src/test/java/com/splunk/UtilTest.java
index baa62a92..a4a582e4 100644
--- a/tests/com/splunk/UtilTest.java
+++ b/splunk/src/test/java/com/splunk/UtilTest.java
@@ -19,7 +19,6 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 
diff --git a/tests/com/splunk/modularinput/EventTest.java b/splunk/src/test/java/com/splunk/modularinput/EventTest.java
similarity index 92%
rename from tests/com/splunk/modularinput/EventTest.java
rename to splunk/src/test/java/com/splunk/modularinput/EventTest.java
index 651f7d52..5d95cb86 100644
--- a/tests/com/splunk/modularinput/EventTest.java
+++ b/splunk/src/test/java/com/splunk/modularinput/EventTest.java
@@ -54,7 +54,7 @@ public void testXmlOfEventWithMinimalConfiguration() throws XMLStreamException,
         event.writeTo(writer);
         Document found = stringToXmlDocument(sb.toString());
 
-        Document expected = resourceToXmlDocument("modularinput/data/event_minimal.xml");
+        Document expected = resourceToXmlDocument("/modularinput/data/event_minimal.xml");
 
         assertXmlEqual(expected, found);
     }
@@ -81,7 +81,7 @@ public void testXmlOfEventWithMoreConfiguration() throws MalformedDataException,
         event.writeTo(writer);
         Document found = stringToXmlDocument(sb.toString());
 
-        Document expected = resourceToXmlDocument("modularinput/data/event_maximal.xml");
+        Document expected = resourceToXmlDocument("/modularinput/data/event_maximal.xml");
 
         assertXmlEqual(expected, found);
     }
@@ -111,7 +111,7 @@ public void testWritingEventsOnEventWriter() throws XMLStreamException, Transfor
         ew.writeEvent(event);
 
         Document found = stringToXmlDocument(out.toString() + "</stream>");
-        Document expected = resourceToXmlDocument("modularinput/data/stream_with_one_event.xml");
+        Document expected = resourceToXmlDocument("/modularinput/data/stream_with_one_event.xml");
 
         assertXmlEqual(expected, found);
         Assert.assertEquals("", err.toString());
@@ -122,7 +122,7 @@ public void testWritingEventsOnEventWriter() throws XMLStreamException, Transfor
         ew.close();
 
         found = stringToXmlDocument(out.toString());
-        expected = resourceToXmlDocument("modularinput/data/stream_with_two_events.xml");
+        expected = resourceToXmlDocument("/modularinput/data/stream_with_two_events.xml");
         assertXmlEqual(expected, found);
     }
 
@@ -172,7 +172,7 @@ public void testWriteXmlDocumentIsSane() throws XMLStreamException, IOException,
 
         EventWriter ew = new EventWriter(out, err);
 
-        Document expectedXml = resourceToXmlDocument("modularinput/data/event_maximal.xml");
+        Document expectedXml = resourceToXmlDocument("/modularinput/data/event_maximal.xml");
 
         ew.writeXmlDocument(expectedXml);
         Document foundXml = stringToXmlDocument(out.toString());
diff --git a/tests/com/splunk/modularinput/InputDefinitionTest.java b/splunk/src/test/java/com/splunk/modularinput/InputDefinitionTest.java
similarity index 91%
rename from tests/com/splunk/modularinput/InputDefinitionTest.java
rename to splunk/src/test/java/com/splunk/modularinput/InputDefinitionTest.java
index bd029b5a..aa9fe324 100644
--- a/tests/com/splunk/modularinput/InputDefinitionTest.java
+++ b/splunk/src/test/java/com/splunk/modularinput/InputDefinitionTest.java
@@ -27,7 +27,7 @@ public void testParseStreamWithZeroInputs() throws IOException, SAXException, Pa
         expectedDefinition.setCheckpointDir("/some/dir");
         expectedDefinition.setSessionKey("123102983109283019283");
 
-        InputStream stream = SDKTestCase.openResource("modularinput/data/conf_with_0_inputs.xml");
+        InputStream stream = SDKTestCase.openResource("/modularinput/data/conf_with_0_inputs.xml");
         InputDefinition foundDefinition = InputDefinition.parseDefinition(stream);
 
         Assert.assertTrue(expectedDefinition.equals(foundDefinition));
@@ -67,7 +67,7 @@ public void testParseStreamWithThreeInputs() throws ParserConfigurationException
         }});
         expectedDefinition.addInput("foobar://bbb", parameters);
 
-        InputStream stream = SDKTestCase.openResource("modularinput/data/conf_with_2_inputs.xml");
+        InputStream stream = SDKTestCase.openResource("/modularinput/data/conf_with_2_inputs.xml");
         InputDefinition foundDefinition = InputDefinition.parseDefinition(stream);
 
         Assert.assertTrue(expectedDefinition.equals(foundDefinition));
@@ -79,7 +79,7 @@ public void testParseStreamWithThreeInputs() throws ParserConfigurationException
     @Test
     public void testParseMalformedInputDefinition() throws ParserConfigurationException, SAXException, IOException {
         try {
-            InputStream stream = SDKTestCase.openResource("modularinput/data/conf_with_invalid_inputs.xml");
+            InputStream stream = SDKTestCase.openResource("/modularinput/data/conf_with_invalid_inputs.xml");
             InputDefinition foundDefinition = InputDefinition.parseDefinition(stream);
         } catch (MalformedDataException e) {
             Assert.assertTrue(true);
diff --git a/tests/com/splunk/modularinput/ModularInputTestCase.java b/splunk/src/test/java/com/splunk/modularinput/ModularInputTestCase.java
similarity index 97%
rename from tests/com/splunk/modularinput/ModularInputTestCase.java
rename to splunk/src/test/java/com/splunk/modularinput/ModularInputTestCase.java
index ddedf54d..ef0a7c92 100644
--- a/tests/com/splunk/modularinput/ModularInputTestCase.java
+++ b/splunk/src/test/java/com/splunk/modularinput/ModularInputTestCase.java
@@ -9,9 +9,6 @@
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.stream.XMLOutputFactory;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamWriter;
 import javax.xml.transform.OutputKeys;
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerException;
@@ -22,10 +19,6 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.logging.Level;
 
 public class ModularInputTestCase {
     /**
diff --git a/tests/com/splunk/modularinput/SchemeTest.java b/splunk/src/test/java/com/splunk/modularinput/SchemeTest.java
similarity index 89%
rename from tests/com/splunk/modularinput/SchemeTest.java
rename to splunk/src/test/java/com/splunk/modularinput/SchemeTest.java
index e5db1c40..b01ced04 100644
--- a/tests/com/splunk/modularinput/SchemeTest.java
+++ b/splunk/src/test/java/com/splunk/modularinput/SchemeTest.java
@@ -22,7 +22,7 @@ public void testGenerateXmlFromSchemeWithDefaultValues() throws TransformerExcep
         Scheme scheme = new Scheme("abcd");
 
         Document generatedDocument = scheme.toXml();
-        Document expectedDocument = resourceToXmlDocument("modularinput/data/scheme_with_defaults.xml");
+        Document expectedDocument = resourceToXmlDocument("/modularinput/data/scheme_with_defaults.xml");
 
         assertXmlEqual(expectedDocument, generatedDocument);
     }
@@ -51,7 +51,7 @@ public void testGenerateXmlFromScheme() throws TransformerException, ParserConfi
         scheme.addArgument(arg2);
 
         Document generatedDocument = scheme.toXml();
-        Document expectedDocument = resourceToXmlDocument("modularinput/data/scheme_without_defaults.xml");
+        Document expectedDocument = resourceToXmlDocument("/modularinput/data/scheme_without_defaults.xml");
 
         assertXmlEqual(expectedDocument, generatedDocument);
     }
@@ -67,7 +67,7 @@ public void testGenerateXmlFromArgumentWithDefaultValues() throws ParserConfigur
         Document generatedDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
         argument.addToDocument(generatedDoc, generatedDoc);
 
-        Document expectedDoc = resourceToXmlDocument("modularinput/data/argument_with_defaults.xml");
+        Document expectedDoc = resourceToXmlDocument("/modularinput/data/argument_with_defaults.xml");
 
         assertXmlEqual(expectedDoc, generatedDoc);
     }
@@ -87,7 +87,7 @@ public void testGenerateXmlFromArgument() throws ParserConfigurationException, T
         Document generatedDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
         argument.addToDocument(generatedDoc, generatedDoc);
 
-        Document expectedDoc = resourceToXmlDocument("modularinput/data/argument_without_defaults.xml");
+        Document expectedDoc = resourceToXmlDocument("/modularinput/data/argument_without_defaults.xml");
 
         assertXmlEqual(expectedDoc, generatedDoc);
     }
diff --git a/tests/com/splunk/modularinput/ScriptTest.java b/splunk/src/test/java/com/splunk/modularinput/ScriptTest.java
similarity index 92%
rename from tests/com/splunk/modularinput/ScriptTest.java
rename to splunk/src/test/java/com/splunk/modularinput/ScriptTest.java
index f1c04201..2e4acb0b 100644
--- a/tests/com/splunk/modularinput/ScriptTest.java
+++ b/splunk/src/test/java/com/splunk/modularinput/ScriptTest.java
@@ -100,7 +100,7 @@ public void streamEvents(InputDefinition inputs, EventWriter ew) throws Malforme
         Assert.assertEquals(0, returnValue);
 
         Document found = stringToXmlDocument(out.toString());
-        Document expected = resourceToXmlDocument("modularinput/data/scheme_without_defaults.xml");
+        Document expected = resourceToXmlDocument("/modularinput/data/scheme_without_defaults.xml");
 
         assertXmlEqual(expected, found);
     }
@@ -131,7 +131,7 @@ public void streamEvents(InputDefinition inputs, EventWriter ew) throws Malforme
         int returnValue = script.run(
                 args,
                 eventWriter,
-                SDKTestCase.openResource("modularinput/data/validation.xml")
+                SDKTestCase.openResource("/modularinput/data/validation.xml")
         );
 
         Assert.assertEquals("", err.toString());
@@ -165,10 +165,10 @@ public void streamEvents(InputDefinition inputs, EventWriter ew) throws Malforme
         int returnValue = script.run(
                 args,
                 eventWriter,
-                SDKTestCase.openResource("modularinput/data/validation.xml")
+                SDKTestCase.openResource("/modularinput/data/validation.xml")
         );
 
-        Document expectedXml = resourceToXmlDocument("modularinput/data/validation_error.xml");
+        Document expectedXml = resourceToXmlDocument("/modularinput/data/validation_error.xml");
         Document foundXml = stringToXmlDocument(out.toString());
 
         Assert.assertEquals("", err.toString());
@@ -208,14 +208,14 @@ public void streamEvents(InputDefinition inputs, EventWriter ew) throws Malforme
         };
 
         String[] args = new String[] {};
-        InputStream input = SDKTestCase.openResource("modularinput/data/conf_with_2_inputs.xml");
+        InputStream input = SDKTestCase.openResource("/modularinput/data/conf_with_2_inputs.xml");
 
         int returnValue = script.run(args, eventWriter, input);
 
         Assert.assertEquals(0, returnValue);
         Assert.assertEquals("", err.toString());
 
-        Document expectedXml = resourceToXmlDocument("modularinput/data/stream_with_two_events.xml");
+        Document expectedXml = resourceToXmlDocument("/modularinput/data/stream_with_two_events.xml");
         Document foundXml = stringToXmlDocument(out.toString());
         assertXmlEqual(expectedXml, foundXml);
 
diff --git a/tests/com/splunk/modularinput/ValidationDefinitionTest.java b/splunk/src/test/java/com/splunk/modularinput/ValidationDefinitionTest.java
similarity index 95%
rename from tests/com/splunk/modularinput/ValidationDefinitionTest.java
rename to splunk/src/test/java/com/splunk/modularinput/ValidationDefinitionTest.java
index 43eeb14f..6110c04e 100644
--- a/tests/com/splunk/modularinput/ValidationDefinitionTest.java
+++ b/splunk/src/test/java/com/splunk/modularinput/ValidationDefinitionTest.java
@@ -21,7 +21,7 @@ public class ValidationDefinitionTest extends ModularInputTestCase {
     @Test
     public void testParseValidationDefinition() throws ParserConfigurationException, SAXException, MalformedDataException,
             IOException {
-        InputStream stream = SDKTestCase.openResource("modularinput/data/validation.xml");
+        InputStream stream = SDKTestCase.openResource("/modularinput/data/validation.xml");
         ValidationDefinition found = ValidationDefinition.parseDefinition(stream);
 
         ValidationDefinition expected = new ValidationDefinition();
diff --git a/tests/com/splunk/raw_field.xml b/splunk/src/test/java/com/splunk/raw_field.xml
similarity index 100%
rename from tests/com/splunk/raw_field.xml
rename to splunk/src/test/java/com/splunk/raw_field.xml
diff --git a/tests/com/splunk/splunk.license b/splunk/src/test/java/com/splunk/splunk.license
similarity index 100%
rename from tests/com/splunk/splunk.license
rename to splunk/src/test/java/com/splunk/splunk.license
diff --git a/tests/com/splunk/splunk_at_least_cupcake.license b/splunk/src/test/java/com/splunk/splunk_at_least_cupcake.license
similarity index 100%
rename from tests/com/splunk/splunk_at_least_cupcake.license
rename to splunk/src/test/java/com/splunk/splunk_at_least_cupcake.license
diff --git a/tests/com/splunk/data/atom/atom_feed_with_message.xml b/splunk/src/test/resources/data/atom/atom_feed_with_message.xml
similarity index 100%
rename from tests/com/splunk/data/atom/atom_feed_with_message.xml
rename to splunk/src/test/resources/data/atom/atom_feed_with_message.xml
diff --git a/tests/com/splunk/data/atom/atom_with_feed.xml b/splunk/src/test/resources/data/atom/atom_with_feed.xml
similarity index 100%
rename from tests/com/splunk/data/atom/atom_with_feed.xml
rename to splunk/src/test/resources/data/atom/atom_with_feed.xml
diff --git a/tests/com/splunk/data/atom/atom_with_several_entries.xml b/splunk/src/test/resources/data/atom/atom_with_several_entries.xml
similarity index 100%
rename from tests/com/splunk/data/atom/atom_with_several_entries.xml
rename to splunk/src/test/resources/data/atom/atom_with_several_entries.xml
diff --git a/tests/com/splunk/data/atom/atom_with_simple_entries.xml b/splunk/src/test/resources/data/atom/atom_with_simple_entries.xml
similarity index 100%
rename from tests/com/splunk/data/atom/atom_with_simple_entries.xml
rename to splunk/src/test/resources/data/atom/atom_with_simple_entries.xml
diff --git a/tests/com/splunk/data/atom_test_data.json b/splunk/src/test/resources/data/atom_test_data.json
similarity index 100%
rename from tests/com/splunk/data/atom_test_data.json
rename to splunk/src/test/resources/data/atom_test_data.json
diff --git a/tests/com/splunk/data/datamodels/data_model_for_pivot.json b/splunk/src/test/resources/data/datamodels/data_model_for_pivot.json
similarity index 100%
rename from tests/com/splunk/data/datamodels/data_model_for_pivot.json
rename to splunk/src/test/resources/data/datamodels/data_model_for_pivot.json
diff --git a/tests/com/splunk/data/datamodels/data_model_with_test_objects.json b/splunk/src/test/resources/data/datamodels/data_model_with_test_objects.json
similarity index 100%
rename from tests/com/splunk/data/datamodels/data_model_with_test_objects.json
rename to splunk/src/test/resources/data/datamodels/data_model_with_test_objects.json
diff --git a/tests/com/splunk/data/datamodels/empty_data_model.json b/splunk/src/test/resources/data/datamodels/empty_data_model.json
similarity index 100%
rename from tests/com/splunk/data/datamodels/empty_data_model.json
rename to splunk/src/test/resources/data/datamodels/empty_data_model.json
diff --git a/tests/com/splunk/data/datamodels/inheritance_test_data.json b/splunk/src/test/resources/data/datamodels/inheritance_test_data.json
similarity index 100%
rename from tests/com/splunk/data/datamodels/inheritance_test_data.json
rename to splunk/src/test/resources/data/datamodels/inheritance_test_data.json
diff --git a/tests/com/splunk/data/datamodels/model_with_empty_headers.json b/splunk/src/test/resources/data/datamodels/model_with_empty_headers.json
similarity index 100%
rename from tests/com/splunk/data/datamodels/model_with_empty_headers.json
rename to splunk/src/test/resources/data/datamodels/model_with_empty_headers.json
diff --git a/tests/com/splunk/data/datamodels/model_with_multiple_types.json b/splunk/src/test/resources/data/datamodels/model_with_multiple_types.json
similarity index 100%
rename from tests/com/splunk/data/datamodels/model_with_multiple_types.json
rename to splunk/src/test/resources/data/datamodels/model_with_multiple_types.json
diff --git a/tests/com/splunk/data/datamodels/model_with_unicode_headers.json b/splunk/src/test/resources/data/datamodels/model_with_unicode_headers.json
similarity index 100%
rename from tests/com/splunk/data/datamodels/model_with_unicode_headers.json
rename to splunk/src/test/resources/data/datamodels/model_with_unicode_headers.json
diff --git a/tests/com/splunk/data/datamodels/object_with_one_search.json b/splunk/src/test/resources/data/datamodels/object_with_one_search.json
similarity index 100%
rename from tests/com/splunk/data/datamodels/object_with_one_search.json
rename to splunk/src/test/resources/data/datamodels/object_with_one_search.json
diff --git a/tests/com/splunk/data/datamodels/object_with_two_searches.json b/splunk/src/test/resources/data/datamodels/object_with_two_searches.json
similarity index 100%
rename from tests/com/splunk/data/datamodels/object_with_two_searches.json
rename to splunk/src/test/resources/data/datamodels/object_with_two_searches.json
diff --git a/tests/com/splunk/data/export/4.2.5/export_results.xml b/splunk/src/test/resources/data/export/4.2.5/export_results.xml
similarity index 100%
rename from tests/com/splunk/data/export/4.2.5/export_results.xml
rename to splunk/src/test/resources/data/export/4.2.5/export_results.xml
diff --git a/tests/com/splunk/data/export/4.3.5/export_results.xml b/splunk/src/test/resources/data/export/4.3.5/export_results.xml
similarity index 100%
rename from tests/com/splunk/data/export/4.3.5/export_results.xml
rename to splunk/src/test/resources/data/export/4.3.5/export_results.xml
diff --git a/tests/com/splunk/data/export/5.0.1/export_results.xml b/splunk/src/test/resources/data/export/5.0.1/export_results.xml
similarity index 100%
rename from tests/com/splunk/data/export/5.0.1/export_results.xml
rename to splunk/src/test/resources/data/export/5.0.1/export_results.xml
diff --git a/tests/com/splunk/data/export/5.0.1/nonreporting.xml b/splunk/src/test/resources/data/export/5.0.1/nonreporting.xml
similarity index 100%
rename from tests/com/splunk/data/export/5.0.1/nonreporting.xml
rename to splunk/src/test/resources/data/export/5.0.1/nonreporting.xml
diff --git a/tests/com/splunk/data/export_test_data.json b/splunk/src/test/resources/data/export_test_data.json
similarity index 100%
rename from tests/com/splunk/data/export_test_data.json
rename to splunk/src/test/resources/data/export_test_data.json
diff --git a/tests/com/splunk/data/pivot/empty_pivot.json b/splunk/src/test/resources/data/pivot/empty_pivot.json
similarity index 100%
rename from tests/com/splunk/data/pivot/empty_pivot.json
rename to splunk/src/test/resources/data/pivot/empty_pivot.json
diff --git a/tests/com/splunk/data/results/4.2.5/results-empty.xml b/splunk/src/test/resources/data/results/4.2.5/results-empty.xml
similarity index 100%
rename from tests/com/splunk/data/results/4.2.5/results-empty.xml
rename to splunk/src/test/resources/data/results/4.2.5/results-empty.xml
diff --git a/tests/com/splunk/data/results/4.2.5/results-preview.xml b/splunk/src/test/resources/data/results/4.2.5/results-preview.xml
similarity index 100%
rename from tests/com/splunk/data/results/4.2.5/results-preview.xml
rename to splunk/src/test/resources/data/results/4.2.5/results-preview.xml
diff --git a/tests/com/splunk/data/results/4.2.5/results.xml b/splunk/src/test/resources/data/results/4.2.5/results.xml
similarity index 100%
rename from tests/com/splunk/data/results/4.2.5/results.xml
rename to splunk/src/test/resources/data/results/4.2.5/results.xml
diff --git a/tests/com/splunk/data/results/4.3.5/results-empty.xml b/splunk/src/test/resources/data/results/4.3.5/results-empty.xml
similarity index 100%
rename from tests/com/splunk/data/results/4.3.5/results-empty.xml
rename to splunk/src/test/resources/data/results/4.3.5/results-empty.xml
diff --git a/tests/com/splunk/data/results/4.3.5/results-preview.xml b/splunk/src/test/resources/data/results/4.3.5/results-preview.xml
similarity index 100%
rename from tests/com/splunk/data/results/4.3.5/results-preview.xml
rename to splunk/src/test/resources/data/results/4.3.5/results-preview.xml
diff --git a/tests/com/splunk/data/results/4.3.5/results.xml b/splunk/src/test/resources/data/results/4.3.5/results.xml
similarity index 100%
rename from tests/com/splunk/data/results/4.3.5/results.xml
rename to splunk/src/test/resources/data/results/4.3.5/results.xml
diff --git a/tests/com/splunk/data/results/5.0.2/results-empty.xml b/splunk/src/test/resources/data/results/5.0.2/results-empty.xml
similarity index 100%
rename from tests/com/splunk/data/results/5.0.2/results-empty.xml
rename to splunk/src/test/resources/data/results/5.0.2/results-empty.xml
diff --git a/tests/com/splunk/data/results/5.0.2/results-empty_preview.xml b/splunk/src/test/resources/data/results/5.0.2/results-empty_preview.xml
similarity index 100%
rename from tests/com/splunk/data/results/5.0.2/results-empty_preview.xml
rename to splunk/src/test/resources/data/results/5.0.2/results-empty_preview.xml
diff --git a/tests/com/splunk/data/results/5.0.2/results-preview.xml b/splunk/src/test/resources/data/results/5.0.2/results-preview.xml
similarity index 100%
rename from tests/com/splunk/data/results/5.0.2/results-preview.xml
rename to splunk/src/test/resources/data/results/5.0.2/results-preview.xml
diff --git a/tests/com/splunk/data/results/5.0.2/results.xml b/splunk/src/test/resources/data/results/5.0.2/results.xml
similarity index 100%
rename from tests/com/splunk/data/results/5.0.2/results.xml
rename to splunk/src/test/resources/data/results/5.0.2/results.xml
diff --git a/tests/com/splunk/results.csv b/splunk/src/test/resources/data/results/results.csv
similarity index 100%
rename from tests/com/splunk/results.csv
rename to splunk/src/test/resources/data/results/results.csv
diff --git a/tests/com/splunk/results.xml b/splunk/src/test/resources/data/results/results.xml
similarity index 100%
rename from tests/com/splunk/results.xml
rename to splunk/src/test/resources/data/results/results.xml
diff --git a/tests/com/splunk/results4.json b/splunk/src/test/resources/data/results/results4.json
similarity index 100%
rename from tests/com/splunk/results4.json
rename to splunk/src/test/resources/data/results/results4.json
diff --git a/tests/com/splunk/results5.json b/splunk/src/test/resources/data/results/results5.json
similarity index 100%
rename from tests/com/splunk/results5.json
rename to splunk/src/test/resources/data/results/results5.json
diff --git a/tests/com/splunk/resultsExport.json b/splunk/src/test/resources/data/results/resultsExport.json
similarity index 100%
rename from tests/com/splunk/resultsExport.json
rename to splunk/src/test/resources/data/results/resultsExport.json
diff --git a/tests/com/splunk/resultsExport.xml b/splunk/src/test/resources/data/results/resultsExport.xml
similarity index 100%
rename from tests/com/splunk/resultsExport.xml
rename to splunk/src/test/resources/data/results/resultsExport.xml
diff --git a/tests/com/splunk/resultsMV.csv b/splunk/src/test/resources/data/results/resultsMV.csv
similarity index 100%
rename from tests/com/splunk/resultsMV.csv
rename to splunk/src/test/resources/data/results/resultsMV.csv
diff --git a/tests/com/splunk/resultsMV.xml b/splunk/src/test/resources/data/results/resultsMV.xml
similarity index 100%
rename from tests/com/splunk/resultsMV.xml
rename to splunk/src/test/resources/data/results/resultsMV.xml
diff --git a/tests/com/splunk/resultsMV4.json b/splunk/src/test/resources/data/results/resultsMV4.json
similarity index 100%
rename from tests/com/splunk/resultsMV4.json
rename to splunk/src/test/resources/data/results/resultsMV4.json
diff --git a/tests/com/splunk/resultsMV5.json b/splunk/src/test/resources/data/results/resultsMV5.json
similarity index 100%
rename from tests/com/splunk/resultsMV5.json
rename to splunk/src/test/resources/data/results/resultsMV5.json
diff --git a/tests/com/splunk/resultsMVFuture.json b/splunk/src/test/resources/data/results/resultsMVFuture.json
similarity index 100%
rename from tests/com/splunk/resultsMVFuture.json
rename to splunk/src/test/resources/data/results/resultsMVFuture.json
diff --git a/tests/com/splunk/resultsMVOneshot.csv b/splunk/src/test/resources/data/results/resultsMVOneshot.csv
similarity index 100%
rename from tests/com/splunk/resultsMVOneshot.csv
rename to splunk/src/test/resources/data/results/resultsMVOneshot.csv
diff --git a/tests/com/splunk/resultsMVOneshot.xml b/splunk/src/test/resources/data/results/resultsMVOneshot.xml
similarity index 100%
rename from tests/com/splunk/resultsMVOneshot.xml
rename to splunk/src/test/resources/data/results/resultsMVOneshot.xml
diff --git a/tests/com/splunk/resultsMVOneshot4.json b/splunk/src/test/resources/data/results/resultsMVOneshot4.json
similarity index 100%
rename from tests/com/splunk/resultsMVOneshot4.json
rename to splunk/src/test/resources/data/results/resultsMVOneshot4.json
diff --git a/tests/com/splunk/resultsMVOneshot5.json b/splunk/src/test/resources/data/results/resultsMVOneshot5.json
similarity index 100%
rename from tests/com/splunk/resultsMVOneshot5.json
rename to splunk/src/test/resources/data/results/resultsMVOneshot5.json
diff --git a/tests/com/splunk/resultsMVOneshotFuture.json b/splunk/src/test/resources/data/results/resultsMVOneshotFuture.json
similarity index 100%
rename from tests/com/splunk/resultsMVOneshotFuture.json
rename to splunk/src/test/resources/data/results/resultsMVOneshotFuture.json
diff --git a/tests/com/splunk/resultsPreview.xml b/splunk/src/test/resources/data/results/resultsPreview.xml
similarity index 100%
rename from tests/com/splunk/resultsPreview.xml
rename to splunk/src/test/resources/data/results/resultsPreview.xml
diff --git a/tests/com/splunk/data/resultsreader_test_data.json b/splunk/src/test/resources/data/resultsreader_test_data.json
similarity index 100%
rename from tests/com/splunk/data/resultsreader_test_data.json
rename to splunk/src/test/resources/data/resultsreader_test_data.json
diff --git a/tests/com/splunk/modularinput/data/argument_with_defaults.xml b/splunk/src/test/resources/modularinput/data/argument_with_defaults.xml
similarity index 100%
rename from tests/com/splunk/modularinput/data/argument_with_defaults.xml
rename to splunk/src/test/resources/modularinput/data/argument_with_defaults.xml
diff --git a/tests/com/splunk/modularinput/data/argument_without_defaults.xml b/splunk/src/test/resources/modularinput/data/argument_without_defaults.xml
similarity index 100%
rename from tests/com/splunk/modularinput/data/argument_without_defaults.xml
rename to splunk/src/test/resources/modularinput/data/argument_without_defaults.xml
diff --git a/tests/com/splunk/modularinput/data/conf_with_0_inputs.xml b/splunk/src/test/resources/modularinput/data/conf_with_0_inputs.xml
similarity index 100%
rename from tests/com/splunk/modularinput/data/conf_with_0_inputs.xml
rename to splunk/src/test/resources/modularinput/data/conf_with_0_inputs.xml
diff --git a/tests/com/splunk/modularinput/data/conf_with_2_inputs.xml b/splunk/src/test/resources/modularinput/data/conf_with_2_inputs.xml
similarity index 100%
rename from tests/com/splunk/modularinput/data/conf_with_2_inputs.xml
rename to splunk/src/test/resources/modularinput/data/conf_with_2_inputs.xml
diff --git a/tests/com/splunk/modularinput/data/conf_with_invalid_inputs.xml b/splunk/src/test/resources/modularinput/data/conf_with_invalid_inputs.xml
similarity index 100%
rename from tests/com/splunk/modularinput/data/conf_with_invalid_inputs.xml
rename to splunk/src/test/resources/modularinput/data/conf_with_invalid_inputs.xml
diff --git a/tests/com/splunk/modularinput/data/event_maximal.xml b/splunk/src/test/resources/modularinput/data/event_maximal.xml
similarity index 100%
rename from tests/com/splunk/modularinput/data/event_maximal.xml
rename to splunk/src/test/resources/modularinput/data/event_maximal.xml
diff --git a/tests/com/splunk/modularinput/data/event_minimal.xml b/splunk/src/test/resources/modularinput/data/event_minimal.xml
similarity index 100%
rename from tests/com/splunk/modularinput/data/event_minimal.xml
rename to splunk/src/test/resources/modularinput/data/event_minimal.xml
diff --git a/tests/com/splunk/modularinput/data/scheme_with_defaults.xml b/splunk/src/test/resources/modularinput/data/scheme_with_defaults.xml
similarity index 100%
rename from tests/com/splunk/modularinput/data/scheme_with_defaults.xml
rename to splunk/src/test/resources/modularinput/data/scheme_with_defaults.xml
diff --git a/tests/com/splunk/modularinput/data/scheme_without_defaults.xml b/splunk/src/test/resources/modularinput/data/scheme_without_defaults.xml
similarity index 100%
rename from tests/com/splunk/modularinput/data/scheme_without_defaults.xml
rename to splunk/src/test/resources/modularinput/data/scheme_without_defaults.xml
diff --git a/tests/com/splunk/modularinput/data/stream_with_one_event.xml b/splunk/src/test/resources/modularinput/data/stream_with_one_event.xml
similarity index 100%
rename from tests/com/splunk/modularinput/data/stream_with_one_event.xml
rename to splunk/src/test/resources/modularinput/data/stream_with_one_event.xml
diff --git a/tests/com/splunk/modularinput/data/stream_with_two_events.xml b/splunk/src/test/resources/modularinput/data/stream_with_two_events.xml
similarity index 100%
rename from tests/com/splunk/modularinput/data/stream_with_two_events.xml
rename to splunk/src/test/resources/modularinput/data/stream_with_two_events.xml
diff --git a/tests/com/splunk/modularinput/data/validation.xml b/splunk/src/test/resources/modularinput/data/validation.xml
similarity index 100%
rename from tests/com/splunk/modularinput/data/validation.xml
rename to splunk/src/test/resources/modularinput/data/validation.xml
diff --git a/tests/com/splunk/modularinput/data/validation_error.xml b/splunk/src/test/resources/modularinput/data/validation_error.xml
similarity index 100%
rename from tests/com/splunk/modularinput/data/validation_error.xml
rename to splunk/src/test/resources/modularinput/data/validation_error.xml
diff --git a/splunk/src/test/resources/results.csv b/splunk/src/test/resources/results.csv
new file mode 100644
index 00000000..64040eb7
--- /dev/null
+++ b/splunk/src/test/resources/results.csv
@@ -0,0 +1,4 @@
+"sum(kb)","series"
+"14372242.758775","twitter"
+"267802.333926","splunkd"
+"5979.036338","splunkd_access"
\ No newline at end of file
diff --git a/splunk/src/test/resources/results.xml b/splunk/src/test/resources/results.xml
new file mode 100644
index 00000000..b34137ab
--- /dev/null
+++ b/splunk/src/test/resources/results.xml
@@ -0,0 +1,53 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<results preview='0'>
+<meta>
+<fieldOrder>
+<field>series</field>
+<field>sum(kb)</field>
+</fieldOrder>
+</meta>
+<messages>
+  <msg type='DEBUG'>base lispy: [ AND ]</msg>
+  <msg type='DEBUG'>search context: user='admin', app='search', bs-pathname='/some/path'</msg>
+</messages>
+	<result offset='0'>
+		<field k='series'>
+			<value><text>twitter</text></value>
+		</field>
+		<field k='sum(kb)'>
+			<value><text>14372242.758775</text></value>
+		</field>
+	</result>
+	<result offset='1'>
+		<field k='series'>
+			<value><text>splunkd</text></value>
+		</field>
+		<field k='sum(kb)'>
+			<value><text>267802.333926</text></value>
+		</field>
+	</result>
+	<result offset='2'>
+		<field k='series'>
+			<value><text>flurry</text></value>
+		</field>
+		<field k='sum(kb)'>
+			<value><text>12576.454102</text></value>
+		</field>
+	</result>
+	<result offset='3'>
+		<field k='series'>
+			<value><text>splunkd_access</text></value>
+		</field>
+		<field k='sum(kb)'>
+			<value><text>5979.036338</text></value>
+		</field>
+	</result>
+	<result offset='4'>
+		<field k='series'>
+			<value><text>splunk_web_access</text></value>
+		</field>
+		<field k='sum(kb)'>
+			<value><text>5838.935649</text></value>
+		</field>
+	</result>
+</results>
diff --git a/splunk/src/test/resources/results4.json b/splunk/src/test/resources/results4.json
new file mode 100644
index 00000000..98711985
--- /dev/null
+++ b/splunk/src/test/resources/results4.json
@@ -0,0 +1,14 @@
+[
+    {
+        "sum(kb)":"14372242.758775",
+        "series":"twitter"
+    },
+    {
+        "sum(kb)":"267802.333926",
+        "series":"splunkd"
+    },
+    {
+        "sum(kb)":"5979.036338",
+        "series":"splunkd_access"
+    }
+]
diff --git a/splunk/src/test/resources/results5.json b/splunk/src/test/resources/results5.json
new file mode 100644
index 00000000..6475c51b
--- /dev/null
+++ b/splunk/src/test/resources/results5.json
@@ -0,0 +1 @@
+{"preview":false,"init_offset":0,"messages":[{"type":"DEBUG","text":"base lispy: [ AND index::_internal ]"},{"type":"DEBUG","text":"search context: user=\"admin\", app=\"search\", bs-pathname=\"/Users/fross/splunks/splunk-5.0/etc\""}],"results":[{"sum(kb)":"14372242.758775","series":"twitter"},{"sum(kb)":"267802.333926","series":"splunkd"},{"sum(kb)":"5979.036338","series":"splunkd_access"}]}
diff --git a/splunk/src/test/resources/resultsExport.json b/splunk/src/test/resources/resultsExport.json
new file mode 100644
index 00000000..ca65e81f
--- /dev/null
+++ b/splunk/src/test/resources/resultsExport.json
@@ -0,0 +1,69 @@
+﻿{"preview":true,"offset":0,"lastrow":true,"result":{"host":"Andy-PC","count":"62"}}
+{"preview":true,"offset":0,"result":{"host":"Andy-PC","count":"1682"}}
+{"preview":true,"offset":1,"result":{"host":"andy-pc","count":"3"}}
+{"preview":true,"offset":2,"lastrow":true,"result":{"host":"three.four.com","count":"1495"}}
+{"preview":true,"offset":0,"result":{"host":"172.16.35.130","count":"16"}}
+{"preview":true,"offset":1,"result":{"host":"ANDY-PC","count":"232"}}
+{"preview":true,"offset":2,"result":{"host":"Andy-PC","count":"2766"}}
+{"preview":true,"offset":3,"result":{"host":"andy-pc","count":"133"}}
+{"preview":true,"offset":4,"lastrow":true,"result":{"host":"three.four.com","count":"2579"}}
+{"preview":true,"offset":0,"result":{"host":"172.16.35.130","count":"16"}}
+{"preview":true,"offset":1,"result":{"host":"ANDY-PC","count":"1786"}}
+{"preview":true,"offset":2,"result":{"host":"Andy-PC","count":"3543"}}
+{"preview":true,"offset":3,"result":{"host":"andy-pc","count":"133"}}
+{"preview":true,"offset":4,"lastrow":true,"result":{"host":"three.four.com","count":"3356"}}
+{"preview":true,"offset":0,"result":{"host":"172.16.35.130","count":"16"}}
+{"preview":true,"offset":1,"result":{"host":"ANDY-PC","count":"3184"}}
+{"preview":true,"offset":2,"result":{"host":"Andy-PC","count":"4242"}}
+{"preview":true,"offset":3,"result":{"host":"andy-pc","count":"133"}}
+{"preview":true,"offset":4,"lastrow":true,"result":{"host":"three.four.com","count":"4055"}}
+{"preview":true,"offset":0,"result":{"host":"172.16.35.130","count":"16"}}
+{"preview":true,"offset":1,"result":{"host":"ANDY-PC","count":"7052"}}
+{"preview":true,"offset":2,"result":{"host":"Andy-PC","count":"6176"}}
+{"preview":true,"offset":3,"result":{"host":"andy-pc","count":"133"}}
+{"preview":true,"offset":4,"lastrow":true,"result":{"host":"three.four.com","count":"5989"}}
+{"preview":true,"offset":0,"result":{"host":"172.16.35.130","count":"16"}}
+{"preview":true,"offset":1,"result":{"host":"ANDY-PC","count":"10034"}}
+{"preview":true,"offset":2,"result":{"host":"Andy-PC","count":"8388"}}
+{"preview":true,"offset":3,"result":{"host":"andy-pc","count":"135"}}
+{"preview":true,"offset":4,"lastrow":true,"result":{"host":"three.four.com","count":"7689"}}
+{"preview":true,"offset":0,"result":{"host":"172.16.35.130","count":"16"}}
+{"preview":true,"offset":1,"result":{"host":"ANDY-PC","count":"12668"}}
+{"preview":true,"offset":2,"result":{"host":"Andy-PC","count":"11176"}}
+{"preview":true,"offset":3,"result":{"host":"andy-pc","count":"135"}}
+{"preview":true,"offset":4,"lastrow":true,"result":{"host":"three.four.com","count":"10323"}}
+{"preview":true,"offset":0,"result":{"host":"172.16.35.130","count":"16"}}
+{"preview":true,"offset":1,"result":{"host":"ANDY-PC","count":"13996"}}
+{"preview":true,"offset":2,"result":{"host":"Andy-PC","count":"28317"}}
+{"preview":true,"offset":3,"result":{"host":"andy-pc","count":"135"}}
+{"preview":true,"offset":4,"lastrow":true,"result":{"host":"three.four.com","count":"11651"}}
+{"preview":true,"offset":0,"result":{"host":"172.16.35.130","count":"16"}}
+{"preview":true,"offset":1,"result":{"host":"ANDY-PC","count":"15030"}}
+{"preview":true,"offset":2,"result":{"host":"Andy-PC","count":"28834"}}
+{"preview":true,"offset":3,"result":{"host":"andy-pc","count":"135"}}
+{"preview":true,"offset":4,"lastrow":true,"result":{"host":"three.four.com","count":"12685"}}
+{"preview":true,"offset":0,"result":{"host":"172.16.35.130","count":"16"}}
+{"preview":true,"offset":1,"result":{"host":"ANDY-PC","count":"17160"}}
+{"preview":true,"offset":2,"result":{"host":"Andy-PC","count":"29899"}}
+{"preview":true,"offset":3,"result":{"host":"andy-pc","count":"135"}}
+{"preview":true,"offset":4,"lastrow":true,"result":{"host":"three.four.com","count":"14815"}}
+{"preview":true,"offset":0,"result":{"host":"172.16.35.130","count":"16"}}
+{"preview":true,"offset":1,"result":{"host":"ANDY-PC","count":"20432"}}
+{"preview":true,"offset":2,"result":{"host":"Andy-PC","count":"31535"}}
+{"preview":true,"offset":3,"result":{"host":"andy-pc","count":"135"}}
+{"preview":true,"offset":4,"lastrow":true,"result":{"host":"three.four.com","count":"18087"}}
+{"preview":true,"offset":0,"result":{"host":"172.16.35.130","count":"16"}}
+{"preview":true,"offset":1,"result":{"host":"ANDY-PC","count":"23862"}}
+{"preview":true,"offset":2,"result":{"host":"Andy-PC","count":"33250"}}
+{"preview":true,"offset":3,"result":{"host":"andy-pc","count":"135"}}
+{"preview":true,"offset":4,"lastrow":true,"result":{"host":"three.four.com","count":"21517"}}
+{"preview":true,"offset":0,"result":{"host":"172.16.35.130","count":"16"}}
+{"preview":true,"offset":1,"result":{"host":"ANDY-PC","count":"29732"}}
+{"preview":true,"offset":2,"result":{"host":"Andy-PC","count":"36185"}}
+{"preview":true,"offset":3,"result":{"host":"andy-pc","count":"135"}}
+{"preview":true,"offset":4,"lastrow":true,"result":{"host":"three.four.com","count":"27772"}}
+{"preview":false,"offset":0,"result":{"host":"172.16.35.130","count":"16"}}
+{"preview":false,"offset":1,"result":{"host":"ANDY-PC","count":"29732"}}
+{"preview":false,"offset":2,"result":{"host":"Andy-PC","count":"36185"}}
+{"preview":false,"offset":3,"result":{"host":"andy-pc","count":"135"}}
+{"preview":false,"offset":4,"lastrow":true,"result":{"host":"three.four.com","count":"35994"}}
diff --git a/splunk/src/test/resources/resultsExport.xml b/splunk/src/test/resources/resultsExport.xml
new file mode 100644
index 00000000..1e388611
--- /dev/null
+++ b/splunk/src/test/resources/resultsExport.xml
@@ -0,0 +1,907 @@
+﻿<?xml version='1.0' encoding='utf-8'?>
+<results preview='1'>
+<meta>
+<fieldOrder>
+<field>host</field>
+<field>count</field>
+</fieldOrder>
+</meta>
+<messages>
+  <msg type="DEBUG">base lispy: [ AND ]</msg>
+  <msg type="DEBUG">search context: user="admin", app="search", bs-pathname="C:\Program Files\Splunk\etc"</msg>
+</messages>
+
+	<result offset='0'>
+		<field k='host'>
+			<value><text>Andy-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>62</text></value>
+		</field>
+	</result>
+</results>
+<results preview='1'>
+<meta>
+<fieldOrder>
+<field>host</field>
+<field>count</field>
+</fieldOrder>
+</meta>
+<messages>
+  <msg type="DEBUG">base lispy: [ AND ]</msg>
+  <msg type="DEBUG">search context: user="admin", app="search", bs-pathname="C:\Program Files\Splunk\etc"</msg>
+</messages>
+
+	<result offset='0'>
+		<field k='host'>
+			<value><text>Andy-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>1682</text></value>
+		</field>
+	</result>
+	<result offset='1'>
+		<field k='host'>
+			<value><text>andy-pc</text></value>
+		</field>
+		<field k='count'>
+			<value><text>3</text></value>
+		</field>
+	</result>
+	<result offset='2'>
+		<field k='host'>
+			<value><text>three.four.com</text></value>
+		</field>
+		<field k='count'>
+			<value><text>1495</text></value>
+		</field>
+	</result>
+</results>
+<results preview='1'>
+<meta>
+<fieldOrder>
+<field>host</field>
+<field>count</field>
+</fieldOrder>
+</meta>
+<messages>
+  <msg type="DEBUG">base lispy: [ AND ]</msg>
+  <msg type="DEBUG">search context: user="admin", app="search", bs-pathname="C:\Program Files\Splunk\etc"</msg>
+</messages>
+
+	<result offset='0'>
+		<field k='host'>
+			<value><text>172.16.35.130</text></value>
+		</field>
+		<field k='count'>
+			<value><text>16</text></value>
+		</field>
+	</result>
+	<result offset='1'>
+		<field k='host'>
+			<value><text>ANDY-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>232</text></value>
+		</field>
+	</result>
+	<result offset='2'>
+		<field k='host'>
+			<value><text>Andy-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>2766</text></value>
+		</field>
+	</result>
+	<result offset='3'>
+		<field k='host'>
+			<value><text>andy-pc</text></value>
+		</field>
+		<field k='count'>
+			<value><text>133</text></value>
+		</field>
+	</result>
+	<result offset='4'>
+		<field k='host'>
+			<value><text>three.four.com</text></value>
+		</field>
+		<field k='count'>
+			<value><text>2579</text></value>
+		</field>
+	</result>
+</results>
+<results preview='1'>
+<meta>
+<fieldOrder>
+<field>host</field>
+<field>count</field>
+</fieldOrder>
+</meta>
+<messages>
+  <msg type="DEBUG">base lispy: [ AND ]</msg>
+  <msg type="DEBUG">search context: user="admin", app="search", bs-pathname="C:\Program Files\Splunk\etc"</msg>
+</messages>
+
+	<result offset='0'>
+		<field k='host'>
+			<value><text>172.16.35.130</text></value>
+		</field>
+		<field k='count'>
+			<value><text>16</text></value>
+		</field>
+	</result>
+	<result offset='1'>
+		<field k='host'>
+			<value><text>ANDY-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>1786</text></value>
+		</field>
+	</result>
+	<result offset='2'>
+		<field k='host'>
+			<value><text>Andy-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>3543</text></value>
+		</field>
+	</result>
+	<result offset='3'>
+		<field k='host'>
+			<value><text>andy-pc</text></value>
+		</field>
+		<field k='count'>
+			<value><text>133</text></value>
+		</field>
+	</result>
+	<result offset='4'>
+		<field k='host'>
+			<value><text>three.four.com</text></value>
+		</field>
+		<field k='count'>
+			<value><text>3356</text></value>
+		</field>
+	</result>
+</results>
+<results preview='1'>
+<meta>
+<fieldOrder>
+<field>host</field>
+<field>count</field>
+</fieldOrder>
+</meta>
+<messages>
+  <msg type="DEBUG">base lispy: [ AND ]</msg>
+  <msg type="DEBUG">search context: user="admin", app="search", bs-pathname="C:\Program Files\Splunk\etc"</msg>
+</messages>
+
+	<result offset='0'>
+		<field k='host'>
+			<value><text>172.16.35.130</text></value>
+		</field>
+		<field k='count'>
+			<value><text>16</text></value>
+		</field>
+	</result>
+	<result offset='1'>
+		<field k='host'>
+			<value><text>ANDY-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>3184</text></value>
+		</field>
+	</result>
+	<result offset='2'>
+		<field k='host'>
+			<value><text>Andy-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>4242</text></value>
+		</field>
+	</result>
+	<result offset='3'>
+		<field k='host'>
+			<value><text>andy-pc</text></value>
+		</field>
+		<field k='count'>
+			<value><text>133</text></value>
+		</field>
+	</result>
+	<result offset='4'>
+		<field k='host'>
+			<value><text>three.four.com</text></value>
+		</field>
+		<field k='count'>
+			<value><text>4055</text></value>
+		</field>
+	</result>
+</results>
+<results preview='1'>
+<meta>
+<fieldOrder>
+<field>host</field>
+<field>count</field>
+</fieldOrder>
+</meta>
+<messages>
+  <msg type="DEBUG">base lispy: [ AND ]</msg>
+  <msg type="DEBUG">search context: user="admin", app="search", bs-pathname="C:\Program Files\Splunk\etc"</msg>
+</messages>
+
+	<result offset='0'>
+		<field k='host'>
+			<value><text>172.16.35.130</text></value>
+		</field>
+		<field k='count'>
+			<value><text>16</text></value>
+		</field>
+	</result>
+	<result offset='1'>
+		<field k='host'>
+			<value><text>ANDY-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>4446</text></value>
+		</field>
+	</result>
+	<result offset='2'>
+		<field k='host'>
+			<value><text>Andy-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>4873</text></value>
+		</field>
+	</result>
+	<result offset='3'>
+		<field k='host'>
+			<value><text>andy-pc</text></value>
+		</field>
+		<field k='count'>
+			<value><text>133</text></value>
+		</field>
+	</result>
+	<result offset='4'>
+		<field k='host'>
+			<value><text>three.four.com</text></value>
+		</field>
+		<field k='count'>
+			<value><text>4686</text></value>
+		</field>
+	</result>
+</results>
+<results preview='1'>
+<meta>
+<fieldOrder>
+<field>host</field>
+<field>count</field>
+</fieldOrder>
+</meta>
+<messages>
+  <msg type="DEBUG">base lispy: [ AND ]</msg>
+  <msg type="DEBUG">search context: user="admin", app="search", bs-pathname="C:\Program Files\Splunk\etc"</msg>
+</messages>
+
+	<result offset='0'>
+		<field k='host'>
+			<value><text>172.16.35.130</text></value>
+		</field>
+		<field k='count'>
+			<value><text>16</text></value>
+		</field>
+	</result>
+	<result offset='1'>
+		<field k='host'>
+			<value><text>ANDY-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>9222</text></value>
+		</field>
+	</result>
+	<result offset='2'>
+		<field k='host'>
+			<value><text>Andy-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>7261</text></value>
+		</field>
+	</result>
+	<result offset='3'>
+		<field k='host'>
+			<value><text>andy-pc</text></value>
+		</field>
+		<field k='count'>
+			<value><text>133</text></value>
+		</field>
+	</result>
+	<result offset='4'>
+		<field k='host'>
+			<value><text>three.four.com</text></value>
+		</field>
+		<field k='count'>
+			<value><text>7074</text></value>
+		</field>
+	</result>
+</results>
+<results preview='1'>
+<meta>
+<fieldOrder>
+<field>host</field>
+<field>count</field>
+</fieldOrder>
+</meta>
+<messages>
+  <msg type="DEBUG">base lispy: [ AND ]</msg>
+  <msg type="DEBUG">search context: user="admin", app="search", bs-pathname="C:\Program Files\Splunk\etc"</msg>
+</messages>
+
+	<result offset='0'>
+		<field k='host'>
+			<value><text>172.16.35.130</text></value>
+		</field>
+		<field k='count'>
+			<value><text>16</text></value>
+		</field>
+	</result>
+	<result offset='1'>
+		<field k='host'>
+			<value><text>ANDY-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>11722</text></value>
+		</field>
+	</result>
+	<result offset='2'>
+		<field k='host'>
+			<value><text>Andy-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>10039</text></value>
+		</field>
+	</result>
+	<result offset='3'>
+		<field k='host'>
+			<value><text>andy-pc</text></value>
+		</field>
+		<field k='count'>
+			<value><text>135</text></value>
+		</field>
+	</result>
+	<result offset='4'>
+		<field k='host'>
+			<value><text>three.four.com</text></value>
+		</field>
+		<field k='count'>
+			<value><text>9377</text></value>
+		</field>
+	</result>
+</results>
+<results preview='1'>
+<meta>
+<fieldOrder>
+<field>host</field>
+<field>count</field>
+</fieldOrder>
+</meta>
+<messages>
+  <msg type="DEBUG">base lispy: [ AND ]</msg>
+  <msg type="DEBUG">search context: user="admin", app="search", bs-pathname="C:\Program Files\Splunk\etc"</msg>
+</messages>
+
+	<result offset='0'>
+		<field k='host'>
+			<value><text>172.16.35.130</text></value>
+		</field>
+		<field k='count'>
+			<value><text>16</text></value>
+		</field>
+	</result>
+	<result offset='1'>
+		<field k='host'>
+			<value><text>ANDY-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>12668</text></value>
+		</field>
+	</result>
+	<result offset='2'>
+		<field k='host'>
+			<value><text>Andy-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>11176</text></value>
+		</field>
+	</result>
+	<result offset='3'>
+		<field k='host'>
+			<value><text>andy-pc</text></value>
+		</field>
+		<field k='count'>
+			<value><text>135</text></value>
+		</field>
+	</result>
+	<result offset='4'>
+		<field k='host'>
+			<value><text>three.four.com</text></value>
+		</field>
+		<field k='count'>
+			<value><text>10323</text></value>
+		</field>
+	</result>
+</results>
+<results preview='1'>
+<meta>
+<fieldOrder>
+<field>host</field>
+<field>count</field>
+</fieldOrder>
+</meta>
+<messages>
+  <msg type="DEBUG">base lispy: [ AND ]</msg>
+  <msg type="DEBUG">search context: user="admin", app="search", bs-pathname="C:\Program Files\Splunk\etc"</msg>
+</messages>
+
+	<result offset='0'>
+		<field k='host'>
+			<value><text>172.16.35.130</text></value>
+		</field>
+		<field k='count'>
+			<value><text>16</text></value>
+		</field>
+	</result>
+	<result offset='1'>
+		<field k='host'>
+			<value><text>ANDY-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>13996</text></value>
+		</field>
+	</result>
+	<result offset='2'>
+		<field k='host'>
+			<value><text>Andy-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>28317</text></value>
+		</field>
+	</result>
+	<result offset='3'>
+		<field k='host'>
+			<value><text>andy-pc</text></value>
+		</field>
+		<field k='count'>
+			<value><text>135</text></value>
+		</field>
+	</result>
+	<result offset='4'>
+		<field k='host'>
+			<value><text>three.four.com</text></value>
+		</field>
+		<field k='count'>
+			<value><text>11651</text></value>
+		</field>
+	</result>
+</results>
+<results preview='1'>
+<meta>
+<fieldOrder>
+<field>host</field>
+<field>count</field>
+</fieldOrder>
+</meta>
+<messages>
+  <msg type="DEBUG">base lispy: [ AND ]</msg>
+  <msg type="DEBUG">search context: user="admin", app="search", bs-pathname="C:\Program Files\Splunk\etc"</msg>
+</messages>
+
+	<result offset='0'>
+		<field k='host'>
+			<value><text>172.16.35.130</text></value>
+		</field>
+		<field k='count'>
+			<value><text>16</text></value>
+		</field>
+	</result>
+	<result offset='1'>
+		<field k='host'>
+			<value><text>ANDY-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>16034</text></value>
+		</field>
+	</result>
+	<result offset='2'>
+		<field k='host'>
+			<value><text>Andy-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>29336</text></value>
+		</field>
+	</result>
+	<result offset='3'>
+		<field k='host'>
+			<value><text>andy-pc</text></value>
+		</field>
+		<field k='count'>
+			<value><text>135</text></value>
+		</field>
+	</result>
+	<result offset='4'>
+		<field k='host'>
+			<value><text>three.four.com</text></value>
+		</field>
+		<field k='count'>
+			<value><text>13689</text></value>
+		</field>
+	</result>
+</results>
+<results preview='1'>
+<meta>
+<fieldOrder>
+<field>host</field>
+<field>count</field>
+</fieldOrder>
+</meta>
+<messages>
+  <msg type="DEBUG">base lispy: [ AND ]</msg>
+  <msg type="DEBUG">search context: user="admin", app="search", bs-pathname="C:\Program Files\Splunk\etc"</msg>
+</messages>
+
+	<result offset='0'>
+		<field k='host'>
+			<value><text>172.16.35.130</text></value>
+		</field>
+		<field k='count'>
+			<value><text>16</text></value>
+		</field>
+	</result>
+	<result offset='1'>
+		<field k='host'>
+			<value><text>ANDY-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>19382</text></value>
+		</field>
+	</result>
+	<result offset='2'>
+		<field k='host'>
+			<value><text>Andy-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>31010</text></value>
+		</field>
+	</result>
+	<result offset='3'>
+		<field k='host'>
+			<value><text>andy-pc</text></value>
+		</field>
+		<field k='count'>
+			<value><text>135</text></value>
+		</field>
+	</result>
+	<result offset='4'>
+		<field k='host'>
+			<value><text>three.four.com</text></value>
+		</field>
+		<field k='count'>
+			<value><text>17037</text></value>
+		</field>
+	</result>
+</results>
+<results preview='1'>
+<meta>
+<fieldOrder>
+<field>host</field>
+<field>count</field>
+</fieldOrder>
+</meta>
+<messages>
+  <msg type="DEBUG">base lispy: [ AND ]</msg>
+  <msg type="DEBUG">search context: user="admin", app="search", bs-pathname="C:\Program Files\Splunk\etc"</msg>
+</messages>
+
+	<result offset='0'>
+		<field k='host'>
+			<value><text>172.16.35.130</text></value>
+		</field>
+		<field k='count'>
+			<value><text>16</text></value>
+		</field>
+	</result>
+	<result offset='1'>
+		<field k='host'>
+			<value><text>ANDY-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>20432</text></value>
+		</field>
+	</result>
+	<result offset='2'>
+		<field k='host'>
+			<value><text>Andy-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>31535</text></value>
+		</field>
+	</result>
+	<result offset='3'>
+		<field k='host'>
+			<value><text>andy-pc</text></value>
+		</field>
+		<field k='count'>
+			<value><text>135</text></value>
+		</field>
+	</result>
+	<result offset='4'>
+		<field k='host'>
+			<value><text>three.four.com</text></value>
+		</field>
+		<field k='count'>
+			<value><text>18087</text></value>
+		</field>
+	</result>
+</results>
+<results preview='1'>
+<meta>
+<fieldOrder>
+<field>host</field>
+<field>count</field>
+</fieldOrder>
+</meta>
+<messages>
+  <msg type="DEBUG">base lispy: [ AND ]</msg>
+  <msg type="DEBUG">search context: user="admin", app="search", bs-pathname="C:\Program Files\Splunk\etc"</msg>
+</messages>
+
+	<result offset='0'>
+		<field k='host'>
+			<value><text>172.16.35.130</text></value>
+		</field>
+		<field k='count'>
+			<value><text>16</text></value>
+		</field>
+	</result>
+	<result offset='1'>
+		<field k='host'>
+			<value><text>ANDY-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>23862</text></value>
+		</field>
+	</result>
+	<result offset='2'>
+		<field k='host'>
+			<value><text>Andy-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>33250</text></value>
+		</field>
+	</result>
+	<result offset='3'>
+		<field k='host'>
+			<value><text>andy-pc</text></value>
+		</field>
+		<field k='count'>
+			<value><text>135</text></value>
+		</field>
+	</result>
+	<result offset='4'>
+		<field k='host'>
+			<value><text>three.four.com</text></value>
+		</field>
+		<field k='count'>
+			<value><text>21517</text></value>
+		</field>
+	</result>
+</results>
+<results preview='1'>
+<meta>
+<fieldOrder>
+<field>host</field>
+<field>count</field>
+</fieldOrder>
+</meta>
+<messages>
+  <msg type="DEBUG">base lispy: [ AND ]</msg>
+  <msg type="DEBUG">search context: user="admin", app="search", bs-pathname="C:\Program Files\Splunk\etc"</msg>
+</messages>
+
+	<result offset='0'>
+		<field k='host'>
+			<value><text>172.16.35.130</text></value>
+		</field>
+		<field k='count'>
+			<value><text>16</text></value>
+		</field>
+	</result>
+	<result offset='1'>
+		<field k='host'>
+			<value><text>ANDY-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>27080</text></value>
+		</field>
+	</result>
+	<result offset='2'>
+		<field k='host'>
+			<value><text>Andy-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>34859</text></value>
+		</field>
+	</result>
+	<result offset='3'>
+		<field k='host'>
+			<value><text>andy-pc</text></value>
+		</field>
+		<field k='count'>
+			<value><text>135</text></value>
+		</field>
+	</result>
+	<result offset='4'>
+		<field k='host'>
+			<value><text>three.four.com</text></value>
+		</field>
+		<field k='count'>
+			<value><text>24735</text></value>
+		</field>
+	</result>
+</results>
+<results preview='1'>
+<meta>
+<fieldOrder>
+<field>host</field>
+<field>count</field>
+</fieldOrder>
+</meta>
+<messages>
+  <msg type="DEBUG">base lispy: [ AND ]</msg>
+  <msg type="DEBUG">search context: user="admin", app="search", bs-pathname="C:\Program Files\Splunk\etc"</msg>
+</messages>
+
+	<result offset='0'>
+		<field k='host'>
+			<value><text>172.16.35.130</text></value>
+		</field>
+		<field k='count'>
+			<value><text>16</text></value>
+		</field>
+	</result>
+	<result offset='1'>
+		<field k='host'>
+			<value><text>ANDY-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>28092</text></value>
+		</field>
+	</result>
+	<result offset='2'>
+		<field k='host'>
+			<value><text>Andy-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>35365</text></value>
+		</field>
+	</result>
+	<result offset='3'>
+		<field k='host'>
+			<value><text>andy-pc</text></value>
+		</field>
+		<field k='count'>
+			<value><text>135</text></value>
+		</field>
+	</result>
+	<result offset='4'>
+		<field k='host'>
+			<value><text>three.four.com</text></value>
+		</field>
+		<field k='count'>
+			<value><text>25747</text></value>
+		</field>
+	</result>
+</results>
+<results preview='1'>
+<meta>
+<fieldOrder>
+<field>host</field>
+<field>count</field>
+</fieldOrder>
+</meta>
+<messages>
+  <msg type="DEBUG">base lispy: [ AND ]</msg>
+  <msg type="DEBUG">search context: user="admin", app="search", bs-pathname="C:\Program Files\Splunk\etc"</msg>
+</messages>
+
+	<result offset='0'>
+		<field k='host'>
+			<value><text>172.16.35.130</text></value>
+		</field>
+		<field k='count'>
+			<value><text>16</text></value>
+		</field>
+	</result>
+	<result offset='1'>
+		<field k='host'>
+			<value><text>ANDY-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>29732</text></value>
+		</field>
+	</result>
+	<result offset='2'>
+		<field k='host'>
+			<value><text>Andy-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>36185</text></value>
+		</field>
+	</result>
+	<result offset='3'>
+		<field k='host'>
+			<value><text>andy-pc</text></value>
+		</field>
+		<field k='count'>
+			<value><text>135</text></value>
+		</field>
+	</result>
+	<result offset='4'>
+		<field k='host'>
+			<value><text>three.four.com</text></value>
+		</field>
+		<field k='count'>
+			<value><text>30641</text></value>
+		</field>
+	</result>
+</results>
+<results preview='0'>
+<meta>
+<fieldOrder>
+<field>host</field>
+<field>count</field>
+</fieldOrder>
+</meta>
+<messages>
+  <msg type="DEBUG">base lispy: [ AND ]</msg>
+  <msg type="DEBUG">search context: user="admin", app="search", bs-pathname="C:\Program Files\Splunk\etc"</msg>
+</messages>
+
+	<result offset='0'>
+		<field k='host'>
+			<value><text>172.16.35.130</text></value>
+		</field>
+		<field k='count'>
+			<value><text>16</text></value>
+		</field>
+	</result>
+	<result offset='1'>
+		<field k='host'>
+			<value><text>ANDY-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>29732</text></value>
+		</field>
+	</result>
+	<result offset='2'>
+		<field k='host'>
+			<value><text>Andy-PC</text></value>
+		</field>
+		<field k='count'>
+			<value><text>36185</text></value>
+		</field>
+	</result>
+	<result offset='3'>
+		<field k='host'>
+			<value><text>andy-pc</text></value>
+		</field>
+		<field k='count'>
+			<value><text>135</text></value>
+		</field>
+	</result>
+	<result offset='4'>
+		<field k='host'>
+			<value><text>three.four.com</text></value>
+		</field>
+		<field k='count'>
+			<value><text>35994</text></value>
+		</field>
+	</result>
+</results>
\ No newline at end of file
diff --git a/splunk/src/test/resources/resultsMV.csv b/splunk/src/test/resources/resultsMV.csv
new file mode 100644
index 00000000..b78d26a4
--- /dev/null
+++ b/splunk/src/test/resources/resultsMV.csv
@@ -0,0 +1,3 @@
+"_bkt","_cd","_indextime","_raw","_serial","_si","_sourcetype","_subsecond","_time",host,index,linecount,source,sourcetype,"splunk_server"
+"_internal~115~BC509B13-C34D-4A69-B216-488806E9EA63","115:4933",1354063445,"11-27-2012 16:44:05.208 -0800 INFO  Metrics - group=udpin_connections, *:9999, sourcePort=9999, _udp_bps=0.00, _udp_kbps=0.00, _udp_avg_thruput=0.00, _udp_kprocessed=0.00, _udp_eps=0.00",0,"dfoster-mbp17.local
+_internal",splunkd,".208","2012-11-27T16:44:05.208-08:00","dfoster-mbp17.local","_internal",1,"/Applications/splunkbeta_140868_rc7/var/log/splunk/metrics.log",splunkd,"dfoster-mbp17.local"
diff --git a/splunk/src/test/resources/resultsMV.xml b/splunk/src/test/resources/resultsMV.xml
new file mode 100644
index 00000000..4ef5d7e3
--- /dev/null
+++ b/splunk/src/test/resources/resultsMV.xml
@@ -0,0 +1,68 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<results preview='0'>
+<meta>
+<fieldOrder>
+<field>_bkt</field>
+<field>_cd</field>
+<field>_indextime</field>
+<field>_raw</field>
+<field>_serial</field>
+<field>_si</field>
+<field>_sourcetype</field>
+<field>_subsecond</field>
+<field>_time</field>
+<field>host</field>
+<field>index</field>
+<field>linecount</field>
+<field>source</field>
+<field>sourcetype</field>
+<field>splunk_server</field>
+</fieldOrder>
+</meta>
+	<result offset='0'>
+		<field k='_bkt'>
+			<value><text>_internal~115~BC509B13-C34D-4A69-B216-488806E9EA63</text></value>
+		</field>
+		<field k='_cd'>
+			<value><text>115:4502</text></value>
+		</field>
+		<field k='_indextime'>
+			<value><text>1354063414</text></value>
+		</field>
+		<field k='_raw'><v xml:space='preserve' trunc='0'>11-27-2012 16:43:34.271 -0800 INFO  Metrics - group=udpin_connections, *:9999, sourcePort=9999, _udp_bps=0.00, _udp_kbps=0.00, _udp_avg_thruput=0.00, _udp_kprocessed=0.00, _udp_eps=0.00</v></field>
+		<field k='_serial'>
+			<value><text>0</text></value>
+		</field>
+		<field k='_si'>
+			<value><text>dfoster-mbp17.local</text></value>
+			<value><text>_internal</text></value>
+		</field>
+		<field k='_sourcetype'>
+			<value><text>splunkd</text></value>
+		</field>
+		<field k='_subsecond'>
+			<value><text>.271</text></value>
+		</field>
+		<field k='_time'>
+			<value><text>2012-11-27T16:43:34.271-08:00</text></value>
+		</field>
+		<field k='host'>
+			<value><text>dfoster-mbp17.local</text></value>
+		</field>
+		<field k='index'>
+			<value h='1'><text>_internal</text></value>
+		</field>
+		<field k='linecount'>
+			<value><text>1</text></value>
+		</field>
+		<field k='source'>
+			<value><text>/Applications/splunkbeta_140868_rc7/var/log/splunk/metrics.log</text></value>
+		</field>
+		<field k='sourcetype'>
+			<value><text>splunkd</text></value>
+		</field>
+		<field k='splunk_server'>
+			<value><text>dfoster-mbp17.local</text></value>
+		</field>
+	</result>
+</results>
\ No newline at end of file
diff --git a/splunk/src/test/resources/resultsMV4.json b/splunk/src/test/resources/resultsMV4.json
new file mode 100644
index 00000000..a32aa549
--- /dev/null
+++ b/splunk/src/test/resources/resultsMV4.json
@@ -0,0 +1,18 @@
+[
+	{
+		"_cd": "187:18991",
+		"_indextime": "1354063535",
+		"_raw": "11-27-2012 16:45:34.924 -0800 INFO  WatchedFile - Will begin reading at offset=22899111 for file='/Applications/splunk_434/var/log/splunk/metrics.log'.",
+		"_serial": "0",
+		"_si": "dfoster-mbp17.local\n_internal",
+		"_sourcetype": "splunkd",
+		"_subsecond": ".924",
+		"_time": "2012-11-27T16:45:34.924-08:00",
+		"host": "dfoster-mbp17.local",
+		"index": "_internal",
+		"linecount": "1",
+		"source": "/Applications/splunk_434/var/log/splunk/splunkd.log",
+		"sourcetype": "splunkd",
+		"splunk_server": "dfoster-mbp17.local"
+	}
+]
\ No newline at end of file
diff --git a/splunk/src/test/resources/resultsMV5.json b/splunk/src/test/resources/resultsMV5.json
new file mode 100644
index 00000000..da98dee3
--- /dev/null
+++ b/splunk/src/test/resources/resultsMV5.json
@@ -0,0 +1 @@
+{"preview":false,"init_offset":0,"messages":[{"type":"DEBUG","text":"base lispy: [ AND index::_internal ]"},{"type":"DEBUG","text":"search context: user=\"admin\", app=\"search\", bs-pathname=\"/Applications/splunkbeta_140868_rc7/etc\""}],"results":[{"_bkt":"_internal~115~BC509B13-C34D-4A69-B216-488806E9EA63","_cd":"115:5186","_indextime":"1354063462","_raw":"127.0.0.1 - admin [27/Nov/2012:16:44:22.581 -0800] \"GET /services/messages?count=-1 HTTP/1.1\" 200 1998 - - - 1ms","_serial":"0","_si":"dfoster-mbp17.local\n_internal","_sourcetype":"splunkd_access","_subsecond":".581","_time":"2012-11-27T16:44:22.581-08:00","host":"dfoster-mbp17.local","index":"_internal","linecount":"1","source":"/Applications/splunkbeta_140868_rc7/var/log/splunk/splunkd_access.log","sourcetype":"splunkd_access","splunk_server":"dfoster-mbp17.local"}]}
\ No newline at end of file
diff --git a/splunk/src/test/resources/resultsMVFuture.json b/splunk/src/test/resources/resultsMVFuture.json
new file mode 100644
index 00000000..643b1c8e
--- /dev/null
+++ b/splunk/src/test/resources/resultsMVFuture.json
@@ -0,0 +1 @@
+{"preview":false,"init_offset":0,"messages":[{"type":"DEBUG","text":"base lispy: [ AND index::_internal ]"},{"type":"DEBUG","text":"search context: user=\"admin\", app=\"search\", bs-pathname=\"/Applications/splunkbeta_140868_rc7/etc\""}],"results":[{"_bkt":"_internal~115~BC509B13-C34D-4A69-B216-488806E9EA63","_cd":"115:5186","_indextime":"1354063462","_raw":"127.0.0.1 - admin [27/Nov/2012:16:44:22.581 -0800] \"GET /services/messages?count=-1 HTTP/1.1\" 200 1998 - - - 1ms","_serial":"0","_si":["dfoster-mbp17.local","_internal"],"_sourcetype":"splunkd_access","_subsecond":".581","_time":"2012-11-27T16:44:22.581-08:00","host":"dfoster-mbp17.local","index":"_internal","linecount":"1","source":"/Applications/splunkbeta_140868_rc7/var/log/splunk/splunkd_access.log","sourcetype":"splunkd_access","splunk_server":"dfoster-mbp17.local"}]}
\ No newline at end of file
diff --git a/splunk/src/test/resources/resultsMVOneshot.csv b/splunk/src/test/resources/resultsMVOneshot.csv
new file mode 100644
index 00000000..9118b992
--- /dev/null
+++ b/splunk/src/test/resources/resultsMVOneshot.csv
@@ -0,0 +1,4 @@
+
+"_bkt","_cd","_indextime","_raw","_serial","_si","_sourcetype","_subsecond","_time",host,index,linecount,source,sourcetype,"splunk_server"
+"_internal~114~BC509B13-C34D-4A69-B216-488806E9EA63","114:33623",1354062581,"127.0.0.1 - admin [27/Nov/2012:16:29:39.149 -0800] ""GET /services/messages?count=-1 HTTP/1.1"" 200 1998 - - - 1ms",0,"dfoster-mbp17.local
+_internal","splunkd_access",".149","2012-11-27T16:29:39.149-08:00","dfoster-mbp17.local","_internal",1,"/Applications/splunkbeta_140868_rc7/var/log/splunk/splunkd_access.log","splunkd_access","dfoster-mbp17.local"
diff --git a/splunk/src/test/resources/resultsMVOneshot.xml b/splunk/src/test/resources/resultsMVOneshot.xml
new file mode 100644
index 00000000..a03c5746
--- /dev/null
+++ b/splunk/src/test/resources/resultsMVOneshot.xml
@@ -0,0 +1,69 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<results preview='0'>
+<meta>
+<fieldOrder>
+<field>_bkt</field>
+<field>_cd</field>
+<field>_indextime</field>
+<field>_raw</field>
+<field>_serial</field>
+<field>_si</field>
+<field>_sourcetype</field>
+<field>_subsecond</field>
+<field>_time</field>
+<field>host</field>
+<field>index</field>
+<field>linecount</field>
+<field>source</field>
+<field>sourcetype</field>
+<field>splunk_server</field>
+</fieldOrder>
+</meta>
+	<result offset='0'>
+		<field k='_bkt'>
+			<value><text>_internal~114~BC509B13-C34D-4A69-B216-488806E9EA63</text></value>
+		</field>
+		<field k='_cd'>
+			<value><text>114:33595</text></value>
+		</field>
+		<field k='_indextime'>
+			<value><text>1354062575</text></value>
+		</field>
+		<field k='_raw'><v xml:space='preserve' trunc='0'>11-27-2012 16:29:35.217 -0800 INFO  Metrics - group=udpin_connections, *:9999, sourcePort=9999, _udp_bps=0.00, _udp_kbps=0.00, _udp_avg_thruput=0.00, _udp_kprocessed=0.00, _udp_eps=0.00</v></field>
+		<field k='_serial'>
+			<value><text>0</text></value>
+		</field>
+		<field k='_si'>
+			<value><text>dfoster-mbp17.local</text></value>
+			<value><text>_internal</text></value>
+		</field>
+		<field k='_sourcetype'>
+			<value><text>splunkd</text></value>
+		</field>
+		<field k='_subsecond'>
+			<value><text>.217</text></value>
+		</field>
+		<field k='_time'>
+			<value><text>2012-11-27T16:29:35.217-08:00</text></value>
+		</field>
+		<field k='host'>
+			<value><text>dfoster-mbp17.local</text></value>
+		</field>
+		<field k='index'>
+			<value h='1'><text>_internal</text></value>
+		</field>
+		<field k='linecount'>
+			<value><text>1</text></value>
+		</field>
+		<field k='source'>
+			<value><text>/Applications/splunkbeta_140868_rc7/var/log/splunk/metrics.log</text></value>
+		</field>
+		<field k='sourcetype'>
+			<value><text>splunkd</text></value>
+		</field>
+		<field k='splunk_server'>
+			<value><text>dfoster-mbp17.local</text></value>
+		</field>
+	</result>
+</results>
\ No newline at end of file
diff --git a/splunk/src/test/resources/resultsMVOneshot4.json b/splunk/src/test/resources/resultsMVOneshot4.json
new file mode 100644
index 00000000..0dc668c7
--- /dev/null
+++ b/splunk/src/test/resources/resultsMVOneshot4.json
@@ -0,0 +1,19 @@
+    
+[
+	{
+		"_cd": "184:21387",
+		"_indextime": "1353099184",
+		"_raw": "2012-11-16 12:53:04.502 -0800 Interrupt signal received",
+		"_serial": "0",
+		"_si": "dfoster-mbp17.local\n_internal",
+		"_sourcetype": "splunkd_stderr",
+		"_subsecond": ".502",
+		"_time": "2012-11-16T12:53:04.502-08:00",
+		"host": "dfoster-mbp17.local",
+		"index": "_internal",
+		"linecount": "1",
+		"source": "/Applications/splunk_434/var/log/splunk/splunkd_stderr.log",
+		"sourcetype": "splunkd_stderr",
+		"splunk_server": "dfoster-mbp17.local"
+	}
+]
\ No newline at end of file
diff --git a/splunk/src/test/resources/resultsMVOneshot5.json b/splunk/src/test/resources/resultsMVOneshot5.json
new file mode 100644
index 00000000..50846818
--- /dev/null
+++ b/splunk/src/test/resources/resultsMVOneshot5.json
@@ -0,0 +1,2 @@
+
+{"preview":false,"init_offset":0,"messages":[{"type":"DEBUG","text":"base lispy: [ AND index::_internal ]"},{"type":"DEBUG","text":"search context: user=\"admin\", app=\"search\", bs-pathname=\"/Applications/splunkbeta_140868_rc7/etc\""}],"results":[{"_bkt":"_internal~114~BC509B13-C34D-4A69-B216-488806E9EA63","_cd":"114:34048","_indextime":"1354062607","_raw":"11-27-2012 16:30:06.140 -0800 INFO  Metrics - group=udpin_connections, *:9999, sourcePort=9999, _udp_bps=0.00, _udp_kbps=0.00, _udp_avg_thruput=0.00, _udp_kprocessed=0.00, _udp_eps=0.00","_serial":"0","_si":"dfoster-mbp17.local\n_internal","_sourcetype":"splunkd","_subsecond":".140","_time":"2012-11-27T16:30:06.140-08:00","host":"dfoster-mbp17.local","index":"_internal","linecount":"1","source":"/Applications/splunkbeta_140868_rc7/var/log/splunk/metrics.log","sourcetype":"splunkd","splunk_server":"dfoster-mbp17.local"}]}
\ No newline at end of file
diff --git a/splunk/src/test/resources/resultsMVOneshotFuture.json b/splunk/src/test/resources/resultsMVOneshotFuture.json
new file mode 100644
index 00000000..0d200b61
--- /dev/null
+++ b/splunk/src/test/resources/resultsMVOneshotFuture.json
@@ -0,0 +1,2 @@
+
+{"preview":false,"init_offset":0,"messages":[{"type":"DEBUG","text":"base lispy: [ AND index::_internal ]"},{"type":"DEBUG","text":"search context: user=\"admin\", app=\"search\", bs-pathname=\"/Applications/splunkbeta_140868_rc7/etc\""}],"results":[{"_bkt":"_internal~114~BC509B13-C34D-4A69-B216-488806E9EA63","_cd":"114:34048","_indextime":"1354062607","_raw":"11-27-2012 16:30:06.140 -0800 INFO  Metrics - group=udpin_connections, *:9999, sourcePort=9999, _udp_bps=0.00, _udp_kbps=0.00, _udp_avg_thruput=0.00, _udp_kprocessed=0.00, _udp_eps=0.00","_serial":"0","_si":["dfoster-mbp17.local","_internal"],"_sourcetype":"splunkd","_subsecond":".140","_time":"2012-11-27T16:30:06.140-08:00","host":"dfoster-mbp17.local","index":"_internal","linecount":"1","source":"/Applications/splunkbeta_140868_rc7/var/log/splunk/metrics.log","sourcetype":"splunkd","splunk_server":"dfoster-mbp17.local"}]}
\ No newline at end of file
diff --git a/splunk/src/test/resources/resultsPreview.xml b/splunk/src/test/resources/resultsPreview.xml
new file mode 100644
index 00000000..54939576
--- /dev/null
+++ b/splunk/src/test/resources/resultsPreview.xml
@@ -0,0 +1,1057 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<results preview='1'>
+<meta>
+<fieldOrder>
+<field>_cd</field>
+<field>_indextime</field>
+<field>_kv</field>
+<field>_raw</field>
+<field>_serial</field>
+<field>_si</field>
+<field>_sourcetype</field>
+<field>_subsecond</field>
+<field>_time</field>
+<field>active_hist_searches</field>
+<field>active_realtime_searches</field>
+<field>app</field>
+<field>appCodeName</field>
+<field>appName</field>
+<field>browser</field>
+<field>bytes</field>
+<field>class</field>
+<field>client_app</field>
+<field>clientip</field>
+<field>component</field>
+<field>count</field>
+<field>date_hour</field>
+<field>date_mday</field>
+<field>date_minute</field>
+<field>date_month</field>
+<field>date_second</field>
+<field>date_wday</field>
+<field>date_year</field>
+<field>date_zone</field>
+<field>delimiter</field>
+<field>display_row_numbers</field>
+<field>drop_count</field>
+<field>earliest</field>
+<field>enable_event_actions</field>
+<field>enable_field_actions</field>
+<field>entity_name</field>
+<field>eventtype</field>
+<field>field_list</field>
+<field>fields</field>
+<field>file</field>
+<field>fillcontents</field>
+<field>group</field>
+<field>host</field>
+<field>ident</field>
+<field>index</field>
+<field>jobStatus</field>
+<field>latest</field>
+<field>line</field>
+<field>linecount</field>
+<field>log_level</field>
+<field>max_lines</field>
+<field>max_lines_constraint</field>
+<field>max_time</field>
+<field>mean_preview_period</field>
+<field>message</field>
+<field>message_level</field>
+<field>method</field>
+<field>min_freq</field>
+<field>min_lines</field>
+<field>name</field>
+<field>namespace</field>
+<field>offset</field>
+<field>other</field>
+<field>output_mode</field>
+<field>output_time_format</field>
+<field>platform</field>
+<field>prefix</field>
+<field>punct</field>
+<field>q</field>
+<field>referer</field>
+<field>referer_domain</field>
+<field>req_time</field>
+<field>requestid</field>
+<field>reverse_order</field>
+<field>root</field>
+<field>s</field>
+<field>search</field>
+<field>segmentation</field>
+<field>show_empty_fields</field>
+<field>sid</field>
+<field>sortDir</field>
+<field>sortKey</field>
+<field>sort_dir</field>
+<field>sort_key</field>
+<field>source</field>
+<field>sourcetype</field>
+<field>spent</field>
+<field>splunk_server</field>
+<field>staticFields</field>
+<field>status</field>
+<field>time_format</field>
+<field>timeendpos</field>
+<field>timestartpos</field>
+<field>truncation_mode</field>
+<field>uri</field>
+<field>uri_path</field>
+<field>uri_query</field>
+<field>user</field>
+<field>userAgent</field>
+<field>useragent</field>
+<field>version</field>
+</fieldOrder>
+</meta>
+	<result offset='0'>
+		<field k='_cd'>
+			<value><text>54:8568</text></value>
+		</field>
+		<field k='_indextime'>
+			<value><text>1355946537</text></value>
+		</field>
+		<field k='_kv'>
+			<value><text>1</text></value>
+		</field>
+		<field k='_raw'><v xml:space='preserve' trunc='0'>2012-12-19 11:48:55,424 INFO	[50d21a262616082d0] root:535 - CONFIG: mrsparkle_path (str): /Users/fross/splunks/splunk-4.3.5/share/<sg h='1'>search</sg>/mrsparkle</v></field>
+		<field k='_serial'>
+			<value><text>731</text></value>
+		</field>
+		<field k='_si'>
+			<value><text>fross-mbp15.local</text></value>
+			<value><text>_internal</text></value>
+		</field>
+		<field k='_sourcetype'>
+			<value><text>splunk_web_service</text></value>
+		</field>
+		<field k='_subsecond'>
+			<value><text>.424</text></value>
+		</field>
+		<field k='_time'>
+			<value><text>2012-12-19T11:48:55.424-08:00</text></value>
+		</field>
+		<field k='component'>
+			<value><text>root</text></value>
+		</field>
+		<field k='date_hour'>
+			<value><text>11</text></value>
+		</field>
+		<field k='date_mday'>
+			<value><text>19</text></value>
+		</field>
+		<field k='date_minute'>
+			<value><text>48</text></value>
+		</field>
+		<field k='date_month'>
+			<value><text>december</text></value>
+		</field>
+		<field k='date_second'>
+			<value><text>55</text></value>
+		</field>
+		<field k='date_wday'>
+			<value><text>wednesday</text></value>
+		</field>
+		<field k='date_year'>
+			<value><text>2012</text></value>
+		</field>
+		<field k='date_zone'>
+			<value><text>local</text></value>
+		</field>
+		<field k='host'>
+			<value><text>fross-mbp15.local</text></value>
+		</field>
+		<field k='index'>
+			<value h='1'><text>_internal</text></value>
+		</field>
+		<field k='line'>
+			<value><text>535</text></value>
+		</field>
+		<field k='linecount'>
+			<value><text>1</text></value>
+		</field>
+		<field k='log_level'>
+			<value><text>INFO</text></value>
+		</field>
+		<field k='message'>
+			<value><text>CONFIG: mrsparkle_path (str): /Users/fross/splunks/splunk-4.3.5/share/search/mrsparkle</text></value>
+		</field>
+		<field k='punct'>
+			<value><text>--_::,_t[]_:_-_:__():_////-..///</text></value>
+		</field>
+		<field k='requestid'>
+			<value><text>50d21a262616082d0</text></value>
+		</field>
+		<field k='source'>
+			<value><text>/Users/fross/splunks/splunk-4.3.5/var/log/splunk/web_service.log</text></value>
+		</field>
+		<field k='sourcetype'>
+			<value><text>splunk_web_service</text></value>
+		</field>
+		<field k='splunk_server'>
+			<value><text>fross-mbp15.local</text></value>
+		</field>
+		<field k='timeendpos'>
+			<value><text>24</text></value>
+		</field>
+		<field k='timestartpos'>
+			<value><text>0</text></value>
+		</field>
+	</result>
+	<result offset='1'>
+		<field k='_cd'>
+			<value><text>54:8562</text></value>
+		</field>
+		<field k='_indextime'>
+			<value><text>1355946537</text></value>
+		</field>
+		<field k='_kv'>
+			<value><text>1</text></value>
+		</field>
+		<field k='_raw'><v xml:space='preserve' trunc='0'>2012-12-19 11:48:55,424 INFO	[50d21a262616082d0] root:535 - CONFIG: module_dir (str): share/splunk/<sg h='1'>search</sg>_mrsparkle/modules</v></field>
+		<field k='_serial'>
+			<value><text>732</text></value>
+		</field>
+		<field k='_si'>
+			<value><text>fross-mbp15.local</text></value>
+			<value><text>_internal</text></value>
+		</field>
+		<field k='_sourcetype'>
+			<value><text>splunk_web_service</text></value>
+		</field>
+		<field k='_subsecond'>
+			<value><text>.424</text></value>
+		</field>
+		<field k='_time'>
+			<value><text>2012-12-19T11:48:55.424-08:00</text></value>
+		</field>
+		<field k='component'>
+			<value><text>root</text></value>
+		</field>
+		<field k='date_hour'>
+			<value><text>11</text></value>
+		</field>
+		<field k='date_mday'>
+			<value><text>19</text></value>
+		</field>
+		<field k='date_minute'>
+			<value><text>48</text></value>
+		</field>
+		<field k='date_month'>
+			<value><text>december</text></value>
+		</field>
+		<field k='date_second'>
+			<value><text>55</text></value>
+		</field>
+		<field k='date_wday'>
+			<value><text>wednesday</text></value>
+		</field>
+		<field k='date_year'>
+			<value><text>2012</text></value>
+		</field>
+		<field k='date_zone'>
+			<value><text>local</text></value>
+		</field>
+		<field k='host'>
+			<value><text>fross-mbp15.local</text></value>
+		</field>
+		<field k='index'>
+			<value h='1'><text>_internal</text></value>
+		</field>
+		<field k='line'>
+			<value><text>535</text></value>
+		</field>
+		<field k='linecount'>
+			<value><text>1</text></value>
+		</field>
+		<field k='log_level'>
+			<value><text>INFO</text></value>
+		</field>
+		<field k='message'>
+			<value><text>CONFIG: module_dir (str): share/splunk/search_mrsparkle/modules</text></value>
+		</field>
+		<field k='punct'>
+			<value><text>--_::,_t[]_:_-_:__():_///</text></value>
+		</field>
+		<field k='requestid'>
+			<value><text>50d21a262616082d0</text></value>
+		</field>
+		<field k='source'>
+			<value><text>/Users/fross/splunks/splunk-4.3.5/var/log/splunk/web_service.log</text></value>
+		</field>
+		<field k='sourcetype'>
+			<value><text>splunk_web_service</text></value>
+		</field>
+		<field k='splunk_server'>
+			<value><text>fross-mbp15.local</text></value>
+		</field>
+		<field k='timeendpos'>
+			<value><text>24</text></value>
+		</field>
+		<field k='timestartpos'>
+			<value><text>0</text></value>
+		</field>
+	</result>
+	<result offset='2'>
+		<field k='_cd'>
+			<value><text>54:8674</text></value>
+		</field>
+		<field k='_indextime'>
+			<value><text>1355946537</text></value>
+		</field>
+		<field k='_kv'>
+			<value><text>1</text></value>
+		</field>
+		<field k='_raw'><v xml:space='preserve' trunc='0'>2012-12-19 11:48:55,425 INFO	[50d21a262616082d0] root:535 - CONFIG: template_dir (str): share/splunk/<sg h='1'>search</sg>_mrsparkle/templates</v></field>
+		<field k='_serial'>
+			<value><text>728</text></value>
+		</field>
+		<field k='_si'>
+			<value><text>fross-mbp15.local</text></value>
+			<value><text>_internal</text></value>
+		</field>
+		<field k='_sourcetype'>
+			<value><text>splunk_web_service</text></value>
+		</field>
+		<field k='_subsecond'>
+			<value><text>.425</text></value>
+		</field>
+		<field k='_time'>
+			<value><text>2012-12-19T11:48:55.425-08:00</text></value>
+		</field>
+		<field k='component'>
+			<value><text>root</text></value>
+		</field>
+		<field k='date_hour'>
+			<value><text>11</text></value>
+		</field>
+		<field k='date_mday'>
+			<value><text>19</text></value>
+		</field>
+		<field k='date_minute'>
+			<value><text>48</text></value>
+		</field>
+		<field k='date_month'>
+			<value><text>december</text></value>
+		</field>
+		<field k='date_second'>
+			<value><text>55</text></value>
+		</field>
+		<field k='date_wday'>
+			<value><text>wednesday</text></value>
+		</field>
+		<field k='date_year'>
+			<value><text>2012</text></value>
+		</field>
+		<field k='date_zone'>
+			<value><text>local</text></value>
+		</field>
+		<field k='host'>
+			<value><text>fross-mbp15.local</text></value>
+		</field>
+		<field k='index'>
+			<value h='1'><text>_internal</text></value>
+		</field>
+		<field k='line'>
+			<value><text>535</text></value>
+		</field>
+		<field k='linecount'>
+			<value><text>1</text></value>
+		</field>
+		<field k='log_level'>
+			<value><text>INFO</text></value>
+		</field>
+		<field k='message'>
+			<value><text>CONFIG: template_dir (str): share/splunk/search_mrsparkle/templates</text></value>
+		</field>
+		<field k='punct'>
+			<value><text>--_::,_t[]_:_-_:__():_///</text></value>
+		</field>
+		<field k='requestid'>
+			<value><text>50d21a262616082d0</text></value>
+		</field>
+		<field k='source'>
+			<value><text>/Users/fross/splunks/splunk-4.3.5/var/log/splunk/web_service.log</text></value>
+		</field>
+		<field k='sourcetype'>
+			<value><text>splunk_web_service</text></value>
+		</field>
+		<field k='splunk_server'>
+			<value><text>fross-mbp15.local</text></value>
+		</field>
+		<field k='timeendpos'>
+			<value><text>24</text></value>
+		</field>
+		<field k='timestartpos'>
+			<value><text>0</text></value>
+		</field>
+	</result>
+	<result offset='3'>
+		<field k='_cd'>
+			<value><text>54:8662</text></value>
+		</field>
+		<field k='_indextime'>
+			<value><text>1355946537</text></value>
+		</field>
+		<field k='_kv'>
+			<value><text>1</text></value>
+		</field>
+		<field k='_raw'><v xml:space='preserve' trunc='0'>2012-12-19 11:48:55,425 INFO	[50d21a262616082d0] root:535 - CONFIG: staticdir (str): /Users/fross/splunks/splunk-4.3.5/share/splunk/<sg h='1'>search</sg>_mrsparkle/exposed</v></field>
+		<field k='_serial'>
+			<value><text>729</text></value>
+		</field>
+		<field k='_si'>
+			<value><text>fross-mbp15.local</text></value>
+			<value><text>_internal</text></value>
+		</field>
+		<field k='_sourcetype'>
+			<value><text>splunk_web_service</text></value>
+		</field>
+		<field k='_subsecond'>
+			<value><text>.425</text></value>
+		</field>
+		<field k='_time'>
+			<value><text>2012-12-19T11:48:55.425-08:00</text></value>
+		</field>
+		<field k='component'>
+			<value><text>root</text></value>
+		</field>
+		<field k='date_hour'>
+			<value><text>11</text></value>
+		</field>
+		<field k='date_mday'>
+			<value><text>19</text></value>
+		</field>
+		<field k='date_minute'>
+			<value><text>48</text></value>
+		</field>
+		<field k='date_month'>
+			<value><text>december</text></value>
+		</field>
+		<field k='date_second'>
+			<value><text>55</text></value>
+		</field>
+		<field k='date_wday'>
+			<value><text>wednesday</text></value>
+		</field>
+		<field k='date_year'>
+			<value><text>2012</text></value>
+		</field>
+		<field k='date_zone'>
+			<value><text>local</text></value>
+		</field>
+		<field k='host'>
+			<value><text>fross-mbp15.local</text></value>
+		</field>
+		<field k='index'>
+			<value h='1'><text>_internal</text></value>
+		</field>
+		<field k='line'>
+			<value><text>535</text></value>
+		</field>
+		<field k='linecount'>
+			<value><text>1</text></value>
+		</field>
+		<field k='log_level'>
+			<value><text>INFO</text></value>
+		</field>
+		<field k='message'>
+			<value><text>CONFIG: staticdir (str): /Users/fross/splunks/splunk-4.3.5/share/splunk/search_mrsparkle/exposed</text></value>
+		</field>
+		<field k='punct'>
+			<value><text>--_::,_t[]_:_-_:__():_////-..////</text></value>
+		</field>
+		<field k='requestid'>
+			<value><text>50d21a262616082d0</text></value>
+		</field>
+		<field k='source'>
+			<value><text>/Users/fross/splunks/splunk-4.3.5/var/log/splunk/web_service.log</text></value>
+		</field>
+		<field k='sourcetype'>
+			<value><text>splunk_web_service</text></value>
+		</field>
+		<field k='splunk_server'>
+			<value><text>fross-mbp15.local</text></value>
+		</field>
+		<field k='timeendpos'>
+			<value><text>24</text></value>
+		</field>
+		<field k='timestartpos'>
+			<value><text>0</text></value>
+		</field>
+	</result>
+	<result offset='4'>
+		<field k='_cd'>
+			<value><text>54:8651</text></value>
+		</field>
+		<field k='_indextime'>
+			<value><text>1355946537</text></value>
+		</field>
+		<field k='_kv'>
+			<value><text>1</text></value>
+		</field>
+		<field k='_raw'><v xml:space='preserve' trunc='0'>2012-12-19 11:48:55,425 INFO	[50d21a262616082d0] root:535 - CONFIG: static_dir (str): share/splunk/<sg h='1'>search</sg>_mrsparkle/exposed</v></field>
+		<field k='_serial'>
+			<value><text>730</text></value>
+		</field>
+		<field k='_si'>
+			<value><text>fross-mbp15.local</text></value>
+			<value><text>_internal</text></value>
+		</field>
+		<field k='_sourcetype'>
+			<value><text>splunk_web_service</text></value>
+		</field>
+		<field k='_subsecond'>
+			<value><text>.425</text></value>
+		</field>
+		<field k='_time'>
+			<value><text>2012-12-19T11:48:55.425-08:00</text></value>
+		</field>
+		<field k='component'>
+			<value><text>root</text></value>
+		</field>
+		<field k='date_hour'>
+			<value><text>11</text></value>
+		</field>
+		<field k='date_mday'>
+			<value><text>19</text></value>
+		</field>
+		<field k='date_minute'>
+			<value><text>48</text></value>
+		</field>
+		<field k='date_month'>
+			<value><text>december</text></value>
+		</field>
+		<field k='date_second'>
+			<value><text>55</text></value>
+		</field>
+		<field k='date_wday'>
+			<value><text>wednesday</text></value>
+		</field>
+		<field k='date_year'>
+			<value><text>2012</text></value>
+		</field>
+		<field k='date_zone'>
+			<value><text>local</text></value>
+		</field>
+		<field k='host'>
+			<value><text>fross-mbp15.local</text></value>
+		</field>
+		<field k='index'>
+			<value h='1'><text>_internal</text></value>
+		</field>
+		<field k='line'>
+			<value><text>535</text></value>
+		</field>
+		<field k='linecount'>
+			<value><text>1</text></value>
+		</field>
+		<field k='log_level'>
+			<value><text>INFO</text></value>
+		</field>
+		<field k='message'>
+			<value><text>CONFIG: static_dir (str): share/splunk/search_mrsparkle/exposed</text></value>
+		</field>
+		<field k='punct'>
+			<value><text>--_::,_t[]_:_-_:__():_///</text></value>
+		</field>
+		<field k='requestid'>
+			<value><text>50d21a262616082d0</text></value>
+		</field>
+		<field k='source'>
+			<value><text>/Users/fross/splunks/splunk-4.3.5/var/log/splunk/web_service.log</text></value>
+		</field>
+		<field k='sourcetype'>
+			<value><text>splunk_web_service</text></value>
+		</field>
+		<field k='splunk_server'>
+			<value><text>fross-mbp15.local</text></value>
+		</field>
+		<field k='timeendpos'>
+			<value><text>24</text></value>
+		</field>
+		<field k='timestartpos'>
+			<value><text>0</text></value>
+		</field>
+	</result>
+	<result offset='5'>
+		<field k='_cd'>
+			<value><text>54:9267</text></value>
+		</field>
+		<field k='_indextime'>
+			<value><text>1355946552</text></value>
+		</field>
+		<field k='_kv'>
+			<value><text>1</text></value>
+		</field>
+		<field k='_raw'><v xml:space='preserve' trunc='0'>12-19-2012 11:49:12.313 -0800 INFO  Metrics - group=<sg h='1'>search</sg>_concurrency, system total, active_hist_searches=0, active_realtime_searches=0</v></field>
+		<field k='_serial'>
+			<value><text>726</text></value>
+		</field>
+		<field k='_si'>
+			<value><text>fross-mbp15.local</text></value>
+			<value><text>_internal</text></value>
+		</field>
+		<field k='_sourcetype'>
+			<value><text>splunkd</text></value>
+		</field>
+		<field k='_subsecond'>
+			<value><text>.313</text></value>
+		</field>
+		<field k='_time'>
+			<value><text>2012-12-19T11:49:12.313-08:00</text></value>
+		</field>
+		<field k='active_hist_searches'>
+			<value><text>0</text></value>
+		</field>
+		<field k='active_realtime_searches'>
+			<value><text>0</text></value>
+		</field>
+		<field k='component'>
+			<value><text>Metrics</text></value>
+		</field>
+		<field k='date_hour'>
+			<value><text>11</text></value>
+		</field>
+		<field k='date_mday'>
+			<value><text>19</text></value>
+		</field>
+		<field k='date_minute'>
+			<value><text>49</text></value>
+		</field>
+		<field k='date_month'>
+			<value><text>december</text></value>
+		</field>
+		<field k='date_second'>
+			<value><text>12</text></value>
+		</field>
+		<field k='date_wday'>
+			<value><text>wednesday</text></value>
+		</field>
+		<field k='date_year'>
+			<value><text>2012</text></value>
+		</field>
+		<field k='date_zone'>
+			<value><text>-480</text></value>
+		</field>
+		<field k='group'>
+			<value><text>search_concurrency</text></value>
+		</field>
+		<field k='host'>
+			<value><text>fross-mbp15.local</text></value>
+		</field>
+		<field k='index'>
+			<value h='1'><text>_internal</text></value>
+		</field>
+		<field k='linecount'>
+			<value><text>1</text></value>
+		</field>
+		<field k='log_level'>
+			<value><text>INFO</text></value>
+		</field>
+		<field k='message'>
+			<value><text>group=search_concurrency, system total, active_hist_searches=0, active_realtime_searches=0</text></value>
+		</field>
+		<field k='punct'>
+			<value><text>--_::._-____-_=,__,_=,_=</text></value>
+		</field>
+		<field k='source'>
+			<value><text>/Users/fross/splunks/splunk-4.3.5/var/log/splunk/metrics.log</text></value>
+		</field>
+		<field k='sourcetype'>
+			<value><text>splunkd</text></value>
+		</field>
+		<field k='splunk_server'>
+			<value><text>fross-mbp15.local</text></value>
+		</field>
+		<field k='timeendpos'>
+			<value><text>29</text></value>
+		</field>
+		<field k='timestartpos'>
+			<value><text>0</text></value>
+		</field>
+	</result>
+	<result offset='6'>
+		<field k='_cd'>
+			<value><text>54:9262</text></value>
+		</field>
+		<field k='_indextime'>
+			<value><text>1355946552</text></value>
+		</field>
+		<field k='_kv'>
+			<value><text>1</text></value>
+		</field>
+		<field k='_raw'><v xml:space='preserve' trunc='0'>12-19-2012 11:49:12.313 -0800 INFO  Metrics - group=realtime_<sg h='1'>search</sg>_data, system total, drop_count=0</v></field>
+		<field k='_serial'>
+			<value><text>727</text></value>
+		</field>
+		<field k='_si'>
+			<value><text>fross-mbp15.local</text></value>
+			<value><text>_internal</text></value>
+		</field>
+		<field k='_sourcetype'>
+			<value><text>splunkd</text></value>
+		</field>
+		<field k='_subsecond'>
+			<value><text>.313</text></value>
+		</field>
+		<field k='_time'>
+			<value><text>2012-12-19T11:49:12.313-08:00</text></value>
+		</field>
+		<field k='component'>
+			<value><text>Metrics</text></value>
+		</field>
+		<field k='date_hour'>
+			<value><text>11</text></value>
+		</field>
+		<field k='date_mday'>
+			<value><text>19</text></value>
+		</field>
+		<field k='date_minute'>
+			<value><text>49</text></value>
+		</field>
+		<field k='date_month'>
+			<value><text>december</text></value>
+		</field>
+		<field k='date_second'>
+			<value><text>12</text></value>
+		</field>
+		<field k='date_wday'>
+			<value><text>wednesday</text></value>
+		</field>
+		<field k='date_year'>
+			<value><text>2012</text></value>
+		</field>
+		<field k='date_zone'>
+			<value><text>-480</text></value>
+		</field>
+		<field k='drop_count'>
+			<value><text>0</text></value>
+		</field>
+		<field k='group'>
+			<value><text>realtime_search_data</text></value>
+		</field>
+		<field k='host'>
+			<value><text>fross-mbp15.local</text></value>
+		</field>
+		<field k='index'>
+			<value h='1'><text>_internal</text></value>
+		</field>
+		<field k='linecount'>
+			<value><text>1</text></value>
+		</field>
+		<field k='log_level'>
+			<value><text>INFO</text></value>
+		</field>
+		<field k='message'>
+			<value><text>group=realtime_search_data, system total, drop_count=0</text></value>
+		</field>
+		<field k='punct'>
+			<value><text>--_::._-____-_=,__,_=</text></value>
+		</field>
+		<field k='source'>
+			<value><text>/Users/fross/splunks/splunk-4.3.5/var/log/splunk/metrics.log</text></value>
+		</field>
+		<field k='sourcetype'>
+			<value><text>splunkd</text></value>
+		</field>
+		<field k='splunk_server'>
+			<value><text>fross-mbp15.local</text></value>
+		</field>
+		<field k='timeendpos'>
+			<value><text>29</text></value>
+		</field>
+		<field k='timestartpos'>
+			<value><text>0</text></value>
+		</field>
+	</result>
+	<result offset='7'>
+		<field k='_cd'>
+			<value><text>54:9769</text></value>
+		</field>
+		<field k='_indextime'>
+			<value><text>1355946583</text></value>
+		</field>
+		<field k='_kv'>
+			<value><text>1</text></value>
+		</field>
+		<field k='_raw'><v xml:space='preserve' trunc='0'>12-19-2012 11:49:43.322 -0800 INFO  Metrics - group=<sg h='1'>search</sg>_concurrency, system total, active_hist_searches=0, active_realtime_searches=0</v></field>
+		<field k='_serial'>
+			<value><text>724</text></value>
+		</field>
+		<field k='_si'>
+			<value><text>fross-mbp15.local</text></value>
+			<value><text>_internal</text></value>
+		</field>
+		<field k='_sourcetype'>
+			<value><text>splunkd</text></value>
+		</field>
+		<field k='_subsecond'>
+			<value><text>.322</text></value>
+		</field>
+		<field k='_time'>
+			<value><text>2012-12-19T11:49:43.322-08:00</text></value>
+		</field>
+		<field k='active_hist_searches'>
+			<value><text>0</text></value>
+		</field>
+		<field k='active_realtime_searches'>
+			<value><text>0</text></value>
+		</field>
+		<field k='component'>
+			<value><text>Metrics</text></value>
+		</field>
+		<field k='date_hour'>
+			<value><text>11</text></value>
+		</field>
+		<field k='date_mday'>
+			<value><text>19</text></value>
+		</field>
+		<field k='date_minute'>
+			<value><text>49</text></value>
+		</field>
+		<field k='date_month'>
+			<value><text>december</text></value>
+		</field>
+		<field k='date_second'>
+			<value><text>43</text></value>
+		</field>
+		<field k='date_wday'>
+			<value><text>wednesday</text></value>
+		</field>
+		<field k='date_year'>
+			<value><text>2012</text></value>
+		</field>
+		<field k='date_zone'>
+			<value><text>-480</text></value>
+		</field>
+		<field k='group'>
+			<value><text>search_concurrency</text></value>
+		</field>
+		<field k='host'>
+			<value><text>fross-mbp15.local</text></value>
+		</field>
+		<field k='index'>
+			<value h='1'><text>_internal</text></value>
+		</field>
+		<field k='linecount'>
+			<value><text>1</text></value>
+		</field>
+		<field k='log_level'>
+			<value><text>INFO</text></value>
+		</field>
+		<field k='message'>
+			<value><text>group=search_concurrency, system total, active_hist_searches=0, active_realtime_searches=0</text></value>
+		</field>
+		<field k='punct'>
+			<value><text>--_::._-____-_=,__,_=,_=</text></value>
+		</field>
+		<field k='source'>
+			<value><text>/Users/fross/splunks/splunk-4.3.5/var/log/splunk/metrics.log</text></value>
+		</field>
+		<field k='sourcetype'>
+			<value><text>splunkd</text></value>
+		</field>
+		<field k='splunk_server'>
+			<value><text>fross-mbp15.local</text></value>
+		</field>
+		<field k='timeendpos'>
+			<value><text>29</text></value>
+		</field>
+		<field k='timestartpos'>
+			<value><text>0</text></value>
+		</field>
+	</result>
+	<result offset='8'>
+		<field k='_cd'>
+			<value><text>54:9764</text></value>
+		</field>
+		<field k='_indextime'>
+			<value><text>1355946583</text></value>
+		</field>
+		<field k='_kv'>
+			<value><text>1</text></value>
+		</field>
+		<field k='_raw'><v xml:space='preserve' trunc='0'>12-19-2012 11:49:43.322 -0800 INFO  Metrics - group=realtime_<sg h='1'>search</sg>_data, system total, drop_count=0</v></field>
+		<field k='_serial'>
+			<value><text>725</text></value>
+		</field>
+		<field k='_si'>
+			<value><text>fross-mbp15.local</text></value>
+			<value><text>_internal</text></value>
+		</field>
+		<field k='_sourcetype'>
+			<value><text>splunkd</text></value>
+		</field>
+		<field k='_subsecond'>
+			<value><text>.322</text></value>
+		</field>
+		<field k='_time'>
+			<value><text>2012-12-19T11:49:43.322-08:00</text></value>
+		</field>
+		<field k='component'>
+			<value><text>Metrics</text></value>
+		</field>
+		<field k='date_hour'>
+			<value><text>11</text></value>
+		</field>
+		<field k='date_mday'>
+			<value><text>19</text></value>
+		</field>
+		<field k='date_minute'>
+			<value><text>49</text></value>
+		</field>
+		<field k='date_month'>
+			<value><text>december</text></value>
+		</field>
+		<field k='date_second'>
+			<value><text>43</text></value>
+		</field>
+		<field k='date_wday'>
+			<value><text>wednesday</text></value>
+		</field>
+		<field k='date_year'>
+			<value><text>2012</text></value>
+		</field>
+		<field k='date_zone'>
+			<value><text>-480</text></value>
+		</field>
+		<field k='drop_count'>
+			<value><text>0</text></value>
+		</field>
+		<field k='group'>
+			<value><text>realtime_search_data</text></value>
+		</field>
+		<field k='host'>
+			<value><text>fross-mbp15.local</text></value>
+		</field>
+		<field k='index'>
+			<value h='1'><text>_internal</text></value>
+		</field>
+		<field k='linecount'>
+			<value><text>1</text></value>
+		</field>
+		<field k='log_level'>
+			<value><text>INFO</text></value>
+		</field>
+		<field k='message'>
+			<value><text>group=realtime_search_data, system total, drop_count=0</text></value>
+		</field>
+		<field k='punct'>
+			<value><text>--_::._-____-_=,__,_=</text></value>
+		</field>
+		<field k='source'>
+			<value><text>/Users/fross/splunks/splunk-4.3.5/var/log/splunk/metrics.log</text></value>
+		</field>
+		<field k='sourcetype'>
+			<value><text>splunkd</text></value>
+		</field>
+		<field k='splunk_server'>
+			<value><text>fross-mbp15.local</text></value>
+		</field>
+		<field k='timeendpos'>
+			<value><text>29</text></value>
+		</field>
+		<field k='timestartpos'>
+			<value><text>0</text></value>
+		</field>
+	</result>
+	<result offset='9'>
+		<field k='_cd'>
+			<value><text>54:10097</text></value>
+		</field>
+		<field k='_indextime'>
+			<value><text>1355946614</text></value>
+		</field>
+		<field k='_kv'>
+			<value><text>1</text></value>
+		</field>
+		<field k='_raw'><v xml:space='preserve' trunc='0'>12-19-2012 11:50:14.351 -0800 INFO  Metrics - group=<sg h='1'>search</sg>_concurrency, system total, active_hist_searches=0, active_realtime_searches=0</v></field>
+		<field k='_serial'>
+			<value><text>722</text></value>
+		</field>
+		<field k='_si'>
+			<value><text>fross-mbp15.local</text></value>
+			<value><text>_internal</text></value>
+		</field>
+		<field k='_sourcetype'>
+			<value><text>splunkd</text></value>
+		</field>
+		<field k='_subsecond'>
+			<value><text>.351</text></value>
+		</field>
+		<field k='_time'>
+			<value><text>2012-12-19T11:50:14.351-08:00</text></value>
+		</field>
+		<field k='active_hist_searches'>
+			<value><text>0</text></value>
+		</field>
+		<field k='active_realtime_searches'>
+			<value><text>0</text></value>
+		</field>
+		<field k='component'>
+			<value><text>Metrics</text></value>
+		</field>
+		<field k='date_hour'>
+			<value><text>11</text></value>
+		</field>
+		<field k='date_mday'>
+			<value><text>19</text></value>
+		</field>
+		<field k='date_minute'>
+			<value><text>50</text></value>
+		</field>
+		<field k='date_month'>
+			<value><text>december</text></value>
+		</field>
+		<field k='date_second'>
+			<value><text>14</text></value>
+		</field>
+		<field k='date_wday'>
+			<value><text>wednesday</text></value>
+		</field>
+		<field k='date_year'>
+			<value><text>2012</text></value>
+		</field>
+		<field k='date_zone'>
+			<value><text>-480</text></value>
+		</field>
+		<field k='group'>
+			<value><text>search_concurrency</text></value>
+		</field>
+		<field k='host'>
+			<value><text>fross-mbp15.local</text></value>
+		</field>
+		<field k='index'>
+			<value h='1'><text>_internal</text></value>
+		</field>
+		<field k='linecount'>
+			<value><text>1</text></value>
+		</field>
+		<field k='log_level'>
+			<value><text>INFO</text></value>
+		</field>
+		<field k='message'>
+			<value><text>group=search_concurrency, system total, active_hist_searches=0, active_realtime_searches=0</text></value>
+		</field>
+		<field k='punct'>
+			<value><text>--_::._-____-_=,__,_=,_=</text></value>
+		</field>
+		<field k='source'>
+			<value><text>/Users/fross/splunks/splunk-4.3.5/var/log/splunk/metrics.log</text></value>
+		</field>
+		<field k='sourcetype'>
+			<value><text>splunkd</text></value>
+		</field>
+		<field k='splunk_server'>
+			<value><text>fross-mbp15.local</text></value>
+		</field>
+		<field k='timeendpos'>
+			<value><text>29</text></value>
+		</field>
+		<field k='timestartpos'>
+			<value><text>0</text></value>
+		</field>
+	</result>
+</results>
\ No newline at end of file
diff --git a/tests/tests.iml b/tests/tests.iml
deleted file mode 100644
index cc79238f..00000000
--- a/tests/tests.iml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager" inherit-compiler-output="true">
-    <exclude-output />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$" isTestSource="false" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module" module-name="util" />
-    <orderEntry type="module" module-name="splunk" />
-    <orderEntry type="library" name="commons-cli-1.2" level="project" />
-    <orderEntry type="library" name="gson" level="project" />
-    <orderEntry type="library" name="opencsv" level="project" />
-    <orderEntry type="library" name="junit-4.11" level="project" />
-  </component>
-</module>
-
diff --git a/util/util.iml b/util/util.iml
deleted file mode 100644
index f2ded401..00000000
--- a/util/util.iml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager" inherit-compiler-output="true">
-    <exclude-output />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$" isTestSource="false" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../lib/junit-4.8.1.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module" module-name="splunk" />
-    <orderEntry type="library" name="commons-cli-1.2" level="project" />
-  </component>
-</module>
-
