diff --git a/.gitignore b/.gitignore
index 6f3894d064bf2d660b255260d34e55d66d67fcb5..1ba56a0e5cde8b6414b3b8d7d00d28a28f417e42 100755
--- a/.gitignore
+++ b/.gitignore
@@ -54,8 +54,8 @@ build/Xcode/FlatBuffers.xcodeproj/project.xcworkspace/**
 build/Xcode/FlatBuffers.xcodeproj/xcuserdata/**
 FlatBuffers.xcodeproj/
 java/.idea
-java/*.iml
-java/target
+*.iml
+target
 **/*.pyc
 .idea
 build/VS2010/FlatBuffers.sdf
diff --git a/java/flatbuffers/pom.xml b/java/flatbuffers/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7b6ea7933371b4ee62c65936f1b04aae0e67a0d8
--- /dev/null
+++ b/java/flatbuffers/pom.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <parent>
+    <groupId>com.google.flatbuffers</groupId>
+    <artifactId>flatbuffers</artifactId>
+    <version>1.3.0-SNAPSHOT</version>
+  </parent>
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>flatbuffers-java</artifactId>
+  <packaging>bundle</packaging>
+  <name>FlatBuffers Java API</name>
+  <description>
+    Memory Efficient Serialization Library
+  </description>
+
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+  <properties>
+    <flatbuffers.root.dir>${basedir}/../..</flatbuffers.root.dir>
+    <generated.test.sources.directory>${project.build.directory}/generated-test-sources/flatbuffers
+    </generated.test.sources.directory>
+  </properties>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-bundle-plugin</artifactId>
+        <extensions>true</extensions>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>exec-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>generate-test-sources</id>
+            <phase>generate-test-sources</phase>
+            <goals>
+              <goal>exec</goal>
+            </goals>
+            <configuration>
+              <executable>${flatbuffers.root.dir}/flatc</executable>
+              <arguments>
+                <argument>--java</argument>
+                <argument>-o</argument>
+                <argument>${generated.test.sources.directory}</argument>
+                <argument>${basedir}/src/test/fbs/test.fbs</argument>
+              </arguments>
+              <testSourceRoot>${generated.test.sources.directory}</testSourceRoot>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
+
diff --git a/java/com/google/flatbuffers/Constants.java b/java/flatbuffers/src/main/java/com/google/flatbuffers/Constants.java
similarity index 100%
rename from java/com/google/flatbuffers/Constants.java
rename to java/flatbuffers/src/main/java/com/google/flatbuffers/Constants.java
diff --git a/java/com/google/flatbuffers/FlatBufferBuilder.java b/java/flatbuffers/src/main/java/com/google/flatbuffers/FlatBufferBuilder.java
similarity index 100%
rename from java/com/google/flatbuffers/FlatBufferBuilder.java
rename to java/flatbuffers/src/main/java/com/google/flatbuffers/FlatBufferBuilder.java
diff --git a/java/com/google/flatbuffers/Struct.java b/java/flatbuffers/src/main/java/com/google/flatbuffers/Struct.java
similarity index 100%
rename from java/com/google/flatbuffers/Struct.java
rename to java/flatbuffers/src/main/java/com/google/flatbuffers/Struct.java
diff --git a/java/com/google/flatbuffers/Table.java b/java/flatbuffers/src/main/java/com/google/flatbuffers/Table.java
similarity index 100%
rename from java/com/google/flatbuffers/Table.java
rename to java/flatbuffers/src/main/java/com/google/flatbuffers/Table.java
diff --git a/java/flatbuffers/src/test/fbs/test.fbs b/java/flatbuffers/src/test/fbs/test.fbs
new file mode 100644
index 0000000000000000000000000000000000000000..695b94e4374d43cec713ab802d85cb1d17840bcd
--- /dev/null
+++ b/java/flatbuffers/src/test/fbs/test.fbs
@@ -0,0 +1,19 @@
+namespace com.google.flatbuffer.test;
+
+table MyTable
+{
+    foo:int;
+}
+
+enum MyEnum:byte
+{
+    A, B, C
+}
+
+struct MyStruct
+{
+    a:int;
+    b:int;
+}
+
+root_type MyTable;
\ No newline at end of file
diff --git a/java/flatbuffers/src/test/java/com/google/flatbuffers/test/DummyTest.java b/java/flatbuffers/src/test/java/com/google/flatbuffers/test/DummyTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..627050b5facd39ed5e3f292d81d20253022f057d
--- /dev/null
+++ b/java/flatbuffers/src/test/java/com/google/flatbuffers/test/DummyTest.java
@@ -0,0 +1,25 @@
+package com.google.flatbuffers.test;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+import org.junit.Test;
+
+import com.google.flatbuffer.test.MyTable;
+import com.google.flatbuffers.FlatBufferBuilder;
+
+/**
+ * Dummy Test to demo JUnit usage.
+ */
+public class DummyTest {
+  @Test
+  public void testDummy() {
+    FlatBufferBuilder builder = new FlatBufferBuilder();
+
+    int tableOffSet = MyTable.createMyTable(builder, 42);
+    MyTable.finishMyTableBuffer(builder, tableOffSet);
+    MyTable myTable = MyTable.getRootAsMyTable(builder.dataBuffer());
+
+    assertThat(myTable.foo(), is(42));
+  }
+}
diff --git a/java/jmh/pom.xml b/java/jmh/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9be79842148bc52b542960ee7b5098b956e8ea59
--- /dev/null
+++ b/java/jmh/pom.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <parent>
+    <groupId>com.google.flatbuffers</groupId>
+    <artifactId>flatbuffers</artifactId>
+    <version>1.3.0-SNAPSHOT</version>
+  </parent>
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>flatbuffers-jmh</artifactId>
+  <packaging>jar</packaging>
+  <name>FlatBuffers JMH micro-benchmark</name>
+  <description>
+    Micro benchmark to help in technical design decisions.
+  </description>
+
+  <properties>
+    <jmh.version>1.12</jmh.version>
+    <uberjar.name>benchmarks</uberjar.name>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.openjdk.jmh</groupId>
+      <artifactId>jmh-core</artifactId>
+      <version>${jmh.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.openjdk.jmh</groupId>
+      <artifactId>jmh-generator-annprocess</artifactId>
+      <version>${jmh.version}</version>
+      <scope>provided</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-shade-plugin</artifactId>
+        <executions>
+          <execution>
+            <phase>package</phase>
+            <goals>
+              <goal>shade</goal>
+            </goals>
+            <configuration>
+              <finalName>${uberjar.name}</finalName>
+              <transformers>
+                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+                  <mainClass>org.openjdk.jmh.Main</mainClass>
+                </transformer>
+              </transformers>
+              <filters>
+                <filter>
+                  <!--
+                      Shading signed JARs will fail without this.
+                      http://stackoverflow.com/questions/999489/invalid-signature-file-when-attempting-to-run-a-jar
+                  -->
+                  <artifact>*:*</artifact>
+                  <excludes>
+                    <exclude>META-INF/*.SF</exclude>
+                    <exclude>META-INF/*.DSA</exclude>
+                    <exclude>META-INF/*.RSA</exclude>
+                  </excludes>
+                </filter>
+              </filters>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
+
diff --git a/java/pom.xml b/java/pom.xml
index dd92b9d55f6b8068a4edd9f4e98a20c152e1f3ab..2297dbe377ad53267488c146fb447d3270ac26ea 100644
--- a/java/pom.xml
+++ b/java/pom.xml
@@ -1,13 +1,13 @@
 <?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/maven-v4_0_0.xsd">
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.google.flatbuffers</groupId>
-  <artifactId>flatbuffers-java</artifactId>
+  <artifactId>flatbuffers</artifactId>
   <version>1.3.0-SNAPSHOT</version>
-  <packaging>jar</packaging>
-  <name>FlatBuffers Java API</name>
+  <packaging>pom</packaging>
+  <name>FlatBuffers</name>
   <description>
     Memory Efficient Serialization Library
   </description>
@@ -30,10 +30,47 @@
       scm:git:https://github.com/google/flatbuffers.git
     </connection>
   </scm>
-  <dependencies>
-  </dependencies>
+
+  <prerequisites>
+    <maven>3.0</maven>
+  </prerequisites>
+
+
+  <modules>
+    <module>flatbuffers</module>
+    <module>jmh</module>
+  </modules>
+
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>junit</groupId>
+        <artifactId>junit</artifactId>
+        <version>4.12</version>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+
   <build>
-    <sourceDirectory>./</sourceDirectory>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-shade-plugin</artifactId>
+          <version>2.2</version>
+        </plugin>
+        <plugin>
+          <groupId>org.codehaus.mojo</groupId>
+          <artifactId>exec-maven-plugin</artifactId>
+          <version>1.5.0</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.felix</groupId>
+          <artifactId>maven-bundle-plugin</artifactId>
+          <version>3.0.1</version>
+        </plugin>
+      </plugins>
+    </pluginManagement>
     <plugins>
       <plugin>
         <artifactId>maven-compiler-plugin</artifactId>