diff --git a/pom.xml b/pom.xml
index 69882cdfe..1dd8dcfa6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,10 +3,16 @@
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">
4.0.0
+ pom
3.0.0
+
+ redis-dispatch
+ service
+
+
org.whispersystems.textsecure
TextSecureServer
2.52
@@ -14,7 +20,6 @@
1.3.9
2.9.8
- 0.14.1
UTF-8
@@ -44,109 +49,6 @@
dropwizard-migrations
${dropwizard.version}
-
- io.dropwizard
- dropwizard-testing
- ${dropwizard.version}
-
-
- io.dropwizard
- dropwizard-metrics-graphite
- ${dropwizard.version}
-
-
- org.bouncycastle
- bcprov-jdk16
- 1.46
-
-
- org.syslog4j
- syslog4j
- 0.9.30
-
-
-
- io.github.resilience4j
- resilience4j-circuitbreaker
- ${resilience4j.version}
-
-
- io.github.resilience4j
- resilience4j-retry
- ${resilience4j.version}
-
-
-
-
- com.amazonaws
- aws-java-sdk-s3
- 1.11.366
-
-
- com.amazonaws
- aws-java-sdk-sqs
- 1.11.362
-
-
- com.google.protobuf
- protobuf-java
- 2.6.1
-
-
-
- redis.clients
- jedis
- 2.9.0
- jar
- compile
-
-
-
- org.postgresql
- postgresql
- 9.4-1201-jdbc41
-
-
- org.whispersystems
- websocket-resources
- 0.5.10
-
-
- org.whispersystems
- curve25519-java
- 0.5.0
-
-
-
-
- com.turo
- pushy
- 0.13.7
-
-
- com.turo
- pushy-dropwizard-metrics-listener
- 0.13.7
-
-
- io.netty
- netty-tcnative-boringssl-static
- 2.0.20.Final
- runtime
-
-
-
-
- org.whispersystems
- gcm-sender-async
- 0.1.6
-
-
-
- com.googlecode.libphonenumber
- libphonenumber
- 8.10.2
-
javax.xml.bind
@@ -161,33 +63,9 @@
- org.glassfish.jersey.test-framework.providers
- jersey-test-framework-provider-grizzly2
- 2.19
- test
-
-
- javax.servlet
- javax.servlet-api
-
-
- junit
- junit
-
-
-
-
-
- org.mockito
- mockito-core
- 2.25.1
- test
-
-
-
- com.opentable.components
- otj-pg-embedded
- 0.13.1
+ io.dropwizard
+ dropwizard-testing
+ ${dropwizard.version}
test
@@ -210,30 +88,14 @@
-
+
+ org.mockito
+ mockito-core
+ 2.25.1
+ test
+
-
-
-
- org.apache.httpcomponents
- httpclient
- 4.4.1
-
-
- org.apache.httpcomponents
- httpcore
- 4.4.1
-
-
-
- com.fasterxml.jackson.core
- jackson-databind
- ${jackson.api.version}
-
-
-
-
@@ -257,40 +119,6 @@
-
- org.apache.maven.plugins
- maven-shade-plugin
- 1.6
-
- true
-
-
- *:*
-
- META-INF/*.SF
- META-INF/*.DSA
- META-INF/*.RSA
-
-
-
-
-
-
- package
-
- shade
-
-
-
-
-
- org.whispersystems.textsecuregcm.WhisperServerService
-
-
-
-
-
-
org.apache.maven.plugins
@@ -298,33 +126,7 @@
3.0.0-M1
-
- maven-assembly-plugin
- 2.4
-
-
- assembly.xml
-
-
-
-
- make-assembly
- package
-
- single
-
-
-
-
-
-
-
- gcm-server-repository
- https://raw.github.com/whispersystems/maven/master/gcm-server/releases/
-
-
-
diff --git a/redis-dispatch/pom.xml b/redis-dispatch/pom.xml
new file mode 100644
index 000000000..55a86d215
--- /dev/null
+++ b/redis-dispatch/pom.xml
@@ -0,0 +1,17 @@
+
+
+
+ TextSecureServer
+ org.whispersystems.textsecure
+ 2.49
+
+ 4.0.0
+
+ org.whispersystems.textsecure
+ redis-dispatch
+ 2.49
+
+
+
\ No newline at end of file
diff --git a/src/main/java/org/whispersystems/dispatch/DispatchChannel.java b/redis-dispatch/src/main/java/org/whispersystems/dispatch/DispatchChannel.java
similarity index 100%
rename from src/main/java/org/whispersystems/dispatch/DispatchChannel.java
rename to redis-dispatch/src/main/java/org/whispersystems/dispatch/DispatchChannel.java
diff --git a/src/main/java/org/whispersystems/dispatch/DispatchManager.java b/redis-dispatch/src/main/java/org/whispersystems/dispatch/DispatchManager.java
similarity index 100%
rename from src/main/java/org/whispersystems/dispatch/DispatchManager.java
rename to redis-dispatch/src/main/java/org/whispersystems/dispatch/DispatchManager.java
diff --git a/src/main/java/org/whispersystems/dispatch/io/RedisInputStream.java b/redis-dispatch/src/main/java/org/whispersystems/dispatch/io/RedisInputStream.java
similarity index 100%
rename from src/main/java/org/whispersystems/dispatch/io/RedisInputStream.java
rename to redis-dispatch/src/main/java/org/whispersystems/dispatch/io/RedisInputStream.java
diff --git a/src/main/java/org/whispersystems/dispatch/io/RedisPubSubConnectionFactory.java b/redis-dispatch/src/main/java/org/whispersystems/dispatch/io/RedisPubSubConnectionFactory.java
similarity index 100%
rename from src/main/java/org/whispersystems/dispatch/io/RedisPubSubConnectionFactory.java
rename to redis-dispatch/src/main/java/org/whispersystems/dispatch/io/RedisPubSubConnectionFactory.java
diff --git a/src/main/java/org/whispersystems/dispatch/redis/PubSubConnection.java b/redis-dispatch/src/main/java/org/whispersystems/dispatch/redis/PubSubConnection.java
similarity index 100%
rename from src/main/java/org/whispersystems/dispatch/redis/PubSubConnection.java
rename to redis-dispatch/src/main/java/org/whispersystems/dispatch/redis/PubSubConnection.java
diff --git a/src/main/java/org/whispersystems/dispatch/redis/PubSubReply.java b/redis-dispatch/src/main/java/org/whispersystems/dispatch/redis/PubSubReply.java
similarity index 100%
rename from src/main/java/org/whispersystems/dispatch/redis/PubSubReply.java
rename to redis-dispatch/src/main/java/org/whispersystems/dispatch/redis/PubSubReply.java
diff --git a/src/main/java/org/whispersystems/dispatch/redis/protocol/ArrayReplyHeader.java b/redis-dispatch/src/main/java/org/whispersystems/dispatch/redis/protocol/ArrayReplyHeader.java
similarity index 100%
rename from src/main/java/org/whispersystems/dispatch/redis/protocol/ArrayReplyHeader.java
rename to redis-dispatch/src/main/java/org/whispersystems/dispatch/redis/protocol/ArrayReplyHeader.java
diff --git a/src/main/java/org/whispersystems/dispatch/redis/protocol/IntReply.java b/redis-dispatch/src/main/java/org/whispersystems/dispatch/redis/protocol/IntReply.java
similarity index 100%
rename from src/main/java/org/whispersystems/dispatch/redis/protocol/IntReply.java
rename to redis-dispatch/src/main/java/org/whispersystems/dispatch/redis/protocol/IntReply.java
diff --git a/src/main/java/org/whispersystems/dispatch/redis/protocol/StringReplyHeader.java b/redis-dispatch/src/main/java/org/whispersystems/dispatch/redis/protocol/StringReplyHeader.java
similarity index 100%
rename from src/main/java/org/whispersystems/dispatch/redis/protocol/StringReplyHeader.java
rename to redis-dispatch/src/main/java/org/whispersystems/dispatch/redis/protocol/StringReplyHeader.java
diff --git a/src/main/java/org/whispersystems/dispatch/util/Util.java b/redis-dispatch/src/main/java/org/whispersystems/dispatch/util/Util.java
similarity index 100%
rename from src/main/java/org/whispersystems/dispatch/util/Util.java
rename to redis-dispatch/src/main/java/org/whispersystems/dispatch/util/Util.java
diff --git a/src/test/java/org/whispersystems/dispatch/DispatchManagerTest.java b/redis-dispatch/src/test/java/org/whispersystems/dispatch/DispatchManagerTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/dispatch/DispatchManagerTest.java
rename to redis-dispatch/src/test/java/org/whispersystems/dispatch/DispatchManagerTest.java
diff --git a/src/test/java/org/whispersystems/dispatch/redis/PubSubConnectionTest.java b/redis-dispatch/src/test/java/org/whispersystems/dispatch/redis/PubSubConnectionTest.java
similarity index 99%
rename from src/test/java/org/whispersystems/dispatch/redis/PubSubConnectionTest.java
rename to redis-dispatch/src/test/java/org/whispersystems/dispatch/redis/PubSubConnectionTest.java
index c0fc63c5f..d827cdff8 100644
--- a/src/test/java/org/whispersystems/dispatch/redis/PubSubConnectionTest.java
+++ b/redis-dispatch/src/test/java/org/whispersystems/dispatch/redis/PubSubConnectionTest.java
@@ -9,7 +9,6 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
-import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import static org.junit.Assert.*;
diff --git a/src/test/java/org/whispersystems/dispatch/redis/protocol/ArrayReplyHeaderTest.java b/redis-dispatch/src/test/java/org/whispersystems/dispatch/redis/protocol/ArrayReplyHeaderTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/dispatch/redis/protocol/ArrayReplyHeaderTest.java
rename to redis-dispatch/src/test/java/org/whispersystems/dispatch/redis/protocol/ArrayReplyHeaderTest.java
diff --git a/src/test/java/org/whispersystems/dispatch/redis/protocol/IntReplyHeaderTest.java b/redis-dispatch/src/test/java/org/whispersystems/dispatch/redis/protocol/IntReplyHeaderTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/dispatch/redis/protocol/IntReplyHeaderTest.java
rename to redis-dispatch/src/test/java/org/whispersystems/dispatch/redis/protocol/IntReplyHeaderTest.java
diff --git a/src/test/java/org/whispersystems/dispatch/redis/protocol/StringReplyHeaderTest.java b/redis-dispatch/src/test/java/org/whispersystems/dispatch/redis/protocol/StringReplyHeaderTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/dispatch/redis/protocol/StringReplyHeaderTest.java
rename to redis-dispatch/src/test/java/org/whispersystems/dispatch/redis/protocol/StringReplyHeaderTest.java
diff --git a/service/pom.xml b/service/pom.xml
new file mode 100644
index 000000000..7a710b21e
--- /dev/null
+++ b/service/pom.xml
@@ -0,0 +1,223 @@
+
+
+
+ TextSecureServer
+ org.whispersystems.textsecure
+ 2.49
+
+ 4.0.0
+
+ org.whispersystems.textsecure
+ service
+ 2.49
+
+
+ 0.14.1
+ UTF-8
+
+
+
+
+ org.whispersystems.textsecure
+ redis-dispatch
+ 2.49
+
+
+
+ org.bouncycastle
+ bcprov-jdk16
+ 1.46
+
+
+ org.syslog4j
+ syslog4j
+ 0.9.30
+
+
+
+
+ io.github.resilience4j
+ resilience4j-circuitbreaker
+ ${resilience4j.version}
+
+
+ io.github.resilience4j
+ resilience4j-retry
+ ${resilience4j.version}
+
+
+
+
+ com.amazonaws
+ aws-java-sdk-s3
+ 1.11.366
+
+
+ com.amazonaws
+ aws-java-sdk-sqs
+ 1.11.362
+
+
+ com.google.protobuf
+ protobuf-java
+ 2.6.1
+
+
+
+ redis.clients
+ jedis
+ 2.9.0
+ jar
+ compile
+
+
+ com.twilio.sdk
+ twilio-java-sdk
+ 4.4.4
+
+
+
+ org.postgresql
+ postgresql
+ 9.4-1201-jdbc41
+
+
+ org.whispersystems
+ websocket-resources
+ 0.5.10
+
+
+ org.whispersystems
+ curve25519-java
+ 0.5.0
+
+
+
+
+ com.turo
+ pushy
+ 0.13.7
+
+
+ com.turo
+ pushy-dropwizard-metrics-listener
+ 0.13.7
+
+
+ io.dropwizard.metrics
+ metrics-core
+
+
+
+
+ io.netty
+ netty-tcnative-boringssl-static
+ 2.0.20.Final
+ runtime
+
+
+
+
+ org.whispersystems
+ gcm-sender-async
+ 0.1.6
+
+
+
+ com.googlecode.libphonenumber
+ libphonenumber
+ 8.10.2
+
+
+
+
+ org.glassfish.jersey.test-framework.providers
+ jersey-test-framework-provider-grizzly2
+ 2.25.1
+ test
+
+
+ javax.servlet
+ javax.servlet-api
+
+
+ junit
+ junit
+
+
+
+
+
+ com.opentable.components
+ otj-pg-embedded
+ 0.13.1
+ test
+
+
+
+
+
+
+
+ org.apache.httpcomponents
+ httpclient
+ 4.4.1
+
+
+ org.apache.httpcomponents
+ httpcore
+ 4.4.1
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson.api.version}
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 1.6
+
+ true
+
+
+ *:*
+
+ META-INF/*.SF
+ META-INF/*.DSA
+ META-INF/*.RSA
+
+
+
+
+
+
+ package
+
+ shade
+
+
+
+
+
+ org.whispersystems.textsecuregcm.WhisperServerService
+
+
+
+
+
+
+
+
+
+
+
diff --git a/protobuf/Makefile b/service/protobuf/Makefile
similarity index 100%
rename from protobuf/Makefile
rename to service/protobuf/Makefile
diff --git a/protobuf/PubSubMessage.proto b/service/protobuf/PubSubMessage.proto
similarity index 100%
rename from protobuf/PubSubMessage.proto
rename to service/protobuf/PubSubMessage.proto
diff --git a/protobuf/TextSecure.proto b/service/protobuf/TextSecure.proto
similarity index 100%
rename from protobuf/TextSecure.proto
rename to service/protobuf/TextSecure.proto
diff --git a/src/main/java/org/whispersystems/textsecuregcm/WhisperServerConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerConfiguration.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/WhisperServerConfiguration.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerConfiguration.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/auth/AccountAuthenticator.java b/service/src/main/java/org/whispersystems/textsecuregcm/auth/AccountAuthenticator.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/auth/AccountAuthenticator.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/auth/AccountAuthenticator.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/auth/Anonymous.java b/service/src/main/java/org/whispersystems/textsecuregcm/auth/Anonymous.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/auth/Anonymous.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/auth/Anonymous.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/auth/AuthenticationCredentials.java b/service/src/main/java/org/whispersystems/textsecuregcm/auth/AuthenticationCredentials.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/auth/AuthenticationCredentials.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/auth/AuthenticationCredentials.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/auth/AuthorizationHeader.java b/service/src/main/java/org/whispersystems/textsecuregcm/auth/AuthorizationHeader.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/auth/AuthorizationHeader.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/auth/AuthorizationHeader.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/auth/CertificateGenerator.java b/service/src/main/java/org/whispersystems/textsecuregcm/auth/CertificateGenerator.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/auth/CertificateGenerator.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/auth/CertificateGenerator.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/auth/DirectoryCredentials.java b/service/src/main/java/org/whispersystems/textsecuregcm/auth/DirectoryCredentials.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/auth/DirectoryCredentials.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/auth/DirectoryCredentials.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/auth/DirectoryCredentialsGenerator.java b/service/src/main/java/org/whispersystems/textsecuregcm/auth/DirectoryCredentialsGenerator.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/auth/DirectoryCredentialsGenerator.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/auth/DirectoryCredentialsGenerator.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/auth/InvalidAuthorizationHeaderException.java b/service/src/main/java/org/whispersystems/textsecuregcm/auth/InvalidAuthorizationHeaderException.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/auth/InvalidAuthorizationHeaderException.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/auth/InvalidAuthorizationHeaderException.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/auth/OptionalAccess.java b/service/src/main/java/org/whispersystems/textsecuregcm/auth/OptionalAccess.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/auth/OptionalAccess.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/auth/OptionalAccess.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/auth/StoredVerificationCode.java b/service/src/main/java/org/whispersystems/textsecuregcm/auth/StoredVerificationCode.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/auth/StoredVerificationCode.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/auth/StoredVerificationCode.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/auth/TurnToken.java b/service/src/main/java/org/whispersystems/textsecuregcm/auth/TurnToken.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/auth/TurnToken.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/auth/TurnToken.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/auth/TurnTokenGenerator.java b/service/src/main/java/org/whispersystems/textsecuregcm/auth/TurnTokenGenerator.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/auth/TurnTokenGenerator.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/auth/TurnTokenGenerator.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/auth/UnidentifiedAccessChecksum.java b/service/src/main/java/org/whispersystems/textsecuregcm/auth/UnidentifiedAccessChecksum.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/auth/UnidentifiedAccessChecksum.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/auth/UnidentifiedAccessChecksum.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/configuration/AccountDatabaseCrawlerConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/AccountDatabaseCrawlerConfiguration.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/configuration/AccountDatabaseCrawlerConfiguration.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/configuration/AccountDatabaseCrawlerConfiguration.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/configuration/ApnConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/ApnConfiguration.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/configuration/ApnConfiguration.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/configuration/ApnConfiguration.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/configuration/AttachmentsConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/AttachmentsConfiguration.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/configuration/AttachmentsConfiguration.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/configuration/AttachmentsConfiguration.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/configuration/CircuitBreakerConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/CircuitBreakerConfiguration.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/configuration/CircuitBreakerConfiguration.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/configuration/CircuitBreakerConfiguration.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/configuration/DatabaseConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/DatabaseConfiguration.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/configuration/DatabaseConfiguration.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/configuration/DatabaseConfiguration.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/configuration/DirectoryClientConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/DirectoryClientConfiguration.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/configuration/DirectoryClientConfiguration.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/configuration/DirectoryClientConfiguration.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/configuration/DirectoryConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/DirectoryConfiguration.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/configuration/DirectoryConfiguration.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/configuration/DirectoryConfiguration.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/configuration/DirectoryServerConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/DirectoryServerConfiguration.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/configuration/DirectoryServerConfiguration.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/configuration/DirectoryServerConfiguration.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/configuration/GcmConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/GcmConfiguration.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/configuration/GcmConfiguration.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/configuration/GcmConfiguration.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/configuration/GraphiteConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/GraphiteConfiguration.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/configuration/GraphiteConfiguration.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/configuration/GraphiteConfiguration.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/configuration/MaxDeviceConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/MaxDeviceConfiguration.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/configuration/MaxDeviceConfiguration.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/configuration/MaxDeviceConfiguration.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/configuration/MessageCacheConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/MessageCacheConfiguration.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/configuration/MessageCacheConfiguration.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/configuration/MessageCacheConfiguration.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/configuration/ProfilesConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/ProfilesConfiguration.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/configuration/ProfilesConfiguration.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/configuration/ProfilesConfiguration.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/configuration/PushConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/PushConfiguration.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/configuration/PushConfiguration.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/configuration/PushConfiguration.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/configuration/RateLimitsConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/RateLimitsConfiguration.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/configuration/RateLimitsConfiguration.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/configuration/RateLimitsConfiguration.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/configuration/RecaptchaConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/RecaptchaConfiguration.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/configuration/RecaptchaConfiguration.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/configuration/RecaptchaConfiguration.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/configuration/RedisConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/RedisConfiguration.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/configuration/RedisConfiguration.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/configuration/RedisConfiguration.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/configuration/RetryConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/RetryConfiguration.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/configuration/RetryConfiguration.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/configuration/RetryConfiguration.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/configuration/SqsConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/SqsConfiguration.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/configuration/SqsConfiguration.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/configuration/SqsConfiguration.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/configuration/TestDeviceConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/TestDeviceConfiguration.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/configuration/TestDeviceConfiguration.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/configuration/TestDeviceConfiguration.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/configuration/TurnConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/TurnConfiguration.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/configuration/TurnConfiguration.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/configuration/TurnConfiguration.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/configuration/TwilioConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/TwilioConfiguration.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/configuration/TwilioConfiguration.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/configuration/TwilioConfiguration.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/configuration/UnidentifiedDeliveryConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/UnidentifiedDeliveryConfiguration.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/configuration/UnidentifiedDeliveryConfiguration.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/configuration/UnidentifiedDeliveryConfiguration.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/configuration/VoiceVerificationConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/VoiceVerificationConfiguration.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/configuration/VoiceVerificationConfiguration.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/configuration/VoiceVerificationConfiguration.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/controllers/AttachmentControllerBase.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AttachmentControllerBase.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/controllers/AttachmentControllerBase.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/controllers/AttachmentControllerBase.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/controllers/AttachmentControllerV1.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AttachmentControllerV1.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/controllers/AttachmentControllerV1.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/controllers/AttachmentControllerV1.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/controllers/AttachmentControllerV2.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AttachmentControllerV2.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/controllers/AttachmentControllerV2.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/controllers/AttachmentControllerV2.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/controllers/CertificateController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/CertificateController.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/controllers/CertificateController.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/controllers/CertificateController.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/controllers/DeviceController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/DeviceController.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/controllers/DeviceController.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/controllers/DeviceController.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/controllers/DeviceLimitExceededException.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/DeviceLimitExceededException.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/controllers/DeviceLimitExceededException.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/controllers/DeviceLimitExceededException.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/controllers/DirectoryController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/DirectoryController.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/controllers/DirectoryController.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/controllers/DirectoryController.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/controllers/InvalidDestinationException.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/InvalidDestinationException.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/controllers/InvalidDestinationException.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/controllers/InvalidDestinationException.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/controllers/KeepAliveController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/KeepAliveController.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/controllers/KeepAliveController.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/controllers/KeepAliveController.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/controllers/KeysController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/KeysController.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/controllers/KeysController.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/controllers/KeysController.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/controllers/MessageController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/MessageController.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/controllers/MessageController.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/controllers/MessageController.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/controllers/MismatchedDevicesException.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/MismatchedDevicesException.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/controllers/MismatchedDevicesException.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/controllers/MismatchedDevicesException.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/controllers/NoSuchUserException.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/NoSuchUserException.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/controllers/NoSuchUserException.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/controllers/NoSuchUserException.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/controllers/ProfileController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/ProfileController.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/controllers/ProfileController.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/controllers/ProfileController.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/controllers/ProvisioningController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/ProvisioningController.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/controllers/ProvisioningController.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/controllers/ProvisioningController.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/controllers/RateLimitExceededException.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/RateLimitExceededException.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/controllers/RateLimitExceededException.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/controllers/RateLimitExceededException.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/controllers/StaleDevicesException.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/StaleDevicesException.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/controllers/StaleDevicesException.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/controllers/StaleDevicesException.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/controllers/TransparentDataController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/TransparentDataController.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/controllers/TransparentDataController.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/controllers/TransparentDataController.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/controllers/ValidationException.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/ValidationException.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/controllers/ValidationException.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/controllers/ValidationException.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/controllers/VoiceVerificationController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/VoiceVerificationController.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/controllers/VoiceVerificationController.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/controllers/VoiceVerificationController.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/crypto/Curve.java b/service/src/main/java/org/whispersystems/textsecuregcm/crypto/Curve.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/crypto/Curve.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/crypto/Curve.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/crypto/DjbECPrivateKey.java b/service/src/main/java/org/whispersystems/textsecuregcm/crypto/DjbECPrivateKey.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/crypto/DjbECPrivateKey.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/crypto/DjbECPrivateKey.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/crypto/DjbECPublicKey.java b/service/src/main/java/org/whispersystems/textsecuregcm/crypto/DjbECPublicKey.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/crypto/DjbECPublicKey.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/crypto/DjbECPublicKey.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/crypto/ECKeyPair.java b/service/src/main/java/org/whispersystems/textsecuregcm/crypto/ECKeyPair.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/crypto/ECKeyPair.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/crypto/ECKeyPair.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/crypto/ECPrivateKey.java b/service/src/main/java/org/whispersystems/textsecuregcm/crypto/ECPrivateKey.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/crypto/ECPrivateKey.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/crypto/ECPrivateKey.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/crypto/ECPublicKey.java b/service/src/main/java/org/whispersystems/textsecuregcm/crypto/ECPublicKey.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/crypto/ECPublicKey.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/crypto/ECPublicKey.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/AccountAttributes.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/AccountAttributes.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/AccountAttributes.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/AccountAttributes.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/AccountCount.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/AccountCount.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/AccountCount.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/AccountCount.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/AcknowledgeWebsocketMessage.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/AcknowledgeWebsocketMessage.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/AcknowledgeWebsocketMessage.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/AcknowledgeWebsocketMessage.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/ActiveUserTally.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/ActiveUserTally.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/ActiveUserTally.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/ActiveUserTally.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/ApnRegistrationId.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/ApnRegistrationId.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/ApnRegistrationId.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/ApnRegistrationId.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/AttachmentDescriptorV1.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/AttachmentDescriptorV1.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/AttachmentDescriptorV1.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/AttachmentDescriptorV1.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/AttachmentDescriptorV2.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/AttachmentDescriptorV2.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/AttachmentDescriptorV2.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/AttachmentDescriptorV2.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/AttachmentUri.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/AttachmentUri.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/AttachmentUri.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/AttachmentUri.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/ClientContact.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/ClientContact.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/ClientContact.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/ClientContact.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/ClientContactTokens.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/ClientContactTokens.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/ClientContactTokens.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/ClientContactTokens.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/ClientContacts.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/ClientContacts.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/ClientContacts.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/ClientContacts.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/CryptoEncodingException.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/CryptoEncodingException.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/CryptoEncodingException.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/CryptoEncodingException.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/DeliveryCertificate.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/DeliveryCertificate.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/DeliveryCertificate.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/DeliveryCertificate.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/DeviceInfo.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/DeviceInfo.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/DeviceInfo.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/DeviceInfo.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/DeviceInfoList.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/DeviceInfoList.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/DeviceInfoList.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/DeviceInfoList.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/DeviceName.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/DeviceName.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/DeviceName.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/DeviceName.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/DeviceResponse.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/DeviceResponse.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/DeviceResponse.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/DeviceResponse.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/DirectoryFeedbackRequest.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/DirectoryFeedbackRequest.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/DirectoryFeedbackRequest.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/DirectoryFeedbackRequest.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/DirectoryReconciliationRequest.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/DirectoryReconciliationRequest.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/DirectoryReconciliationRequest.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/DirectoryReconciliationRequest.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/DirectoryReconciliationResponse.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/DirectoryReconciliationResponse.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/DirectoryReconciliationResponse.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/DirectoryReconciliationResponse.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/EncryptedOutgoingMessage.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/EncryptedOutgoingMessage.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/EncryptedOutgoingMessage.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/EncryptedOutgoingMessage.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/GcmRegistrationId.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/GcmRegistrationId.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/GcmRegistrationId.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/GcmRegistrationId.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/IncomingMessage.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/IncomingMessage.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/IncomingMessage.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/IncomingMessage.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/IncomingMessageList.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/IncomingMessageList.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/IncomingMessageList.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/IncomingMessageList.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/IncomingWebsocketMessage.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/IncomingWebsocketMessage.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/IncomingWebsocketMessage.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/IncomingWebsocketMessage.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/MessageProtos.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/MessageProtos.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/MessageProtos.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/MessageProtos.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/MessageResponse.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/MessageResponse.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/MessageResponse.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/MessageResponse.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/MismatchedDevices.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/MismatchedDevices.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/MismatchedDevices.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/MismatchedDevices.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/OutgoingMessageEntity.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/OutgoingMessageEntity.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/OutgoingMessageEntity.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/OutgoingMessageEntity.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/OutgoingMessageEntityList.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/OutgoingMessageEntityList.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/OutgoingMessageEntityList.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/OutgoingMessageEntityList.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/PreKey.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/PreKey.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/PreKey.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/PreKey.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/PreKeyCount.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/PreKeyCount.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/PreKeyCount.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/PreKeyCount.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/PreKeyResponse.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/PreKeyResponse.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/PreKeyResponse.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/PreKeyResponse.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/PreKeyResponseItem.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/PreKeyResponseItem.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/PreKeyResponseItem.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/PreKeyResponseItem.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/PreKeyState.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/PreKeyState.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/PreKeyState.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/PreKeyState.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/Profile.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/Profile.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/Profile.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/Profile.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/ProfileAvatarUploadAttributes.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/ProfileAvatarUploadAttributes.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/ProfileAvatarUploadAttributes.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/ProfileAvatarUploadAttributes.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/ProvisioningMessage.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/ProvisioningMessage.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/ProvisioningMessage.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/ProvisioningMessage.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/RegistrationLock.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/RegistrationLock.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/RegistrationLock.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/RegistrationLock.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/RegistrationLockFailure.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/RegistrationLockFailure.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/RegistrationLockFailure.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/RegistrationLockFailure.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/SendMessageResponse.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/SendMessageResponse.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/SendMessageResponse.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/SendMessageResponse.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/SignedPreKey.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/SignedPreKey.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/SignedPreKey.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/SignedPreKey.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/StaleDevices.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/StaleDevices.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/StaleDevices.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/StaleDevices.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/UnregisteredEvent.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/UnregisteredEvent.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/UnregisteredEvent.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/UnregisteredEvent.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/UnregisteredEventList.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/UnregisteredEventList.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/entities/UnregisteredEventList.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/entities/UnregisteredEventList.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/http/FaultTolerantHttpClient.java b/service/src/main/java/org/whispersystems/textsecuregcm/http/FaultTolerantHttpClient.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/http/FaultTolerantHttpClient.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/http/FaultTolerantHttpClient.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/http/FormDataBodyPublisher.java b/service/src/main/java/org/whispersystems/textsecuregcm/http/FormDataBodyPublisher.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/http/FormDataBodyPublisher.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/http/FormDataBodyPublisher.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/limits/LeakyBucket.java b/service/src/main/java/org/whispersystems/textsecuregcm/limits/LeakyBucket.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/limits/LeakyBucket.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/limits/LeakyBucket.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/limits/LockingRateLimiter.java b/service/src/main/java/org/whispersystems/textsecuregcm/limits/LockingRateLimiter.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/limits/LockingRateLimiter.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/limits/LockingRateLimiter.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/limits/RateLimiter.java b/service/src/main/java/org/whispersystems/textsecuregcm/limits/RateLimiter.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/limits/RateLimiter.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/limits/RateLimiter.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/limits/RateLimiters.java b/service/src/main/java/org/whispersystems/textsecuregcm/limits/RateLimiters.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/limits/RateLimiters.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/limits/RateLimiters.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/liquibase/AbstractLiquibaseCommand.java b/service/src/main/java/org/whispersystems/textsecuregcm/liquibase/AbstractLiquibaseCommand.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/liquibase/AbstractLiquibaseCommand.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/liquibase/AbstractLiquibaseCommand.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/liquibase/CloseableLiquibase.java b/service/src/main/java/org/whispersystems/textsecuregcm/liquibase/CloseableLiquibase.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/liquibase/CloseableLiquibase.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/liquibase/CloseableLiquibase.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/liquibase/DbMigrateCommand.java b/service/src/main/java/org/whispersystems/textsecuregcm/liquibase/DbMigrateCommand.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/liquibase/DbMigrateCommand.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/liquibase/DbMigrateCommand.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/liquibase/DbStatusCommand.java b/service/src/main/java/org/whispersystems/textsecuregcm/liquibase/DbStatusCommand.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/liquibase/DbStatusCommand.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/liquibase/DbStatusCommand.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/liquibase/NameableDbCommand.java b/service/src/main/java/org/whispersystems/textsecuregcm/liquibase/NameableDbCommand.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/liquibase/NameableDbCommand.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/liquibase/NameableDbCommand.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/liquibase/NameableMigrationsBundle.java b/service/src/main/java/org/whispersystems/textsecuregcm/liquibase/NameableMigrationsBundle.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/liquibase/NameableMigrationsBundle.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/liquibase/NameableMigrationsBundle.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/mappers/DeviceLimitExceededExceptionMapper.java b/service/src/main/java/org/whispersystems/textsecuregcm/mappers/DeviceLimitExceededExceptionMapper.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/mappers/DeviceLimitExceededExceptionMapper.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/mappers/DeviceLimitExceededExceptionMapper.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/mappers/IOExceptionMapper.java b/service/src/main/java/org/whispersystems/textsecuregcm/mappers/IOExceptionMapper.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/mappers/IOExceptionMapper.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/mappers/IOExceptionMapper.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/mappers/InvalidWebsocketAddressExceptionMapper.java b/service/src/main/java/org/whispersystems/textsecuregcm/mappers/InvalidWebsocketAddressExceptionMapper.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/mappers/InvalidWebsocketAddressExceptionMapper.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/mappers/InvalidWebsocketAddressExceptionMapper.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/mappers/RateLimitExceededExceptionMapper.java b/service/src/main/java/org/whispersystems/textsecuregcm/mappers/RateLimitExceededExceptionMapper.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/mappers/RateLimitExceededExceptionMapper.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/mappers/RateLimitExceededExceptionMapper.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/metrics/CpuUsageGauge.java b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/CpuUsageGauge.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/metrics/CpuUsageGauge.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/metrics/CpuUsageGauge.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/metrics/FileDescriptorGauge.java b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/FileDescriptorGauge.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/metrics/FileDescriptorGauge.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/metrics/FileDescriptorGauge.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/metrics/FreeMemoryGauge.java b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/FreeMemoryGauge.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/metrics/FreeMemoryGauge.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/metrics/FreeMemoryGauge.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/metrics/JsonMetricsReporter.java b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/JsonMetricsReporter.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/metrics/JsonMetricsReporter.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/metrics/JsonMetricsReporter.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/metrics/JsonMetricsReporterFactory.java b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/JsonMetricsReporterFactory.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/metrics/JsonMetricsReporterFactory.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/metrics/JsonMetricsReporterFactory.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/metrics/LoggingNetworkAppenderFactory.java b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/LoggingNetworkAppenderFactory.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/metrics/LoggingNetworkAppenderFactory.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/metrics/LoggingNetworkAppenderFactory.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/metrics/NetworkGauge.java b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/NetworkGauge.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/metrics/NetworkGauge.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/metrics/NetworkGauge.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/metrics/NetworkReceivedGauge.java b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/NetworkReceivedGauge.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/metrics/NetworkReceivedGauge.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/metrics/NetworkReceivedGauge.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/metrics/NetworkSentGauge.java b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/NetworkSentGauge.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/metrics/NetworkSentGauge.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/metrics/NetworkSentGauge.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/providers/RedisClientFactory.java b/service/src/main/java/org/whispersystems/textsecuregcm/providers/RedisClientFactory.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/providers/RedisClientFactory.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/providers/RedisClientFactory.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/providers/RedisHealthCheck.java b/service/src/main/java/org/whispersystems/textsecuregcm/providers/RedisHealthCheck.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/providers/RedisHealthCheck.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/providers/RedisHealthCheck.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/providers/TimeProvider.java b/service/src/main/java/org/whispersystems/textsecuregcm/providers/TimeProvider.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/providers/TimeProvider.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/providers/TimeProvider.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/push/APNSender.java b/service/src/main/java/org/whispersystems/textsecuregcm/push/APNSender.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/push/APNSender.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/push/APNSender.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/push/ApnFallbackManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/push/ApnFallbackManager.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/push/ApnFallbackManager.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/push/ApnFallbackManager.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/push/ApnMessage.java b/service/src/main/java/org/whispersystems/textsecuregcm/push/ApnMessage.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/push/ApnMessage.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/push/ApnMessage.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/push/GCMSender.java b/service/src/main/java/org/whispersystems/textsecuregcm/push/GCMSender.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/push/GCMSender.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/push/GCMSender.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/push/GcmMessage.java b/service/src/main/java/org/whispersystems/textsecuregcm/push/GcmMessage.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/push/GcmMessage.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/push/GcmMessage.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/push/NotPushRegisteredException.java b/service/src/main/java/org/whispersystems/textsecuregcm/push/NotPushRegisteredException.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/push/NotPushRegisteredException.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/push/NotPushRegisteredException.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/push/PushSender.java b/service/src/main/java/org/whispersystems/textsecuregcm/push/PushSender.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/push/PushSender.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/push/PushSender.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/push/ReceiptSender.java b/service/src/main/java/org/whispersystems/textsecuregcm/push/ReceiptSender.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/push/ReceiptSender.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/push/ReceiptSender.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/push/RetryingApnsClient.java b/service/src/main/java/org/whispersystems/textsecuregcm/push/RetryingApnsClient.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/push/RetryingApnsClient.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/push/RetryingApnsClient.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/push/TransientPushFailureException.java b/service/src/main/java/org/whispersystems/textsecuregcm/push/TransientPushFailureException.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/push/TransientPushFailureException.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/push/TransientPushFailureException.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/push/WebsocketSender.java b/service/src/main/java/org/whispersystems/textsecuregcm/push/WebsocketSender.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/push/WebsocketSender.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/push/WebsocketSender.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/recaptcha/RecaptchaClient.java b/service/src/main/java/org/whispersystems/textsecuregcm/recaptcha/RecaptchaClient.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/recaptcha/RecaptchaClient.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/recaptcha/RecaptchaClient.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/redis/LuaScript.java b/service/src/main/java/org/whispersystems/textsecuregcm/redis/LuaScript.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/redis/LuaScript.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/redis/LuaScript.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/redis/RedisException.java b/service/src/main/java/org/whispersystems/textsecuregcm/redis/RedisException.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/redis/RedisException.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/redis/RedisException.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/redis/RedisOperation.java b/service/src/main/java/org/whispersystems/textsecuregcm/redis/RedisOperation.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/redis/RedisOperation.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/redis/RedisOperation.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/redis/ReplicatedJedisPool.java b/service/src/main/java/org/whispersystems/textsecuregcm/redis/ReplicatedJedisPool.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/redis/ReplicatedJedisPool.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/redis/ReplicatedJedisPool.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/s3/PolicySigner.java b/service/src/main/java/org/whispersystems/textsecuregcm/s3/PolicySigner.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/s3/PolicySigner.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/s3/PolicySigner.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/s3/PostPolicyGenerator.java b/service/src/main/java/org/whispersystems/textsecuregcm/s3/PostPolicyGenerator.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/s3/PostPolicyGenerator.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/s3/PostPolicyGenerator.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/s3/UrlSigner.java b/service/src/main/java/org/whispersystems/textsecuregcm/s3/UrlSigner.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/s3/UrlSigner.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/s3/UrlSigner.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/sms/SmsSender.java b/service/src/main/java/org/whispersystems/textsecuregcm/sms/SmsSender.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/sms/SmsSender.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/sms/SmsSender.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/sms/TwilioSmsSender.java b/service/src/main/java/org/whispersystems/textsecuregcm/sms/TwilioSmsSender.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/sms/TwilioSmsSender.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/sms/TwilioSmsSender.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/sqs/DirectoryQueue.java b/service/src/main/java/org/whispersystems/textsecuregcm/sqs/DirectoryQueue.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/sqs/DirectoryQueue.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/sqs/DirectoryQueue.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/AbusiveHostRule.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AbusiveHostRule.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/AbusiveHostRule.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/AbusiveHostRule.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/AbusiveHostRules.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AbusiveHostRules.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/AbusiveHostRules.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/AbusiveHostRules.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/Account.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/Account.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/Account.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/Account.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/AccountDatabaseCrawler.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountDatabaseCrawler.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/AccountDatabaseCrawler.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountDatabaseCrawler.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/AccountDatabaseCrawlerCache.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountDatabaseCrawlerCache.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/AccountDatabaseCrawlerCache.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountDatabaseCrawlerCache.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/AccountDatabaseCrawlerListener.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountDatabaseCrawlerListener.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/AccountDatabaseCrawlerListener.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountDatabaseCrawlerListener.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/AccountDatabaseCrawlerRestartException.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountDatabaseCrawlerRestartException.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/AccountDatabaseCrawlerRestartException.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountDatabaseCrawlerRestartException.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/Accounts.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/Accounts.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/Accounts.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/Accounts.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/ActiveUserCounter.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/ActiveUserCounter.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/ActiveUserCounter.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/ActiveUserCounter.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/Device.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/Device.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/Device.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/Device.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/DirectoryManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/DirectoryManager.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/DirectoryManager.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/DirectoryManager.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/DirectoryReconciler.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/DirectoryReconciler.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/DirectoryReconciler.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/DirectoryReconciler.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/DirectoryReconciliationClient.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/DirectoryReconciliationClient.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/DirectoryReconciliationClient.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/DirectoryReconciliationClient.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/FaultTolerantDatabase.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/FaultTolerantDatabase.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/FaultTolerantDatabase.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/FaultTolerantDatabase.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/KeyRecord.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/KeyRecord.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/KeyRecord.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/KeyRecord.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/Keys.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/Keys.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/Keys.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/Keys.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/Messages.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/Messages.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/Messages.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/Messages.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/MessagesCache.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/MessagesCache.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/MessagesCache.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/MessagesCache.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/MessagesManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/MessagesManager.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/MessagesManager.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/MessagesManager.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/PendingAccounts.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/PendingAccounts.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/PendingAccounts.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/PendingAccounts.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/PendingAccountsManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/PendingAccountsManager.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/PendingAccountsManager.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/PendingAccountsManager.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/PendingDevices.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/PendingDevices.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/PendingDevices.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/PendingDevices.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/PendingDevicesManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/PendingDevicesManager.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/PendingDevicesManager.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/PendingDevicesManager.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/PubSubAddress.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/PubSubAddress.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/PubSubAddress.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/PubSubAddress.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/PubSubManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/PubSubManager.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/PubSubManager.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/PubSubManager.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/PubSubProtos.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/PubSubProtos.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/PubSubProtos.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/PubSubProtos.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/PublicAccount.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/PublicAccount.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/PublicAccount.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/PublicAccount.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/mappers/AbusiveHostRuleRowMapper.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/mappers/AbusiveHostRuleRowMapper.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/mappers/AbusiveHostRuleRowMapper.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/mappers/AbusiveHostRuleRowMapper.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/mappers/AccountRowMapper.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/mappers/AccountRowMapper.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/mappers/AccountRowMapper.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/mappers/AccountRowMapper.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/mappers/KeyRecordRowMapper.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/mappers/KeyRecordRowMapper.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/mappers/KeyRecordRowMapper.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/mappers/KeyRecordRowMapper.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/mappers/OutgoingMessageEntityRowMapper.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/mappers/OutgoingMessageEntityRowMapper.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/mappers/OutgoingMessageEntityRowMapper.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/mappers/OutgoingMessageEntityRowMapper.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/mappers/StoredVerificationCodeRowMapper.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/mappers/StoredVerificationCodeRowMapper.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/storage/mappers/StoredVerificationCodeRowMapper.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/storage/mappers/StoredVerificationCodeRowMapper.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/util/Base64.java b/service/src/main/java/org/whispersystems/textsecuregcm/util/Base64.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/util/Base64.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/util/Base64.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/util/BlockingThreadPoolExecutor.java b/service/src/main/java/org/whispersystems/textsecuregcm/util/BlockingThreadPoolExecutor.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/util/BlockingThreadPoolExecutor.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/util/BlockingThreadPoolExecutor.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/util/ByteArrayAdapter.java b/service/src/main/java/org/whispersystems/textsecuregcm/util/ByteArrayAdapter.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/util/ByteArrayAdapter.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/util/ByteArrayAdapter.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/util/ByteUtil.java b/service/src/main/java/org/whispersystems/textsecuregcm/util/ByteUtil.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/util/ByteUtil.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/util/ByteUtil.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/util/CircuitBreakerUtil.java b/service/src/main/java/org/whispersystems/textsecuregcm/util/CircuitBreakerUtil.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/util/CircuitBreakerUtil.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/util/CircuitBreakerUtil.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/util/Constants.java b/service/src/main/java/org/whispersystems/textsecuregcm/util/Constants.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/util/Constants.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/util/Constants.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/util/Conversions.java b/service/src/main/java/org/whispersystems/textsecuregcm/util/Conversions.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/util/Conversions.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/util/Conversions.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/util/ExecutorUtils.java b/service/src/main/java/org/whispersystems/textsecuregcm/util/ExecutorUtils.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/util/ExecutorUtils.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/util/ExecutorUtils.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/util/Hex.java b/service/src/main/java/org/whispersystems/textsecuregcm/util/Hex.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/util/Hex.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/util/Hex.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/util/IterablePair.java b/service/src/main/java/org/whispersystems/textsecuregcm/util/IterablePair.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/util/IterablePair.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/util/IterablePair.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/util/Pair.java b/service/src/main/java/org/whispersystems/textsecuregcm/util/Pair.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/util/Pair.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/util/Pair.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/util/SystemMapper.java b/service/src/main/java/org/whispersystems/textsecuregcm/util/SystemMapper.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/util/SystemMapper.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/util/SystemMapper.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/util/Util.java b/service/src/main/java/org/whispersystems/textsecuregcm/util/Util.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/util/Util.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/util/Util.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/util/VerificationCode.java b/service/src/main/java/org/whispersystems/textsecuregcm/util/VerificationCode.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/util/VerificationCode.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/util/VerificationCode.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/websocket/AuthenticatedConnectListener.java b/service/src/main/java/org/whispersystems/textsecuregcm/websocket/AuthenticatedConnectListener.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/websocket/AuthenticatedConnectListener.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/websocket/AuthenticatedConnectListener.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/websocket/DeadLetterHandler.java b/service/src/main/java/org/whispersystems/textsecuregcm/websocket/DeadLetterHandler.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/websocket/DeadLetterHandler.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/websocket/DeadLetterHandler.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/websocket/InvalidWebsocketAddressException.java b/service/src/main/java/org/whispersystems/textsecuregcm/websocket/InvalidWebsocketAddressException.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/websocket/InvalidWebsocketAddressException.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/websocket/InvalidWebsocketAddressException.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/websocket/ProvisioningAddress.java b/service/src/main/java/org/whispersystems/textsecuregcm/websocket/ProvisioningAddress.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/websocket/ProvisioningAddress.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/websocket/ProvisioningAddress.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/websocket/ProvisioningConnectListener.java b/service/src/main/java/org/whispersystems/textsecuregcm/websocket/ProvisioningConnectListener.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/websocket/ProvisioningConnectListener.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/websocket/ProvisioningConnectListener.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/websocket/ProvisioningConnection.java b/service/src/main/java/org/whispersystems/textsecuregcm/websocket/ProvisioningConnection.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/websocket/ProvisioningConnection.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/websocket/ProvisioningConnection.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/websocket/WebSocketAccountAuthenticator.java b/service/src/main/java/org/whispersystems/textsecuregcm/websocket/WebSocketAccountAuthenticator.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/websocket/WebSocketAccountAuthenticator.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/websocket/WebSocketAccountAuthenticator.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/websocket/WebSocketConnection.java b/service/src/main/java/org/whispersystems/textsecuregcm/websocket/WebSocketConnection.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/websocket/WebSocketConnection.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/websocket/WebSocketConnection.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/websocket/WebsocketAddress.java b/service/src/main/java/org/whispersystems/textsecuregcm/websocket/WebsocketAddress.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/websocket/WebsocketAddress.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/websocket/WebsocketAddress.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/workers/CertificateCommand.java b/service/src/main/java/org/whispersystems/textsecuregcm/workers/CertificateCommand.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/workers/CertificateCommand.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/workers/CertificateCommand.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/workers/DeleteUserCommand.java b/service/src/main/java/org/whispersystems/textsecuregcm/workers/DeleteUserCommand.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/workers/DeleteUserCommand.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/workers/DeleteUserCommand.java
diff --git a/src/main/java/org/whispersystems/textsecuregcm/workers/VacuumCommand.java b/service/src/main/java/org/whispersystems/textsecuregcm/workers/VacuumCommand.java
similarity index 100%
rename from src/main/java/org/whispersystems/textsecuregcm/workers/VacuumCommand.java
rename to service/src/main/java/org/whispersystems/textsecuregcm/workers/VacuumCommand.java
diff --git a/src/main/resources/META-INF/services/io.dropwizard.logging.AppenderFactory b/service/src/main/resources/META-INF/services/io.dropwizard.logging.AppenderFactory
similarity index 100%
rename from src/main/resources/META-INF/services/io.dropwizard.logging.AppenderFactory
rename to service/src/main/resources/META-INF/services/io.dropwizard.logging.AppenderFactory
diff --git a/src/main/resources/META-INF/services/io.dropwizard.metrics.ReporterFactory b/service/src/main/resources/META-INF/services/io.dropwizard.metrics.ReporterFactory
similarity index 100%
rename from src/main/resources/META-INF/services/io.dropwizard.metrics.ReporterFactory
rename to service/src/main/resources/META-INF/services/io.dropwizard.metrics.ReporterFactory
diff --git a/src/main/resources/abusedb.xml b/service/src/main/resources/abusedb.xml
similarity index 100%
rename from src/main/resources/abusedb.xml
rename to service/src/main/resources/abusedb.xml
diff --git a/src/main/resources/accountsdb.xml b/service/src/main/resources/accountsdb.xml
similarity index 100%
rename from src/main/resources/accountsdb.xml
rename to service/src/main/resources/accountsdb.xml
diff --git a/src/main/resources/banner.txt b/service/src/main/resources/banner.txt
similarity index 100%
rename from src/main/resources/banner.txt
rename to service/src/main/resources/banner.txt
diff --git a/src/main/resources/lua/account_database_crawler/unlock.lua b/service/src/main/resources/lua/account_database_crawler/unlock.lua
similarity index 100%
rename from src/main/resources/lua/account_database_crawler/unlock.lua
rename to service/src/main/resources/lua/account_database_crawler/unlock.lua
diff --git a/src/main/resources/lua/apn/get.lua b/service/src/main/resources/lua/apn/get.lua
similarity index 100%
rename from src/main/resources/lua/apn/get.lua
rename to service/src/main/resources/lua/apn/get.lua
diff --git a/src/main/resources/lua/apn/insert.lua b/service/src/main/resources/lua/apn/insert.lua
similarity index 100%
rename from src/main/resources/lua/apn/insert.lua
rename to service/src/main/resources/lua/apn/insert.lua
diff --git a/src/main/resources/lua/apn/remove.lua b/service/src/main/resources/lua/apn/remove.lua
similarity index 100%
rename from src/main/resources/lua/apn/remove.lua
rename to service/src/main/resources/lua/apn/remove.lua
diff --git a/src/main/resources/lua/get_items.lua b/service/src/main/resources/lua/get_items.lua
similarity index 100%
rename from src/main/resources/lua/get_items.lua
rename to service/src/main/resources/lua/get_items.lua
diff --git a/src/main/resources/lua/get_queues_to_persist.lua b/service/src/main/resources/lua/get_queues_to_persist.lua
similarity index 100%
rename from src/main/resources/lua/get_queues_to_persist.lua
rename to service/src/main/resources/lua/get_queues_to_persist.lua
diff --git a/src/main/resources/lua/insert_item.lua b/service/src/main/resources/lua/insert_item.lua
similarity index 100%
rename from src/main/resources/lua/insert_item.lua
rename to service/src/main/resources/lua/insert_item.lua
diff --git a/src/main/resources/lua/remove_item_by_guid.lua b/service/src/main/resources/lua/remove_item_by_guid.lua
similarity index 100%
rename from src/main/resources/lua/remove_item_by_guid.lua
rename to service/src/main/resources/lua/remove_item_by_guid.lua
diff --git a/src/main/resources/lua/remove_item_by_id.lua b/service/src/main/resources/lua/remove_item_by_id.lua
similarity index 100%
rename from src/main/resources/lua/remove_item_by_id.lua
rename to service/src/main/resources/lua/remove_item_by_id.lua
diff --git a/src/main/resources/lua/remove_item_by_sender.lua b/service/src/main/resources/lua/remove_item_by_sender.lua
similarity index 100%
rename from src/main/resources/lua/remove_item_by_sender.lua
rename to service/src/main/resources/lua/remove_item_by_sender.lua
diff --git a/src/main/resources/lua/remove_queue.lua b/service/src/main/resources/lua/remove_queue.lua
similarity index 100%
rename from src/main/resources/lua/remove_queue.lua
rename to service/src/main/resources/lua/remove_queue.lua
diff --git a/src/main/resources/messagedb.xml b/service/src/main/resources/messagedb.xml
similarity index 100%
rename from src/main/resources/messagedb.xml
rename to service/src/main/resources/messagedb.xml
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/auth/OptionalAccessTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/auth/OptionalAccessTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/auth/OptionalAccessTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/auth/OptionalAccessTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/AccountControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/AccountControllerTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/controllers/AccountControllerTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/AccountControllerTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/AttachmentControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/AttachmentControllerTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/controllers/AttachmentControllerTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/AttachmentControllerTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/CertificateControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/CertificateControllerTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/controllers/CertificateControllerTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/CertificateControllerTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/DeviceControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/DeviceControllerTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/controllers/DeviceControllerTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/DeviceControllerTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/DirectoryControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/DirectoryControllerTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/controllers/DirectoryControllerTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/DirectoryControllerTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/KeyControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/KeyControllerTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/controllers/KeyControllerTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/KeyControllerTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/MessageControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/MessageControllerTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/controllers/MessageControllerTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/MessageControllerTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/ProfileControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/ProfileControllerTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/controllers/ProfileControllerTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/ProfileControllerTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/TransparentDataControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/TransparentDataControllerTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/controllers/TransparentDataControllerTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/TransparentDataControllerTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/VoiceVerificationControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/VoiceVerificationControllerTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/controllers/VoiceVerificationControllerTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/VoiceVerificationControllerTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/entities/ClientContactTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/entities/ClientContactTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/entities/ClientContactTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/entities/ClientContactTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/entities/PreKeyTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/entities/PreKeyTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/entities/PreKeyTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/entities/PreKeyTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/http/FaultTolerantHttpClientTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/http/FaultTolerantHttpClientTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/http/FaultTolerantHttpClientTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/http/FaultTolerantHttpClientTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/limits/LeakyBucketTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/limits/LeakyBucketTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/limits/LeakyBucketTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/limits/LeakyBucketTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/push/APNSenderTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/push/APNSenderTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/push/APNSenderTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/push/APNSenderTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/push/GCMSenderTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/push/GCMSenderTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/push/GCMSenderTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/push/GCMSenderTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/redis/ReplicatedJedisPoolTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/redis/ReplicatedJedisPoolTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/redis/ReplicatedJedisPoolTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/redis/ReplicatedJedisPoolTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/s3/PolicySignerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/s3/PolicySignerTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/s3/PolicySignerTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/s3/PolicySignerTest.java
diff --git a/src/test/java/org/whispersystems/sms/TwilioSmsSenderTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/sms/TwilioSmsSenderTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/sms/TwilioSmsSenderTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/sms/TwilioSmsSenderTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AbusiveHostRulesTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AbusiveHostRulesTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/storage/AbusiveHostRulesTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AbusiveHostRulesTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountDatabaseCrawlerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountDatabaseCrawlerTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountDatabaseCrawlerTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountDatabaseCrawlerTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountsManagerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountsManagerTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountsManagerTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountsManagerTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountsTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountsTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountsTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountsTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/storage/ActiveUserCounterTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/ActiveUserCounterTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/storage/ActiveUserCounterTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/ActiveUserCounterTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/storage/DirectoryReconcilerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/DirectoryReconcilerTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/storage/DirectoryReconcilerTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/DirectoryReconcilerTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/storage/KeysTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/KeysTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/storage/KeysTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/KeysTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/storage/MessagesTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/MessagesTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/storage/MessagesTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/MessagesTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/storage/PendingAccountsTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/PendingAccountsTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/storage/PendingAccountsTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/PendingAccountsTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/storage/PendingDevicesTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/PendingDevicesTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/storage/PendingDevicesTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/PendingDevicesTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/storage/PublicAccountTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/PublicAccountTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/storage/PublicAccountTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/PublicAccountTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/util/AuthHelper.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/util/AuthHelper.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/util/AuthHelper.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/util/AuthHelper.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/util/BlockingThreadPoolExecutorTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/util/BlockingThreadPoolExecutorTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/util/BlockingThreadPoolExecutorTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/util/BlockingThreadPoolExecutorTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/util/JsonHelpers.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/util/JsonHelpers.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/util/JsonHelpers.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/util/JsonHelpers.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/util/NumberPrefixTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/util/NumberPrefixTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/util/NumberPrefixTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/util/NumberPrefixTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/util/SynchronousExecutorService.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/util/SynchronousExecutorService.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/util/SynchronousExecutorService.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/util/SynchronousExecutorService.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/util/UrlSignerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/util/UrlSignerTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/util/UrlSignerTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/util/UrlSignerTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/util/ValidNumberTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/util/ValidNumberTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/util/ValidNumberTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/util/ValidNumberTest.java
diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/websocket/WebSocketConnectionTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/websocket/WebSocketConnectionTest.java
similarity index 100%
rename from src/test/java/org/whispersystems/textsecuregcm/tests/websocket/WebSocketConnectionTest.java
rename to service/src/test/java/org/whispersystems/textsecuregcm/tests/websocket/WebSocketConnectionTest.java
diff --git a/src/test/resources/fixtures/contact.json b/service/src/test/resources/fixtures/contact.json
similarity index 100%
rename from src/test/resources/fixtures/contact.json
rename to service/src/test/resources/fixtures/contact.json
diff --git a/src/test/resources/fixtures/contact.relay.json b/service/src/test/resources/fixtures/contact.relay.json
similarity index 100%
rename from src/test/resources/fixtures/contact.relay.json
rename to service/src/test/resources/fixtures/contact.relay.json
diff --git a/src/test/resources/fixtures/contact.relay.video.json b/service/src/test/resources/fixtures/contact.relay.video.json
similarity index 100%
rename from src/test/resources/fixtures/contact.relay.video.json
rename to service/src/test/resources/fixtures/contact.relay.video.json
diff --git a/src/test/resources/fixtures/contact.relay.voice.json b/service/src/test/resources/fixtures/contact.relay.voice.json
similarity index 100%
rename from src/test/resources/fixtures/contact.relay.voice.json
rename to service/src/test/resources/fixtures/contact.relay.voice.json
diff --git a/src/test/resources/fixtures/current_message_extra_device.json b/service/src/test/resources/fixtures/current_message_extra_device.json
similarity index 100%
rename from src/test/resources/fixtures/current_message_extra_device.json
rename to service/src/test/resources/fixtures/current_message_extra_device.json
diff --git a/src/test/resources/fixtures/current_message_multi_device.json b/service/src/test/resources/fixtures/current_message_multi_device.json
similarity index 100%
rename from src/test/resources/fixtures/current_message_multi_device.json
rename to service/src/test/resources/fixtures/current_message_multi_device.json
diff --git a/src/test/resources/fixtures/current_message_registration_id.json b/service/src/test/resources/fixtures/current_message_registration_id.json
similarity index 100%
rename from src/test/resources/fixtures/current_message_registration_id.json
rename to service/src/test/resources/fixtures/current_message_registration_id.json
diff --git a/src/test/resources/fixtures/current_message_single_device.json b/service/src/test/resources/fixtures/current_message_single_device.json
similarity index 100%
rename from src/test/resources/fixtures/current_message_single_device.json
rename to service/src/test/resources/fixtures/current_message_single_device.json
diff --git a/src/test/resources/fixtures/legacy_message_single_device.json b/service/src/test/resources/fixtures/legacy_message_single_device.json
similarity index 100%
rename from src/test/resources/fixtures/legacy_message_single_device.json
rename to service/src/test/resources/fixtures/legacy_message_single_device.json
diff --git a/src/test/resources/fixtures/mismatched_registration_id.json b/service/src/test/resources/fixtures/mismatched_registration_id.json
similarity index 100%
rename from src/test/resources/fixtures/mismatched_registration_id.json
rename to service/src/test/resources/fixtures/mismatched_registration_id.json
diff --git a/src/test/resources/fixtures/missing_device_response.json b/service/src/test/resources/fixtures/missing_device_response.json
similarity index 100%
rename from src/test/resources/fixtures/missing_device_response.json
rename to service/src/test/resources/fixtures/missing_device_response.json
diff --git a/src/test/resources/fixtures/missing_device_response2.json b/service/src/test/resources/fixtures/missing_device_response2.json
similarity index 100%
rename from src/test/resources/fixtures/missing_device_response2.json
rename to service/src/test/resources/fixtures/missing_device_response2.json
diff --git a/src/test/resources/fixtures/prekey.json b/service/src/test/resources/fixtures/prekey.json
similarity index 100%
rename from src/test/resources/fixtures/prekey.json
rename to service/src/test/resources/fixtures/prekey.json
diff --git a/src/test/resources/fixtures/prekey_v2.json b/service/src/test/resources/fixtures/prekey_v2.json
similarity index 100%
rename from src/test/resources/fixtures/prekey_v2.json
rename to service/src/test/resources/fixtures/prekey_v2.json
diff --git a/src/test/resources/fixtures/transparent_account.json b/service/src/test/resources/fixtures/transparent_account.json
similarity index 100%
rename from src/test/resources/fixtures/transparent_account.json
rename to service/src/test/resources/fixtures/transparent_account.json
diff --git a/src/test/resources/fixtures/transparent_account2.json b/service/src/test/resources/fixtures/transparent_account2.json
similarity index 100%
rename from src/test/resources/fixtures/transparent_account2.json
rename to service/src/test/resources/fixtures/transparent_account2.json
diff --git a/src/test/resources/fixtures/voice_verification_en_us.xml b/service/src/test/resources/fixtures/voice_verification_en_us.xml
similarity index 100%
rename from src/test/resources/fixtures/voice_verification_en_us.xml
rename to service/src/test/resources/fixtures/voice_verification_en_us.xml
diff --git a/src/test/resources/fixtures/voice_verification_pt_br.xml b/service/src/test/resources/fixtures/voice_verification_pt_br.xml
similarity index 100%
rename from src/test/resources/fixtures/voice_verification_pt_br.xml
rename to service/src/test/resources/fixtures/voice_verification_pt_br.xml
diff --git a/src/test/resources/fixtures/voice_verification_ru.xml b/service/src/test/resources/fixtures/voice_verification_ru.xml
similarity index 100%
rename from src/test/resources/fixtures/voice_verification_ru.xml
rename to service/src/test/resources/fixtures/voice_verification_ru.xml
diff --git a/system.properties b/system.properties
deleted file mode 100644
index 97270b43f..000000000
--- a/system.properties
+++ /dev/null
@@ -1 +0,0 @@
-java.runtime.version=1.7