diff --git a/core/java/build.xml b/core/java/build.xml
index 9a4ec9c47d7f8fb32d30cb94975869e1ac3e556a..b40f4f66762cdcfacf609c4156e80083096d4890 100644
--- a/core/java/build.xml
+++ b/core/java/build.xml
@@ -68,27 +68,50 @@
         <javadoc sourcepath="./src:./test" destdir="./build/javadoc" packagenames="*" use="true" splitindex="true" windowtitle="I2P SDK" />
     </target>
 
+    <!-- scala paths -->
+    <target name="scala.init">
+        <property name="scala-library.jar" value="${scalatest.libs}/scala-library.jar" />
+        <property name="scalatest.jar" value="${scalatest.libs}/scalatest.jar" />
+        <taskdef resource="scala/tools/ant/antlib.xml">
+            <classpath>
+                <pathelement location="${scalatest.libs}/scala-compiler.jar" />
+                <pathelement location="${scala-library.jar}" />
+            </classpath>
+        </taskdef>
+    </target>
+
     <!-- unit tests -->
-    <target name="compileTest">
+    <target name="scalatest.compileTest" depends="jar, scala.init">
+        <mkdir dir="./build" />
+        <mkdir dir="./build/obj_scala" />
+        <scalac srcdir="./test/scalatest" destdir="./build/obj_scala" deprecation="on" >
+            <classpath>
+                <pathelement location="${scala-library.jar}" />
+                <pathelement location="${scalatest.jar}" />
+                <pathelement location="./build/i2p.jar" />
+            </classpath>
+        </scalac>
+    </target>
+    <target name="junit.compileTest" depends="compile">
         <mkdir dir="./build" />
         <mkdir dir="./build/obj" />
         <!-- junit and hamcrest classes should be in ant runtime -->
-        <javac srcdir="./src:./test" debug="true" source="1.5" target="1.5" deprecation="on"
+        <javac srcdir="./test/junit" debug="true" source="1.5" target="1.5" deprecation="on"
                includeAntRuntime="true"
                destdir="./build/obj" >
             <compilerarg line="${javac.compilerargs}" />
         </javac>
     </target>
-    <target name="jarTest" depends="compileTest">
+    <target name="jarTest" depends="junit.compileTest">
         <jar destfile="./build/i2ptest.jar" basedir="./build/obj" includes="**/*.class" />
     </target>
     <!-- preparation of code coverage tool of choice -->
-    <target name="prepareClover" depends="compileTest" if="with.clover">
+    <target name="prepareClover" depends="compile" if="with.clover">
         <taskdef resource="clovertasks"/>
         <mkdir dir="../../reports/core/clover" />
         <clover-setup initString="../../reports/core/clover/coverage.db"/>
     </target>
-    <target name="prepareCobertura" depends="compileTest" if="with.cobertura">
+    <target name="prepareCobertura" depends="compile" if="with.cobertura">
         <taskdef classpath="${with.cobertura}" resource="tasks.properties" onerror="report" />
         <mkdir dir="./build/obj_cobertura" />
         <delete file="./cobertura.ser" />
@@ -115,7 +138,39 @@
     </target>
     <target name="prepareTest" depends="prepareClover, prepareCobertura" />
     <!-- end preparation of code coverage tool -->
-    <target name="test" depends="clean, compileTest, prepareTest">
+    <target name="scalatest.test" depends="clean, scalatest.compileTest, prepareTest">
+        <mkdir dir="../../reports/core/scalatest/" />
+        <delete>
+            <fileset dir="../../reports/core/scalatest">
+                <include name="TEST-*.xml"/>
+            </fileset>
+        </delete>
+        <taskdef name="scalatest" classname="org.scalatest.tools.ScalaTestAntTask">
+            <classpath>
+                <pathelement location="${scala-library.jar}" />
+                <pathelement location="${scalatest.jar}" />
+                <pathelement location="./build/obj_cobertura" />
+                <pathelement location="./build/obj" />
+                <pathelement location="../../build/jbigi.jar" />
+                <pathelement location="${with.clover}" />
+                <pathelement location="${with.cobertura}" />
+            </classpath>
+        </taskdef>
+        <scalatest runpath="./build/obj_scala" fork="yes" maxmemory="384M">
+            <tagsToExclude>
+                SlowTests
+            </tagsToExclude>
+            <reporter type="stdout" />
+            <reporter type="junitxml" directory="../../reports/core/scalatest/" />
+        </scalatest>
+        <!-- fetch the real hostname of this machine -->
+        <exec executable="hostname" outputproperty="host.name"/>
+        <!-- set if unset -->
+        <property name="host.fakename" value="i2ptester" />
+        <!-- replace hostname that junit inserts into reports with fake one -->
+        <replace dir="../../reports/core/scalatest/" token="${host.name}" value="${host.fakename}"/>
+    </target>
+    <target name="junit.test" depends="clean, junit.compileTest, prepareTest">
         <mkdir dir="../../reports/core/junit/" />
         <delete>
             <fileset dir="../../reports/core/junit">
@@ -136,7 +191,7 @@
                 <pathelement location="${with.cobertura}" />
             </classpath>
             <batchtest todir="../../reports/core/junit/">
-                <fileset dir="./junittest/">
+                <fileset dir="./test/junit/">
                     <include name="**/*Test.java" />
                     <exclude name="**/ElGamalAESEngineTest.java" />
                     <exclude name="**/StructureTest.java" />
@@ -157,7 +212,16 @@
         <!-- replace hostname that junit inserts into reports with fake one -->
         <replace dir="../../reports/core/junit/" token="${host.name}" value="${host.fakename}"/>
     </target>
+    <target name="test" depends="scalatest.test"/>
     <!-- test reports -->
+    <target name="scalatest.report">
+        <junitreport todir="../../reports/core/scalatest">
+            <fileset dir="../../reports/core/scalatest">
+                <include name="TEST-*.xml"/>
+            </fileset>
+            <report format="frames" todir="../../reports/core/html/scalatest"/>
+        </junitreport>
+    </target>
     <target name="junit.report">
         <junitreport todir="../../reports/core/junit">
             <fileset dir="../../reports/core/junit">
@@ -180,7 +244,7 @@
         <cobertura-report format="html" srcdir="./src" destdir="../../reports/core/html/cobertura" />
         <delete file="./cobertura.ser" />
     </target>
-    <target name="test.report" depends="junit.report, clover.report, cobertura.report"/>
+    <target name="test.report" depends="scalatest.report, clover.report, cobertura.report"/>
     <!-- end test reports -->
     <target name="fulltest" depends="test, test.report" />
     <!-- end unit tests -->
diff --git a/core/java/junittest/net/i2p/AllCoreTests.java b/core/java/test/junit/net/i2p/AllCoreTests.java
similarity index 100%
rename from core/java/junittest/net/i2p/AllCoreTests.java
rename to core/java/test/junit/net/i2p/AllCoreTests.java
diff --git a/core/java/junittest/net/i2p/client/I2PClientTest.java b/core/java/test/junit/net/i2p/client/I2PClientTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/client/I2PClientTest.java
rename to core/java/test/junit/net/i2p/client/I2PClientTest.java
diff --git a/core/java/junittest/net/i2p/client/I2PClientTestSuite.java b/core/java/test/junit/net/i2p/client/I2PClientTestSuite.java
similarity index 100%
rename from core/java/junittest/net/i2p/client/I2PClientTestSuite.java
rename to core/java/test/junit/net/i2p/client/I2PClientTestSuite.java
diff --git a/core/java/junittest/net/i2p/client/I2PSessionTest.java b/core/java/test/junit/net/i2p/client/I2PSessionTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/client/I2PSessionTest.java
rename to core/java/test/junit/net/i2p/client/I2PSessionTest.java
diff --git a/core/java/junittest/net/i2p/client/datagram/DatagramTest.java b/core/java/test/junit/net/i2p/client/datagram/DatagramTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/client/datagram/DatagramTest.java
rename to core/java/test/junit/net/i2p/client/datagram/DatagramTest.java
diff --git a/core/java/junittest/net/i2p/client/naming/BlockfileNamingServiceTest.java b/core/java/test/junit/net/i2p/client/naming/BlockfileNamingServiceTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/client/naming/BlockfileNamingServiceTest.java
rename to core/java/test/junit/net/i2p/client/naming/BlockfileNamingServiceTest.java
diff --git a/core/java/junittest/net/i2p/client/naming/DummyNamingServiceTest.java b/core/java/test/junit/net/i2p/client/naming/DummyNamingServiceTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/client/naming/DummyNamingServiceTest.java
rename to core/java/test/junit/net/i2p/client/naming/DummyNamingServiceTest.java
diff --git a/core/java/junittest/net/i2p/client/naming/SingleFileNamingServiceTest.java b/core/java/test/junit/net/i2p/client/naming/SingleFileNamingServiceTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/client/naming/SingleFileNamingServiceTest.java
rename to core/java/test/junit/net/i2p/client/naming/SingleFileNamingServiceTest.java
diff --git a/core/java/junittest/net/i2p/crypto/AES256Bench.java b/core/java/test/junit/net/i2p/crypto/AES256Bench.java
similarity index 100%
rename from core/java/junittest/net/i2p/crypto/AES256Bench.java
rename to core/java/test/junit/net/i2p/crypto/AES256Bench.java
diff --git a/core/java/junittest/net/i2p/crypto/AES256Test.java b/core/java/test/junit/net/i2p/crypto/AES256Test.java
similarity index 100%
rename from core/java/junittest/net/i2p/crypto/AES256Test.java
rename to core/java/test/junit/net/i2p/crypto/AES256Test.java
diff --git a/core/java/junittest/net/i2p/crypto/AESInputStream.java b/core/java/test/junit/net/i2p/crypto/AESInputStream.java
similarity index 100%
rename from core/java/junittest/net/i2p/crypto/AESInputStream.java
rename to core/java/test/junit/net/i2p/crypto/AESInputStream.java
diff --git a/core/java/junittest/net/i2p/crypto/AESInputStreamTest.java b/core/java/test/junit/net/i2p/crypto/AESInputStreamTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/crypto/AESInputStreamTest.java
rename to core/java/test/junit/net/i2p/crypto/AESInputStreamTest.java
diff --git a/core/java/junittest/net/i2p/crypto/AESOutputStream.java b/core/java/test/junit/net/i2p/crypto/AESOutputStream.java
similarity index 100%
rename from core/java/junittest/net/i2p/crypto/AESOutputStream.java
rename to core/java/test/junit/net/i2p/crypto/AESOutputStream.java
diff --git a/core/java/junittest/net/i2p/crypto/CryptixAESEngineTest.java b/core/java/test/junit/net/i2p/crypto/CryptixAESEngineTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/crypto/CryptixAESEngineTest.java
rename to core/java/test/junit/net/i2p/crypto/CryptixAESEngineTest.java
diff --git a/core/java/junittest/net/i2p/crypto/CryptixRijndael_AlgorithmTest.java b/core/java/test/junit/net/i2p/crypto/CryptixRijndael_AlgorithmTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/crypto/CryptixRijndael_AlgorithmTest.java
rename to core/java/test/junit/net/i2p/crypto/CryptixRijndael_AlgorithmTest.java
diff --git a/core/java/junittest/net/i2p/crypto/CryptoTestSuite.java b/core/java/test/junit/net/i2p/crypto/CryptoTestSuite.java
similarity index 100%
rename from core/java/junittest/net/i2p/crypto/CryptoTestSuite.java
rename to core/java/test/junit/net/i2p/crypto/CryptoTestSuite.java
diff --git a/core/java/junittest/net/i2p/crypto/DSABench.java b/core/java/test/junit/net/i2p/crypto/DSABench.java
similarity index 100%
rename from core/java/junittest/net/i2p/crypto/DSABench.java
rename to core/java/test/junit/net/i2p/crypto/DSABench.java
diff --git a/core/java/junittest/net/i2p/crypto/DSATest.java b/core/java/test/junit/net/i2p/crypto/DSATest.java
similarity index 100%
rename from core/java/junittest/net/i2p/crypto/DSATest.java
rename to core/java/test/junit/net/i2p/crypto/DSATest.java
diff --git a/core/java/junittest/net/i2p/crypto/DummyPooledRandomSource.java b/core/java/test/junit/net/i2p/crypto/DummyPooledRandomSource.java
similarity index 100%
rename from core/java/junittest/net/i2p/crypto/DummyPooledRandomSource.java
rename to core/java/test/junit/net/i2p/crypto/DummyPooledRandomSource.java
diff --git a/core/java/junittest/net/i2p/crypto/ElGamalAESEngineTest.java b/core/java/test/junit/net/i2p/crypto/ElGamalAESEngineTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/crypto/ElGamalAESEngineTest.java
rename to core/java/test/junit/net/i2p/crypto/ElGamalAESEngineTest.java
diff --git a/core/java/junittest/net/i2p/crypto/ElGamalBench.java b/core/java/test/junit/net/i2p/crypto/ElGamalBench.java
similarity index 100%
rename from core/java/junittest/net/i2p/crypto/ElGamalBench.java
rename to core/java/test/junit/net/i2p/crypto/ElGamalBench.java
diff --git a/core/java/junittest/net/i2p/crypto/ElGamalTest.java b/core/java/test/junit/net/i2p/crypto/ElGamalTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/crypto/ElGamalTest.java
rename to core/java/test/junit/net/i2p/crypto/ElGamalTest.java
diff --git a/core/java/junittest/net/i2p/crypto/ElGamalVerify.java b/core/java/test/junit/net/i2p/crypto/ElGamalVerify.java
similarity index 100%
rename from core/java/junittest/net/i2p/crypto/ElGamalVerify.java
rename to core/java/test/junit/net/i2p/crypto/ElGamalVerify.java
diff --git a/core/java/junittest/net/i2p/crypto/HMACSHA256Bench.java b/core/java/test/junit/net/i2p/crypto/HMACSHA256Bench.java
similarity index 100%
rename from core/java/junittest/net/i2p/crypto/HMACSHA256Bench.java
rename to core/java/test/junit/net/i2p/crypto/HMACSHA256Bench.java
diff --git a/core/java/junittest/net/i2p/crypto/HMACSHA256Test.java b/core/java/test/junit/net/i2p/crypto/HMACSHA256Test.java
similarity index 100%
rename from core/java/junittest/net/i2p/crypto/HMACSHA256Test.java
rename to core/java/test/junit/net/i2p/crypto/HMACSHA256Test.java
diff --git a/core/java/junittest/net/i2p/crypto/KeyGeneratorTest.java b/core/java/test/junit/net/i2p/crypto/KeyGeneratorTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/crypto/KeyGeneratorTest.java
rename to core/java/test/junit/net/i2p/crypto/KeyGeneratorTest.java
diff --git a/core/java/junittest/net/i2p/crypto/SHA1HashTest.java b/core/java/test/junit/net/i2p/crypto/SHA1HashTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/crypto/SHA1HashTest.java
rename to core/java/test/junit/net/i2p/crypto/SHA1HashTest.java
diff --git a/core/java/junittest/net/i2p/crypto/SHA256Bench.java b/core/java/test/junit/net/i2p/crypto/SHA256Bench.java
similarity index 100%
rename from core/java/junittest/net/i2p/crypto/SHA256Bench.java
rename to core/java/test/junit/net/i2p/crypto/SHA256Bench.java
diff --git a/core/java/junittest/net/i2p/crypto/SHA256Test.java b/core/java/test/junit/net/i2p/crypto/SHA256Test.java
similarity index 100%
rename from core/java/junittest/net/i2p/crypto/SHA256Test.java
rename to core/java/test/junit/net/i2p/crypto/SHA256Test.java
diff --git a/core/java/junittest/net/i2p/crypto/SessionEncryptionTest.java b/core/java/test/junit/net/i2p/crypto/SessionEncryptionTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/crypto/SessionEncryptionTest.java
rename to core/java/test/junit/net/i2p/crypto/SessionEncryptionTest.java
diff --git a/core/java/junittest/net/i2p/data/Base64Test.java b/core/java/test/junit/net/i2p/data/Base64Test.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/Base64Test.java
rename to core/java/test/junit/net/i2p/data/Base64Test.java
diff --git a/core/java/junittest/net/i2p/data/BooleanTest.java b/core/java/test/junit/net/i2p/data/BooleanTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/BooleanTest.java
rename to core/java/test/junit/net/i2p/data/BooleanTest.java
diff --git a/core/java/junittest/net/i2p/data/CertificateTest.java b/core/java/test/junit/net/i2p/data/CertificateTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/CertificateTest.java
rename to core/java/test/junit/net/i2p/data/CertificateTest.java
diff --git a/core/java/junittest/net/i2p/data/DataHelperTest.java b/core/java/test/junit/net/i2p/data/DataHelperTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/DataHelperTest.java
rename to core/java/test/junit/net/i2p/data/DataHelperTest.java
diff --git a/core/java/junittest/net/i2p/data/DataStructureImplTest.java b/core/java/test/junit/net/i2p/data/DataStructureImplTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/DataStructureImplTest.java
rename to core/java/test/junit/net/i2p/data/DataStructureImplTest.java
diff --git a/core/java/junittest/net/i2p/data/DataTestSuite.java b/core/java/test/junit/net/i2p/data/DataTestSuite.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/DataTestSuite.java
rename to core/java/test/junit/net/i2p/data/DataTestSuite.java
diff --git a/core/java/junittest/net/i2p/data/DateTest.java b/core/java/test/junit/net/i2p/data/DateTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/DateTest.java
rename to core/java/test/junit/net/i2p/data/DateTest.java
diff --git a/core/java/junittest/net/i2p/data/DestinationTest.java b/core/java/test/junit/net/i2p/data/DestinationTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/DestinationTest.java
rename to core/java/test/junit/net/i2p/data/DestinationTest.java
diff --git a/core/java/junittest/net/i2p/data/HashTest.java b/core/java/test/junit/net/i2p/data/HashTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/HashTest.java
rename to core/java/test/junit/net/i2p/data/HashTest.java
diff --git a/core/java/junittest/net/i2p/data/LeaseSetTest.java b/core/java/test/junit/net/i2p/data/LeaseSetTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/LeaseSetTest.java
rename to core/java/test/junit/net/i2p/data/LeaseSetTest.java
diff --git a/core/java/junittest/net/i2p/data/LeaseTest.java b/core/java/test/junit/net/i2p/data/LeaseTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/LeaseTest.java
rename to core/java/test/junit/net/i2p/data/LeaseTest.java
diff --git a/core/java/junittest/net/i2p/data/MappingTest.java b/core/java/test/junit/net/i2p/data/MappingTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/MappingTest.java
rename to core/java/test/junit/net/i2p/data/MappingTest.java
diff --git a/core/java/junittest/net/i2p/data/PayloadTest.java b/core/java/test/junit/net/i2p/data/PayloadTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/PayloadTest.java
rename to core/java/test/junit/net/i2p/data/PayloadTest.java
diff --git a/core/java/junittest/net/i2p/data/PrivateKeyTest.java b/core/java/test/junit/net/i2p/data/PrivateKeyTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/PrivateKeyTest.java
rename to core/java/test/junit/net/i2p/data/PrivateKeyTest.java
diff --git a/core/java/junittest/net/i2p/data/PublicKeyTest.java b/core/java/test/junit/net/i2p/data/PublicKeyTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/PublicKeyTest.java
rename to core/java/test/junit/net/i2p/data/PublicKeyTest.java
diff --git a/core/java/junittest/net/i2p/data/RouterAddressTest.java b/core/java/test/junit/net/i2p/data/RouterAddressTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/RouterAddressTest.java
rename to core/java/test/junit/net/i2p/data/RouterAddressTest.java
diff --git a/core/java/junittest/net/i2p/data/RouterIdentityTest.java b/core/java/test/junit/net/i2p/data/RouterIdentityTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/RouterIdentityTest.java
rename to core/java/test/junit/net/i2p/data/RouterIdentityTest.java
diff --git a/core/java/junittest/net/i2p/data/RouterInfoTest.java b/core/java/test/junit/net/i2p/data/RouterInfoTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/RouterInfoTest.java
rename to core/java/test/junit/net/i2p/data/RouterInfoTest.java
diff --git a/core/java/junittest/net/i2p/data/SessionKeyTest.java b/core/java/test/junit/net/i2p/data/SessionKeyTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/SessionKeyTest.java
rename to core/java/test/junit/net/i2p/data/SessionKeyTest.java
diff --git a/core/java/junittest/net/i2p/data/SignatureTest.java b/core/java/test/junit/net/i2p/data/SignatureTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/SignatureTest.java
rename to core/java/test/junit/net/i2p/data/SignatureTest.java
diff --git a/core/java/junittest/net/i2p/data/SigningPrivateKeyTest.java b/core/java/test/junit/net/i2p/data/SigningPrivateKeyTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/SigningPrivateKeyTest.java
rename to core/java/test/junit/net/i2p/data/SigningPrivateKeyTest.java
diff --git a/core/java/junittest/net/i2p/data/SigningPublicKeyTest.java b/core/java/test/junit/net/i2p/data/SigningPublicKeyTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/SigningPublicKeyTest.java
rename to core/java/test/junit/net/i2p/data/SigningPublicKeyTest.java
diff --git a/core/java/junittest/net/i2p/data/SimpleDataStructureTest.java b/core/java/test/junit/net/i2p/data/SimpleDataStructureTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/SimpleDataStructureTest.java
rename to core/java/test/junit/net/i2p/data/SimpleDataStructureTest.java
diff --git a/core/java/junittest/net/i2p/data/StringTest.java b/core/java/test/junit/net/i2p/data/StringTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/StringTest.java
rename to core/java/test/junit/net/i2p/data/StringTest.java
diff --git a/core/java/junittest/net/i2p/data/StructureTest.java b/core/java/test/junit/net/i2p/data/StructureTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/StructureTest.java
rename to core/java/test/junit/net/i2p/data/StructureTest.java
diff --git a/core/java/junittest/net/i2p/data/TestData.java b/core/java/test/junit/net/i2p/data/TestData.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/TestData.java
rename to core/java/test/junit/net/i2p/data/TestData.java
diff --git a/core/java/junittest/net/i2p/data/TestDataGenerator.java b/core/java/test/junit/net/i2p/data/TestDataGenerator.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/TestDataGenerator.java
rename to core/java/test/junit/net/i2p/data/TestDataGenerator.java
diff --git a/core/java/junittest/net/i2p/data/TestDataPrinter.java b/core/java/test/junit/net/i2p/data/TestDataPrinter.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/TestDataPrinter.java
rename to core/java/test/junit/net/i2p/data/TestDataPrinter.java
diff --git a/core/java/junittest/net/i2p/data/TunnelIdTest.java b/core/java/test/junit/net/i2p/data/TunnelIdTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/TunnelIdTest.java
rename to core/java/test/junit/net/i2p/data/TunnelIdTest.java
diff --git a/core/java/junittest/net/i2p/data/UnsignedIntegerTest.java b/core/java/test/junit/net/i2p/data/UnsignedIntegerTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/UnsignedIntegerTest.java
rename to core/java/test/junit/net/i2p/data/UnsignedIntegerTest.java
diff --git a/core/java/junittest/net/i2p/data/i2cp/AbuseReasonTest.java b/core/java/test/junit/net/i2p/data/i2cp/AbuseReasonTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/i2cp/AbuseReasonTest.java
rename to core/java/test/junit/net/i2p/data/i2cp/AbuseReasonTest.java
diff --git a/core/java/junittest/net/i2p/data/i2cp/AbuseSeverityTest.java b/core/java/test/junit/net/i2p/data/i2cp/AbuseSeverityTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/i2cp/AbuseSeverityTest.java
rename to core/java/test/junit/net/i2p/data/i2cp/AbuseSeverityTest.java
diff --git a/core/java/junittest/net/i2p/data/i2cp/BandwidthLimitsMessageTest.java b/core/java/test/junit/net/i2p/data/i2cp/BandwidthLimitsMessageTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/i2cp/BandwidthLimitsMessageTest.java
rename to core/java/test/junit/net/i2p/data/i2cp/BandwidthLimitsMessageTest.java
diff --git a/core/java/junittest/net/i2p/data/i2cp/CreateLeaseSetMessageTest.java b/core/java/test/junit/net/i2p/data/i2cp/CreateLeaseSetMessageTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/i2cp/CreateLeaseSetMessageTest.java
rename to core/java/test/junit/net/i2p/data/i2cp/CreateLeaseSetMessageTest.java
diff --git a/core/java/junittest/net/i2p/data/i2cp/CreateSessionMessageTest.java b/core/java/test/junit/net/i2p/data/i2cp/CreateSessionMessageTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/i2cp/CreateSessionMessageTest.java
rename to core/java/test/junit/net/i2p/data/i2cp/CreateSessionMessageTest.java
diff --git a/core/java/junittest/net/i2p/data/i2cp/DestLookupMessageTest.java b/core/java/test/junit/net/i2p/data/i2cp/DestLookupMessageTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/i2cp/DestLookupMessageTest.java
rename to core/java/test/junit/net/i2p/data/i2cp/DestLookupMessageTest.java
diff --git a/core/java/junittest/net/i2p/data/i2cp/DestReplyMessageTest.java b/core/java/test/junit/net/i2p/data/i2cp/DestReplyMessageTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/i2cp/DestReplyMessageTest.java
rename to core/java/test/junit/net/i2p/data/i2cp/DestReplyMessageTest.java
diff --git a/core/java/junittest/net/i2p/data/i2cp/DestroySessionMessageTest.java b/core/java/test/junit/net/i2p/data/i2cp/DestroySessionMessageTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/i2cp/DestroySessionMessageTest.java
rename to core/java/test/junit/net/i2p/data/i2cp/DestroySessionMessageTest.java
diff --git a/core/java/junittest/net/i2p/data/i2cp/DisconnectMessageTest.java b/core/java/test/junit/net/i2p/data/i2cp/DisconnectMessageTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/i2cp/DisconnectMessageTest.java
rename to core/java/test/junit/net/i2p/data/i2cp/DisconnectMessageTest.java
diff --git a/core/java/junittest/net/i2p/data/i2cp/GetBandwidthLimitsMessageTest.java b/core/java/test/junit/net/i2p/data/i2cp/GetBandwidthLimitsMessageTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/i2cp/GetBandwidthLimitsMessageTest.java
rename to core/java/test/junit/net/i2p/data/i2cp/GetBandwidthLimitsMessageTest.java
diff --git a/core/java/junittest/net/i2p/data/i2cp/GetDateMessageTest.java b/core/java/test/junit/net/i2p/data/i2cp/GetDateMessageTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/i2cp/GetDateMessageTest.java
rename to core/java/test/junit/net/i2p/data/i2cp/GetDateMessageTest.java
diff --git a/core/java/junittest/net/i2p/data/i2cp/I2CPTestSuite.java b/core/java/test/junit/net/i2p/data/i2cp/I2CPTestSuite.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/i2cp/I2CPTestSuite.java
rename to core/java/test/junit/net/i2p/data/i2cp/I2CPTestSuite.java
diff --git a/core/java/junittest/net/i2p/data/i2cp/MessageIdTest.java b/core/java/test/junit/net/i2p/data/i2cp/MessageIdTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/i2cp/MessageIdTest.java
rename to core/java/test/junit/net/i2p/data/i2cp/MessageIdTest.java
diff --git a/core/java/junittest/net/i2p/data/i2cp/MessagePayloadMessageTest.java b/core/java/test/junit/net/i2p/data/i2cp/MessagePayloadMessageTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/i2cp/MessagePayloadMessageTest.java
rename to core/java/test/junit/net/i2p/data/i2cp/MessagePayloadMessageTest.java
diff --git a/core/java/junittest/net/i2p/data/i2cp/MessageStatusMessageTest.java b/core/java/test/junit/net/i2p/data/i2cp/MessageStatusMessageTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/i2cp/MessageStatusMessageTest.java
rename to core/java/test/junit/net/i2p/data/i2cp/MessageStatusMessageTest.java
diff --git a/core/java/junittest/net/i2p/data/i2cp/ReceiveMessageBeginMessageTest.java b/core/java/test/junit/net/i2p/data/i2cp/ReceiveMessageBeginMessageTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/i2cp/ReceiveMessageBeginMessageTest.java
rename to core/java/test/junit/net/i2p/data/i2cp/ReceiveMessageBeginMessageTest.java
diff --git a/core/java/junittest/net/i2p/data/i2cp/ReceiveMessageEndMessageTest.java b/core/java/test/junit/net/i2p/data/i2cp/ReceiveMessageEndMessageTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/i2cp/ReceiveMessageEndMessageTest.java
rename to core/java/test/junit/net/i2p/data/i2cp/ReceiveMessageEndMessageTest.java
diff --git a/core/java/junittest/net/i2p/data/i2cp/ReconfigureSessionMessageTest.java b/core/java/test/junit/net/i2p/data/i2cp/ReconfigureSessionMessageTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/i2cp/ReconfigureSessionMessageTest.java
rename to core/java/test/junit/net/i2p/data/i2cp/ReconfigureSessionMessageTest.java
diff --git a/core/java/junittest/net/i2p/data/i2cp/ReportAbuseMessageTest.java b/core/java/test/junit/net/i2p/data/i2cp/ReportAbuseMessageTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/i2cp/ReportAbuseMessageTest.java
rename to core/java/test/junit/net/i2p/data/i2cp/ReportAbuseMessageTest.java
diff --git a/core/java/junittest/net/i2p/data/i2cp/RequestLeaseSetMessageTest.java b/core/java/test/junit/net/i2p/data/i2cp/RequestLeaseSetMessageTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/i2cp/RequestLeaseSetMessageTest.java
rename to core/java/test/junit/net/i2p/data/i2cp/RequestLeaseSetMessageTest.java
diff --git a/core/java/junittest/net/i2p/data/i2cp/SendMessageExpiresMessageTest.java b/core/java/test/junit/net/i2p/data/i2cp/SendMessageExpiresMessageTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/i2cp/SendMessageExpiresMessageTest.java
rename to core/java/test/junit/net/i2p/data/i2cp/SendMessageExpiresMessageTest.java
diff --git a/core/java/junittest/net/i2p/data/i2cp/SendMessageMessageTest.java b/core/java/test/junit/net/i2p/data/i2cp/SendMessageMessageTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/i2cp/SendMessageMessageTest.java
rename to core/java/test/junit/net/i2p/data/i2cp/SendMessageMessageTest.java
diff --git a/core/java/junittest/net/i2p/data/i2cp/SessionConfigTest.java b/core/java/test/junit/net/i2p/data/i2cp/SessionConfigTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/i2cp/SessionConfigTest.java
rename to core/java/test/junit/net/i2p/data/i2cp/SessionConfigTest.java
diff --git a/core/java/junittest/net/i2p/data/i2cp/SessionIdTest.java b/core/java/test/junit/net/i2p/data/i2cp/SessionIdTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/i2cp/SessionIdTest.java
rename to core/java/test/junit/net/i2p/data/i2cp/SessionIdTest.java
diff --git a/core/java/junittest/net/i2p/data/i2cp/SessionStatusMessageTest.java b/core/java/test/junit/net/i2p/data/i2cp/SessionStatusMessageTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/i2cp/SessionStatusMessageTest.java
rename to core/java/test/junit/net/i2p/data/i2cp/SessionStatusMessageTest.java
diff --git a/core/java/junittest/net/i2p/data/i2cp/SetDateMessageTest.java b/core/java/test/junit/net/i2p/data/i2cp/SetDateMessageTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/data/i2cp/SetDateMessageTest.java
rename to core/java/test/junit/net/i2p/data/i2cp/SetDateMessageTest.java
diff --git a/core/java/junittest/net/i2p/stat/RateStatTest.java b/core/java/test/junit/net/i2p/stat/RateStatTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/stat/RateStatTest.java
rename to core/java/test/junit/net/i2p/stat/RateStatTest.java
diff --git a/core/java/junittest/net/i2p/stat/RateTest.java b/core/java/test/junit/net/i2p/stat/RateTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/stat/RateTest.java
rename to core/java/test/junit/net/i2p/stat/RateTest.java
diff --git a/core/java/junittest/net/i2p/stat/SimpleStatDumper.java b/core/java/test/junit/net/i2p/stat/SimpleStatDumper.java
similarity index 100%
rename from core/java/junittest/net/i2p/stat/SimpleStatDumper.java
rename to core/java/test/junit/net/i2p/stat/SimpleStatDumper.java
diff --git a/core/java/junittest/net/i2p/stat/SizeMeasure.java b/core/java/test/junit/net/i2p/stat/SizeMeasure.java
similarity index 100%
rename from core/java/junittest/net/i2p/stat/SizeMeasure.java
rename to core/java/test/junit/net/i2p/stat/SizeMeasure.java
diff --git a/core/java/junittest/net/i2p/stat/StatLogSplitter.java b/core/java/test/junit/net/i2p/stat/StatLogSplitter.java
similarity index 100%
rename from core/java/junittest/net/i2p/stat/StatLogSplitter.java
rename to core/java/test/junit/net/i2p/stat/StatLogSplitter.java
diff --git a/core/java/junittest/net/i2p/stat/StatTestSuite.java b/core/java/test/junit/net/i2p/stat/StatTestSuite.java
similarity index 100%
rename from core/java/junittest/net/i2p/stat/StatTestSuite.java
rename to core/java/test/junit/net/i2p/stat/StatTestSuite.java
diff --git a/core/java/junittest/net/i2p/util/LogSettings.java b/core/java/test/junit/net/i2p/util/LogSettings.java
similarity index 100%
rename from core/java/junittest/net/i2p/util/LogSettings.java
rename to core/java/test/junit/net/i2p/util/LogSettings.java
diff --git a/core/java/junittest/net/i2p/util/LogSettingsTest.java b/core/java/test/junit/net/i2p/util/LogSettingsTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/util/LogSettingsTest.java
rename to core/java/test/junit/net/i2p/util/LogSettingsTest.java
diff --git a/core/java/junittest/net/i2p/util/LookAheadInputStreamTest.java b/core/java/test/junit/net/i2p/util/LookAheadInputStreamTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/util/LookAheadInputStreamTest.java
rename to core/java/test/junit/net/i2p/util/LookAheadInputStreamTest.java
diff --git a/core/java/junittest/net/i2p/util/ResettableGZIPInputStreamTest.java b/core/java/test/junit/net/i2p/util/ResettableGZIPInputStreamTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/util/ResettableGZIPInputStreamTest.java
rename to core/java/test/junit/net/i2p/util/ResettableGZIPInputStreamTest.java
diff --git a/core/java/junittest/net/i2p/util/ResettableGZIPOutputStreamTest.java b/core/java/test/junit/net/i2p/util/ResettableGZIPOutputStreamTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/util/ResettableGZIPOutputStreamTest.java
rename to core/java/test/junit/net/i2p/util/ResettableGZIPOutputStreamTest.java
diff --git a/core/java/junittest/net/i2p/util/ReusableGZIPInputStreamTest.java b/core/java/test/junit/net/i2p/util/ReusableGZIPInputStreamTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/util/ReusableGZIPInputStreamTest.java
rename to core/java/test/junit/net/i2p/util/ReusableGZIPInputStreamTest.java
diff --git a/core/java/junittest/net/i2p/util/ReusableGZIPOutputStreamTest.java b/core/java/test/junit/net/i2p/util/ReusableGZIPOutputStreamTest.java
similarity index 100%
rename from core/java/junittest/net/i2p/util/ReusableGZIPOutputStreamTest.java
rename to core/java/test/junit/net/i2p/util/ReusableGZIPOutputStreamTest.java
diff --git a/core/java/junittest/net/i2p/util/UtilTestSuite.java b/core/java/test/junit/net/i2p/util/UtilTestSuite.java
similarity index 100%
rename from core/java/junittest/net/i2p/util/UtilTestSuite.java
rename to core/java/test/junit/net/i2p/util/UtilTestSuite.java